Codebase list assimp / b7896fb
Imported Upstream version 3.1.1~dfsg IOhannes m zmölnig 8 years ago
497 changed file(s) with 71367 addition(s) and 43857 deletion(s). Raw diff Collapse all Expand all
0 before_install:
1 - sudo apt-get install cmake
2
3 env:
4 - TRAVIS_NO_EXPORT=YES
5 - TRAVIS_NO_EXPORT=NO
6 - TRAVIS_STATIC_BUILD=ON
7 - TRAVIS_STATIC_BUILD=OFF
8
9 language: cpp
10
11 compiler:
12 - gcc
13 - clang
14
15 script: cmake -G "Unix Makefiles" -DASSIMP_ENABLE_BOOST_WORKAROUND=YES -DASSIMP_NO_EXPORT=$TRAVIS_NO_EXPORT -STATIC_BUILD=$TRAVIS_STATIC_BUILD && make
16
17
18
0 set(PACKAGE_VERSION "@ASSIMP_SOVERSION@")
0 set(ASSIMP_PACKAGE_VERSION "@ASSIMP_SOVERSION@")
11
22 # Check whether the requested PACKAGE_FIND_VERSION is compatible
3 if("${PACKAGE_VERSION}" VERSION_LESS "${PACKAGE_FIND_VERSION}")
4 set(PACKAGE_VERSION_COMPATIBLE FALSE)
3 if("${ASSIMP_PACKAGE_VERSION}" VERSION_LESS "${ASSIMP_PACKAGE_FIND_VERSION}")
4 set(ASSIMP_PACKAGE_VERSION_COMPATIBLE FALSE)
55 else()
6 set(PACKAGE_VERSION_COMPATIBLE TRUE)
7 if ("${PACKAGE_VERSION}" VERSION_EQUAL "${PACKAGE_FIND_VERSION}")
8 set(PACKAGE_VERSION_EXACT TRUE)
6 set(ASSIMP_PACKAGE_VERSION_COMPATIBLE TRUE)
7 if ("${ASSIMP_PACKAGE_VERSION}" VERSION_EQUAL "${ASSIMP_PACKAGE_FIND_VERSION}")
8 set(ASSIMP_PACKAGE_VERSION_EXACT TRUE)
99 endif()
1010 endif()
00 ----------------------------------------------------------------------
11 CHANGELOG
22 ----------------------------------------------------------------------
3
4
5 3.0 (2012-07-07)
6
7 FEATURES:
8 - new export interface similar to the import API.
9 - Supported export formats: Collada, OBJ, PLY and STL
10 - added new import formats: XGL/ZGL, M3 (experimental)
11 - new postprocessing steps: Debone
12 - vastly improved IFC (Industry Foundation Classes) support
13 - introduced API to query importer meta information (such as supported
14 format versions, full name, maintainer info).
15 - reworked Ogre XML import
16 - C-API now supports per-import properties
17
18 FIXES/HOUSEKEEPING:
19
20 - hundreds of bugfixes in all parts of the library
21 - unified naming and cleanup of public headers
22 - improved CMake build system
23 - templatized math library
24 - reduce dependency on boost.thread, only remaining spot
25 is synchronization for the C logging API
26
27 API COMPATIBILITY:
28 - renamed headers, export interface, C API properties and meta data
29 prevent compatibility with code written for 2.0, but in
30 most cases these can be easily resolved
31 - Note: 3.0 is not binary compatible with 2.0
32
333
434
535
4373
4474
4575
46
47
4876 1.1 (2010-04-17)
4977 This is the list of relevant changes from the 1.0 (r412) release to 1.1 (r700).
5078
84112
85113 MINOR API BEHAVIOUR CHANGES:
86114 - Change quaternion orientation to suit to the more common convention (-w).
87 - aiString is utf8 now. Not yet consistent, however.
115 - aiString is utf8 now. Not yet consistent, however.
11 PROJECT( Assimp )
22
33 # Define here the needed parameters
4 set (ASSIMP_SV_REVISION 1264)
54 set (ASSIMP_VERSION_MAJOR 3)
6 set (ASSIMP_VERSION_MINOR 0)
7 set (ASSIMP_VERSION_PATCH ${ASSIMP_SV_REVISION}) # subversion revision?
5 set (ASSIMP_VERSION_MINOR 1)
6 set (ASSIMP_VERSION_PATCH 1) # subversion revision?
87 set (ASSIMP_VERSION ${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}.${ASSIMP_VERSION_PATCH})
98 set (ASSIMP_SOVERSION 3)
10 SET ( PROJECT_VERSION "${ASSIMP_VERSION}" )
11
12 set(PACKAGE_VERSION "0" CACHE STRING "the package-specific version used for uploading the sources")
13
14 option(OPT_BUILD_PACKAGES "Set to ON to generate CPack configuration files and packaging targets" OFF)
15 set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules")
16 set(LIBASSIMP_COMPONENT libassimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}-r${ASSIMP_SV_REVISION})
17 set(LIBASSIMP-DEV_COMPONENT libassimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}-r${ASSIMP_SV_REVISION}-dev)
9 set (PROJECT_VERSION "${ASSIMP_VERSION}")
10
11 set(ASSIMP_PACKAGE_VERSION "0" CACHE STRING "the package-specific version used for uploading the sources")
12
13 # Get the current working branch
14 execute_process(
15 COMMAND git rev-parse --abbrev-ref HEAD
16 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
17 OUTPUT_VARIABLE GIT_BRANCH
18 OUTPUT_STRIP_TRAILING_WHITESPACE
19 )
20
21 # Get the latest abbreviated commit hash of the working branch
22 execute_process(
23 COMMAND git log -1 --format=%h
24 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
25 OUTPUT_VARIABLE GIT_COMMIT_HASH
26 OUTPUT_STRIP_TRAILING_WHITESPACE
27 )
28
29 if(NOT GIT_COMMIT_HASH)
30 set(GIT_COMMIT_HASH 0)
31 endif(NOT GIT_COMMIT_HASH)
32
33 configure_file(
34 ${CMAKE_SOURCE_DIR}/revision.h.in
35 ${CMAKE_BINARY_DIR}/revision.h
36 )
37
38 include_directories(${CMAKE_BINARY_DIR})
39
40 option(ASSIMP_OPT_BUILD_PACKAGES "Set to ON to generate CPack configuration files and packaging targets" OFF)
41 set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules" )
42 set(LIBASSIMP_COMPONENT "libassimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}.${ASSIMP_VERSION_PATCH}" )
43 set(LIBASSIMP-DEV_COMPONENT "libassimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}.${ASSIMP_VERSION_PATCH}-dev" )
1844 set(CPACK_COMPONENTS_ALL assimp-bin ${LIBASSIMP_COMPONENT} ${LIBASSIMP-DEV_COMPONENT} assimp-dev)
19
20 if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
45 set(ASSIMP_LIBRARY_SUFFIX "" CACHE STRING "Suffix to append to library names")
46
47 if((CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) AND NOT CMAKE_COMPILER_IS_MINGW)
2148 add_definitions(-fPIC) # this is a very important switch and some libraries seem now to have it....
22 ## hide all not-exported symbols
23 add_definitions( -fvisibility=hidden )
49 # hide all not-exported symbols
50 add_definitions( -fvisibility=hidden -Wall )
51 elseif(MSVC)
52 # enable multi-core compilation with MSVC
53 add_definitions(/MP)
2454 endif()
2555
2656 INCLUDE (FindPkgConfig)
2757 INCLUDE_DIRECTORIES( include )
58
59 INCLUDE (PrecompiledHeader)
2860
2961 # If this is an in-source build (CMAKE_SOURCE_DIR == CMAKE_BINARY_DIR),
3062 # write the library/executable files to the respective directories in the
3163 # source tree. During an out-of-source build, however, do not litter this
3264 # directory, since that is probably what the user wanted to avoid.
3365 IF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
34 SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/lib )
35 SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/lib )
36 SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_HOME_DIRECTORY}/bin )
66 SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_HOME_DIRECTORY}/lib" )
67 SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_HOME_DIRECTORY}/lib" )
68 SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_HOME_DIRECTORY}/bin" )
3769 ENDIF ( CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR )
3870
3971 # Cache these to allow the user to override them manually.
40 SET( LIB_INSTALL_DIR "lib" CACHE PATH
72 SET( ASSIMP_LIB_INSTALL_DIR "lib" CACHE PATH
4173 "Path the built library files are installed to." )
42 SET( INCLUDE_INSTALL_DIR "include" CACHE PATH
74 SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE PATH
4375 "Path the header files are installed to." )
44 SET( BIN_INSTALL_DIR "bin" CACHE PATH
76 SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE PATH
4577 "Path the tool executables are installed to." )
46
47 SET(DEBUG_POSTFIX "D" CACHE STRING "Debug Postfitx for lib, samples and tools")
78 SET ( ASSIMP_BUILD_STATIC_LIB OFF CACHE BOOL
79 "Build a static (.a) version of the library" )
80
81 SET(ASSIMP_DEBUG_POSTFIX "d" CACHE STRING "Debug Postfitx for lib, samples and tools")
82
83 # Allow the user to build a static library
84 option ( BUILD_SHARED_LIBS "Build a shared version of the library" ON )
85 IF ( ASSIMP_BUILD_STATIC_LIB )
86 option ( BUILD_SHARED_LIBS "Build a shared version of the library" OFF )
87 ELSE ( ASSIMP_BUILD_STATIC_LIB )
88 option ( BUILD_SHARED_LIBS "Build a shared version of the library" ON )
89 ENDIF ( ASSIMP_BUILD_STATIC_LIB )
4890
4991 # Generate a pkg-config .pc for the Assimp library.
5092 CONFIGURE_FILE( "${PROJECT_SOURCE_DIR}/assimp.pc.in" "${PROJECT_BINARY_DIR}/assimp.pc" @ONLY )
51 INSTALL( FILES "${PROJECT_BINARY_DIR}/assimp.pc" DESTINATION ${LIB_INSTALL_DIR}/pkgconfig/ COMPONENT ${LIBASSIMP-DEV_COMPONENT})
52
53 # cmake configuration files
54 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" @ONLY IMMEDIATE)
55 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config-version.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config-version.cmake" @ONLY IMMEDIATE)
56 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 ${LIBASSIMP-DEV_COMPONENT})
57
58 # add make uninstall capability
59 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY)
60 add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
61
62 # Allow the user to build a static library
63 SET ( BUILD_STATIC_LIB OFF CACHE BOOL
64 "Build a static (.a) version of the library"
65 )
66
67 # Globally enbale Boost resp. the Boost workaround – it is also needed by the
93 INSTALL( FILES "${PROJECT_BINARY_DIR}/assimp.pc" DESTINATION ${ASSIMP_LIB_INSTALL_DIR}/pkgconfig/ COMPONENT ${LIBASSIMP-DEV_COMPONENT})
94
95 # Only generate this target if no higher-level project already has
96 IF (NOT TARGET uninstall)
97 # add make uninstall capability
98 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake-modules/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY)
99 add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
100 ENDIF()
101
102 # Globally enable Boost resp. the Boost workaround – it is also needed by the
68103 # tools which include the Assimp headers.
69 SET ( ENABLE_BOOST_WORKAROUND OFF CACHE BOOL
104 SET ( ASSIMP_ENABLE_BOOST_WORKAROUND ON CACHE BOOL
70105 "If a simple implementation of the used Boost functions is used. Slightly reduces functionality, but enables builds without Boost available."
71106 )
72 IF ( ENABLE_BOOST_WORKAROUND )
107 IF ( ASSIMP_ENABLE_BOOST_WORKAROUND )
73108 INCLUDE_DIRECTORIES( code/BoostWorkaround )
74109 ADD_DEFINITIONS( -DASSIMP_BUILD_BOOST_WORKAROUND )
75110 MESSAGE( STATUS "Building a non-boost version of Assimp." )
76 ELSE ( ENABLE_BOOST_WORKAROUND )
111 ELSE ( ASSIMP_ENABLE_BOOST_WORKAROUND )
77112 SET( Boost_DETAILED_FAILURE_MSG ON )
78 SET( Boost_ADDITIONAL_VERSIONS "1.47" "1.47.0" "1.48.0" "1.48" "1.49" "1.49.0" "1.50")
113 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" "1.52.0" "1.53.0" "1.54.0" "1.55" )
79114 FIND_PACKAGE( Boost )
80115 IF ( NOT Boost_FOUND )
81116 MESSAGE( FATAL_ERROR
82117 "Boost libraries (http://www.boost.org/) not found. "
83118 "You can build a non-boost version of Assimp with slightly reduced "
84 "functionality by specifying -DENABLE_BOOST_WORKAROUND=ON."
119 "functionality by specifying -DASSIMP_ENABLE_BOOST_WORKAROUND=ON."
85120 )
86121 ENDIF ( NOT Boost_FOUND )
87122
88123 INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIRS} )
89 ENDIF ( ENABLE_BOOST_WORKAROUND )
90
91
92 SET ( NO_EXPORT OFF CACHE BOOL
124 ENDIF ( ASSIMP_ENABLE_BOOST_WORKAROUND )
125
126 # cmake configuration files
127 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config.cmake" @ONLY IMMEDIATE)
128 configure_file("${CMAKE_CURRENT_SOURCE_DIR}/assimp-config-version.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/assimp-config-version.cmake" @ONLY IMMEDIATE)
129 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})
130
131 SET ( ASSIMP_NO_EXPORT OFF CACHE BOOL
93132 "Disable Assimp's export functionality."
94133 )
95134
104143 # compile from sources
105144 add_subdirectory(contrib/zlib)
106145 set(ZLIB_FOUND 1)
107 set(ZLIB_LIBRARIES zlib)
108 set(ZLIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/zlib)
146 set(ZLIB_LIBRARIES zlibstatic)
147 set(ZLIB_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/contrib/zlib ${CMAKE_CURRENT_BINARY_DIR}/contrib/zlib)
109148 else(NOT ZLIB_FOUND)
110149 ADD_DEFINITIONS(-DASSIMP_BUILD_NO_OWN_ZLIB)
111150 endif(NOT ZLIB_FOUND)
116155 PKG_CHECK_MODULES(UNZIP minizip)
117156 endif (PKG_CONFIG_FOUND)
118157
119 IF ( NO_EXPORT )
158 IF ( ASSIMP_NO_EXPORT )
120159 ADD_DEFINITIONS( -DASSIMP_BUILD_NO_EXPORT)
121160 MESSAGE( STATUS "Build an import-only version of Assimp." )
122 ENDIF( NO_EXPORT )
123
124
161 ENDIF( ASSIMP_NO_EXPORT )
162
163 # if(CMAKE_CL_64)
164 # set(ASSIMP_BUILD_ARCHITECTURE "amd64")
165 # else(CMAKE_CL_64)
166 # set(ASSIMP_BUILD_ARCHITECTURE "x86")
167 # endif(CMAKE_CL_64)
125168 SET ( ASSIMP_BUILD_ARCHITECTURE "" CACHE STRING
126169 "describe the current architecture."
127170 )
130173 ADD_DEFINITIONS ( -D'ASSIMP_BUILD_ARCHITECTURE="${ASSIMP_BUILD_ARCHITECTURE}"' )
131174 ENDIF ( ASSIMP_BUILD_ARCHITECTURE STREQUAL "")
132175
176 # ${CMAKE_GENERATOR}
133177 SET ( ASSIMP_BUILD_COMPILER "" CACHE STRING
134178 "describe the current compiler."
135179 )
140184
141185 MARK_AS_ADVANCED ( ASSIMP_BUILD_ARCHITECTURE ASSIMP_BUILD_COMPILER )
142186
143
144187 ADD_SUBDIRECTORY( code/ )
145 SET ( BUILD_ASSIMP_TOOLS ON CACHE BOOL
188 SET ( ASSIMP_BUILD_ASSIMP_TOOLS ON CACHE BOOL
146189 "If the supplementary tools for Assimp are built in addition to the library."
147190 )
148 IF ( BUILD_ASSIMP_TOOLS )
191 IF ( ASSIMP_BUILD_ASSIMP_TOOLS )
149192 IF ( WIN32 )
150193 ADD_SUBDIRECTORY( tools/assimp_view/ )
151194 ENDIF ( WIN32 )
152195 ADD_SUBDIRECTORY( tools/assimp_cmd/ )
153 ENDIF ( BUILD_ASSIMP_TOOLS )
154
155 SET ( BUILD_ASSIMP_SAMPLES ON CACHE BOOL
196 ENDIF ( ASSIMP_BUILD_ASSIMP_TOOLS )
197
198 SET ( ASSIMP_BUILD_SAMPLES OFF CACHE BOOL
156199 "If the official samples are built as well (needs Glut)."
157200 )
158201
159 IF ( BUILD_ASSIMP_SAMPLES)
202 IF ( ASSIMP_BUILD_SAMPLES)
160203 IF ( WIN32 )
161204 ADD_SUBDIRECTORY( samples/SimpleTexturedOpenGL/ )
162205 ENDIF ( WIN32 )
163206 ADD_SUBDIRECTORY( samples/SimpleOpenGL/ )
164 ENDIF ( BUILD_ASSIMP_SAMPLES )
165
166 SET ( BUILD_TESTS OFF CACHE BOOL
167 "If the test suite for Assimp is built in addition to the library."
168 )
169 IF ( BUILD_TESTS )
170 IF ( WIN32 )
207 ENDIF ( ASSIMP_BUILD_SAMPLES )
208
209 IF ( WIN32 )
210 SET ( ASSIMP_BUILD_TESTS ON CACHE BOOL
211 "If the test suite for Assimp is built in addition to the library."
212 )
213
214 IF ( ASSIMP_BUILD_TESTS )
171215 ADD_SUBDIRECTORY( test/ )
172 ELSE ( WIN32 )
173 MESSAGE( WARNING "The Assimp test suite is currently Windows-only." )
174 ENDIF ( WIN32 )
175 ENDIF ( BUILD_TESTS )
176
177 if(CMAKE_CPACK_COMMAND AND UNIX AND OPT_BUILD_PACKAGES)
216 ENDIF ( ASSIMP_BUILD_TESTS )
217 ENDIF ( WIN32 )
218
219 IF(MSVC)
220 SET ( ASSIMP_INSTALL_PDB ON CACHE BOOL
221 "Install MSVC debug files."
222 )
223 ENDIF(MSVC)
224
225 if(CMAKE_CPACK_COMMAND AND UNIX AND ASSIMP_OPT_BUILD_PACKAGES)
178226 # Packing information
179 set(CPACK_PACKAGE_NAME assimp{ASSIMP_VERSION_MAJOR})
227 set(CPACK_PACKAGE_NAME "assimp{ASSIMP_VERSION_MAJOR}")
180228 set(CPACK_PACKAGE_CONTACT "" CACHE STRING "Package maintainer and PGP signer.")
181 set(CPACK_PACKAGE_VENDOR "http://assimp.sourceforge.net/")
182 set(CPACK_PACKAGE_DISPLAY_NAME "Assimp ${ASSIMP_VERSION}")
183 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY " - Open Asset Import Library ${ASSIMP_VERSION}")
184 set(CPACK_PACKAGE_VERSION ${ASSIMP_VERSION}.${PACKAGE_VERSION})
185 set(CPACK_PACKAGE_VERSION_MAJOR ${ASSIMP_VERSION_MAJOR})
186 set(CPACK_PACKAGE_VERSION_MINOR ${ASSIMP_VERSION_MINOR})
187 set(CPACK_PACKAGE_VERSION_PATCH ${ASSIMP_VERSION_PATCH})
188 set(CPACK_PACKAGE_INSTALL_DIRECTORY "assimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}")
189 #set(CPACK_PACKAGE_DESCRIPTION_FILE ${CMAKE_CURRENT_SOURCE_DIR}/description)
190 set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE)
191
192 string(TOUPPER ${LIBASSIMP_COMPONENT} LIBASSIMP_COMPONENT_UPPER)
193 string(TOUPPER ${LIBASSIMP-DEV_COMPONENT} LIBASSIMP-DEV_COMPONENT_UPPER)
194
195 set(CPACK_COMPONENT_ASSIMP-BIN_DISPLAY_NAME "tools")
196 set(CPACK_COMPONENT_ASSIMP-BIN_DEPENDS ${LIBASSIMP_COMPONENT})
197 set(CPACK_COMPONENT_${LIBASSIMP_COMPONENT_UPPER}_DISPLAY_NAME "libraries")
229 set(CPACK_PACKAGE_VENDOR "http://assimp.sourceforge.net/")
230 set(CPACK_PACKAGE_DISPLAY_NAME "Assimp ${ASSIMP_VERSION}")
231 set(CPACK_PACKAGE_DESCRIPTION_SUMMARY " - Open Asset Import Library ${ASSIMP_VERSION}")
232 set(CPACK_PACKAGE_VERSION "${ASSIMP_VERSION}.${ASSIMP_PACKAGE_VERSION}" )
233 set(CPACK_PACKAGE_VERSION_MAJOR "${ASSIMP_VERSION_MAJOR}")
234 set(CPACK_PACKAGE_VERSION_MINOR "${ASSIMP_VERSION_MINOR}")
235 set(CPACK_PACKAGE_VERSION_PATCH "${ASSIMP_VERSION_PATCH}")
236 set(CPACK_PACKAGE_INSTALL_DIRECTORY "assimp${ASSIMP_VERSION_MAJOR}.${ASSIMP_VERSION_MINOR}")
237 #set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/description")
238 set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
239
240 string(TOUPPER ${LIBASSIMP_COMPONENT} "LIBASSIMP_COMPONENT_UPPER")
241 string(TOUPPER ${LIBASSIMP-DEV_COMPONENT} "LIBASSIMP-DEV_COMPONENT_UPPER")
242
243 set(CPACK_COMPONENT_ASSIMP-BIN_DISPLAY_NAME "tools")
244 set(CPACK_COMPONENT_ASSIMP-BIN_DEPENDS "${LIBASSIMP_COMPONENT}" )
245 set(CPACK_COMPONENT_${LIBASSIMP_COMPONENT_UPPER}_DISPLAY_NAME "libraries")
198246 set(CPACK_COMPONENT_${LIBASSIMP-DEV_COMPONENT_UPPER}_DISPLAY_NAME "common headers and installs")
199 set(CPACK_COMPONENT_${LIBASSIMP-DEV_COMPONENT_UPPER}_DEPENDS ${LIBASSIMP_COMPONENT})
200 set(CPACK_COMPONENT_ASSIMP-DEV_DISPLAY_NAME ${CPACK_COMPONENT_${LIBASSIMP-DEV_COMPONENT}_DISPLAY_NAME})
201 set(CPACK_COMPONENT_ASSIMP-DEV_DEPENDS ${LIBASSIMP-DEV_COMPONENT})
247 set(CPACK_COMPONENT_${LIBASSIMP-DEV_COMPONENT_UPPER}_DEPENDS $ "{LIBASSIMP_COMPONENT}" )
248 set(CPACK_COMPONENT_ASSIMP-DEV_DISPLAY_NAME "${CPACK_COMPONENT_${LIBASSIMP-DEV_COMPONENT}_DISPLAY_NAME}" )
249 set(CPACK_COMPONENT_ASSIMP-DEV_DEPENDS "${LIBASSIMP-DEV_COMPONENT}" )
202250 set(CPACK_DEBIAN_BUILD_DEPENDS debhelper cmake libboost-dev libboost-thread-dev libboost-math-dev zlib1g-dev pkg-config)
203251
204252 # debian
205 set(CPACK_DEBIAN_PACKAGE_PRIORITY optional)
206 set(CPACK_DEBIAN_CMAKE_OPTIONS "-DBUILD_ASSIMP_SAMPLES:BOOL=${BUILD_ASSIMP_SAMPLES}")
207 set(CPACK_DEBIAN_PACKAGE_SECTION libs)
208 set(CPACK_DEBIAN_PACKAGE_DEPENDS ${CPACK_COMPONENTS_ALL})
253 set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
254 set(CPACK_DEBIAN_CMAKE_OPTIONS "-DBUILD_ASSIMP_SAMPLES:BOOL=${ASSIMP_BUILD_SAMPLES}")
255 set(CPACK_DEBIAN_PACKAGE_SECTION "libs" )
256 set(CPACK_DEBIAN_PACKAGE_DEPENDS "${CPACK_COMPONENTS_ALL}")
209257 set(CPACK_DEBIAN_PACKAGE_SUGGESTS)
210 set(CPACK_DEBIAN_PACKAGE_NAME assimp)
258 set(CPACK_DEBIAN_PACKAGE_NAME "assimp")
211259 set(CPACK_DEBIAN_PACKAGE_REMOVE_SOURCE_FILES contrib/cppunit-1.12.1 contrib/cppunit_note.txt contrib/zlib workspaces test doc obj samples packaging)
212260 set(CPACK_DEBIAN_PACKAGE_SOURCE_COPY svn export --force)
213261 set(CPACK_DEBIAN_CHANGELOG)
22 Developers and Contributors
33 ===============================================================
44
5 The following is the list of all constributors.
6 Thanks for your help!
5 The following is a non-exhaustive list of all constributors over the years.
6 If you think your name should be listed here, drop us a line and we'll add you.
77
88 - Alexander Gessler,
99 3DS-, BLEND-, ASE-, DXF-, HMP-, MDL-, MD2-, MD3-, MD5-, MDC-, NFF-, PLY-, STL-, RAW-, OFF-, MS3D-, Q3D- and LWO-Loader, Assimp-Viewer, assimp-cmd, -noboost, Website (Admin and Design).
4040 - Andreas Nagel
4141 First Assimp testing & verification under Windows Vista 64 Bit.
4242
43 - Marius Schröder
43 - Marius Schr�der
4444 Allowed us to use many of his models for screenshots and testing.
4545
4646 - Christian Schubert
9191 - Matthias Fauconneau
9292 Contributed a fix for the Q3-BSP loader.
9393
94 - Jørgen P. Tjernø
94 - J�rgen P. Tjern�
9595 Contributed updated and improved xcode workspaces
9696
9797 - drparallax
134134 GCC/Linux fixes for the SimpleOpenGL sample.
135135
136136 - Brian Miller
137 Bugfix for a compiler fix for iOS on arm.
137 Bugfix for a compiler fix for iOS on arm.
138
139 - S�verin Lemaignan
140 Rewrite of PyAssimp, distutils and Python3 support
141
142 - albert-wang
143 Bugfixes for the collada parser
144
145 - Ya ping Jin
146 Bugfixes for uv-tanget calculation.
147
148 - Jonne Nauha
149 Ogre Binary format support
0 ===============================================
1 The Asset-Importer-Library Coding conventions
2 ===============================================
3
4 If you want to participate to the Asset-Importer_Library please have a look
5 onto these coding conventions and try to follow them. They are more or less
6 some kind of guide line to help others coming into the code and help all
7 the Asset-Importer-Library users.
8
9 Tab width
10 ===========
11 The tab width shall be 4 spaces.
12
13
11 ========================================================================
22 Open Asset Import Library (assimp) INSTALL
33 ========================================================================
4
54
65 ------------------------------
76 Getting the documentation
3434
3535
3636
37 ******************************************************************************
38
3739 AN EXCEPTION applies to all files in the ./test/models-nonbsd folder.
3840 These are 3d models for testing purposes, from various free sources
3941 on the internet. They are - unless otherwise stated - copyright of
4345 are a copyright holder and believe that we credited you inproperly or
4446 if you don't want your files to appear in the repository.
4547
48
49 ******************************************************************************
50
51 Poly2Tri Copyright (c) 2009-2010, Poly2Tri Contributors
52 http://code.google.com/p/poly2tri/
53
54 All rights reserved.
55 Redistribution and use in source and binary forms, with or without modification,
56 are permitted provided that the following conditions are met:
57
58 * Redistributions of source code must retain the above copyright notice,
59 this list of conditions and the following disclaimer.
60 * Redistributions in binary form must reproduce the above copyright notice,
61 this list of conditions and the following disclaimer in the documentation
62 and/or other materials provided with the distribution.
63 * Neither the name of Poly2Tri nor the names of its contributors may be
64 used to endorse or promote products derived from this software without specific
65 prior written permission.
66
67 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
68 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
69 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
70 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
71 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
72 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
73 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
74 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
75 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
76 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
77 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
78
79
80
81
82
83
+0
-2
ProjectHome.url less more
0 [InternetShortcut]
1 URL=http://sourceforge.net/projects/assimp/
0
1 ========================================================================
2 Open Asset Import Library (assimp) README
3 ========================================================================
4
5
6 Table of Contents
7
8 1. Overview
9 1.1 Supported file formats
10 1.2 File structure
11 2. Build the library
12 3. Where to get help
13 4. License
14
15
16 ------------------------------
17 1. Overview
18 ------------------------------
19
20 Open Asset Import Library is a Open Source library designed to load various 3d
21 file formats and convert them into a shared, in-memory format. It supports more
22 than 30 file formats (basically, it is like DevIL for 3D models). It also
23 supports exporting, but the number of export formats is lower.
24
25 Its short name is 'assimp', which is an unintended joke (the abbreviation is
26 derived from 'Asset Importer').
27
28 Note: this README refers to the file structure used by release packages, which
29 differs in some points from the development trunk.
30
31 ----------------
32 1.1 Supported file formats
33 ----------------
34
35 The library provides importers for a lot of file formats, including:
36 - 3DS
37 - BLEND
38 - DAE (Collada)
39 - IFC-STEP
40 - ASE
41 - DXF
42 - HMP
43 - MD2
44 - MD3
45 - MD5
46 - MDC
47 - MDL
48 - NFF
49 - PLY
50 - STL
51 - X
52 - OBJ
53 - SMD
54 - LWO
55 - LXO
56 - LWS
57 - XML
58 - TER
59 - AC3D
60 - MS3D
61
62 Exporters include:
63 - DAE (Collada)
64 - STL
65 - OBJ
66
67 .. See http://assimp.sourceforge.net/main_features_formats.html for
68 a more exhaustive list.
69
70
71 ----------------
72 1.2 Repository structure
73 ----------------
74
75 Open Asset Import Library is implemented in C++ (but provides both a C and a
76 C++ish interface). The directory structure is:
77
78 /bin Folder for binaries, only used on Windows
79 /code Source code
80 /contrib Third-party libraries
81 /doc Documentation (doxysource and pre-compiled docs)
82 /include Public header C and C++ header files.
83 /lib Static library location for Windows.
84 /obj Object file location for Windows.
85 /port Ports to other languages and scripts to maintain those.
86 /test Unit- and regression tests, test suite of models.
87 /tools Tools (viewer, command line `assimp`).
88 /samples A small number of samples to illustrate possible
89 use cases for Assimp.
90 /workspaces Build enviroments for vc,xcode,... (deprecated,
91 CMake has superseeded all legacy build options!)
92
93
94 ------------------------------
95 2. Build the library
96 ------------------------------
97
98 Take a look into the INSTALL file.
99
100
101 ------------------------------
102 3. Where to get help
103 ------------------------------
104
105 For more information, visit http://assimp.sourceforge.net/. Or have a look into
106 the ./doc- folder, which contains the official documentation in HTML format.
107 (CHMs for Windows are included in some release packages and should be located
108 right here in the root folder).
109
110 If the documentation doesn't solve your problems, try our forums at SF.net
111 > Open Discussion: http://sourceforge.net/projects/assimp/forums/forum/817653)
112 > General Help: http://sourceforge.net/projects/assimp/forums/forum/817654
113
114 For development stuff, there is also a mailing list, assimp-discussions
115 subscribe: https://lists.sourceforge.net/lists/listinfo/assimp-discussions
116
117
118 ------------------------------
119 4. License
120 ------------------------------
121
122 The license of the Asset Import Library is based on the modified, 3-clause BSD-
123 License, which is a very liberal license. An _informal_ summary is: do whatever
124 you want, but include Assimp's license text with your product - and don't sue
125 us if our code doesn't work.
126
127 Note that, unlike LGPLed code, you may link statically to Assimp.
128 For the formal details, see the LICENSE file.
129
0 See Readme.md
0 Open Asset Import Library (_assimp_)
0 Open Asset Import Library (assimp)
11 ========
22
3 Open Asset Import Library is a Open Source library designed to load various __3d file formats and convert them into a shared, in-memory format__. It supports more than __30 file formats__ for import and a growing selection of file formats for export. Additionally, assimp features various __post processing tools__ to refine the imported data: _normals and tangent space generation, triangulation, vertex cache locality optimization, removal of degenerate primitives and duplicate vertices, sorting by primitive type, merging of redundant materials_ and many more.
34
4 Table of contents
5 This is the development trunk of assimp containing the latest features and bugfixes. For productive use though, we recommend one of the stable releases available from [assimp.sf.net](http://assimp.sf.net) or from *nix package repositories. According to [Travis-CI] (https://travis-ci.org/), the current build status of the trunk is [![Build Status](https://travis-ci.org/assimp/assimp.png)](https://travis-ci.org/assimp/assimp)
56
6 1. Overview
7 1.1 Supported file formats
8 1.2 File structure
9 2. Build the library
10 3. Where to get help
11 4. License
12
13
14
15
16 ### 1. Overview ###
17
18
19 Open Asset Import Library is a Open Source library designed to load various 3d file formats and convert them into a shared, in-memory format. It supports more than 30 file formats. It also supports exporting files to a few selected file formats.
20
21 Its short name is _assimp_, which is an unintended joke (the abbreviation is derived from _Asset Importer_).
22
23 __Note__: this `README` refers to the file structure used by release packages, which differs in some points from the development trunk.
24
25
26 #### 1.1 Supported file formats ####
7 #### Supported file formats ####
278
289 The library provides importers for a lot of file formats, including:
2910
3011 - 3DS
31 - BLEND
32 - DAE (Collada)
12 - BLEND (Blender 3D)
13 - DAE/Collada
14 - FBX
3315 - IFC-STEP
3416 - ASE
3517 - DXF
4729 - SMD
4830 - LWO
4931 - LXO
50 - LWS
51 - XML
32 - LWS
5233 - TER
5334 - AC3D
5435 - MS3D
36 - COB
37 - Q3BSP
38 - XGL
39 - CSM
40 - BVH
41 - B3D
42 - NDO
43 - Ogre Binary
44 - Ogre XML
45 - Q3D
46
47 Additionally, the following formats are also supported, but not part of the core library as they depend on proprietary libraries.
48
49 - C4D (https://github.com/acgessler/assimp-cinema4d)
5550
5651 Exporters include:
5752
5853 - DAE (Collada)
5954 - STL
6055 - OBJ
56 - PLY
57 - JSON (for WebGl, via https://github.com/acgessler/assimp2json)
6158
6259 See [the full list here](http://assimp.sourceforge.net/main_features_formats.html).
6360
6461
6562
66 #### 1.2 Repository structure ####
63 #### Repository structure ####
6764
6865
6966 Open Asset Import Library is implemented in C++ (but provides both a C and a
7370 /code Source code
7471 /contrib Third-party libraries
7572 /doc Documentation (doxysource and pre-compiled docs)
76 /include Public header C and C++ header files.
77 /lib Static library location for Windows.
78 /obj Object file location for Windows.
79 /port Ports to other languages and scripts to maintain those.
80 /test Unit- and regression tests, test suite of models.
81 /tools Tools (viewer, command line `assimp`).
73 /include Public header C and C++ header files
74 /lib Static library location for Windows
75 /obj Object file location for Windows
76 /scripts Scripts used to generate the loading code for some formats
77 /port Ports to other languages and scripts to maintain those.
78 /test Unit- and regression tests, test suite of models
79 /tools Tools (viewer, command line `assimp`)
8280 /samples A small number of samples to illustrate possible
83 use cases for Assimp.
81 use cases for Assimp
8482 /workspaces Build enviroments for vc,xcode,... (deprecated,
8583 CMake has superseeded all legacy build options!)
8684
8785
8886
89 ### 2. Build the library ###
87 ### Building ###
9088
9189
92 Take a look into the `INSTALL` file. Or fire up CMake with the usual steps.
90 Take a look into the `INSTALL` file. Our build system is CMake, if you already used CMake before there is a good chance you know what to do.
9391
9492
95
96 ### 3. Where to get help ###
93 ### Where to get help ###
9794
9895
9996 For more information, visit [our website](http://assimp.sourceforge.net/). Or check out the `./doc`- folder, which contains the official documentation in HTML format.
10097 (CHMs for Windows are included in some release packages and should be located right here in the root folder).
10198
102 If the documentation doesn't solve your problems, try our forums at SF.net
99 If the documentation doesn't solve your problems,
100 [try our forums at SF.net](http://sourceforge.net/p/assimp/discussion/817654) or ask on
101 [StackOverflow](http://stackoverflow.com/questions/tagged/assimp?sort=newest).
102
103 For development discussions, there is also a mailing list, _assimp-discussions_
104 [(subscribe here)]( https://lists.sourceforge.net/lists/listinfo/assimp-discussions)
105
106 ### Contributing ###
107
108 Contributions to assimp are highly appreciated. The easiest way to get involved is to submit
109 a pull request with your changes against the main repository's `master` branch.
103110
104111
105 - [Open Discussion](http://sourceforge.net/projects/assimp/forums/forum/817653)
106 - [General Help](http://sourceforge.net/projects/assimp/forums/forum/817654)
112 ### License ###
107113
114 Our license is based on the modified, __3-clause BSD__-License, which is very liberal.
108115
109 For development stuff, there is also a mailing list, _assimp-discussions_
110 [(subscribe here)]( https://lists.sourceforge.net/lists/listinfo/assimp-discussions)
116 An _informal_ summary is: do whatever you want, but include Assimp's license text with your product -
117 and don't sue us if our code doesn't work. Note that, unlike LGPLed code, you may link statically to Assimp.
118 For the legal details, see the `LICENSE` file.
111119
112
113
114 ### 4. License ###
115
116 The license of the Asset Import Library is based on the modified, __3-clause BSD__-License, which is a very liberal license. An _informal_ summary is: do whatever you want, but include Assimp's license text with your product - and don't sue us if our code doesn't work.
117
118 Note that, unlike LGPLed code, you may link statically to Assimp.
119 For the formal details, see the `LICENSE` file.
120
121
122 ------------------------------
123
124 (This repository is a mirror of the SVN repository located [here](https://assimp.svn.sourceforge.net/svnroot/assimp). Thanks to [klickverbot](https://github.com/klickverbot) for setting this up!)
+0
-2
Website.url less more
0 [InternetShortcut]
1 URL=http://assimp.sourceforge.net
99 set(PACKAGE_VERSION_COMPATIBLE 1)
1010 endif()
1111 endif()
12 set( ASSIMP_STATIC_LIB "@ASSIMP_BUILD_STATIC_LIB@")
3636 set( ASSIMP_CXX_FLAGS " -DBOOST_ALL_DYN_LINK -DBOOST_ALL_NO_LIB")
3737 endif()
3838 set( ASSIMP_LINK_FLAGS "" )
39 set( ASSIMP_LIBRARY_DIRS "${ASSIMP_ROOT_DIR}/@LIB_INSTALL_DIR@")
40 set( ASSIMP_INCLUDE_DIRS "${ASSIMP_ROOT_DIR}/@INCLUDE_INSTALL_DIR@")
39 set( ASSIMP_LIBRARY_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_LIB_INSTALL_DIR@")
40 set( ASSIMP_INCLUDE_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_INCLUDE_INSTALL_DIR@")
4141 set( ASSIMP_LIBRARIES assimp${ASSIMP_LIBRARY_SUFFIX})
42 if (CMAKE_BUILD_TYPE EQUAL "DEBUG")
43 set( ASSIMP_LIBRARIES ${ASSIMP_LIBRARIES}D)
44 endif (CMAKE_BUILD_TYPE EQUAL "DEBUG")
45
46 # search for the boost version assimp was compiled with
47 #set(Boost_USE_MULTITHREAD ON)
48 #set(Boost_USE_STATIC_LIBS OFF)
49 #set(Boost_USE_STATIC_RUNTIME OFF)
50 #find_package(Boost ${ASSIMP_Boost_VERSION} EXACT COMPONENTS thread date_time)
51 #if(Boost_VERSION AND NOT "${Boost_VERSION}" STREQUAL "0")
52 # set( ASSIMP_INCLUDE_DIRS "${ASSIMP_INCLUDE_DIRS}" ${Boost_INCLUDE_DIRS})
53 #else(Boost_VERSION AND NOT "${Boost_VERSION}" STREQUAL "0")
54 # message(WARNING "Failed to find Boost ${ASSIMP_Boost_VERSION} necessary for assimp")
55 #endif(Boost_VERSION AND NOT "${Boost_VERSION}" STREQUAL "0")
4256
4357 # the boost version assimp was compiled with
4458 set( ASSIMP_Boost_VERSION "@Boost_MAJOR_VERSION@.@Boost_MINOR_VERSION@")
45
46 if( WIN32 )
47 # search for the boost version assimp was compiled with
48 set(Boost_USE_MULTITHREAD ON)
49 set(Boost_USE_STATIC_LIBS OFF)
50 set(Boost_USE_STATIC_RUNTIME OFF)
51 find_package(Boost ${ASSIMP_Boost_VERSION} EXACT COMPONENTS thread date_time)
52 if(Boost_VERSION AND NOT "${Boost_VERSION}" STREQUAL "0")
53 set( ASSIMP_INCLUDE_DIRS "${ASSIMP_INCLUDE_DIRS}" ${Boost_INCLUDE_DIRS})
54 else(Boost_VERSION AND NOT "${Boost_VERSION}" STREQUAL "0")
55 message(WARNING "Failed to find Boost ${ASSIMP_Boost_VERSION} necessary for assimp")
56 endif(Boost_VERSION AND NOT "${Boost_VERSION}" STREQUAL "0")
57 endif( WIN32 )
5859
5960 # for compatibility wiht pkg-config
6061 set(ASSIMP_CFLAGS_OTHER "${ASSIMP_CXX_FLAGS}")
00 prefix=@CMAKE_INSTALL_PREFIX@
1 exec_prefix=@CMAKE_INSTALL_PREFIX@/@BIN_INSTALL_DIR@
2 libdir=@CMAKE_INSTALL_PREFIX@/@LIB_INSTALL_DIR@
3 includedir=@CMAKE_INSTALL_PREFIX@/@INCLUDE_INSTALL_DIR@/assimp
1 exec_prefix=@CMAKE_INSTALL_PREFIX@/@ASSIMP_BIN_INSTALL_DIR@
2 libdir=@CMAKE_INSTALL_PREFIX@/@ASSIMP_LIB_INSTALL_DIR@
3 includedir=@CMAKE_INSTALL_PREFIX@/@ASSIMP_INCLUDE_INSTALL_DIR@/assimp
44
55 Name: @CMAKE_PROJECT_NAME@
66 Description: Import various well-known 3D model formats in an uniform manner.
77 Version: @PROJECT_VERSION@
88 Libs: -L${libdir} -lassimp@ASSIMP_LIBRARY_SUFFIX@
9 Cflags: -I${includedir}
9 Cflags: -I${includedir}
0 #-------------------------------------------------------------------
1 # This file is part of the CMake build system for OGRE
2 # (Object-oriented Graphics Rendering Engine)
3 # For the latest info, see http://www.ogre3d.org/
4 #
5 # The contents of this file are placed in the public domain. Feel
6 # free to make use of it in any way you like.
7 #-------------------------------------------------------------------
8
9 # -----------------------------------------------------------------------------
10 # Find DirectX SDK
11 # Define:
12 # DirectX_FOUND
13 # DirectX_INCLUDE_DIR
14 # DirectX_LIBRARY
15 # DirectX_ROOT_DIR
16
17 if(WIN32) # The only platform it makes sense to check for DirectX SDK
18 include(FindPkgMacros)
19 findpkg_begin(DirectX)
20
21 # Get path, convert backslashes as ${ENV_DXSDK_DIR}
22 getenv_path(DXSDK_DIR)
23 getenv_path(DIRECTX_HOME)
24 getenv_path(DIRECTX_ROOT)
25 getenv_path(DIRECTX_BASE)
26
27 # construct search paths
28 set(DirectX_PREFIX_PATH
29 "${DXSDK_DIR}" "${ENV_DXSDK_DIR}"
30 "${DIRECTX_HOME}" "${ENV_DIRECTX_HOME}"
31 "${DIRECTX_ROOT}" "${ENV_DIRECTX_ROOT}"
32 "${DIRECTX_BASE}" "${ENV_DIRECTX_BASE}"
33 "C:/apps_x86/Microsoft DirectX SDK*"
34 "C:/Program Files (x86)/Microsoft DirectX SDK*"
35 "C:/apps/Microsoft DirectX SDK*"
36 "C:/Program Files/Microsoft DirectX SDK*"
37 "$ENV{ProgramFiles}/Microsoft DirectX SDK*"
38 )
39 create_search_paths(DirectX)
40 # redo search if prefix path changed
41 clear_if_changed(DirectX_PREFIX_PATH
42 DirectX_LIBRARY
43 DirectX_INCLUDE_DIR
44 )
45
46 find_path(DirectX_INCLUDE_DIR NAMES d3d9.h HINTS ${DirectX_INC_SEARCH_PATH})
47 # dlls are in DirectX_ROOT_DIR/Developer Runtime/x64|x86
48 # lib files are in DirectX_ROOT_DIR/Lib/x64|x86
49 if(CMAKE_CL_64)
50 set(DirectX_LIBPATH_SUFFIX "x64")
51 else(CMAKE_CL_64)
52 set(DirectX_LIBPATH_SUFFIX "x86")
53 endif(CMAKE_CL_64)
54 find_library(DirectX_LIBRARY NAMES d3d9 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
55 find_library(DirectX_D3DX9_LIBRARY NAMES d3dx9 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
56 find_library(DirectX_DXERR_LIBRARY NAMES DxErr HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
57 find_library(DirectX_DXGUID_LIBRARY NAMES dxguid HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
58
59
60 # look for dxgi (needed by both 10 and 11)
61 find_library(DirectX_DXGI_LIBRARY NAMES dxgi HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
62
63 # look for d3dcompiler (needed by 11)
64 find_library(DirectX_D3DCOMPILER_LIBRARY NAMES d3dcompiler HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
65
66 findpkg_finish(DirectX)
67 set(DirectX_LIBRARIES ${DirectX_LIBRARIES}
68 ${DirectX_D3DX9_LIBRARY}
69 ${DirectX_DXERR_LIBRARY}
70 ${DirectX_DXGUID_LIBRARY}
71 )
72
73 mark_as_advanced(DirectX_D3DX9_LIBRARY DirectX_DXERR_LIBRARY DirectX_DXGUID_LIBRARY
74 DirectX_DXGI_LIBRARY DirectX_D3DCOMPILER_LIBRARY)
75
76
77 # look for D3D11 components
78 if (DirectX_FOUND)
79 find_path(DirectX_D3D11_INCLUDE_DIR NAMES D3D11Shader.h HINTS ${DirectX_INC_SEARCH_PATH})
80 get_filename_component(DirectX_LIBRARY_DIR "${DirectX_LIBRARY}" PATH)
81 message(STATUS "DX lib dir: ${DirectX_LIBRARY_DIR}")
82 find_library(DirectX_D3D11_LIBRARY NAMES d3d11 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
83 find_library(DirectX_D3DX11_LIBRARY NAMES d3dx11 HINTS ${DirectX_LIB_SEARCH_PATH} PATH_SUFFIXES ${DirectX_LIBPATH_SUFFIX})
84 if (DirectX_D3D11_INCLUDE_DIR AND DirectX_D3D11_LIBRARY)
85 set(DirectX_D3D11_FOUND TRUE)
86 set(DirectX_D3D11_INCLUDE_DIR ${DirectX_D3D11_INCLUDE_DIR})
87 set(DirectX_D3D11_LIBRARIES ${DirectX_D3D11_LIBRARIES}
88 ${DirectX_D3D11_LIBRARY}
89 ${DirectX_D3DX11_LIBRARY}
90 ${DirectX_DXGI_LIBRARY}
91 ${DirectX_DXERR_LIBRARY}
92 ${DirectX_DXGUID_LIBRARY}
93 ${DirectX_D3DCOMPILER_LIBRARY}
94 )
95 endif ()
96 mark_as_advanced(DirectX_D3D11_INCLUDE_DIR DirectX_D3D11_LIBRARY DirectX_D3DX11_LIBRARY)
97 endif ()
98
99 endif(WIN32)
0 #-------------------------------------------------------------------
1 # This file is part of the CMake build system for OGRE
2 # (Object-oriented Graphics Rendering Engine)
3 # For the latest info, see http://www.ogre3d.org/
4 #
5 # The contents of this file are placed in the public domain. Feel
6 # free to make use of it in any way you like.
7 #-------------------------------------------------------------------
8
9 ##################################################################
10 # Provides some common functionality for the FindPackage modules
11 ##################################################################
12
13 # Begin processing of package
14 macro(findpkg_begin PREFIX)
15 if (NOT ${PREFIX}_FIND_QUIETLY)
16 message(STATUS "Looking for ${PREFIX}...")
17 endif ()
18 endmacro(findpkg_begin)
19
20 # Display a status message unless FIND_QUIETLY is set
21 macro(pkg_message PREFIX)
22 if (NOT ${PREFIX}_FIND_QUIETLY)
23 message(STATUS ${ARGN})
24 endif ()
25 endmacro(pkg_message)
26
27 # Get environment variable, define it as ENV_$var and make sure backslashes are converted to forward slashes
28 macro(getenv_path VAR)
29 set(ENV_${VAR} $ENV{${VAR}})
30 # replace won't work if var is blank
31 if (ENV_${VAR})
32 string( REGEX REPLACE "\\\\" "/" ENV_${VAR} ${ENV_${VAR}} )
33 endif ()
34 endmacro(getenv_path)
35
36 # Construct search paths for includes and libraries from a PREFIX_PATH
37 macro(create_search_paths PREFIX)
38 foreach(dir ${${PREFIX}_PREFIX_PATH})
39 set(${PREFIX}_INC_SEARCH_PATH ${${PREFIX}_INC_SEARCH_PATH}
40 ${dir}/include ${dir}/include/${PREFIX} ${dir}/Headers)
41 set(${PREFIX}_LIB_SEARCH_PATH ${${PREFIX}_LIB_SEARCH_PATH}
42 ${dir}/lib ${dir}/lib/${PREFIX} ${dir}/Libs)
43 endforeach(dir)
44 set(${PREFIX}_FRAMEWORK_SEARCH_PATH ${${PREFIX}_PREFIX_PATH})
45 endmacro(create_search_paths)
46
47 # clear cache variables if a certain variable changed
48 macro(clear_if_changed TESTVAR)
49 # test against internal check variable
50 if (NOT "${${TESTVAR}}" STREQUAL "${${TESTVAR}_INT_CHECK}")
51 message(STATUS "${TESTVAR} changed.")
52 foreach(var ${ARGN})
53 set(${var} "NOTFOUND" CACHE STRING "x" FORCE)
54 endforeach(var)
55 endif ()
56 set(${TESTVAR}_INT_CHECK ${${TESTVAR}} CACHE INTERNAL "x" FORCE)
57 endmacro(clear_if_changed)
58
59 # Try to get some hints from pkg-config, if available
60 macro(use_pkgconfig PREFIX PKGNAME)
61 find_package(PkgConfig)
62 if (PKG_CONFIG_FOUND)
63 pkg_check_modules(${PREFIX} ${PKGNAME})
64 endif ()
65 endmacro (use_pkgconfig)
66
67 # Couple a set of release AND debug libraries (or frameworks)
68 macro(make_library_set PREFIX)
69 if (${PREFIX}_FWK)
70 set(${PREFIX} ${${PREFIX}_FWK})
71 elseif (${PREFIX}_REL AND ${PREFIX}_DBG)
72 set(${PREFIX} optimized ${${PREFIX}_REL} debug ${${PREFIX}_DBG})
73 elseif (${PREFIX}_REL)
74 set(${PREFIX} ${${PREFIX}_REL})
75 elseif (${PREFIX}_DBG)
76 set(${PREFIX} ${${PREFIX}_DBG})
77 endif ()
78 endmacro(make_library_set)
79
80 # Generate debug names from given release names
81 macro(get_debug_names PREFIX)
82 foreach(i ${${PREFIX}})
83 set(${PREFIX}_DBG ${${PREFIX}_DBG} ${i}d ${i}D ${i}_d ${i}_D ${i}_debug ${i})
84 endforeach(i)
85 endmacro(get_debug_names)
86
87 # Add the parent dir from DIR to VAR
88 macro(add_parent_dir VAR DIR)
89 get_filename_component(${DIR}_TEMP "${${DIR}}/.." ABSOLUTE)
90 set(${VAR} ${${VAR}} ${${DIR}_TEMP})
91 endmacro(add_parent_dir)
92
93 # Do the final processing for the package find.
94 macro(findpkg_finish PREFIX)
95 # skip if already processed during this run
96 if (NOT ${PREFIX}_FOUND)
97 if (${PREFIX}_INCLUDE_DIR AND ${PREFIX}_LIBRARY)
98 set(${PREFIX}_FOUND TRUE)
99 set(${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIR})
100 set(${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARY})
101 if (NOT ${PREFIX}_FIND_QUIETLY)
102 message(STATUS "Found ${PREFIX}: ${${PREFIX}_LIBRARIES}")
103 endif ()
104 else ()
105 if (NOT ${PREFIX}_FIND_QUIETLY)
106 message(STATUS "Could not locate ${PREFIX}")
107 endif ()
108 if (${PREFIX}_FIND_REQUIRED)
109 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.")
110 endif ()
111 endif ()
112
113 mark_as_advanced(${PREFIX}_INCLUDE_DIR ${PREFIX}_LIBRARY ${PREFIX}_LIBRARY_REL ${PREFIX}_LIBRARY_DBG ${PREFIX}_LIBRARY_FWK)
114 endif ()
115 endmacro(findpkg_finish)
116
117
118 # Slightly customised framework finder
119 MACRO(findpkg_framework fwk)
120 IF(APPLE)
121 SET(${fwk}_FRAMEWORK_PATH
122 ${${fwk}_FRAMEWORK_SEARCH_PATH}
123 ${CMAKE_FRAMEWORK_PATH}
124 ~/Library/Frameworks
125 /Library/Frameworks
126 /System/Library/Frameworks
127 /Network/Library/Frameworks
128 /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/System/Library/Frameworks/
129 )
130 FOREACH(dir ${${fwk}_FRAMEWORK_PATH})
131 SET(fwkpath ${dir}/${fwk}.framework)
132 IF(EXISTS ${fwkpath})
133 SET(${fwk}_FRAMEWORK_INCLUDES ${${fwk}_FRAMEWORK_INCLUDES}
134 ${fwkpath}/Headers ${fwkpath}/PrivateHeaders)
135 if (NOT ${fwk}_LIBRARY_FWK)
136 SET(${fwk}_LIBRARY_FWK "-framework ${fwk}")
137 endif ()
138 ENDIF(EXISTS ${fwkpath})
139 ENDFOREACH(dir)
140 ENDIF(APPLE)
141 ENDMACRO(findpkg_framework)
0 #-------------------------------------------------------------------
1 # This file is part of the CMake build system for OGRE
2 # (Object-oriented Graphics Rendering Engine)
3 # For the latest info, see http://www.ogre3d.org/
4 #
5 # The contents of this file are placed in the public domain. Feel
6 # free to make use of it in any way you like.
7 #-------------------------------------------------------------------
8
9 # - Try to find ZLIB
10 # Once done, this will define
11 #
12 # ZLIB_FOUND - system has ZLIB
13 # ZLIB_INCLUDE_DIRS - the ZLIB include directories
14 # ZLIB_LIBRARIES - link these to use ZLIB
15
16 include(FindPkgMacros)
17 findpkg_begin(ZLIB)
18
19 # Get path, convert backslashes as ${ENV_${var}}
20 getenv_path(ZLIB_HOME)
21
22 # construct search paths
23 set(ZLIB_PREFIX_PATH ${ZLIB_HOME} ${ENV_ZLIB_HOME})
24 create_search_paths(ZLIB)
25 # redo search if prefix path changed
26 clear_if_changed(ZLIB_PREFIX_PATH
27 ZLIB_LIBRARY_FWK
28 ZLIB_LIBRARY_REL
29 ZLIB_LIBRARY_DBG
30 ZLIB_INCLUDE_DIR
31 )
32
33 set(ZLIB_LIBRARY_NAMES z zlib zdll)
34 get_debug_names(ZLIB_LIBRARY_NAMES)
35
36 use_pkgconfig(ZLIB_PKGC zzip-zlib-config)
37
38 findpkg_framework(ZLIB)
39
40 find_path(ZLIB_INCLUDE_DIR NAMES zlib.h HINTS ${ZLIB_INC_SEARCH_PATH} ${ZLIB_PKGC_INCLUDE_DIRS})
41 find_library(ZLIB_LIBRARY_REL NAMES ${ZLIB_LIBRARY_NAMES} HINTS ${ZLIB_LIB_SEARCH_PATH} ${ZLIB_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" release relwithdebinfo minsizerel)
42 find_library(ZLIB_LIBRARY_DBG NAMES ${ZLIB_LIBRARY_NAMES_DBG} HINTS ${ZLIB_LIB_SEARCH_PATH} ${ZLIB_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" debug)
43
44 make_library_set(ZLIB_LIBRARY)
45
46 findpkg_finish(ZLIB)
47
0 FIND_PATH(
1 assimp_INCLUDE_DIRS
2 NAMES postprocess.h scene.h version.h config.h cimport.h
3 PATHS /usr/local/include/
4 )
5
6 FIND_LIBRARY(
7 assimp_LIBRARIES
8 NAMES assimp
9 PATHS /usr/local/lib/
10 )
11
12 IF (assimp_INCLUDE_DIRS AND assimp_LIBRARIES)
13 SET(assimp_FOUND TRUE)
14 ENDIF (assimp_INCLUDE_DIRS AND assimp_LIBRARIES)
15
16 IF (assimp_FOUND)
17 IF (NOT assimp_FIND_QUIETLY)
18 MESSAGE(STATUS "Found asset importer library: ${assimp_LIBRARIES}")
19 ENDIF (NOT assimp_FIND_QUIETLY)
20 ELSE (assimp_FOUND)
21 IF (assimp_FIND_REQUIRED)
22 MESSAGE(FATAL_ERROR "Could not find asset importer library")
23 ENDIF (assimp_FIND_REQUIRED)
24 ENDIF (assimp_FOUND)
0 MACRO(ADD_MSVC_PRECOMPILED_HEADER PrecompiledHeader PrecompiledSource SourcesVar)
1 IF(MSVC)
2 GET_FILENAME_COMPONENT(PrecompiledBasename ${PrecompiledHeader} NAME_WE)
3 SET(PrecompiledBinary "${CMAKE_CFG_INTDIR}/${PrecompiledBasename}.pch")
4 SET(Sources ${${SourcesVar}})
5
6 SET_SOURCE_FILES_PROPERTIES(${PrecompiledSource}
7 PROPERTIES COMPILE_FLAGS "/Yc\"${PrecompiledHeader}\" /Fp\"${PrecompiledBinary}\""
8 OBJECT_OUTPUTS "${PrecompiledBinary}")
9
10 # Do not consider .c files
11 foreach(fname ${Sources})
12 GET_FILENAME_COMPONENT(fext ${fname} EXT)
13 if(fext STREQUAL ".cpp")
14 SET_SOURCE_FILES_PROPERTIES(${fname}
15 PROPERTIES COMPILE_FLAGS "/Yu\"${PrecompiledBinary}\" /FI\"${PrecompiledBinary}\" /Fp\"${PrecompiledBinary}\""
16 OBJECT_DEPENDS "${PrecompiledBinary}")
17 endif(fext STREQUAL ".cpp")
18 endforeach(fname)
19
20 ENDIF(MSVC)
21 # Add precompiled header to SourcesVar
22 LIST(APPEND ${SourcesVar} ${PrecompiledSource})
23
24 ENDMACRO(ADD_MSVC_PRECOMPILED_HEADER)
00 IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
1 MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
2 ENDIF()
1 MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
2 ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
33
44 FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
55 STRING(REGEX REPLACE "\n" ";" files "${files}")
6
76 FOREACH(file ${files})
8 MESSAGE(STATUS "Uninstalling \"${file}\"")
9 IF(EXISTS "${file}")
10 EXECUTE_PROCESS(
11 COMMAND @CMAKE_COMMAND@ -E remove "$ENV{DESTDIR}${file}"
12 OUTPUT_VARIABLE rm_out
13 RESULT_VARIABLE rm_retval
14 )
15 IF(NOT "${rm_retval}" STREQUAL 0)
16 MESSAGE(FATAL_ERROR "Problem when removing \"${file}\"")
17 ENDIF()
18 ELSEIF(IS_SYMLINK "${file}")
19 EXEC_PROGRAM(
20 "@CMAKE_COMMAND@" ARGS "-E remove \"${file}\""
21 OUTPUT_VARIABLE rm_out
22 RETURN_VALUE rm_retval
23 )
24 IF(NOT "${rm_retval}" STREQUAL 0)
25 MESSAGE(FATAL_ERROR "Problem when removing \"${file}\"")
26 ENDIF()
27 ELSE()
28 MESSAGE(STATUS "File \"${file}\" does not exist.")
29 ENDIF()
30 ENDFOREACH()
7 MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
8 EXEC_PROGRAM(
9 "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
10 OUTPUT_VARIABLE rm_out
11 RETURN_VALUE rm_retval
12 )
13 IF(NOT "${rm_retval}" STREQUAL 0)
14 MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
15 ENDIF(NOT "${rm_retval}" STREQUAL 0)
16 ENDFOREACH(file)
466466 const unsigned int iIndex = iArray[i];
467467 aiMesh* const mesh = pcSOut->mMeshes[iIndex];
468468
469 // Transform the vertices back into their local space
470 // fixme: consider computing normals after this, so we don't need to transform them
471 const aiVector3D* const pvEnd = mesh->mVertices+mesh->mNumVertices;
472 aiVector3D* pvCurrent = mesh->mVertices, *t2 = mesh->mNormals;
473
474 for (;pvCurrent != pvEnd;++pvCurrent,++t2) {
475 *pvCurrent = mInv * (*pvCurrent);
476 *t2 = mInvTransposed * (*t2);
477 }
478
479 // Handle negative transformation matrix determinant -> invert vertex x
480 if (imesh->mMat.Determinant() < 0.0f)
481 {
482 /* we *must* have normals */
483 for (pvCurrent = mesh->mVertices,t2 = mesh->mNormals;pvCurrent != pvEnd;++pvCurrent,++t2) {
484 pvCurrent->x *= -1.f;
485 t2->x *= -1.f;
469 if (mesh->mColors[1] == NULL)
470 {
471 // Transform the vertices back into their local space
472 // fixme: consider computing normals after this, so we don't need to transform them
473 const aiVector3D* const pvEnd = mesh->mVertices + mesh->mNumVertices;
474 aiVector3D* pvCurrent = mesh->mVertices, *t2 = mesh->mNormals;
475
476 for (; pvCurrent != pvEnd; ++pvCurrent, ++t2) {
477 *pvCurrent = mInv * (*pvCurrent);
478 *t2 = mInvTransposed * (*t2);
486479 }
487 DefaultLogger::get()->info("3DS: Flipping mesh X-Axis");
488 }
489
490 // Handle pivot point
491 if(pivot.x || pivot.y || pivot.z)
492 {
493 for (pvCurrent = mesh->mVertices;pvCurrent != pvEnd;++pvCurrent) {
494 *pvCurrent -= pivot;
480
481 // Handle negative transformation matrix determinant -> invert vertex x
482 if (imesh->mMat.Determinant() < 0.0f)
483 {
484 /* we *must* have normals */
485 for (pvCurrent = mesh->mVertices, t2 = mesh->mNormals; pvCurrent != pvEnd; ++pvCurrent, ++t2) {
486 pvCurrent->x *= -1.f;
487 t2->x *= -1.f;
488 }
489 DefaultLogger::get()->info("3DS: Flipping mesh X-Axis");
495490 }
496 }
491
492 // Handle pivot point
493 if (pivot.x || pivot.y || pivot.z)
494 {
495 for (pvCurrent = mesh->mVertices; pvCurrent != pvEnd; ++pvCurrent) {
496 *pvCurrent -= pivot;
497 }
498 }
499
500 mesh->mColors[1] = (aiColor4D*)1;
501 }
502 else
503 mesh->mColors[1] = (aiColor4D*)1;
497504
498505 // Setup the mesh index
499506 pcOut->mMeshes[i] = iIndex;
501508 }
502509
503510 // Setup the name of the node
504 pcOut->mName.Set(pcIn->mName);
511 // First instance keeps its name otherwise something might break, all others will be postfixed with their instance number
512 if (pcIn->mInstanceNumber > 1)
513 {
514 char tmp[12];
515 ASSIMP_itoa10(tmp, pcIn->mInstanceNumber);
516 std::string tempStr = pcIn->mName + "_inst_";
517 tempStr += tmp;
518 pcOut->mName.Set(tempStr);
519 }
520 else
521 pcOut->mName.Set(pcIn->mName);
505522
506523 // Now build the transformation matrix of the node
507524 // ROTATION
706723 if (0 == mRootNode->mChildren.size())
707724 {
708725 //////////////////////////////////////////////////////////////////////////////
709 // It seems the file is so fucked up that it has not even a hierarchy.
726 // It seems the file is so messed up that it has not even a hierarchy.
710727 // generate a flat hiearachy which looks like this:
711728 //
712729 // ROOT_NODE
783800 AddNodeToGraph(pcOut, pcOut->mRootNode, mRootNode,m);
784801 }
785802
786 // We used the first vertex color set to store some emporary values so we need to cleanup here
787 for (unsigned int a = 0; a < pcOut->mNumMeshes;++a)
803 // We used the first and second vertex color set to store some temporary values so we need to cleanup here
804 for (unsigned int a = 0; a < pcOut->mNumMeshes; ++a)
805 {
788806 pcOut->mMeshes[a]->mColors[0] = NULL;
807 pcOut->mMeshes[a]->mColors[1] = NULL;
808 }
789809
790810 pcOut->mRootNode->mTransformation = aiMatrix4x4(
791811 1.f,0.f,0.f,0.f,
480480
481481 : mHierarchyPos (0)
482482 , mHierarchyIndex (0)
483 , mInstanceCount (1)
483484
484485 {
485486 static int iCnt = 0;
509510 //! Name of the node
510511 std::string mName;
511512
513 //! InstanceNumber of the node
514 int32_t mInstanceNumber;
515
512516 //! Dummy nodes: real name to be combined with the $$$DUMMY
513517 std::string mDummyName;
514518
537541
538542 //! Pivot position loaded from the file
539543 aiVector3D vPivot;
544
545 //instance count, will be kept only for the first node
546 int32_t mInstanceCount;
540547
541548 //! Add a child node, setup the right parent node for it
542549 //! \param pc Node to be 'adopted'
7878 Discreet3DS::Chunk chunk; \
7979 ReadChunk(&chunk); \
8080 int chunkSize = chunk.Size-sizeof(Discreet3DS::Chunk); \
81 if(chunkSize <= 0) \
82 continue; \
8183 const int oldReadLimit = stream->GetReadLimit(); \
8284 stream->SetReadLimit(stream->GetCurrentPos() + chunkSize); \
8385
656658 // Now find out whether we have this node already (target animation channels
657659 // are stored with a separate object ID)
658660 D3DS::Node* pcNode = FindNode(mRootNode,name);
659 if (pcNode)
660 {
661 // Make this node the current node
662 mCurrentNode = pcNode;
663 break;
661 int instanceNumber = 1;
662
663 if ( pcNode)
664 {
665 // if the source is not a CHUNK_TRACKINFO block it wont be an object instance
666 if (parent != Discreet3DS::CHUNK_TRACKINFO)
667 {
668 mCurrentNode = pcNode;
669 break;
670 }
671 pcNode->mInstanceCount++;
672 instanceNumber = pcNode->mInstanceCount;
664673 }
665674 pcNode = new D3DS::Node();
666675 pcNode->mName = name;
676 pcNode->mInstanceNumber = instanceNumber;
667677
668678 // There are two unknown values which we can safely ignore
669679 stream->IncPtr(4);
4747 #include "BaseImporter.h"
4848 #include "../include/assimp/types.h"
4949
50 #ifndef ASSIMP_BUILD_NO_3DS_IMPORTER
51
5052 struct aiNode;
5153 #include "3DSHelper.h"
5254
270272 bool bIsPrj;
271273 };
272274
275 #endif // !! ASSIMP_BUILD_NO_3DS_IMPORTER
276
273277 } // end of namespace Assimp
274278
275279 #endif // AI_3DSIMPORTER_H_INC
7373 // ------------------------------------------------------------------------------------------------
7474 // Constructor to be privately used by Importer
7575 ASEImporter::ASEImporter()
76 : noSkeletonMesh()
7677 {}
7778
7879 // ------------------------------------------------------------------------------------------------
110111 {
111112 configRecomputeNormals = (pImp->GetPropertyInteger(
112113 AI_CONFIG_IMPORT_ASE_RECONSTRUCT_NORMALS,1) ? true : false);
114
115 noSkeletonMesh = pImp->GetPropertyInteger(AI_CONFIG_IMPORT_NO_SKELETON_MESHES,0) != 0;
113116 }
114117
115118 // ------------------------------------------------------------------------------------------------
243246 // ------------------------------------------------------------------
244247 if (!pScene->mNumMeshes) {
245248 pScene->mFlags |= AI_SCENE_FLAGS_INCOMPLETE;
246 SkeletonMeshBuilder skeleton(pScene);
249 if (!noSkeletonMesh) {
250 SkeletonMeshBuilder skeleton(pScene);
251 }
247252 }
248253 }
249254 // ------------------------------------------------------------------------------------------------
196196 /** Config options: Recompute the normals in every case - WA
197197 for 3DS Max broken ASE normal export */
198198 bool configRecomputeNormals;
199 bool noSkeletonMesh;
199200 };
200201
201202 } // end of namespace Assimp
4343 */
4444
4545 #include "AssimpPCH.h"
46 #ifndef ASSIMP_BUILD_NO_ASE_IMPORTER
4647
4748 // internal headers
4849 #include "TextureTransform.h"
15651566 unsigned int iIndex = strtoul10(filePtr,&filePtr);
15661567 if (iIndex >= iNumBones)
15671568 {
1569 LogWarning("Bone index is out of bounds");
15681570 continue;
1569 LogWarning("Bone index is out of bounds");
15701571 }
15711572 if (!ParseString(mesh.mBones[iIndex].mName,"*MESH_BONE_NAME"))
15721573 SkipToNextToken();
21472148 // parse the value
21482149 iOut = strtoul10(filePtr,&filePtr);
21492150 }
2151
2152 #endif // !! ASSIMP_BUILD_NO_BASE_IMPORTER
4949 #include "Importer.h"
5050
5151 // ------------------------------------------------------------------------------------------------
52 #ifdef AI_C_THREADSAFE
52 #ifndef ASSIMP_BUILD_SINGLETHREADED
5353 # include <boost/thread/thread.hpp>
5454 # include <boost/thread/mutex.hpp>
5555 #endif
8686 }
8787
8888
89 #ifdef AI_C_THREADSAFE
89 #ifndef ASSIMP_BUILD_SINGLETHREADED
9090 /** Global mutex to manage the access to the logstream map */
9191 static boost::mutex gLogStreamMutex;
9292 #endif
103103 }
104104
105105 ~LogToCallbackRedirector() {
106 #ifdef AI_C_THREADSAFE
106 #ifndef ASSIMP_BUILD_SINGLETHREADED
107107 boost::mutex::scoped_lock lock(gLogStreamMutex);
108108 #endif
109109 // (HACK) Check whether the 'stream.user' pointer points to a
171171 pimpl->mIntProperties = pp->ints;
172172 pimpl->mFloatProperties = pp->floats;
173173 pimpl->mStringProperties = pp->strings;
174 pimpl->mMatrixProperties = pp->matrices;
174175 }
175176 // setup a custom IO system if necessary
176177 if (pFS) {
229230 pimpl->mIntProperties = pp->ints;
230231 pimpl->mFloatProperties = pp->floats;
231232 pimpl->mStringProperties = pp->strings;
233 pimpl->mMatrixProperties = pp->matrices;
232234 }
233235
234236 // and have it read the file from the memory buffer
336338 {
337339 ASSIMP_BEGIN_EXCEPTION_REGION();
338340
339 #ifdef AI_C_THREADSAFE
341 #ifndef ASSIMP_BUILD_SINGLETHREADED
340342 boost::mutex::scoped_lock lock(gLogStreamMutex);
341343 #endif
342344
355357 {
356358 ASSIMP_BEGIN_EXCEPTION_REGION();
357359
358 #ifdef AI_C_THREADSAFE
360 #ifndef ASSIMP_BUILD_SINGLETHREADED
359361 boost::mutex::scoped_lock lock(gLogStreamMutex);
360362 #endif
361363 // find the logstream associated with this data
380382 ASSIMP_API void aiDetachAllLogStreams(void)
381383 {
382384 ASSIMP_BEGIN_EXCEPTION_REGION();
383 #ifdef AI_C_THREADSAFE
385 #ifndef ASSIMP_BUILD_SINGLETHREADED
384386 boost::mutex::scoped_lock lock(gLogStreamMutex);
385387 #endif
386388 for (LogStreamMap::iterator it = gActiveLogStreams.begin(); it != gActiveLogStreams.end(); ++it) {
504506 }
505507
506508 // ------------------------------------------------------------------------------------------------
509 // Importer::SetPropertyMatrix
510 ASSIMP_API void aiSetImportPropertyMatrix(aiPropertyStore* p, const char* szName,
511 const C_STRUCT aiMatrix4x4* mat)
512 {
513 if (!mat) {
514 return;
515 }
516 ASSIMP_BEGIN_EXCEPTION_REGION();
517 PropertyMap* pp = reinterpret_cast<PropertyMap*>(p);
518 SetGenericProperty<aiMatrix4x4>(pp->matrices,szName,*mat,NULL);
519 ASSIMP_END_EXCEPTION_REGION(void);
520 }
521
522 // ------------------------------------------------------------------------------------------------
507523 // Rotation matrix to quaternion
508524 ASSIMP_API void aiCreateQuaternionFromMatrix(aiQuaternion* quat,const aiMatrix3x3* mat)
509525 {
6363 return Exporter().GetExportFormatDescription(pIndex);
6464 }
6565
66
6667 // ------------------------------------------------------------------------------------------------
6768 ASSIMP_API void aiCopyScene(const aiScene* pIn, aiScene** pOut)
6869 {
7172 }
7273
7374 SceneCombiner::CopyScene(pOut,pIn,true);
75 ScenePriv(*pOut)->mIsCopy = true;
7476 }
77
78
79 // ------------------------------------------------------------------------------------------------
80 ASSIMP_API void aiFreeScene(const C_STRUCT aiScene* pIn)
81 {
82 // note: aiReleaseImport() is also able to delete scene copies, but in addition
83 // it also handles scenes with import metadata.
84 delete pIn;
85 }
86
7587
7688 // ------------------------------------------------------------------------------------------------
7789 ASSIMP_API aiReturn aiExportScene( const aiScene* pScene, const char* pFormatId, const char* pFileName, unsigned int pPreprocessing )
22
33 #include "AssimpPCH.h"
44 #include "./../include/assimp/version.h"
5
6 static const unsigned int MajorVersion = 3;
7 static const unsigned int MinorVersion = 1;
58
69 // --------------------------------------------------------------------------------
710 // Legal information string - dont't remove this.
2427 // ------------------------------------------------------------------------------------------------
2528 // Get Assimp minor version
2629 ASSIMP_API unsigned int aiGetVersionMinor () {
27 return 0;
30 return MinorVersion;
2831 }
2932
3033 // ------------------------------------------------------------------------------------------------
3134 // Get Assimp major version
3235 ASSIMP_API unsigned int aiGetVersionMajor () {
33 return 3;
36 return MajorVersion;
3437 }
3538
3639 // ------------------------------------------------------------------------------------------------
5962 }
6063
6164 // include current build revision, which is even updated from time to time -- :-)
62 #include "../revision.h"
65 #include "revision.h"
6366
6467 // ------------------------------------------------------------------------------------------------
6568 ASSIMP_API unsigned int aiGetVersionRevision ()
6669 {
67 return SVNRevision;
70 return GitVersion;
6871 }
6972
7073 // ------------------------------------------------------------------------------------------------
71 aiScene::aiScene()
72 : mFlags()
73 , mRootNode()
74 , mNumMeshes()
75 , mMeshes()
76 , mNumMaterials()
77 , mMaterials()
78 , mNumAnimations()
79 , mAnimations()
80 , mNumTextures()
81 , mTextures()
82 , mNumLights()
83 , mLights()
84 , mNumCameras()
85 , mCameras()
74 ASSIMP_API aiScene::aiScene()
75 : mFlags(0)
76 , mRootNode(NULL)
77 , mNumMeshes(0)
78 , mMeshes(NULL)
79 , mNumMaterials(0)
80 , mMaterials(NULL)
81 , mNumAnimations(0)
82 , mAnimations(NULL)
83 , mNumTextures(0)
84 , mTextures(NULL)
85 , mNumLights(0)
86 , mLights(NULL)
87 , mNumCameras(0)
88 , mCameras(NULL)
8689 , mPrivate(new Assimp::ScenePrivateData())
8790 {
8891 }
8992
9093 // ------------------------------------------------------------------------------------------------
91 aiScene::~aiScene()
94 ASSIMP_API aiScene::~aiScene()
9295 {
9396 // delete all sub-objects recursively
9497 delete mRootNode;
5555
5656 // Include our stdint.h replacement header for MSVC, take the global header for gcc/mingw
5757 #if defined( _MSC_VER) && (_MSC_VER < 1600)
58 # include "pstdint.h"
58 # include "../include/assimp/Compiler/pstdint.h"
5959 #else
6060 # include <stdint.h>
6161 #endif
7373
7474 /* Helper macro to set a pointer to NULL in debug builds
7575 */
76 #if (defined _DEBUG)
76 #if (defined ASSIMP_BUILD_DEBUG)
7777 # define AI_DEBUG_INVALIDATE_PTR(x) x = NULL;
7878 #else
7979 # define AI_DEBUG_INVALIDATE_PTR(x)
6464 // ------------------------------------------------------------------------------------------------
6565 // Constructor to be privately used by Importer
6666 BVHLoader::BVHLoader()
67 : noSkeletonMesh()
6768 {}
6869
6970 // ------------------------------------------------------------------------------------------------
8990 }
9091
9192 // ------------------------------------------------------------------------------------------------
93 void BVHLoader::SetupProperties(const Importer* pImp)
94 {
95 noSkeletonMesh = pImp->GetPropertyInteger(AI_CONFIG_IMPORT_NO_SKELETON_MESHES,0) != 0;
96 }
97
98 // ------------------------------------------------------------------------------------------------
9299 // Loader meta information
93100 const aiImporterDesc* BVHLoader::GetInfo () const
94101 {
118125 mLine = 1;
119126 ReadStructure( pScene);
120127
121 // build a dummy mesh for the skeleton so that we see something at least
122 SkeletonMeshBuilder meshBuilder( pScene);
128 if (!noSkeletonMesh) {
129 // build a dummy mesh for the skeleton so that we see something at least
130 SkeletonMeshBuilder meshBuilder( pScene);
131 }
123132
124133 // construct an animation from all the motion data we read
125134 CreateAnimation( pScene);
9393 * See BaseImporter::CanRead() for details. */
9494 bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool cs) const;
9595
96 void SetupProperties(const Importer* pImp);
9697 const aiImporterDesc* GetInfo () const;
9798
9899 protected:
158159 /** basic Animation parameters */
159160 float mAnimTickDuration;
160161 unsigned int mAnimNumFrames;
162
163 bool noSkeletonMesh;
161164 };
162165
163166 } // end of namespace Assimp
379379 }
380380
381381 // ------------------------------------------------------------------------------------------------
382 // Convert to UTF8 data to ISO-8859-1
383 void BaseImporter::ConvertUTF8toISO8859_1(std::string& data)
384 {
385 unsigned int size = data.size();
386 unsigned int i = 0, j = 0;
387
388 while(i < size) {
389 if((unsigned char) data[i] < 0x80) {
390 data[j] = data[i];
391 } else if(i < size - 1) {
392 if((unsigned char) data[i] == 0xC2) {
393 data[j] = data[++i];
394 } else if((unsigned char) data[i] == 0xC3) {
395 data[j] = ((unsigned char) data[++i] + 0x40);
396 } else {
397 std::stringstream stream;
398
399 stream << "UTF8 code " << std::hex << data[i] << data[i + 1] << " can not be converted into ISA-8859-1.";
400
401 DefaultLogger::get()->error(stream.str());
402
403 data[j++] = data[i++];
404 data[j] = data[i];
405 }
406 } else {
407 DefaultLogger::get()->error("UTF8 code but only one character remaining");
408
409 data[j] = data[i];
410 }
411
412 i++; j++;
413 }
414
415 data.resize(j);
416 }
417
418 // ------------------------------------------------------------------------------------------------
382419 void BaseImporter::TextFileToBuffer(IOStream* stream,
383420 std::vector<char>& data)
384421 {
532569 for (std::list<LoadRequest>::iterator it = data->requests.begin();it != data->requests.end(); ++it) {
533570 // force validation in debug builds
534571 unsigned int pp = (*it).flags;
535 #ifdef _DEBUG
572 #ifdef ASSIMP_BUILD_DEBUG
536573 pp |= aiProcess_ValidateDataStructure;
537574 #endif
538575 // setup config properties if necessary
540577 pimpl->mFloatProperties = (*it).map.floats;
541578 pimpl->mIntProperties = (*it).map.ints;
542579 pimpl->mStringProperties = (*it).map.strings;
580 pimpl->mMatrixProperties = (*it).map.matrices;
543581
544582 if (!DefaultLogger::isNullLogger())
545583 {
105105 * imports the given file. ReadFile is not overridable, it just calls
106106 * InternReadFile() and catches any ImportErrorException that might occur.
107107 */
108 class BaseImporter
108 class ASSIMP_API BaseImporter
109109 {
110110 friend class Importer;
111111
331331 std::vector<char>& data);
332332
333333 // -------------------------------------------------------------------
334 /** An utility for all text file loaders. It converts a file from our
335 * UTF8 character set back to ISO-8859-1. Errors are reported, but ignored.
336 *
337 * @param data File buffer to be converted from UTF8 to ISO-8859-1. The buffer
338 * is resized as appropriate. */
339 static void ConvertUTF8toISO8859_1(
340 std::string& data);
341
342 // -------------------------------------------------------------------
334343 /** Utility for text file loaders which copies the contents of the
335344 * file into a memory buffer and converts it to our UTF8
336345 * representation.
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (assimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /** @file Bitmap.cpp
42 * @brief Defines bitmap format helper for textures
43 *
44 * Used for file formats which embed their textures into the model file.
45 */
46
47 #include "AssimpPCH.h"
48
49 #include "Bitmap.h"
50
51 namespace Assimp {
52
53 void Bitmap::Save(aiTexture* texture, IOStream* file) {
54 if(file != NULL) {
55 Header header;
56 DIB dib;
57
58 dib.size = DIB::dib_size;
59 dib.width = texture->mWidth;
60 dib.height = texture->mHeight;
61 dib.planes = 1;
62 dib.bits_per_pixel = 8 * mBytesPerPixel;
63 dib.compression = 0;
64 dib.image_size = (((dib.width * mBytesPerPixel) + 3) & 0x0000FFFC) * dib.height;
65 dib.x_resolution = 0;
66 dib.y_resolution = 0;
67 dib.nb_colors = 0;
68 dib.nb_important_colors = 0;
69
70 header.type = 0x4D42; // 'BM'
71 header.offset = Header::header_size + DIB::dib_size;
72 header.size = header.offset + dib.image_size;
73 header.reserved1 = 0;
74 header.reserved2 = 0;
75
76 WriteHeader(header, file);
77 WriteDIB(dib, file);
78 WriteData(texture, file);
79 }
80 }
81
82 template<typename T>
83 inline std::size_t Copy(uint8_t* data, T& field) {
84 std::memcpy(data, &AI_BE(field), sizeof(field)); return sizeof(field);
85 }
86
87 void Bitmap::WriteHeader(Header& header, IOStream* file) {
88 uint8_t data[Header::header_size];
89
90 std::size_t offset = 0;
91
92 offset += Copy(&data[offset], header.type);
93 offset += Copy(&data[offset], header.size);
94 offset += Copy(&data[offset], header.reserved1);
95 offset += Copy(&data[offset], header.reserved2);
96 offset += Copy(&data[offset], header.offset);
97
98 file->Write(data, Header::header_size, 1);
99 }
100
101 void Bitmap::WriteDIB(DIB& dib, IOStream* file) {
102 uint8_t data[DIB::dib_size];
103
104 std::size_t offset = 0;
105
106 offset += Copy(&data[offset], dib.size);
107 offset += Copy(&data[offset], dib.width);
108 offset += Copy(&data[offset], dib.height);
109 offset += Copy(&data[offset], dib.planes);
110 offset += Copy(&data[offset], dib.bits_per_pixel);
111 offset += Copy(&data[offset], dib.compression);
112 offset += Copy(&data[offset], dib.image_size);
113 offset += Copy(&data[offset], dib.x_resolution);
114 offset += Copy(&data[offset], dib.y_resolution);
115 offset += Copy(&data[offset], dib.nb_colors);
116 offset += Copy(&data[offset], dib.nb_important_colors);
117
118 file->Write(data, DIB::dib_size, 1);
119 }
120
121 void Bitmap::WriteData(aiTexture* texture, IOStream* file) {
122 static const std::size_t padding_offset = 4;
123 static const uint8_t padding_data[padding_offset] = {0x0, 0x0, 0x0, 0x0};
124
125 unsigned int padding = (padding_offset - ((mBytesPerPixel * texture->mWidth) % padding_offset)) % padding_offset;
126 uint8_t pixel[mBytesPerPixel];
127
128 for(std::size_t i = 0; i < texture->mHeight; ++i) {
129 for(std::size_t j = 0; j < texture->mWidth; ++j) {
130 const aiTexel& texel = texture->pcData[(texture->mHeight - i - 1) * texture->mWidth + j]; // Bitmap files are stored in bottom-up format
131
132 pixel[0] = texel.r;
133 pixel[1] = texel.g;
134 pixel[2] = texel.b;
135 pixel[3] = texel.a;
136
137 file->Write(pixel, mBytesPerPixel, 1);
138 }
139
140 file->Write(padding_data, padding, 1);
141 }
142 }
143
144 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (assimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /** @file Bitmap.h
42 * @brief Defines bitmap format helper for textures
43 *
44 * Used for file formats which embed their textures into the model file.
45 */
46
47 #ifndef AI_BITMAP_H_INC
48 #define AI_BITMAP_H_INC
49
50 namespace Assimp {
51
52 class Bitmap {
53
54 protected:
55
56 struct Header {
57
58 uint16_t type;
59
60 uint32_t size;
61
62 uint16_t reserved1;
63
64 uint16_t reserved2;
65
66 uint32_t offset;
67
68 // We define the struct size because sizeof(Header) might return a wrong result because of structure padding.
69 // Moreover, we must use this ugly and error prone syntax because Visual Studio neither support constexpr or sizeof(name_of_field).
70 static const std::size_t header_size =
71 sizeof(uint16_t) + // type
72 sizeof(uint32_t) + // size
73 sizeof(uint16_t) + // reserved1
74 sizeof(uint16_t) + // reserved2
75 sizeof(uint32_t); // offset
76
77 };
78
79 struct DIB {
80
81 uint32_t size;
82
83 int32_t width;
84
85 int32_t height;
86
87 uint16_t planes;
88
89 uint16_t bits_per_pixel;
90
91 uint32_t compression;
92
93 uint32_t image_size;
94
95 int32_t x_resolution;
96
97 int32_t y_resolution;
98
99 uint32_t nb_colors;
100
101 uint32_t nb_important_colors;
102
103 // We define the struct size because sizeof(DIB) might return a wrong result because of structure padding.
104 // Moreover, we must use this ugly and error prone syntax because Visual Studio neither support constexpr or sizeof(name_of_field).
105 static const std::size_t dib_size =
106 sizeof(uint32_t) + // size
107 sizeof(int32_t) + // width
108 sizeof(int32_t) + // height
109 sizeof(uint16_t) + // planes
110 sizeof(uint16_t) + // bits_per_pixel
111 sizeof(uint32_t) + // compression
112 sizeof(uint32_t) + // image_size
113 sizeof(int32_t) + // x_resolution
114 sizeof(int32_t) + // y_resolution
115 sizeof(uint32_t) + // nb_colors
116 sizeof(uint32_t); // nb_important_colors
117
118 };
119
120 static const std::size_t mBytesPerPixel = 4;
121
122 public:
123
124 static void Save(aiTexture* texture, IOStream* file);
125
126 protected:
127
128 static void WriteHeader(Header& header, IOStream* file);
129
130 static void WriteDIB(DIB& dib, IOStream* file);
131
132 static void WriteData(aiTexture* texture, IOStream* file);
133
134 };
135
136 }
137
138 #endif // AI_BITMAP_H_INC
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2013, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file BlenderBMesh.cpp
41 * @brief Conversion of Blender's new BMesh stuff
42 */
43
44 #include "AssimpPCH.h"
45
46 #ifndef ASSIMP_BUILD_NO_BLEND_IMPORTER
47
48 #include "BlenderDNA.h"
49 #include "BlenderScene.h"
50 #include "BlenderBMesh.h"
51 #include "BlenderTessellator.h"
52
53 namespace Assimp
54 {
55 template< > const std::string LogFunctions< BlenderBMeshConverter >::log_prefix = "BLEND_BMESH: ";
56 }
57
58 using namespace Assimp;
59 using namespace Assimp::Blender;
60 using namespace Assimp::Formatter;
61
62 // ------------------------------------------------------------------------------------------------
63 BlenderBMeshConverter::BlenderBMeshConverter( const Mesh* mesh ):
64 BMesh( mesh ),
65 triMesh( NULL )
66 {
67 AssertValidMesh( );
68 }
69
70 // ------------------------------------------------------------------------------------------------
71 BlenderBMeshConverter::~BlenderBMeshConverter( )
72 {
73 DestroyTriMesh( );
74 }
75
76 // ------------------------------------------------------------------------------------------------
77 bool BlenderBMeshConverter::ContainsBMesh( ) const
78 {
79 // TODO - Should probably do some additional verification here
80 return BMesh->totpoly && BMesh->totloop && BMesh->totvert;
81 }
82
83 // ------------------------------------------------------------------------------------------------
84 const Mesh* BlenderBMeshConverter::TriangulateBMesh( )
85 {
86 AssertValidMesh( );
87 AssertValidSizes( );
88 PrepareTriMesh( );
89
90 for ( int i = 0; i < BMesh->totpoly; ++i )
91 {
92 const MPoly& poly = BMesh->mpoly[ i ];
93 ConvertPolyToFaces( poly );
94 }
95
96 return triMesh;
97 }
98
99 // ------------------------------------------------------------------------------------------------
100 void BlenderBMeshConverter::AssertValidMesh( )
101 {
102 if ( !ContainsBMesh( ) )
103 {
104 ThrowException( "BlenderBMeshConverter requires a BMesh with \"polygons\" - please call BlenderBMeshConverter::ContainsBMesh to check this first" );
105 }
106 }
107
108 // ------------------------------------------------------------------------------------------------
109 void BlenderBMeshConverter::AssertValidSizes( )
110 {
111 if ( BMesh->totpoly != static_cast<int>( BMesh->mpoly.size( ) ) )
112 {
113 ThrowException( "BMesh poly array has incorrect size" );
114 }
115 if ( BMesh->totloop != static_cast<int>( BMesh->mloop.size( ) ) )
116 {
117 ThrowException( "BMesh loop array has incorrect size" );
118 }
119 }
120
121 // ------------------------------------------------------------------------------------------------
122 void BlenderBMeshConverter::PrepareTriMesh( )
123 {
124 if ( triMesh )
125 {
126 DestroyTriMesh( );
127 }
128
129 triMesh = new Mesh( *BMesh );
130 triMesh->totface = 0;
131 triMesh->mface.clear( );
132 }
133
134 // ------------------------------------------------------------------------------------------------
135 void BlenderBMeshConverter::DestroyTriMesh( )
136 {
137 delete triMesh;
138 triMesh = NULL;
139 }
140
141 // ------------------------------------------------------------------------------------------------
142 void BlenderBMeshConverter::ConvertPolyToFaces( const MPoly& poly )
143 {
144 const MLoop* polyLoop = &BMesh->mloop[ poly.loopstart ];
145 if ( poly.totloop == 3 || poly.totloop == 4 )
146 {
147 AddFace( polyLoop[ 0 ].v, polyLoop[ 1 ].v, polyLoop[ 2 ].v, poly.totloop == 4 ? polyLoop[ 3 ].v : 0 );
148 }
149 else if ( poly.totloop > 4 )
150 {
151 #if ASSIMP_BLEND_WITH_GLU_TESSELLATE
152 BlenderTessellatorGL tessGL( *this );
153 tessGL.Tessellate( polyLoop, poly.totloop, triMesh->mvert );
154 #elif ASSIMP_BLEND_WITH_POLY_2_TRI
155 BlenderTessellatorP2T tessP2T( *this );
156 tessP2T.Tessellate( polyLoop, poly.totloop, triMesh->mvert );
157 #endif
158 }
159 }
160
161 // ------------------------------------------------------------------------------------------------
162 void BlenderBMeshConverter::AddFace( int v1, int v2, int v3, int v4 )
163 {
164 MFace face;
165 face.v1 = v1;
166 face.v2 = v2;
167 face.v3 = v3;
168 face.v4 = v4;
169 // TODO - Work out how materials work
170 face.mat_nr = 0;
171 triMesh->mface.push_back( face );
172 triMesh->totface = triMesh->mface.size( );
173 }
174
175 #endif // ASSIMP_BUILD_NO_BLEND_IMPORTER
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2013, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file BlenderBMesh.h
41 * @brief Conversion of Blender's new BMesh stuff
42 */
43 #ifndef INCLUDED_AI_BLEND_BMESH_H
44 #define INCLUDED_AI_BLEND_BMESH_H
45
46 #include "LogAux.h"
47
48 namespace Assimp
49 {
50 // TinyFormatter.h
51 namespace Formatter
52 {
53 template < typename T,typename TR, typename A > class basic_formatter;
54 typedef class basic_formatter< char, std::char_traits< char >, std::allocator< char > > format;
55 }
56
57 // BlenderScene.h
58 namespace Blender
59 {
60 struct Mesh;
61 struct MPoly;
62 struct MLoop;
63 }
64
65 class BlenderBMeshConverter: public LogFunctions< BlenderBMeshConverter >
66 {
67 public:
68 BlenderBMeshConverter( const Blender::Mesh* mesh );
69 ~BlenderBMeshConverter( );
70
71 bool ContainsBMesh( ) const;
72
73 const Blender::Mesh* TriangulateBMesh( );
74
75 private:
76 void AssertValidMesh( );
77 void AssertValidSizes( );
78 void PrepareTriMesh( );
79 void DestroyTriMesh( );
80 void ConvertPolyToFaces( const Blender::MPoly& poly );
81 void AddFace( int v1, int v2, int v3, int v4 = 0 );
82
83 const Blender::Mesh* BMesh;
84 Blender::Mesh* triMesh;
85
86 friend class BlenderTessellatorGL;
87 friend class BlenderTessellatorP2T;
88 };
89
90 } // end of namespace Assimp
91
92 #endif // INCLUDED_AI_BLEND_BMESH_H
4848 #include "TinyFormatter.h"
4949
5050 // enable verbose log output. really verbose, so be careful.
51 #ifdef _DEBUG
51 #ifdef ASSIMP_BUILD_DEBUG
5252 # define ASSIMP_BUILD_BLENDER_DEBUG
5353 #endif
5454
277277 // --------------------------------------------------------
278278 // field parsing for pointer or dynamic array types
279279 // (boost::shared_ptr or boost::shared_array)
280 // The return value indicates whether the data was already cached.
280281 template <int error_policy, template <typename> class TOUT, typename T>
281 void ReadFieldPtr(TOUT<T>& out, const char* name,
282 const FileDatabase& db) const;
282 bool ReadFieldPtr(TOUT<T>& out, const char* name,
283 const FileDatabase& db,
284 bool non_recursive = false) const;
283285
284286 // --------------------------------------------------------
285287 // field parsing for static arrays of pointer or dynamic
286288 // array types (boost::shared_ptr[] or boost::shared_array[])
289 // The return value indicates whether the data was already cached.
287290 template <int error_policy, template <typename> class TOUT, typename T, size_t N>
288 void ReadFieldPtr(TOUT<T> (&out)[N], const char* name,
291 bool ReadFieldPtr(TOUT<T> (&out)[N], const char* name,
289292 const FileDatabase& db) const;
290293
291294 // --------------------------------------------------------
292295 // field parsing for `normal` values
296 // The return value indicates whether the data was already cached.
293297 template <int error_policy, typename T>
294298 void ReadField(T& out, const char* name,
295299 const FileDatabase& db) const;
298302
299303 // --------------------------------------------------------
300304 template <template <typename> class TOUT, typename T>
301 void ResolvePointer(TOUT<T>& out, const Pointer & ptrval,
302 const FileDatabase& db, const Field& f) const;
305 bool ResolvePointer(TOUT<T>& out, const Pointer & ptrval,
306 const FileDatabase& db, const Field& f,
307 bool non_recursive = false) const;
303308
304309 // --------------------------------------------------------
305310 template <template <typename> class TOUT, typename T>
306 void ResolvePointer(vector< TOUT<T> >& out, const Pointer & ptrval,
307 const FileDatabase& db, const Field& f) const;
308
309 // --------------------------------------------------------
310 void ResolvePointer( boost::shared_ptr< FileOffset >& out, const Pointer & ptrval,
311 const FileDatabase& db, const Field& f) const;
311 bool ResolvePointer(vector< TOUT<T> >& out, const Pointer & ptrval,
312 const FileDatabase& db, const Field& f, bool) const;
313
314 // --------------------------------------------------------
315 bool ResolvePointer( boost::shared_ptr< FileOffset >& out, const Pointer & ptrval,
316 const FileDatabase& db, const Field& f, bool) const;
312317
313318 // --------------------------------------------------------
314319 inline const FileBlockHead* LocateFileBlockForAddress(
383388 };
384389
385390 // -------------------------------------------------------------------------------------------------------
386 template <> inline void Structure :: ResolvePointer<boost::shared_ptr,ElemBase>(boost::shared_ptr<ElemBase>& out,
391 template <> inline bool Structure :: ResolvePointer<boost::shared_ptr,ElemBase>(boost::shared_ptr<ElemBase>& out,
387392 const Pointer & ptrval,
388393 const FileDatabase& db,
389 const Field& f
394 const Field& f,
395 bool
390396 ) const;
391397
392398
179179
180180 //--------------------------------------------------------------------------------
181181 template <int error_policy, template <typename> class TOUT, typename T>
182 void Structure :: ReadFieldPtr(TOUT<T>& out, const char* name, const FileDatabase& db) const
182 bool Structure :: ReadFieldPtr(TOUT<T>& out, const char* name, const FileDatabase& db,
183 bool non_recursive /*= false*/) const
183184 {
184185 const StreamReaderAny::pos old = db.reader->GetCurrentPos();
185186 Pointer ptrval;
202203 _defaultInitializer<error_policy>()(out,e.what());
203204
204205 out.reset();
205 return;
206 return false;
206207 }
207208
208209 // resolve the pointer and load the corresponding structure
209 ResolvePointer(out,ptrval,db,*f);
210
211 // and recover the previous stream position
212 db.reader->SetCurrentPos(old);
210 const bool res = ResolvePointer(out,ptrval,db,*f, non_recursive);
211
212 if(!non_recursive) {
213 // and recover the previous stream position
214 db.reader->SetCurrentPos(old);
215 }
213216
214217 #ifndef ASSIMP_BUILD_BLENDER_NO_STATS
215218 ++db.stats().fields_read;
216219 #endif
220
221 return res;
217222 }
218223
219224 //--------------------------------------------------------------------------------
220225 template <int error_policy, template <typename> class TOUT, typename T, size_t N>
221 void Structure :: ReadFieldPtr(TOUT<T> (&out)[N], const char* name,
226 bool Structure :: ReadFieldPtr(TOUT<T> (&out)[N], const char* name,
222227 const FileDatabase& db) const
223228 {
224229 // XXX see if we can reduce this to call to the 'normal' ReadFieldPtr
252257 for(size_t i = 0; i < N; ++i) {
253258 out[i].reset();
254259 }
255 return;
256 }
260 return false;
261 }
262
263 bool res = true;
257264 for(size_t i = 0; i < N; ++i) {
258265 // resolve the pointer and load the corresponding structure
259 ResolvePointer(out[i],ptrval[i],db,*f);
266 res = ResolvePointer(out[i],ptrval[i],db,*f) && res;
260267 }
261268
262269 // and recover the previous stream position
265272 #ifndef ASSIMP_BUILD_BLENDER_NO_STATS
266273 ++db.stats().fields_read;
267274 #endif
275 return res;
268276 }
269277
270278 //--------------------------------------------------------------------------------
295303
296304 //--------------------------------------------------------------------------------
297305 template <template <typename> class TOUT, typename T>
298 void Structure :: ResolvePointer(TOUT<T>& out, const Pointer & ptrval, const FileDatabase& db, const Field& f) const
299 {
300 out.reset();
306 bool Structure :: ResolvePointer(TOUT<T>& out, const Pointer & ptrval, const FileDatabase& db,
307 const Field& f,
308 bool non_recursive /*= false*/) const
309 {
310 out.reset(); // ensure null pointers work
301311 if (!ptrval.val) {
302 return;
312 return false;
303313 }
304314 const Structure& s = db.dna[f.type];
305315 // find the file block the pointer is pointing to
317327 // try to retrieve the object from the cache
318328 db.cache(out).get(s,out,ptrval);
319329 if (out) {
320 return;
330 return true;
321331 }
322332
323333 // seek to this location, but save the previous stream pointer.
333343 // cache the object before we convert it to avoid cyclic recursion.
334344 db.cache(out).set(s,out,ptrval);
335345
336 for (size_t i = 0; i < num; ++i,++o) {
337 s.Convert(*o,db);
338 }
339
340 db.reader->SetCurrentPos(pold);
346 // if the non_recursive flag is set, we don't do anything but leave
347 // the cursor at the correct position to resolve the object.
348 if (!non_recursive) {
349 for (size_t i = 0; i < num; ++i,++o) {
350 s.Convert(*o,db);
351 }
352
353 db.reader->SetCurrentPos(pold);
354 }
341355
342356 #ifndef ASSIMP_BUILD_BLENDER_NO_STATS
343357 if(out) {
344358 ++db.stats().pointers_resolved;
345359 }
346360 #endif
347 }
348
349 //--------------------------------------------------------------------------------
350 inline void Structure :: ResolvePointer( boost::shared_ptr< FileOffset >& out, const Pointer & ptrval, const FileDatabase& db, const Field& /*f*/) const
361 return false;
362 }
363
364
365 //--------------------------------------------------------------------------------
366 inline bool Structure :: ResolvePointer( boost::shared_ptr< FileOffset >& out, const Pointer & ptrval,
367 const FileDatabase& db,
368 const Field&,
369 bool) const
351370 {
352371 // Currently used exclusively by PackedFile::data to represent
353372 // a simple offset into the mapped BLEND file.
354373 out.reset();
355374 if (!ptrval.val) {
356 return;
375 return false;
357376 }
358377
359378 // find the file block the pointer is pointing to
361380
362381 out = boost::shared_ptr< FileOffset > (new FileOffset());
363382 out->val = block->start+ static_cast<size_t>((ptrval.val - block->address.val) );
383 return false;
364384 }
365385
366386 //--------------------------------------------------------------------------------
367387 template <template <typename> class TOUT, typename T>
368 void Structure :: ResolvePointer(vector< TOUT<T> >& out, const Pointer & ptrval, const FileDatabase& db, const Field& f) const
388 bool Structure :: ResolvePointer(vector< TOUT<T> >& out, const Pointer & ptrval,
389 const FileDatabase& db,
390 const Field& f,
391 bool) const
369392 {
370393 // This is a function overload, not a template specialization. According to
371394 // the partial ordering rules, it should be selected by the compiler
373396
374397 out.reset();
375398 if (!ptrval.val) {
376 return;
399 return false;
377400 }
378401
379402 // find the file block the pointer is pointing to
384407 const StreamReaderAny::pos pold = db.reader->GetCurrentPos();
385408 db.reader->SetCurrentPos(block->start+ static_cast<size_t>((ptrval.val - block->address.val) ));
386409
410 bool res = false;
387411 // allocate raw storage for the array
388412 out.resize(num);
389413 for (size_t i = 0; i< num; ++i) {
391415 Convert(val,db);
392416
393417 // and resolve the pointees
394 ResolvePointer(out[i],val,db,f);
418 res = ResolvePointer(out[i],val,db,f) && res;
395419 }
396420
397421 db.reader->SetCurrentPos(pold);
398 }
399
400 //--------------------------------------------------------------------------------
401 template <> void Structure :: ResolvePointer<boost::shared_ptr,ElemBase>(boost::shared_ptr<ElemBase>& out,
422 return res;
423 }
424
425 //--------------------------------------------------------------------------------
426 template <> bool Structure :: ResolvePointer<boost::shared_ptr,ElemBase>(boost::shared_ptr<ElemBase>& out,
402427 const Pointer & ptrval,
403428 const FileDatabase& db,
404 const Field& /*f*/
429 const Field&,
430 bool
405431 ) const
406432 {
407433 // Special case when the data type needs to be determined at runtime.
409435
410436 out.reset();
411437 if (!ptrval.val) {
412 return;
438 return false;
413439 }
414440
415441 // find the file block the pointer is pointing to
421447 // try to retrieve the object from the cache
422448 db.cache(out).get(s,out,ptrval);
423449 if (out) {
424 return;
450 return true;
425451 }
426452
427453 // seek to this location, but save the previous stream pointer.
439465 DefaultLogger::get()->warn((Formatter::format(),
440466 "Failed to find a converter for the `",s.name,"` structure"
441467 ));
442 return;
468 return false;
443469 }
444470
445471 // allocate the object hull
458484 // to perform additional type checking.
459485 out->dna_type = s.name.c_str();
460486
461
462487
463488 #ifndef ASSIMP_BUILD_BLENDER_NO_STATS
464489 ++db.stats().pointers_resolved;
465490 #endif
491 return false;
466492 }
467493
468494 //--------------------------------------------------------------------------------
0
01 /*
12 Open Asset Import Library (assimp)
23 ----------------------------------------------------------------------
4950
5051 #include "BlenderIntermediate.h"
5152 #include "BlenderModifier.h"
53 #include "BlenderBMesh.h"
5254
5355 #include "StreamReader.h"
5456 #include "MemoryIOWrapper.h"
359361 root->mNumChildren = static_cast<unsigned int>(no_parents.size());
360362 root->mChildren = new aiNode*[root->mNumChildren]();
361363 for (unsigned int i = 0; i < root->mNumChildren; ++i) {
362 root->mChildren[i] = ConvertNode(in, no_parents[i], conv);
364 root->mChildren[i] = ConvertNode(in, no_parents[i], conv, aiMatrix4x4());
363365 root->mChildren[i]->mParent = root;
364366 }
365367
444446 else {
445447 name = aiString( img->name );
446448 }
447 out->AddProperty(&name,AI_MATKEY_TEXTURE_DIFFUSE(
448 conv_data.next_texture[aiTextureType_DIFFUSE]++)
449 );
449
450 aiTextureType texture_type = aiTextureType_UNKNOWN;
451 MTex::MapType map_type = tex->mapto;
452
453 if (map_type & MTex::MapType_COL)
454 texture_type = aiTextureType_DIFFUSE;
455 else if (map_type & MTex::MapType_NORM) {
456 if (tex->tex->imaflag & Tex::ImageFlags_NORMALMAP) {
457 texture_type = aiTextureType_NORMALS;
458 }
459 else {
460 texture_type = aiTextureType_HEIGHT;
461 }
462 out->AddProperty(&tex->norfac,1,AI_MATKEY_BUMPSCALING);
463 }
464 else if (map_type & MTex::MapType_COLSPEC)
465 texture_type = aiTextureType_SPECULAR;
466 else if (map_type & MTex::MapType_COLMIR)
467 texture_type = aiTextureType_REFLECTION;
468 //else if (map_type & MTex::MapType_REF)
469 else if (map_type & MTex::MapType_SPEC)
470 texture_type = aiTextureType_SHININESS;
471 else if (map_type & MTex::MapType_EMIT)
472 texture_type = aiTextureType_EMISSIVE;
473 //else if (map_type & MTex::MapType_ALPHA)
474 //else if (map_type & MTex::MapType_HAR)
475 //else if (map_type & MTex::MapType_RAYMIRR)
476 //else if (map_type & MTex::MapType_TRANSLU)
477 else if (map_type & MTex::MapType_AMB)
478 texture_type = aiTextureType_AMBIENT;
479 else if (map_type & MTex::MapType_DISPLACE)
480 texture_type = aiTextureType_DISPLACEMENT;
481 //else if (map_type & MTex::MapType_WARP)
482
483 out->AddProperty(&name,AI_MATKEY_TEXTURE(texture_type,
484 conv_data.next_texture[texture_type]++));
485
450486 }
451487
452488 // ------------------------------------------------------------------------------------------------
471507 return;
472508 }
473509
474 // We can't support most of the texture types because the're mostly procedural.
510 // We can't support most of the texture types because they're mostly procedural.
475511 // These are substituted by a dummy texture.
476512 const char* dispnam = "";
477513 switch( rtex->type )
567603 // Usually, zero diffuse color means no diffuse color at all in the equation.
568604 // So we omit this member to express this intent.
569605 mout->AddProperty(&col,1,AI_MATKEY_COLOR_DIFFUSE);
606
607 if (mat->emit) {
608 aiColor3D emit_col(mat->emit * mat->r, mat->emit * mat->g, mat->emit * mat->b) ;
609 mout->AddProperty(&emit_col, 1, AI_MATKEY_COLOR_EMISSIVE) ;
610 }
570611 }
571612
572613 col = aiColor3D(mat->specr,mat->specg,mat->specb);
617658 ConversionData& conv_data, TempArray<std::vector,aiMesh>& temp
618659 )
619660 {
661 BlenderBMeshConverter BMeshConverter( mesh );
662 if ( BMeshConverter.ContainsBMesh( ) )
663 {
664 mesh = BMeshConverter.TriangulateBMesh( );
665 }
666
620667 typedef std::pair<const int,size_t> MyPair;
621 if (!mesh->totface || !mesh->totvert) {
668 if ((!mesh->totface && !mesh->totloop) || !mesh->totvert) {
622669 return;
623670 }
624671
631678 ThrowException("Number of vertices is larger than the corresponding array");
632679 }
633680
681 if (static_cast<size_t> ( mesh->totloop ) > mesh->mloop.size()) {
682 ThrowException("Number of vertices is larger than the corresponding array");
683 }
684
634685 // collect per-submesh numbers
635686 std::map<int,size_t> per_mat;
687 std::map<int,size_t> per_mat_verts;
636688 for (int i = 0; i < mesh->totface; ++i) {
637689
638690 const MFace& mf = mesh->mface[i];
639691 per_mat[ mf.mat_nr ]++;
692 per_mat_verts[ mf.mat_nr ] += mf.v4?4:3;
693 }
694
695 for (int i = 0; i < mesh->totpoly; ++i) {
696 const MPoly& mp = mesh->mpoly[i];
697 per_mat[ mp.mat_nr ]++;
698 per_mat_verts[ mp.mat_nr ] += mp.totloop;
640699 }
641700
642701 // ... and allocate the corresponding meshes
650709 temp->push_back(new aiMesh());
651710
652711 aiMesh* out = temp->back();
653 out->mVertices = new aiVector3D[it.second*4];
654 out->mNormals = new aiVector3D[it.second*4];
712 out->mVertices = new aiVector3D[per_mat_verts[it.first]];
713 out->mNormals = new aiVector3D[per_mat_verts[it.first]];
655714
656715 //out->mNumFaces = 0
657716 //out->mNumVertices = 0
774833 // }
775834 }
776835
836 for (int i = 0; i < mesh->totpoly; ++i) {
837
838 const MPoly& mf = mesh->mpoly[i];
839
840 aiMesh* const out = temp[ mat_num_to_mesh_idx[ mf.mat_nr ] ];
841 aiFace& f = out->mFaces[out->mNumFaces++];
842
843 f.mIndices = new unsigned int[ f.mNumIndices = mf.totloop ];
844 aiVector3D* vo = out->mVertices + out->mNumVertices;
845 aiVector3D* vn = out->mNormals + out->mNumVertices;
846
847 // XXX we can't fold this easily, because we are restricted
848 // to the member names from the BLEND file (v1,v2,v3,v4)
849 // which are assigned by the genblenddna.py script and
850 // cannot be changed without breaking the entire
851 // import process.
852 for (int j = 0;j < mf.totloop; ++j)
853 {
854 const MLoop& loop = mesh->mloop[mf.loopstart + j];
855
856 if (loop.v >= mesh->totvert) {
857 ThrowException("Vertex index out of range");
858 }
859
860 const MVert& v = mesh->mvert[loop.v];
861
862 vo->x = v.co[0];
863 vo->y = v.co[1];
864 vo->z = v.co[2];
865 vn->x = v.no[0];
866 vn->y = v.no[1];
867 vn->z = v.no[2];
868 f.mIndices[j] = out->mNumVertices++;
869
870 ++vo;
871 ++vn;
872
873 }
874 if (mf.totloop == 3)
875 {
876 out->mPrimitiveTypes |= aiPrimitiveType_TRIANGLE;
877 }
878 else
879 {
880 out->mPrimitiveTypes |= aiPrimitiveType_POLYGON;
881 }
882 }
883
777884 // collect texture coordinates, they're stored in a separate per-face buffer
778 if (mesh->mtface) {
885 if (mesh->mtface || mesh->mloopuv) {
779886 if (mesh->totface > static_cast<int> ( mesh->mtface.size())) {
780887 ThrowException("Number of UV faces is larger than the corresponding UV face array (#1)");
781888 }
798905 vo->y = v->uv[i][1];
799906 }
800907 }
908
909 for (int i = 0; i < mesh->totpoly; ++i) {
910 const MPoly& v = mesh->mpoly[i];
911 aiMesh* const out = temp[ mat_num_to_mesh_idx[ v.mat_nr ] ];
912 const aiFace& f = out->mFaces[out->mNumFaces++];
913
914 aiVector3D* vo = &out->mTextureCoords[0][out->mNumVertices];
915 for (unsigned int j = 0; j < f.mNumIndices; ++j,++vo,++out->mNumVertices) {
916 const MLoopUV& uv = mesh->mloopuv[v.loopstart + j];
917 vo->x = uv.uv[0];
918 vo->y = uv.uv[1];
919 }
920
921 }
801922 }
802923
803924 // collect texture coordinates, old-style (marked as deprecated in current blender sources)
827948 }
828949
829950 // collect vertex colors, stored separately as well
830 if (mesh->mcol) {
951 if (mesh->mcol || mesh->mloopcol) {
831952 if (mesh->totface > static_cast<int> ( (mesh->mcol.size()/4)) ) {
832953 ThrowException("Number of faces is larger than the corresponding color face array");
833954 }
854975 }
855976 for (unsigned int n = f.mNumIndices; n < 4; ++n);
856977 }
978
979 for (int i = 0; i < mesh->totpoly; ++i) {
980 const MPoly& v = mesh->mpoly[i];
981 aiMesh* const out = temp[ mat_num_to_mesh_idx[ v.mat_nr ] ];
982 const aiFace& f = out->mFaces[out->mNumFaces++];
983
984 aiColor4D* vo = &out->mColors[0][out->mNumVertices];
985 for (unsigned int j = 0; j < f.mNumIndices; ++j,++vo,++out->mNumVertices) {
986 const MLoopCol& col = mesh->mloopcol[v.loopstart + j];
987 vo->r = col.r;
988 vo->g = col.g;
989 vo->b = col.b;
990 vo->a = col.a;
991 }
992
993 }
994
857995 }
858996
859997 return;
860998 }
861999
8621000 // ------------------------------------------------------------------------------------------------
863 aiCamera* BlenderImporter::ConvertCamera(const Scene& /*in*/, const Object* /*obj*/, const Camera* /*mesh*/, ConversionData& /*conv_data*/)
1001 aiCamera* BlenderImporter::ConvertCamera(const Scene& /*in*/, const Object* obj, const Camera* camera, ConversionData& /*conv_data*/)
8641002 {
8651003 ScopeGuard<aiCamera> out(new aiCamera());
866
867 return NULL ; //out.dismiss();
868 }
869
870 // ------------------------------------------------------------------------------------------------
871 aiLight* BlenderImporter::ConvertLight(const Scene& /*in*/, const Object* /*obj*/, const Lamp* /*mesh*/, ConversionData& /*conv_data*/)
1004 out->mName = obj->id.name+2;
1005 out->mPosition = aiVector3D(0.f, 0.f, 0.f);
1006 out->mUp = aiVector3D(0.f, 1.f, 0.f);
1007 out->mLookAt = aiVector3D(0.f, 0.f, -1.f);
1008 return out.dismiss();
1009 }
1010
1011 // ------------------------------------------------------------------------------------------------
1012 aiLight* BlenderImporter::ConvertLight(const Scene& in, const Object* obj, const Lamp* lamp, ConversionData& conv_data)
8721013 {
8731014 ScopeGuard<aiLight> out(new aiLight());
874
875 return NULL ; //out.dismiss();
876 }
877
878 // ------------------------------------------------------------------------------------------------
879 aiNode* BlenderImporter::ConvertNode(const Scene& in, const Object* obj, ConversionData& conv_data)
1015 out->mName = obj->id.name+2;
1016
1017 switch (lamp->type)
1018 {
1019 case Lamp::Type_Local:
1020 out->mType = aiLightSource_POINT;
1021 break;
1022 case Lamp::Type_Sun:
1023 out->mType = aiLightSource_DIRECTIONAL;
1024
1025 // blender orients directional lights as facing toward -z
1026 out->mDirection = aiVector3D(0.f, 0.f, -1.f);
1027 break;
1028 default:
1029 break;
1030 }
1031
1032 out->mColorAmbient = aiColor3D(lamp->r, lamp->g, lamp->b) * lamp->energy;
1033 out->mColorSpecular = aiColor3D(lamp->r, lamp->g, lamp->b) * lamp->energy;
1034 out->mColorDiffuse = aiColor3D(lamp->r, lamp->g, lamp->b) * lamp->energy;
1035 return out.dismiss();
1036 }
1037
1038 // ------------------------------------------------------------------------------------------------
1039 aiNode* BlenderImporter::ConvertNode(const Scene& in, const Object* obj, ConversionData& conv_data, const aiMatrix4x4& parentTransform)
8801040 {
8811041 std::deque<const Object*> children;
8821042 for(std::set<const Object*>::iterator it = conv_data.objects.begin(); it != conv_data.objects.end() ;) {
9601120
9611121 for(unsigned int x = 0; x < 4; ++x) {
9621122 for(unsigned int y = 0; y < 4; ++y) {
963 node->mTransformation[y][x] = obj->parentinv[x][y];
964 }
965 }
966
967 aiMatrix4x4 m;
968 for(unsigned int x = 0; x < 4; ++x) {
969 for(unsigned int y = 0; y < 4; ++y) {
970 m[y][x] = obj->obmat[x][y];
971 }
972 }
1123 node->mTransformation[y][x] = obj->obmat[x][y];
1124 }
1125 }
1126
1127 aiMatrix4x4 m = parentTransform;
1128 m = m.Inverse();
9731129
9741130 node->mTransformation = m*node->mTransformation;
9751131
9771133 node->mNumChildren = static_cast<unsigned int>(children.size());
9781134 aiNode** nd = node->mChildren = new aiNode*[node->mNumChildren]();
9791135 for_each (const Object* nobj,children) {
980 *nd = ConvertNode(in,nobj,conv_data);
1136 *nd = ConvertNode(in,nobj,conv_data,node->mTransformation * parentTransform);
9811137 (*nd++)->mParent = node;
9821138 }
9831139 }
144144 // --------------------
145145 aiNode* ConvertNode(const Blender::Scene& in,
146146 const Blender::Object* obj,
147 Blender::ConversionData& conv_info
147 Blender::ConversionData& conv_info,
148 const aiMatrix4x4& parentTransform
148149 );
149150
150151 // --------------------
247247 }
248248 }
249249
250 // Only reverse the winding order if an odd number of axes were mirrored.
251 if (xs * ys * zs < 0) {
252 for( unsigned int i = 0; i < mesh->mNumFaces; i++) {
253 aiFace& face = mesh->mFaces[i];
254 for( unsigned int fi = 0; fi < face.mNumIndices / 2; ++fi)
255 std::swap( face.mIndices[fi], face.mIndices[face.mNumIndices - 1 - fi]);
256 }
257 }
258
250259 conv_data.meshes->push_back(mesh);
251260 }
252261 unsigned int* nind = new unsigned int[out.mNumMeshes*2];
4141 * @brief MACHINE GENERATED BY ./scripts/BlenderImporter/genblenddna.py
4242 */
4343 #include "AssimpPCH.h"
44 #ifndef AI_BUILD_NO_BLEND_IMPORTER
44 #ifndef ASSIMP_BUILD_NO_BLEND_IMPORTER
4545
4646 #include "BlenderDNA.h"
4747 #include "BlenderScene.h"
9999 ) const
100100 {
101101
102 ReadField<ErrorPolicy_Igno>((short&)dest.mapto,"mapto",db);
102103 ReadField<ErrorPolicy_Igno>((int&)dest.blendtype,"blendtype",db);
103104 ReadFieldPtr<ErrorPolicy_Igno>(dest.object,"*object",db);
104105 ReadFieldPtr<ErrorPolicy_Igno>(dest.tex,"*tex",db);
125126 ReadField<ErrorPolicy_Igno>(dest.specfac,"specfac",db);
126127 ReadField<ErrorPolicy_Igno>(dest.emitfac,"emitfac",db);
127128 ReadField<ErrorPolicy_Igno>(dest.hardfac,"hardfac",db);
129 ReadField<ErrorPolicy_Igno>(dest.norfac,"norfac",db);
128130
129131 db.reader->IncPtr(size);
130132 }
240242 const FileDatabase& db
241243 ) const
242244 {
243
244 {
245 boost::shared_ptr<Base> prev;
246 ReadFieldPtr<ErrorPolicy_Warn>(prev,"*prev",db);
247 dest.prev = prev.get();
248 }
249 ReadFieldPtr<ErrorPolicy_Warn>(dest.next,"*next",db);
250 ReadFieldPtr<ErrorPolicy_Warn>(dest.object,"*object",db);
251
252 db.reader->IncPtr(size);
245 // note: as per https://github.com/assimp/assimp/issues/128,
246 // reading the Object linked list recursively is prone to stack overflow.
247 // This structure converter is therefore an hand-written exception that
248 // does it iteratively.
249
250 const int initial_pos = db.reader->GetCurrentPos();
251
252 std::pair<Base*, int> todo = std::make_pair(&dest, initial_pos);
253 for ( ;; ) {
254
255 Base& cur_dest = *todo.first;
256 db.reader->SetCurrentPos(todo.second);
257
258 // we know that this is a double-linked, circular list which we never
259 // traverse backwards, so don't bother resolving the back links.
260 cur_dest.prev = NULL;
261
262 ReadFieldPtr<ErrorPolicy_Warn>(cur_dest.object,"*object",db);
263
264 // the return value of ReadFieldPtr indicates whether the object
265 // was already cached. In this case, we don't need to resolve
266 // it again.
267 if(!ReadFieldPtr<ErrorPolicy_Warn>(cur_dest.next,"*next",db, true) && cur_dest.next) {
268 todo = std::make_pair(&*cur_dest.next, db.reader->GetCurrentPos());
269 continue;
270 }
271 break;
272 }
273
274 db.reader->SetCurrentPos(initial_pos + size);
253275 }
254276
255277 //--------------------------------------------------------------------------------
305327 }
306328
307329 //--------------------------------------------------------------------------------
330 template <> void Structure :: Convert<MTexPoly> (
331 MTexPoly& dest,
332 const FileDatabase& db
333 ) const
334 {
335
336 {
337 boost::shared_ptr<Image> tpage;
338 ReadFieldPtr<ErrorPolicy_Igno>(tpage,"*tpage",db);
339 dest.tpage = tpage.get();
340 }
341 ReadField<ErrorPolicy_Igno>(dest.flag,"flag",db);
342 ReadField<ErrorPolicy_Igno>(dest.transp,"transp",db);
343 ReadField<ErrorPolicy_Igno>(dest.mode,"mode",db);
344 ReadField<ErrorPolicy_Igno>(dest.tile,"tile",db);
345 ReadField<ErrorPolicy_Igno>(dest.pad,"pad",db);
346
347 db.reader->IncPtr(size);
348 }
349
350 //--------------------------------------------------------------------------------
308351 template <> void Structure :: Convert<Mesh> (
309352 Mesh& dest,
310353 const FileDatabase& db
315358 ReadField<ErrorPolicy_Fail>(dest.totface,"totface",db);
316359 ReadField<ErrorPolicy_Fail>(dest.totedge,"totedge",db);
317360 ReadField<ErrorPolicy_Fail>(dest.totvert,"totvert",db);
361 ReadField<ErrorPolicy_Igno>(dest.totloop,"totloop",db);
362 ReadField<ErrorPolicy_Igno>(dest.totpoly,"totpoly",db);
318363 ReadField<ErrorPolicy_Igno>(dest.subdiv,"subdiv",db);
319364 ReadField<ErrorPolicy_Igno>(dest.subdivr,"subdivr",db);
320365 ReadField<ErrorPolicy_Igno>(dest.subsurftype,"subsurftype",db);
324369 ReadFieldPtr<ErrorPolicy_Igno>(dest.tface,"*tface",db);
325370 ReadFieldPtr<ErrorPolicy_Fail>(dest.mvert,"*mvert",db);
326371 ReadFieldPtr<ErrorPolicy_Warn>(dest.medge,"*medge",db);
372 ReadFieldPtr<ErrorPolicy_Igno>(dest.mloop,"*mloop",db);
373 ReadFieldPtr<ErrorPolicy_Igno>(dest.mloopuv,"*mloopuv",db);
374 ReadFieldPtr<ErrorPolicy_Igno>(dest.mloopcol,"*mloopcol",db);
375 ReadFieldPtr<ErrorPolicy_Igno>(dest.mpoly,"*mpoly",db);
376 ReadFieldPtr<ErrorPolicy_Igno>(dest.mtpoly,"*mtpoly",db);
327377 ReadFieldPtr<ErrorPolicy_Igno>(dest.dvert,"*dvert",db);
328378 ReadFieldPtr<ErrorPolicy_Igno>(dest.mcol,"*mcol",db);
329379 ReadFieldPtr<ErrorPolicy_Fail>(dest.mat,"**mat",db);
352402 {
353403
354404 ReadField<ErrorPolicy_Fail>(dest.id,"id",db);
405
406 db.reader->IncPtr(size);
407 }
408
409 //--------------------------------------------------------------------------------
410 template <> void Structure :: Convert<MLoopCol> (
411 MLoopCol& dest,
412 const FileDatabase& db
413 ) const
414 {
415
416 ReadField<ErrorPolicy_Igno>(dest.r,"r",db);
417 ReadField<ErrorPolicy_Igno>(dest.g,"g",db);
418 ReadField<ErrorPolicy_Igno>(dest.b,"b",db);
419 ReadField<ErrorPolicy_Igno>(dest.a,"a",db);
355420
356421 db.reader->IncPtr(size);
357422 }
389454 }
390455
391456 //--------------------------------------------------------------------------------
457 template <> void Structure :: Convert<MLoopUV> (
458 MLoopUV& dest,
459 const FileDatabase& db
460 ) const
461 {
462
463 ReadFieldArray<ErrorPolicy_Igno>(dest.uv,"uv",db);
464 ReadField<ErrorPolicy_Igno>(dest.flag,"flag",db);
465
466 db.reader->IncPtr(size);
467 }
468
469 //--------------------------------------------------------------------------------
392470 template <> void Structure :: Convert<GroupObject> (
393471 GroupObject& dest,
394472 const FileDatabase& db
411489
412490 ReadFieldPtr<ErrorPolicy_Igno>(dest.first,"*first",db);
413491 ReadFieldPtr<ErrorPolicy_Igno>(dest.last,"*last",db);
492
493 db.reader->IncPtr(size);
494 }
495
496 //--------------------------------------------------------------------------------
497 template <> void Structure :: Convert<MLoop> (
498 MLoop& dest,
499 const FileDatabase& db
500 ) const
501 {
502
503 ReadField<ErrorPolicy_Igno>(dest.v,"v",db);
504 ReadField<ErrorPolicy_Igno>(dest.e,"e",db);
414505
415506 db.reader->IncPtr(size);
416507 }
455546 ReadField<ErrorPolicy_Fail>(dest.g,"g",db);
456547 ReadField<ErrorPolicy_Fail>(dest.b,"b",db);
457548 ReadField<ErrorPolicy_Fail>(dest.a,"a",db);
549
550 db.reader->IncPtr(size);
551 }
552
553 //--------------------------------------------------------------------------------
554 template <> void Structure :: Convert<MPoly> (
555 MPoly& dest,
556 const FileDatabase& db
557 ) const
558 {
559
560 ReadField<ErrorPolicy_Igno>(dest.loopstart,"loopstart",db);
561 ReadField<ErrorPolicy_Igno>(dest.totloop,"totloop",db);
562 ReadField<ErrorPolicy_Igno>(dest.mat_nr,"mat_nr",db);
563 ReadField<ErrorPolicy_Igno>(dest.flag,"flag",db);
564
565 db.reader->IncPtr(size);
566 }
567
568 //--------------------------------------------------------------------------------
569 template <> void Structure :: Convert<Scene> (
570 Scene& dest,
571 const FileDatabase& db
572 ) const
573 {
574
575 ReadField<ErrorPolicy_Fail>(dest.id,"id",db);
576 ReadFieldPtr<ErrorPolicy_Warn>(dest.camera,"*camera",db);
577 ReadFieldPtr<ErrorPolicy_Warn>(dest.world,"*world",db);
578 ReadFieldPtr<ErrorPolicy_Warn>(dest.basact,"*basact",db);
579 ReadField<ErrorPolicy_Igno>(dest.base,"base",db);
580
581 db.reader->IncPtr(size);
582 }
583
584 //--------------------------------------------------------------------------------
585 template <> void Structure :: Convert<Library> (
586 Library& dest,
587 const FileDatabase& db
588 ) const
589 {
590
591 ReadField<ErrorPolicy_Fail>(dest.id,"id",db);
592 ReadFieldArray<ErrorPolicy_Warn>(dest.name,"name",db);
593 ReadFieldArray<ErrorPolicy_Fail>(dest.filename,"filename",db);
594 ReadFieldPtr<ErrorPolicy_Warn>(dest.parent,"*parent",db);
595
596 db.reader->IncPtr(size);
597 }
598
599 //--------------------------------------------------------------------------------
600 template <> void Structure :: Convert<Tex> (
601 Tex& dest,
602 const FileDatabase& db
603 ) const
604 {
605 ReadField<ErrorPolicy_Igno>((short&)dest.imaflag,"imaflag",db);
606 ReadField<ErrorPolicy_Fail>((int&)dest.type,"type",db);
607 ReadFieldPtr<ErrorPolicy_Warn>(dest.ima,"*ima",db);
608
609 db.reader->IncPtr(size);
610 }
611
612 //--------------------------------------------------------------------------------
613 template <> void Structure :: Convert<Camera> (
614 Camera& dest,
615 const FileDatabase& db
616 ) const
617 {
618
619 ReadField<ErrorPolicy_Fail>(dest.id,"id",db);
620 ReadField<ErrorPolicy_Warn>((int&)dest.type,"type",db);
621 ReadField<ErrorPolicy_Warn>((int&)dest.flag,"flag",db);
622 ReadField<ErrorPolicy_Warn>(dest.angle,"angle",db);
623
624 db.reader->IncPtr(size);
625 }
626
627 //--------------------------------------------------------------------------------
628 template <> void Structure :: Convert<MirrorModifierData> (
629 MirrorModifierData& dest,
630 const FileDatabase& db
631 ) const
632 {
633
634 ReadField<ErrorPolicy_Fail>(dest.modifier,"modifier",db);
635 ReadField<ErrorPolicy_Igno>(dest.axis,"axis",db);
636 ReadField<ErrorPolicy_Igno>(dest.flag,"flag",db);
637 ReadField<ErrorPolicy_Igno>(dest.tolerance,"tolerance",db);
638 ReadFieldPtr<ErrorPolicy_Igno>(dest.mirror_ob,"*mirror_ob",db);
458639
459640 db.reader->IncPtr(size);
460641 }
493674 }
494675
495676 //--------------------------------------------------------------------------------
496 template <> void Structure :: Convert<Scene> (
497 Scene& dest,
498 const FileDatabase& db
499 ) const
500 {
501
502 ReadField<ErrorPolicy_Fail>(dest.id,"id",db);
503 ReadFieldPtr<ErrorPolicy_Warn>(dest.camera,"*camera",db);
504 ReadFieldPtr<ErrorPolicy_Warn>(dest.world,"*world",db);
505 ReadFieldPtr<ErrorPolicy_Warn>(dest.basact,"*basact",db);
506 ReadField<ErrorPolicy_Igno>(dest.base,"base",db);
507
508 db.reader->IncPtr(size);
509 }
510
511 //--------------------------------------------------------------------------------
512 template <> void Structure :: Convert<Library> (
513 Library& dest,
514 const FileDatabase& db
515 ) const
516 {
517
518 ReadField<ErrorPolicy_Fail>(dest.id,"id",db);
519 ReadFieldArray<ErrorPolicy_Warn>(dest.name,"name",db);
520 ReadFieldArray<ErrorPolicy_Fail>(dest.filename,"filename",db);
521 ReadFieldPtr<ErrorPolicy_Warn>(dest.parent,"*parent",db);
522
523 db.reader->IncPtr(size);
524 }
525
526 //--------------------------------------------------------------------------------
527 template <> void Structure :: Convert<Tex> (
528 Tex& dest,
529 const FileDatabase& db
530 ) const
531 {
532
533 ReadField<ErrorPolicy_Fail>((int&)dest.type,"type",db);
534 ReadFieldPtr<ErrorPolicy_Warn>(dest.ima,"*ima",db);
535
536 db.reader->IncPtr(size);
537 }
538
539 //--------------------------------------------------------------------------------
540 template <> void Structure :: Convert<Camera> (
541 Camera& dest,
542 const FileDatabase& db
543 ) const
544 {
545
546 ReadField<ErrorPolicy_Fail>(dest.id,"id",db);
547 ReadField<ErrorPolicy_Warn>((int&)dest.type,"type",db);
548 ReadField<ErrorPolicy_Warn>((int&)dest.flag,"flag",db);
549 ReadField<ErrorPolicy_Warn>(dest.angle,"angle",db);
550
551 db.reader->IncPtr(size);
552 }
553
554 //--------------------------------------------------------------------------------
555 template <> void Structure :: Convert<MirrorModifierData> (
556 MirrorModifierData& dest,
557 const FileDatabase& db
558 ) const
559 {
560
561 ReadField<ErrorPolicy_Fail>(dest.modifier,"modifier",db);
562 ReadField<ErrorPolicy_Igno>(dest.axis,"axis",db);
563 ReadField<ErrorPolicy_Igno>(dest.flag,"flag",db);
564 ReadField<ErrorPolicy_Igno>(dest.tolerance,"tolerance",db);
565 ReadFieldPtr<ErrorPolicy_Igno>(dest.mirror_ob,"*mirror_ob",db);
566
567 db.reader->IncPtr(size);
568 }
569
570 //--------------------------------------------------------------------------------
571677 void DNA::RegisterConverters() {
572678
573679 converters["Object"] = DNA::FactoryPair( &Structure::Allocate<Object>, &Structure::Convert<Object> );
582688 converters["Base"] = DNA::FactoryPair( &Structure::Allocate<Base>, &Structure::Convert<Base> );
583689 converters["MTFace"] = DNA::FactoryPair( &Structure::Allocate<MTFace>, &Structure::Convert<MTFace> );
584690 converters["Material"] = DNA::FactoryPair( &Structure::Allocate<Material>, &Structure::Convert<Material> );
691 converters["MTexPoly"] = DNA::FactoryPair( &Structure::Allocate<MTexPoly>, &Structure::Convert<MTexPoly> );
585692 converters["Mesh"] = DNA::FactoryPair( &Structure::Allocate<Mesh>, &Structure::Convert<Mesh> );
586693 converters["MDeformVert"] = DNA::FactoryPair( &Structure::Allocate<MDeformVert>, &Structure::Convert<MDeformVert> );
587694 converters["World"] = DNA::FactoryPair( &Structure::Allocate<World>, &Structure::Convert<World> );
695 converters["MLoopCol"] = DNA::FactoryPair( &Structure::Allocate<MLoopCol>, &Structure::Convert<MLoopCol> );
588696 converters["MVert"] = DNA::FactoryPair( &Structure::Allocate<MVert>, &Structure::Convert<MVert> );
589697 converters["MEdge"] = DNA::FactoryPair( &Structure::Allocate<MEdge>, &Structure::Convert<MEdge> );
698 converters["MLoopUV"] = DNA::FactoryPair( &Structure::Allocate<MLoopUV>, &Structure::Convert<MLoopUV> );
590699 converters["GroupObject"] = DNA::FactoryPair( &Structure::Allocate<GroupObject>, &Structure::Convert<GroupObject> );
591700 converters["ListBase"] = DNA::FactoryPair( &Structure::Allocate<ListBase>, &Structure::Convert<ListBase> );
701 converters["MLoop"] = DNA::FactoryPair( &Structure::Allocate<MLoop>, &Structure::Convert<MLoop> );
592702 converters["ModifierData"] = DNA::FactoryPair( &Structure::Allocate<ModifierData>, &Structure::Convert<ModifierData> );
593703 converters["ID"] = DNA::FactoryPair( &Structure::Allocate<ID>, &Structure::Convert<ID> );
594704 converters["MCol"] = DNA::FactoryPair( &Structure::Allocate<MCol>, &Structure::Convert<MCol> );
595 converters["Image"] = DNA::FactoryPair( &Structure::Allocate<Image>, &Structure::Convert<Image> );
705 converters["MPoly"] = DNA::FactoryPair( &Structure::Allocate<MPoly>, &Structure::Convert<MPoly> );
596706 converters["Scene"] = DNA::FactoryPair( &Structure::Allocate<Scene>, &Structure::Convert<Scene> );
597707 converters["Library"] = DNA::FactoryPair( &Structure::Allocate<Library>, &Structure::Convert<Library> );
598708 converters["Tex"] = DNA::FactoryPair( &Structure::Allocate<Tex>, &Structure::Convert<Tex> );
599709 converters["Camera"] = DNA::FactoryPair( &Structure::Allocate<Camera>, &Structure::Convert<Camera> );
600710 converters["MirrorModifierData"] = DNA::FactoryPair( &Structure::Allocate<MirrorModifierData>, &Structure::Convert<MirrorModifierData> );
711 converters["Image"] = DNA::FactoryPair( &Structure::Allocate<Image>, &Structure::Convert<Image> );
601712 }
602713
603714
9393
9494 struct Object;
9595 struct MTex;
96 struct Image;
9697
9798 #define AI_BLEND_MESH_MAX_VERTS 2000000000L
9899
153154 int v1, v2 FAIL;
154155 char crease, bweight;
155156 short flag;
157 };
158
159 // -------------------------------------------------------------------------------
160 struct MLoop : ElemBase {
161 int v, e;
162 };
163
164 // -------------------------------------------------------------------------------
165 struct MLoopUV : ElemBase {
166 float uv[2];
167 int flag;
168 };
169
170 // -------------------------------------------------------------------------------
171 // Note that red and blue are not swapped, as with MCol
172 struct MLoopCol : ElemBase {
173 char r, g, b, a;
174 };
175
176 // -------------------------------------------------------------------------------
177 struct MPoly : ElemBase {
178 int loopstart;
179 int totloop;
180 short mat_nr;
181 char flag;
182 };
183
184 // -------------------------------------------------------------------------------
185 struct MTexPoly : ElemBase {
186 Image* tpage;
187 char flag, transp;
188 short mode, tile, pad;
156189 };
157190
158191 // -------------------------------------------------------------------------------
234267 int totface FAIL;
235268 int totedge FAIL;
236269 int totvert FAIL;
270 int totloop;
271 int totpoly;
237272
238273 short subdiv;
239274 short subdivr;
245280 vector<TFace> tface;
246281 vector<MVert> mvert FAIL;
247282 vector<MEdge> medge WARN;
283 vector<MLoop> mloop;
284 vector<MLoopUV> mloopuv;
285 vector<MLoopCol> mloopcol;
286 vector<MPoly> mpoly;
287 vector<MTexPoly> mtpoly;
248288 vector<MDeformVert> dvert;
249289 vector<MCol> mcol;
250290
557597 ,Type_VOXELDATA = 15
558598 };
559599
600 enum ImageFlags {
601 ImageFlags_INTERPOL = 1
602 ,ImageFlags_USEALPHA = 2
603 ,ImageFlags_MIPMAP = 4
604 ,ImageFlags_IMAROT = 16
605 ,ImageFlags_CALCALPHA = 32
606 ,ImageFlags_NORMALMAP = 2048
607 ,ImageFlags_GAUSS_MIP = 4096
608 ,ImageFlags_FILTER_MIN = 8192
609 ,ImageFlags_DERIVATIVEMAP = 16384
610 };
611
560612 ID id FAIL;
561613 // AnimData *adt;
562614
577629 //short noisedepth, noisetype;
578630 //short noisebasis, noisebasis2;
579631
580 //short imaflag, flag;
632 //short flag;
633 ImageFlags imaflag;
581634 Type type FAIL;
582635 //short stype;
583636
644697 ,BlendType_BLEND_COLOR = 13
645698 };
646699
647 // short texco, mapto, maptoneg;
700 enum MapType {
701 MapType_COL = 1
702 ,MapType_NORM = 2
703 ,MapType_COLSPEC = 4
704 ,MapType_COLMIR = 8
705 ,MapType_REF = 16
706 ,MapType_SPEC = 32
707 ,MapType_EMIT = 64
708 ,MapType_ALPHA = 128
709 ,MapType_HAR = 256
710 ,MapType_RAYMIRR = 512
711 ,MapType_TRANSLU = 1024
712 ,MapType_AMB = 2048
713 ,MapType_DISPLACE = 4096
714 ,MapType_WARP = 8192
715 };
716
717 // short texco, maptoneg;
718 MapType mapto;
648719
649720 BlendType blendtype;
650721 boost::shared_ptr<Object> object;
664735
665736 //float colfac, varfac;
666737
667 //float norfac, dispfac, warpfac;
738 float norfac;
739 //float dispfac, warpfac;
668740 float colspecfac, mirrfac, alphafac;
669741 float difffac, specfac, emitfac, hardfac;
670742 //float raymirrfac, translfac, ambfac;
119119 ) const
120120 ;
121121
122 template <> void Structure :: Convert<MTexPoly> (
123 MTexPoly& dest,
124 const FileDatabase& db
125 ) const
126 ;
127
122128 template <> void Structure :: Convert<Mesh> (
123129 Mesh& dest,
124130 const FileDatabase& db
137143 ) const
138144 ;
139145
146 template <> void Structure :: Convert<MLoopCol> (
147 MLoopCol& dest,
148 const FileDatabase& db
149 ) const
150 ;
151
140152 template <> void Structure :: Convert<MVert> (
141153 MVert& dest,
142154 const FileDatabase& db
149161 ) const
150162 ;
151163
164 template <> void Structure :: Convert<MLoopUV> (
165 MLoopUV& dest,
166 const FileDatabase& db
167 ) const
168 ;
169
152170 template <> void Structure :: Convert<GroupObject> (
153171 GroupObject& dest,
154172 const FileDatabase& db
161179 ) const
162180 ;
163181
182 template <> void Structure :: Convert<MLoop> (
183 MLoop& dest,
184 const FileDatabase& db
185 ) const
186 ;
187
164188 template <> void Structure :: Convert<ModifierData> (
165189 ModifierData& dest,
166190 const FileDatabase& db
179203 ) const
180204 ;
181205
206 template <> void Structure :: Convert<MPoly> (
207 MPoly& dest,
208 const FileDatabase& db
209 ) const
210 ;
211
212 template <> void Structure :: Convert<Scene> (
213 Scene& dest,
214 const FileDatabase& db
215 ) const
216 ;
217
218 template <> void Structure :: Convert<Library> (
219 Library& dest,
220 const FileDatabase& db
221 ) const
222 ;
223
224 template <> void Structure :: Convert<Tex> (
225 Tex& dest,
226 const FileDatabase& db
227 ) const
228 ;
229
230 template <> void Structure :: Convert<Camera> (
231 Camera& dest,
232 const FileDatabase& db
233 ) const
234 ;
235
236 template <> void Structure :: Convert<MirrorModifierData> (
237 MirrorModifierData& dest,
238 const FileDatabase& db
239 ) const
240 ;
241
182242 template <> void Structure :: Convert<Image> (
183243 Image& dest,
184244 const FileDatabase& db
185245 ) const
186246 ;
187247
188 template <> void Structure :: Convert<Scene> (
189 Scene& dest,
190 const FileDatabase& db
191 ) const
192 ;
193
194 template <> void Structure :: Convert<Library> (
195 Library& dest,
196 const FileDatabase& db
197 ) const
198 ;
199
200 template <> void Structure :: Convert<Tex> (
201 Tex& dest,
202 const FileDatabase& db
203 ) const
204 ;
205
206 template <> void Structure :: Convert<Camera> (
207 Camera& dest,
208 const FileDatabase& db
209 ) const
210 ;
211
212 template <> void Structure :: Convert<MirrorModifierData> (
213 MirrorModifierData& dest,
214 const FileDatabase& db
215 ) const
216 ;
217
218248
219249 }
220250 }
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2013, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file BlenderTessellator.cpp
41 * @brief A simple tessellation wrapper
42 */
43
44 #include "AssimpPCH.h"
45
46 #ifndef ASSIMP_BUILD_NO_BLEND_IMPORTER
47
48 #include "BlenderDNA.h"
49 #include "BlenderScene.h"
50 #include "BlenderBMesh.h"
51 #include "BlenderTessellator.h"
52
53 static const unsigned int BLEND_TESS_MAGIC = 0x83ed9ac3;
54
55 #if ASSIMP_BLEND_WITH_GLU_TESSELLATE
56
57 namspace Assimp
58 {
59 template< > const std::string LogFunctions< BlenderTessellatorGL >::log_prefix = "BLEND_TESS_GL: ";
60 }
61
62 using namespace Assimp;
63 using namespace Assimp::Blender;
64
65 #ifndef CALLBACK
66 #define CALLBACK
67 #endif
68
69 // ------------------------------------------------------------------------------------------------
70 BlenderTessellatorGL::BlenderTessellatorGL( BlenderBMeshConverter& converter ):
71 converter( &converter )
72 {
73 }
74
75 // ------------------------------------------------------------------------------------------------
76 BlenderTessellatorGL::~BlenderTessellatorGL( )
77 {
78 }
79
80 // ------------------------------------------------------------------------------------------------
81 void BlenderTessellatorGL::Tessellate( const MLoop* polyLoop, int vertexCount, const std::vector< MVert >& vertices )
82 {
83 AssertVertexCount( vertexCount );
84
85 std::vector< VertexGL > polyLoopGL;
86 GenerateLoopVerts( polyLoopGL, polyLoop, vertexCount, vertices );
87
88 TessDataGL tessData;
89 Tesssellate( polyLoopGL, tessData );
90
91 TriangulateDrawCalls( tessData );
92 }
93
94 // ------------------------------------------------------------------------------------------------
95 void BlenderTessellatorGL::AssertVertexCount( int vertexCount )
96 {
97 if ( vertexCount <= 4 )
98 {
99 ThrowException( "Expected more than 4 vertices for tessellation" );
100 }
101 }
102
103 // ------------------------------------------------------------------------------------------------
104 void BlenderTessellatorGL::GenerateLoopVerts( std::vector< VertexGL >& polyLoopGL, const MLoop* polyLoop, int vertexCount, const std::vector< MVert >& vertices )
105 {
106 for ( int i = 0; i < vertexCount; ++i )
107 {
108 const MLoop& loopItem = polyLoop[ i ];
109 const MVert& vertex = vertices[ loopItem.v ];
110 polyLoopGL.push_back( VertexGL( vertex.co[ 0 ], vertex.co[ 1 ], vertex.co[ 2 ], loopItem.v, BLEND_TESS_MAGIC ) );
111 }
112 }
113
114 // ------------------------------------------------------------------------------------------------
115 void BlenderTessellatorGL::Tesssellate( std::vector< VertexGL >& polyLoopGL, TessDataGL& tessData )
116 {
117 GLUtesselator* tessellator = gluNewTess( );
118 gluTessCallback( tessellator, GLU_TESS_BEGIN_DATA, reinterpret_cast< void ( CALLBACK * )( ) >( TessellateBegin ) );
119 gluTessCallback( tessellator, GLU_TESS_END_DATA, reinterpret_cast< void ( CALLBACK * )( ) >( TessellateEnd ) );
120 gluTessCallback( tessellator, GLU_TESS_VERTEX_DATA, reinterpret_cast< void ( CALLBACK * )( ) >( TessellateVertex ) );
121 gluTessCallback( tessellator, GLU_TESS_COMBINE_DATA, reinterpret_cast< void ( CALLBACK * )( ) >( TessellateCombine ) );
122 gluTessCallback( tessellator, GLU_TESS_EDGE_FLAG_DATA, reinterpret_cast< void ( CALLBACK * )( ) >( TessellateEdgeFlag ) );
123 gluTessCallback( tessellator, GLU_TESS_ERROR_DATA, reinterpret_cast< void ( CALLBACK * )( ) >( TessellateError ) );
124 gluTessProperty( tessellator, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_NONZERO );
125
126 gluTessBeginPolygon( tessellator, &tessData );
127 gluTessBeginContour( tessellator );
128
129 for ( unsigned int i = 0; i < polyLoopGL.size( ); ++i )
130 {
131 gluTessVertex( tessellator, reinterpret_cast< GLdouble* >( &polyLoopGL[ i ] ), &polyLoopGL[ i ] );
132 }
133
134 gluTessEndContour( tessellator );
135 gluTessEndPolygon( tessellator );
136 }
137
138 // ------------------------------------------------------------------------------------------------
139 void BlenderTessellatorGL::TriangulateDrawCalls( const TessDataGL& tessData )
140 {
141 // NOTE - Because we are supplying a callback to GLU_TESS_EDGE_FLAG_DATA we don't technically
142 // need support for GL_TRIANGLE_STRIP and GL_TRIANGLE_FAN but we'll keep it here in case
143 // GLU tessellate changes or tristrips and fans are wanted.
144 // See: http://www.opengl.org/sdk/docs/man2/xhtml/gluTessCallback.xml
145 for ( unsigned int i = 0; i < tessData.drawCalls.size( ); ++i )
146 {
147 const DrawCallGL& drawCallGL = tessData.drawCalls[ i ];
148 const VertexGL* vertices = &tessData.vertices[ drawCallGL.baseVertex ];
149 if ( drawCallGL.drawMode == GL_TRIANGLES )
150 {
151 MakeFacesFromTris( vertices, drawCallGL.vertexCount );
152 }
153 else if ( drawCallGL.drawMode == GL_TRIANGLE_STRIP )
154 {
155 MakeFacesFromTriStrip( vertices, drawCallGL.vertexCount );
156 }
157 else if ( drawCallGL.drawMode == GL_TRIANGLE_FAN )
158 {
159 MakeFacesFromTriFan( vertices, drawCallGL.vertexCount );
160 }
161 }
162 }
163
164 // ------------------------------------------------------------------------------------------------
165 void BlenderTessellatorGL::MakeFacesFromTris( const VertexGL* vertices, int vertexCount )
166 {
167 int triangleCount = vertexCount / 3;
168 for ( int i = 0; i < triangleCount; ++i )
169 {
170 int vertexBase = i * 3;
171 converter->AddFace( vertices[ vertexBase + 0 ].index, vertices[ vertexBase + 1 ].index, vertices[ vertexBase + 2 ].index );
172 }
173 }
174
175 // ------------------------------------------------------------------------------------------------
176 void BlenderTessellatorGL::MakeFacesFromTriStrip( const VertexGL* vertices, int vertexCount )
177 {
178 int triangleCount = vertexCount - 2;
179 for ( int i = 0; i < triangleCount; ++i )
180 {
181 int vertexBase = i;
182 converter->AddFace( vertices[ vertexBase + 0 ].index, vertices[ vertexBase + 1 ].index, vertices[ vertexBase + 2 ].index );
183 }
184 }
185
186 // ------------------------------------------------------------------------------------------------
187 void BlenderTessellatorGL::MakeFacesFromTriFan( const VertexGL* vertices, int vertexCount )
188 {
189 int triangleCount = vertexCount - 2;
190 for ( int i = 0; i < triangleCount; ++i )
191 {
192 int vertexBase = i;
193 converter->AddFace( vertices[ 0 ].index, vertices[ vertexBase + 1 ].index, vertices[ vertexBase + 2 ].index );
194 }
195 }
196
197 // ------------------------------------------------------------------------------------------------
198 void BlenderTessellatorGL::TessellateBegin( GLenum drawModeGL, void* userData )
199 {
200 TessDataGL& tessData = *reinterpret_cast< TessDataGL* >( userData );
201 tessData.drawCalls.push_back( DrawCallGL( drawModeGL, tessData.vertices.size( ) ) );
202 }
203
204 // ------------------------------------------------------------------------------------------------
205 void BlenderTessellatorGL::TessellateEnd( void* )
206 {
207 // Do nothing
208 }
209
210 // ------------------------------------------------------------------------------------------------
211 void BlenderTessellatorGL::TessellateVertex( const void* vtxData, void* userData )
212 {
213 TessDataGL& tessData = *reinterpret_cast< TessDataGL* >( userData );
214
215 const VertexGL& vertex = *reinterpret_cast< const VertexGL* >( vtxData );
216 if ( vertex.magic != BLEND_TESS_MAGIC )
217 {
218 ThrowException( "Point returned by GLU Tessellate was probably not one of ours. This indicates we need a new way to store vertex information" );
219 }
220 tessData.vertices.push_back( vertex );
221 if ( tessData.drawCalls.size( ) == 0 )
222 {
223 ThrowException( "\"Vertex\" callback received before \"Begin\"" );
224 }
225 ++( tessData.drawCalls.back( ).vertexCount );
226 }
227
228 // ------------------------------------------------------------------------------------------------
229 void BlenderTessellatorGL::TessellateCombine( const GLdouble intersection[ 3 ], const GLdouble* [ 4 ], const GLfloat [ 4 ], GLdouble** out, void* userData )
230 {
231 ThrowException( "Intersected polygon loops are not yet supported" );
232 }
233
234 // ------------------------------------------------------------------------------------------------
235 void BlenderTessellatorGL::TessellateEdgeFlag( GLboolean, void* )
236 {
237 // Do nothing
238 }
239
240 // ------------------------------------------------------------------------------------------------
241 void BlenderTessellatorGL::TessellateError( GLenum errorCode, void* )
242 {
243 ThrowException( reinterpret_cast< const char* >( gluErrorString( errorCode ) ) );
244 }
245
246 #endif // ASSIMP_BLEND_WITH_GLU_TESSELLATE
247
248 #if ASSIMP_BLEND_WITH_POLY_2_TRI
249
250 namespace Assimp
251 {
252 template< > const std::string LogFunctions< BlenderTessellatorP2T >::log_prefix = "BLEND_TESS_P2T: ";
253 }
254
255 using namespace Assimp;
256 using namespace Assimp::Blender;
257
258 // ------------------------------------------------------------------------------------------------
259 BlenderTessellatorP2T::BlenderTessellatorP2T( BlenderBMeshConverter& converter ):
260 converter( &converter )
261 {
262 }
263
264 // ------------------------------------------------------------------------------------------------
265 BlenderTessellatorP2T::~BlenderTessellatorP2T( )
266 {
267 }
268
269 // ------------------------------------------------------------------------------------------------
270 void BlenderTessellatorP2T::Tessellate( const MLoop* polyLoop, int vertexCount, const std::vector< MVert >& vertices )
271 {
272 AssertVertexCount( vertexCount );
273
274 // NOTE - We have to hope that points in a Blender polygon are roughly on the same plane.
275 // There may be some triangulation artifacts if they are wildly different.
276
277 std::vector< PointP2T > points;
278 Copy3DVertices( polyLoop, vertexCount, vertices, points );
279
280 PlaneP2T plane = FindLLSQPlane( points );
281
282 aiMatrix4x4 transform = GeneratePointTransformMatrix( plane );
283
284 TransformAndFlattenVectices( transform, points );
285
286 std::vector< p2t::Point* > pointRefs;
287 ReferencePoints( points, pointRefs );
288
289 p2t::CDT cdt( pointRefs );
290
291 cdt.Triangulate( );
292 std::vector< p2t::Triangle* > triangles = cdt.GetTriangles( );
293
294 MakeFacesFromTriangles( triangles );
295 }
296
297 // ------------------------------------------------------------------------------------------------
298 void BlenderTessellatorP2T::AssertVertexCount( int vertexCount )
299 {
300 if ( vertexCount <= 4 )
301 {
302 ThrowException( "Expected more than 4 vertices for tessellation" );
303 }
304 }
305
306 // ------------------------------------------------------------------------------------------------
307 void BlenderTessellatorP2T::Copy3DVertices( const MLoop* polyLoop, int vertexCount, const std::vector< MVert >& vertices, std::vector< PointP2T >& points ) const
308 {
309 points.resize( vertexCount );
310 for ( int i = 0; i < vertexCount; ++i )
311 {
312 const MLoop& loop = polyLoop[ i ];
313 const MVert& vert = vertices[ loop.v ];
314
315 PointP2T& point = points[ i ];
316 point.point3D.Set( vert.co[ 0 ], vert.co[ 1 ], vert.co[ 2 ] );
317 point.index = loop.v;
318 point.magic = BLEND_TESS_MAGIC;
319 }
320 }
321
322 // ------------------------------------------------------------------------------------------------
323 aiMatrix4x4 BlenderTessellatorP2T::GeneratePointTransformMatrix( const Blender::PlaneP2T& plane ) const
324 {
325 aiVector3D sideA( 1.0f, 0.0f, 0.0f );
326 if ( fabs( plane.normal * sideA ) > 0.999f )
327 {
328 sideA = aiVector3D( 0.0f, 1.0f, 0.0f );
329 }
330
331 aiVector3D sideB( plane.normal ^ sideA );
332 sideB.Normalize( );
333 sideA = sideB ^ plane.normal;
334
335 aiMatrix4x4 result;
336 result.a1 = sideA.x;
337 result.a2 = sideA.y;
338 result.a3 = sideA.z;
339 result.b1 = sideB.x;
340 result.b2 = sideB.y;
341 result.b3 = sideB.z;
342 result.c1 = plane.normal.x;
343 result.c2 = plane.normal.y;
344 result.c3 = plane.normal.z;
345 result.a4 = plane.centre.x;
346 result.b4 = plane.centre.y;
347 result.c4 = plane.centre.z;
348 result.Inverse( );
349
350 return result;
351 }
352
353 // ------------------------------------------------------------------------------------------------
354 void BlenderTessellatorP2T::TransformAndFlattenVectices( const aiMatrix4x4& transform, std::vector< Blender::PointP2T >& vertices ) const
355 {
356 for ( unsigned int i = 0; i < vertices.size( ); ++i )
357 {
358 PointP2T& point = vertices[ i ];
359 point.point3D = transform * point.point3D;
360 point.point2D.set( point.point3D.y, point.point3D.z );
361 }
362 }
363
364 // ------------------------------------------------------------------------------------------------
365 void BlenderTessellatorP2T::ReferencePoints( std::vector< Blender::PointP2T >& points, std::vector< p2t::Point* >& pointRefs ) const
366 {
367 pointRefs.resize( points.size( ) );
368 for ( unsigned int i = 0; i < points.size( ); ++i )
369 {
370 pointRefs[ i ] = &points[ i ].point2D;
371 }
372 }
373
374 // ------------------------------------------------------------------------------------------------
375 // Yes this is filthy... but we have no choice
376 #define OffsetOf( Class, Member ) ( static_cast< unsigned int >( \
377 reinterpret_cast<uint8_t*>(&( reinterpret_cast< Class* >( NULL )->*( &Class::Member ) )) - \
378 static_cast<uint8_t*>(NULL) ) )
379
380 inline PointP2T& BlenderTessellatorP2T::GetActualPointStructure( p2t::Point& point ) const
381 {
382 unsigned int pointOffset = OffsetOf( PointP2T, point2D );
383 PointP2T& pointStruct = *reinterpret_cast< PointP2T* >( reinterpret_cast< char* >( &point ) - pointOffset );
384 if ( pointStruct.magic != static_cast<int>( BLEND_TESS_MAGIC ) )
385 {
386 ThrowException( "Point returned by poly2tri was probably not one of ours. This indicates we need a new way to store vertex information" );
387 }
388 return pointStruct;
389 }
390
391 // ------------------------------------------------------------------------------------------------
392 void BlenderTessellatorP2T::MakeFacesFromTriangles( std::vector< p2t::Triangle* >& triangles ) const
393 {
394 for ( unsigned int i = 0; i < triangles.size( ); ++i )
395 {
396 p2t::Triangle& Triangle = *triangles[ i ];
397
398 PointP2T& pointA = GetActualPointStructure( *Triangle.GetPoint( 0 ) );
399 PointP2T& pointB = GetActualPointStructure( *Triangle.GetPoint( 1 ) );
400 PointP2T& pointC = GetActualPointStructure( *Triangle.GetPoint( 2 ) );
401
402 converter->AddFace( pointA.index, pointB.index, pointC.index );
403 }
404 }
405
406 // ------------------------------------------------------------------------------------------------
407 inline float p2tMax( float a, float b )
408 {
409 return a > b ? a : b;
410 }
411
412 // ------------------------------------------------------------------------------------------------
413 // Adapted from: http://missingbytes.blogspot.co.uk/2012/06/fitting-plane-to-point-cloud.html
414 float BlenderTessellatorP2T::FindLargestMatrixElem( const aiMatrix3x3& mtx ) const
415 {
416 float result = 0.0f;
417
418 for ( int x = 0; x < 3; ++x )
419 {
420 for ( int y = 0; y < 3; ++y )
421 {
422 result = p2tMax( fabs( mtx[ x ][ y ] ), result );
423 }
424 }
425
426 return result;
427 }
428
429 // ------------------------------------------------------------------------------------------------
430 // Aparently Assimp doesn't have matrix scaling
431 aiMatrix3x3 BlenderTessellatorP2T::ScaleMatrix( const aiMatrix3x3& mtx, float scale ) const
432 {
433 aiMatrix3x3 result;
434
435 for ( int x = 0; x < 3; ++x )
436 {
437 for ( int y = 0; y < 3; ++y )
438 {
439 result[ x ][ y ] = mtx[ x ][ y ] * scale;
440 }
441 }
442
443 return result;
444 }
445
446
447 // ------------------------------------------------------------------------------------------------
448 // Adapted from: http://missingbytes.blogspot.co.uk/2012/06/fitting-plane-to-point-cloud.html
449 aiVector3D BlenderTessellatorP2T::GetEigenVectorFromLargestEigenValue( const aiMatrix3x3& mtx ) const
450 {
451 float scale = FindLargestMatrixElem( mtx );
452 aiMatrix3x3 mc = ScaleMatrix( mtx, 1.0f / scale );
453 mc = mc * mc * mc;
454
455 aiVector3D v( 1.0f );
456 aiVector3D lastV = v;
457 for ( int i = 0; i < 100; ++i )
458 {
459 v = mc * v;
460 v.Normalize( );
461 if ( ( v - lastV ).SquareLength( ) < 1e-16f )
462 {
463 break;
464 }
465 lastV = v;
466 }
467 return v;
468 }
469
470 // ------------------------------------------------------------------------------------------------
471 // Adapted from: http://missingbytes.blogspot.co.uk/2012/06/fitting-plane-to-point-cloud.html
472 PlaneP2T BlenderTessellatorP2T::FindLLSQPlane( const std::vector< PointP2T >& points ) const
473 {
474 PlaneP2T result;
475
476 aiVector3D sum( 0.0f );
477 for ( unsigned int i = 0; i < points.size( ); ++i )
478 {
479 sum += points[ i ].point3D;
480 }
481 result.centre = sum * ( 1.0f / points.size( ) );
482
483 float sumXX = 0.0f;
484 float sumXY = 0.0f;
485 float sumXZ = 0.0f;
486 float sumYY = 0.0f;
487 float sumYZ = 0.0f;
488 float sumZZ = 0.0f;
489 for ( unsigned int i = 0; i < points.size( ); ++i )
490 {
491 aiVector3D offset = points[ i ].point3D - result.centre;
492 sumXX += offset.x * offset.x;
493 sumXY += offset.x * offset.y;
494 sumXZ += offset.x * offset.z;
495 sumYY += offset.y * offset.y;
496 sumYZ += offset.y * offset.z;
497 sumZZ += offset.z * offset.z;
498 }
499
500 aiMatrix3x3 mtx( sumXX, sumXY, sumXZ, sumXY, sumYY, sumYZ, sumXZ, sumYZ, sumZZ );
501
502 float det = mtx.Determinant( );
503 if ( det == 0.0f )
504 {
505 result.normal = aiVector3D( 0.0f );
506 }
507 else
508 {
509 aiMatrix3x3 invMtx = mtx;
510 invMtx.Inverse( );
511 result.normal = GetEigenVectorFromLargestEigenValue( invMtx );
512 }
513
514 return result;
515 }
516
517 #endif // ASSIMP_BLEND_WITH_POLY_2_TRI
518
519 #endif // ASSIMP_BUILD_NO_BLEND_IMPORTER
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2013, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file BlenderTessellator.h
41 * @brief A simple tessellation wrapper
42 */
43 #ifndef INCLUDED_AI_BLEND_TESSELLATOR_H
44 #define INCLUDED_AI_BLEND_TESSELLATOR_H
45
46 // Use these to toggle between GLU Tessellate or poly2tri
47 // Note (acg) keep GLU Tesselate disabled by default - if it is turned on,
48 // assimp needs to be linked against GLU, which is currently not yet
49 // made configurable in CMake and potentially not wanted by most users
50 // as it requires a Gl environment.
51 #ifndef ASSIMP_BLEND_WITH_GLU_TESSELLATE
52 # define ASSIMP_BLEND_WITH_GLU_TESSELLATE 0
53 #endif
54
55 #ifndef ASSIMP_BLEND_WITH_POLY_2_TRI
56 # define ASSIMP_BLEND_WITH_POLY_2_TRI 1
57 #endif
58
59 #include "LogAux.h"
60
61 #if ASSIMP_BLEND_WITH_GLU_TESSELLATE
62
63 #if defined( WIN32 ) || defined( _WIN32 ) || defined( _MSC_VER )
64 #include <windows.h>
65 #endif
66 #include <GL/glu.h>
67
68 namespace Assimp
69 {
70 class BlenderBMeshConverter;
71
72 // TinyFormatter.h
73 namespace Formatter
74 {
75 template < typename T,typename TR, typename A > class basic_formatter;
76 typedef class basic_formatter< char, std::char_traits< char >, std::allocator< char > > format;
77 }
78
79 // BlenderScene.h
80 namespace Blender
81 {
82 struct MLoop;
83 struct MVert;
84
85 struct VertexGL
86 {
87 GLdouble X;
88 GLdouble Y;
89 GLdouble Z;
90 int index;
91 int magic;
92
93 VertexGL( GLdouble X, GLdouble Y, GLdouble Z, int index, int magic ): X( X ), Y( Y ), Z( Z ), index( index ), magic( magic ) { }
94 };
95
96 struct DrawCallGL
97 {
98 GLenum drawMode;
99 int baseVertex;
100 int vertexCount;
101
102 DrawCallGL( GLenum drawMode, int baseVertex ): drawMode( drawMode ), baseVertex( baseVertex ), vertexCount( 0 ) { }
103 };
104
105 struct TessDataGL
106 {
107 std::vector< DrawCallGL > drawCalls;
108 std::vector< VertexGL > vertices;
109 };
110 }
111
112 class BlenderTessellatorGL: public LogFunctions< BlenderTessellatorGL >
113 {
114 public:
115 BlenderTessellatorGL( BlenderBMeshConverter& converter );
116 ~BlenderTessellatorGL( );
117
118 void Tessellate( const Blender::MLoop* polyLoop, int vertexCount, const std::vector< Blender::MVert >& vertices );
119
120 private:
121 void AssertVertexCount( int vertexCount );
122 void GenerateLoopVerts( std::vector< Blender::VertexGL >& polyLoopGL, const Blender::MLoop* polyLoop, int vertexCount, const std::vector< Blender::MVert >& vertices );
123 void Tesssellate( std::vector< Blender::VertexGL >& polyLoopGL, Blender::TessDataGL& tessData );
124 void TriangulateDrawCalls( const Blender::TessDataGL& tessData );
125 void MakeFacesFromTris( const Blender::VertexGL* vertices, int vertexCount );
126 void MakeFacesFromTriStrip( const Blender::VertexGL* vertices, int vertexCount );
127 void MakeFacesFromTriFan( const Blender::VertexGL* vertices, int vertexCount );
128
129 static void TessellateBegin( GLenum drawModeGL, void* userData );
130 static void TessellateEnd( void* userData );
131 static void TessellateVertex( const void* vtxData, void* userData );
132 static void TessellateCombine( const GLdouble intersection[ 3 ], const GLdouble* [ 4 ], const GLfloat [ 4 ], GLdouble** out, void* userData );
133 static void TessellateEdgeFlag( GLboolean edgeFlag, void* userData );
134 static void TessellateError( GLenum errorCode, void* userData );
135
136 BlenderBMeshConverter* converter;
137 };
138 } // end of namespace Assimp
139
140 #endif // ASSIMP_BLEND_WITH_GLU_TESSELLATE
141
142 #if ASSIMP_BLEND_WITH_POLY_2_TRI
143
144 #include "../contrib/poly2tri/poly2tri/poly2tri.h"
145
146 namespace Assimp
147 {
148 class BlenderBMeshConverter;
149
150 // TinyFormatter.h
151 namespace Formatter
152 {
153 template < typename T,typename TR, typename A > class basic_formatter;
154 typedef class basic_formatter< char, std::char_traits< char >, std::allocator< char > > format;
155 }
156
157 // BlenderScene.h
158 namespace Blender
159 {
160 struct MLoop;
161 struct MVert;
162
163 struct PointP2T
164 {
165 aiVector3D point3D;
166 p2t::Point point2D;
167 int magic;
168 int index;
169 };
170
171 struct PlaneP2T
172 {
173 aiVector3D centre;
174 aiVector3D normal;
175 };
176 }
177
178 class BlenderTessellatorP2T: public LogFunctions< BlenderTessellatorP2T >
179 {
180 public:
181 BlenderTessellatorP2T( BlenderBMeshConverter& converter );
182 ~BlenderTessellatorP2T( );
183
184 void Tessellate( const Blender::MLoop* polyLoop, int vertexCount, const std::vector< Blender::MVert >& vertices );
185
186 private:
187 void AssertVertexCount( int vertexCount );
188 void Copy3DVertices( const Blender::MLoop* polyLoop, int vertexCount, const std::vector< Blender::MVert >& vertices, std::vector< Blender::PointP2T >& targetVertices ) const;
189 aiMatrix4x4 GeneratePointTransformMatrix( const Blender::PlaneP2T& plane ) const;
190 void TransformAndFlattenVectices( const aiMatrix4x4& transform, std::vector< Blender::PointP2T >& vertices ) const;
191 void ReferencePoints( std::vector< Blender::PointP2T >& points, std::vector< p2t::Point* >& pointRefs ) const;
192 inline Blender::PointP2T& GetActualPointStructure( p2t::Point& point ) const;
193 void MakeFacesFromTriangles( std::vector< p2t::Triangle* >& triangles ) const;
194
195 // Adapted from: http://missingbytes.blogspot.co.uk/2012/06/fitting-plane-to-point-cloud.html
196 float FindLargestMatrixElem( const aiMatrix3x3& mtx ) const;
197 aiMatrix3x3 ScaleMatrix( const aiMatrix3x3& mtx, float scale ) const;
198 aiVector3D GetEigenVectorFromLargestEigenValue( const aiMatrix3x3& mtx ) const;
199 Blender::PlaneP2T FindLLSQPlane( const std::vector< Blender::PointP2T >& points ) const;
200
201 BlenderBMeshConverter* converter;
202 };
203 } // end of namespace Assimp
204
205 #endif // ASSIMP_BLEND_WITH_POLY_2_TRI
206
207 #endif // INCLUDED_AI_BLEND_TESSELLATOR_H
8787
8888
8989 // -------------------------------------------------------------------
90 virtual size_t Read(void* pvBuffer,
91 size_t pSize,
92 size_t pCount)
90 virtual size_t Read( void *,
91 size_t,
92 size_t )
9393 {
9494 return 0;
9595 }
33 # 3) Add libassimp using the file lists (eliminates duplication of file names between
44 # source groups and library command)
55 #
6 cmake_minimum_required( VERSION 2.6 )
67 SET( HEADER_PATH ../include/assimp )
78
89 SET( COMPILER_HEADERS
910 ${HEADER_PATH}/Compiler/pushpack1.h
1011 ${HEADER_PATH}/Compiler/poppack1.h
11 pstdint.h
12 ${HEADER_PATH}/Compiler/pstdint.h
1213 )
1314 SOURCE_GROUP( Compiler FILES ${COMPILER_HEADERS})
1415
3334 ${HEADER_PATH}/quaternion.h
3435 ${HEADER_PATH}/quaternion.inl
3536 ${HEADER_PATH}/scene.h
37 ${HEADER_PATH}/metadata.h
3638 ${HEADER_PATH}/texture.h
3739 ${HEADER_PATH}/types.h
3840 ${HEADER_PATH}/vector2.h
5658
5759 SET( Core_SRCS
5860 Assimp.cpp
59 AssimpPCH.cpp
60 AssimpPCH.h
6161 )
6262
6363 SET( Boost_SRCS
7676
7777 SET( Logging_SRCS
7878 ${HEADER_PATH}/DefaultLogger.hpp
79 ${HEADER_PATH}/IOStream.hpp
8079 ${HEADER_PATH}/LogStream.hpp
8180 ${HEADER_PATH}/Logger.hpp
8281 ${HEADER_PATH}/NullLogger.hpp
8382 Win32DebugLogStream.h
8483 DefaultLogger.cpp
8584 FileLogStream.h
85 StdOStreamLogStream.h
8686 )
8787 SOURCE_GROUP(Logging FILES ${Logging_SRCS})
8888
107107 Hash.h
108108 Importer.cpp
109109 IFF.h
110 MemoryIOWrapper.h
110111 ParsingUtils.h
111 StdOStreamLogStream.h
112112 StreamReader.h
113113 StringComparison.h
114114 SGSpatialSort.cpp
140140 TinyFormatter.h
141141 Profiler.h
142142 LogAux.h
143 Bitmap.cpp
144 Bitmap.h
143145 )
144146 SOURCE_GROUP(Common FILES ${Common_SRCS})
145147
236238 )
237239 SOURCE_GROUP( LWS FILES ${LWS_SRCS})
238240
239 SET ( M3_SRCS
240 M3Importer.cpp
241 M3Importer.h
242 )
243 SOURCE_GROUP( M3 FILES ${M3_SRCS} )
241
244242
245243 SET( MD2_SRCS
246244 MD2FileData.h
322320 SOURCE_GROUP( Obj FILES ${Obj_SRCS})
323321
324322 SET( Ogre_SRCS
325 OgreImporter.hpp
326 OgreXmlHelper.hpp
323 OgreImporter.h
324 OgreStructs.h
325 OgreParsingUtils.h
326 OgreBinarySerializer.h
327 OgreXmlSerializer.h
327328 OgreImporter.cpp
329 OgreStructs.cpp
330 OgreBinarySerializer.cpp
331 OgreXmlSerializer.cpp
328332 OgreMaterial.cpp
329 OgreMesh.cpp
330 OgreSkeleton.cpp
331333 )
332334 SOURCE_GROUP( Ogre FILES ${Ogre_SRCS})
333335
366368 BlenderIntermediate.h
367369 BlenderModifier.h
368370 BlenderModifier.cpp
371 BlenderBMesh.h
372 BlenderBMesh.cpp
373 BlenderTessellator.h
374 BlenderTessellator.cpp
369375 )
370376 SOURCE_GROUP( BLENDER FILES ${BLENDER_SRCS})
371377
380386 IFCMaterial.cpp
381387 IFCProfile.cpp
382388 IFCCurve.cpp
389 IFCBoolean.cpp
390 IFCOpenings.cpp
383391 STEPFile.h
384392 STEPFileReader.h
385393 STEPFileReader.cpp
394 STEPFileEncoding.cpp
395 STEPFileEncoding.h
386396 )
387397 SOURCE_GROUP( IFC FILES ${IFC_SRCS})
388398
391401 XGLLoader.h
392402 )
393403 SOURCE_GROUP( XGL FILES ${XGL_SRCS})
404
405
406 SET(FBX_SRCS
407 FBXImporter.cpp
408 FBXCompileConfig.h
409 FBXImporter.h
410 FBXParser.cpp
411 FBXParser.h
412 FBXTokenizer.cpp
413 FBXTokenizer.h
414 FBXImportSettings.h
415 FBXConverter.h
416 FBXConverter.cpp
417 FBXUtil.h
418 FBXUtil.cpp
419 FBXDocument.h
420 FBXDocument.cpp
421 FBXProperties.h
422 FBXProperties.cpp
423 FBXMeshGeometry.cpp
424 FBXMaterial.cpp
425 FBXModel.cpp
426 FBXAnimation.cpp
427 FBXNodeAttribute.cpp
428 FBXDeformer.cpp
429 FBXBinaryTokenizer.cpp
430 FBXDocumentUtil.cpp
431 )
432 SOURCE_GROUP( FBX FILES ${FBX_SRCS})
394433
395434
396435 SET( PostProcessing_SRCS
428467 SortByPTypeProcess.h
429468 SplitLargeMeshes.cpp
430469 SplitLargeMeshes.h
431 TerragenLoader.cpp
432 TerragenLoader.h
433470 TextureTransform.cpp
434471 TextureTransform.h
435472 TriangulateProcess.cpp
487524 )
488525 SOURCE_GROUP( STL FILES ${STL_SRCS})
489526
527 SET( Terragen_SRCS
528 TerragenLoader.cpp
529 TerragenLoader.h
530 )
531 SOURCE_GROUP( Terragen FILES ${Terragen_SRCS})
532
490533 SET( Unreal_SRCS
491534 UnrealLoader.cpp
492535 UnrealLoader.h
565608
566609
567610 # VC2010 fixes
568 OPTION( VC10_STDINT_FIX "Fix for VC10 Compiler regarding pstdint.h redefinition errors" OFF )
569 if( VC10_STDINT_FIX )
570 ADD_DEFINITIONS( -D_STDINT )
571 endif( VC10_STDINT_FIX )
611 if(MSVC10)
612 OPTION( VC10_STDINT_FIX "Fix for VC10 Compiler regarding pstdint.h redefinition errors" OFF )
613 if( VC10_STDINT_FIX )
614 ADD_DEFINITIONS( -D_STDINT )
615 endif( VC10_STDINT_FIX )
616 endif(MSVC10)
572617
573618 ADD_DEFINITIONS( -DASSIMP_BUILD_DLL_EXPORT )
574619
575 if ( MSVC80 OR MSVC90 OR MSVC10 )
620 if ( MSVC )
576621 ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS )
577622 ADD_DEFINITIONS( -D_CRT_SECURE_NO_WARNINGS )
578 endif ( MSVC80 OR MSVC90 OR MSVC10 )
623 endif ( MSVC )
579624
580625 if (UNZIP_FOUND)
581626 SET (unzip_compile_SRCS "")
583628 SET (unzip_compile_SRCS ${unzip_SRCS})
584629 endif (UNZIP_FOUND)
585630
586 SET( assim_src
631 SET( assimp_src
587632 # Assimp Files
588633 ${Core_SRCS}
589634 ${Common_SRCS}
604649 ${Irr_SRCS}
605650 ${LWO_SRCS}
606651 ${LWS_SRCS}
607 ${M3_SRCS}
608652 ${MD2_SRCS}
609653 ${MD3_SRCS}
610654 ${MD5_SRCS}
621665 ${Raw_SRCS}
622666 ${SMD_SRCS}
623667 ${STL_SRCS}
668 ${Terragen_SRCS}
624669 ${Unreal_SRCS}
625670 ${XFile_SRCS}
626671 ${Extra_SRCS}
630675 ${NDO_SRCS}
631676 ${IFC_SRCS}
632677 ${XGL_SRCS}
678 ${FBX_SRCS}
633679
634680 # Third-party libraries
635681 ${IrrXML_SRCS}
642688
643689 ${PUBLIC_HEADERS}
644690 ${COMPILER_HEADERS}
645 )
646 IF ( BUILD_STATIC_LIB )
647 ADD_LIBRARY( assimp STATIC
648 ${assim_src}
649 )
650 ELSE ( BUILD_STATIC_LIB )
651 ADD_LIBRARY( assimp SHARED
652 ${assim_src}
653 )
654 ENDIF ( BUILD_STATIC_LIB )
655
656 SET_PROPERTY(TARGET assimp PROPERTY DEBUG_POSTFIX ${DEBUG_POSTFIX})
691
692 # Old precompiled header
693 # (removed because the precompiled header is not updated when visual studio switch configuration which leads to failed compilation.
694 # Moreover it's a drag to recompile assimp entirely each time a modification is made to one of the included header, which is definitely counter-productive.)
695 AssimpPCH.cpp
696 )
697
698 #ADD_MSVC_PRECOMPILED_HEADER("AssimpPCH.h" "AssimpPCH.cpp" assimp_src)
699
700 ADD_LIBRARY( assimp ${assimp_src} )
701
702 SET_PROPERTY(TARGET assimp PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX})
657703
658704 TARGET_LINK_LIBRARIES(assimp ${ZLIB_LIBRARIES})
659705 SET_TARGET_PROPERTIES( assimp PROPERTIES
660706 VERSION ${ASSIMP_VERSION}
661707 SOVERSION ${ASSIMP_SOVERSION} # use full version
662708 OUTPUT_NAME assimp${ASSIMP_LIBRARY_SUFFIX}
663 CLEAN_DIRECT_OUTPUT 1
664 )
709 )
710
711 if (APPLE)
712 SET_TARGET_PROPERTIES( assimp PROPERTIES INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/${LIB_INSTALL_DIR}")
713 endif()
714
665715 # Build against external unzip, or add ../contrib/unzip so
666716 # assimp can #include "unzip.h"
667717 if (UNZIP_FOUND)
671721 INCLUDE_DIRECTORIES("../contrib/unzip")
672722 endif (UNZIP_FOUND)
673723
674 INSTALL( TARGETS assimp DESTINATION ${LIB_INSTALL_DIR} COMPONENT ${LIBASSIMP_COMPONENT})
675 INSTALL( FILES ${PUBLIC_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/assimp COMPONENT ${LIBASSIMP-DEV_COMPONENT})
676 INSTALL( FILES ${COMPILER_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/assimp/Compiler COMPONENT ${LIBASSIMP-DEV_COMPONENT})
724 INSTALL( TARGETS assimp
725 LIBRARY DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
726 ARCHIVE DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
727 RUNTIME DESTINATION ${ASSIMP_BIN_INSTALL_DIR}
728 COMPONENT ${LIBASSIMP_COMPONENT})
729 INSTALL( FILES ${PUBLIC_HEADERS} DESTINATION ${ASSIMP_INCLUDE_INSTALL_DIR}/assimp COMPONENT assimp-dev)
730 INSTALL( FILES ${COMPILER_HEADERS} DESTINATION ${ASSIMP_INCLUDE_INSTALL_DIR}/assimp/Compiler COMPONENT assimp-dev)
731
732 if(MSVC AND ASSIMP_INSTALL_PDB)
733 install(FILES ${Assimp_BINARY_DIR}/code/Debug/assimp${ASSIMP_DEBUG_POSTFIX}.pdb
734 DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
735 CONFIGURATIONS Debug
736 )
737 install(FILES ${Assimp_BINARY_DIR}/code/RelWithDebInfo/assimp.pdb
738 DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
739 CONFIGURATIONS RelWithDebInfo
740 )
741 endif ()
10441044 v.y = reader.GetF4();
10451045 }
10461046
1047 const size_t numfuck = reader.GetI4();
1048 msh.faces.reserve(numfuck);
1049 for(size_t i = 0; i < numfuck; ++i) {
1047 const size_t numf = reader.GetI4();
1048 msh.faces.reserve(numf);
1049 for(size_t i = 0; i < numf; ++i) {
10501050 // XXX backface culling flag is 0x10 in flags
10511051
10521052 // hole?
7070 // ------------------------------------------------------------------------------------------------
7171 // Constructor to be privately used by Importer
7272 CSMImporter::CSMImporter()
73 : noSkeletonMesh()
7374 {}
7475
7576 // ------------------------------------------------------------------------------------------------
103104
104105 // ------------------------------------------------------------------------------------------------
105106 // Setup configuration properties for the loader
106 void CSMImporter::SetupProperties(const Importer* /*pImp*/)
107 {
108 // nothing to be done for the moment
107 void CSMImporter::SetupProperties(const Importer* pImp)
108 {
109 noSkeletonMesh = pImp->GetPropertyInteger(AI_CONFIG_IMPORT_NO_SKELETON_MESHES,0) != 0;
109110 }
110111
111112 // ------------------------------------------------------------------------------------------------
288289
289290 // mark the scene as incomplete and run SkeletonMeshBuilder on it
290291 pScene->mFlags |= AI_SCENE_FLAGS_INCOMPLETE;
291 SkeletonMeshBuilder maker(pScene,pScene->mRootNode,true);
292
293 if (!noSkeletonMesh) {
294 SkeletonMeshBuilder maker(pScene,pScene->mRootNode,true);
295 }
292296 }
293297
294298 #endif // !! ASSIMP_BUILD_NO_CSM_IMPORTER
7878 IOSystem* pIOHandler);
7979
8080 private:
81
82 bool noSkeletonMesh;
83
8184 }; // end of class CSMImporter
8285 } // end of namespace Assimp
8386 #endif // AI_AC3DIMPORTER_H_INC
5454 // ------------------------------------------------------------------------------------------------
5555 // Constructor to be privately used by Importer
5656 CalcTangentsProcess::CalcTangentsProcess()
57 {
58 this->configMaxAngle = AI_DEG_TO_RAD(45.f);
57 : configMaxAngle( AI_DEG_TO_RAD(45.f) )
58 , configSourceUV( 0 ) {
59 // nothing to do here
5960 }
6061
6162 // ------------------------------------------------------------------------------------------------
7677 // Executes the post processing step on the given imported data.
7778 void CalcTangentsProcess::SetupProperties(const Importer* pImp)
7879 {
80 ai_assert( NULL != pImp );
81
7982 // get the current value of the property
8083 configMaxAngle = pImp->GetPropertyFloat(AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE,45.f);
8184 configMaxAngle = std::max(std::min(configMaxAngle,45.0f),0.0f);
8891 // Executes the post processing step on the given imported data.
8992 void CalcTangentsProcess::Execute( aiScene* pScene)
9093 {
91 DefaultLogger::get()->debug("CalcTangentsProcess begin");
94 ai_assert( NULL != pScene );
95
96 DefaultLogger::get()->debug("CalcTangentsProcess begin");
9297
9398 bool bHas = false;
94 for( unsigned int a = 0; a < pScene->mNumMeshes; a++)
99 for ( unsigned int a = 0; a < pScene->mNumMeshes; a++ ) {
95100 if(ProcessMesh( pScene->mMeshes[a],a))bHas = true;
96
97 if (bHas)DefaultLogger::get()->info("CalcTangentsProcess finished. Tangents have been calculated");
98 else DefaultLogger::get()->debug("CalcTangentsProcess finished");
101 }
102
103 if ( bHas ) {
104 DefaultLogger::get()->info("CalcTangentsProcess finished. Tangents have been calculated");
105 } else {
106 DefaultLogger::get()->debug("CalcTangentsProcess finished");
107 }
99108 }
100109
101110 // ------------------------------------------------------------------------------------------------
178187 float sx = meshTex[p1].x - meshTex[p0].x, sy = meshTex[p1].y - meshTex[p0].y;
179188 float tx = meshTex[p2].x - meshTex[p0].x, ty = meshTex[p2].y - meshTex[p0].y;
180189 float dirCorrection = (tx * sy - ty * sx) < 0.0f ? -1.0f : 1.0f;
181
182 // tangent points in the direction where to positive X axis of the texture coords would point in model space
183 // bitangents points along the positive Y axis of the texture coords, respectively
190 // when t1, t2, t3 in same position in UV space, just use default UV direction.
191 if ( 0 == sx && 0 ==sy && 0 == tx && 0 == ty ) {
192 sx = 0.0; sy = 1.0;
193 tx = 1.0; ty = 0.0;
194 }
195
196 // tangent points in the direction where to positive X axis of the texture coord's would point in model space
197 // bitangent's points along the positive Y axis of the texture coord's, respectively
184198 aiVector3D tangent, bitangent;
185199 tangent.x = (w.x * sy - v.x * ty) * dirCorrection;
186200 tangent.y = (w.y * sy - v.y * ty) * dirCorrection;
190204 bitangent.z = (w.z * sx - v.z * tx) * dirCorrection;
191205
192206 // store for every vertex of that face
193 for( unsigned int b = 0; b < face.mNumIndices; b++)
194 {
207 for( unsigned int b = 0; b < face.mNumIndices; ++b ) {
195208 unsigned int p = face.mIndices[b];
196209
197210 // project tangent and bitangent into the plane formed by the vertex' normal
199212 aiVector3D localBitangent = bitangent - meshNorm[p] * (bitangent * meshNorm[p]);
200213 localTangent.Normalize(); localBitangent.Normalize();
201214
202 // and write it into the mesh.
203 meshTang[p] = localTangent;
204 meshBitang[p] = localBitangent;
215 // reconstruct tangent/bitangent according to normal and bitangent/tangent when it's infinite or NaN.
216 bool invalid_tangent = is_special_float(localTangent.x) || is_special_float(localTangent.y) || is_special_float(localTangent.z);
217 bool invalid_bitangent = is_special_float(localBitangent.x) || is_special_float(localBitangent.y) || is_special_float(localBitangent.z);
218 if (invalid_tangent != invalid_bitangent) {
219 if (invalid_tangent) {
220 localTangent = meshNorm[p] ^ localBitangent;
221 localTangent.Normalize();
222 } else {
223 localBitangent = localTangent ^ meshNorm[p];
224 localBitangent.Normalize();
225 }
226 }
227
228 // and write it into the mesh.
229 meshTang[ p ] = localTangent;
230 meshBitang[ p ] = localBitangent;
205231 }
206232 }
207233
4343 #ifndef ASSIMP_BUILD_NO_COLLADA_EXPORTER
4444 #include "ColladaExporter.h"
4545
46 #include "Bitmap.h"
47 #include "fast_atof.h"
48 #include "SceneCombiner.h"
49
50 #include <ctime>
51 #include <set>
52
4653 using namespace Assimp;
4754
4855 namespace Assimp
5259 // Worker function for exporting a scene to Collada. Prototyped and registered in Exporter.cpp
5360 void ExportSceneCollada(const char* pFile,IOSystem* pIOSystem, const aiScene* pScene)
5461 {
62 std::string path = "";
63 std::string file = pFile;
64
65 // We need to test both types of folder separators because pIOSystem->getOsSeparator() is not reliable.
66 // Moreover, the path given by some applications is not even consistent with the OS specific type of separator.
67 const char* end_path = std::max(strrchr(pFile, '\\'), strrchr(pFile, '/'));
68
69 if(end_path != NULL) {
70 path = std::string(pFile, end_path + 1 - pFile);
71 file = file.substr(end_path + 1 - pFile, file.npos);
72
73 std::size_t pos = file.find_last_of('.');
74 if(pos != file.npos) {
75 file = file.substr(0, pos);
76 }
77 }
78
5579 // invoke the exporter
56 ColladaExporter iDoTheExportThing( pScene);
80 ColladaExporter iDoTheExportThing( pScene, pIOSystem, path, file);
5781
5882 // we're still here - export successfully completed. Write result to the given IOSYstem
5983 boost::scoped_ptr<IOStream> outfile (pIOSystem->Open(pFile,"wt"));
84 if(outfile == NULL) {
85 throw DeadlyExportError("could not open output .dae file: " + std::string(pFile));
86 }
6087
6188 // XXX maybe use a small wrapper around IOStream that behaves like std::stringstream in order to avoid the extra copy.
6289 outfile->Write( iDoTheExportThing.mOutput.str().c_str(), static_cast<size_t>(iDoTheExportThing.mOutput.tellp()),1);
6794
6895 // ------------------------------------------------------------------------------------------------
6996 // Constructor for a specific scene to export
70 ColladaExporter::ColladaExporter( const aiScene* pScene)
97 ColladaExporter::ColladaExporter( const aiScene* pScene, IOSystem* pIOSystem, const std::string& path, const std::string& file) : mIOSystem(pIOSystem), mPath(path), mFile(file)
7198 {
7299 // make sure that all formatting happens using the standard, C locale and not the user's current locale
73100 mOutput.imbue( std::locale("C") );
74101
75102 mScene = pScene;
103 mSceneOwned = false;
76104
77105 // set up strings
78106 endstr = "\n";
79107
80108 // start writing
81109 WriteFile();
110 }
111
112 // ------------------------------------------------------------------------------------------------
113 // Destructor
114 ColladaExporter::~ColladaExporter()
115 {
116 if(mSceneOwned) {
117 delete mScene;
118 }
82119 }
83120
84121 // ------------------------------------------------------------------------------------------------
91128 mOutput << "<COLLADA xmlns=\"http://www.collada.org/2005/11/COLLADASchema\" version=\"1.4.1\">" << endstr;
92129 PushTag();
93130
131 WriteTextures();
94132 WriteHeader();
95133
96 WriteMaterials();
134 WriteMaterials();
97135 WriteGeometryLibrary();
98136
99137 WriteSceneLibrary();
100138
101 // useless Collada bullshit at the end, just in case we haven't had enough indirections, yet.
139 // useless Collada fu at the end, just in case we haven't had enough indirections, yet.
102140 mOutput << startstr << "<scene>" << endstr;
103141 PushTag();
104 mOutput << startstr << "<instance_visual_scene url=\"#myScene\" />" << endstr;
142 mOutput << startstr << "<instance_visual_scene url=\"#" + std::string(mScene->mRootNode->mName.C_Str()) + "\" />" << endstr;
105143 PopTag();
106144 mOutput << startstr << "</scene>" << endstr;
107145 PopTag();
112150 // Writes the asset header
113151 void ColladaExporter::WriteHeader()
114152 {
115 // Dummy stuff. Nobody actually cares for it anyways
153 static const float epsilon = 0.000001f;
154 static const aiQuaternion x_rot(aiMatrix3x3(
155 0, -1, 0,
156 1, 0, 0,
157 0, 0, 1));
158 static const aiQuaternion y_rot(aiMatrix3x3(
159 1, 0, 0,
160 0, 1, 0,
161 0, 0, 1));
162 static const aiQuaternion z_rot(aiMatrix3x3(
163 1, 0, 0,
164 0, 0, 1,
165 0, -1, 0));
166
167 static const unsigned int date_nb_chars = 20;
168 char date_str[date_nb_chars];
169 std::time_t date = std::time(NULL);
170 std::strftime(date_str, date_nb_chars, "%Y-%m-%dT%H:%M:%S", std::localtime(&date));
171
172 std::string scene_name = mScene->mRootNode->mName.C_Str();
173
174 aiVector3D scaling;
175 aiQuaternion rotation;
176 aiVector3D position;
177 mScene->mRootNode->mTransformation.Decompose(scaling, rotation, position);
178
179 bool add_root_node = false;
180
181 float scale = 1.0;
182 if(std::abs(scaling.x - scaling.y) <= epsilon && std::abs(scaling.x - scaling.z) <= epsilon && std::abs(scaling.y - scaling.z) <= epsilon) {
183 scale = (float) ((((double) scaling.x) + ((double) scaling.y) + ((double) scaling.z)) / 3.0);
184 } else {
185 add_root_node = true;
186 }
187
188 std::string up_axis = "Y_UP";
189 if(rotation.Equal(x_rot, epsilon)) {
190 up_axis = "X_UP";
191 } else if(rotation.Equal(y_rot, epsilon)) {
192 up_axis = "Y_UP";
193 } else if(rotation.Equal(z_rot, epsilon)) {
194 up_axis = "Z_UP";
195 } else {
196 add_root_node = true;
197 }
198
199 if(! position.Equal(aiVector3D(0, 0, 0))) {
200 add_root_node = true;
201 }
202
203 if(mScene->mRootNode->mNumChildren == 0) {
204 add_root_node = true;
205 }
206
207 if(add_root_node) {
208 aiScene* scene;
209 SceneCombiner::CopyScene(&scene, mScene);
210
211 aiNode* root = new aiNode("Scene");
212
213 root->mNumChildren = 1;
214 root->mChildren = new aiNode*[root->mNumChildren];
215
216 root->mChildren[0] = scene->mRootNode;
217 scene->mRootNode->mParent = root;
218 scene->mRootNode = root;
219
220 mScene = scene;
221 mSceneOwned = true;
222
223 up_axis = "Y_UP";
224 scale = 1.0;
225 }
226
116227 mOutput << startstr << "<asset>" << endstr;
117228 PushTag();
118229 mOutput << startstr << "<contributor>" << endstr;
119230 PushTag();
120 mOutput << startstr << "<author>Someone</author>" << endstr;
231 mOutput << startstr << "<author>Assimp</author>" << endstr;
121232 mOutput << startstr << "<authoring_tool>Assimp Collada Exporter</authoring_tool>" << endstr;
122233 PopTag();
123234 mOutput << startstr << "</contributor>" << endstr;
124 mOutput << startstr << "<created>2000-01-01T23:59:59</created>" << endstr;
125 mOutput << startstr << "<modified>2000-01-01T23:59:59</modified>" << endstr;
126 mOutput << startstr << "<unit name=\"centimeter\" meter=\"0.01\" />" << endstr;
127 mOutput << startstr << "<up_axis>Y_UP</up_axis>" << endstr;
235 mOutput << startstr << "<created>" << date_str << "</created>" << endstr;
236 mOutput << startstr << "<modified>" << date_str << "</modified>" << endstr;
237 mOutput << startstr << "<unit name=\"meter\" meter=\"" << scale << "\" />" << endstr;
238 mOutput << startstr << "<up_axis>" << up_axis << "</up_axis>" << endstr;
128239 PopTag();
129240 mOutput << startstr << "</asset>" << endstr;
241 }
242
243 // ------------------------------------------------------------------------------------------------
244 // Write the embedded textures
245 void ColladaExporter::WriteTextures() {
246 static const unsigned int buffer_size = 1024;
247 char str[buffer_size];
248
249 if(mScene->HasTextures()) {
250 for(unsigned int i = 0; i < mScene->mNumTextures; i++) {
251 // It would be great to be able to create a directory in portable standard C++, but it's not the case,
252 // so we just write the textures in the current directory.
253
254 aiTexture* texture = mScene->mTextures[i];
255
256 ASSIMP_itoa10(str, buffer_size, i + 1);
257
258 std::string name = mFile + "_texture_" + (i < 1000 ? "0" : "") + (i < 100 ? "0" : "") + (i < 10 ? "0" : "") + str + "." + ((const char*) texture->achFormatHint);
259
260 boost::scoped_ptr<IOStream> outfile(mIOSystem->Open(mPath + name, "wb"));
261 if(outfile == NULL) {
262 throw DeadlyExportError("could not open output texture file: " + mPath + name);
263 }
264
265 if(texture->mHeight == 0) {
266 outfile->Write((void*) texture->pcData, texture->mWidth, 1);
267 } else {
268 Bitmap::Save(texture, outfile.get());
269 }
270
271 outfile->Flush();
272
273 textures.insert(std::make_pair(i, name));
274 }
275 }
130276 }
131277
132278 // ------------------------------------------------------------------------------------------------
138284 aiString texfile;
139285 unsigned int uvChannel = 0;
140286 pSrcMat->GetTexture( pTexture, 0, &texfile, NULL, &uvChannel);
141 poSurface.texture = texfile.C_Str();
287
288 std::string index_str(texfile.C_Str());
289
290 if(index_str.size() != 0 && index_str[0] == '*')
291 {
292 unsigned int index;
293
294 index_str = index_str.substr(1, std::string::npos);
295
296 try {
297 index = (unsigned int) strtoul10_64(index_str.c_str());
298 } catch(std::exception& error) {
299 throw DeadlyExportError(error.what());
300 }
301
302 std::map<unsigned int, std::string>::const_iterator name = textures.find(index);
303
304 if(name != textures.end()) {
305 poSurface.texture = name->second;
306 } else {
307 throw DeadlyExportError("could not find embedded texture at index " + index_str);
308 }
309 } else
310 {
311 poSurface.texture = texfile.C_Str();
312 }
313
142314 poSurface.channel = uvChannel;
315 poSurface.exist = true;
143316 } else
144317 {
145318 if( pKey )
146 pSrcMat->Get( pKey, pType, pIndex, poSurface.color);
319 poSurface.exist = pSrcMat->Get( pKey, pType, pIndex, poSurface.color) == aiReturn_SUCCESS;
147320 }
148321 }
149322
173346 // Writes a color-or-texture entry into an effect definition
174347 void ColladaExporter::WriteTextureColorEntry( const Surface& pSurface, const std::string& pTypeName, const std::string& pImageName)
175348 {
176 mOutput << startstr << "<" << pTypeName << ">" << endstr;
177 PushTag();
178 if( pSurface.texture.empty() )
179 {
180 mOutput << startstr << "<color sid=\"" << pTypeName << "\">" << pSurface.color.r << " " << pSurface.color.g << " " << pSurface.color.b << " " << pSurface.color.a << "</color>" << endstr;
181 } else
182 {
183 mOutput << startstr << "<texture texture=\"" << pImageName << "\" texcoord=\"CHANNEL" << pSurface.channel << "\" />" << endstr;
349 if(pSurface.exist) {
350 mOutput << startstr << "<" << pTypeName << ">" << endstr;
351 PushTag();
352 if( pSurface.texture.empty() )
353 {
354 mOutput << startstr << "<color sid=\"" << pTypeName << "\">" << pSurface.color.r << " " << pSurface.color.g << " " << pSurface.color.b << " " << pSurface.color.a << "</color>" << endstr;
355 } else
356 {
357 mOutput << startstr << "<texture texture=\"" << pImageName << "\" texcoord=\"CHANNEL" << pSurface.channel << "\" />" << endstr;
358 }
359 PopTag();
360 mOutput << startstr << "</" << pTypeName << ">" << endstr;
184361 }
185 PopTag();
186 mOutput << startstr << "</" << pTypeName << ">" << endstr;
187362 }
188363
189364 // ------------------------------------------------------------------------------------------------
216391 }
217392
218393 // ------------------------------------------------------------------------------------------------
394 // Writes a scalar property
395 void ColladaExporter::WriteFloatEntry( const Property& pProperty, const std::string& pTypeName)
396 {
397 if(pProperty.exist) {
398 mOutput << startstr << "<" << pTypeName << ">" << endstr;
399 PushTag();
400 mOutput << startstr << "<float sid=\"" << pTypeName << "\">" << pProperty.value << "</float>" << endstr;
401 PopTag();
402 mOutput << startstr << "</" << pTypeName << ">" << endstr;
403 }
404 }
405
406 // ------------------------------------------------------------------------------------------------
219407 // Writes the material setup
220408 void ColladaExporter::WriteMaterials()
221409 {
222410 materials.resize( mScene->mNumMaterials);
411
412 std::set<std::string> material_names;
223413
224414 /// collect all materials from the scene
225415 size_t numTextures = 0;
229419
230420 aiString name;
231421 if( mat->Get( AI_MATKEY_NAME, name) != aiReturn_SUCCESS )
232 name = "mat";
422 name = "mat";
233423 materials[a].name = std::string( "m") + boost::lexical_cast<std::string> (a) + name.C_Str();
234 for( std::string::iterator it = materials[a].name.begin(); it != materials[a].name.end(); ++it )
235 if( !isalnum( *it) )
424 for( std::string::iterator it = materials[a].name.begin(); it != materials[a].name.end(); ++it ) {
425 // isalnum on MSVC asserts for code points in [0,255]. Thus prevent unwanted promotion
426 // of char to signed int and take the unsigned char value.
427 if( !isalnum( static_cast<uint8_t>(*it) ) ) {
236428 *it = '_';
429 }
430 }
431
432 aiShadingMode shading;
433 materials[a].shading_model = "phong";
434 if(mat->Get( AI_MATKEY_SHADING_MODEL, shading) == aiReturn_SUCCESS) {
435 if(shading == aiShadingMode_Phong) {
436 materials[a].shading_model = "phong";
437 } else if(shading == aiShadingMode_Blinn) {
438 materials[a].shading_model = "blinn";
439 } else if(shading == aiShadingMode_NoShading) {
440 materials[a].shading_model = "constant";
441 } else if(shading == aiShadingMode_Gouraud) {
442 materials[a].shading_model = "lambert";
443 }
444 }
237445
238446 ReadMaterialSurface( materials[a].ambient, mat, aiTextureType_AMBIENT, AI_MATKEY_COLOR_AMBIENT);
239447 if( !materials[a].ambient.texture.empty() ) numTextures++;
245453 if( !materials[a].emissive.texture.empty() ) numTextures++;
246454 ReadMaterialSurface( materials[a].reflective, mat, aiTextureType_REFLECTION, AI_MATKEY_COLOR_REFLECTIVE);
247455 if( !materials[a].reflective.texture.empty() ) numTextures++;
456 ReadMaterialSurface( materials[a].transparent, mat, aiTextureType_OPACITY, AI_MATKEY_COLOR_TRANSPARENT);
457 if( !materials[a].transparent.texture.empty() ) numTextures++;
248458 ReadMaterialSurface( materials[a].normal, mat, aiTextureType_NORMALS, NULL, 0, 0);
249459 if( !materials[a].normal.texture.empty() ) numTextures++;
250460
251 mat->Get( AI_MATKEY_SHININESS, materials[a].shininess);
461 materials[a].shininess.exist = mat->Get( AI_MATKEY_SHININESS, materials[a].shininess.value) == aiReturn_SUCCESS;
462 materials[a].transparency.exist = mat->Get( AI_MATKEY_OPACITY, materials[a].transparency.value) == aiReturn_SUCCESS;
463 materials[a].transparency.value = 1 - materials[a].transparency.value;
464 materials[a].index_refraction.exist = mat->Get( AI_MATKEY_REFRACTI, materials[a].index_refraction.value) == aiReturn_SUCCESS;
252465 }
253466
254467 // output textures if present
262475 WriteImageEntry( mat.ambient, mat.name + "-ambient-image");
263476 WriteImageEntry( mat.diffuse, mat.name + "-diffuse-image");
264477 WriteImageEntry( mat.specular, mat.name + "-specular-image");
265 WriteImageEntry( mat.emissive, mat.name + "-emissive-image");
478 WriteImageEntry( mat.emissive, mat.name + "-emission-image");
266479 WriteImageEntry( mat.reflective, mat.name + "-reflective-image");
480 WriteImageEntry( mat.transparent, mat.name + "-transparent-image");
267481 WriteImageEntry( mat.normal, mat.name + "-normal-image");
268482 }
269483 PopTag();
285499 PushTag();
286500
287501 // write sampler- and surface params for the texture entries
288 WriteTextureParamEntry( mat.emissive, "emissive", mat.name);
502 WriteTextureParamEntry( mat.emissive, "emission", mat.name);
289503 WriteTextureParamEntry( mat.ambient, "ambient", mat.name);
290504 WriteTextureParamEntry( mat.diffuse, "diffuse", mat.name);
291505 WriteTextureParamEntry( mat.specular, "specular", mat.name);
292506 WriteTextureParamEntry( mat.reflective, "reflective", mat.name);
507 WriteTextureParamEntry( mat.transparent, "transparent", mat.name);
508 WriteTextureParamEntry( mat.normal, "normal", mat.name);
293509
294510 mOutput << startstr << "<technique sid=\"standard\">" << endstr;
295511 PushTag();
296 mOutput << startstr << "<phong>" << endstr;
512 mOutput << startstr << "<" << mat.shading_model << ">" << endstr;
297513 PushTag();
298514
299 WriteTextureColorEntry( mat.emissive, "emission", mat.name + "-emissive-sampler");
515 WriteTextureColorEntry( mat.emissive, "emission", mat.name + "-emission-sampler");
300516 WriteTextureColorEntry( mat.ambient, "ambient", mat.name + "-ambient-sampler");
301517 WriteTextureColorEntry( mat.diffuse, "diffuse", mat.name + "-diffuse-sampler");
302518 WriteTextureColorEntry( mat.specular, "specular", mat.name + "-specular-sampler");
303
304 mOutput << startstr << "<shininess>" << endstr;
305 PushTag();
306 mOutput << startstr << "<float sid=\"shininess\">" << mat.shininess << "</float>" << endstr;
519 WriteFloatEntry(mat.shininess, "shininess");
520 WriteTextureColorEntry( mat.reflective, "reflective", mat.name + "-reflective-sampler");
521 WriteTextureColorEntry( mat.transparent, "transparent", mat.name + "-transparent-sampler");
522 WriteFloatEntry(mat.transparency, "transparency");
523 WriteFloatEntry(mat.index_refraction, "index_of_refraction");
524
525 if(! mat.normal.texture.empty()) {
526 WriteTextureColorEntry( mat.normal, "bump", mat.name + "-normal-sampler");
527 }
528
307529 PopTag();
308 mOutput << startstr << "</shininess>" << endstr;
309
310 WriteTextureColorEntry( mat.reflective, "reflective", mat.name + "-reflective-sampler");
311
312 // deactivated because the Collada spec PHONG model does not allow other textures.
313 // if( !mat.normal.texture.empty() )
314 // WriteTextureColorEntry( mat.normal, "bump", mat.name + "-normal-sampler");
315
316
317 PopTag();
318 mOutput << startstr << "</phong>" << endstr;
530 mOutput << startstr << "</" << mat.shading_model << ">" << endstr;
319531 PopTag();
320532 mOutput << startstr << "</technique>" << endstr;
321533 PopTag();
494706 mOutput << "</float_array>" << endstr;
495707 PopTag();
496708
497 // the usual Collada bullshit. Let's bloat it even more!
709 // the usual Collada fun. Let's bloat it even more!
498710 mOutput << startstr << "<technique_common>" << endstr;
499711 PushTag();
500712 mOutput << startstr << "<accessor count=\"" << pElementCount << "\" offset=\"0\" source=\"#" << arrayId << "\" stride=\"" << floatsPerElement << "\">" << endstr;
538750 // Writes the scene library
539751 void ColladaExporter::WriteSceneLibrary()
540752 {
753 std::string scene_name = mScene->mRootNode->mName.C_Str();
754
541755 mOutput << startstr << "<library_visual_scenes>" << endstr;
542756 PushTag();
543 mOutput << startstr << "<visual_scene id=\"myScene\" name=\"myScene\">" << endstr;
757 mOutput << startstr << "<visual_scene id=\"" + scene_name + "\" name=\"" + scene_name + "\">" << endstr;
544758 PushTag();
545759
546760 // start recursive write at the root node
547 WriteNode( mScene->mRootNode);
761 for( size_t a = 0; a < mScene->mRootNode->mNumChildren; ++a )
762 WriteNode( mScene->mRootNode->mChildren[a]);
548763
549764 PopTag();
550765 mOutput << startstr << "</visual_scene>" << endstr;
573788 for( size_t a = 0; a < pNode->mNumMeshes; ++a )
574789 {
575790 const aiMesh* mesh = mScene->mMeshes[pNode->mMeshes[a]];
576 // do not instanciate mesh if empty. I wonder how this could happen
577 if( mesh->mNumFaces == 0 || mesh->mNumVertices == 0 )
578 continue;
791 // do not instanciate mesh if empty. I wonder how this could happen
792 if( mesh->mNumFaces == 0 || mesh->mNumVertices == 0 )
793 continue;
579794
580795 mOutput << startstr << "<instance_geometry url=\"#" << GetMeshId( pNode->mMeshes[a]) << "\">" << endstr;
581796 PushTag();
582 mOutput << startstr << "<bind_material>" << endstr;
583 PushTag();
584 mOutput << startstr << "<technique_common>" << endstr;
585 PushTag();
586 mOutput << startstr << "<instance_material symbol=\"theresonlyone\" target=\"#" << materials[mesh->mMaterialIndex].name << "\" />" << endstr;
797 mOutput << startstr << "<bind_material>" << endstr;
798 PushTag();
799 mOutput << startstr << "<technique_common>" << endstr;
800 PushTag();
801 mOutput << startstr << "<instance_material symbol=\"theresonlyone\" target=\"#" << materials[mesh->mMaterialIndex].name << "\" />" << endstr;
587802 PopTag();
588 mOutput << startstr << "</technique_common>" << endstr;
589 PopTag();
590 mOutput << startstr << "</bind_material>" << endstr;
591 PopTag();
803 mOutput << startstr << "</technique_common>" << endstr;
804 PopTag();
805 mOutput << startstr << "</bind_material>" << endstr;
806 PopTag();
592807 mOutput << startstr << "</instance_geometry>" << endstr;
593808 }
594809
5858 {
5959 public:
6060 /// Constructor for a specific scene to export
61 ColladaExporter( const aiScene* pScene);
61 ColladaExporter( const aiScene* pScene, IOSystem* pIOSystem, const std::string& path, const std::string& file);
62
63 /// Destructor
64 virtual ~ColladaExporter();
6265
6366 protected:
6467 /// Starts writing the contents
6770 /// Writes the asset header
6871 void WriteHeader();
6972
70 /// Writes the material setup
71 void WriteMaterials();
73 /// Writes the embedded textures
74 void WriteTextures();
75
76 /// Writes the material setup
77 void WriteMaterials();
7278
7379 /// Writes the geometry library
7480 void WriteGeometryLibrary();
100106 std::stringstream mOutput;
101107
102108 protected:
109 /// The IOSystem for output
110 IOSystem* mIOSystem;
111
112 /// Path of the directory where the scene will be exported
113 const std::string mPath;
114
115 /// Name of the file (without extension) where the scene will be exported
116 const std::string mFile;
117
103118 /// The scene to be written
104119 const aiScene* mScene;
120 bool mSceneOwned;
105121
106122 /// current line start string, contains the current indentation for simple stream insertion
107123 std::string startstr;
111127 // pair of color and texture - texture precedences color
112128 struct Surface
113129 {
130 bool exist;
114131 aiColor4D color;
115132 std::string texture;
116133 size_t channel;
117 Surface() { channel = 0; }
134 Surface() { exist = false; channel = 0; }
135 };
136
137 struct Property
138 {
139 bool exist;
140 float value;
141 Property() { exist = false; }
118142 };
119143
120144 // summarize a material in an convinient way.
121145 struct Material
122146 {
123147 std::string name;
124 Surface ambient, diffuse, specular, emissive, reflective, normal;
125 float shininess; /// specular exponent
148 std::string shading_model;
149 Surface ambient, diffuse, specular, emissive, reflective, transparent, normal;
150 Property shininess, transparency, index_refraction;
126151
127 Material() { shininess = 16.0f; }
152 Material() {}
128153 };
129154
130155 std::vector<Material> materials;
156
157 std::map<unsigned int, std::string> textures;
131158
132159 protected:
133160 /// Dammit C++ - y u no compile two-pass? No I have to add all methods below the struct definitions
139166 void WriteTextureParamEntry( const Surface& pSurface, const std::string& pTypeName, const std::string& pMatName);
140167 /// Writes a color-or-texture entry into an effect definition
141168 void WriteTextureColorEntry( const Surface& pSurface, const std::string& pTypeName, const std::string& pImageName);
169 /// Writes a scalar property
170 void WriteFloatEntry( const Property& pProperty, const std::string& pTypeName);
142171 };
143172
144173 }
118118 };
119119
120120 #define aiLightSource_AMBIENT 0xdeaddead
121 #define ASSIMP_COLLADA_LIGHT_ANGLE_NOT_SET 1e9f
121122
122123 /** A collada light source. */
123124 struct Light
128129 , mAttQuadratic (0.f)
129130 , mFalloffAngle (180.f)
130131 , mFalloffExponent (0.f)
131 , mPenumbraAngle (10e10f)
132 , mOuterAngle (10e10f)
132 , mPenumbraAngle (ASSIMP_COLLADA_LIGHT_ANGLE_NOT_SET)
133 , mOuterAngle (ASSIMP_COLLADA_LIGHT_ANGLE_NOT_SET)
133134 , mIntensity (1.f)
134135 {}
135136
319320 for (unsigned int i = 0; i < AI_MAX_NUMBER_OF_TEXTURECOORDS;++i)
320321 mNumUVComponents[i] = 2;
321322 }
323
324 std::string mName;
322325
323326 // just to check if there's some sophisticated addressing involved...
324327 // which we don't support, and therefore should warn about.
4141 /** @file Implementation of the Collada loader */
4242
4343 #include "AssimpPCH.h"
44 #ifndef ASSIMP_BUILD_NO_DAE_IMPORTER
44 #ifndef ASSIMP_BUILD_NO_COLLADA_IMPORTER
4545
4646 #include "../include/assimp/anim.h"
4747 #include "ColladaLoader.h"
7272 // ------------------------------------------------------------------------------------------------
7373 // Constructor to be privately used by Importer
7474 ColladaLoader::ColladaLoader()
75 : noSkeletonMesh(), ignoreUpDirection(false)
7576 {}
7677
7778 // ------------------------------------------------------------------------------------------------
103104 }
104105
105106 // ------------------------------------------------------------------------------------------------
107 void ColladaLoader::SetupProperties(const Importer* pImp)
108 {
109 noSkeletonMesh = pImp->GetPropertyInteger(AI_CONFIG_IMPORT_NO_SKELETON_MESHES,0) != 0;
110 ignoreUpDirection = pImp->GetPropertyInteger(AI_CONFIG_IMPORT_COLLADA_IGNORE_UP_DIRECTION,0) != 0;
111 }
112
113
114 // ------------------------------------------------------------------------------------------------
106115 // Get file extension list
107116 const aiImporterDesc* ColladaLoader::GetInfo () const
108117 {
123132 mLights.clear();
124133 mCameras.clear();
125134 mTextures.clear();
135 mAnims.clear();
126136
127137 // parse the input file
128138 ColladaParser parser( pIOHandler, pFile);
146156 // ... then fill the materials with the now adjusted settings
147157 FillMaterials(parser, pScene);
148158
149 // Convert to Y_UP, if different orientation
150 if( parser.mUpDirection == ColladaParser::UP_X)
151 pScene->mRootNode->mTransformation *= aiMatrix4x4(
152 0, -1, 0, 0,
153 1, 0, 0, 0,
154 0, 0, 1, 0,
155 0, 0, 0, 1);
156 else if( parser.mUpDirection == ColladaParser::UP_Z)
157 pScene->mRootNode->mTransformation *= aiMatrix4x4(
158 1, 0, 0, 0,
159 0, 0, 1, 0,
160 0, -1, 0, 0,
161 0, 0, 0, 1);
162
159 // Apply unitsize scale calculation
160 pScene->mRootNode->mTransformation *= aiMatrix4x4(parser.mUnitSize, 0, 0, 0,
161 0, parser.mUnitSize, 0, 0,
162 0, 0, parser.mUnitSize, 0,
163 0, 0, 0, 1);
164 if( !ignoreUpDirection ) {
165 // Convert to Y_UP, if different orientation
166 if( parser.mUpDirection == ColladaParser::UP_X)
167 pScene->mRootNode->mTransformation *= aiMatrix4x4(
168 0, -1, 0, 0,
169 1, 0, 0, 0,
170 0, 0, 1, 0,
171 0, 0, 0, 1);
172 else if( parser.mUpDirection == ColladaParser::UP_Z)
173 pScene->mRootNode->mTransformation *= aiMatrix4x4(
174 1, 0, 0, 0,
175 0, 0, 1, 0,
176 0, -1, 0, 0,
177 0, 0, 0, 1);
178 }
163179 // store all meshes
164180 StoreSceneMeshes( pScene);
165181
179195 // If no meshes have been loaded, it's probably just an animated skeleton.
180196 if (!pScene->mNumMeshes) {
181197
182 SkeletonMeshBuilder hero(pScene);
198 if (!noSkeletonMesh) {
199 SkeletonMeshBuilder hero(pScene);
200 }
183201 pScene->mFlags |= AI_SCENE_FLAGS_INCOMPLETE;
184202 }
185203 }
314332
315333 out->mAngleInnerCone = AI_DEG_TO_RAD( srcLight->mFalloffAngle );
316334
317 // ... some extension magic. FUCKING COLLADA.
318 if (srcLight->mOuterAngle == 10e10f)
335 // ... some extension magic.
336 if (srcLight->mOuterAngle >= ASSIMP_COLLADA_LIGHT_ANGLE_NOT_SET*(1-1e-6f))
319337 {
320 // ... some deprecation magic. FUCKING FCOLLADA.
321 if (srcLight->mPenumbraAngle == 10e10f)
338 // ... some deprecation magic.
339 if (srcLight->mPenumbraAngle >= ASSIMP_COLLADA_LIGHT_ANGLE_NOT_SET*(1-1e-6f))
322340 {
323341 // Need to rely on falloff_exponent. I don't know how to interpret it, so I need to guess ....
324342 // epsilon chosen to be 0.1
371389 out->mClipPlaneNear = srcCamera->mZNear;
372390
373391 // ... but for the rest some values are optional
374 // and we need to compute the others in any combination. FUCKING COLLADA.
392 // and we need to compute the others in any combination.
375393 if (srcCamera->mAspect != 10e10f)
376394 out->mAspect = srcCamera->mAspect;
377395
455473 }
456474 else
457475 {
458 DefaultLogger::get()->warn( boost::str( boost::format( "Collada: No material specified for subgroup \"%s\" in geometry \"%s\".") % submesh.mMaterial % mid.mMeshOrController));
476 DefaultLogger::get()->warn( boost::str( boost::format( "Collada: No material specified for subgroup <%s> in geometry <%s>.") % submesh.mMaterial % mid.mMeshOrController));
459477 if( !mid.mMaterials.empty() )
460478 meshMaterial = mid.mMaterials.begin()->second.mMatName;
461479 }
503521
504522 // assign the material index
505523 dstMesh->mMaterialIndex = matIdx;
506 }
524 if(dstMesh->mName.length == 0)
525 {
526 dstMesh->mName = mid.mMeshOrController;
527 }
528 }
507529 }
508530 }
509531
522544 const Collada::Controller* pSrcController, size_t pStartVertex, size_t pStartFace)
523545 {
524546 aiMesh* dstMesh = new aiMesh;
547
548 dstMesh->mName = pSrcMesh->mName;
525549
526550 // count the vertices addressed by its faces
527551 const size_t numVertices = std::accumulate( pSrcMesh->mFaceSize.begin() + pStartFace,
533557 std::copy( pSrcMesh->mPositions.begin() + pStartVertex, pSrcMesh->mPositions.begin() +
534558 pStartVertex + numVertices, dstMesh->mVertices);
535559
536 // normals, if given. HACK: (thom) Due to the fucking Collada spec we never
560 // normals, if given. HACK: (thom) Due to the glorious Collada spec we never
537561 // know if we have the same number of normals as there are positions. So we
538562 // also ignore any vertex attribute if it has a different count
539563 if( pSrcMesh->mNormals.size() >= pStartVertex + numVertices)
624648 throw DeadlyImportError( "Data type mismatch while resolving mesh joints");
625649 // sanity check: we rely on the vertex weights always coming as pairs of BoneIndex-WeightIndex
626650 if( pSrcController->mWeightInputJoints.mOffset != 0 || pSrcController->mWeightInputWeights.mOffset != 1)
627 throw DeadlyImportError( "Unsupported vertex_weight adresssing scheme. Fucking collada spec.");
651 throw DeadlyImportError( "Unsupported vertex_weight addressing scheme. ");
628652
629653 // create containers to collect the weights for each bone
630654 size_t numBones = jointNames.mStrings.size();
880904 pScene->mAnimations = new aiAnimation*[mAnims.size()];
881905 std::copy( mAnims.begin(), mAnims.end(), pScene->mAnimations);
882906 }
907
908 mAnims.clear();
883909 }
884910
885911 // ------------------------------------------------------------------------------------------------
955981 else if( subElement == "Z")
956982 entry.mSubElement = 2;
957983 else
958 DefaultLogger::get()->warn( boost::str( boost::format( "Unknown anim subelement \"%s\". Ignoring") % subElement));
984 DefaultLogger::get()->warn( boost::str( boost::format( "Unknown anim subelement <%s>. Ignoring") % subElement));
959985 } else
960986 {
961987 // no subelement following, transformId is remaining string
14331459 ss.data[ss.length] = 0;
14341460 }
14351461
1436 // find and convert all %xyz special chars
1462 // find and convert all %xy special chars
14371463 char* out = ss.data;
14381464 for( const char* it = ss.data; it != ss.data + ss.length; /**/ )
14391465 {
1440 if( *it == '%' )
1466 if( *it == '%' && (it + 3) < ss.data + ss.length )
14411467 {
1442 size_t nbr = strtoul16( ++it, &it);
1468 // separate the number to avoid dragging in chars from behind into the parsing
1469 char mychar[3] = { it[1], it[2], 0 };
1470 size_t nbr = strtoul16( mychar);
1471 it += 3;
14431472 *out++ = (char)(nbr & 0xFF);
14441473 } else
14451474 {
9393 */
9494 const aiImporterDesc* GetInfo () const;
9595
96 void SetupProperties(const Importer* pImp);
97
9698 /** Imports the given file into the given scene structure.
9799 * See BaseImporter::InternReadFile() for details
98100 */
229231
230232 /** Accumulated animations for the target scene */
231233 std::vector<aiAnimation*> mAnims;
234
235 bool noSkeletonMesh;
236 bool ignoreUpDirection;
232237 };
233238
234239 } // end of namespace Assimp
4343 */
4444
4545 #include "AssimpPCH.h"
46 #ifndef ASSIMP_BUILD_NO_DAE_IMPORTER
46 #ifndef ASSIMP_BUILD_NO_COLLADA_IMPORTER
4747
4848 #include "ColladaParser.h"
4949 #include "fast_atof.h"
139139 ReadStructure();
140140 } else
141141 {
142 DefaultLogger::get()->debug( boost::str( boost::format( "Ignoring global element \"%s\".") % mReader->getNodeName()));
142 DefaultLogger::get()->debug( boost::str( boost::format( "Ignoring global element <%s>.") % mReader->getNodeName()));
143143 SkipElement();
144144 }
145145 } else
239239 else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END)
240240 {
241241 if( strcmp( mReader->getNodeName(), "asset") != 0)
242 ThrowException( "Expected end of \"asset\" element.");
242 ThrowException( "Expected end of <asset> element.");
243243
244244 break;
245245 }
270270 else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END)
271271 {
272272 if( strcmp( mReader->getNodeName(), "library_animations") != 0)
273 ThrowException( "Expected end of \"library_animations\" element.");
273 ThrowException( "Expected end of <library_animations> element.");
274274
275275 break;
276276 }
361361 else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END)
362362 {
363363 if( strcmp( mReader->getNodeName(), "animation") != 0)
364 ThrowException( "Expected end of \"animation\" element.");
364 ThrowException( "Expected end of <animation> element.");
365365
366366 break;
367367 }
424424 else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END)
425425 {
426426 if( strcmp( mReader->getNodeName(), "sampler") != 0)
427 ThrowException( "Expected end of \"sampler\" element.");
427 ThrowException( "Expected end of <sampler> element.");
428428
429429 break;
430430 }
462462 else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END)
463463 {
464464 if( strcmp( mReader->getNodeName(), "library_controllers") != 0)
465 ThrowException( "Expected end of \"library_controllers\" element.");
465 ThrowException( "Expected end of <library_controllers> element.");
466466
467467 break;
468468 }
486486 else if( IsElement( "skin"))
487487 {
488488 // read the mesh it refers to. According to the spec this could also be another
489 // controller, but I refuse to implement every bullshit idea they've come up with
489 // controller, but I refuse to implement every single idea they've come up with
490490 int sourceIndex = GetAttribute( "source");
491491 pController.mMeshId = mReader->getAttributeValue( sourceIndex) + 1;
492492 }
530530 if( strcmp( mReader->getNodeName(), "controller") == 0)
531531 break;
532532 else if( strcmp( mReader->getNodeName(), "skin") != 0)
533 ThrowException( "Expected end of \"controller\" element.");
533 ThrowException( "Expected end of <controller> element.");
534534 }
535535 }
536536 }
553553
554554 // local URLS always start with a '#'. We don't support global URLs
555555 if( attrSource[0] != '#')
556 ThrowException( boost::str( boost::format( "Unsupported URL format in \"%s\"") % attrSource));
556 ThrowException( boost::str( boost::format( "Unsupported URL format in \"%s\" in source attribute of <joints> data <input> element") % attrSource));
557557 attrSource++;
558558
559559 // parse source URL to corresponding source
562562 else if( strcmp( attrSemantic, "INV_BIND_MATRIX") == 0)
563563 pController.mJointOffsetMatrixSource = attrSource;
564564 else
565 ThrowException( boost::str( boost::format( "Unknown semantic \"%s\" in joint data") % attrSemantic));
565 ThrowException( boost::str( boost::format( "Unknown semantic \"%s\" in <joints> data <input> element") % attrSemantic));
566566
567567 // skip inner data, if present
568568 if( !mReader->isEmptyElement())
577577 else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END)
578578 {
579579 if( strcmp( mReader->getNodeName(), "joints") != 0)
580 ThrowException( "Expected end of \"joints\" element.");
580 ThrowException( "Expected end of <joints> element.");
581581
582582 break;
583583 }
598598 if( mReader->getNodeType() == irr::io::EXN_ELEMENT)
599599 {
600600 // Input channels for weight data. Two possible semantics: "JOINT" and "WEIGHT"
601 if( IsElement( "input"))
601 if( IsElement( "input") && vertexCount > 0 )
602602 {
603603 InputChannel channel;
604604
612612
613613 // local URLS always start with a '#'. We don't support global URLs
614614 if( attrSource[0] != '#')
615 ThrowException( boost::str( boost::format( "Unsupported URL format in \"%s\"") % attrSource));
615 ThrowException( boost::str( boost::format( "Unsupported URL format in \"%s\" in source attribute of <vertex_weights> data <input> element") % attrSource));
616616 channel.mAccessor = attrSource + 1;
617617
618618 // parse source URL to corresponding source
621621 else if( strcmp( attrSemantic, "WEIGHT") == 0)
622622 pController.mWeightInputWeights = channel;
623623 else
624 ThrowException( boost::str( boost::format( "Unknown semantic \"%s\" in vertex_weight data") % attrSemantic));
624 ThrowException( boost::str( boost::format( "Unknown semantic \"%s\" in <vertex_weights> data <input> element") % attrSemantic));
625625
626626 // skip inner data, if present
627627 if( !mReader->isEmptyElement())
628628 SkipElement();
629629 }
630 else if( IsElement( "vcount"))
630 else if( IsElement( "vcount") && vertexCount > 0 )
631631 {
632632 // read weight count per vertex
633633 const char* text = GetTextContent();
635635 for( std::vector<size_t>::iterator it = pController.mWeightCounts.begin(); it != pController.mWeightCounts.end(); ++it)
636636 {
637637 if( *text == 0)
638 ThrowException( "Out of data while reading vcount");
638 ThrowException( "Out of data while reading <vcount>");
639639
640640 *it = strtoul10( text, &text);
641641 numWeights += *it;
647647 // reserve weight count
648648 pController.mWeights.resize( numWeights);
649649 }
650 else if( IsElement( "v"))
650 else if( IsElement( "v") && vertexCount > 0 )
651651 {
652652 // read JointIndex - WeightIndex pairs
653653 const char* text = GetTextContent();
655655 for( std::vector< std::pair<size_t, size_t> >::iterator it = pController.mWeights.begin(); it != pController.mWeights.end(); ++it)
656656 {
657657 if( *text == 0)
658 ThrowException( "Out of data while reading vertex_weights");
658 ThrowException( "Out of data while reading <vertex_weights>");
659659 it->first = strtoul10( text, &text);
660660 SkipSpacesAndLineEnd( &text);
661661 if( *text == 0)
662 ThrowException( "Out of data while reading vertex_weights");
662 ThrowException( "Out of data while reading <vertex_weights>");
663663 it->second = strtoul10( text, &text);
664664 SkipSpacesAndLineEnd( &text);
665665 }
675675 else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END)
676676 {
677677 if( strcmp( mReader->getNodeName(), "vertex_weights") != 0)
678 ThrowException( "Expected end of \"vertex_weights\" element.");
678 ThrowException( "Expected end of <vertex_weights> element.");
679679
680680 break;
681681 }
711711 }
712712 else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END) {
713713 if( strcmp( mReader->getNodeName(), "library_images") != 0)
714 ThrowException( "Expected end of \"library_images\" element.");
714 ThrowException( "Expected end of <library_images> element.");
715715
716716 break;
717717 }
837837 else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END)
838838 {
839839 if( strcmp( mReader->getNodeName(), "library_materials") != 0)
840 ThrowException( "Expected end of \"library_materials\" element.");
840 ThrowException( "Expected end of <library_materials> element.");
841841
842842 break;
843843 }
871871 }
872872 else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END) {
873873 if( strcmp( mReader->getNodeName(), "library_lights") != 0)
874 ThrowException( "Expected end of \"library_lights\" element.");
874 ThrowException( "Expected end of <library_lights> element.");
875875
876876 break;
877877 }
910910 }
911911 else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END) {
912912 if( strcmp( mReader->getNodeName(), "library_cameras") != 0)
913 ThrowException( "Expected end of \"library_cameras\" element.");
913 ThrowException( "Expected end of <library_cameras> element.");
914914
915915 break;
916916 }
946946 }
947947 else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END) {
948948 if( strcmp( mReader->getNodeName(), "material") != 0)
949 ThrowException( "Expected end of \"material\" element.");
949 ThrowException( "Expected end of <material> element.");
950950
951951 break;
952952 }
10961096 if( IsElement( "effect"))
10971097 {
10981098 // read ID. Do I have to repeat my ranting about "optional" attributes?
1099 // Alex: .... no, not necessary. Please shut up and leave more space for
1100 // me to complain about the fucking Collada spec with its fucking
1101 // 'optional' attributes ...
11021099 int attrID = GetAttribute( "id");
11031100 std::string id = mReader->getAttributeValue( attrID);
11041101
11141111 }
11151112 else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END) {
11161113 if( strcmp( mReader->getNodeName(), "library_effects") != 0)
1117 ThrowException( "Expected end of \"library_effects\" element.");
1114 ThrowException( "Expected end of <library_effects> element.");
11181115
11191116 break;
11201117 }
11381135 else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END)
11391136 {
11401137 if( strcmp( mReader->getNodeName(), "effect") != 0)
1141 ThrowException( "Expected end of \"effect\" element.");
1138 ThrowException( "Expected end of <effect> element.");
11421139
11431140 break;
11441141 }
13681365 int attrTex = GetAttribute( "texture");
13691366 pSampler.mName = mReader->getAttributeValue( attrTex);
13701367
1371 // get name of UV source channel
1372 attrTex = GetAttribute( "texcoord");
1373 pSampler.mUVChannel = mReader->getAttributeValue( attrTex);
1368 // get name of UV source channel. Specification demands it to be there, but some exporters
1369 // don't write it. It will be the default UV channel in case it's missing.
1370 attrTex = TestAttribute( "texcoord");
1371 if( attrTex >= 0 )
1372 pSampler.mUVChannel = mReader->getAttributeValue( attrTex);
13741373 //SkipElement();
13751374 }
13761375 else if( IsElement( "technique"))
14921491 // create a mesh and store it in the library under its ID
14931492 Mesh* mesh = new Mesh;
14941493 mMeshLibrary[id] = mesh;
1494
1495 // read the mesh name if it exists
1496 const int nameIndex = TestAttribute("name");
1497 if(nameIndex != -1)
1498 {
1499 mesh->mName = mReader->getAttributeValue(nameIndex);
1500 }
14951501
14961502 // read on from there
14971503 ReadGeometry( mesh);
15041510 else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END)
15051511 {
15061512 if( strcmp( mReader->getNodeName(), "library_geometries") != 0)
1507 ThrowException( "Expected end of \"library_geometries\" element.");
1513 ThrowException( "Expected end of <library_geometries> element.");
15081514
15091515 break;
15101516 }
15351541 else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END)
15361542 {
15371543 if( strcmp( mReader->getNodeName(), "geometry") != 0)
1538 ThrowException( "Expected end of \"geometry\" element.");
1544 ThrowException( "Expected end of <geometry> element.");
15391545
15401546 break;
15411547 }
15871593 } else
15881594 {
15891595 // everything else should be punished
1590 ThrowException( "Expected end of \"mesh\" element.");
1596 ThrowException( "Expected end of <mesh> element.");
15911597 }
15921598 }
15931599 }
16101616 }
16111617 else if( IsElement( "technique_common"))
16121618 {
1613 // I don't fucking care for your profiles bullshit
1619 // I don't care for your profiles
16141620 }
16151621 else if( IsElement( "accessor"))
16161622 {
16341640 } else
16351641 {
16361642 // everything else should be punished
1637 ThrowException( "Expected end of \"source\" element.");
1643 ThrowException( "Expected end of <source> element.");
16381644 }
16391645 }
16401646 }
17121718 int attrSource = GetAttribute( "source");
17131719 const char* source = mReader->getAttributeValue( attrSource);
17141720 if( source[0] != '#')
1715 ThrowException( boost::str( boost::format( "Unknown reference format in url \"%s\".") % source));
1721 ThrowException( boost::str( boost::format( "Unknown reference format in url \"%s\" in source attribute of <accessor> element.") % source));
17161722 int attrCount = GetAttribute( "count");
17171723 unsigned int count = (unsigned int) mReader->getAttributeValueAsInt( attrCount);
17181724 int attrOffset = TestAttribute( "offset");
17941800 SkipElement();
17951801 } else
17961802 {
1797 ThrowException( "Unexpected sub element in tag \"accessor\".");
1803 ThrowException( boost::str( boost::format( "Unexpected sub element <%s> in tag <accessor>") % mReader->getNodeName()));
17981804 }
17991805 }
18001806 else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END)
18011807 {
18021808 if( strcmp( mReader->getNodeName(), "accessor") != 0)
1803 ThrowException( "Expected end of \"accessor\" element.");
1804
1809 ThrowException( "Expected end of <accessor> element.");
18051810 break;
18061811 }
18071812 }
18251830 ReadInputChannel( pMesh->mPerVertexData);
18261831 } else
18271832 {
1828 ThrowException( "Unexpected sub element in tag \"vertices\".");
1833 ThrowException( boost::str( boost::format( "Unexpected sub element <%s> in tag <vertices>") % mReader->getNodeName()));
18291834 }
18301835 }
18311836 else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END)
18321837 {
18331838 if( strcmp( mReader->getNodeName(), "vertices") != 0)
1834 ThrowException( "Expected end of \"vertices\" element.");
1839 ThrowException( "Expected end of <vertices> element.");
18351840
18361841 break;
18371842 }
18981903 for( unsigned int a = 0; a < numPrimitives; a++)
18991904 {
19001905 if( *content == 0)
1901 ThrowException( "Expected more values while reading vcount contents.");
1906 ThrowException( "Expected more values while reading <vcount> contents.");
19021907 // read a number
19031908 vcount.push_back( (size_t) strtoul10( content, &content));
19041909 // skip whitespace after it
19181923 }
19191924 } else
19201925 {
1921 ThrowException( "Unexpected sub element in tag \"vertices\".");
1926 ThrowException( boost::str( boost::format( "Unexpected sub element <%s> in tag <%s>") % mReader->getNodeName() % elementName));
19221927 }
19231928 }
19241929 else if( mReader->getNodeType() == irr::io::EXN_ELEMENT_END)
19251930 {
19261931 if( mReader->getNodeName() != elementName)
1927 ThrowException( boost::str( boost::format( "Expected end of \"%s\" element.") % elementName));
1932 ThrowException( boost::str( boost::format( "Expected end of <%s> element.") % elementName));
19281933
19291934 break;
19301935 }
19461951 int attrSource = GetAttribute( "source");
19471952 const char* source = mReader->getAttributeValue( attrSource);
19481953 if( source[0] != '#')
1949 ThrowException( boost::str( boost::format( "Unknown reference format in url \"%s\".") % source));
1954 ThrowException( boost::str( boost::format( "Unknown reference format in url \"%s\" in source attribute of <input> element.") % source));
19501955 channel.mAccessor = source+1; // skipping the leading #, hopefully the remaining text is the accessor ID only
19511956
19521957 // read index offset, if per-index <input>
19601965 if(attrSet > -1){
19611966 attrSet = mReader->getAttributeValueAsInt( attrSet);
19621967 if(attrSet < 0)
1963 ThrowException( boost::str( boost::format( "Invalid index \"%i\" for set attribute") % (attrSet)));
1968 ThrowException( boost::str( boost::format( "Invalid index \"%i\" in set attribute of <input> element") % (attrSet)));
19641969
19651970 channel.mIndex = attrSet;
19661971 }
20622067 {
20632068 // warn if the vertex channel does not refer to the <vertices> element in the same mesh
20642069 if( input.mAccessor != pMesh->mVertexID)
2065 ThrowException( "Unsupported vertex referencing scheme. I fucking hate Collada.");
2070 ThrowException( "Unsupported vertex referencing scheme.");
20662071 continue;
20672072 }
20682073
21542159
21552160 // get a pointer to the start of the data object referred to by the accessor and the local index
21562161 const float* dataObject = &(acc.mData->mValues[0]) + acc.mOffset + pLocalIndex* acc.mStride;
2157
2162
21582163 // assemble according to the accessors component sub-offset list. We don't care, yet,
21592164 // what kind of object exactly we're extracting here
21602165 float obj[4];
21712176 DefaultLogger::get()->error("Collada: just one vertex position stream supported");
21722177 break;
21732178 case IT_Normal:
2174 // pad to current vertex count if necessary
2175 if( pMesh->mNormals.size() < pMesh->mPositions.size()-1)
2176 pMesh->mNormals.insert( pMesh->mNormals.end(), pMesh->mPositions.size() - pMesh->mNormals.size() - 1, aiVector3D( 0, 1, 0));
2177
2178 // ignore all normal streams except 0 - there can be only one normal
2179 if( pInput.mIndex == 0)
2179 // pad to current vertex count if necessary
2180 if( pMesh->mNormals.size() < pMesh->mPositions.size()-1)
2181 pMesh->mNormals.insert( pMesh->mNormals.end(), pMesh->mPositions.size() - pMesh->mNormals.size() - 1, aiVector3D( 0, 1, 0));
2182
2183 // ignore all normal streams except 0 - there can be only one normal
2184 if( pInput.mIndex == 0)
21802185 pMesh->mNormals.push_back( aiVector3D( obj[0], obj[1], obj[2]));
21812186 else
21822187 DefaultLogger::get()->error("Collada: just one vertex normal stream supported");
21832188 break;
21842189 case IT_Tangent:
2185 // pad to current vertex count if necessary
2186 if( pMesh->mTangents.size() < pMesh->mPositions.size()-1)
2187 pMesh->mTangents.insert( pMesh->mTangents.end(), pMesh->mPositions.size() - pMesh->mTangents.size() - 1, aiVector3D( 1, 0, 0));
2188
2189 // ignore all tangent streams except 0 - there can be only one tangent
2190 if( pInput.mIndex == 0)
2190 // pad to current vertex count if necessary
2191 if( pMesh->mTangents.size() < pMesh->mPositions.size()-1)
2192 pMesh->mTangents.insert( pMesh->mTangents.end(), pMesh->mPositions.size() - pMesh->mTangents.size() - 1, aiVector3D( 1, 0, 0));
2193
2194 // ignore all tangent streams except 0 - there can be only one tangent
2195 if( pInput.mIndex == 0)
21912196 pMesh->mTangents.push_back( aiVector3D( obj[0], obj[1], obj[2]));
21922197 else
21932198 DefaultLogger::get()->error("Collada: just one vertex tangent stream supported");
21942199 break;
21952200 case IT_Bitangent:
2196 // pad to current vertex count if necessary
2197 if( pMesh->mBitangents.size() < pMesh->mPositions.size()-1)
2198 pMesh->mBitangents.insert( pMesh->mBitangents.end(), pMesh->mPositions.size() - pMesh->mBitangents.size() - 1, aiVector3D( 0, 0, 1));
2199
2200 // ignore all bitangent streams except 0 - there can be only one bitangent
2201 if( pInput.mIndex == 0)
2201 // pad to current vertex count if necessary
2202 if( pMesh->mBitangents.size() < pMesh->mPositions.size()-1)
2203 pMesh->mBitangents.insert( pMesh->mBitangents.end(), pMesh->mPositions.size() - pMesh->mBitangents.size() - 1, aiVector3D( 0, 0, 1));
2204
2205 // ignore all bitangent streams except 0 - there can be only one bitangent
2206 if( pInput.mIndex == 0)
22022207 pMesh->mBitangents.push_back( aiVector3D( obj[0], obj[1], obj[2]));
22032208 else
22042209 DefaultLogger::get()->error("Collada: just one vertex bitangent stream supported");
22052210 break;
22062211 case IT_Texcoord:
2207 // up to 4 texture coord sets are fine, ignore the others
2212 // up to 4 texture coord sets are fine, ignore the others
22082213 if( pInput.mIndex < AI_MAX_NUMBER_OF_TEXTURECOORDS)
2209 {
2210 // pad to current vertex count if necessary
2211 if( pMesh->mTexCoords[pInput.mIndex].size() < pMesh->mPositions.size()-1)
2212 pMesh->mTexCoords[pInput.mIndex].insert( pMesh->mTexCoords[pInput.mIndex].end(),
2213 pMesh->mPositions.size() - pMesh->mTexCoords[pInput.mIndex].size() - 1, aiVector3D( 0, 0, 0));
2214 {
2215 // pad to current vertex count if necessary
2216 if( pMesh->mTexCoords[pInput.mIndex].size() < pMesh->mPositions.size()-1)
2217 pMesh->mTexCoords[pInput.mIndex].insert( pMesh->mTexCoords[pInput.mIndex].end(),
2218 pMesh->mPositions.size() - pMesh->mTexCoords[pInput.mIndex].size() - 1, aiVector3D( 0, 0, 0));
22142219
22152220 pMesh->mTexCoords[pInput.mIndex].push_back( aiVector3D( obj[0], obj[1], obj[2]));
22162221 if (0 != acc.mSubOffset[2] || 0 != acc.mSubOffset[3]) /* hack ... consider cleaner solution */
22172222 pMesh->mNumUVComponents[pInput.mIndex]=3;
22182223 } else
2219 {
2224 {
22202225 DefaultLogger::get()->error("Collada: too many texture coordinate sets. Skipping.");
2221 }
2226 }
22222227 break;
22232228 case IT_Color:
2224 // up to 4 color sets are fine, ignore the others
2229 // up to 4 color sets are fine, ignore the others
22252230 if( pInput.mIndex < AI_MAX_NUMBER_OF_COLOR_SETS)
2226 {
2227 // pad to current vertex count if necessary
2228 if( pMesh->mColors[pInput.mIndex].size() < pMesh->mPositions.size()-1)
2229 pMesh->mColors[pInput.mIndex].insert( pMesh->mColors[pInput.mIndex].end(),
2230 pMesh->mPositions.size() - pMesh->mColors[pInput.mIndex].size() - 1, aiColor4D( 0, 0, 0, 1));
2231
2232 pMesh->mColors[pInput.mIndex].push_back( aiColor4D( obj[0], obj[1], obj[2], obj[3]));
2233 } else
2234 {
2231 {
2232 // pad to current vertex count if necessary
2233 if( pMesh->mColors[pInput.mIndex].size() < pMesh->mPositions.size()-1)
2234 pMesh->mColors[pInput.mIndex].insert( pMesh->mColors[pInput.mIndex].end(),
2235 pMesh->mPositions.size() - pMesh->mColors[pInput.mIndex].size() - 1, aiColor4D( 0, 0, 0, 1));
2236
2237 aiColor4D result(0, 0, 0, 1);
2238 for (size_t i = 0; i < pInput.mResolved->mSize; ++i)
2239 {
2240 result[i] = obj[pInput.mResolved->mSubOffset[i]];
2241 }
2242 pMesh->mColors[pInput.mIndex].push_back(result);
2243 } else
2244 {
22352245 DefaultLogger::get()->error("Collada: too many vertex color sets. Skipping.");
2236 }
2237
2238 break;
2239 default:
2240 // IT_Invalid and IT_Vertex
2241 ai_assert(false && "shouldn't ever get here");
2246 }
2247
2248 break;
2249 default:
2250 // IT_Invalid and IT_Vertex
2251 ai_assert(false && "shouldn't ever get here");
22422252 }
22432253 }
22442254
25732583 {
25742584 // should be the first and only occurence
25752585 if( mRootNode)
2576 ThrowException( "Invalid scene containing multiple root nodes");
2586 ThrowException( "Invalid scene containing multiple root nodes in <instance_visual_scene> element");
25772587
25782588 // read the url of the scene to instance. Should be of format "#some_name"
25792589 int urlIndex = GetAttribute( "url");
25802590 const char* url = mReader->getAttributeValue( urlIndex);
25812591 if( url[0] != '#')
2582 ThrowException( "Unknown reference format");
2592 ThrowException( "Unknown reference format in <instance_visual_scene> element");
25832593
25842594 // find the referred scene, skip the leading #
25852595 NodeLibrary::const_iterator sit = mNodeLibrary.find( url+1);
25862596 if( sit == mNodeLibrary.end())
2587 ThrowException( "Unable to resolve visual_scene reference \"" + std::string(url) + "\".");
2597 ThrowException( "Unable to resolve visual_scene reference \"" + std::string(url) + "\" in <instance_visual_scene> element.");
25882598 mRootNode = sit->second;
25892599 } else {
25902600 SkipElement();
26362646 {
26372647 // read element start
26382648 if( !mReader->read())
2639 ThrowException( boost::str( boost::format( "Unexpected end of file while beginning of \"%s\" element.") % pName));
2649 ThrowException( boost::str( boost::format( "Unexpected end of file while beginning of <%s> element.") % pName));
26402650 // whitespace in front is ok, just read again if found
26412651 if( mReader->getNodeType() == irr::io::EXN_TEXT)
26422652 if( !mReader->read())
2643 ThrowException( boost::str( boost::format( "Unexpected end of file while reading beginning of \"%s\" element.") % pName));
2653 ThrowException( boost::str( boost::format( "Unexpected end of file while reading beginning of <%s> element.") % pName));
26442654
26452655 if( mReader->getNodeType() != irr::io::EXN_ELEMENT || strcmp( mReader->getNodeName(), pName) != 0)
2646 ThrowException( boost::str( boost::format( "Expected start of \"%s\" element.") % pName));
2656 ThrowException( boost::str( boost::format( "Expected start of <%s> element.") % pName));
26472657 }
26482658
26492659 // ------------------------------------------------------------------------------------------------
26562666
26572667 // if not, read some more
26582668 if( !mReader->read())
2659 ThrowException( boost::str( boost::format( "Unexpected end of file while reading end of \"%s\" element.") % pName));
2669 ThrowException( boost::str( boost::format( "Unexpected end of file while reading end of <%s> element.") % pName));
26602670 // whitespace in front is ok, just read again if found
26612671 if( mReader->getNodeType() == irr::io::EXN_TEXT)
26622672 if( !mReader->read())
2663 ThrowException( boost::str( boost::format( "Unexpected end of file while reading end of \"%s\" element.") % pName));
2673 ThrowException( boost::str( boost::format( "Unexpected end of file while reading end of <%s> element.") % pName));
26642674
26652675 // but this has the be the closing tag, or we're lost
26662676 if( mReader->getNodeType() != irr::io::EXN_ELEMENT_END || strcmp( mReader->getNodeName(), pName) != 0)
2667 ThrowException( boost::str( boost::format( "Expected end of \"%s\" element.") % pName));
2677 ThrowException( boost::str( boost::format( "Expected end of <%s> element.") % pName));
26682678 }
26692679
26702680 // ------------------------------------------------------------------------------------------------
26762686 return index;
26772687
26782688 // attribute not found -> throw an exception
2679 ThrowException( boost::str( boost::format( "Expected attribute \"%s\" at element \"%s\".") % pAttr % mReader->getNodeName()));
2689 ThrowException( boost::str( boost::format( "Expected attribute \"%s\" for element <%s>.") % pAttr % mReader->getNodeName()));
26802690 return -1;
26812691 }
26822692
379379 }
380380
381381 // ------------------------------------------------------------------------------------------------
382 void ComputeUVMappingProcess::ComputeBoxMapping(aiMesh* /*mesh*/, aiVector3D* /*out*/)
382 void ComputeUVMappingProcess::ComputeBoxMapping( aiMesh*, aiVector3D* )
383383 {
384384 DefaultLogger::get()->error("Mapping type currently not implemented");
385385 }
109109
110110 if (SIZE_MAX == cachedSize) {
111111
112 // TODO: Is that really faster if we're already owning a handle to the file?
112 // Although fseek/ftell would allow us to reuse the exising file handle here,
113 // it is generally unsafe because:
114 // - For binary streams, it is not technically well-defined
115 // - For text files the results are meaningless
116 // That's why we use the safer variant fstat here.
117 //
118 // See here for details:
119 // https://www.securecoding.cert.org/confluence/display/seccode/FIO19-C.+Do+not+use+fseek()+and+ftell()+to+compute+the+size+of+a+regular+file
113120 #if defined _WIN32 && !defined __GNUC__
114121 struct __stat64 fileStat;
115122 int err = _stat64( mFilename.c_str(), &fileStat );
252252 if ( m_Severity == Logger::NORMAL )
253253 return;
254254
255 char msg[MAX_LOG_MESSAGE_LENGTH*2];
255 char msg[MAX_LOG_MESSAGE_LENGTH + 16];
256256 ::sprintf(msg,"Debug, T%i: %s", GetThreadID(), message );
257257
258258 WriteToStreams( msg, Logger::Debugging );
262262 // Logs an info
263263 void DefaultLogger::OnInfo( const char* message )
264264 {
265 char msg[MAX_LOG_MESSAGE_LENGTH*2];
265 char msg[MAX_LOG_MESSAGE_LENGTH + 16];
266266 ::sprintf(msg,"Info, T%i: %s", GetThreadID(), message );
267267
268268 WriteToStreams( msg , Logger::Info );
272272 // Logs a warning
273273 void DefaultLogger::OnWarn( const char* message )
274274 {
275 char msg[MAX_LOG_MESSAGE_LENGTH*2];
275 char msg[MAX_LOG_MESSAGE_LENGTH + 16];
276276 ::sprintf(msg,"Warn, T%i: %s", GetThreadID(), message );
277277
278278 WriteToStreams( msg, Logger::Warn );
282282 // Logs an error
283283 void DefaultLogger::OnError( const char* message )
284284 {
285 char msg[MAX_LOG_MESSAGE_LENGTH*2];
285 char msg[MAX_LOG_MESSAGE_LENGTH + 16];
286286 ::sprintf(msg,"Error, T%i: %s", GetThreadID(), message );
287287
288288 WriteToStreams( msg, Logger::Err );
5959 #include "BaseProcess.h"
6060 #include "Importer.h" // need this for GetPostProcessingStepInstanceList()
6161
62 #include "JoinVerticesProcess.h"
6263 #include "MakeVerboseFormat.h"
6364 #include "ConvertToLHProcess.h"
6465
7273 void ExportSceneCollada(const char*,IOSystem*, const aiScene*);
7374 void ExportSceneObj(const char*,IOSystem*, const aiScene*);
7475 void ExportSceneSTL(const char*,IOSystem*, const aiScene*);
76 void ExportSceneSTLBinary(const char*,IOSystem*, const aiScene*);
7577 void ExportScenePly(const char*,IOSystem*, const aiScene*);
7678 void ExportScene3DS(const char*, IOSystem*, const aiScene*) {}
7779
8486 #endif
8587
8688 #ifndef ASSIMP_BUILD_NO_OBJ_EXPORTER
87 Exporter::ExportFormatEntry( "obj", "Wavefront OBJ format", "obj", &ExportSceneObj),
89 Exporter::ExportFormatEntry( "obj", "Wavefront OBJ format", "obj", &ExportSceneObj,
90 aiProcess_GenSmoothNormals /*| aiProcess_PreTransformVertices */),
8891 #endif
8992
9093 #ifndef ASSIMP_BUILD_NO_STL_EXPORTER
9194 Exporter::ExportFormatEntry( "stl", "Stereolithography", "stl" , &ExportSceneSTL,
95 aiProcess_Triangulate | aiProcess_GenNormals | aiProcess_PreTransformVertices
96 ),
97 Exporter::ExportFormatEntry( "stlb", "Stereolithography (binary)", "stl" , &ExportSceneSTLBinary,
9298 aiProcess_Triangulate | aiProcess_GenNormals | aiProcess_PreTransformVertices
9399 ),
94100 #endif
169175 Exporter :: ~Exporter()
170176 {
171177 FreeBlob();
178
179 delete pimpl;
172180 }
173181
174182
195203
196204
197205 // ------------------------------------------------------------------------------------------------
198 const aiExportDataBlob* Exporter :: ExportToBlob( const aiScene* pScene, const char* pFormatId, unsigned int pPreprocessing )
206 const aiExportDataBlob* Exporter :: ExportToBlob( const aiScene* pScene, const char* pFormatId, unsigned int )
199207 {
200208 if (pimpl->blob) {
201209 delete pimpl->blob;
221229
222230
223231 // ------------------------------------------------------------------------------------------------
232 bool IsVerboseFormat(const aiMesh* mesh)
233 {
234 // avoid slow vector<bool> specialization
235 std::vector<unsigned int> seen(mesh->mNumVertices,0);
236 for(unsigned int i = 0; i < mesh->mNumFaces; ++i) {
237 const aiFace& f = mesh->mFaces[i];
238 for(unsigned int j = 0; j < f.mNumIndices; ++j) {
239 if(++seen[f.mIndices[j]] == 2) {
240 // found a duplicate index
241 return false;
242 }
243 }
244 }
245 return true;
246 }
247
248
249 // ------------------------------------------------------------------------------------------------
250 bool IsVerboseFormat(const aiScene* pScene)
251 {
252 for(unsigned int i = 0; i < pScene->mNumMeshes; ++i) {
253 if(!IsVerboseFormat(pScene->mMeshes[i])) {
254 return false;
255 }
256 }
257 return true;
258 }
259
260
261 // ------------------------------------------------------------------------------------------------
224262 aiReturn Exporter :: Export( const aiScene* pScene, const char* pFormatId, const char* pPath, unsigned int pPreprocessing )
225263 {
226264 ASSIMP_BEGIN_EXCEPTION_REGION();
265
266 // when they create scenes from scratch, users will likely create them not in verbose
267 // format. They will likely not be aware that there is a flag in the scene to indicate
268 // this, however. To avoid surprises and bug reports, we check for duplicates in
269 // meshes upfront.
270 const bool is_verbose_format = !(pScene->mFlags & AI_SCENE_FLAGS_NON_VERBOSE_FORMAT) || IsVerboseFormat(pScene);
227271
228272 pimpl->mError = "";
229273 for (size_t i = 0; i < pimpl->mExporters.size(); ++i) {
246290 const unsigned int nonIdempotentSteps = aiProcess_FlipWindingOrder | aiProcess_FlipUVs | aiProcess_MakeLeftHanded;
247291
248292 // Erase all pp steps that were already applied to this scene
249 unsigned int pp = (exp.mEnforcePP | pPreprocessing) & ~(priv
293 const unsigned int pp = (exp.mEnforcePP | pPreprocessing) & ~(priv && !priv->mIsCopy
250294 ? (priv->mPPStepsApplied & ~nonIdempotentSteps)
251295 : 0u);
252296
253297 // If no extra postprocessing was specified, and we obtained this scene from an
254298 // Assimp importer, apply the reverse steps automatically.
255 if (!pPreprocessing && priv) {
256 pp |= (nonIdempotentSteps & priv->mPPStepsApplied);
257 }
299 // TODO: either drop this, or document it. Otherwise it is just a bad surprise.
300 //if (!pPreprocessing && priv) {
301 // pp |= (nonIdempotentSteps & priv->mPPStepsApplied);
302 //}
258303
259304 // If the input scene is not in verbose format, but there is at least postprocessing step that relies on it,
260305 // we need to run the MakeVerboseFormat step first.
261 if (scenecopy->mFlags & AI_SCENE_FLAGS_NON_VERBOSE_FORMAT) {
306 bool must_join_again = false;
307 if (!is_verbose_format) {
262308
263309 bool verbosify = false;
264310 for( unsigned int a = 0; a < pimpl->mPostProcessingSteps.size(); a++) {
275321
276322 MakeVerboseFormatProcess proc;
277323 proc.Execute(scenecopy.get());
324
325 if(!(exp.mEnforcePP & aiProcess_JoinIdenticalVertices)) {
326 must_join_again = true;
327 }
278328 }
279329 }
280330
317367 ai_assert(privOut);
318368
319369 privOut->mPPStepsApplied |= pp;
370 }
371
372 if(must_join_again) {
373 JoinVerticesProcess proc;
374 proc.Execute(scenecopy.get());
320375 }
321376
322377 exp.mExportFunction(pPath,pimpl->mIOSystem.get(),scenecopy.get());
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXAnimation.cpp
41 * @brief Assimp::FBX::AnimationCurve, Assimp::FBX::AnimationCurveNode,
42 * Assimp::FBX::AnimationLayer, Assimp::FBX::AnimationStack
43 */
44 #include "AssimpPCH.h"
45
46 #ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
47
48 #include "FBXParser.h"
49 #include "FBXDocument.h"
50 #include "FBXImporter.h"
51 #include "FBXImportSettings.h"
52 #include "FBXDocumentUtil.h"
53 #include "FBXProperties.h"
54
55 namespace Assimp {
56 namespace FBX {
57
58 using namespace Util;
59
60 // ------------------------------------------------------------------------------------------------
61 AnimationCurve::AnimationCurve(uint64_t id, const Element& element, const std::string& name, const Document& doc)
62 : Object(id, element, name)
63 {
64 const Scope& sc = GetRequiredScope(element);
65 const Element& KeyTime = GetRequiredElement(sc,"KeyTime");
66 const Element& KeyValueFloat = GetRequiredElement(sc,"KeyValueFloat");
67
68 ParseVectorDataArray(keys, KeyTime);
69 ParseVectorDataArray(values, KeyValueFloat);
70
71 if(keys.size() != values.size()) {
72 DOMError("the number of key times does not match the number of keyframe values",&KeyTime);
73 }
74
75 // check if the key times are well-ordered
76 if(!std::equal(keys.begin(), keys.end() - 1, keys.begin() + 1, std::less<KeyTimeList::value_type>())) {
77 DOMError("the keyframes are not in ascending order",&KeyTime);
78 }
79
80 const Element* KeyAttrDataFloat = sc["KeyAttrDataFloat"];
81 if(KeyAttrDataFloat) {
82 ParseVectorDataArray(attributes, *KeyAttrDataFloat);
83 }
84
85 const Element* KeyAttrFlags = sc["KeyAttrFlags"];
86 if(KeyAttrFlags) {
87 ParseVectorDataArray(flags, *KeyAttrFlags);
88 }
89 }
90
91
92 // ------------------------------------------------------------------------------------------------
93 AnimationCurve::~AnimationCurve()
94 {
95
96 }
97
98
99 // ------------------------------------------------------------------------------------------------
100 AnimationCurveNode::AnimationCurveNode(uint64_t id, const Element& element, const std::string& name, const Document& doc,
101 const char* const * target_prop_whitelist /*= NULL*/, size_t whitelist_size /*= 0*/)
102 : Object(id, element, name)
103 , target()
104 , doc(doc)
105 {
106 const Scope& sc = GetRequiredScope(element);
107
108 // find target node
109 const char* whitelist[] = {"Model","NodeAttribute"};
110 const std::vector<const Connection*>& conns = doc.GetConnectionsBySourceSequenced(ID(),whitelist,2);
111
112 BOOST_FOREACH(const Connection* con, conns) {
113
114 // link should go for a property
115 if (!con->PropertyName().length()) {
116 continue;
117 }
118
119 if(target_prop_whitelist) {
120 const char* const s = con->PropertyName().c_str();
121 bool ok = false;
122 for (size_t i = 0; i < whitelist_size; ++i) {
123 if (!strcmp(s, target_prop_whitelist[i])) {
124 ok = true;
125 break;
126 }
127 }
128
129 if (!ok) {
130 throw std::range_error("AnimationCurveNode target property is not in whitelist");
131 }
132 }
133
134 const Object* const ob = con->DestinationObject();
135 if(!ob) {
136 DOMWarning("failed to read destination object for AnimationCurveNode->Model link, ignoring",&element);
137 continue;
138 }
139
140 // XXX support constraints as DOM class
141 //ai_assert(dynamic_cast<const Model*>(ob) || dynamic_cast<const NodeAttribute*>(ob));
142 target = ob;
143 if(!target) {
144 continue;
145 }
146
147 prop = con->PropertyName();
148 break;
149 }
150
151 if(!target) {
152 DOMWarning("failed to resolve target Model/NodeAttribute/Constraint for AnimationCurveNode",&element);
153 }
154
155 props = GetPropertyTable(doc,"AnimationCurveNode.FbxAnimCurveNode",element,sc,false);
156 }
157
158
159 // ------------------------------------------------------------------------------------------------
160 AnimationCurveNode::~AnimationCurveNode()
161 {
162
163 }
164
165
166 // ------------------------------------------------------------------------------------------------
167 const AnimationCurveMap& AnimationCurveNode::Curves() const
168 {
169 if(curves.empty()) {
170 // resolve attached animation curves
171 const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID(),"AnimationCurve");
172
173 BOOST_FOREACH(const Connection* con, conns) {
174
175 // link should go for a property
176 if (!con->PropertyName().length()) {
177 continue;
178 }
179
180 const Object* const ob = con->SourceObject();
181 if(!ob) {
182 DOMWarning("failed to read source object for AnimationCurve->AnimationCurveNode link, ignoring",&element);
183 continue;
184 }
185
186 const AnimationCurve* const anim = dynamic_cast<const AnimationCurve*>(ob);
187 if(!anim) {
188 DOMWarning("source object for ->AnimationCurveNode link is not an AnimationCurve",&element);
189 continue;
190 }
191
192 curves[con->PropertyName()] = anim;
193 }
194 }
195
196 return curves;
197 }
198
199
200 // ------------------------------------------------------------------------------------------------
201 AnimationLayer::AnimationLayer(uint64_t id, const Element& element, const std::string& name, const Document& doc)
202 : Object(id, element, name)
203 , doc(doc)
204 {
205 const Scope& sc = GetRequiredScope(element);
206
207 // note: the props table here bears little importance and is usually absent
208 props = GetPropertyTable(doc,"AnimationLayer.FbxAnimLayer",element,sc, true);
209 }
210
211
212 // ------------------------------------------------------------------------------------------------
213 AnimationLayer::~AnimationLayer()
214 {
215
216 }
217
218
219 // ------------------------------------------------------------------------------------------------
220 AnimationCurveNodeList AnimationLayer::Nodes(const char* const * target_prop_whitelist /*= NULL*/,
221 size_t whitelist_size /*= 0*/) const
222 {
223 AnimationCurveNodeList nodes;
224
225 // resolve attached animation nodes
226 const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID(),"AnimationCurveNode");
227 nodes.reserve(conns.size());
228
229 BOOST_FOREACH(const Connection* con, conns) {
230
231 // link should not go to a property
232 if (con->PropertyName().length()) {
233 continue;
234 }
235
236 const Object* const ob = con->SourceObject();
237 if(!ob) {
238 DOMWarning("failed to read source object for AnimationCurveNode->AnimationLayer link, ignoring",&element);
239 continue;
240 }
241
242 const AnimationCurveNode* const anim = dynamic_cast<const AnimationCurveNode*>(ob);
243 if(!anim) {
244 DOMWarning("source object for ->AnimationLayer link is not an AnimationCurveNode",&element);
245 continue;
246 }
247
248 if(target_prop_whitelist) {
249 const char* s = anim->TargetProperty().c_str();
250 bool ok = false;
251 for (size_t i = 0; i < whitelist_size; ++i) {
252 if (!strcmp(s, target_prop_whitelist[i])) {
253 ok = true;
254 break;
255 }
256 }
257 if(!ok) {
258 continue;
259 }
260 }
261 nodes.push_back(anim);
262 }
263
264 return nodes; // pray for NRVO
265 }
266
267 // ------------------------------------------------------------------------------------------------
268 AnimationStack::AnimationStack(uint64_t id, const Element& element, const std::string& name, const Document& doc)
269 : Object(id, element, name)
270 {
271 const Scope& sc = GetRequiredScope(element);
272
273 // note: we don't currently use any of these properties so we shouldn't bother if it is missing
274 props = GetPropertyTable(doc,"AnimationStack.FbxAnimStack",element,sc, true);
275
276 // resolve attached animation layers
277 const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID(),"AnimationLayer");
278 layers.reserve(conns.size());
279
280 BOOST_FOREACH(const Connection* con, conns) {
281
282 // link should not go to a property
283 if (con->PropertyName().length()) {
284 continue;
285 }
286
287 const Object* const ob = con->SourceObject();
288 if(!ob) {
289 DOMWarning("failed to read source object for AnimationLayer->AnimationStack link, ignoring",&element);
290 continue;
291 }
292
293 const AnimationLayer* const anim = dynamic_cast<const AnimationLayer*>(ob);
294 if(!anim) {
295 DOMWarning("source object for ->AnimationStack link is not an AnimationLayer",&element);
296 continue;
297 }
298 layers.push_back(anim);
299 }
300 }
301
302
303 // ------------------------------------------------------------------------------------------------
304 AnimationStack::~AnimationStack()
305 {
306
307 }
308
309 } //!FBX
310 } //!Assimp
311
312 #endif
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39 /** @file FBXBinaryTokenizer.cpp
40 * @brief Implementation of a fake lexer for binary fbx files -
41 * we emit tokens so the parser needs almost no special handling
42 * for binary files.
43 */
44 #include "AssimpPCH.h"
45
46 #ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
47
48 #include "FBXTokenizer.h"
49 #include "FBXUtil.h"
50
51 namespace Assimp {
52 namespace FBX {
53
54
55 // ------------------------------------------------------------------------------------------------
56 Token::Token(const char* sbegin, const char* send, TokenType type, unsigned int offset)
57 : sbegin(sbegin)
58 , send(send)
59 , type(type)
60 , line(offset)
61 , column(BINARY_MARKER)
62 #ifdef DEBUG
63 , contents(sbegin, static_cast<size_t>(send-sbegin))
64 #endif
65 {
66 ai_assert(sbegin);
67 ai_assert(send);
68
69 // binary tokens may have zero length because they are sometimes dummies
70 // inserted by TokenizeBinary()
71 ai_assert(send >= sbegin);
72 }
73
74
75 namespace {
76
77 // ------------------------------------------------------------------------------------------------
78 // signal tokenization error, this is always unrecoverable. Throws DeadlyImportError.
79 void TokenizeError(const std::string& message, unsigned int offset)
80 {
81 throw DeadlyImportError(Util::AddOffset("FBX-Tokenize",message,offset));
82 }
83
84
85 // ------------------------------------------------------------------------------------------------
86 uint32_t Offset(const char* begin, const char* cursor)
87 {
88 ai_assert(begin <= cursor);
89 return static_cast<unsigned int>(cursor - begin);
90 }
91
92
93 // ------------------------------------------------------------------------------------------------
94 void TokenizeError(const std::string& message, const char* begin, const char* cursor)
95 {
96 TokenizeError(message, Offset(begin, cursor));
97 }
98
99
100 // ------------------------------------------------------------------------------------------------
101 uint32_t ReadWord(const char* input, const char*& cursor, const char* end)
102 {
103 if(Offset(cursor, end) < 4) {
104 TokenizeError("cannot ReadWord, out of bounds",input, cursor);
105 }
106
107 uint32_t word = *reinterpret_cast<const uint32_t*>(cursor);
108 AI_SWAP4(word);
109
110 cursor += 4;
111
112 return word;
113 }
114
115
116 // ------------------------------------------------------------------------------------------------
117 uint8_t ReadByte(const char* input, const char*& cursor, const char* end)
118 {
119 if(Offset(cursor, end) < 1) {
120 TokenizeError("cannot ReadByte, out of bounds",input, cursor);
121 }
122
123 uint8_t word = *reinterpret_cast<const uint8_t*>(cursor);
124 ++cursor;
125
126 return word;
127 }
128
129
130 // ------------------------------------------------------------------------------------------------
131 unsigned int ReadString(const char*& sbegin_out, const char*& send_out, const char* input, const char*& cursor, const char* end,
132 bool long_length = false,
133 bool allow_null = false)
134 {
135 const uint32_t len_len = long_length ? 4 : 1;
136 if(Offset(cursor, end) < len_len) {
137 TokenizeError("cannot ReadString, out of bounds reading length",input, cursor);
138 }
139
140 const uint32_t length = long_length ? ReadWord(input, cursor, end) : ReadByte(input, cursor, end);
141
142 if (Offset(cursor, end) < length) {
143 TokenizeError("cannot ReadString, length is out of bounds",input, cursor);
144 }
145
146 sbegin_out = cursor;
147 cursor += length;
148
149 send_out = cursor;
150
151 if(!allow_null) {
152 for (unsigned int i = 0; i < length; ++i) {
153 if(sbegin_out[i] == '\0') {
154 TokenizeError("failed ReadString, unexpected NUL character in string",input, cursor);
155 }
156 }
157 }
158
159 return length;
160 }
161
162
163
164 // ------------------------------------------------------------------------------------------------
165 void ReadData(const char*& sbegin_out, const char*& send_out, const char* input, const char*& cursor, const char* end)
166 {
167 if(Offset(cursor, end) < 1) {
168 TokenizeError("cannot ReadData, out of bounds reading length",input, cursor);
169 }
170
171 const char type = *cursor;
172 sbegin_out = cursor++;
173
174 switch(type)
175 {
176 // 16 bit int
177 case 'Y':
178 cursor += 2;
179 break;
180
181 // 1 bit bool flag (yes/no)
182 case 'C':
183 cursor += 1;
184 break;
185
186 // 32 bit int
187 case 'I':
188 // <- fall thru
189
190 // float
191 case 'F':
192 cursor += 4;
193 break;
194
195 // double
196 case 'D':
197 cursor += 8;
198 break;
199
200 // 64 bit int
201 case 'L':
202 cursor += 8;
203 break;
204
205 // note: do not write cursor += ReadWord(...cursor) as this would be UB
206
207 // raw binary data
208 case 'R':
209 {
210 const uint32_t length = ReadWord(input, cursor, end);
211 cursor += length;
212 break;
213 }
214
215 case 'b':
216 // TODO: what is the 'b' type code? Right now we just skip over it /
217 // take the full range we could get
218 cursor = end;
219 break;
220
221 // array of *
222 case 'f':
223 case 'd':
224 case 'l':
225 case 'i': {
226
227 const uint32_t length = ReadWord(input, cursor, end);
228 const uint32_t encoding = ReadWord(input, cursor, end);
229
230 const uint32_t comp_len = ReadWord(input, cursor, end);
231
232 // compute length based on type and check against the stored value
233 if(encoding == 0) {
234 uint32_t stride = 0;
235 switch(type)
236 {
237 case 'f':
238 case 'i':
239 stride = 4;
240 break;
241
242 case 'd':
243 case 'l':
244 stride = 8;
245 break;
246
247 default:
248 ai_assert(false);
249 };
250 ai_assert(stride > 0);
251 if(length * stride != comp_len) {
252 TokenizeError("cannot ReadData, calculated data stride differs from what the file claims",input, cursor);
253 }
254 }
255 // zip/deflate algorithm (encoding==1)? take given length. anything else? die
256 else if (encoding != 1) {
257 TokenizeError("cannot ReadData, unknown encoding",input, cursor);
258 }
259 cursor += comp_len;
260 break;
261 }
262
263 // string
264 case 'S': {
265 const char* sb, *se;
266 // 0 characters can legally happen in such strings
267 ReadString(sb, se, input, cursor, end, true, true);
268 break;
269 }
270 default:
271 TokenizeError("cannot ReadData, unexpected type code: " + std::string(&type, 1),input, cursor);
272 }
273
274 if(cursor > end) {
275 TokenizeError("cannot ReadData, the remaining size is too small for the data type: " + std::string(&type, 1),input, cursor);
276 }
277
278 // the type code is contained in the returned range
279 send_out = cursor;
280 }
281
282
283 // ------------------------------------------------------------------------------------------------
284 bool ReadScope(TokenList& output_tokens, const char* input, const char*& cursor, const char* end)
285 {
286 // the first word contains the offset at which this block ends
287 const uint32_t end_offset = ReadWord(input, cursor, end);
288
289 // we may get 0 if reading reached the end of the file -
290 // fbx files have a mysterious extra footer which I don't know
291 // how to extract any information from, but at least it always
292 // starts with a 0.
293 if(!end_offset) {
294 return false;
295 }
296
297 if(end_offset > Offset(input, end)) {
298 TokenizeError("block offset is out of range",input, cursor);
299 }
300 else if(end_offset < Offset(input, cursor)) {
301 TokenizeError("block offset is negative out of range",input, cursor);
302 }
303
304 // the second data word contains the number of properties in the scope
305 const uint32_t prop_count = ReadWord(input, cursor, end);
306
307 // the third data word contains the length of the property list
308 const uint32_t prop_length = ReadWord(input, cursor, end);
309
310 // now comes the name of the scope/key
311 const char* sbeg, *send;
312 ReadString(sbeg, send, input, cursor, end);
313
314 output_tokens.push_back(new_Token(sbeg, send, TokenType_KEY, Offset(input, cursor) ));
315
316 // now come the individual properties
317 const char* begin_cursor = cursor;
318 for (unsigned int i = 0; i < prop_count; ++i) {
319 ReadData(sbeg, send, input, cursor, begin_cursor + prop_length);
320
321 output_tokens.push_back(new_Token(sbeg, send, TokenType_DATA, Offset(input, cursor) ));
322
323 if(i != prop_count-1) {
324 output_tokens.push_back(new_Token(cursor, cursor + 1, TokenType_COMMA, Offset(input, cursor) ));
325 }
326 }
327
328 if (Offset(begin_cursor, cursor) != prop_length) {
329 TokenizeError("property length not reached, something is wrong",input, cursor);
330 }
331
332 // at the end of each nested block, there is a NUL record to indicate
333 // that the sub-scope exists (i.e. to distinguish between P: and P : {})
334 // this NUL record is 13 bytes long.
335 #define BLOCK_SENTINEL_LENGTH 13
336
337 if (Offset(input, cursor) < end_offset) {
338
339 if (end_offset - Offset(input, cursor) < BLOCK_SENTINEL_LENGTH) {
340 TokenizeError("insufficient padding bytes at block end",input, cursor);
341 }
342
343 output_tokens.push_back(new_Token(cursor, cursor + 1, TokenType_OPEN_BRACKET, Offset(input, cursor) ));
344
345 // XXX this is vulnerable to stack overflowing ..
346 while(Offset(input, cursor) < end_offset - BLOCK_SENTINEL_LENGTH) {
347 ReadScope(output_tokens, input, cursor, input + end_offset - BLOCK_SENTINEL_LENGTH);
348 }
349 output_tokens.push_back(new_Token(cursor, cursor + 1, TokenType_CLOSE_BRACKET, Offset(input, cursor) ));
350
351 for (unsigned int i = 0; i < BLOCK_SENTINEL_LENGTH; ++i) {
352 if(cursor[i] != '\0') {
353 TokenizeError("failed to read nested block sentinel, expected all bytes to be 0",input, cursor);
354 }
355 }
356 cursor += BLOCK_SENTINEL_LENGTH;
357 }
358
359 if (Offset(input, cursor) != end_offset) {
360 TokenizeError("scope length not reached, something is wrong",input, cursor);
361 }
362
363 return true;
364 }
365
366
367 }
368
369 // ------------------------------------------------------------------------------------------------
370 void TokenizeBinary(TokenList& output_tokens, const char* input, unsigned int length)
371 {
372 ai_assert(input);
373
374 if(length < 0x1b) {
375 TokenizeError("file is too short",0);
376 }
377
378 if (strncmp(input,"Kaydara FBX Binary",18)) {
379 TokenizeError("magic bytes not found",0);
380 }
381
382
383 //uint32_t offset = 0x1b;
384
385 const char* cursor = input + 0x1b;
386
387 while (cursor < input + length) {
388 if(!ReadScope(output_tokens, input, cursor, input + length)) {
389 break;
390 }
391 }
392 }
393
394 } // !FBX
395 } // !Assimp
396
397 #endif
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXCompileConfig.h
41 * @brief FBX importer compile-time switches
42 */
43 #ifndef INCLUDED_AI_FBX_COMPILECONFIG_H
44 #define INCLUDED_AI_FBX_COMPILECONFIG_H
45
46 //
47 #if _MSC_VER > 1500 || (defined __GNUC___)
48 # define ASSIMP_FBX_USE_UNORDERED_MULTIMAP
49 # else
50 # define fbx_unordered_map map
51 # define fbx_unordered_multimap multimap
52 #endif
53
54 #ifdef ASSIMP_FBX_USE_UNORDERED_MULTIMAP
55 # include <unordered_map>
56 # if _MSC_VER > 1600
57 # define fbx_unordered_map unordered_map
58 # define fbx_unordered_multimap unordered_multimap
59 # else
60 # define fbx_unordered_map tr1::unordered_map
61 # define fbx_unordered_multimap tr1::unordered_multimap
62 # endif
63 #endif
64
65 #endif
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXConverter.cpp
41 * @brief Implementation of the FBX DOM -> aiScene converter
42 */
43 #include "AssimpPCH.h"
44
45 #ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
46
47 #include <iterator>
48 #include <sstream>
49 #include <boost/tuple/tuple.hpp>
50
51 #include "FBXParser.h"
52 #include "FBXConverter.h"
53 #include "FBXDocument.h"
54 #include "FBXUtil.h"
55 #include "FBXProperties.h"
56 #include "FBXImporter.h"
57
58 namespace Assimp {
59 namespace FBX {
60
61 using namespace Util;
62
63
64 #define MAGIC_NODE_TAG "_$AssimpFbx$"
65
66 #define CONVERT_FBX_TIME(time) static_cast<double>(time) / 46186158000L
67
68 // XXX vc9's debugger won't step into anonymous namespaces
69 //namespace {
70
71 /** Dummy class to encapsulate the conversion process */
72 class Converter
73 {
74 public:
75
76 /** the different parts that make up the final local transformation of a fbx node */
77 enum TransformationComp
78 {
79 TransformationComp_Translation = 0,
80 TransformationComp_RotationOffset,
81 TransformationComp_RotationPivot,
82 TransformationComp_PreRotation,
83 TransformationComp_Rotation,
84 TransformationComp_PostRotation,
85 TransformationComp_RotationPivotInverse,
86 TransformationComp_ScalingOffset,
87 TransformationComp_ScalingPivot,
88 TransformationComp_Scaling,
89 TransformationComp_ScalingPivotInverse,
90 TransformationComp_GeometricTranslation,
91 TransformationComp_GeometricRotation,
92 TransformationComp_GeometricScaling,
93
94 TransformationComp_MAXIMUM
95 };
96
97 public:
98
99 Converter(aiScene* out, const Document& doc)
100 : defaultMaterialIndex()
101 , out(out)
102 , doc(doc)
103 {
104 // animations need to be converted first since this will
105 // populate the node_anim_chain_bits map, which is needed
106 // to determine which nodes need to be generated.
107 ConvertAnimations();
108 ConvertRootNode();
109
110 if(doc.Settings().readAllMaterials) {
111 // unfortunately this means we have to evaluate all objects
112 BOOST_FOREACH(const ObjectMap::value_type& v,doc.Objects()) {
113
114 const Object* ob = v.second->Get();
115 if(!ob) {
116 continue;
117 }
118
119 const Material* mat = dynamic_cast<const Material*>(ob);
120 if(mat) {
121
122 if (materials_converted.find(mat) == materials_converted.end()) {
123 ConvertMaterial(*mat, 0);
124 }
125 }
126 }
127 }
128
129 TransferDataToScene();
130
131 // if we didn't read any meshes set the AI_SCENE_FLAGS_INCOMPLETE
132 // to make sure the scene passes assimp's validation. FBX files
133 // need not contain geometry (i.e. camera animations, raw armatures).
134 if (out->mNumMeshes == 0) {
135 out->mFlags |= AI_SCENE_FLAGS_INCOMPLETE;
136 }
137 }
138
139
140 ~Converter()
141 {
142 std::for_each(meshes.begin(),meshes.end(),Util::delete_fun<aiMesh>());
143 std::for_each(materials.begin(),materials.end(),Util::delete_fun<aiMaterial>());
144 std::for_each(animations.begin(),animations.end(),Util::delete_fun<aiAnimation>());
145 std::for_each(lights.begin(),lights.end(),Util::delete_fun<aiLight>());
146 std::for_each(cameras.begin(),cameras.end(),Util::delete_fun<aiCamera>());
147 }
148
149
150 private:
151
152 // ------------------------------------------------------------------------------------------------
153 // find scene root and trigger recursive scene conversion
154 void ConvertRootNode()
155 {
156 out->mRootNode = new aiNode();
157 out->mRootNode->mName.Set("RootNode");
158
159 // root has ID 0
160 ConvertNodes(0L, *out->mRootNode);
161 }
162
163
164 // ------------------------------------------------------------------------------------------------
165 // collect and assign child nodes
166 void ConvertNodes(uint64_t id, aiNode& parent, const aiMatrix4x4& parent_transform = aiMatrix4x4())
167 {
168 const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(id, "Model");
169
170 std::vector<aiNode*> nodes;
171 nodes.reserve(conns.size());
172
173 std::vector<aiNode*> nodes_chain;
174
175 try {
176 BOOST_FOREACH(const Connection* con, conns) {
177
178 // ignore object-property links
179 if(con->PropertyName().length()) {
180 continue;
181 }
182
183 const Object* const object = con->SourceObject();
184 if(!object) {
185 FBXImporter::LogWarn("failed to convert source object for Model link");
186 continue;
187 }
188
189 const Model* const model = dynamic_cast<const Model*>(object);
190
191 if(model) {
192 nodes_chain.clear();
193
194 aiMatrix4x4 new_abs_transform = parent_transform;
195
196 // even though there is only a single input node, the design of
197 // assimp (or rather: the complicated transformation chain that
198 // is employed by fbx) means that we may need multiple aiNode's
199 // to represent a fbx node's transformation.
200 GenerateTransformationNodeChain(*model,nodes_chain);
201
202 ai_assert(nodes_chain.size());
203
204 const std::string& original_name = FixNodeName(model->Name());
205
206 // check if any of the nodes in the chain has the name the fbx node
207 // is supposed to have. If there is none, add another node to
208 // preserve the name - people might have scripts etc. that rely
209 // on specific node names.
210 aiNode* name_carrier = NULL;
211 BOOST_FOREACH(aiNode* prenode, nodes_chain) {
212 if ( !strcmp(prenode->mName.C_Str(), original_name.c_str()) ) {
213 name_carrier = prenode;
214 break;
215 }
216 }
217
218 if(!name_carrier) {
219 nodes_chain.push_back(new aiNode(original_name));
220 name_carrier = nodes_chain.back();
221 }
222
223 //setup metadata on newest node
224 SetupNodeMetadata(*model, *nodes_chain.back());
225
226 // link all nodes in a row
227 aiNode* last_parent = &parent;
228 BOOST_FOREACH(aiNode* prenode, nodes_chain) {
229 ai_assert(prenode);
230
231 if(last_parent != &parent) {
232 last_parent->mNumChildren = 1;
233 last_parent->mChildren = new aiNode*[1];
234 last_parent->mChildren[0] = prenode;
235 }
236
237 prenode->mParent = last_parent;
238 last_parent = prenode;
239
240 new_abs_transform *= prenode->mTransformation;
241 }
242
243 // attach geometry
244 ConvertModel(*model, *nodes_chain.back(), new_abs_transform);
245
246 // attach sub-nodes
247 ConvertNodes(model->ID(), *nodes_chain.back(), new_abs_transform);
248
249 if(doc.Settings().readLights) {
250 ConvertLights(*model);
251 }
252
253 if(doc.Settings().readCameras) {
254 ConvertCameras(*model);
255 }
256
257 nodes.push_back(nodes_chain.front());
258 nodes_chain.clear();
259 }
260 }
261
262 if(nodes.size()) {
263 parent.mChildren = new aiNode*[nodes.size()]();
264 parent.mNumChildren = static_cast<unsigned int>(nodes.size());
265
266 std::swap_ranges(nodes.begin(),nodes.end(),parent.mChildren);
267 }
268 }
269 catch(std::exception&) {
270 Util::delete_fun<aiNode> deleter;
271 std::for_each(nodes.begin(),nodes.end(),deleter);
272 std::for_each(nodes_chain.begin(),nodes_chain.end(),deleter);
273 }
274 }
275
276
277 // ------------------------------------------------------------------------------------------------
278 void ConvertLights(const Model& model)
279 {
280 const std::vector<const NodeAttribute*>& node_attrs = model.GetAttributes();
281 BOOST_FOREACH(const NodeAttribute* attr, node_attrs) {
282 const Light* const light = dynamic_cast<const Light*>(attr);
283 if(light) {
284 ConvertLight(model, *light);
285 }
286 }
287 }
288
289
290 // ------------------------------------------------------------------------------------------------
291 void ConvertCameras(const Model& model)
292 {
293 const std::vector<const NodeAttribute*>& node_attrs = model.GetAttributes();
294 BOOST_FOREACH(const NodeAttribute* attr, node_attrs) {
295 const Camera* const cam = dynamic_cast<const Camera*>(attr);
296 if(cam) {
297 ConvertCamera(model, *cam);
298 }
299 }
300 }
301
302
303 // ------------------------------------------------------------------------------------------------
304 void ConvertLight(const Model& model, const Light& light)
305 {
306 lights.push_back(new aiLight());
307 aiLight* const out_light = lights.back();
308
309 out_light->mName.Set(FixNodeName(model.Name()));
310
311 const float intensity = light.Intensity();
312 const aiVector3D& col = light.Color();
313
314 out_light->mColorDiffuse = aiColor3D(col.x,col.y,col.z);
315 out_light->mColorDiffuse.r *= intensity;
316 out_light->mColorDiffuse.g *= intensity;
317 out_light->mColorDiffuse.b *= intensity;
318
319 out_light->mColorSpecular = out_light->mColorDiffuse;
320
321 switch(light.LightType())
322 {
323 case Light::Type_Point:
324 out_light->mType = aiLightSource_POINT;
325 break;
326
327 case Light::Type_Directional:
328 out_light->mType = aiLightSource_DIRECTIONAL;
329 break;
330
331 case Light::Type_Spot:
332 out_light->mType = aiLightSource_SPOT;
333 out_light->mAngleOuterCone = AI_DEG_TO_RAD(light.OuterAngle());
334 out_light->mAngleInnerCone = AI_DEG_TO_RAD(light.InnerAngle());
335 break;
336
337 case Light::Type_Area:
338 FBXImporter::LogWarn("cannot represent area light, set to UNDEFINED");
339 out_light->mType = aiLightSource_UNDEFINED;
340 break;
341
342 case Light::Type_Volume:
343 FBXImporter::LogWarn("cannot represent volume light, set to UNDEFINED");
344 out_light->mType = aiLightSource_UNDEFINED;
345 break;
346 default:
347 ai_assert(false);
348 }
349
350 // XXX: how to best convert the near and far decay ranges?
351 switch(light.DecayType())
352 {
353 case Light::Decay_None:
354 out_light->mAttenuationConstant = 1.0f;
355 break;
356 case Light::Decay_Linear:
357 out_light->mAttenuationLinear = 1.0f;
358 break;
359 case Light::Decay_Quadratic:
360 out_light->mAttenuationQuadratic = 1.0f;
361 break;
362 case Light::Decay_Cubic:
363 FBXImporter::LogWarn("cannot represent cubic attenuation, set to Quadratic");
364 out_light->mAttenuationQuadratic = 1.0f;
365 break;
366 default:
367 ai_assert(false);
368 }
369 }
370
371
372 // ------------------------------------------------------------------------------------------------
373 void ConvertCamera(const Model& model, const Camera& cam)
374 {
375 cameras.push_back(new aiCamera());
376 aiCamera* const out_camera = cameras.back();
377
378 out_camera->mName.Set(FixNodeName(model.Name()));
379
380 out_camera->mAspect = cam.AspectWidth() / cam.AspectHeight();
381 out_camera->mPosition = cam.Position();
382 out_camera->mLookAt = cam.InterestPosition() - out_camera->mPosition;
383
384 // BUG HERE cam.FieldOfView() returns 1.0f every time. 1.0f is default value.
385 out_camera->mHorizontalFOV = AI_DEG_TO_RAD(cam.FieldOfView());
386 }
387
388
389 // ------------------------------------------------------------------------------------------------
390 // this returns unified names usable within assimp identifiers (i.e. no space characters -
391 // while these would be allowed, they are a potential trouble spot so better not use them).
392 const char* NameTransformationComp(TransformationComp comp)
393 {
394 switch(comp)
395 {
396 case TransformationComp_Translation:
397 return "Translation";
398 case TransformationComp_RotationOffset:
399 return "RotationOffset";
400 case TransformationComp_RotationPivot:
401 return "RotationPivot";
402 case TransformationComp_PreRotation:
403 return "PreRotation";
404 case TransformationComp_Rotation:
405 return "Rotation";
406 case TransformationComp_PostRotation:
407 return "PostRotation";
408 case TransformationComp_RotationPivotInverse:
409 return "RotationPivotInverse";
410 case TransformationComp_ScalingOffset:
411 return "ScalingOffset";
412 case TransformationComp_ScalingPivot:
413 return "ScalingPivot";
414 case TransformationComp_Scaling:
415 return "Scaling";
416 case TransformationComp_ScalingPivotInverse:
417 return "ScalingPivotInverse";
418 case TransformationComp_GeometricScaling:
419 return "GeometricScaling";
420 case TransformationComp_GeometricRotation:
421 return "GeometricRotation";
422 case TransformationComp_GeometricTranslation:
423 return "GeometricTranslation";
424 case TransformationComp_MAXIMUM: // this is to silence compiler warnings
425 break;
426 }
427
428 ai_assert(false);
429 return NULL;
430 }
431
432
433 // ------------------------------------------------------------------------------------------------
434 // note: this returns the REAL fbx property names
435 const char* NameTransformationCompProperty(TransformationComp comp)
436 {
437 switch(comp)
438 {
439 case TransformationComp_Translation:
440 return "Lcl Translation";
441 case TransformationComp_RotationOffset:
442 return "RotationOffset";
443 case TransformationComp_RotationPivot:
444 return "RotationPivot";
445 case TransformationComp_PreRotation:
446 return "PreRotation";
447 case TransformationComp_Rotation:
448 return "Lcl Rotation";
449 case TransformationComp_PostRotation:
450 return "PostRotation";
451 case TransformationComp_RotationPivotInverse:
452 return "RotationPivotInverse";
453 case TransformationComp_ScalingOffset:
454 return "ScalingOffset";
455 case TransformationComp_ScalingPivot:
456 return "ScalingPivot";
457 case TransformationComp_Scaling:
458 return "Lcl Scaling";
459 case TransformationComp_ScalingPivotInverse:
460 return "ScalingPivotInverse";
461 case TransformationComp_GeometricScaling:
462 return "GeometricScaling";
463 case TransformationComp_GeometricRotation:
464 return "GeometricRotation";
465 case TransformationComp_GeometricTranslation:
466 return "GeometricTranslation";
467 case TransformationComp_MAXIMUM: // this is to silence compiler warnings
468 break;
469 }
470
471 ai_assert(false);
472 return NULL;
473 }
474
475
476 // ------------------------------------------------------------------------------------------------
477 aiVector3D TransformationCompDefaultValue(TransformationComp comp)
478 {
479 // XXX a neat way to solve the never-ending special cases for scaling
480 // would be to do everything in log space!
481 return comp == TransformationComp_Scaling ? aiVector3D(1.f,1.f,1.f) : aiVector3D();
482 }
483
484
485 // ------------------------------------------------------------------------------------------------
486 void GetRotationMatrix(Model::RotOrder mode, const aiVector3D& rotation, aiMatrix4x4& out)
487 {
488 if(mode == Model::RotOrder_SphericXYZ) {
489 FBXImporter::LogError("Unsupported RotationMode: SphericXYZ");
490 out = aiMatrix4x4();
491 return;
492 }
493
494 const float angle_epsilon = 1e-6f;
495
496 out = aiMatrix4x4();
497
498 bool is_id[3] = { true, true, true };
499
500 aiMatrix4x4 temp[3];
501 if(fabs(rotation.z) > angle_epsilon) {
502 aiMatrix4x4::RotationZ(AI_DEG_TO_RAD(rotation.z),temp[2]);
503 is_id[2] = false;
504 }
505 if(fabs(rotation.y) > angle_epsilon) {
506 aiMatrix4x4::RotationY(AI_DEG_TO_RAD(rotation.y),temp[1]);
507 is_id[1] = false;
508 }
509 if(fabs(rotation.x) > angle_epsilon) {
510 aiMatrix4x4::RotationX(AI_DEG_TO_RAD(rotation.x),temp[0]);
511 is_id[0] = false;
512 }
513
514 int order[3] = {-1, -1, -1};
515
516 // note: rotation order is inverted since we're left multiplying as is usual in assimp
517 switch(mode)
518 {
519 case Model::RotOrder_EulerXYZ:
520 order[0] = 2;
521 order[1] = 1;
522 order[2] = 0;
523 break;
524
525 case Model::RotOrder_EulerXZY:
526 order[0] = 1;
527 order[1] = 2;
528 order[2] = 0;
529 break;
530
531 case Model::RotOrder_EulerYZX:
532 order[0] = 0;
533 order[1] = 2;
534 order[2] = 1;
535 break;
536
537 case Model::RotOrder_EulerYXZ:
538 order[0] = 2;
539 order[1] = 0;
540 order[2] = 1;
541 break;
542
543 case Model::RotOrder_EulerZXY:
544 order[0] = 1;
545 order[1] = 0;
546 order[2] = 2;
547 break;
548
549 case Model::RotOrder_EulerZYX:
550 order[0] = 0;
551 order[1] = 1;
552 order[2] = 2;
553 break;
554
555 default:
556 ai_assert(false);
557 }
558
559 ai_assert((order[0] >= 0) && (order[0] <= 2));
560 ai_assert((order[1] >= 0) && (order[1] <= 2));
561 ai_assert((order[2] >= 0) && (order[2] <= 2));
562
563 if(!is_id[order[0]]) {
564 out = temp[order[0]];
565 }
566
567 if(!is_id[order[1]]) {
568 out = out * temp[order[1]];
569 }
570
571 if(!is_id[order[2]]) {
572 out = out * temp[order[2]];
573 }
574 }
575
576
577 // ------------------------------------------------------------------------------------------------
578 /** checks if a node has more than just scaling, rotation and translation components */
579 bool NeedsComplexTransformationChain(const Model& model)
580 {
581 const PropertyTable& props = model.Props();
582 bool ok;
583
584 const float zero_epsilon = 1e-6f;
585 for (size_t i = 0; i < TransformationComp_MAXIMUM; ++i) {
586 const TransformationComp comp = static_cast<TransformationComp>(i);
587
588 if( comp == TransformationComp_Rotation || comp == TransformationComp_Scaling || comp == TransformationComp_Translation ||
589 comp == TransformationComp_GeometricScaling || comp == TransformationComp_GeometricRotation || comp == TransformationComp_GeometricTranslation ) {
590 continue;
591 }
592
593 const aiVector3D& v = PropertyGet<aiVector3D>(props,NameTransformationCompProperty(comp),ok);
594 if(ok && v.SquareLength() > zero_epsilon) {
595 return true;
596 }
597 }
598
599 return false;
600 }
601
602
603 // ------------------------------------------------------------------------------------------------
604 // note: name must be a FixNodeName() result
605 std::string NameTransformationChainNode(const std::string& name, TransformationComp comp)
606 {
607 return name + std::string(MAGIC_NODE_TAG) + "_" + NameTransformationComp(comp);
608 }
609
610
611 // ------------------------------------------------------------------------------------------------
612 /** note: memory for output_nodes will be managed by the caller */
613 void GenerateTransformationNodeChain(const Model& model,
614 std::vector<aiNode*>& output_nodes)
615 {
616 const PropertyTable& props = model.Props();
617 const Model::RotOrder rot = model.RotationOrder();
618
619 bool ok;
620
621 aiMatrix4x4 chain[TransformationComp_MAXIMUM];
622 std::fill_n(chain, static_cast<unsigned int>(TransformationComp_MAXIMUM), aiMatrix4x4());
623
624 // generate transformation matrices for all the different transformation components
625 const float zero_epsilon = 1e-6f;
626 bool is_complex = false;
627
628 const aiVector3D& PreRotation = PropertyGet<aiVector3D>(props,"PreRotation",ok);
629 if(ok && PreRotation.SquareLength() > zero_epsilon) {
630 is_complex = true;
631
632 GetRotationMatrix(rot, PreRotation, chain[TransformationComp_PreRotation]);
633 }
634
635 const aiVector3D& PostRotation = PropertyGet<aiVector3D>(props,"PostRotation",ok);
636 if(ok && PostRotation.SquareLength() > zero_epsilon) {
637 is_complex = true;
638
639 GetRotationMatrix(rot, PostRotation, chain[TransformationComp_PostRotation]);
640 }
641
642 const aiVector3D& RotationPivot = PropertyGet<aiVector3D>(props,"RotationPivot",ok);
643 if(ok && RotationPivot.SquareLength() > zero_epsilon) {
644 is_complex = true;
645
646 aiMatrix4x4::Translation(RotationPivot,chain[TransformationComp_RotationPivot]);
647 aiMatrix4x4::Translation(-RotationPivot,chain[TransformationComp_RotationPivotInverse]);
648 }
649
650 const aiVector3D& RotationOffset = PropertyGet<aiVector3D>(props,"RotationOffset",ok);
651 if(ok && RotationOffset.SquareLength() > zero_epsilon) {
652 is_complex = true;
653
654 aiMatrix4x4::Translation(RotationOffset,chain[TransformationComp_RotationOffset]);
655 }
656
657 const aiVector3D& ScalingOffset = PropertyGet<aiVector3D>(props,"ScalingOffset",ok);
658 if(ok && ScalingOffset.SquareLength() > zero_epsilon) {
659 is_complex = true;
660
661 aiMatrix4x4::Translation(ScalingOffset,chain[TransformationComp_ScalingOffset]);
662 }
663
664 const aiVector3D& ScalingPivot = PropertyGet<aiVector3D>(props,"ScalingPivot",ok);
665 if(ok && ScalingPivot.SquareLength() > zero_epsilon) {
666 is_complex = true;
667
668 aiMatrix4x4::Translation(ScalingPivot,chain[TransformationComp_ScalingPivot]);
669 aiMatrix4x4::Translation(-ScalingPivot,chain[TransformationComp_ScalingPivotInverse]);
670 }
671
672 const aiVector3D& Translation = PropertyGet<aiVector3D>(props,"Lcl Translation",ok);
673 if(ok && Translation.SquareLength() > zero_epsilon) {
674 aiMatrix4x4::Translation(Translation,chain[TransformationComp_Translation]);
675 }
676
677 const aiVector3D& Scaling = PropertyGet<aiVector3D>(props,"Lcl Scaling",ok);
678 if(ok && fabs(Scaling.SquareLength()-1.0f) > zero_epsilon) {
679 aiMatrix4x4::Scaling(Scaling,chain[TransformationComp_Scaling]);
680 }
681
682 const aiVector3D& Rotation = PropertyGet<aiVector3D>(props,"Lcl Rotation",ok);
683 if(ok && Rotation.SquareLength() > zero_epsilon) {
684 GetRotationMatrix(rot, Rotation, chain[TransformationComp_Rotation]);
685 }
686
687 const aiVector3D& GeometricScaling = PropertyGet<aiVector3D>(props, "GeometricScaling", ok);
688 if (ok && fabs(GeometricScaling.SquareLength() - 1.0f) > zero_epsilon) {
689 aiMatrix4x4::Scaling(GeometricScaling, chain[TransformationComp_GeometricScaling]);
690 }
691
692 const aiVector3D& GeometricRotation = PropertyGet<aiVector3D>(props, "GeometricRotation", ok);
693 if (ok && GeometricRotation.SquareLength() > zero_epsilon) {
694 GetRotationMatrix(rot, GeometricRotation, chain[TransformationComp_GeometricRotation]);
695 }
696
697 const aiVector3D& GeometricTranslation = PropertyGet<aiVector3D>(props, "GeometricTranslation", ok);
698 if (ok && GeometricTranslation.SquareLength() > zero_epsilon){
699 aiMatrix4x4::Translation(GeometricTranslation, chain[TransformationComp_GeometricTranslation]);
700 }
701
702 // is_complex needs to be consistent with NeedsComplexTransformationChain()
703 // or the interplay between this code and the animation converter would
704 // not be guaranteed.
705 ai_assert(NeedsComplexTransformationChain(model) == is_complex);
706
707 const std::string& name = FixNodeName(model.Name());
708
709 // now, if we have more than just Translation, Scaling and Rotation,
710 // we need to generate a full node chain to accommodate for assimp's
711 // lack to express pivots and offsets.
712 if(is_complex && doc.Settings().preservePivots) {
713 FBXImporter::LogInfo("generating full transformation chain for node: " + name);
714
715 // query the anim_chain_bits dictionary to find out which chain elements
716 // have associated node animation channels. These can not be dropped
717 // even if they have identity transform in bind pose.
718 NodeAnimBitMap::const_iterator it = node_anim_chain_bits.find(name);
719 const unsigned int anim_chain_bitmask = (it == node_anim_chain_bits.end() ? 0 : (*it).second);
720
721 unsigned int bit = 0x1;
722 for (size_t i = 0; i < TransformationComp_MAXIMUM; ++i, bit <<= 1) {
723 const TransformationComp comp = static_cast<TransformationComp>(i);
724
725 if (chain[i].IsIdentity() && (anim_chain_bitmask & bit) == 0) {
726 continue;
727 }
728
729 aiNode* nd = new aiNode();
730 output_nodes.push_back(nd);
731
732 nd->mName.Set(NameTransformationChainNode(name, comp));
733 nd->mTransformation = chain[i];
734 }
735
736 ai_assert(output_nodes.size());
737 return;
738 }
739
740 // else, we can just multiply the matrices together
741 aiNode* nd = new aiNode();
742 output_nodes.push_back(nd);
743
744 nd->mName.Set(name);
745
746 for (size_t i = 0; i < TransformationComp_MAXIMUM; ++i) {
747 nd->mTransformation = nd->mTransformation * chain[i];
748 }
749 }
750
751 // ------------------------------------------------------------------------------------------------
752
753 void SetupNodeMetadata(const Model& model, aiNode& nd)
754 {
755 const PropertyTable& props = model.Props();
756 DirectPropertyMap unparsedProperties = props.GetUnparsedProperties();
757
758 // create metadata on node
759 std::size_t numStaticMetaData = 2;
760 aiMetadata* data = new aiMetadata();
761 data->mNumProperties = unparsedProperties.size() + numStaticMetaData;
762 data->mKeys = new aiString[data->mNumProperties]();
763 data->mValues = new aiMetadataEntry[data->mNumProperties]();
764 nd.mMetaData = data;
765 int index = 0;
766
767 // find user defined properties (3ds Max)
768 data->Set(index++, "UserProperties", aiString(PropertyGet<std::string>(props, "UDP3DSMAX", "")));
769 unparsedProperties.erase("UDP3DSMAX");
770 // preserve the info that a node was marked as Null node in the original file.
771 data->Set(index++, "IsNull", model.IsNull() ? true : false);
772
773 // add unparsed properties to the node's metadata
774 BOOST_FOREACH(const DirectPropertyMap::value_type& prop, unparsedProperties) {
775
776 // Interpret the property as a concrete type
777 if (const TypedProperty<bool>* interpreted = prop.second->As<TypedProperty<bool> >())
778 data->Set(index++, prop.first, interpreted->Value());
779 else if (const TypedProperty<int>* interpreted = prop.second->As<TypedProperty<int> >())
780 data->Set(index++, prop.first, interpreted->Value());
781 else if (const TypedProperty<uint64_t>* interpreted = prop.second->As<TypedProperty<uint64_t> >())
782 data->Set(index++, prop.first, interpreted->Value());
783 else if (const TypedProperty<float>* interpreted = prop.second->As<TypedProperty<float> >())
784 data->Set(index++, prop.first, interpreted->Value());
785 else if (const TypedProperty<std::string>* interpreted = prop.second->As<TypedProperty<std::string> >())
786 data->Set(index++, prop.first, aiString(interpreted->Value()));
787 else if (const TypedProperty<aiVector3D>* interpreted = prop.second->As<TypedProperty<aiVector3D> >())
788 data->Set(index++, prop.first, interpreted->Value());
789 else
790 assert(false);
791 }
792 }
793
794 // ------------------------------------------------------------------------------------------------
795 void ConvertModel(const Model& model, aiNode& nd, const aiMatrix4x4& node_global_transform)
796 {
797 const std::vector<const Geometry*>& geos = model.GetGeometry();
798
799 std::vector<unsigned int> meshes;
800 meshes.reserve(geos.size());
801
802 BOOST_FOREACH(const Geometry* geo, geos) {
803
804 const MeshGeometry* const mesh = dynamic_cast<const MeshGeometry*>(geo);
805 if(mesh) {
806 const std::vector<unsigned int>& indices = ConvertMesh(*mesh, model, node_global_transform);
807 std::copy(indices.begin(),indices.end(),std::back_inserter(meshes) );
808 }
809 else {
810 FBXImporter::LogWarn("ignoring unrecognized geometry: " + geo->Name());
811 }
812 }
813
814 if(meshes.size()) {
815 nd.mMeshes = new unsigned int[meshes.size()]();
816 nd.mNumMeshes = static_cast<unsigned int>(meshes.size());
817
818 std::swap_ranges(meshes.begin(),meshes.end(),nd.mMeshes);
819 }
820 }
821
822
823 // ------------------------------------------------------------------------------------------------
824 // MeshGeometry -> aiMesh, return mesh index + 1 or 0 if the conversion failed
825 std::vector<unsigned int> ConvertMesh(const MeshGeometry& mesh,const Model& model,
826 const aiMatrix4x4& node_global_transform)
827 {
828 std::vector<unsigned int> temp;
829
830 MeshMap::const_iterator it = meshes_converted.find(&mesh);
831 if (it != meshes_converted.end()) {
832 std::copy((*it).second.begin(),(*it).second.end(),std::back_inserter(temp));
833 return temp;
834 }
835
836 const std::vector<aiVector3D>& vertices = mesh.GetVertices();
837 const std::vector<unsigned int>& faces = mesh.GetFaceIndexCounts();
838 if(vertices.empty() || faces.empty()) {
839 FBXImporter::LogWarn("ignoring empty geometry: " + mesh.Name());
840 return temp;
841 }
842
843 // one material per mesh maps easily to aiMesh. Multiple material
844 // meshes need to be split.
845 const MatIndexArray& mindices = mesh.GetMaterialIndices();
846 if (doc.Settings().readMaterials && !mindices.empty()) {
847 const MatIndexArray::value_type base = mindices[0];
848 BOOST_FOREACH(MatIndexArray::value_type index, mindices) {
849 if(index != base) {
850 return ConvertMeshMultiMaterial(mesh, model, node_global_transform);
851 }
852 }
853 }
854
855 // faster codepath, just copy the data
856 temp.push_back(ConvertMeshSingleMaterial(mesh, model, node_global_transform));
857 return temp;
858 }
859
860
861 // ------------------------------------------------------------------------------------------------
862 aiMesh* SetupEmptyMesh(const MeshGeometry& mesh)
863 {
864 aiMesh* const out_mesh = new aiMesh();
865 meshes.push_back(out_mesh);
866 meshes_converted[&mesh].push_back(static_cast<unsigned int>(meshes.size()-1));
867
868 // set name
869 std::string name = mesh.Name();
870 if (name.substr(0,10) == "Geometry::") {
871 name = name.substr(10);
872 }
873
874 if(name.length()) {
875 out_mesh->mName.Set(name);
876 }
877
878 return out_mesh;
879 }
880
881
882 // ------------------------------------------------------------------------------------------------
883 unsigned int ConvertMeshSingleMaterial(const MeshGeometry& mesh, const Model& model,
884 const aiMatrix4x4& node_global_transform)
885 {
886 const MatIndexArray& mindices = mesh.GetMaterialIndices();
887 aiMesh* const out_mesh = SetupEmptyMesh(mesh);
888
889 const std::vector<aiVector3D>& vertices = mesh.GetVertices();
890 const std::vector<unsigned int>& faces = mesh.GetFaceIndexCounts();
891
892 // copy vertices
893 out_mesh->mNumVertices = static_cast<unsigned int>(vertices.size());
894 out_mesh->mVertices = new aiVector3D[vertices.size()];
895 std::copy(vertices.begin(),vertices.end(),out_mesh->mVertices);
896
897 // generate dummy faces
898 out_mesh->mNumFaces = static_cast<unsigned int>(faces.size());
899 aiFace* fac = out_mesh->mFaces = new aiFace[faces.size()]();
900
901 unsigned int cursor = 0;
902 BOOST_FOREACH(unsigned int pcount, faces) {
903 aiFace& f = *fac++;
904 f.mNumIndices = pcount;
905 f.mIndices = new unsigned int[pcount];
906 switch(pcount)
907 {
908 case 1:
909 out_mesh->mPrimitiveTypes |= aiPrimitiveType_POINT;
910 break;
911 case 2:
912 out_mesh->mPrimitiveTypes |= aiPrimitiveType_LINE;
913 break;
914 case 3:
915 out_mesh->mPrimitiveTypes |= aiPrimitiveType_TRIANGLE;
916 break;
917 default:
918 out_mesh->mPrimitiveTypes |= aiPrimitiveType_POLYGON;
919 break;
920 }
921 for (unsigned int i = 0; i < pcount; ++i) {
922 f.mIndices[i] = cursor++;
923 }
924 }
925
926 // copy normals
927 const std::vector<aiVector3D>& normals = mesh.GetNormals();
928 if(normals.size()) {
929 ai_assert(normals.size() == vertices.size());
930
931 out_mesh->mNormals = new aiVector3D[vertices.size()];
932 std::copy(normals.begin(),normals.end(),out_mesh->mNormals);
933 }
934
935 // copy tangents - assimp requires both tangents and bitangents (binormals)
936 // to be present, or neither of them. Compute binormals from normals
937 // and tangents if needed.
938 const std::vector<aiVector3D>& tangents = mesh.GetTangents();
939 const std::vector<aiVector3D>* binormals = &mesh.GetBinormals();
940
941 if(tangents.size()) {
942 std::vector<aiVector3D> tempBinormals;
943 if (!binormals->size()) {
944 if (normals.size()) {
945 tempBinormals.resize(normals.size());
946 for (unsigned int i = 0; i < tangents.size(); ++i) {
947 tempBinormals[i] = normals[i] ^ tangents[i];
948 }
949
950 binormals = &tempBinormals;
951 }
952 else {
953 binormals = NULL;
954 }
955 }
956
957 if(binormals) {
958 ai_assert(tangents.size() == vertices.size() && binormals->size() == vertices.size());
959
960 out_mesh->mTangents = new aiVector3D[vertices.size()];
961 std::copy(tangents.begin(),tangents.end(),out_mesh->mTangents);
962
963 out_mesh->mBitangents = new aiVector3D[vertices.size()];
964 std::copy(binormals->begin(),binormals->end(),out_mesh->mBitangents);
965 }
966 }
967
968 // copy texture coords
969 for (unsigned int i = 0; i < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++i) {
970 const std::vector<aiVector2D>& uvs = mesh.GetTextureCoords(i);
971 if(uvs.empty()) {
972 break;
973 }
974
975 aiVector3D* out_uv = out_mesh->mTextureCoords[i] = new aiVector3D[vertices.size()];
976 BOOST_FOREACH(const aiVector2D& v, uvs) {
977 *out_uv++ = aiVector3D(v.x,v.y,0.0f);
978 }
979
980 out_mesh->mNumUVComponents[i] = 2;
981 }
982
983 // copy vertex colors
984 for (unsigned int i = 0; i < AI_MAX_NUMBER_OF_COLOR_SETS; ++i) {
985 const std::vector<aiColor4D>& colors = mesh.GetVertexColors(i);
986 if(colors.empty()) {
987 break;
988 }
989
990 out_mesh->mColors[i] = new aiColor4D[vertices.size()];
991 std::copy(colors.begin(),colors.end(),out_mesh->mColors[i]);
992 }
993
994 if(!doc.Settings().readMaterials || mindices.empty()) {
995 FBXImporter::LogError("no material assigned to mesh, setting default material");
996 out_mesh->mMaterialIndex = GetDefaultMaterial();
997 }
998 else {
999 ConvertMaterialForMesh(out_mesh,model,mesh,mindices[0]);
1000 }
1001
1002 if(doc.Settings().readWeights && mesh.DeformerSkin() != NULL) {
1003 ConvertWeights(out_mesh, model, mesh, node_global_transform, NO_MATERIAL_SEPARATION);
1004 }
1005
1006 return static_cast<unsigned int>(meshes.size() - 1);
1007 }
1008
1009
1010 // ------------------------------------------------------------------------------------------------
1011 std::vector<unsigned int> ConvertMeshMultiMaterial(const MeshGeometry& mesh, const Model& model,
1012 const aiMatrix4x4& node_global_transform)
1013 {
1014 const MatIndexArray& mindices = mesh.GetMaterialIndices();
1015 ai_assert(mindices.size());
1016
1017 std::set<MatIndexArray::value_type> had;
1018 std::vector<unsigned int> indices;
1019
1020 BOOST_FOREACH(MatIndexArray::value_type index, mindices) {
1021 if(had.find(index) == had.end()) {
1022
1023 indices.push_back(ConvertMeshMultiMaterial(mesh, model, index, node_global_transform));
1024 had.insert(index);
1025 }
1026 }
1027
1028 return indices;
1029 }
1030
1031
1032 // ------------------------------------------------------------------------------------------------
1033 unsigned int ConvertMeshMultiMaterial(const MeshGeometry& mesh, const Model& model,
1034 MatIndexArray::value_type index,
1035 const aiMatrix4x4& node_global_transform)
1036 {
1037 aiMesh* const out_mesh = SetupEmptyMesh(mesh);
1038
1039 const MatIndexArray& mindices = mesh.GetMaterialIndices();
1040 const std::vector<aiVector3D>& vertices = mesh.GetVertices();
1041 const std::vector<unsigned int>& faces = mesh.GetFaceIndexCounts();
1042
1043 const bool process_weights = doc.Settings().readWeights && mesh.DeformerSkin() != NULL;
1044
1045 unsigned int count_faces = 0;
1046 unsigned int count_vertices = 0;
1047
1048 // count faces
1049 std::vector<unsigned int>::const_iterator itf = faces.begin();
1050 for(MatIndexArray::const_iterator it = mindices.begin(),
1051 end = mindices.end(); it != end; ++it, ++itf)
1052 {
1053 if ((*it) != index) {
1054 continue;
1055 }
1056 ++count_faces;
1057 count_vertices += *itf;
1058 }
1059
1060 ai_assert(count_faces);
1061 ai_assert(count_vertices);
1062
1063 // mapping from output indices to DOM indexing, needed to resolve weights
1064 std::vector<unsigned int> reverseMapping;
1065
1066 if (process_weights) {
1067 reverseMapping.resize(count_vertices);
1068 }
1069
1070 // allocate output data arrays, but don't fill them yet
1071 out_mesh->mNumVertices = count_vertices;
1072 out_mesh->mVertices = new aiVector3D[count_vertices];
1073
1074 out_mesh->mNumFaces = count_faces;
1075 aiFace* fac = out_mesh->mFaces = new aiFace[count_faces]();
1076
1077
1078 // allocate normals
1079 const std::vector<aiVector3D>& normals = mesh.GetNormals();
1080 if(normals.size()) {
1081 ai_assert(normals.size() == vertices.size());
1082 out_mesh->mNormals = new aiVector3D[vertices.size()];
1083 }
1084
1085 // allocate tangents, binormals.
1086 const std::vector<aiVector3D>& tangents = mesh.GetTangents();
1087 const std::vector<aiVector3D>* binormals = &mesh.GetBinormals();
1088
1089 if(tangents.size()) {
1090 std::vector<aiVector3D> tempBinormals;
1091 if (!binormals->size()) {
1092 if (normals.size()) {
1093 // XXX this computes the binormals for the entire mesh, not only
1094 // the part for which we need them.
1095 tempBinormals.resize(normals.size());
1096 for (unsigned int i = 0; i < tangents.size(); ++i) {
1097 tempBinormals[i] = normals[i] ^ tangents[i];
1098 }
1099
1100 binormals = &tempBinormals;
1101 }
1102 else {
1103 binormals = NULL;
1104 }
1105 }
1106
1107 if(binormals) {
1108 ai_assert(tangents.size() == vertices.size() && binormals->size() == vertices.size());
1109
1110 out_mesh->mTangents = new aiVector3D[vertices.size()];
1111 out_mesh->mBitangents = new aiVector3D[vertices.size()];
1112 }
1113 }
1114
1115 // allocate texture coords
1116 unsigned int num_uvs = 0;
1117 for (unsigned int i = 0; i < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++i, ++num_uvs) {
1118 const std::vector<aiVector2D>& uvs = mesh.GetTextureCoords(i);
1119 if(uvs.empty()) {
1120 break;
1121 }
1122
1123 out_mesh->mTextureCoords[i] = new aiVector3D[vertices.size()];
1124 out_mesh->mNumUVComponents[i] = 2;
1125 }
1126
1127 // allocate vertex colors
1128 unsigned int num_vcs = 0;
1129 for (unsigned int i = 0; i < AI_MAX_NUMBER_OF_COLOR_SETS; ++i, ++num_vcs) {
1130 const std::vector<aiColor4D>& colors = mesh.GetVertexColors(i);
1131 if(colors.empty()) {
1132 break;
1133 }
1134
1135 out_mesh->mColors[i] = new aiColor4D[vertices.size()];
1136 }
1137
1138 unsigned int cursor = 0, in_cursor = 0;
1139
1140 itf = faces.begin();
1141 for(MatIndexArray::const_iterator it = mindices.begin(),
1142 end = mindices.end(); it != end; ++it, ++itf)
1143 {
1144 const unsigned int pcount = *itf;
1145 if ((*it) != index) {
1146 in_cursor += pcount;
1147 continue;
1148 }
1149
1150 aiFace& f = *fac++;
1151
1152 f.mNumIndices = pcount;
1153 f.mIndices = new unsigned int[pcount];
1154 switch(pcount)
1155 {
1156 case 1:
1157 out_mesh->mPrimitiveTypes |= aiPrimitiveType_POINT;
1158 break;
1159 case 2:
1160 out_mesh->mPrimitiveTypes |= aiPrimitiveType_LINE;
1161 break;
1162 case 3:
1163 out_mesh->mPrimitiveTypes |= aiPrimitiveType_TRIANGLE;
1164 break;
1165 default:
1166 out_mesh->mPrimitiveTypes |= aiPrimitiveType_POLYGON;
1167 break;
1168 }
1169 for (unsigned int i = 0; i < pcount; ++i, ++cursor, ++in_cursor) {
1170 f.mIndices[i] = cursor;
1171
1172 if(reverseMapping.size()) {
1173 reverseMapping[cursor] = in_cursor;
1174 }
1175
1176 out_mesh->mVertices[cursor] = vertices[in_cursor];
1177
1178 if(out_mesh->mNormals) {
1179 out_mesh->mNormals[cursor] = normals[in_cursor];
1180 }
1181
1182 if(out_mesh->mTangents) {
1183 out_mesh->mTangents[cursor] = tangents[in_cursor];
1184 out_mesh->mBitangents[cursor] = (*binormals)[in_cursor];
1185 }
1186
1187 for (unsigned int i = 0; i < num_uvs; ++i) {
1188 const std::vector<aiVector2D>& uvs = mesh.GetTextureCoords(i);
1189 out_mesh->mTextureCoords[i][cursor] = aiVector3D(uvs[in_cursor].x,uvs[in_cursor].y, 0.0f);
1190 }
1191
1192 for (unsigned int i = 0; i < num_vcs; ++i) {
1193 const std::vector<aiColor4D>& cols = mesh.GetVertexColors(i);
1194 out_mesh->mColors[i][cursor] = cols[in_cursor];
1195 }
1196 }
1197 }
1198
1199 ConvertMaterialForMesh(out_mesh,model,mesh,index);
1200
1201 if(process_weights) {
1202 ConvertWeights(out_mesh, model, mesh, node_global_transform, index, &reverseMapping);
1203 }
1204
1205 return static_cast<unsigned int>(meshes.size() - 1);
1206 }
1207
1208 static const unsigned int NO_MATERIAL_SEPARATION = /* std::numeric_limits<unsigned int>::max() */
1209 static_cast<unsigned int>(-1);
1210
1211
1212 // ------------------------------------------------------------------------------------------------
1213 /** - if materialIndex == NO_MATERIAL_SEPARATION, materials are not taken into
1214 * account when determining which weights to include.
1215 * - outputVertStartIndices is only used when a material index is specified, it gives for
1216 * each output vertex the DOM index it maps to. */
1217 void ConvertWeights(aiMesh* out, const Model& model, const MeshGeometry& geo,
1218 const aiMatrix4x4& node_global_transform = aiMatrix4x4(),
1219 unsigned int materialIndex = NO_MATERIAL_SEPARATION,
1220 std::vector<unsigned int>* outputVertStartIndices = NULL)
1221 {
1222 ai_assert(geo.DeformerSkin());
1223
1224 std::vector<size_t> out_indices;
1225 std::vector<size_t> index_out_indices;
1226 std::vector<size_t> count_out_indices;
1227
1228 const Skin& sk = *geo.DeformerSkin();
1229
1230 std::vector<aiBone*> bones;
1231 bones.reserve(sk.Clusters().size());
1232
1233 const bool no_mat_check = materialIndex == NO_MATERIAL_SEPARATION;
1234 ai_assert(no_mat_check || outputVertStartIndices);
1235
1236 try {
1237
1238 BOOST_FOREACH(const Cluster* cluster, sk.Clusters()) {
1239 ai_assert(cluster);
1240
1241 const WeightIndexArray& indices = cluster->GetIndices();
1242
1243 if(indices.empty()) {
1244 continue;
1245 }
1246
1247 const MatIndexArray& mats = geo.GetMaterialIndices();
1248
1249 bool ok = false;
1250
1251 const size_t no_index_sentinel = std::numeric_limits<size_t>::max();
1252
1253 count_out_indices.clear();
1254 index_out_indices.clear();
1255 out_indices.clear();
1256
1257 // now check if *any* of these weights is contained in the output mesh,
1258 // taking notes so we don't need to do it twice.
1259 BOOST_FOREACH(WeightIndexArray::value_type index, indices) {
1260
1261 unsigned int count;
1262 const unsigned int* const out_idx = geo.ToOutputVertexIndex(index, count);
1263
1264 index_out_indices.push_back(no_index_sentinel);
1265 count_out_indices.push_back(0);
1266
1267 for(unsigned int i = 0; i < count; ++i) {
1268 if (no_mat_check || static_cast<size_t>(mats[geo.FaceForVertexIndex(out_idx[i])]) == materialIndex) {
1269
1270 if (index_out_indices.back() == no_index_sentinel) {
1271 index_out_indices.back() = out_indices.size();
1272
1273 }
1274
1275 if (no_mat_check) {
1276 out_indices.push_back(out_idx[i]);
1277 }
1278 else {
1279 // this extra lookup is in O(logn), so the entire algorithm becomes O(nlogn)
1280 const std::vector<unsigned int>::iterator it = std::lower_bound(
1281 outputVertStartIndices->begin(),
1282 outputVertStartIndices->end(),
1283 out_idx[i]
1284 );
1285
1286 out_indices.push_back(std::distance(outputVertStartIndices->begin(), it));
1287 }
1288
1289 ++count_out_indices.back();
1290 ok = true;
1291 }
1292 }
1293 }
1294
1295 // if we found at least one, generate the output bones
1296 // XXX this could be heavily simplified by collecting the bone
1297 // data in a single step.
1298 if (ok) {
1299 ConvertCluster(bones, model, *cluster, out_indices, index_out_indices,
1300 count_out_indices, node_global_transform);
1301 }
1302 }
1303 }
1304 catch (std::exception&) {
1305 std::for_each(bones.begin(),bones.end(),Util::delete_fun<aiBone>());
1306 throw;
1307 }
1308
1309 if(bones.empty()) {
1310 return;
1311 }
1312
1313 out->mBones = new aiBone*[bones.size()]();
1314 out->mNumBones = static_cast<unsigned int>(bones.size());
1315
1316 std::swap_ranges(bones.begin(),bones.end(),out->mBones);
1317 }
1318
1319
1320
1321 // ------------------------------------------------------------------------------------------------
1322 void ConvertCluster(std::vector<aiBone*>& bones, const Model& model, const Cluster& cl,
1323 std::vector<size_t>& out_indices,
1324 std::vector<size_t>& index_out_indices,
1325 std::vector<size_t>& count_out_indices,
1326 const aiMatrix4x4& node_global_transform)
1327 {
1328
1329 aiBone* const bone = new aiBone();
1330 bones.push_back(bone);
1331
1332 bone->mName = FixNodeName(cl.TargetNode()->Name());
1333
1334 bone->mOffsetMatrix = cl.TransformLink();
1335 bone->mOffsetMatrix.Inverse();
1336
1337 bone->mOffsetMatrix = bone->mOffsetMatrix * node_global_transform;
1338
1339 bone->mNumWeights = static_cast<unsigned int>(out_indices.size());
1340 aiVertexWeight* cursor = bone->mWeights = new aiVertexWeight[out_indices.size()];
1341
1342 const size_t no_index_sentinel = std::numeric_limits<size_t>::max();
1343 const WeightArray& weights = cl.GetWeights();
1344
1345 const size_t c = index_out_indices.size();
1346 for (size_t i = 0; i < c; ++i) {
1347 const size_t index_index = index_out_indices[i];
1348
1349 if (index_index == no_index_sentinel) {
1350 continue;
1351 }
1352
1353 const size_t cc = count_out_indices[i];
1354 for (size_t j = 0; j < cc; ++j) {
1355 aiVertexWeight& out_weight = *cursor++;
1356
1357 out_weight.mVertexId = static_cast<unsigned int>(out_indices[index_index + j]);
1358 out_weight.mWeight = weights[i];
1359 }
1360 }
1361 }
1362
1363
1364 // ------------------------------------------------------------------------------------------------
1365 void ConvertMaterialForMesh(aiMesh* out, const Model& model, const MeshGeometry& geo,
1366 MatIndexArray::value_type materialIndex)
1367 {
1368 // locate source materials for this mesh
1369 const std::vector<const Material*>& mats = model.GetMaterials();
1370 if (static_cast<unsigned int>(materialIndex) >= mats.size() || materialIndex < 0) {
1371 FBXImporter::LogError("material index out of bounds, setting default material");
1372 out->mMaterialIndex = GetDefaultMaterial();
1373 return;
1374 }
1375
1376 const Material* const mat = mats[materialIndex];
1377 MaterialMap::const_iterator it = materials_converted.find(mat);
1378 if (it != materials_converted.end()) {
1379 out->mMaterialIndex = (*it).second;
1380 return;
1381 }
1382
1383 out->mMaterialIndex = ConvertMaterial(*mat, &geo);
1384 materials_converted[mat] = out->mMaterialIndex;
1385 }
1386
1387
1388 // ------------------------------------------------------------------------------------------------
1389 unsigned int GetDefaultMaterial()
1390 {
1391 if (defaultMaterialIndex) {
1392 return defaultMaterialIndex - 1;
1393 }
1394
1395 aiMaterial* out_mat = new aiMaterial();
1396 materials.push_back(out_mat);
1397
1398 const aiColor3D diffuse = aiColor3D(0.8f,0.8f,0.8f);
1399 out_mat->AddProperty(&diffuse,1,AI_MATKEY_COLOR_DIFFUSE);
1400
1401 aiString s;
1402 s.Set(AI_DEFAULT_MATERIAL_NAME);
1403
1404 out_mat->AddProperty(&s,AI_MATKEY_NAME);
1405
1406 defaultMaterialIndex = static_cast<unsigned int>(materials.size());
1407 return defaultMaterialIndex - 1;
1408 }
1409
1410
1411 // ------------------------------------------------------------------------------------------------
1412 // Material -> aiMaterial
1413 unsigned int ConvertMaterial(const Material& material, const MeshGeometry* const mesh)
1414 {
1415 const PropertyTable& props = material.Props();
1416
1417 // generate empty output material
1418 aiMaterial* out_mat = new aiMaterial();
1419 materials_converted[&material] = static_cast<unsigned int>(materials.size());
1420
1421 materials.push_back(out_mat);
1422
1423 aiString str;
1424
1425 // stip Material:: prefix
1426 std::string name = material.Name();
1427 if(name.substr(0,10) == "Material::") {
1428 name = name.substr(10);
1429 }
1430
1431 // set material name if not empty - this could happen
1432 // and there should be no key for it in this case.
1433 if(name.length()) {
1434 str.Set(name);
1435 out_mat->AddProperty(&str,AI_MATKEY_NAME);
1436 }
1437
1438 // shading stuff and colors
1439 SetShadingPropertiesCommon(out_mat,props);
1440
1441 // texture assignments
1442 SetTextureProperties(out_mat,material.Textures(), mesh);
1443 SetTextureProperties(out_mat,material.LayeredTextures(), mesh);
1444
1445 return static_cast<unsigned int>(materials.size() - 1);
1446 }
1447
1448
1449 // ------------------------------------------------------------------------------------------------
1450 void TrySetTextureProperties(aiMaterial* out_mat, const TextureMap& textures,
1451 const std::string& propName,
1452 aiTextureType target, const MeshGeometry* const mesh)
1453 {
1454 TextureMap::const_iterator it = textures.find(propName);
1455 if(it == textures.end()) {
1456 return;
1457 }
1458
1459 const Texture* const tex = (*it).second;
1460 if(tex !=0 )
1461 {
1462 aiString path;
1463 path.Set(tex->RelativeFilename());
1464
1465 out_mat->AddProperty(&path,_AI_MATKEY_TEXTURE_BASE,target,0);
1466
1467 aiUVTransform uvTrafo;
1468 // XXX handle all kinds of UV transformations
1469 uvTrafo.mScaling = tex->UVScaling();
1470 uvTrafo.mTranslation = tex->UVTranslation();
1471 out_mat->AddProperty(&uvTrafo,1,_AI_MATKEY_UVTRANSFORM_BASE,target,0);
1472
1473 const PropertyTable& props = tex->Props();
1474
1475 int uvIndex = 0;
1476
1477 bool ok;
1478 const std::string& uvSet = PropertyGet<std::string>(props,"UVSet",ok);
1479 if(ok) {
1480 // "default" is the name which usually appears in the FbxFileTexture template
1481 if(uvSet != "default" && uvSet.length()) {
1482 // this is a bit awkward - we need to find a mesh that uses this
1483 // material and scan its UV channels for the given UV name because
1484 // assimp references UV channels by index, not by name.
1485
1486 // XXX: the case that UV channels may appear in different orders
1487 // in meshes is unhandled. A possible solution would be to sort
1488 // the UV channels alphabetically, but this would have the side
1489 // effect that the primary (first) UV channel would sometimes
1490 // be moved, causing trouble when users read only the first
1491 // UV channel and ignore UV channel assignments altogether.
1492
1493 const unsigned int matIndex = static_cast<unsigned int>(std::distance(materials.begin(),
1494 std::find(materials.begin(),materials.end(),out_mat)
1495 ));
1496
1497
1498 uvIndex = -1;
1499 if (!mesh)
1500 {
1501 BOOST_FOREACH(const MeshMap::value_type& v,meshes_converted) {
1502 const MeshGeometry* const mesh = dynamic_cast<const MeshGeometry*> (v.first);
1503 if(!mesh) {
1504 continue;
1505 }
1506
1507 const MatIndexArray& mats = mesh->GetMaterialIndices();
1508 if(std::find(mats.begin(),mats.end(),matIndex) == mats.end()) {
1509 continue;
1510 }
1511
1512 int index = -1;
1513 for (unsigned int i = 0; i < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++i) {
1514 if(mesh->GetTextureCoords(i).empty()) {
1515 break;
1516 }
1517 const std::string& name = mesh->GetTextureCoordChannelName(i);
1518 if(name == uvSet) {
1519 index = static_cast<int>(i);
1520 break;
1521 }
1522 }
1523 if(index == -1) {
1524 FBXImporter::LogWarn("did not find UV channel named " + uvSet + " in a mesh using this material");
1525 continue;
1526 }
1527
1528 if(uvIndex == -1) {
1529 uvIndex = index;
1530 }
1531 else {
1532 FBXImporter::LogWarn("the UV channel named " + uvSet +
1533 " appears at different positions in meshes, results will be wrong");
1534 }
1535 }
1536 }
1537 else
1538 {
1539 int index = -1;
1540 for (unsigned int i = 0; i < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++i) {
1541 if(mesh->GetTextureCoords(i).empty()) {
1542 break;
1543 }
1544 const std::string& name = mesh->GetTextureCoordChannelName(i);
1545 if(name == uvSet) {
1546 index = static_cast<int>(i);
1547 break;
1548 }
1549 }
1550 if(index == -1) {
1551 FBXImporter::LogWarn("did not find UV channel named " + uvSet + " in a mesh using this material");
1552 }
1553
1554 if(uvIndex == -1) {
1555 uvIndex = index;
1556 }
1557 }
1558
1559 if(uvIndex == -1) {
1560 FBXImporter::LogWarn("failed to resolve UV channel " + uvSet + ", using first UV channel");
1561 uvIndex = 0;
1562 }
1563 }
1564 }
1565
1566 out_mat->AddProperty(&uvIndex,1,_AI_MATKEY_UVWSRC_BASE,target,0);
1567 }
1568 }
1569
1570 // ------------------------------------------------------------------------------------------------
1571 void TrySetTextureProperties(aiMaterial* out_mat, const LayeredTextureMap& layeredTextures,
1572 const std::string& propName,
1573 aiTextureType target, const MeshGeometry* const mesh)
1574 {
1575 LayeredTextureMap::const_iterator it = layeredTextures.find(propName);
1576 if(it == layeredTextures.end()) {
1577 return;
1578 }
1579
1580 const Texture* const tex = (*it).second->getTexture();
1581
1582 aiString path;
1583 path.Set(tex->RelativeFilename());
1584
1585 out_mat->AddProperty(&path,_AI_MATKEY_TEXTURE_BASE,target,0);
1586
1587 aiUVTransform uvTrafo;
1588 // XXX handle all kinds of UV transformations
1589 uvTrafo.mScaling = tex->UVScaling();
1590 uvTrafo.mTranslation = tex->UVTranslation();
1591 out_mat->AddProperty(&uvTrafo,1,_AI_MATKEY_UVTRANSFORM_BASE,target,0);
1592
1593 const PropertyTable& props = tex->Props();
1594
1595 int uvIndex = 0;
1596
1597 bool ok;
1598 const std::string& uvSet = PropertyGet<std::string>(props,"UVSet",ok);
1599 if(ok) {
1600 // "default" is the name which usually appears in the FbxFileTexture template
1601 if(uvSet != "default" && uvSet.length()) {
1602 // this is a bit awkward - we need to find a mesh that uses this
1603 // material and scan its UV channels for the given UV name because
1604 // assimp references UV channels by index, not by name.
1605
1606 // XXX: the case that UV channels may appear in different orders
1607 // in meshes is unhandled. A possible solution would be to sort
1608 // the UV channels alphabetically, but this would have the side
1609 // effect that the primary (first) UV channel would sometimes
1610 // be moved, causing trouble when users read only the first
1611 // UV channel and ignore UV channel assignments altogether.
1612
1613 const unsigned int matIndex = static_cast<unsigned int>(std::distance(materials.begin(),
1614 std::find(materials.begin(),materials.end(),out_mat)
1615 ));
1616
1617 uvIndex = -1;
1618 if (!mesh)
1619 {
1620 BOOST_FOREACH(const MeshMap::value_type& v,meshes_converted) {
1621 const MeshGeometry* const mesh = dynamic_cast<const MeshGeometry*> (v.first);
1622 if(!mesh) {
1623 continue;
1624 }
1625
1626 const MatIndexArray& mats = mesh->GetMaterialIndices();
1627 if(std::find(mats.begin(),mats.end(),matIndex) == mats.end()) {
1628 continue;
1629 }
1630
1631 int index = -1;
1632 for (unsigned int i = 0; i < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++i) {
1633 if(mesh->GetTextureCoords(i).empty()) {
1634 break;
1635 }
1636 const std::string& name = mesh->GetTextureCoordChannelName(i);
1637 if(name == uvSet) {
1638 index = static_cast<int>(i);
1639 break;
1640 }
1641 }
1642 if(index == -1) {
1643 FBXImporter::LogWarn("did not find UV channel named " + uvSet + " in a mesh using this material");
1644 continue;
1645 }
1646
1647 if(uvIndex == -1) {
1648 uvIndex = index;
1649 }
1650 else {
1651 FBXImporter::LogWarn("the UV channel named " + uvSet +
1652 " appears at different positions in meshes, results will be wrong");
1653 }
1654 }
1655 }
1656 else
1657 {
1658 int index = -1;
1659 for (unsigned int i = 0; i < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++i) {
1660 if(mesh->GetTextureCoords(i).empty()) {
1661 break;
1662 }
1663 const std::string& name = mesh->GetTextureCoordChannelName(i);
1664 if(name == uvSet) {
1665 index = static_cast<int>(i);
1666 break;
1667 }
1668 }
1669 if(index == -1) {
1670 FBXImporter::LogWarn("did not find UV channel named " + uvSet + " in a mesh using this material");
1671 }
1672
1673 if(uvIndex == -1) {
1674 uvIndex = index;
1675 }
1676 }
1677
1678 if(uvIndex == -1) {
1679 FBXImporter::LogWarn("failed to resolve UV channel " + uvSet + ", using first UV channel");
1680 uvIndex = 0;
1681 }
1682 }
1683 }
1684
1685 out_mat->AddProperty(&uvIndex,1,_AI_MATKEY_UVWSRC_BASE,target,0);
1686 }
1687
1688 // ------------------------------------------------------------------------------------------------
1689 void SetTextureProperties(aiMaterial* out_mat, const TextureMap& textures, const MeshGeometry* const mesh)
1690 {
1691 TrySetTextureProperties(out_mat, textures, "DiffuseColor", aiTextureType_DIFFUSE, mesh);
1692 TrySetTextureProperties(out_mat, textures, "AmbientColor", aiTextureType_AMBIENT, mesh);
1693 TrySetTextureProperties(out_mat, textures, "EmissiveColor", aiTextureType_EMISSIVE, mesh);
1694 TrySetTextureProperties(out_mat, textures, "SpecularColor", aiTextureType_SPECULAR, mesh);
1695 TrySetTextureProperties(out_mat, textures, "TransparentColor", aiTextureType_OPACITY, mesh);
1696 TrySetTextureProperties(out_mat, textures, "ReflectionColor", aiTextureType_REFLECTION, mesh);
1697 TrySetTextureProperties(out_mat, textures, "DisplacementColor", aiTextureType_DISPLACEMENT, mesh);
1698 TrySetTextureProperties(out_mat, textures, "NormalMap", aiTextureType_NORMALS, mesh);
1699 TrySetTextureProperties(out_mat, textures, "Bump", aiTextureType_HEIGHT, mesh);
1700 TrySetTextureProperties(out_mat, textures, "ShininessExponent", aiTextureType_SHININESS, mesh);
1701 }
1702
1703 // ------------------------------------------------------------------------------------------------
1704 void SetTextureProperties(aiMaterial* out_mat, const LayeredTextureMap& layeredTextures, const MeshGeometry* const mesh)
1705 {
1706 TrySetTextureProperties(out_mat, layeredTextures, "DiffuseColor", aiTextureType_DIFFUSE, mesh);
1707 TrySetTextureProperties(out_mat, layeredTextures, "AmbientColor", aiTextureType_AMBIENT, mesh);
1708 TrySetTextureProperties(out_mat, layeredTextures, "EmissiveColor", aiTextureType_EMISSIVE, mesh);
1709 TrySetTextureProperties(out_mat, layeredTextures, "SpecularColor", aiTextureType_SPECULAR, mesh);
1710 TrySetTextureProperties(out_mat, layeredTextures, "TransparentColor", aiTextureType_OPACITY, mesh);
1711 TrySetTextureProperties(out_mat, layeredTextures, "ReflectionColor", aiTextureType_REFLECTION, mesh);
1712 TrySetTextureProperties(out_mat, layeredTextures, "DisplacementColor", aiTextureType_DISPLACEMENT, mesh);
1713 TrySetTextureProperties(out_mat, layeredTextures, "NormalMap", aiTextureType_NORMALS, mesh);
1714 TrySetTextureProperties(out_mat, layeredTextures, "Bump", aiTextureType_HEIGHT, mesh);
1715 TrySetTextureProperties(out_mat, layeredTextures, "ShininessExponent", aiTextureType_SHININESS, mesh);
1716 }
1717
1718
1719 // ------------------------------------------------------------------------------------------------
1720 aiColor3D GetColorPropertyFromMaterial(const PropertyTable& props, const std::string& baseName,
1721 bool& result)
1722 {
1723 result = true;
1724
1725 bool ok;
1726 const aiVector3D& Diffuse = PropertyGet<aiVector3D>(props,baseName,ok);
1727 if(ok) {
1728 return aiColor3D(Diffuse.x,Diffuse.y,Diffuse.z);
1729 }
1730 else {
1731 aiVector3D DiffuseColor = PropertyGet<aiVector3D>(props,baseName + "Color",ok);
1732 if(ok) {
1733 float DiffuseFactor = PropertyGet<float>(props,baseName + "Factor",ok);
1734 if(ok) {
1735 DiffuseColor *= DiffuseFactor;
1736 }
1737
1738 return aiColor3D(DiffuseColor.x,DiffuseColor.y,DiffuseColor.z);
1739 }
1740 }
1741 result = false;
1742 return aiColor3D(0.0f,0.0f,0.0f);
1743 }
1744
1745
1746 // ------------------------------------------------------------------------------------------------
1747 void SetShadingPropertiesCommon(aiMaterial* out_mat, const PropertyTable& props)
1748 {
1749 // set shading properties. There are various, redundant ways in which FBX materials
1750 // specify their shading settings (depending on shading models, prop
1751 // template etc.). No idea which one is right in a particular context.
1752 // Just try to make sense of it - there's no spec to verify this against,
1753 // so why should we.
1754 bool ok;
1755 const aiColor3D& Diffuse = GetColorPropertyFromMaterial(props,"Diffuse",ok);
1756 if(ok) {
1757 out_mat->AddProperty(&Diffuse,1,AI_MATKEY_COLOR_DIFFUSE);
1758 }
1759
1760 const aiColor3D& Emissive = GetColorPropertyFromMaterial(props,"Emissive",ok);
1761 if(ok) {
1762 out_mat->AddProperty(&Emissive,1,AI_MATKEY_COLOR_EMISSIVE);
1763 }
1764
1765 const aiColor3D& Ambient = GetColorPropertyFromMaterial(props,"Ambient",ok);
1766 if(ok) {
1767 out_mat->AddProperty(&Ambient,1,AI_MATKEY_COLOR_AMBIENT);
1768 }
1769
1770 const aiColor3D& Specular = GetColorPropertyFromMaterial(props,"Specular",ok);
1771 if(ok) {
1772 out_mat->AddProperty(&Specular,1,AI_MATKEY_COLOR_SPECULAR);
1773 }
1774
1775 const float Opacity = PropertyGet<float>(props,"Opacity",ok);
1776 if(ok) {
1777 out_mat->AddProperty(&Opacity,1,AI_MATKEY_OPACITY);
1778 }
1779
1780 const float Reflectivity = PropertyGet<float>(props,"Reflectivity",ok);
1781 if(ok) {
1782 out_mat->AddProperty(&Reflectivity,1,AI_MATKEY_REFLECTIVITY);
1783 }
1784
1785 const float Shininess = PropertyGet<float>(props,"Shininess",ok);
1786 if(ok) {
1787 out_mat->AddProperty(&Shininess,1,AI_MATKEY_SHININESS_STRENGTH);
1788 }
1789
1790 const float ShininessExponent = PropertyGet<float>(props,"ShininessExponent",ok);
1791 if(ok) {
1792 out_mat->AddProperty(&ShininessExponent,1,AI_MATKEY_SHININESS);
1793 }
1794 }
1795
1796
1797 // ------------------------------------------------------------------------------------------------
1798 // get the number of fps for a FrameRate enumerated value
1799 static double FrameRateToDouble(FileGlobalSettings::FrameRate fp, double customFPSVal = -1.0)
1800 {
1801 switch(fp) {
1802 case FileGlobalSettings::FrameRate_DEFAULT:
1803 return 1.0;
1804
1805 case FileGlobalSettings::FrameRate_120:
1806 return 120.0;
1807
1808 case FileGlobalSettings::FrameRate_100:
1809 return 100.0;
1810
1811 case FileGlobalSettings::FrameRate_60:
1812 return 60.0;
1813
1814 case FileGlobalSettings::FrameRate_50:
1815 return 50.0;
1816
1817 case FileGlobalSettings::FrameRate_48:
1818 return 48.0;
1819
1820 case FileGlobalSettings::FrameRate_30:
1821 case FileGlobalSettings::FrameRate_30_DROP:
1822 return 30.0;
1823
1824 case FileGlobalSettings::FrameRate_NTSC_DROP_FRAME:
1825 case FileGlobalSettings::FrameRate_NTSC_FULL_FRAME:
1826 return 29.9700262;
1827
1828 case FileGlobalSettings::FrameRate_PAL:
1829 return 25.0;
1830
1831 case FileGlobalSettings::FrameRate_CINEMA:
1832 return 24.0;
1833
1834 case FileGlobalSettings::FrameRate_1000:
1835 return 1000.0;
1836
1837 case FileGlobalSettings::FrameRate_CINEMA_ND:
1838 return 23.976;
1839
1840 case FileGlobalSettings::FrameRate_CUSTOM:
1841 return customFPSVal;
1842
1843 case FileGlobalSettings::FrameRate_MAX: // this is to silence compiler warnings
1844 break;
1845 }
1846
1847 ai_assert(false);
1848 return -1.0f;
1849 }
1850
1851
1852 // ------------------------------------------------------------------------------------------------
1853 // convert animation data to aiAnimation et al
1854 void ConvertAnimations()
1855 {
1856 // first of all determine framerate
1857 const FileGlobalSettings::FrameRate fps = doc.GlobalSettings().TimeMode();
1858 const float custom = doc.GlobalSettings().CustomFrameRate();
1859 anim_fps = FrameRateToDouble(fps, custom);
1860
1861 const std::vector<const AnimationStack*>& animations = doc.AnimationStacks();
1862 BOOST_FOREACH(const AnimationStack* stack, animations) {
1863 ConvertAnimationStack(*stack);
1864 }
1865 }
1866
1867
1868 // ------------------------------------------------------------------------------------------------
1869 // rename a node already partially converted. fixed_name is a string previously returned by
1870 // FixNodeName, new_name specifies the string FixNodeName should return on all further invocations
1871 // which would previously have returned the old value.
1872 //
1873 // this also updates names in node animations, cameras and light sources and is thus slow.
1874 //
1875 // NOTE: the caller is responsible for ensuring that the new name is unique and does
1876 // not collide with any other identifiers. The best way to ensure this is to only
1877 // append to the old name, which is guaranteed to match these requirements.
1878 void RenameNode(const std::string& fixed_name, const std::string& new_name)
1879 {
1880 ai_assert(node_names.find(fixed_name) != node_names.end());
1881 ai_assert(node_names.find(new_name) == node_names.end());
1882
1883 renamed_nodes[fixed_name] = new_name;
1884
1885 const aiString fn(fixed_name);
1886
1887 BOOST_FOREACH(aiCamera* cam, cameras) {
1888 if (cam->mName == fn) {
1889 cam->mName.Set(new_name);
1890 break;
1891 }
1892 }
1893
1894 BOOST_FOREACH(aiLight* light, lights) {
1895 if (light->mName == fn) {
1896 light->mName.Set(new_name);
1897 break;
1898 }
1899 }
1900
1901 BOOST_FOREACH(aiAnimation* anim, animations) {
1902 for (unsigned int i = 0; i < anim->mNumChannels; ++i) {
1903 aiNodeAnim* const na = anim->mChannels[i];
1904 if (na->mNodeName == fn) {
1905 na->mNodeName.Set(new_name);
1906 break;
1907 }
1908 }
1909 }
1910 }
1911
1912
1913 // ------------------------------------------------------------------------------------------------
1914 // takes a fbx node name and returns the identifier to be used in the assimp output scene.
1915 // the function is guaranteed to provide consistent results over multiple invocations
1916 // UNLESS RenameNode() is called for a particular node name.
1917 std::string FixNodeName(const std::string& name)
1918 {
1919 // strip Model:: prefix, avoiding ambiguities (i.e. don't strip if
1920 // this causes ambiguities, well possible between empty identifiers,
1921 // such as "Model::" and ""). Make sure the behaviour is consistent
1922 // across multiple calls to FixNodeName().
1923 if(name.substr(0,7) == "Model::") {
1924 std::string temp = name.substr(7);
1925
1926 const NodeNameMap::const_iterator it = node_names.find(temp);
1927 if (it != node_names.end()) {
1928 if (!(*it).second) {
1929 return FixNodeName(name + "_");
1930 }
1931 }
1932 node_names[temp] = true;
1933
1934 const NameNameMap::const_iterator rit = renamed_nodes.find(temp);
1935 return rit == renamed_nodes.end() ? temp : (*rit).second;
1936 }
1937
1938 const NodeNameMap::const_iterator it = node_names.find(name);
1939 if (it != node_names.end()) {
1940 if ((*it).second) {
1941 return FixNodeName(name + "_");
1942 }
1943 }
1944 node_names[name] = false;
1945
1946 const NameNameMap::const_iterator rit = renamed_nodes.find(name);
1947 return rit == renamed_nodes.end() ? name : (*rit).second;
1948 }
1949
1950
1951 typedef std::map<const AnimationCurveNode*, const AnimationLayer*> LayerMap;
1952
1953 // XXX: better use multi_map ..
1954 typedef std::map<std::string, std::vector<const AnimationCurveNode*> > NodeMap;
1955
1956
1957 // ------------------------------------------------------------------------------------------------
1958 void ConvertAnimationStack(const AnimationStack& st)
1959 {
1960 const AnimationLayerList& layers = st.Layers();
1961 if(layers.empty()) {
1962 return;
1963 }
1964
1965 aiAnimation* const anim = new aiAnimation();
1966 animations.push_back(anim);
1967
1968 // strip AnimationStack:: prefix
1969 std::string name = st.Name();
1970 if(name.substr(0,16) == "AnimationStack::") {
1971 name = name.substr(16);
1972 }
1973
1974 anim->mName.Set(name);
1975
1976 // need to find all nodes for which we need to generate node animations -
1977 // it may happen that we need to merge multiple layers, though.
1978 NodeMap node_map;
1979
1980 // reverse mapping from curves to layers, much faster than querying
1981 // the FBX DOM for it.
1982 LayerMap layer_map;
1983
1984 const char* prop_whitelist[] = {
1985 "Lcl Scaling",
1986 "Lcl Rotation",
1987 "Lcl Translation"
1988 };
1989
1990 BOOST_FOREACH(const AnimationLayer* layer, layers) {
1991 ai_assert(layer);
1992
1993 const AnimationCurveNodeList& nodes = layer->Nodes(prop_whitelist, 3);
1994 BOOST_FOREACH(const AnimationCurveNode* node, nodes) {
1995 ai_assert(node);
1996
1997 const Model* const model = dynamic_cast<const Model*>(node->Target());
1998 // this can happen - it could also be a NodeAttribute (i.e. for camera animations)
1999 if(!model) {
2000 continue;
2001 }
2002
2003 const std::string& name = FixNodeName(model->Name());
2004 node_map[name].push_back(node);
2005
2006 layer_map[node] = layer;
2007 }
2008 }
2009
2010 // generate node animations
2011 std::vector<aiNodeAnim*> node_anims;
2012
2013 double min_time = 1e10;
2014 double max_time = -1e10;
2015
2016 try {
2017 BOOST_FOREACH(const NodeMap::value_type& kv, node_map) {
2018 GenerateNodeAnimations(node_anims,
2019 kv.first,
2020 kv.second,
2021 layer_map,
2022 max_time,
2023 min_time);
2024 }
2025 }
2026 catch(std::exception&) {
2027 std::for_each(node_anims.begin(), node_anims.end(), Util::delete_fun<aiNodeAnim>());
2028 throw;
2029 }
2030
2031 if(node_anims.size()) {
2032 anim->mChannels = new aiNodeAnim*[node_anims.size()]();
2033 anim->mNumChannels = static_cast<unsigned int>(node_anims.size());
2034
2035 std::swap_ranges(node_anims.begin(),node_anims.end(),anim->mChannels);
2036 }
2037 else {
2038 // empty animations would fail validation, so drop them
2039 delete anim;
2040 animations.pop_back();
2041 FBXImporter::LogInfo("ignoring empty AnimationStack (using IK?): " + name);
2042 return;
2043 }
2044
2045 // for some mysterious reason, mDuration is simply the maximum key -- the
2046 // validator always assumes animations to start at zero.
2047 anim->mDuration = max_time /*- min_time */;
2048 anim->mTicksPerSecond = anim_fps;
2049 }
2050
2051
2052 // ------------------------------------------------------------------------------------------------
2053 void GenerateNodeAnimations(std::vector<aiNodeAnim*>& node_anims,
2054 const std::string& fixed_name,
2055 const std::vector<const AnimationCurveNode*>& curves,
2056 const LayerMap& layer_map,
2057 double& max_time,
2058 double& min_time)
2059 {
2060
2061 NodeMap node_property_map;
2062 ai_assert(curves.size());
2063
2064 // sanity check whether the input is ok
2065 #ifdef ASSIMP_BUILD_DEBUG
2066 { const Object* target = NULL;
2067 BOOST_FOREACH(const AnimationCurveNode* node, curves) {
2068 if(!target) {
2069 target = node->Target();
2070 }
2071 ai_assert(node->Target() == target);
2072 }}
2073 #endif
2074
2075 const AnimationCurveNode* curve_node = NULL;
2076 BOOST_FOREACH(const AnimationCurveNode* node, curves) {
2077 ai_assert(node);
2078
2079 if (node->TargetProperty().empty()) {
2080 FBXImporter::LogWarn("target property for animation curve not set: " + node->Name());
2081 continue;
2082 }
2083
2084 curve_node = node;
2085 if (node->Curves().empty()) {
2086 FBXImporter::LogWarn("no animation curves assigned to AnimationCurveNode: " + node->Name());
2087 continue;
2088 }
2089
2090 node_property_map[node->TargetProperty()].push_back(node);
2091 }
2092
2093 ai_assert(curve_node);
2094 ai_assert(curve_node->TargetAsModel());
2095
2096 const Model& target = *curve_node->TargetAsModel();
2097
2098 // check for all possible transformation components
2099 NodeMap::const_iterator chain[TransformationComp_MAXIMUM];
2100
2101 bool has_any = false;
2102 bool has_complex = false;
2103
2104 for (size_t i = 0; i < TransformationComp_MAXIMUM; ++i) {
2105 const TransformationComp comp = static_cast<TransformationComp>(i);
2106
2107 // inverse pivots don't exist in the input, we just generate them
2108 if (comp == TransformationComp_RotationPivotInverse || comp == TransformationComp_ScalingPivotInverse) {
2109 chain[i] = node_property_map.end();
2110 continue;
2111 }
2112
2113 chain[i] = node_property_map.find(NameTransformationCompProperty(comp));
2114 if (chain[i] != node_property_map.end()) {
2115
2116 // check if this curves contains redundant information by looking
2117 // up the corresponding node's transformation chain.
2118 if (doc.Settings().optimizeEmptyAnimationCurves &&
2119 IsRedundantAnimationData(target, comp, (*chain[i]).second)) {
2120
2121 FBXImporter::LogDebug("dropping redundant animation channel for node " + target.Name());
2122 continue;
2123 }
2124
2125 has_any = true;
2126
2127 if (comp != TransformationComp_Rotation && comp != TransformationComp_Scaling && comp != TransformationComp_Translation &&
2128 comp != TransformationComp_GeometricScaling && comp != TransformationComp_GeometricRotation && comp != TransformationComp_GeometricTranslation )
2129 {
2130 has_complex = true;
2131 }
2132 }
2133 }
2134
2135 if (!has_any) {
2136 FBXImporter::LogWarn("ignoring node animation, did not find any transformation key frames");
2137 return;
2138 }
2139
2140 // this needs to play nicely with GenerateTransformationNodeChain() which will
2141 // be invoked _later_ (animations come first). If this node has only rotation,
2142 // scaling and translation _and_ there are no animated other components either,
2143 // we can use a single node and also a single node animation channel.
2144 if (!has_complex && !NeedsComplexTransformationChain(target)) {
2145
2146 aiNodeAnim* const nd = GenerateSimpleNodeAnim(fixed_name, target, chain,
2147 node_property_map.end(),
2148 layer_map,
2149 max_time,
2150 min_time,
2151 true // input is TRS order, assimp is SRT
2152 );
2153
2154 ai_assert(nd);
2155 node_anims.push_back(nd);
2156 return;
2157 }
2158
2159 // otherwise, things get gruesome and we need separate animation channels
2160 // for each part of the transformation chain. Remember which channels
2161 // we generated and pass this information to the node conversion
2162 // code to avoid nodes that have identity transform, but non-identity
2163 // animations, being dropped.
2164 unsigned int flags = 0, bit = 0x1;
2165 for (size_t i = 0; i < TransformationComp_MAXIMUM; ++i, bit <<= 1) {
2166 const TransformationComp comp = static_cast<TransformationComp>(i);
2167
2168 if (chain[i] != node_property_map.end()) {
2169 flags |= bit;
2170
2171 ai_assert(comp != TransformationComp_RotationPivotInverse);
2172 ai_assert(comp != TransformationComp_ScalingPivotInverse);
2173
2174 const std::string& chain_name = NameTransformationChainNode(fixed_name, comp);
2175
2176 aiNodeAnim* na;
2177 switch(comp)
2178 {
2179 case TransformationComp_Rotation:
2180 case TransformationComp_PreRotation:
2181 case TransformationComp_PostRotation:
2182 case TransformationComp_GeometricRotation:
2183 na = GenerateRotationNodeAnim(chain_name,
2184 target,
2185 (*chain[i]).second,
2186 layer_map,
2187 max_time,
2188 min_time);
2189
2190 break;
2191
2192 case TransformationComp_RotationOffset:
2193 case TransformationComp_RotationPivot:
2194 case TransformationComp_ScalingOffset:
2195 case TransformationComp_ScalingPivot:
2196 case TransformationComp_Translation:
2197 case TransformationComp_GeometricTranslation:
2198 na = GenerateTranslationNodeAnim(chain_name,
2199 target,
2200 (*chain[i]).second,
2201 layer_map,
2202 max_time,
2203 min_time);
2204
2205 // pivoting requires us to generate an implicit inverse channel to undo the pivot translation
2206 if (comp == TransformationComp_RotationPivot) {
2207 const std::string& invName = NameTransformationChainNode(fixed_name,
2208 TransformationComp_RotationPivotInverse);
2209
2210 aiNodeAnim* const inv = GenerateTranslationNodeAnim(invName,
2211 target,
2212 (*chain[i]).second,
2213 layer_map,
2214 max_time,
2215 min_time,
2216 true);
2217
2218 ai_assert(inv);
2219 node_anims.push_back(inv);
2220
2221 ai_assert(TransformationComp_RotationPivotInverse > i);
2222 flags |= bit << (TransformationComp_RotationPivotInverse - i);
2223 }
2224 else if (comp == TransformationComp_ScalingPivot) {
2225 const std::string& invName = NameTransformationChainNode(fixed_name,
2226 TransformationComp_ScalingPivotInverse);
2227
2228 aiNodeAnim* const inv = GenerateTranslationNodeAnim(invName,
2229 target,
2230 (*chain[i]).second,
2231 layer_map,
2232 max_time,
2233 min_time,
2234 true);
2235
2236 ai_assert(inv);
2237 node_anims.push_back(inv);
2238
2239 ai_assert(TransformationComp_RotationPivotInverse > i);
2240 flags |= bit << (TransformationComp_RotationPivotInverse - i);
2241 }
2242
2243 break;
2244
2245 case TransformationComp_Scaling:
2246 case TransformationComp_GeometricScaling:
2247 na = GenerateScalingNodeAnim(chain_name,
2248 target,
2249 (*chain[i]).second,
2250 layer_map,
2251 max_time,
2252 min_time);
2253
2254 break;
2255
2256 default:
2257 ai_assert(false);
2258 }
2259
2260 ai_assert(na);
2261 node_anims.push_back(na);
2262 continue;
2263 }
2264 }
2265
2266 node_anim_chain_bits[fixed_name] = flags;
2267 }
2268
2269
2270 // ------------------------------------------------------------------------------------------------
2271 bool IsRedundantAnimationData(const Model& target,
2272 TransformationComp comp,
2273 const std::vector<const AnimationCurveNode*>& curves)
2274 {
2275 ai_assert(curves.size());
2276
2277 // look for animation nodes with
2278 // * sub channels for all relevant components set
2279 // * one key/value pair per component
2280 // * combined values match up the corresponding value in the bind pose node transformation
2281 // only such nodes are 'redundant' for this function.
2282
2283 if (curves.size() > 1) {
2284 return false;
2285 }
2286
2287 const AnimationCurveNode& nd = *curves.front();
2288 const AnimationCurveMap& sub_curves = nd.Curves();
2289
2290 const AnimationCurveMap::const_iterator dx = sub_curves.find("d|X");
2291 const AnimationCurveMap::const_iterator dy = sub_curves.find("d|Y");
2292 const AnimationCurveMap::const_iterator dz = sub_curves.find("d|Z");
2293
2294 if (dx == sub_curves.end() || dy == sub_curves.end() || dz == sub_curves.end()) {
2295 return false;
2296 }
2297
2298 const KeyValueList& vx = (*dx).second->GetValues();
2299 const KeyValueList& vy = (*dy).second->GetValues();
2300 const KeyValueList& vz = (*dz).second->GetValues();
2301
2302 if(vx.size() != 1 || vy.size() != 1 || vz.size() != 1) {
2303 return false;
2304 }
2305
2306 const aiVector3D dyn_val = aiVector3D(vx[0], vy[0], vz[0]);
2307 const aiVector3D& static_val = PropertyGet<aiVector3D>(target.Props(),
2308 NameTransformationCompProperty(comp),
2309 TransformationCompDefaultValue(comp)
2310 );
2311
2312 const float epsilon = 1e-6f;
2313 return (dyn_val - static_val).SquareLength() < epsilon;
2314 }
2315
2316
2317 // ------------------------------------------------------------------------------------------------
2318 aiNodeAnim* GenerateRotationNodeAnim(const std::string& name,
2319 const Model& target,
2320 const std::vector<const AnimationCurveNode*>& curves,
2321 const LayerMap& layer_map,
2322 double& max_time,
2323 double& min_time)
2324 {
2325 ScopeGuard<aiNodeAnim> na(new aiNodeAnim());
2326 na->mNodeName.Set(name);
2327
2328 ConvertRotationKeys(na, curves, layer_map, max_time,min_time, target.RotationOrder());
2329
2330 // dummy scaling key
2331 na->mScalingKeys = new aiVectorKey[1];
2332 na->mNumScalingKeys = 1;
2333
2334 na->mScalingKeys[0].mTime = 0.;
2335 na->mScalingKeys[0].mValue = aiVector3D(1.0f,1.0f,1.0f);
2336
2337 // dummy position key
2338 na->mPositionKeys = new aiVectorKey[1];
2339 na->mNumPositionKeys = 1;
2340
2341 na->mPositionKeys[0].mTime = 0.;
2342 na->mPositionKeys[0].mValue = aiVector3D();
2343
2344 return na.dismiss();
2345 }
2346
2347
2348 // ------------------------------------------------------------------------------------------------
2349 aiNodeAnim* GenerateScalingNodeAnim(const std::string& name,
2350 const Model& target,
2351 const std::vector<const AnimationCurveNode*>& curves,
2352 const LayerMap& layer_map,
2353 double& max_time,
2354 double& min_time)
2355 {
2356 ScopeGuard<aiNodeAnim> na(new aiNodeAnim());
2357 na->mNodeName.Set(name);
2358
2359 ConvertScaleKeys(na, curves, layer_map, max_time,min_time);
2360
2361 // dummy rotation key
2362 na->mRotationKeys = new aiQuatKey[1];
2363 na->mNumRotationKeys = 1;
2364
2365 na->mRotationKeys[0].mTime = 0.;
2366 na->mRotationKeys[0].mValue = aiQuaternion();
2367
2368 // dummy position key
2369 na->mPositionKeys = new aiVectorKey[1];
2370 na->mNumPositionKeys = 1;
2371
2372 na->mPositionKeys[0].mTime = 0.;
2373 na->mPositionKeys[0].mValue = aiVector3D();
2374
2375 return na.dismiss();
2376 }
2377
2378
2379 // ------------------------------------------------------------------------------------------------
2380 aiNodeAnim* GenerateTranslationNodeAnim(const std::string& name,
2381 const Model& target,
2382 const std::vector<const AnimationCurveNode*>& curves,
2383 const LayerMap& layer_map,
2384 double& max_time,
2385 double& min_time,
2386 bool inverse = false)
2387 {
2388 ScopeGuard<aiNodeAnim> na(new aiNodeAnim());
2389 na->mNodeName.Set(name);
2390
2391 ConvertTranslationKeys(na, curves, layer_map, max_time,min_time);
2392
2393 if (inverse) {
2394 for (unsigned int i = 0; i < na->mNumPositionKeys; ++i) {
2395 na->mPositionKeys[i].mValue *= -1.0f;
2396 }
2397 }
2398
2399 // dummy scaling key
2400 na->mScalingKeys = new aiVectorKey[1];
2401 na->mNumScalingKeys = 1;
2402
2403 na->mScalingKeys[0].mTime = 0.;
2404 na->mScalingKeys[0].mValue = aiVector3D(1.0f,1.0f,1.0f);
2405
2406 // dummy rotation key
2407 na->mRotationKeys = new aiQuatKey[1];
2408 na->mNumRotationKeys = 1;
2409
2410 na->mRotationKeys[0].mTime = 0.;
2411 na->mRotationKeys[0].mValue = aiQuaternion();
2412
2413 return na.dismiss();
2414 }
2415
2416
2417 // ------------------------------------------------------------------------------------------------
2418 // generate node anim, extracting only Rotation, Scaling and Translation from the given chain
2419 aiNodeAnim* GenerateSimpleNodeAnim(const std::string& name,
2420 const Model& target,
2421 NodeMap::const_iterator chain[TransformationComp_MAXIMUM],
2422 NodeMap::const_iterator iter_end,
2423 const LayerMap& layer_map,
2424 double& max_time,
2425 double& min_time,
2426 bool reverse_order = false)
2427
2428 {
2429 ScopeGuard<aiNodeAnim> na(new aiNodeAnim());
2430 na->mNodeName.Set(name);
2431
2432 const PropertyTable& props = target.Props();
2433
2434 // need to convert from TRS order to SRT?
2435 if(reverse_order) {
2436
2437 aiVector3D def_scale, def_translate;
2438 aiQuaternion def_rot;
2439
2440 KeyFrameListList scaling;
2441 KeyFrameListList translation;
2442 KeyFrameListList rotation;
2443
2444 if(chain[TransformationComp_Scaling] != iter_end) {
2445 scaling = GetKeyframeList((*chain[TransformationComp_Scaling]).second);
2446 }
2447 else {
2448 def_scale = PropertyGet(props,"Lcl Scaling",aiVector3D(1.f,1.f,1.f));
2449 }
2450
2451 if(chain[TransformationComp_Translation] != iter_end) {
2452 translation = GetKeyframeList((*chain[TransformationComp_Translation]).second);
2453 }
2454 else {
2455 def_translate = PropertyGet(props,"Lcl Translation",aiVector3D(0.f,0.f,0.f));
2456 }
2457
2458 if(chain[TransformationComp_Rotation] != iter_end) {
2459 rotation = GetKeyframeList((*chain[TransformationComp_Rotation]).second);
2460 }
2461 else {
2462 def_rot = EulerToQuaternion(PropertyGet(props,"Lcl Rotation",aiVector3D(0.f,0.f,0.f)),
2463 target.RotationOrder());
2464 }
2465
2466 KeyFrameListList joined;
2467 joined.insert(joined.end(), scaling.begin(), scaling.end());
2468 joined.insert(joined.end(), translation.begin(), translation.end());
2469 joined.insert(joined.end(), rotation.begin(), rotation.end());
2470
2471 const KeyTimeList& times = GetKeyTimeList(joined);
2472
2473 aiQuatKey* out_quat = new aiQuatKey[times.size()];
2474 aiVectorKey* out_scale = new aiVectorKey[times.size()];
2475 aiVectorKey* out_translation = new aiVectorKey[times.size()];
2476
2477 ConvertTransformOrder_TRStoSRT(out_quat, out_scale, out_translation,
2478 scaling,
2479 translation,
2480 rotation,
2481 times,
2482 max_time,
2483 min_time,
2484 target.RotationOrder(),
2485 def_scale,
2486 def_translate,
2487 def_rot);
2488
2489 // XXX remove duplicates / redundant keys which this operation did
2490 // likely produce if not all three channels were equally dense.
2491
2492 na->mNumScalingKeys = static_cast<unsigned int>(times.size());
2493 na->mNumRotationKeys = na->mNumScalingKeys;
2494 na->mNumPositionKeys = na->mNumScalingKeys;
2495
2496 na->mScalingKeys = out_scale;
2497 na->mRotationKeys = out_quat;
2498 na->mPositionKeys = out_translation;
2499 }
2500 else {
2501
2502 // if a particular transformation is not given, grab it from
2503 // the corresponding node to meet the semantics of aiNodeAnim,
2504 // which requires all of rotation, scaling and translation
2505 // to be set.
2506 if(chain[TransformationComp_Scaling] != iter_end) {
2507 ConvertScaleKeys(na, (*chain[TransformationComp_Scaling]).second,
2508 layer_map,
2509 max_time,
2510 min_time);
2511 }
2512 else {
2513 na->mScalingKeys = new aiVectorKey[1];
2514 na->mNumScalingKeys = 1;
2515
2516 na->mScalingKeys[0].mTime = 0.;
2517 na->mScalingKeys[0].mValue = PropertyGet(props,"Lcl Scaling",
2518 aiVector3D(1.f,1.f,1.f));
2519 }
2520
2521 if(chain[TransformationComp_Rotation] != iter_end) {
2522 ConvertRotationKeys(na, (*chain[TransformationComp_Rotation]).second,
2523 layer_map,
2524 max_time,
2525 min_time,
2526 target.RotationOrder());
2527 }
2528 else {
2529 na->mRotationKeys = new aiQuatKey[1];
2530 na->mNumRotationKeys = 1;
2531
2532 na->mRotationKeys[0].mTime = 0.;
2533 na->mRotationKeys[0].mValue = EulerToQuaternion(
2534 PropertyGet(props,"Lcl Rotation",aiVector3D(0.f,0.f,0.f)),
2535 target.RotationOrder());
2536 }
2537
2538 if(chain[TransformationComp_Translation] != iter_end) {
2539 ConvertTranslationKeys(na, (*chain[TransformationComp_Translation]).second,
2540 layer_map,
2541 max_time,
2542 min_time);
2543 }
2544 else {
2545 na->mPositionKeys = new aiVectorKey[1];
2546 na->mNumPositionKeys = 1;
2547
2548 na->mPositionKeys[0].mTime = 0.;
2549 na->mPositionKeys[0].mValue = PropertyGet(props,"Lcl Translation",
2550 aiVector3D(0.f,0.f,0.f));
2551 }
2552
2553 }
2554 return na.dismiss();
2555 }
2556
2557
2558
2559 // key (time), value, mapto (component index)
2560 typedef boost::tuple< const KeyTimeList*, const KeyValueList*, unsigned int > KeyFrameList;
2561 typedef std::vector<KeyFrameList> KeyFrameListList;
2562
2563
2564
2565 // ------------------------------------------------------------------------------------------------
2566 KeyFrameListList GetKeyframeList(const std::vector<const AnimationCurveNode*>& nodes)
2567 {
2568 KeyFrameListList inputs;
2569 inputs.reserve(nodes.size()*3);
2570
2571 BOOST_FOREACH(const AnimationCurveNode* node, nodes) {
2572 ai_assert(node);
2573
2574 const AnimationCurveMap& curves = node->Curves();
2575 BOOST_FOREACH(const AnimationCurveMap::value_type& kv, curves) {
2576
2577 unsigned int mapto;
2578 if (kv.first == "d|X") {
2579 mapto = 0;
2580 }
2581 else if (kv.first == "d|Y") {
2582 mapto = 1;
2583 }
2584 else if (kv.first == "d|Z") {
2585 mapto = 2;
2586 }
2587 else {
2588 FBXImporter::LogWarn("ignoring scale animation curve, did not recognize target component");
2589 continue;
2590 }
2591
2592 const AnimationCurve* const curve = kv.second;
2593 ai_assert(curve->GetKeys().size() == curve->GetValues().size() && curve->GetKeys().size());
2594
2595 inputs.push_back(boost::make_tuple(&curve->GetKeys(), &curve->GetValues(), mapto));
2596 }
2597 }
2598 return inputs; // pray for NRVO :-)
2599 }
2600
2601
2602 // ------------------------------------------------------------------------------------------------
2603 KeyTimeList GetKeyTimeList(const KeyFrameListList& inputs)
2604 {
2605 ai_assert(inputs.size());
2606
2607 // reserve some space upfront - it is likely that the keyframe lists
2608 // have matching time values, so max(of all keyframe lists) should
2609 // be a good estimate.
2610 KeyTimeList keys;
2611
2612 size_t estimate = 0;
2613 BOOST_FOREACH(const KeyFrameList& kfl, inputs) {
2614 estimate = std::max(estimate, kfl.get<0>()->size());
2615 }
2616
2617 keys.reserve(estimate);
2618
2619 std::vector<unsigned int> next_pos;
2620 next_pos.resize(inputs.size(),0);
2621
2622 const size_t count = inputs.size();
2623 while(true) {
2624
2625 uint64_t min_tick = std::numeric_limits<uint64_t>::max();
2626 for (size_t i = 0; i < count; ++i) {
2627 const KeyFrameList& kfl = inputs[i];
2628
2629 if (kfl.get<0>()->size() > next_pos[i] && kfl.get<0>()->at(next_pos[i]) < min_tick) {
2630 min_tick = kfl.get<0>()->at(next_pos[i]);
2631 }
2632 }
2633
2634 if (min_tick == std::numeric_limits<uint64_t>::max()) {
2635 break;
2636 }
2637 keys.push_back(min_tick);
2638
2639 for (size_t i = 0; i < count; ++i) {
2640 const KeyFrameList& kfl = inputs[i];
2641
2642
2643 while(kfl.get<0>()->size() > next_pos[i] && kfl.get<0>()->at(next_pos[i]) == min_tick) {
2644 ++next_pos[i];
2645 }
2646 }
2647 }
2648
2649 return keys;
2650 }
2651
2652
2653 // ------------------------------------------------------------------------------------------------
2654 void InterpolateKeys(aiVectorKey* valOut,const KeyTimeList& keys, const KeyFrameListList& inputs,
2655 const bool geom,
2656 double& max_time,
2657 double& min_time)
2658
2659 {
2660 ai_assert(keys.size());
2661 ai_assert(valOut);
2662
2663 std::vector<unsigned int> next_pos;
2664 const size_t count = inputs.size();
2665
2666 next_pos.resize(inputs.size(),0);
2667
2668 BOOST_FOREACH(KeyTimeList::value_type time, keys) {
2669 float result[3] = {0.0f, 0.0f, 0.0f};
2670 if(geom) {
2671 result[0] = result[1] = result[2] = 1.0f;
2672 }
2673
2674 for (size_t i = 0; i < count; ++i) {
2675 const KeyFrameList& kfl = inputs[i];
2676
2677 const size_t ksize = kfl.get<0>()->size();
2678 if (ksize > next_pos[i] && kfl.get<0>()->at(next_pos[i]) == time) {
2679 ++next_pos[i];
2680 }
2681
2682 const size_t id0 = next_pos[i]>0 ? next_pos[i]-1 : 0;
2683 const size_t id1 = next_pos[i]==ksize ? ksize-1 : next_pos[i];
2684
2685 // use lerp for interpolation
2686 const KeyValueList::value_type valueA = kfl.get<1>()->at(id0);
2687 const KeyValueList::value_type valueB = kfl.get<1>()->at(id1);
2688
2689 const KeyTimeList::value_type timeA = kfl.get<0>()->at(id0);
2690 const KeyTimeList::value_type timeB = kfl.get<0>()->at(id1);
2691
2692 // do the actual interpolation in double-precision arithmetics
2693 // because it is a bit sensitive to rounding errors.
2694 const double factor = timeB == timeA ? 0. : static_cast<double>((time - timeA) / (timeB - timeA));
2695 const float interpValue = static_cast<float>(valueA + (valueB - valueA) * factor);
2696
2697 if(geom) {
2698 result[kfl.get<2>()] *= interpValue;
2699 }
2700 else {
2701 result[kfl.get<2>()] += interpValue;
2702 }
2703 }
2704
2705 // magic value to convert fbx times to seconds
2706 valOut->mTime = CONVERT_FBX_TIME(time) * anim_fps;
2707
2708 min_time = std::min(min_time, valOut->mTime);
2709 max_time = std::max(max_time, valOut->mTime);
2710
2711 valOut->mValue.x = result[0];
2712 valOut->mValue.y = result[1];
2713 valOut->mValue.z = result[2];
2714
2715 ++valOut;
2716 }
2717 }
2718
2719
2720 // ------------------------------------------------------------------------------------------------
2721 void InterpolateKeys(aiQuatKey* valOut,const KeyTimeList& keys, const KeyFrameListList& inputs,
2722 const bool geom,
2723 double& maxTime,
2724 double& minTime,
2725 Model::RotOrder order)
2726 {
2727 ai_assert(keys.size());
2728 ai_assert(valOut);
2729
2730 boost::scoped_array<aiVectorKey> temp(new aiVectorKey[keys.size()]);
2731 InterpolateKeys(temp.get(),keys,inputs,geom,maxTime, minTime);
2732
2733 aiMatrix4x4 m;
2734
2735 aiQuaternion lastq;
2736
2737 for (size_t i = 0, c = keys.size(); i < c; ++i) {
2738
2739 valOut[i].mTime = temp[i].mTime;
2740
2741
2742 GetRotationMatrix(order, temp[i].mValue, m);
2743 aiQuaternion quat = aiQuaternion(aiMatrix3x3(m));
2744
2745 // take shortest path by checking the inner product
2746 // http://www.3dkingdoms.com/weekly/weekly.php?a=36
2747 if (quat.x * lastq.x + quat.y * lastq.y + quat.z * lastq.z + quat.w * lastq.w < 0)
2748 {
2749 quat.x = -quat.x;
2750 quat.y = -quat.y;
2751 quat.z = -quat.z;
2752 quat.w = -quat.w;
2753 }
2754 lastq = quat;
2755
2756 valOut[i].mValue = quat;
2757 }
2758 }
2759
2760
2761 // ------------------------------------------------------------------------------------------------
2762 void ConvertTransformOrder_TRStoSRT(aiQuatKey* out_quat, aiVectorKey* out_scale,
2763 aiVectorKey* out_translation,
2764 const KeyFrameListList& scaling,
2765 const KeyFrameListList& translation,
2766 const KeyFrameListList& rotation,
2767 const KeyTimeList& times,
2768 double& maxTime,
2769 double& minTime,
2770 Model::RotOrder order,
2771 const aiVector3D& def_scale,
2772 const aiVector3D& def_translate,
2773 const aiQuaternion& def_rotation)
2774 {
2775 if (rotation.size()) {
2776 InterpolateKeys(out_quat, times, rotation, false, maxTime, minTime, order);
2777 }
2778 else {
2779 for (size_t i = 0; i < times.size(); ++i) {
2780 out_quat[i].mTime = CONVERT_FBX_TIME(times[i]) * anim_fps;
2781 out_quat[i].mValue = def_rotation;
2782 }
2783 }
2784
2785 if (scaling.size()) {
2786 InterpolateKeys(out_scale, times, scaling, true, maxTime, minTime);
2787 }
2788 else {
2789 for (size_t i = 0; i < times.size(); ++i) {
2790 out_scale[i].mTime = CONVERT_FBX_TIME(times[i]) * anim_fps;
2791 out_scale[i].mValue = def_scale;
2792 }
2793 }
2794
2795 if (translation.size()) {
2796 InterpolateKeys(out_translation, times, translation, false, maxTime, minTime);
2797 }
2798 else {
2799 for (size_t i = 0; i < times.size(); ++i) {
2800 out_translation[i].mTime = CONVERT_FBX_TIME(times[i]) * anim_fps;
2801 out_translation[i].mValue = def_translate;
2802 }
2803 }
2804
2805 const size_t count = times.size();
2806 for (size_t i = 0; i < count; ++i) {
2807 aiQuaternion& r = out_quat[i].mValue;
2808 aiVector3D& s = out_scale[i].mValue;
2809 aiVector3D& t = out_translation[i].mValue;
2810
2811 aiMatrix4x4 mat, temp;
2812 aiMatrix4x4::Translation(t, mat);
2813 mat *= aiMatrix4x4( r.GetMatrix() );
2814 mat *= aiMatrix4x4::Scaling(s, temp);
2815
2816 mat.Decompose(s, r, t);
2817 }
2818 }
2819
2820
2821 // ------------------------------------------------------------------------------------------------
2822 // euler xyz -> quat
2823 aiQuaternion EulerToQuaternion(const aiVector3D& rot, Model::RotOrder order)
2824 {
2825 aiMatrix4x4 m;
2826 GetRotationMatrix(order, rot, m);
2827
2828 return aiQuaternion(aiMatrix3x3(m));
2829 }
2830
2831
2832 // ------------------------------------------------------------------------------------------------
2833 void ConvertScaleKeys(aiNodeAnim* na, const std::vector<const AnimationCurveNode*>& nodes, const LayerMap& layers,
2834 double& maxTime,
2835 double& minTime)
2836 {
2837 ai_assert(nodes.size());
2838
2839 // XXX for now, assume scale should be blended geometrically (i.e. two
2840 // layers should be multiplied with each other). There is a FBX
2841 // property in the layer to specify the behaviour, though.
2842
2843 const KeyFrameListList& inputs = GetKeyframeList(nodes);
2844 const KeyTimeList& keys = GetKeyTimeList(inputs);
2845
2846 na->mNumScalingKeys = static_cast<unsigned int>(keys.size());
2847 na->mScalingKeys = new aiVectorKey[keys.size()];
2848 InterpolateKeys(na->mScalingKeys, keys, inputs, true, maxTime, minTime);
2849 }
2850
2851
2852 // ------------------------------------------------------------------------------------------------
2853 void ConvertTranslationKeys(aiNodeAnim* na, const std::vector<const AnimationCurveNode*>& nodes,
2854 const LayerMap& layers,
2855 double& maxTime,
2856 double& minTime)
2857 {
2858 ai_assert(nodes.size());
2859
2860 // XXX see notes in ConvertScaleKeys()
2861 const KeyFrameListList& inputs = GetKeyframeList(nodes);
2862 const KeyTimeList& keys = GetKeyTimeList(inputs);
2863
2864 na->mNumPositionKeys = static_cast<unsigned int>(keys.size());
2865 na->mPositionKeys = new aiVectorKey[keys.size()];
2866 InterpolateKeys(na->mPositionKeys, keys, inputs, false, maxTime, minTime);
2867 }
2868
2869
2870 // ------------------------------------------------------------------------------------------------
2871 void ConvertRotationKeys(aiNodeAnim* na, const std::vector<const AnimationCurveNode*>& nodes,
2872 const LayerMap& layers,
2873 double& maxTime,
2874 double& minTime,
2875 Model::RotOrder order)
2876 {
2877 ai_assert(nodes.size());
2878
2879 // XXX see notes in ConvertScaleKeys()
2880 const std::vector< KeyFrameList >& inputs = GetKeyframeList(nodes);
2881 const KeyTimeList& keys = GetKeyTimeList(inputs);
2882
2883 na->mNumRotationKeys = static_cast<unsigned int>(keys.size());
2884 na->mRotationKeys = new aiQuatKey[keys.size()];
2885 InterpolateKeys(na->mRotationKeys, keys, inputs, false, maxTime, minTime, order);
2886 }
2887
2888
2889 // ------------------------------------------------------------------------------------------------
2890 // copy generated meshes, animations, lights, cameras and textures to the output scene
2891 void TransferDataToScene()
2892 {
2893 ai_assert(!out->mMeshes && !out->mNumMeshes);
2894
2895 // note: the trailing () ensures initialization with NULL - not
2896 // many C++ users seem to know this, so pointing it out to avoid
2897 // confusion why this code works.
2898
2899 if(meshes.size()) {
2900 out->mMeshes = new aiMesh*[meshes.size()]();
2901 out->mNumMeshes = static_cast<unsigned int>(meshes.size());
2902
2903 std::swap_ranges(meshes.begin(),meshes.end(),out->mMeshes);
2904 }
2905
2906 if(materials.size()) {
2907 out->mMaterials = new aiMaterial*[materials.size()]();
2908 out->mNumMaterials = static_cast<unsigned int>(materials.size());
2909
2910 std::swap_ranges(materials.begin(),materials.end(),out->mMaterials);
2911 }
2912
2913 if(animations.size()) {
2914 out->mAnimations = new aiAnimation*[animations.size()]();
2915 out->mNumAnimations = static_cast<unsigned int>(animations.size());
2916
2917 std::swap_ranges(animations.begin(),animations.end(),out->mAnimations);
2918 }
2919
2920 if(lights.size()) {
2921 out->mLights = new aiLight*[lights.size()]();
2922 out->mNumLights = static_cast<unsigned int>(lights.size());
2923
2924 std::swap_ranges(lights.begin(),lights.end(),out->mLights);
2925 }
2926
2927 if(cameras.size()) {
2928 out->mCameras = new aiCamera*[cameras.size()]();
2929 out->mNumCameras = static_cast<unsigned int>(cameras.size());
2930
2931 std::swap_ranges(cameras.begin(),cameras.end(),out->mCameras);
2932 }
2933 }
2934
2935
2936 private:
2937
2938 // 0: not assigned yet, others: index is value - 1
2939 unsigned int defaultMaterialIndex;
2940
2941 std::vector<aiMesh*> meshes;
2942 std::vector<aiMaterial*> materials;
2943 std::vector<aiAnimation*> animations;
2944 std::vector<aiLight*> lights;
2945 std::vector<aiCamera*> cameras;
2946
2947 typedef std::map<const Material*, unsigned int> MaterialMap;
2948 MaterialMap materials_converted;
2949
2950 typedef std::map<const Geometry*, std::vector<unsigned int> > MeshMap;
2951 MeshMap meshes_converted;
2952
2953 // fixed node name -> which trafo chain components have animations?
2954 typedef std::map<std::string, unsigned int> NodeAnimBitMap;
2955 NodeAnimBitMap node_anim_chain_bits;
2956
2957 // name -> has had its prefix_stripped?
2958 typedef std::map<std::string, bool> NodeNameMap;
2959 NodeNameMap node_names;
2960
2961 typedef std::map<std::string, std::string> NameNameMap;
2962 NameNameMap renamed_nodes;
2963
2964 double anim_fps;
2965
2966 aiScene* const out;
2967 const FBX::Document& doc;
2968 };
2969
2970 //} // !anon
2971
2972 // ------------------------------------------------------------------------------------------------
2973 void ConvertToAssimpScene(aiScene* out, const Document& doc)
2974 {
2975 Converter converter(out,doc);
2976 }
2977
2978 } // !FBX
2979 } // !Assimp
2980
2981 #endif
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXDConverter.h
41 * @brief FBX DOM to aiScene conversion
42 */
43 #ifndef INCLUDED_AI_FBX_CONVERTER_H
44 #define INCLUDED_AI_FBX_CONVERTER_H
45
46 namespace Assimp {
47 namespace FBX {
48
49 class Document;
50
51
52 /** Convert a FBX #Document to #aiScene
53 * @param out Empty scene to be populated
54 * @param doc Parsed FBX document */
55 void ConvertToAssimpScene(aiScene* out, const Document& doc);
56
57
58 }
59 }
60
61
62 #endif
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXNoteAttribute.cpp
41 * @brief Assimp::FBX::NodeAttribute (and subclasses) implementation
42 */
43 #include "AssimpPCH.h"
44
45 #ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
46
47 #include "FBXParser.h"
48 #include "FBXDocument.h"
49 #include "FBXImporter.h"
50 #include "FBXImportSettings.h"
51 #include "FBXDocumentUtil.h"
52 #include "FBXProperties.h"
53
54 namespace Assimp {
55 namespace FBX {
56
57 using namespace Util;
58
59 // ------------------------------------------------------------------------------------------------
60 Deformer::Deformer(uint64_t id, const Element& element, const Document& doc, const std::string& name)
61 : Object(id,element,name)
62 {
63 const Scope& sc = GetRequiredScope(element);
64
65 const std::string& classname = ParseTokenAsString(GetRequiredToken(element,2));
66 props = GetPropertyTable(doc,"Deformer.Fbx" + classname,element,sc,true);
67 }
68
69
70 // ------------------------------------------------------------------------------------------------
71 Deformer::~Deformer()
72 {
73
74 }
75
76
77 // ------------------------------------------------------------------------------------------------
78 Cluster::Cluster(uint64_t id, const Element& element, const Document& doc, const std::string& name)
79 : Deformer(id,element,doc,name)
80 , node()
81 {
82 const Scope& sc = GetRequiredScope(element);
83
84 const Element* const Indexes = sc["Indexes"];
85 const Element* const Weights = sc["Weights"];
86
87 const Element& Transform = GetRequiredElement(sc,"Transform",&element);
88 const Element& TransformLink = GetRequiredElement(sc,"TransformLink",&element);
89
90 transform = ReadMatrix(Transform);
91 transformLink = ReadMatrix(TransformLink);
92
93 // it is actually possible that there be Deformer's with no weights
94 if (!!Indexes != !!Weights) {
95 DOMError("either Indexes or Weights are missing from Cluster",&element);
96 }
97
98 if(Indexes) {
99 ParseVectorDataArray(indices,*Indexes);
100 ParseVectorDataArray(weights,*Weights);
101 }
102
103 if(indices.size() != weights.size()) {
104 DOMError("sizes of index and weight array don't match up",&element);
105 }
106
107 // read assigned node
108 const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID(),"Model");
109 BOOST_FOREACH(const Connection* con, conns) {
110 const Model* const mod = ProcessSimpleConnection<Model>(*con, false, "Model -> Cluster", element);
111 if(mod) {
112 node = mod;
113 break;
114 }
115 }
116
117 if (!node) {
118 DOMError("failed to read target Node for Cluster",&element);
119 }
120 }
121
122
123 // ------------------------------------------------------------------------------------------------
124 Cluster::~Cluster()
125 {
126
127 }
128
129
130 // ------------------------------------------------------------------------------------------------
131 Skin::Skin(uint64_t id, const Element& element, const Document& doc, const std::string& name)
132 : Deformer(id,element,doc,name)
133 {
134 const Scope& sc = GetRequiredScope(element);
135
136 const Element* const Link_DeformAcuracy = sc["Link_DeformAcuracy"];
137 if(Link_DeformAcuracy) {
138 accuracy = ParseTokenAsFloat(GetRequiredToken(*Link_DeformAcuracy,0));
139 }
140
141 // resolve assigned clusters
142 const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID(),"Deformer");
143
144 clusters.reserve(conns.size());
145 BOOST_FOREACH(const Connection* con, conns) {
146
147 const Cluster* const cluster = ProcessSimpleConnection<Cluster>(*con, false, "Cluster -> Skin", element);
148 if(cluster) {
149 clusters.push_back(cluster);
150 continue;
151 }
152 }
153 }
154
155
156 // ------------------------------------------------------------------------------------------------
157 Skin::~Skin()
158 {
159
160 }
161
162
163
164 }
165 }
166
167 #endif
168
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the*
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXDocument.cpp
41 * @brief Implementation of the FBX DOM classes
42 */
43 #include "AssimpPCH.h"
44
45 #ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
46
47 #include <functional>
48
49 #include "FBXParser.h"
50 #include "FBXDocument.h"
51 #include "FBXUtil.h"
52 #include "FBXImporter.h"
53 #include "FBXImportSettings.h"
54 #include "FBXDocumentUtil.h"
55 #include "FBXProperties.h"
56
57 namespace Assimp {
58 namespace FBX {
59
60 using namespace Util;
61
62 // ------------------------------------------------------------------------------------------------
63 LazyObject::LazyObject(uint64_t id, const Element& element, const Document& doc)
64 : doc(doc)
65 , element(element)
66 , id(id)
67 , flags()
68 {
69
70 }
71
72 // ------------------------------------------------------------------------------------------------
73 LazyObject::~LazyObject()
74 {
75
76 }
77
78 // ------------------------------------------------------------------------------------------------
79 const Object* LazyObject::Get(bool dieOnError)
80 {
81 if(IsBeingConstructed() || FailedToConstruct()) {
82 return NULL;
83 }
84
85 if (object.get()) {
86 return object.get();
87 }
88
89 // if this is the root object, we return a dummy since there
90 // is no root object int he fbx file - it is just referenced
91 // with id 0.
92 if(id == 0L) {
93 object.reset(new Object(id, element, "Model::RootNode"));
94 return object.get();
95 }
96
97 const Token& key = element.KeyToken();
98 const TokenList& tokens = element.Tokens();
99
100 if(tokens.size() < 3) {
101 DOMError("expected at least 3 tokens: id, name and class tag",&element);
102 }
103
104 const char* err;
105 std::string name = ParseTokenAsString(*tokens[1],err);
106 if (err) {
107 DOMError(err,&element);
108 }
109
110 // small fix for binary reading: binary fbx files don't use
111 // prefixes such as Model:: in front of their names. The
112 // loading code expects this at many places, though!
113 // so convert the binary representation (a 0x0001) to the
114 // double colon notation.
115 if(tokens[1]->IsBinary()) {
116 for (size_t i = 0; i < name.length(); ++i) {
117 if (name[i] == 0x0 && name[i+1] == 0x1) {
118 name = name.substr(i+2) + "::" + name.substr(0,i);
119 }
120 }
121 }
122
123 const std::string classtag = ParseTokenAsString(*tokens[2],err);
124 if (err) {
125 DOMError(err,&element);
126 }
127
128 // prevent recursive calls
129 flags |= BEING_CONSTRUCTED;
130
131 try {
132 // this needs to be relatively fast since it happens a lot,
133 // so avoid constructing strings all the time.
134 const char* obtype = key.begin();
135 const size_t length = static_cast<size_t>(key.end()-key.begin());
136 if (!strncmp(obtype,"Geometry",length)) {
137 if (!strcmp(classtag.c_str(),"Mesh")) {
138 object.reset(new MeshGeometry(id,element,name,doc));
139 }
140 }
141 else if (!strncmp(obtype,"NodeAttribute",length)) {
142 if (!strcmp(classtag.c_str(),"Camera")) {
143 object.reset(new Camera(id,element,doc,name));
144 }
145 else if (!strcmp(classtag.c_str(),"CameraSwitcher")) {
146 object.reset(new CameraSwitcher(id,element,doc,name));
147 }
148 else if (!strcmp(classtag.c_str(),"Light")) {
149 object.reset(new Light(id,element,doc,name));
150 }
151 else if (!strcmp(classtag.c_str(),"Null")) {
152 object.reset(new Null(id,element,doc,name));
153 }
154 else if (!strcmp(classtag.c_str(),"LimbNode")) {
155 object.reset(new LimbNode(id,element,doc,name));
156 }
157 }
158 else if (!strncmp(obtype,"Deformer",length)) {
159 if (!strcmp(classtag.c_str(),"Cluster")) {
160 object.reset(new Cluster(id,element,doc,name));
161 }
162 else if (!strcmp(classtag.c_str(),"Skin")) {
163 object.reset(new Skin(id,element,doc,name));
164 }
165 }
166 else if (!strncmp(obtype,"Model",length)) {
167 // FK and IK effectors are not supported
168 if (strcmp(classtag.c_str(),"IKEffector") && strcmp(classtag.c_str(),"FKEffector")) {
169 object.reset(new Model(id,element,doc,name));
170 }
171 }
172 else if (!strncmp(obtype,"Material",length)) {
173 object.reset(new Material(id,element,doc,name));
174 }
175 else if (!strncmp(obtype,"Texture",length)) {
176 object.reset(new Texture(id,element,doc,name));
177 }
178 else if (!strncmp(obtype,"LayeredTexture",length)) {
179 object.reset(new LayeredTexture(id,element,doc,name));
180 }
181 else if (!strncmp(obtype,"AnimationStack",length)) {
182 object.reset(new AnimationStack(id,element,name,doc));
183 }
184 else if (!strncmp(obtype,"AnimationLayer",length)) {
185 object.reset(new AnimationLayer(id,element,name,doc));
186 }
187 // note: order matters for these two
188 else if (!strncmp(obtype,"AnimationCurve",length)) {
189 object.reset(new AnimationCurve(id,element,name,doc));
190 }
191 else if (!strncmp(obtype,"AnimationCurveNode",length)) {
192 object.reset(new AnimationCurveNode(id,element,name,doc));
193 }
194 }
195 catch(std::exception& ex) {
196 flags &= ~BEING_CONSTRUCTED;
197 flags |= FAILED_TO_CONSTRUCT;
198
199 if(dieOnError || doc.Settings().strictMode) {
200 throw;
201 }
202
203 // note: the error message is already formatted, so raw logging is ok
204 if(!DefaultLogger::isNullLogger()) {
205 DefaultLogger::get()->error(ex.what());
206 }
207 return NULL;
208 }
209
210 if (!object.get()) {
211 //DOMError("failed to convert element to DOM object, class: " + classtag + ", name: " + name,&element);
212 }
213
214 flags &= ~BEING_CONSTRUCTED;
215 return object.get();
216 }
217
218 // ------------------------------------------------------------------------------------------------
219 Object::Object(uint64_t id, const Element& element, const std::string& name)
220 : element(element)
221 , name(name)
222 , id(id)
223 {
224
225 }
226
227 // ------------------------------------------------------------------------------------------------
228 Object::~Object()
229 {
230
231 }
232
233
234 // ------------------------------------------------------------------------------------------------
235 FileGlobalSettings::FileGlobalSettings(const Document& doc, boost::shared_ptr<const PropertyTable> props)
236 : props(props)
237 , doc(doc)
238 {
239
240 }
241
242
243 // ------------------------------------------------------------------------------------------------
244 FileGlobalSettings::~FileGlobalSettings()
245 {
246
247 }
248
249
250 // ------------------------------------------------------------------------------------------------
251 Document::Document(const Parser& parser, const ImportSettings& settings)
252 : settings(settings)
253 , parser(parser)
254 {
255 // cannot use array default initialization syntax because vc8 fails on it
256 for (unsigned int i = 0; i < 7; ++i) {
257 creationTimeStamp[i] = 0;
258 }
259
260 ReadHeader();
261 ReadPropertyTemplates();
262
263 ReadGlobalSettings();
264
265 // this order is important, connections need parsed objects to check
266 // whether connections are ok or not. Objects may not be evaluated yet,
267 // though, since this may require valid connections.
268 ReadObjects();
269 ReadConnections();
270 }
271
272
273 // ------------------------------------------------------------------------------------------------
274 Document::~Document()
275 {
276 BOOST_FOREACH(ObjectMap::value_type& v, objects) {
277 delete v.second;
278 }
279 }
280
281
282 // ------------------------------------------------------------------------------------------------
283 void Document::ReadHeader()
284 {
285 // read ID objects from "Objects" section
286 const Scope& sc = parser.GetRootScope();
287 const Element* const ehead = sc["FBXHeaderExtension"];
288 if(!ehead || !ehead->Compound()) {
289 DOMError("no FBXHeaderExtension dictionary found");
290 }
291
292 const Scope& shead = *ehead->Compound();
293 fbxVersion = ParseTokenAsInt(GetRequiredToken(GetRequiredElement(shead,"FBXVersion",ehead),0));
294
295 // while we maye have some success with newer files, we don't support
296 // the older 6.n fbx format
297 if(fbxVersion < 7100) {
298 DOMError("unsupported, old format version, supported are only FBX 2011, FBX 2012 and FBX 2013");
299 }
300 if(fbxVersion > 7300) {
301 if(Settings().strictMode) {
302 DOMError("unsupported, newer format version, supported are only FBX 2011, FBX 2012 and FBX 2013"
303 " (turn off strict mode to try anyhow) ");
304 }
305 else {
306 DOMWarning("unsupported, newer format version, supported are only FBX 2011, FBX 2012 and FBX 2013,"
307 " trying to read it nevertheless");
308 }
309 }
310
311
312 const Element* const ecreator = shead["Creator"];
313 if(ecreator) {
314 creator = ParseTokenAsString(GetRequiredToken(*ecreator,0));
315 }
316
317 const Element* const etimestamp = shead["CreationTimeStamp"];
318 if(etimestamp && etimestamp->Compound()) {
319 const Scope& stimestamp = *etimestamp->Compound();
320 creationTimeStamp[0] = ParseTokenAsInt(GetRequiredToken(GetRequiredElement(stimestamp,"Year"),0));
321 creationTimeStamp[1] = ParseTokenAsInt(GetRequiredToken(GetRequiredElement(stimestamp,"Month"),0));
322 creationTimeStamp[2] = ParseTokenAsInt(GetRequiredToken(GetRequiredElement(stimestamp,"Day"),0));
323 creationTimeStamp[3] = ParseTokenAsInt(GetRequiredToken(GetRequiredElement(stimestamp,"Hour"),0));
324 creationTimeStamp[4] = ParseTokenAsInt(GetRequiredToken(GetRequiredElement(stimestamp,"Minute"),0));
325 creationTimeStamp[5] = ParseTokenAsInt(GetRequiredToken(GetRequiredElement(stimestamp,"Second"),0));
326 creationTimeStamp[6] = ParseTokenAsInt(GetRequiredToken(GetRequiredElement(stimestamp,"Millisecond"),0));
327 }
328 }
329
330 // ------------------------------------------------------------------------------------------------
331 void Document::ReadGlobalSettings()
332 {
333 const Scope& sc = parser.GetRootScope();
334 const Element* const ehead = sc["GlobalSettings"];
335 if(!ehead || !ehead->Compound()) {
336 DOMWarning("no GlobalSettings dictionary found");
337
338 globals.reset(new FileGlobalSettings(*this, boost::make_shared<const PropertyTable>()));
339 return;
340 }
341
342 boost::shared_ptr<const PropertyTable> props = GetPropertyTable(*this, "", *ehead, *ehead->Compound(), true);
343
344 if(!props) {
345 DOMError("GlobalSettings dictionary contains no property table");
346 }
347
348 globals.reset(new FileGlobalSettings(*this, props));
349 }
350
351
352 // ------------------------------------------------------------------------------------------------
353 void Document::ReadObjects()
354 {
355 // read ID objects from "Objects" section
356 const Scope& sc = parser.GetRootScope();
357 const Element* const eobjects = sc["Objects"];
358 if(!eobjects || !eobjects->Compound()) {
359 DOMError("no Objects dictionary found");
360 }
361
362 // add a dummy entry to represent the Model::RootNode object (id 0),
363 // which is only indirectly defined in the input file
364 objects[0] = new LazyObject(0L, *eobjects, *this);
365
366 const Scope& sobjects = *eobjects->Compound();
367 BOOST_FOREACH(const ElementMap::value_type& el, sobjects.Elements()) {
368
369 // extract ID
370 const TokenList& tok = el.second->Tokens();
371
372 if (tok.empty()) {
373 DOMError("expected ID after object key",el.second);
374 }
375
376 const char* err;
377
378 const uint64_t id = ParseTokenAsID(*tok[0], err);
379 if(err) {
380 DOMError(err,el.second);
381 }
382
383 // id=0 is normally implicit
384 if(id == 0L) {
385 DOMError("encountered object with implicitly defined id 0",el.second);
386 }
387
388 if(objects.find(id) != objects.end()) {
389 DOMWarning("encountered duplicate object id, ignoring first occurrence",el.second);
390 }
391
392 objects[id] = new LazyObject(id, *el.second, *this);
393
394 // grab all animation stacks upfront since there is no listing of them
395 if(!strcmp(el.first.c_str(),"AnimationStack")) {
396 animationStacks.push_back(id);
397 }
398 }
399 }
400
401
402 // ------------------------------------------------------------------------------------------------
403 void Document::ReadPropertyTemplates()
404 {
405 const Scope& sc = parser.GetRootScope();
406 // read property templates from "Definitions" section
407 const Element* const edefs = sc["Definitions"];
408 if(!edefs || !edefs->Compound()) {
409 DOMWarning("no Definitions dictionary found");
410 return;
411 }
412
413 const Scope& sdefs = *edefs->Compound();
414 const ElementCollection otypes = sdefs.GetCollection("ObjectType");
415 for(ElementMap::const_iterator it = otypes.first; it != otypes.second; ++it) {
416 const Element& el = *(*it).second;
417 const Scope* sc = el.Compound();
418 if(!sc) {
419 DOMWarning("expected nested scope in ObjectType, ignoring",&el);
420 continue;
421 }
422
423 const TokenList& tok = el.Tokens();
424 if(tok.empty()) {
425 DOMWarning("expected name for ObjectType element, ignoring",&el);
426 continue;
427 }
428
429 const std::string& oname = ParseTokenAsString(*tok[0]);
430
431 const ElementCollection templs = sc->GetCollection("PropertyTemplate");
432 for(ElementMap::const_iterator it = templs.first; it != templs.second; ++it) {
433 const Element& el = *(*it).second;
434 const Scope* sc = el.Compound();
435 if(!sc) {
436 DOMWarning("expected nested scope in PropertyTemplate, ignoring",&el);
437 continue;
438 }
439
440 const TokenList& tok = el.Tokens();
441 if(tok.empty()) {
442 DOMWarning("expected name for PropertyTemplate element, ignoring",&el);
443 continue;
444 }
445
446 const std::string& pname = ParseTokenAsString(*tok[0]);
447
448 const Element* Properties70 = (*sc)["Properties70"];
449 if(Properties70) {
450 boost::shared_ptr<const PropertyTable> props = boost::make_shared<const PropertyTable>(
451 *Properties70,boost::shared_ptr<const PropertyTable>(static_cast<const PropertyTable*>(NULL))
452 );
453
454 templates[oname+"."+pname] = props;
455 }
456 }
457 }
458 }
459
460
461
462 // ------------------------------------------------------------------------------------------------
463 void Document::ReadConnections()
464 {
465 const Scope& sc = parser.GetRootScope();
466 // read property templates from "Definitions" section
467 const Element* const econns = sc["Connections"];
468 if(!econns || !econns->Compound()) {
469 DOMError("no Connections dictionary found");
470 }
471
472 uint64_t insertionOrder = 0l;
473
474 const Scope& sconns = *econns->Compound();
475 const ElementCollection conns = sconns.GetCollection("C");
476 for(ElementMap::const_iterator it = conns.first; it != conns.second; ++it) {
477 const Element& el = *(*it).second;
478 const std::string& type = ParseTokenAsString(GetRequiredToken(el,0));
479 const uint64_t src = ParseTokenAsID(GetRequiredToken(el,1));
480 const uint64_t dest = ParseTokenAsID(GetRequiredToken(el,2));
481
482 // OO = object-object connection
483 // OP = object-property connection, in which case the destination property follows the object ID
484 const std::string& prop = (type == "OP" ? ParseTokenAsString(GetRequiredToken(el,3)) : "");
485
486 if(objects.find(src) == objects.end()) {
487 DOMWarning("source object for connection does not exist",&el);
488 continue;
489 }
490
491 // dest may be 0 (root node) but we added a dummy object before
492 if(objects.find(dest) == objects.end()) {
493 DOMWarning("destination object for connection does not exist",&el);
494 continue;
495 }
496
497 // add new connection
498 const Connection* const c = new Connection(insertionOrder++,src,dest,prop,*this);
499 src_connections.insert(ConnectionMap::value_type(src,c));
500 dest_connections.insert(ConnectionMap::value_type(dest,c));
501 }
502 }
503
504
505 // ------------------------------------------------------------------------------------------------
506 const std::vector<const AnimationStack*>& Document::AnimationStacks() const
507 {
508 if (!animationStacksResolved.empty() || !animationStacks.size()) {
509 return animationStacksResolved;
510 }
511
512 animationStacksResolved.reserve(animationStacks.size());
513 BOOST_FOREACH(uint64_t id, animationStacks) {
514 LazyObject* const lazy = GetObject(id);
515 const AnimationStack* stack;
516 if(!lazy || !(stack = lazy->Get<AnimationStack>())) {
517 DOMWarning("failed to read AnimationStack object");
518 continue;
519 }
520 animationStacksResolved.push_back(stack);
521 }
522
523 return animationStacksResolved;
524 }
525
526
527 // ------------------------------------------------------------------------------------------------
528 LazyObject* Document::GetObject(uint64_t id) const
529 {
530 ObjectMap::const_iterator it = objects.find(id);
531 return it == objects.end() ? NULL : (*it).second;
532 }
533
534 #define MAX_CLASSNAMES 6
535
536 // ------------------------------------------------------------------------------------------------
537 std::vector<const Connection*> Document::GetConnectionsSequenced(uint64_t id,
538 const ConnectionMap& conns) const
539 {
540 std::vector<const Connection*> temp;
541
542 const std::pair<ConnectionMap::const_iterator,ConnectionMap::const_iterator> range =
543 conns.equal_range(id);
544
545 temp.reserve(std::distance(range.first,range.second));
546 for (ConnectionMap::const_iterator it = range.first; it != range.second; ++it) {
547 temp.push_back((*it).second);
548 }
549
550 std::sort(temp.begin(), temp.end(), std::mem_fun(&Connection::Compare));
551
552 return temp; // NRVO should handle this
553 }
554
555
556 // ------------------------------------------------------------------------------------------------
557 std::vector<const Connection*> Document::GetConnectionsSequenced(uint64_t id, bool is_src,
558 const ConnectionMap& conns,
559 const char* const* classnames,
560 size_t count) const
561
562 {
563 ai_assert(classnames);
564 ai_assert(count != 0 && count <= MAX_CLASSNAMES);
565
566 size_t lenghts[MAX_CLASSNAMES];
567
568 const size_t c = count;
569 for (size_t i = 0; i < c; ++i) {
570 lenghts[i] = strlen(classnames[i]);
571 }
572
573 std::vector<const Connection*> temp;
574
575 const std::pair<ConnectionMap::const_iterator,ConnectionMap::const_iterator> range =
576 conns.equal_range(id);
577
578 temp.reserve(std::distance(range.first,range.second));
579 for (ConnectionMap::const_iterator it = range.first; it != range.second; ++it) {
580 const Token& key = (is_src
581 ? (*it).second->LazyDestinationObject()
582 : (*it).second->LazySourceObject()
583 ).GetElement().KeyToken();
584
585 const char* obtype = key.begin();
586
587 for (size_t i = 0; i < c; ++i) {
588 ai_assert(classnames[i]);
589 if(static_cast<size_t>(std::distance(key.begin(),key.end())) == lenghts[i] && !strncmp(classnames[i],obtype,lenghts[i])) {
590 obtype = NULL;
591 break;
592 }
593 }
594
595 if(obtype) {
596 continue;
597 }
598
599 temp.push_back((*it).second);
600 }
601
602 std::sort(temp.begin(), temp.end(), std::mem_fun(&Connection::Compare));
603 return temp; // NRVO should handle this
604 }
605
606
607 // ------------------------------------------------------------------------------------------------
608 std::vector<const Connection*> Document::GetConnectionsBySourceSequenced(uint64_t source) const
609 {
610 return GetConnectionsSequenced(source, ConnectionsBySource());
611 }
612
613
614
615 // ------------------------------------------------------------------------------------------------
616 std::vector<const Connection*> Document::GetConnectionsBySourceSequenced(uint64_t dest,
617 const char* classname) const
618 {
619 const char* arr[] = {classname};
620 return GetConnectionsBySourceSequenced(dest, arr,1);
621 }
622
623
624
625 // ------------------------------------------------------------------------------------------------
626 std::vector<const Connection*> Document::GetConnectionsBySourceSequenced(uint64_t source,
627 const char* const* classnames, size_t count) const
628 {
629 return GetConnectionsSequenced(source, true, ConnectionsBySource(),classnames, count);
630 }
631
632
633 // ------------------------------------------------------------------------------------------------
634 std::vector<const Connection*> Document::GetConnectionsByDestinationSequenced(uint64_t dest,
635 const char* classname) const
636 {
637 const char* arr[] = {classname};
638 return GetConnectionsByDestinationSequenced(dest, arr,1);
639 }
640
641
642 // ------------------------------------------------------------------------------------------------
643 std::vector<const Connection*> Document::GetConnectionsByDestinationSequenced(uint64_t dest) const
644 {
645 return GetConnectionsSequenced(dest, ConnectionsByDestination());
646 }
647
648
649 // ------------------------------------------------------------------------------------------------
650 std::vector<const Connection*> Document::GetConnectionsByDestinationSequenced(uint64_t dest,
651 const char* const* classnames, size_t count) const
652
653 {
654 return GetConnectionsSequenced(dest, false, ConnectionsByDestination(),classnames, count);
655 }
656
657
658 // ------------------------------------------------------------------------------------------------
659 Connection::Connection(uint64_t insertionOrder, uint64_t src, uint64_t dest, const std::string& prop,
660 const Document& doc)
661
662 : insertionOrder(insertionOrder)
663 , prop(prop)
664 , src(src)
665 , dest(dest)
666 , doc(doc)
667 {
668 ai_assert(doc.Objects().find(src) != doc.Objects().end());
669 // dest may be 0 (root node)
670 ai_assert(!dest || doc.Objects().find(dest) != doc.Objects().end());
671 }
672
673
674 // ------------------------------------------------------------------------------------------------
675 Connection::~Connection()
676 {
677
678 }
679
680
681 // ------------------------------------------------------------------------------------------------
682 LazyObject& Connection::LazySourceObject() const
683 {
684 LazyObject* const lazy = doc.GetObject(src);
685 ai_assert(lazy);
686 return *lazy;
687 }
688
689
690 // ------------------------------------------------------------------------------------------------
691 LazyObject& Connection::LazyDestinationObject() const
692 {
693 LazyObject* const lazy = doc.GetObject(dest);
694 ai_assert(lazy);
695 return *lazy;
696 }
697
698
699 // ------------------------------------------------------------------------------------------------
700 const Object* Connection::SourceObject() const
701 {
702 LazyObject* const lazy = doc.GetObject(src);
703 ai_assert(lazy);
704 return lazy->Get();
705 }
706
707
708 // ------------------------------------------------------------------------------------------------
709 const Object* Connection::DestinationObject() const
710 {
711 LazyObject* const lazy = doc.GetObject(dest);
712 ai_assert(lazy);
713 return lazy->Get();
714 }
715
716 } // !FBX
717 } // !Assimp
718
719 #endif
720
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXDocument.h
41 * @brief FBX DOM
42 */
43 #ifndef INCLUDED_AI_FBX_DOCUMENT_H
44 #define INCLUDED_AI_FBX_DOCUMENT_H
45
46 #include <vector>
47 #include <map>
48 #include <string>
49
50 #include "FBXProperties.h"
51
52 namespace Assimp {
53 namespace FBX {
54
55 class Parser;
56 class Object;
57 struct ImportSettings;
58
59 class PropertyTable;
60 class Document;
61 class Material;
62 class Geometry;
63
64 class AnimationCurve;
65 class AnimationCurveNode;
66 class AnimationLayer;
67 class AnimationStack;
68
69 class Skin;
70 class Cluster;
71
72
73 /** Represents a delay-parsed FBX objects. Many objects in the scene
74 * are not needed by assimp, so it makes no sense to parse them
75 * upfront. */
76 class LazyObject
77 {
78 public:
79
80 LazyObject(uint64_t id, const Element& element, const Document& doc);
81 ~LazyObject();
82
83 public:
84
85 const Object* Get(bool dieOnError = false);
86
87 template <typename T>
88 const T* Get(bool dieOnError = false) {
89 const Object* const ob = Get(dieOnError);
90 return ob ? dynamic_cast<const T*>(ob) : NULL;
91 }
92
93 uint64_t ID() const {
94 return id;
95 }
96
97 bool IsBeingConstructed() const {
98 return (flags & BEING_CONSTRUCTED) != 0;
99 }
100
101 bool FailedToConstruct() const {
102 return (flags & FAILED_TO_CONSTRUCT) != 0;
103 }
104
105 const Element& GetElement() const {
106 return element;
107 }
108
109 const Document& GetDocument() const {
110 return doc;
111 }
112
113 private:
114
115 const Document& doc;
116 const Element& element;
117 boost::scoped_ptr<const Object> object;
118
119 const uint64_t id;
120
121 enum Flags {
122 BEING_CONSTRUCTED = 0x1,
123 FAILED_TO_CONSTRUCT = 0x2
124 };
125
126 unsigned int flags;
127 };
128
129
130
131 /** Base class for in-memory (DOM) representations of FBX objects */
132 class Object
133 {
134 public:
135
136 Object(uint64_t id, const Element& element, const std::string& name);
137 virtual ~Object();
138
139 public:
140
141 const Element& SourceElement() const {
142 return element;
143 }
144
145 const std::string& Name() const {
146 return name;
147 }
148
149 uint64_t ID() const {
150 return id;
151 }
152
153 protected:
154 const Element& element;
155 const std::string name;
156 const uint64_t id;
157 };
158
159
160
161 /** DOM class for generic FBX NoteAttribute blocks. NoteAttribute's just hold a property table,
162 * fixed members are added by deriving classes. */
163 class NodeAttribute : public Object
164 {
165 public:
166
167 NodeAttribute(uint64_t id, const Element& element, const Document& doc, const std::string& name);
168 ~NodeAttribute();
169
170 public:
171
172 const PropertyTable& Props() const {
173 ai_assert(props.get());
174 return *props.get();
175 }
176
177 private:
178
179 boost::shared_ptr<const PropertyTable> props;
180 };
181
182
183 /** DOM base class for FBX camera settings attached to a node */
184 class CameraSwitcher : public NodeAttribute
185 {
186 public:
187
188 CameraSwitcher(uint64_t id, const Element& element, const Document& doc, const std::string& name);
189 ~CameraSwitcher();
190
191 public:
192
193 int CameraID() const {
194 return cameraId;
195 }
196
197 const std::string& CameraName() const {
198 return cameraName;
199 }
200
201
202 const std::string& CameraIndexName() const {
203 return cameraIndexName;
204 }
205
206 private:
207
208 int cameraId;
209 std::string cameraName;
210 std::string cameraIndexName;
211 };
212
213
214 #define fbx_stringize(a) #a
215
216 #define fbx_simple_property(name, type, default_value) \
217 type name() const { \
218 return PropertyGet<type>(Props(), fbx_stringize(name), (default_value)); \
219 }
220
221 // XXX improve logging
222 #define fbx_simple_enum_property(name, type, default_value) \
223 type name() const { \
224 const int ival = PropertyGet<int>(Props(), fbx_stringize(name), static_cast<int>(default_value)); \
225 if (ival < 0 || ival >= AI_CONCAT(type, _MAX)) { \
226 ai_assert(static_cast<int>(default_value) >= 0 && static_cast<int>(default_value) < AI_CONCAT(type, _MAX)); \
227 return static_cast<type>(default_value); \
228 } \
229 return static_cast<type>(ival); \
230 }
231
232
233
234 /** DOM base class for FBX cameras attached to a node */
235 class Camera : public NodeAttribute
236 {
237 public:
238
239 Camera(uint64_t id, const Element& element, const Document& doc, const std::string& name);
240 ~Camera();
241
242 public:
243
244 fbx_simple_property(Position, aiVector3D, aiVector3D(0,0,0));
245 fbx_simple_property(UpVector, aiVector3D, aiVector3D(0,1,0));
246 fbx_simple_property(InterestPosition, aiVector3D, aiVector3D(0,0,0));
247
248 fbx_simple_property(AspectWidth, float, 1.0f);
249 fbx_simple_property(AspectHeight, float, 1.0f);
250 fbx_simple_property(FilmWidth, float, 1.0f);
251 fbx_simple_property(FilmHeight, float, 1.0f);
252
253 fbx_simple_property(FilmAspectRatio, float, 1.0f);
254 fbx_simple_property(ApertureMode, int, 0);
255
256 fbx_simple_property(FieldOfView, float, 1.0f);
257 fbx_simple_property(FocalLength, float, 1.0f);
258
259 private:
260 };
261
262
263 /** DOM base class for FBX null markers attached to a node */
264 class Null : public NodeAttribute
265 {
266 public:
267
268 Null(uint64_t id, const Element& element, const Document& doc, const std::string& name);
269 ~Null();
270 };
271
272
273 /** DOM base class for FBX limb node markers attached to a node */
274 class LimbNode : public NodeAttribute
275 {
276 public:
277
278 LimbNode(uint64_t id, const Element& element, const Document& doc, const std::string& name);
279 ~LimbNode();
280 };
281
282
283 /** DOM base class for FBX lights attached to a node */
284 class Light : public NodeAttribute
285 {
286 public:
287
288 Light(uint64_t id, const Element& element, const Document& doc, const std::string& name);
289 ~Light();
290
291 public:
292
293 enum Type
294 {
295 Type_Point,
296 Type_Directional,
297 Type_Spot,
298 Type_Area,
299 Type_Volume,
300
301 Type_MAX // end-of-enum sentinel
302 };
303
304 enum Decay
305 {
306 Decay_None,
307 Decay_Linear,
308 Decay_Quadratic,
309 Decay_Cubic,
310
311 Decay_MAX // end-of-enum sentinel
312 };
313
314 public:
315
316 fbx_simple_property(Color, aiVector3D, aiVector3D(1,1,1));
317 fbx_simple_enum_property(LightType, Type, 0);
318 fbx_simple_property(CastLightOnObject, bool, false);
319 fbx_simple_property(DrawVolumetricLight, bool, true);
320 fbx_simple_property(DrawGroundProjection, bool, true);
321 fbx_simple_property(DrawFrontFacingVolumetricLight, bool, false);
322 fbx_simple_property(Intensity, float, 1.0f);
323 fbx_simple_property(InnerAngle, float, 0.0f);
324 fbx_simple_property(OuterAngle, float, 45.0f);
325 fbx_simple_property(Fog, int, 50);
326 fbx_simple_enum_property(DecayType, Decay, 0);
327 fbx_simple_property(DecayStart, int, 0);
328 fbx_simple_property(FileName, std::string, "");
329
330 fbx_simple_property(EnableNearAttenuation, bool, false);
331 fbx_simple_property(NearAttenuationStart, float, 0.0f);
332 fbx_simple_property(NearAttenuationEnd, float, 0.0f);
333 fbx_simple_property(EnableFarAttenuation, bool, false);
334 fbx_simple_property(FarAttenuationStart, float, 0.0f);
335 fbx_simple_property(FarAttenuationEnd, float, 0.0f);
336
337 fbx_simple_property(CastShadows, bool, true);
338 fbx_simple_property(ShadowColor, aiVector3D, aiVector3D(0,0,0));
339
340 fbx_simple_property(AreaLightShape, int, 0);
341
342 fbx_simple_property(LeftBarnDoor, float, 20.0f);
343 fbx_simple_property(RightBarnDoor, float, 20.0f);
344 fbx_simple_property(TopBarnDoor, float, 20.0f);
345 fbx_simple_property(BottomBarnDoor, float, 20.0f);
346 fbx_simple_property(EnableBarnDoor, bool, true);
347
348
349 private:
350 };
351
352
353 /** DOM base class for FBX models (even though its semantics are more "node" than "model" */
354 class Model : public Object
355 {
356 public:
357
358 Model(uint64_t id, const Element& element, const Document& doc, const std::string& name);
359 ~Model();
360
361 public:
362
363 enum RotOrder
364 {
365 RotOrder_EulerXYZ = 0,
366 RotOrder_EulerXZY,
367 RotOrder_EulerYZX,
368 RotOrder_EulerYXZ,
369 RotOrder_EulerZXY,
370 RotOrder_EulerZYX,
371
372 RotOrder_SphericXYZ,
373
374 RotOrder_MAX // end-of-enum sentinel
375 };
376
377
378 enum TransformInheritance
379 {
380 TransformInheritance_RrSs = 0,
381 TransformInheritance_RSrs,
382 TransformInheritance_Rrs,
383
384 TransformInheritance_MAX // end-of-enum sentinel
385 };
386
387 public:
388
389 fbx_simple_property(QuaternionInterpolate, int, 0);
390
391 fbx_simple_property(RotationOffset, aiVector3D, aiVector3D());
392 fbx_simple_property(RotationPivot, aiVector3D, aiVector3D());
393 fbx_simple_property(ScalingOffset, aiVector3D, aiVector3D());
394 fbx_simple_property(ScalingPivot, aiVector3D, aiVector3D());
395 fbx_simple_property(TranslationActive, bool, false);
396
397 fbx_simple_property(TranslationMin, aiVector3D, aiVector3D());
398 fbx_simple_property(TranslationMax, aiVector3D, aiVector3D());
399
400 fbx_simple_property(TranslationMinX, bool, false);
401 fbx_simple_property(TranslationMaxX, bool, false);
402 fbx_simple_property(TranslationMinY, bool, false);
403 fbx_simple_property(TranslationMaxY, bool, false);
404 fbx_simple_property(TranslationMinZ, bool, false);
405 fbx_simple_property(TranslationMaxZ, bool, false);
406
407 fbx_simple_enum_property(RotationOrder, RotOrder, 0);
408 fbx_simple_property(RotationSpaceForLimitOnly, bool, false);
409 fbx_simple_property(RotationStiffnessX, float, 0.0f);
410 fbx_simple_property(RotationStiffnessY, float, 0.0f);
411 fbx_simple_property(RotationStiffnessZ, float, 0.0f);
412 fbx_simple_property(AxisLen, float, 0.0f);
413
414 fbx_simple_property(PreRotation, aiVector3D, aiVector3D());
415 fbx_simple_property(PostRotation, aiVector3D, aiVector3D());
416 fbx_simple_property(RotationActive, bool, false);
417
418 fbx_simple_property(RotationMin, aiVector3D, aiVector3D());
419 fbx_simple_property(RotationMax, aiVector3D, aiVector3D());
420
421 fbx_simple_property(RotationMinX, bool, false);
422 fbx_simple_property(RotationMaxX, bool, false);
423 fbx_simple_property(RotationMinY, bool, false);
424 fbx_simple_property(RotationMaxY, bool, false);
425 fbx_simple_property(RotationMinZ, bool, false);
426 fbx_simple_property(RotationMaxZ, bool, false);
427 fbx_simple_enum_property(InheritType, TransformInheritance, 0);
428
429 fbx_simple_property(ScalingActive, bool, false);
430 fbx_simple_property(ScalingMin, aiVector3D, aiVector3D());
431 fbx_simple_property(ScalingMax, aiVector3D, aiVector3D(1.f,1.f,1.f));
432 fbx_simple_property(ScalingMinX, bool, false);
433 fbx_simple_property(ScalingMaxX, bool, false);
434 fbx_simple_property(ScalingMinY, bool, false);
435 fbx_simple_property(ScalingMaxY, bool, false);
436 fbx_simple_property(ScalingMinZ, bool, false);
437 fbx_simple_property(ScalingMaxZ, bool, false);
438
439 fbx_simple_property(GeometricTranslation, aiVector3D, aiVector3D());
440 fbx_simple_property(GeometricRotation, aiVector3D, aiVector3D());
441 fbx_simple_property(GeometricScaling, aiVector3D, aiVector3D(1.f, 1.f, 1.f));
442
443 fbx_simple_property(MinDampRangeX, float, 0.0f);
444 fbx_simple_property(MinDampRangeY, float, 0.0f);
445 fbx_simple_property(MinDampRangeZ, float, 0.0f);
446 fbx_simple_property(MaxDampRangeX, float, 0.0f);
447 fbx_simple_property(MaxDampRangeY, float, 0.0f);
448 fbx_simple_property(MaxDampRangeZ, float, 0.0f);
449
450 fbx_simple_property(MinDampStrengthX, float, 0.0f);
451 fbx_simple_property(MinDampStrengthY, float, 0.0f);
452 fbx_simple_property(MinDampStrengthZ, float, 0.0f);
453 fbx_simple_property(MaxDampStrengthX, float, 0.0f);
454 fbx_simple_property(MaxDampStrengthY, float, 0.0f);
455 fbx_simple_property(MaxDampStrengthZ, float, 0.0f);
456
457 fbx_simple_property(PreferredAngleX, float, 0.0f);
458 fbx_simple_property(PreferredAngleY, float, 0.0f);
459 fbx_simple_property(PreferredAngleZ, float, 0.0f);
460
461 fbx_simple_property(Show, bool, true);
462 fbx_simple_property(LODBox, bool, false);
463 fbx_simple_property(Freeze, bool, false);
464
465 public:
466
467 const std::string& Shading() const {
468 return shading;
469 }
470
471 const std::string& Culling() const {
472 return culling;
473 }
474
475 const PropertyTable& Props() const {
476 ai_assert(props.get());
477 return *props.get();
478 }
479
480 /** Get material links */
481 const std::vector<const Material*>& GetMaterials() const {
482 return materials;
483 }
484
485
486 /** Get geometry links */
487 const std::vector<const Geometry*>& GetGeometry() const {
488 return geometry;
489 }
490
491
492 /** Get node attachments */
493 const std::vector<const NodeAttribute*>& GetAttributes() const {
494 return attributes;
495 }
496
497 public:
498
499 /** convenience method to check if the node has a Null node marker */
500 bool IsNull() const;
501
502
503 private:
504
505 void ResolveLinks(const Element& element, const Document& doc);
506
507 private:
508
509 std::vector<const Material*> materials;
510 std::vector<const Geometry*> geometry;
511 std::vector<const NodeAttribute*> attributes;
512
513 std::string shading;
514 std::string culling;
515 boost::shared_ptr<const PropertyTable> props;
516 };
517
518 /** DOM class for generic FBX textures */
519 class Texture : public Object
520 {
521 public:
522
523 Texture(uint64_t id, const Element& element, const Document& doc, const std::string& name);
524 ~Texture();
525
526 public:
527
528 const std::string& Type() const {
529 return type;
530 }
531
532 const std::string& FileName() const {
533 return fileName;
534 }
535
536 const std::string& RelativeFilename() const {
537 return relativeFileName;
538 }
539
540 const std::string& AlphaSource() const {
541 return alphaSource;
542 }
543
544 const aiVector2D& UVTranslation() const {
545 return uvTrans;
546 }
547
548 const aiVector2D& UVScaling() const {
549 return uvScaling;
550 }
551
552 const PropertyTable& Props() const {
553 ai_assert(props.get());
554 return *props.get();
555 }
556
557 // return a 4-tuple
558 const unsigned int* Crop() const {
559 return crop;
560 }
561
562 private:
563
564 aiVector2D uvTrans;
565 aiVector2D uvScaling;
566
567 std::string type;
568 std::string relativeFileName;
569 std::string fileName;
570 std::string alphaSource;
571 boost::shared_ptr<const PropertyTable> props;
572
573 unsigned int crop[4];
574 };
575
576 /** DOM class for layered FBX textures */
577 class LayeredTexture : public Object
578 {
579 public:
580
581 LayeredTexture(uint64_t id, const Element& element, const Document& doc, const std::string& name);
582 ~LayeredTexture();
583
584 //Can only be called after construction of the layered texture object due to construction flag.
585 void fillTexture(const Document& doc);
586
587 enum BlendMode
588 {
589 BlendMode_Translucent,
590 BlendMode_Additive,
591 BlendMode_Modulate,
592 BlendMode_Modulate2,
593 BlendMode_Over,
594 BlendMode_Normal,
595 BlendMode_Dissolve,
596 BlendMode_Darken,
597 BlendMode_ColorBurn,
598 BlendMode_LinearBurn,
599 BlendMode_DarkerColor,
600 BlendMode_Lighten,
601 BlendMode_Screen,
602 BlendMode_ColorDodge,
603 BlendMode_LinearDodge,
604 BlendMode_LighterColor,
605 BlendMode_SoftLight,
606 BlendMode_HardLight,
607 BlendMode_VividLight,
608 BlendMode_LinearLight,
609 BlendMode_PinLight,
610 BlendMode_HardMix,
611 BlendMode_Difference,
612 BlendMode_Exclusion,
613 BlendMode_Subtract,
614 BlendMode_Divide,
615 BlendMode_Hue,
616 BlendMode_Saturation,
617 BlendMode_Color,
618 BlendMode_Luminosity,
619 BlendMode_Overlay,
620 BlendMode_BlendModeCount
621 };
622
623 const Texture* getTexture() const
624 {
625 return texture;
626 }
627 BlendMode GetBlendMode()
628 {
629 return blendMode;
630 }
631 float Alpha()
632 {
633 return alpha;
634 }
635 private:
636 const Texture* texture;
637 BlendMode blendMode;
638 float alpha;
639 };
640
641 typedef std::fbx_unordered_map<std::string, const Texture*> TextureMap;
642 typedef std::fbx_unordered_map<std::string, const LayeredTexture*> LayeredTextureMap;
643
644
645 /** DOM class for generic FBX materials */
646 class Material : public Object
647 {
648 public:
649
650 Material(uint64_t id, const Element& element, const Document& doc, const std::string& name);
651 ~Material();
652
653 public:
654
655 const std::string& GetShadingModel() const {
656 return shading;
657 }
658
659 bool IsMultilayer() const {
660 return multilayer;
661 }
662
663 const PropertyTable& Props() const {
664 ai_assert(props.get());
665 return *props.get();
666 }
667
668 const TextureMap& Textures() const {
669 return textures;
670 }
671
672 const LayeredTextureMap& LayeredTextures() const {
673 return layeredTextures;
674 }
675
676 private:
677
678 std::string shading;
679 bool multilayer;
680 boost::shared_ptr<const PropertyTable> props;
681
682 TextureMap textures;
683 LayeredTextureMap layeredTextures;
684 };
685
686
687 /** DOM base class for all kinds of FBX geometry */
688 class Geometry : public Object
689 {
690 public:
691
692 Geometry(uint64_t id, const Element& element, const std::string& name, const Document& doc);
693 ~Geometry();
694
695 public:
696
697 /** Get the Skin attached to this geometry or NULL */
698 const Skin* const DeformerSkin() const {
699 return skin;
700 }
701
702 private:
703
704 const Skin* skin;
705 };
706
707
708 typedef std::vector<int> MatIndexArray;
709
710
711 /** DOM class for FBX geometry of type "Mesh"*/
712 class MeshGeometry : public Geometry
713 {
714
715 public:
716
717 MeshGeometry(uint64_t id, const Element& element, const std::string& name, const Document& doc);
718 ~MeshGeometry();
719
720 public:
721
722 /** Get a list of all vertex points, non-unique*/
723 const std::vector<aiVector3D>& GetVertices() const {
724 return vertices;
725 }
726
727 /** Get a list of all vertex normals or an empty array if
728 * no normals are specified. */
729 const std::vector<aiVector3D>& GetNormals() const {
730 return normals;
731 }
732
733 /** Get a list of all vertex tangents or an empty array
734 * if no tangents are specified */
735 const std::vector<aiVector3D>& GetTangents() const {
736 return tangents;
737 }
738
739 /** Get a list of all vertex binormals or an empty array
740 * if no binormals are specified */
741 const std::vector<aiVector3D>& GetBinormals() const {
742 return binormals;
743 }
744
745 /** Return list of faces - each entry denotes a face and specifies
746 * how many vertices it has. Vertices are taken from the
747 * vertex data arrays in sequential order. */
748 const std::vector<unsigned int>& GetFaceIndexCounts() const {
749 return faces;
750 }
751
752 /** Get a UV coordinate slot, returns an empty array if
753 * the requested slot does not exist. */
754 const std::vector<aiVector2D>& GetTextureCoords(unsigned int index) const {
755 static const std::vector<aiVector2D> empty;
756 return index >= AI_MAX_NUMBER_OF_TEXTURECOORDS ? empty : uvs[index];
757 }
758
759
760 /** Get a UV coordinate slot, returns an empty array if
761 * the requested slot does not exist. */
762 std::string GetTextureCoordChannelName(unsigned int index) const {
763 return index >= AI_MAX_NUMBER_OF_TEXTURECOORDS ? "" : uvNames[index];
764 }
765
766 /** Get a vertex color coordinate slot, returns an empty array if
767 * the requested slot does not exist. */
768 const std::vector<aiColor4D>& GetVertexColors(unsigned int index) const {
769 static const std::vector<aiColor4D> empty;
770 return index >= AI_MAX_NUMBER_OF_COLOR_SETS ? empty : colors[index];
771 }
772
773
774 /** Get per-face-vertex material assignments */
775 const MatIndexArray& GetMaterialIndices() const {
776 return materials;
777 }
778
779
780 /** Convert from a fbx file vertex index (for example from a #Cluster weight) or NULL
781 * if the vertex index is not valid. */
782 const unsigned int* ToOutputVertexIndex(unsigned int in_index, unsigned int& count) const {
783 if(in_index >= mapping_counts.size()) {
784 return NULL;
785 }
786
787 ai_assert(mapping_counts.size() == mapping_offsets.size());
788 count = mapping_counts[in_index];
789
790 ai_assert(count != 0);
791 ai_assert(mapping_offsets[in_index] + count <= mappings.size());
792
793 return &mappings[mapping_offsets[in_index]];
794 }
795
796
797 /** Determine the face to which a particular output vertex index belongs.
798 * This mapping is always unique. */
799 unsigned int FaceForVertexIndex(unsigned int in_index) const {
800 ai_assert(in_index < vertices.size());
801
802 // in the current conversion pattern this will only be needed if
803 // weights are present, so no need to always pre-compute this table
804 if (facesVertexStartIndices.empty()) {
805 facesVertexStartIndices.resize(faces.size() + 1, 0);
806
807 std::partial_sum(faces.begin(), faces.end(), facesVertexStartIndices.begin() + 1);
808 facesVertexStartIndices.pop_back();
809 }
810
811 ai_assert(facesVertexStartIndices.size() == faces.size());
812 const std::vector<unsigned int>::iterator it = std::upper_bound(
813 facesVertexStartIndices.begin(),
814 facesVertexStartIndices.end(),
815 in_index
816 );
817
818 return static_cast<unsigned int>(std::distance(facesVertexStartIndices.begin(), it - 1));
819 }
820
821 public:
822
823 private:
824
825 void ReadLayer(const Scope& layer);
826 void ReadLayerElement(const Scope& layerElement);
827 void ReadVertexData(const std::string& type, int index, const Scope& source);
828
829 void ReadVertexDataUV(std::vector<aiVector2D>& uv_out, const Scope& source,
830 const std::string& MappingInformationType,
831 const std::string& ReferenceInformationType);
832
833 void ReadVertexDataNormals(std::vector<aiVector3D>& normals_out, const Scope& source,
834 const std::string& MappingInformationType,
835 const std::string& ReferenceInformationType);
836
837 void ReadVertexDataColors(std::vector<aiColor4D>& colors_out, const Scope& source,
838 const std::string& MappingInformationType,
839 const std::string& ReferenceInformationType);
840
841 void ReadVertexDataTangents(std::vector<aiVector3D>& tangents_out, const Scope& source,
842 const std::string& MappingInformationType,
843 const std::string& ReferenceInformationType);
844
845 void ReadVertexDataBinormals(std::vector<aiVector3D>& binormals_out, const Scope& source,
846 const std::string& MappingInformationType,
847 const std::string& ReferenceInformationType);
848
849 void ReadVertexDataMaterials(MatIndexArray& materials_out, const Scope& source,
850 const std::string& MappingInformationType,
851 const std::string& ReferenceInformationType);
852
853 private:
854
855 // cached data arrays
856 MatIndexArray materials;
857 std::vector<aiVector3D> vertices;
858 std::vector<unsigned int> faces;
859 mutable std::vector<unsigned int> facesVertexStartIndices;
860 std::vector<aiVector3D> tangents;
861 std::vector<aiVector3D> binormals;
862 std::vector<aiVector3D> normals;
863
864 std::string uvNames[AI_MAX_NUMBER_OF_TEXTURECOORDS];
865 std::vector<aiVector2D> uvs[AI_MAX_NUMBER_OF_TEXTURECOORDS];
866 std::vector<aiColor4D> colors[AI_MAX_NUMBER_OF_COLOR_SETS];
867
868 std::vector<unsigned int> mapping_counts;
869 std::vector<unsigned int> mapping_offsets;
870 std::vector<unsigned int> mappings;
871 };
872
873 typedef std::vector<uint64_t> KeyTimeList;
874 typedef std::vector<float> KeyValueList;
875
876 /** Represents a FBX animation curve (i.e. a 1-dimensional set of keyframes and values therefor) */
877 class AnimationCurve : public Object
878 {
879 public:
880
881 AnimationCurve(uint64_t id, const Element& element, const std::string& name, const Document& doc);
882 ~AnimationCurve();
883
884 public:
885
886 /** get list of keyframe positions (time).
887 * Invariant: |GetKeys()| > 0 */
888 const KeyTimeList& GetKeys() const {
889 return keys;
890 }
891
892
893 /** get list of keyframe values.
894 * Invariant: |GetKeys()| == |GetValues()| && |GetKeys()| > 0*/
895 const KeyValueList& GetValues() const {
896 return values;
897 }
898
899
900 const std::vector<float>& GetAttributes() const {
901 return attributes;
902 }
903
904 const std::vector<unsigned int>& GetFlags() const {
905 return flags;
906 }
907
908 private:
909
910 KeyTimeList keys;
911 KeyValueList values;
912 std::vector<float> attributes;
913 std::vector<unsigned int> flags;
914 };
915
916 // property-name -> animation curve
917 typedef std::map<std::string, const AnimationCurve*> AnimationCurveMap;
918
919
920 /** Represents a FBX animation curve (i.e. a mapping from single animation curves to nodes) */
921 class AnimationCurveNode : public Object
922 {
923 public:
924
925 /* the optional whitelist specifies a list of property names for which the caller
926 wants animations for. If the curve node does not match one of these, std::range_error
927 will be thrown. */
928 AnimationCurveNode(uint64_t id, const Element& element, const std::string& name, const Document& doc,
929 const char* const * target_prop_whitelist = NULL, size_t whitelist_size = 0);
930
931 ~AnimationCurveNode();
932
933 public:
934
935 const PropertyTable& Props() const {
936 ai_assert(props.get());
937 return *props.get();
938 }
939
940
941 const AnimationCurveMap& Curves() const;
942
943 /** Object the curve is assigned to, this can be NULL if the
944 * target object has no DOM representation or could not
945 * be read for other reasons.*/
946 const Object* Target() const {
947 return target;
948 }
949
950 const Model* TargetAsModel() const {
951 return dynamic_cast<const Model*>(target);
952 }
953
954 const NodeAttribute* TargetAsNodeAttribute() const {
955 return dynamic_cast<const NodeAttribute*>(target);
956 }
957
958 /** Property of Target() that is being animated*/
959 const std::string& TargetProperty() const {
960 return prop;
961 }
962
963 private:
964
965 const Object* target;
966 boost::shared_ptr<const PropertyTable> props;
967 mutable AnimationCurveMap curves;
968
969 std::string prop;
970 const Document& doc;
971 };
972
973 typedef std::vector<const AnimationCurveNode*> AnimationCurveNodeList;
974
975
976 /** Represents a FBX animation layer (i.e. a list of node animations) */
977 class AnimationLayer : public Object
978 {
979 public:
980
981
982 AnimationLayer(uint64_t id, const Element& element, const std::string& name, const Document& doc);
983 ~AnimationLayer();
984
985 public:
986
987 const PropertyTable& Props() const {
988 ai_assert(props.get());
989 return *props.get();
990 }
991
992 /* the optional whitelist specifies a list of property names for which the caller
993 wants animations for. Curves not matching this list will not be added to the
994 animation layer. */
995 AnimationCurveNodeList Nodes(const char* const * target_prop_whitelist = NULL, size_t whitelist_size = 0) const;
996
997 private:
998
999 boost::shared_ptr<const PropertyTable> props;
1000 const Document& doc;
1001 };
1002
1003
1004 typedef std::vector<const AnimationLayer*> AnimationLayerList;
1005
1006
1007 /** Represents a FBX animation stack (i.e. a list of animation layers) */
1008 class AnimationStack : public Object
1009 {
1010 public:
1011
1012 AnimationStack(uint64_t id, const Element& element, const std::string& name, const Document& doc);
1013 ~AnimationStack();
1014
1015 public:
1016
1017 fbx_simple_property(LocalStart, uint64_t, 0L);
1018 fbx_simple_property(LocalStop, uint64_t, 0L);
1019 fbx_simple_property(ReferenceStart, uint64_t, 0L);
1020 fbx_simple_property(ReferenceStop, uint64_t, 0L);
1021
1022
1023
1024 const PropertyTable& Props() const {
1025 ai_assert(props.get());
1026 return *props.get();
1027 }
1028
1029
1030 const AnimationLayerList& Layers() const {
1031 return layers;
1032 }
1033
1034 private:
1035
1036 boost::shared_ptr<const PropertyTable> props;
1037 AnimationLayerList layers;
1038 };
1039
1040
1041 /** DOM class for deformers */
1042 class Deformer : public Object
1043 {
1044 public:
1045
1046 Deformer(uint64_t id, const Element& element, const Document& doc, const std::string& name);
1047 ~Deformer();
1048
1049 public:
1050
1051 const PropertyTable& Props() const {
1052 ai_assert(props.get());
1053 return *props.get();
1054 }
1055
1056 private:
1057
1058 boost::shared_ptr<const PropertyTable> props;
1059 };
1060
1061 typedef std::vector<float> WeightArray;
1062 typedef std::vector<unsigned int> WeightIndexArray;
1063
1064
1065 /** DOM class for skin deformer clusters (aka subdeformers) */
1066 class Cluster : public Deformer
1067 {
1068 public:
1069
1070 Cluster(uint64_t id, const Element& element, const Document& doc, const std::string& name);
1071 ~Cluster();
1072
1073 public:
1074
1075 /** get the list of deformer weights associated with this cluster.
1076 * Use #GetIndices() to get the associated vertices. Both arrays
1077 * have the same size (and may also be empty). */
1078 const WeightArray& GetWeights() const {
1079 return weights;
1080 }
1081
1082 /** get indices into the vertex data of the geometry associated
1083 * with this cluster. Use #GetWeights() to get the associated weights.
1084 * Both arrays have the same size (and may also be empty). */
1085 const WeightIndexArray& GetIndices() const {
1086 return indices;
1087 }
1088
1089 /** */
1090 const aiMatrix4x4& Transform() const {
1091 return transform;
1092 }
1093
1094 const aiMatrix4x4& TransformLink() const {
1095 return transformLink;
1096 }
1097
1098 const Model* const TargetNode() const {
1099 return node;
1100 }
1101
1102 private:
1103
1104 WeightArray weights;
1105 WeightIndexArray indices;
1106
1107 aiMatrix4x4 transform;
1108 aiMatrix4x4 transformLink;
1109
1110 const Model* node;
1111 };
1112
1113
1114
1115 /** DOM class for skin deformers */
1116 class Skin : public Deformer
1117 {
1118 public:
1119
1120 Skin(uint64_t id, const Element& element, const Document& doc, const std::string& name);
1121 ~Skin();
1122
1123 public:
1124
1125 float DeformAccuracy() const {
1126 return accuracy;
1127 }
1128
1129
1130 const std::vector<const Cluster*>& Clusters() const {
1131 return clusters;
1132 }
1133
1134 private:
1135
1136 float accuracy;
1137 std::vector<const Cluster*> clusters;
1138 };
1139
1140
1141
1142 /** Represents a link between two FBX objects. */
1143 class Connection
1144 {
1145 public:
1146
1147 Connection(uint64_t insertionOrder, uint64_t src, uint64_t dest, const std::string& prop, const Document& doc);
1148 ~Connection();
1149
1150 // note: a connection ensures that the source and dest objects exist, but
1151 // not that they have DOM representations, so the return value of one of
1152 // these functions can still be NULL.
1153 const Object* SourceObject() const;
1154 const Object* DestinationObject() const;
1155
1156 // these, however, are always guaranteed to be valid
1157 LazyObject& LazySourceObject() const;
1158 LazyObject& LazyDestinationObject() const;
1159
1160
1161 /** return the name of the property the connection is attached to.
1162 * this is an empty string for object to object (OO) connections. */
1163 const std::string& PropertyName() const {
1164 return prop;
1165 }
1166
1167 uint64_t InsertionOrder() const {
1168 return insertionOrder;
1169 }
1170
1171 int CompareTo(const Connection* c) const {
1172 // note: can't subtract because this would overflow uint64_t
1173 if(InsertionOrder() > c->InsertionOrder()) {
1174 return 1;
1175 }
1176 else if(InsertionOrder() < c->InsertionOrder()) {
1177 return -1;
1178 }
1179 return 0;
1180 }
1181
1182 bool Compare(const Connection* c) const {
1183 return InsertionOrder() < c->InsertionOrder();
1184 }
1185
1186 public:
1187
1188 uint64_t insertionOrder;
1189 const std::string prop;
1190
1191 uint64_t src, dest;
1192 const Document& doc;
1193 };
1194
1195
1196 // XXX again, unique_ptr would be useful. shared_ptr is too
1197 // bloated since the objects have a well-defined single owner
1198 // during their entire lifetime (Document). FBX files have
1199 // up to many thousands of objects (most of which we never use),
1200 // so the memory overhead for them should be kept at a minimum.
1201 typedef std::map<uint64_t, LazyObject*> ObjectMap;
1202 typedef std::fbx_unordered_map<std::string, boost::shared_ptr<const PropertyTable> > PropertyTemplateMap;
1203
1204
1205 typedef std::multimap<uint64_t, const Connection*> ConnectionMap;
1206
1207
1208 /** DOM class for global document settings, a single instance per document can
1209 * be accessed via Document.Globals(). */
1210 class FileGlobalSettings
1211 {
1212 public:
1213
1214 FileGlobalSettings(const Document& doc, boost::shared_ptr<const PropertyTable> props);
1215 ~FileGlobalSettings();
1216
1217 public:
1218
1219 const PropertyTable& Props() const {
1220 ai_assert(props.get());
1221 return *props.get();
1222 }
1223
1224 const Document& GetDocument() const {
1225 return doc;
1226 }
1227
1228
1229 fbx_simple_property(UpAxis, int, 1);
1230 fbx_simple_property(UpAxisSign, int, 1);
1231 fbx_simple_property(FrontAxis, int, 2);
1232 fbx_simple_property(FrontAxisSign, int, 1);
1233 fbx_simple_property(CoordAxis, int, 0);
1234 fbx_simple_property(CoordAxisSign, int, 1);
1235 fbx_simple_property(OriginalUpAxis, int, 0);
1236 fbx_simple_property(OriginalUpAxisSign, int, 1);
1237 fbx_simple_property(UnitScaleFactor, double, 1);
1238 fbx_simple_property(OriginalUnitScaleFactor, double, 1);
1239 fbx_simple_property(AmbientColor, aiVector3D, aiVector3D(0,0,0));
1240 fbx_simple_property(DefaultCamera, std::string, "");
1241
1242
1243 enum FrameRate {
1244 FrameRate_DEFAULT = 0,
1245 FrameRate_120 = 1,
1246 FrameRate_100 = 2,
1247 FrameRate_60 = 3,
1248 FrameRate_50 = 4,
1249 FrameRate_48 = 5,
1250 FrameRate_30 = 6,
1251 FrameRate_30_DROP = 7,
1252 FrameRate_NTSC_DROP_FRAME = 8,
1253 FrameRate_NTSC_FULL_FRAME = 9,
1254 FrameRate_PAL = 10,
1255 FrameRate_CINEMA = 11,
1256 FrameRate_1000 = 12,
1257 FrameRate_CINEMA_ND = 13,
1258 FrameRate_CUSTOM = 14,
1259
1260 FrameRate_MAX// end-of-enum sentinel
1261 };
1262
1263 fbx_simple_enum_property(TimeMode, FrameRate, FrameRate_DEFAULT);
1264 fbx_simple_property(TimeSpanStart, uint64_t, 0L);
1265 fbx_simple_property(TimeSpanStop, uint64_t, 0L);
1266 fbx_simple_property(CustomFrameRate, float, -1.0f);
1267
1268
1269 private:
1270
1271 boost::shared_ptr<const PropertyTable> props;
1272 const Document& doc;
1273 };
1274
1275
1276
1277
1278 /** DOM root for a FBX file */
1279 class Document
1280 {
1281 public:
1282
1283 Document(const Parser& parser, const ImportSettings& settings);
1284 ~Document();
1285
1286 public:
1287
1288 LazyObject* GetObject(uint64_t id) const;
1289
1290 bool IsBinary() const {
1291 return parser.IsBinary();
1292 }
1293
1294 unsigned int FBXVersion() const {
1295 return fbxVersion;
1296 }
1297
1298 const std::string& Creator() const {
1299 return creator;
1300 }
1301
1302 // elements (in this order): Uear, Month, Day, Hour, Second, Millisecond
1303 const unsigned int* CreationTimeStamp() const {
1304 return creationTimeStamp;
1305 }
1306
1307 const FileGlobalSettings& GlobalSettings() const {
1308 ai_assert(globals.get());
1309 return *globals.get();
1310 }
1311
1312 const PropertyTemplateMap& Templates() const {
1313 return templates;
1314 }
1315
1316 const ObjectMap& Objects() const {
1317 return objects;
1318 }
1319
1320 const ImportSettings& Settings() const {
1321 return settings;
1322 }
1323
1324 const ConnectionMap& ConnectionsBySource() const {
1325 return src_connections;
1326 }
1327
1328 const ConnectionMap& ConnectionsByDestination() const {
1329 return dest_connections;
1330 }
1331
1332 // note: the implicit rule in all DOM classes is to always resolve
1333 // from destination to source (since the FBX object hierarchy is,
1334 // with very few exceptions, a DAG, this avoids cycles). In all
1335 // cases that may involve back-facing edges in the object graph,
1336 // use LazyObject::IsBeingConstructed() to check.
1337
1338 std::vector<const Connection*> GetConnectionsBySourceSequenced(uint64_t source) const;
1339 std::vector<const Connection*> GetConnectionsByDestinationSequenced(uint64_t dest) const;
1340
1341 std::vector<const Connection*> GetConnectionsBySourceSequenced(uint64_t source, const char* classname) const;
1342 std::vector<const Connection*> GetConnectionsByDestinationSequenced(uint64_t dest, const char* classname) const;
1343
1344 std::vector<const Connection*> GetConnectionsBySourceSequenced(uint64_t source,
1345 const char* const* classnames, size_t count) const;
1346 std::vector<const Connection*> GetConnectionsByDestinationSequenced(uint64_t dest,
1347 const char* const* classnames,
1348 size_t count) const;
1349
1350 const std::vector<const AnimationStack*>& AnimationStacks() const;
1351
1352 private:
1353
1354 std::vector<const Connection*> GetConnectionsSequenced(uint64_t id, const ConnectionMap&) const;
1355 std::vector<const Connection*> GetConnectionsSequenced(uint64_t id, bool is_src,
1356 const ConnectionMap&,
1357 const char* const* classnames,
1358 size_t count) const;
1359
1360 private:
1361
1362 void ReadHeader();
1363 void ReadObjects();
1364 void ReadPropertyTemplates();
1365 void ReadConnections();
1366 void ReadGlobalSettings();
1367
1368 private:
1369
1370 const ImportSettings& settings;
1371
1372 ObjectMap objects;
1373 const Parser& parser;
1374
1375 PropertyTemplateMap templates;
1376 ConnectionMap src_connections;
1377 ConnectionMap dest_connections;
1378
1379 unsigned int fbxVersion;
1380 std::string creator;
1381 unsigned int creationTimeStamp[7];
1382
1383 std::vector<uint64_t> animationStacks;
1384 mutable std::vector<const AnimationStack*> animationStacksResolved;
1385
1386 boost::scoped_ptr<FileGlobalSettings> globals;
1387 };
1388
1389 }
1390 }
1391
1392 #endif
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXDocumentUtil.cpp
41 * @brief Implementation of the FBX DOM utility functions declared in FBXDocumentUtil.h
42 */
43 #include "AssimpPCH.h"
44
45 #ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
46
47 #include "FBXParser.h"
48 #include "FBXDocument.h"
49 #include "FBXUtil.h"
50 #include "FBXDocumentUtil.h"
51 #include "FBXProperties.h"
52
53 namespace Assimp {
54 namespace FBX {
55 namespace Util {
56
57 // ------------------------------------------------------------------------------------------------
58 // signal DOM construction error, this is always unrecoverable. Throws DeadlyImportError.
59 void DOMError(const std::string& message, const Token& token)
60 {
61 throw DeadlyImportError(Util::AddTokenText("FBX-DOM",message,&token));
62 }
63
64 // ------------------------------------------------------------------------------------------------
65 void DOMError(const std::string& message, const Element* element /*= NULL*/)
66 {
67 if(element) {
68 DOMError(message,element->KeyToken());
69 }
70 throw DeadlyImportError("FBX-DOM " + message);
71 }
72
73
74 // ------------------------------------------------------------------------------------------------
75 // print warning, do return
76 void DOMWarning(const std::string& message, const Token& token)
77 {
78 if(DefaultLogger::get()) {
79 DefaultLogger::get()->warn(Util::AddTokenText("FBX-DOM",message,&token));
80 }
81 }
82
83 // ------------------------------------------------------------------------------------------------
84 void DOMWarning(const std::string& message, const Element* element /*= NULL*/)
85 {
86 if(element) {
87 DOMWarning(message,element->KeyToken());
88 return;
89 }
90 if(DefaultLogger::get()) {
91 DefaultLogger::get()->warn("FBX-DOM: " + message);
92 }
93 }
94
95
96 // ------------------------------------------------------------------------------------------------
97 // fetch a property table and the corresponding property template
98 boost::shared_ptr<const PropertyTable> GetPropertyTable(const Document& doc,
99 const std::string& templateName,
100 const Element &element,
101 const Scope& sc,
102 bool no_warn /*= false*/)
103 {
104 const Element* const Properties70 = sc["Properties70"];
105 boost::shared_ptr<const PropertyTable> templateProps = boost::shared_ptr<const PropertyTable>(
106 static_cast<const PropertyTable*>(NULL));
107
108 if(templateName.length()) {
109 PropertyTemplateMap::const_iterator it = doc.Templates().find(templateName);
110 if(it != doc.Templates().end()) {
111 templateProps = (*it).second;
112 }
113 }
114
115 if(!Properties70) {
116 if(!no_warn) {
117 DOMWarning("property table (Properties70) not found",&element);
118 }
119 if(templateProps) {
120 return templateProps;
121 }
122 else {
123 return boost::make_shared<const PropertyTable>();
124 }
125 }
126 return boost::make_shared<const PropertyTable>(*Properties70,templateProps);
127 }
128 } // !Util
129 } // !FBX
130 } // !Assimp
131
132 #endif
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXDocumentUtil.h
41 * @brief FBX internal utilities used by the DOM reading code
42 */
43 #ifndef INCLUDED_AI_FBX_DOCUMENT_UTIL_H
44 #define INCLUDED_AI_FBX_DOCUMENT_UTIL_H
45
46 namespace Assimp {
47 namespace FBX {
48 namespace Util {
49
50
51 /* DOM/Parse error reporting - does not return */
52 AI_WONT_RETURN void DOMError(const std::string& message, const Token& token) AI_WONT_RETURN_SUFFIX;
53 AI_WONT_RETURN void DOMError(const std::string& message, const Element* element = NULL) AI_WONT_RETURN_SUFFIX;
54
55 // does return
56 void DOMWarning(const std::string& message, const Token& token);
57 void DOMWarning(const std::string& message, const Element* element = NULL);
58
59
60 // fetch a property table and the corresponding property template
61 boost::shared_ptr<const PropertyTable> GetPropertyTable(const Document& doc,
62 const std::string& templateName,
63 const Element &element,
64 const Scope& sc,
65 bool no_warn = false);
66
67
68 // ------------------------------------------------------------------------------------------------
69 template <typename T>
70 inline const T* ProcessSimpleConnection(const Connection& con,
71 bool is_object_property_conn,
72 const char* name,
73 const Element& element,
74 const char** propNameOut = NULL)
75 {
76 if (is_object_property_conn && !con.PropertyName().length()) {
77 DOMWarning("expected incoming " + std::string(name) +
78 " link to be an object-object connection, ignoring",
79 &element
80 );
81 return NULL;
82 }
83 else if (!is_object_property_conn && con.PropertyName().length()) {
84 DOMWarning("expected incoming " + std::string(name) +
85 " link to be an object-property connection, ignoring",
86 &element
87 );
88 return NULL;
89 }
90
91 if(is_object_property_conn && propNameOut) {
92 // note: this is ok, the return value of PropertyValue() is guaranteed to
93 // remain valid and unchanged as long as the document exists.
94 *propNameOut = con.PropertyName().c_str();
95 }
96
97 const Object* const ob = con.SourceObject();
98 if(!ob) {
99 DOMWarning("failed to read source object for incoming" + std::string(name) +
100 " link, ignoring",
101 &element);
102 return NULL;
103 }
104
105 return dynamic_cast<const T*>(ob);
106 }
107
108
109 } //!Util
110 } //!FBX
111 } //!Assimp
112
113 #endif
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXImportSettings.h
41 * @brief FBX importer runtime configuration
42 */
43 #ifndef INCLUDED_AI_FBX_IMPORTSETTINGS_H
44 #define INCLUDED_AI_FBX_IMPORTSETTINGS_H
45
46 namespace Assimp {
47 namespace FBX {
48
49 /** FBX import settings, parts of which are publicly accessible via their corresponding AI_CONFIG constants */
50 struct ImportSettings
51 {
52 ImportSettings()
53 : strictMode(true)
54 , readAllLayers(true)
55 , readAllMaterials(false)
56 , readMaterials(true)
57 , readCameras(true)
58 , readLights(true)
59 , readAnimations(true)
60 , readWeights(true)
61 , preservePivots(true)
62 , optimizeEmptyAnimationCurves(true)
63 {}
64
65
66 /** enable strict mode:
67 * - only accept fbx 2012, 2013 files
68 * - on the slightest error, give up.
69 *
70 * Basically, strict mode means that the fbx file will actually
71 * be validated. Strict mode is off by default. */
72 bool strictMode;
73
74 /** specifies whether all geometry layers are read and scanned for
75 * usable data channels. The FBX spec indicates that many readers
76 * will only read the first channel and that this is in some way
77 * the recommended way- in reality, however, it happens a lot that
78 * vertex data is spread among multiple layers. The default
79 * value for this option is true.*/
80 bool readAllLayers;
81
82 /** specifies whether all materials are read, or only those that
83 * are referenced by at least one mesh. Reading all materials
84 * may make FBX reading a lot slower since all objects
85 * need to be processed .
86 * This bit is ignored unless readMaterials=true*/
87 bool readAllMaterials;
88
89
90 /** import materials (true) or skip them and assign a default
91 * material. The default value is true.*/
92 bool readMaterials;
93
94 /** import cameras? Default value is true.*/
95 bool readCameras;
96
97 /** import light sources? Default value is true.*/
98 bool readLights;
99
100 /** import animations (i.e. animation curves, the node
101 * skeleton is always imported). Default value is true. */
102 bool readAnimations;
103
104 /** read bones (vertex weights and deform info).
105 * Default value is true. */
106 bool readWeights;
107
108 /** preserve transformation pivots and offsets. Since these can
109 * not directly be represented in assimp, additional dummy
110 * nodes will be generated. Note that settings this to false
111 * can make animation import a lot slower. The default value
112 * is true.
113 *
114 * The naming scheme for the generated nodes is:
115 * <OriginalName>_$AssimpFbx$_<TransformName>
116 *
117 * where <TransformName> is one of
118 * RotationPivot
119 * RotationOffset
120 * PreRotation
121 * PostRotation
122 * ScalingPivot
123 * ScalingOffset
124 * Translation
125 * Scaling
126 * Rotation
127 **/
128 bool preservePivots;
129
130 /** do not import animation curves that specify a constant
131 * values matching the corresponding node transformation.
132 * The default value is true. */
133 bool optimizeEmptyAnimationCurves;
134 };
135
136
137 } // !FBX
138 } // !Assimp
139
140 #endif
141
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXImporter.cpp
41 * @brief Implementation of the FBX importer.
42 */
43 #include "AssimpPCH.h"
44
45 #ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
46
47 #include <exception>
48 #include <iterator>
49 #include <boost/tuple/tuple.hpp>
50
51 #include "FBXImporter.h"
52
53 #include "FBXTokenizer.h"
54 #include "FBXParser.h"
55 #include "FBXUtil.h"
56 #include "FBXDocument.h"
57 #include "FBXConverter.h"
58
59 #include "StreamReader.h"
60 #include "MemoryIOWrapper.h"
61
62 namespace Assimp {
63 template<> const std::string LogFunctions<FBXImporter>::log_prefix = "FBX: ";
64 }
65
66 using namespace Assimp;
67 using namespace Assimp::Formatter;
68 using namespace Assimp::FBX;
69
70 namespace {
71 static const aiImporterDesc desc = {
72 "Autodesk FBX Importer",
73 "",
74 "",
75 "",
76 aiImporterFlags_SupportTextFlavour,
77 0,
78 0,
79 0,
80 0,
81 "fbx"
82 };
83 }
84
85 // ------------------------------------------------------------------------------------------------
86 // Constructor to be privately used by #Importer
87 FBXImporter::FBXImporter()
88 {}
89
90 // ------------------------------------------------------------------------------------------------
91 // Destructor, private as well
92 FBXImporter::~FBXImporter()
93 {
94 }
95
96 // ------------------------------------------------------------------------------------------------
97 // Returns whether the class can handle the format of the given file.
98 bool FBXImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const
99 {
100 const std::string& extension = GetExtension(pFile);
101 if (extension == "fbx") {
102 return true;
103 }
104
105 else if ((!extension.length() || checkSig) && pIOHandler) {
106 // at least ascii FBX files usually have a 'FBX' somewhere in their head
107 const char* tokens[] = {"FBX"};
108 return SearchFileHeaderForToken(pIOHandler,pFile,tokens,1);
109 }
110 return false;
111 }
112
113 // ------------------------------------------------------------------------------------------------
114 // List all extensions handled by this loader
115 const aiImporterDesc* FBXImporter::GetInfo () const
116 {
117 return &desc;
118 }
119
120
121 // ------------------------------------------------------------------------------------------------
122 // Setup configuration properties for the loader
123 void FBXImporter::SetupProperties(const Importer* pImp)
124 {
125 settings.readAllLayers = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_ALL_GEOMETRY_LAYERS, true);
126 settings.readAllMaterials = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_ALL_MATERIALS, false);
127 settings.readMaterials = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_MATERIALS, true);
128 settings.readCameras = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_CAMERAS, true);
129 settings.readLights = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_LIGHTS, true);
130 settings.readAnimations = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_READ_ANIMATIONS, true);
131 settings.strictMode = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_STRICT_MODE, false);
132 settings.preservePivots = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_PRESERVE_PIVOTS, true);
133 settings.optimizeEmptyAnimationCurves = pImp->GetPropertyBool(AI_CONFIG_IMPORT_FBX_OPTIMIZE_EMPTY_ANIMATION_CURVES, true);
134 }
135
136
137 // ------------------------------------------------------------------------------------------------
138 // Imports the given file into the given scene structure.
139 void FBXImporter::InternReadFile( const std::string& pFile,
140 aiScene* pScene, IOSystem* pIOHandler)
141 {
142 boost::scoped_ptr<IOStream> stream(pIOHandler->Open(pFile,"rb"));
143 if (!stream) {
144 ThrowException("Could not open file for reading");
145 }
146
147 // read entire file into memory - no streaming for this, fbx
148 // files can grow large, but the assimp output data structure
149 // then becomes very large, too. Assimp doesn't support
150 // streaming for its output data structures so the net win with
151 // streaming input data would be very low.
152 std::vector<char> contents;
153 contents.resize(stream->FileSize());
154
155 stream->Read(&*contents.begin(),contents.size(),1);
156 const char* const begin = &*contents.begin();
157
158 // broadphase tokenizing pass in which we identify the core
159 // syntax elements of FBX (brackets, commas, key:value mappings)
160 TokenList tokens;
161 try {
162
163 bool is_binary = false;
164 if (!strncmp(begin,"Kaydara FBX Binary",18)) {
165 is_binary = true;
166 TokenizeBinary(tokens,begin,contents.size());
167 }
168 else {
169 Tokenize(tokens,begin);
170 }
171
172 // use this information to construct a very rudimentary
173 // parse-tree representing the FBX scope structure
174 Parser parser(tokens, is_binary);
175
176 // take the raw parse-tree and convert it to a FBX DOM
177 Document doc(parser,settings);
178
179 // convert the FBX DOM to aiScene
180 ConvertToAssimpScene(pScene,doc);
181 }
182 catch(std::exception&) {
183 std::for_each(tokens.begin(),tokens.end(),Util::delete_fun<Token>());
184 throw;
185 }
186 }
187
188 #endif // !ASSIMP_BUILD_NO_FBX_IMPORTER
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXImporter.h
41 * @brief Declaration of the FBX main importer class
42 */
43 #ifndef INCLUDED_AI_FBX_IMPORTER_H
44 #define INCLUDED_AI_FBX_IMPORTER_H
45
46 #include "BaseImporter.h"
47 #include "LogAux.h"
48
49 #include "FBXImportSettings.h"
50
51 namespace Assimp {
52
53 // TinyFormatter.h
54 namespace Formatter {
55 template <typename T,typename TR, typename A> class basic_formatter;
56 typedef class basic_formatter< char, std::char_traits<char>, std::allocator<char> > format;
57 }
58
59
60 // -------------------------------------------------------------------------------------------
61 /** Load the Autodesk FBX file format.
62
63 See http://en.wikipedia.org/wiki/FBX
64 */
65 // -------------------------------------------------------------------------------------------
66 class FBXImporter : public BaseImporter, public LogFunctions<FBXImporter>
67 {
68 public:
69 FBXImporter();
70 ~FBXImporter();
71
72
73 public:
74
75 // --------------------
76 bool CanRead( const std::string& pFile,
77 IOSystem* pIOHandler,
78 bool checkSig
79 ) const;
80
81 protected:
82
83 // --------------------
84 const aiImporterDesc* GetInfo () const;
85
86 // --------------------
87 void SetupProperties(const Importer* pImp);
88
89 // --------------------
90 void InternReadFile( const std::string& pFile,
91 aiScene* pScene,
92 IOSystem* pIOHandler
93 );
94
95 private:
96
97
98 private:
99
100 FBX::ImportSettings settings;
101
102 }; // !class FBXImporter
103
104 } // end of namespace Assimp
105 #endif // !INCLUDED_AI_FBX_IMPORTER_H
106
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXMaterial.cpp
41 * @brief Assimp::FBX::Material and Assimp::FBX::Texture implementation
42 */
43 #include "AssimpPCH.h"
44
45 #ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
46
47 #include "FBXParser.h"
48 #include "FBXDocument.h"
49 #include "FBXImporter.h"
50 #include "FBXImportSettings.h"
51 #include "FBXDocumentUtil.h"
52 #include "FBXProperties.h"
53
54 namespace Assimp {
55 namespace FBX {
56
57 using namespace Util;
58
59 // ------------------------------------------------------------------------------------------------
60 Material::Material(uint64_t id, const Element& element, const Document& doc, const std::string& name)
61 : Object(id,element,name)
62 {
63 const Scope& sc = GetRequiredScope(element);
64
65 const Element* const ShadingModel = sc["ShadingModel"];
66 const Element* const MultiLayer = sc["MultiLayer"];
67
68 if(MultiLayer) {
69 multilayer = !!ParseTokenAsInt(GetRequiredToken(*MultiLayer,0));
70 }
71
72 if(ShadingModel) {
73 shading = ParseTokenAsString(GetRequiredToken(*ShadingModel,0));
74 }
75 else {
76 DOMWarning("shading mode not specified, assuming phong",&element);
77 shading = "phong";
78 }
79
80 std::string templateName;
81
82 const char* const sh = shading.c_str();
83 if(!strcmp(sh,"phong")) {
84 templateName = "Material.FbxSurfacePhong";
85 }
86 else if(!strcmp(sh,"lambert")) {
87 templateName = "Material.FbxSurfaceLambert";
88 }
89 else {
90 DOMWarning("shading mode not recognized: " + shading,&element);
91 }
92
93 props = GetPropertyTable(doc,templateName,element,sc);
94
95 // resolve texture links
96 const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID());
97 BOOST_FOREACH(const Connection* con, conns) {
98
99 // texture link to properties, not objects
100 if (!con->PropertyName().length()) {
101 continue;
102 }
103
104 const Object* const ob = con->SourceObject();
105 if(!ob) {
106 DOMWarning("failed to read source object for texture link, ignoring",&element);
107 continue;
108 }
109
110 const Texture* const tex = dynamic_cast<const Texture*>(ob);
111 if(!tex) {
112 const LayeredTexture* const layeredTexture = dynamic_cast<const LayeredTexture*>(ob);
113 if(!layeredTexture) {
114 DOMWarning("source object for texture link is not a texture or layered texture, ignoring",&element);
115 continue;
116 }
117 const std::string& prop = con->PropertyName();
118 if (layeredTextures.find(prop) != layeredTextures.end()) {
119 DOMWarning("duplicate layered texture link: " + prop,&element);
120 }
121
122 layeredTextures[prop] = layeredTexture;
123 ((LayeredTexture*)layeredTexture)->fillTexture(doc);
124 }
125 else
126 {
127 const std::string& prop = con->PropertyName();
128 if (textures.find(prop) != textures.end()) {
129 DOMWarning("duplicate texture link: " + prop,&element);
130 }
131
132 textures[prop] = tex;
133 }
134
135 }
136 }
137
138
139 // ------------------------------------------------------------------------------------------------
140 Material::~Material()
141 {
142 }
143
144
145 // ------------------------------------------------------------------------------------------------
146 Texture::Texture(uint64_t id, const Element& element, const Document& doc, const std::string& name)
147 : Object(id,element,name)
148 , uvScaling(1.0f,1.0f)
149 {
150 const Scope& sc = GetRequiredScope(element);
151
152 const Element* const Type = sc["Type"];
153 const Element* const FileName = sc["FileName"];
154 const Element* const RelativeFilename = sc["RelativeFilename"];
155 const Element* const ModelUVTranslation = sc["ModelUVTranslation"];
156 const Element* const ModelUVScaling = sc["ModelUVScaling"];
157 const Element* const Texture_Alpha_Source = sc["Texture_Alpha_Source"];
158 const Element* const Cropping = sc["Cropping"];
159
160 if(Type) {
161 type = ParseTokenAsString(GetRequiredToken(*Type,0));
162 }
163
164 if(FileName) {
165 fileName = ParseTokenAsString(GetRequiredToken(*FileName,0));
166 }
167
168 if(RelativeFilename) {
169 relativeFileName = ParseTokenAsString(GetRequiredToken(*RelativeFilename,0));
170 }
171
172 if(ModelUVTranslation) {
173 uvTrans = aiVector2D(ParseTokenAsFloat(GetRequiredToken(*ModelUVTranslation,0)),
174 ParseTokenAsFloat(GetRequiredToken(*ModelUVTranslation,1))
175 );
176 }
177
178 if(ModelUVScaling) {
179 uvScaling = aiVector2D(ParseTokenAsFloat(GetRequiredToken(*ModelUVScaling,0)),
180 ParseTokenAsFloat(GetRequiredToken(*ModelUVScaling,1))
181 );
182 }
183
184 if(Cropping) {
185 crop[0] = ParseTokenAsInt(GetRequiredToken(*Cropping,0));
186 crop[1] = ParseTokenAsInt(GetRequiredToken(*Cropping,1));
187 crop[2] = ParseTokenAsInt(GetRequiredToken(*Cropping,2));
188 crop[3] = ParseTokenAsInt(GetRequiredToken(*Cropping,3));
189 }
190 else {
191 // vc8 doesn't support the crop() syntax in initialization lists
192 // (and vc9 WARNS about the new (i.e. compliant) behaviour).
193 crop[0] = crop[1] = crop[2] = crop[3] = 0;
194 }
195
196 if(Texture_Alpha_Source) {
197 alphaSource = ParseTokenAsString(GetRequiredToken(*Texture_Alpha_Source,0));
198 }
199
200 props = GetPropertyTable(doc,"Texture.FbxFileTexture",element,sc);
201 }
202
203
204 Texture::~Texture()
205 {
206
207 }
208
209 LayeredTexture::LayeredTexture(uint64_t id, const Element& element, const Document& doc, const std::string& name)
210 : Object(id,element,name)
211 ,texture(0)
212 ,blendMode(BlendMode_Modulate)
213 ,alpha(1)
214 {
215 const Scope& sc = GetRequiredScope(element);
216
217 const Element* const BlendModes = sc["BlendModes"];
218 const Element* const Alphas = sc["Alphas"];
219
220
221 if(BlendModes!=0)
222 {
223 blendMode = (BlendMode)ParseTokenAsInt(GetRequiredToken(*BlendModes,0));
224 }
225 if(Alphas!=0)
226 {
227 alpha = ParseTokenAsFloat(GetRequiredToken(*Alphas,0));
228 }
229 }
230
231 LayeredTexture::~LayeredTexture()
232 {
233
234 }
235
236 void LayeredTexture::fillTexture(const Document& doc)
237 {
238 const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID());
239 for(size_t i = 0; i < conns.size();++i)
240 {
241 const Connection* con = conns.at(i);
242
243 const Object* const ob = con->SourceObject();
244 if(!ob) {
245 DOMWarning("failed to read source object for texture link, ignoring",&element);
246 continue;
247 }
248
249 const Texture* const tex = dynamic_cast<const Texture*>(ob);
250
251 texture = tex;
252 }
253 }
254
255 } //!FBX
256 } //!Assimp
257
258 #endif
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXMeshGeometry.cpp
41 * @brief Assimp::FBX::MeshGeometry implementation
42 */
43 #include "AssimpPCH.h"
44
45 #ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
46
47 #include <functional>
48
49 #include "FBXParser.h"
50 #include "FBXDocument.h"
51 #include "FBXImporter.h"
52 #include "FBXImportSettings.h"
53 #include "FBXDocumentUtil.h"
54
55
56 namespace Assimp {
57 namespace FBX {
58
59 using namespace Util;
60
61
62 // ------------------------------------------------------------------------------------------------
63 Geometry::Geometry(uint64_t id, const Element& element, const std::string& name, const Document& doc)
64 : Object(id, element,name)
65 , skin()
66 {
67 const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID(),"Deformer");
68 BOOST_FOREACH(const Connection* con, conns) {
69 const Skin* const sk = ProcessSimpleConnection<Skin>(*con, false, "Skin -> Geometry", element);
70 if(sk) {
71 skin = sk;
72 break;
73 }
74 }
75 }
76
77
78 // ------------------------------------------------------------------------------------------------
79 Geometry::~Geometry()
80 {
81
82 }
83
84
85
86 // ------------------------------------------------------------------------------------------------
87 MeshGeometry::MeshGeometry(uint64_t id, const Element& element, const std::string& name, const Document& doc)
88 : Geometry(id, element,name, doc)
89 {
90 const Scope* sc = element.Compound();
91 if (!sc) {
92 DOMError("failed to read Geometry object (class: Mesh), no data scope found");
93 }
94
95 // must have Mesh elements:
96 const Element& Vertices = GetRequiredElement(*sc,"Vertices",&element);
97 const Element& PolygonVertexIndex = GetRequiredElement(*sc,"PolygonVertexIndex",&element);
98
99 // optional Mesh elements:
100 const ElementCollection& Layer = sc->GetCollection("Layer");
101
102 std::vector<aiVector3D> tempVerts;
103 ParseVectorDataArray(tempVerts,Vertices);
104
105 if(tempVerts.empty()) {
106 FBXImporter::LogWarn("encountered mesh with no vertices");
107 return;
108 }
109
110 std::vector<int> tempFaces;
111 ParseVectorDataArray(tempFaces,PolygonVertexIndex);
112
113 if(tempFaces.empty()) {
114 FBXImporter::LogWarn("encountered mesh with no faces");
115 return;
116 }
117
118 vertices.reserve(tempFaces.size());
119 faces.reserve(tempFaces.size() / 3);
120
121 mapping_offsets.resize(tempVerts.size());
122 mapping_counts.resize(tempVerts.size(),0);
123 mappings.resize(tempFaces.size());
124
125 const size_t vertex_count = tempVerts.size();
126
127 // generate output vertices, computing an adjacency table to
128 // preserve the mapping from fbx indices to *this* indexing.
129 unsigned int count = 0;
130 BOOST_FOREACH(int index, tempFaces) {
131 const int absi = index < 0 ? (-index - 1) : index;
132 if(static_cast<size_t>(absi) >= vertex_count) {
133 DOMError("polygon vertex index out of range",&PolygonVertexIndex);
134 }
135
136 vertices.push_back(tempVerts[absi]);
137 ++count;
138
139 ++mapping_counts[absi];
140
141 if (index < 0) {
142 faces.push_back(count);
143 count = 0;
144 }
145 }
146
147 unsigned int cursor = 0;
148 for (size_t i = 0, e = tempVerts.size(); i < e; ++i) {
149 mapping_offsets[i] = cursor;
150 cursor += mapping_counts[i];
151
152 mapping_counts[i] = 0;
153 }
154
155 cursor = 0;
156 BOOST_FOREACH(int index, tempFaces) {
157 const int absi = index < 0 ? (-index - 1) : index;
158 mappings[mapping_offsets[absi] + mapping_counts[absi]++] = cursor++;
159 }
160
161 // if settings.readAllLayers is true:
162 // * read all layers, try to load as many vertex channels as possible
163 // if settings.readAllLayers is false:
164 // * read only the layer with index 0, but warn about any further layers
165 for (ElementMap::const_iterator it = Layer.first; it != Layer.second; ++it) {
166 const TokenList& tokens = (*it).second->Tokens();
167
168 const char* err;
169 const int index = ParseTokenAsInt(*tokens[0], err);
170 if(err) {
171 DOMError(err,&element);
172 }
173
174 if(doc.Settings().readAllLayers || index == 0) {
175 const Scope& layer = GetRequiredScope(*(*it).second);
176 ReadLayer(layer);
177 }
178 else {
179 FBXImporter::LogWarn("ignoring additional geometry layers");
180 }
181 }
182 }
183
184
185 // ------------------------------------------------------------------------------------------------
186 MeshGeometry::~MeshGeometry()
187 {
188
189 }
190
191
192
193 // ------------------------------------------------------------------------------------------------
194 void MeshGeometry::ReadLayer(const Scope& layer)
195 {
196 const ElementCollection& LayerElement = layer.GetCollection("LayerElement");
197 for (ElementMap::const_iterator eit = LayerElement.first; eit != LayerElement.second; ++eit) {
198 const Scope& elayer = GetRequiredScope(*(*eit).second);
199
200 ReadLayerElement(elayer);
201 }
202 }
203
204
205 // ------------------------------------------------------------------------------------------------
206 void MeshGeometry::ReadLayerElement(const Scope& layerElement)
207 {
208 const Element& Type = GetRequiredElement(layerElement,"Type");
209 const Element& TypedIndex = GetRequiredElement(layerElement,"TypedIndex");
210
211 const std::string& type = ParseTokenAsString(GetRequiredToken(Type,0));
212 const int typedIndex = ParseTokenAsInt(GetRequiredToken(TypedIndex,0));
213
214 const Scope& top = GetRequiredScope(element);
215 const ElementCollection candidates = top.GetCollection(type);
216
217 for (ElementMap::const_iterator it = candidates.first; it != candidates.second; ++it) {
218 const int index = ParseTokenAsInt(GetRequiredToken(*(*it).second,0));
219 if(index == typedIndex) {
220 ReadVertexData(type,typedIndex,GetRequiredScope(*(*it).second));
221 return;
222 }
223 }
224
225 FBXImporter::LogError(Formatter::format("failed to resolve vertex layer element: ")
226 << type << ", index: " << typedIndex);
227 }
228
229
230 // ------------------------------------------------------------------------------------------------
231 void MeshGeometry::ReadVertexData(const std::string& type, int index, const Scope& source)
232 {
233 const std::string& MappingInformationType = ParseTokenAsString(GetRequiredToken(
234 GetRequiredElement(source,"MappingInformationType"),0)
235 );
236
237 const std::string& ReferenceInformationType = ParseTokenAsString(GetRequiredToken(
238 GetRequiredElement(source,"ReferenceInformationType"),0)
239 );
240
241 if (type == "LayerElementUV") {
242 if(index >= AI_MAX_NUMBER_OF_TEXTURECOORDS) {
243 FBXImporter::LogError(Formatter::format("ignoring UV layer, maximum number of UV channels exceeded: ")
244 << index << " (limit is " << AI_MAX_NUMBER_OF_TEXTURECOORDS << ")" );
245 return;
246 }
247
248 const Element* Name = source["Name"];
249 uvNames[index] = "";
250 if(Name) {
251 uvNames[index] = ParseTokenAsString(GetRequiredToken(*Name,0));
252 }
253
254 ReadVertexDataUV(uvs[index],source,
255 MappingInformationType,
256 ReferenceInformationType
257 );
258 }
259 else if (type == "LayerElementMaterial") {
260 if (materials.size() > 0) {
261 FBXImporter::LogError("ignoring additional material layer");
262 return;
263 }
264
265 std::vector<int> temp_materials;
266
267 ReadVertexDataMaterials(temp_materials,source,
268 MappingInformationType,
269 ReferenceInformationType
270 );
271
272 // sometimes, there will be only negative entries. Drop the material
273 // layer in such a case (I guess it means a default material should
274 // be used). This is what the converter would do anyway, and it
275 // avoids loosing the material if there are more material layers
276 // coming of which at least one contains actual data (did observe
277 // that with one test file).
278 const size_t count_neg = std::count_if(temp_materials.begin(),temp_materials.end(),std::bind2nd(std::less<int>(),0));
279 if(count_neg == temp_materials.size()) {
280 FBXImporter::LogWarn("ignoring dummy material layer (all entries -1)");
281 return;
282 }
283
284 std::swap(temp_materials, materials);
285 }
286 else if (type == "LayerElementNormal") {
287 if (normals.size() > 0) {
288 FBXImporter::LogError("ignoring additional normal layer");
289 return;
290 }
291
292 ReadVertexDataNormals(normals,source,
293 MappingInformationType,
294 ReferenceInformationType
295 );
296 }
297 else if (type == "LayerElementTangent") {
298 if (tangents.size() > 0) {
299 FBXImporter::LogError("ignoring additional tangent layer");
300 return;
301 }
302
303 ReadVertexDataTangents(tangents,source,
304 MappingInformationType,
305 ReferenceInformationType
306 );
307 }
308 else if (type == "LayerElementBinormal") {
309 if (binormals.size() > 0) {
310 FBXImporter::LogError("ignoring additional binormal layer");
311 return;
312 }
313
314 ReadVertexDataBinormals(binormals,source,
315 MappingInformationType,
316 ReferenceInformationType
317 );
318 }
319 else if (type == "LayerElementColor") {
320 if(index >= AI_MAX_NUMBER_OF_COLOR_SETS) {
321 FBXImporter::LogError(Formatter::format("ignoring vertex color layer, maximum number of color sets exceeded: ")
322 << index << " (limit is " << AI_MAX_NUMBER_OF_COLOR_SETS << ")" );
323 return;
324 }
325
326 ReadVertexDataColors(colors[index],source,
327 MappingInformationType,
328 ReferenceInformationType
329 );
330 }
331 }
332
333
334 // ------------------------------------------------------------------------------------------------
335 // Lengthy utility function to read and resolve a FBX vertex data array - that is, the
336 // output is in polygon vertex order. This logic is used for reading normals, UVs, colors,
337 // tangents ..
338 template <typename T>
339 void ResolveVertexDataArray(std::vector<T>& data_out, const Scope& source,
340 const std::string& MappingInformationType,
341 const std::string& ReferenceInformationType,
342 const char* dataElementName,
343 const char* indexDataElementName,
344 size_t vertex_count,
345 const std::vector<unsigned int>& mapping_counts,
346 const std::vector<unsigned int>& mapping_offsets,
347 const std::vector<unsigned int>& mappings)
348 {
349 std::vector<T> tempUV;
350 ParseVectorDataArray(tempUV,GetRequiredElement(source,dataElementName));
351
352 // handle permutations of Mapping and Reference type - it would be nice to
353 // deal with this more elegantly and with less redundancy, but right
354 // now it seems unavoidable.
355 if (MappingInformationType == "ByVertice" && ReferenceInformationType == "Direct") {
356 data_out.resize(vertex_count);
357 for (size_t i = 0, e = tempUV.size(); i < e; ++i) {
358
359 const unsigned int istart = mapping_offsets[i], iend = istart + mapping_counts[i];
360 for (unsigned int j = istart; j < iend; ++j) {
361 data_out[mappings[j]] = tempUV[i];
362 }
363 }
364 }
365 else if (MappingInformationType == "ByVertice" && ReferenceInformationType == "IndexToDirect") {
366 data_out.resize(vertex_count);
367
368 std::vector<int> uvIndices;
369 ParseVectorDataArray(uvIndices,GetRequiredElement(source,indexDataElementName));
370
371 for (size_t i = 0, e = uvIndices.size(); i < e; ++i) {
372
373 const unsigned int istart = mapping_offsets[i], iend = istart + mapping_counts[i];
374 for (unsigned int j = istart; j < iend; ++j) {
375 if(static_cast<size_t>(uvIndices[i]) >= tempUV.size()) {
376 DOMError("index out of range",&GetRequiredElement(source,indexDataElementName));
377 }
378 data_out[mappings[j]] = tempUV[uvIndices[i]];
379 }
380 }
381 }
382 else if (MappingInformationType == "ByPolygonVertex" && ReferenceInformationType == "Direct") {
383 if (tempUV.size() != vertex_count) {
384 FBXImporter::LogError(Formatter::format("length of input data unexpected for ByPolygon mapping: ")
385 << tempUV.size() << ", expected " << vertex_count
386 );
387 return;
388 }
389
390 data_out.swap(tempUV);
391 }
392 else if (MappingInformationType == "ByPolygonVertex" && ReferenceInformationType == "IndexToDirect") {
393 data_out.resize(vertex_count);
394
395 std::vector<int> uvIndices;
396 ParseVectorDataArray(uvIndices,GetRequiredElement(source,indexDataElementName));
397
398 if (uvIndices.size() != vertex_count) {
399 FBXImporter::LogError("length of input data unexpected for ByPolygonVertex mapping");
400 return;
401 }
402
403 unsigned int next = 0;
404 BOOST_FOREACH(int i, uvIndices) {
405 if(static_cast<size_t>(i) >= tempUV.size()) {
406 DOMError("index out of range",&GetRequiredElement(source,indexDataElementName));
407 }
408
409 data_out[next++] = tempUV[i];
410 }
411 }
412 else {
413 FBXImporter::LogError(Formatter::format("ignoring vertex data channel, access type not implemented: ")
414 << MappingInformationType << "," << ReferenceInformationType);
415 }
416 }
417
418 // ------------------------------------------------------------------------------------------------
419 void MeshGeometry::ReadVertexDataNormals(std::vector<aiVector3D>& normals_out, const Scope& source,
420 const std::string& MappingInformationType,
421 const std::string& ReferenceInformationType)
422 {
423 ResolveVertexDataArray(normals_out,source,MappingInformationType,ReferenceInformationType,
424 "Normals",
425 "NormalsIndex",
426 vertices.size(),
427 mapping_counts,
428 mapping_offsets,
429 mappings);
430 }
431
432
433 // ------------------------------------------------------------------------------------------------
434 void MeshGeometry::ReadVertexDataUV(std::vector<aiVector2D>& uv_out, const Scope& source,
435 const std::string& MappingInformationType,
436 const std::string& ReferenceInformationType)
437 {
438 ResolveVertexDataArray(uv_out,source,MappingInformationType,ReferenceInformationType,
439 "UV",
440 "UVIndex",
441 vertices.size(),
442 mapping_counts,
443 mapping_offsets,
444 mappings);
445 }
446
447
448 // ------------------------------------------------------------------------------------------------
449 void MeshGeometry::ReadVertexDataColors(std::vector<aiColor4D>& colors_out, const Scope& source,
450 const std::string& MappingInformationType,
451 const std::string& ReferenceInformationType)
452 {
453 ResolveVertexDataArray(colors_out,source,MappingInformationType,ReferenceInformationType,
454 "Colors",
455 "ColorIndex",
456 vertices.size(),
457 mapping_counts,
458 mapping_offsets,
459 mappings);
460 }
461
462
463 // ------------------------------------------------------------------------------------------------
464 void MeshGeometry::ReadVertexDataTangents(std::vector<aiVector3D>& tangents_out, const Scope& source,
465 const std::string& MappingInformationType,
466 const std::string& ReferenceInformationType)
467 {
468 ResolveVertexDataArray(tangents_out,source,MappingInformationType,ReferenceInformationType,
469 "Tangent",
470 "TangentIndex",
471 vertices.size(),
472 mapping_counts,
473 mapping_offsets,
474 mappings);
475 }
476
477
478 // ------------------------------------------------------------------------------------------------
479 void MeshGeometry::ReadVertexDataBinormals(std::vector<aiVector3D>& binormals_out, const Scope& source,
480 const std::string& MappingInformationType,
481 const std::string& ReferenceInformationType)
482 {
483 ResolveVertexDataArray(binormals_out,source,MappingInformationType,ReferenceInformationType,
484 "Binormal",
485 "BinormalIndex",
486 vertices.size(),
487 mapping_counts,
488 mapping_offsets,
489 mappings);
490 }
491
492
493 // ------------------------------------------------------------------------------------------------
494 void MeshGeometry::ReadVertexDataMaterials(std::vector<int>& materials_out, const Scope& source,
495 const std::string& MappingInformationType,
496 const std::string& ReferenceInformationType)
497 {
498 const size_t face_count = faces.size();
499 ai_assert(face_count);
500
501 // materials are handled separately. First of all, they are assigned per-face
502 // and not per polyvert. Secondly, ReferenceInformationType=IndexToDirect
503 // has a slightly different meaning for materials.
504 ParseVectorDataArray(materials_out,GetRequiredElement(source,"Materials"));
505
506 if (MappingInformationType == "AllSame") {
507 // easy - same material for all faces
508 if (materials_out.empty()) {
509 FBXImporter::LogError(Formatter::format("expected material index, ignoring"));
510 return;
511 }
512 else if (materials_out.size() > 1) {
513 FBXImporter::LogWarn(Formatter::format("expected only a single material index, ignoring all except the first one"));
514 materials_out.clear();
515 }
516
517 materials.assign(vertices.size(),materials_out[0]);
518 }
519 else if (MappingInformationType == "ByPolygon" && ReferenceInformationType == "IndexToDirect") {
520 materials.resize(face_count);
521
522 if(materials_out.size() != face_count) {
523 FBXImporter::LogError(Formatter::format("length of input data unexpected for ByPolygon mapping: ")
524 << materials_out.size() << ", expected " << face_count
525 );
526 return;
527 }
528 }
529 else {
530 FBXImporter::LogError(Formatter::format("ignoring material assignments, access type not implemented: ")
531 << MappingInformationType << "," << ReferenceInformationType);
532 }
533 }
534
535 } // !FBX
536 } // !Assimp
537
538 #endif
539
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXModel.cpp
41 * @brief Assimp::FBX::Model implementation
42 */
43 #include "AssimpPCH.h"
44
45 #ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
46
47 #include "FBXParser.h"
48 #include "FBXDocument.h"
49 #include "FBXImporter.h"
50 #include "FBXImportSettings.h"
51 #include "FBXDocumentUtil.h"
52 #include "FBXProperties.h"
53
54 namespace Assimp {
55 namespace FBX {
56
57 using namespace Util;
58
59 // ------------------------------------------------------------------------------------------------
60 Model::Model(uint64_t id, const Element& element, const Document& doc, const std::string& name)
61 : Object(id,element,name)
62 , shading("Y")
63 {
64 const Scope& sc = GetRequiredScope(element);
65 const Element* const Shading = sc["Shading"];
66 const Element* const Culling = sc["Culling"];
67
68 if(Shading) {
69 shading = GetRequiredToken(*Shading,0).StringContents();
70 }
71
72 if (Culling) {
73 culling = ParseTokenAsString(GetRequiredToken(*Culling,0));
74 }
75
76 props = GetPropertyTable(doc,"Model.FbxNode",element,sc);
77 ResolveLinks(element,doc);
78 }
79
80
81 // ------------------------------------------------------------------------------------------------
82 Model::~Model()
83 {
84
85 }
86
87
88 // ------------------------------------------------------------------------------------------------
89 void Model::ResolveLinks(const Element& element, const Document& doc)
90 {
91 const char* const arr[] = {"Geometry","Material","NodeAttribute"};
92
93 // resolve material
94 const std::vector<const Connection*>& conns = doc.GetConnectionsByDestinationSequenced(ID(),arr, 3);
95
96 materials.reserve(conns.size());
97 geometry.reserve(conns.size());
98 attributes.reserve(conns.size());
99 BOOST_FOREACH(const Connection* con, conns) {
100
101 // material and geometry links should be Object-Object connections
102 if (con->PropertyName().length()) {
103 continue;
104 }
105
106 const Object* const ob = con->SourceObject();
107 if(!ob) {
108 DOMWarning("failed to read source object for incoming Model link, ignoring",&element);
109 continue;
110 }
111
112 const Material* const mat = dynamic_cast<const Material*>(ob);
113 if(mat) {
114 materials.push_back(mat);
115 continue;
116 }
117
118 const Geometry* const geo = dynamic_cast<const Geometry*>(ob);
119 if(geo) {
120 geometry.push_back(geo);
121 continue;
122 }
123
124 const NodeAttribute* const att = dynamic_cast<const NodeAttribute*>(ob);
125 if(att) {
126 attributes.push_back(att);
127 continue;
128 }
129
130 DOMWarning("source object for model link is neither Material, NodeAttribute nor Geometry, ignoring",&element);
131 continue;
132 }
133 }
134
135
136 // ------------------------------------------------------------------------------------------------
137 bool Model::IsNull() const
138 {
139 const std::vector<const NodeAttribute*>& attrs = GetAttributes();
140 BOOST_FOREACH(const NodeAttribute* att, attrs) {
141
142 const Null* null_tag = dynamic_cast<const Null*>(att);
143 if(null_tag) {
144 return true;
145 }
146 }
147
148 return false;
149 }
150
151
152 } //!FBX
153 } //!Assimp
154
155 #endif
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXNoteAttribute.cpp
41 * @brief Assimp::FBX::NodeAttribute (and subclasses) implementation
42 */
43 #include "AssimpPCH.h"
44
45 #ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
46
47 #include "FBXParser.h"
48 #include "FBXDocument.h"
49 #include "FBXImporter.h"
50 #include "FBXImportSettings.h"
51 #include "FBXDocumentUtil.h"
52 #include "FBXProperties.h"
53
54 namespace Assimp {
55 namespace FBX {
56
57 using namespace Util;
58
59 // ------------------------------------------------------------------------------------------------
60 NodeAttribute::NodeAttribute(uint64_t id, const Element& element, const Document& doc, const std::string& name)
61 : Object(id,element,name)
62 {
63 const Scope& sc = GetRequiredScope(element);
64
65 const std::string& classname = ParseTokenAsString(GetRequiredToken(element,2));
66
67 // hack on the deriving type but Null/LimbNode attributes are the only case in which
68 // the property table is by design absent and no warning should be generated
69 // for it.
70 const bool is_null_or_limb = !strcmp(classname.c_str(), "Null") || !strcmp(classname.c_str(), "LimbNode");
71 props = GetPropertyTable(doc,"NodeAttribute.Fbx" + classname,element,sc, is_null_or_limb);
72 }
73
74
75 // ------------------------------------------------------------------------------------------------
76 NodeAttribute::~NodeAttribute()
77 {
78
79 }
80
81
82 // ------------------------------------------------------------------------------------------------
83 CameraSwitcher::CameraSwitcher(uint64_t id, const Element& element, const Document& doc, const std::string& name)
84 : NodeAttribute(id,element,doc,name)
85 {
86 const Scope& sc = GetRequiredScope(element);
87 const Element* const CameraId = sc["CameraId"];
88 const Element* const CameraName = sc["CameraName"];
89 const Element* const CameraIndexName = sc["CameraIndexName"];
90
91 if(CameraId) {
92 cameraId = ParseTokenAsInt(GetRequiredToken(*CameraId,0));
93 }
94
95 if(CameraName) {
96 cameraName = GetRequiredToken(*CameraName,0).StringContents();
97 }
98
99 if(CameraIndexName && CameraIndexName->Tokens().size()) {
100 cameraIndexName = GetRequiredToken(*CameraIndexName,0).StringContents();
101 }
102 }
103
104
105 // ------------------------------------------------------------------------------------------------
106 CameraSwitcher::~CameraSwitcher()
107 {
108
109 }
110
111
112 // ------------------------------------------------------------------------------------------------
113 Camera::Camera(uint64_t id, const Element& element, const Document& doc, const std::string& name)
114 : NodeAttribute(id,element,doc,name)
115 {
116
117 }
118
119
120 // ------------------------------------------------------------------------------------------------
121 Camera::~Camera()
122 {
123 }
124
125
126 // ------------------------------------------------------------------------------------------------
127 Light::Light(uint64_t id, const Element& element, const Document& doc, const std::string& name)
128 : NodeAttribute(id,element,doc,name)
129 {
130
131 }
132
133
134 // ------------------------------------------------------------------------------------------------
135 Light::~Light()
136 {
137 }
138
139
140 // ------------------------------------------------------------------------------------------------
141 Null::Null(uint64_t id, const Element& element, const Document& doc, const std::string& name)
142 : NodeAttribute(id,element,doc,name)
143 {
144
145 }
146
147
148 // ------------------------------------------------------------------------------------------------
149 Null::~Null()
150 {
151
152 }
153
154
155 // ------------------------------------------------------------------------------------------------
156 LimbNode::LimbNode(uint64_t id, const Element& element, const Document& doc, const std::string& name)
157 : NodeAttribute(id,element,doc,name)
158 {
159
160 }
161
162
163 // ------------------------------------------------------------------------------------------------
164 LimbNode::~LimbNode()
165 {
166
167 }
168
169 }
170 }
171
172 #endif
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXParser.cpp
41 * @brief Implementation of the FBX parser and the rudimentary DOM that we use
42 */
43 #include "AssimpPCH.h"
44
45 #ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
46
47
48 #ifdef ASSIMP_BUILD_NO_OWN_ZLIB
49 # include <zlib.h>
50 #else
51 # include "../contrib/zlib/zlib.h"
52 #endif
53
54
55 #include "FBXTokenizer.h"
56 #include "FBXParser.h"
57 #include "FBXUtil.h"
58
59 #include "ParsingUtils.h"
60 #include "fast_atof.h"
61
62 using namespace Assimp;
63 using namespace Assimp::FBX;
64
65 namespace {
66
67
68 // ------------------------------------------------------------------------------------------------
69 // signal parse error, this is always unrecoverable. Throws DeadlyImportError.
70 void ParseError(const std::string& message, const Token& token)
71 {
72 throw DeadlyImportError(Util::AddTokenText("FBX-Parser",message,&token));
73 }
74
75 // ------------------------------------------------------------------------------------------------
76 void ParseError(const std::string& message, const Element* element = NULL)
77 {
78 if(element) {
79 ParseError(message,element->KeyToken());
80 }
81 throw DeadlyImportError("FBX-Parser " + message);
82 }
83
84
85 // ------------------------------------------------------------------------------------------------
86 // print warning, do return
87 void ParseWarning(const std::string& message, const Token& token)
88 {
89 if(DefaultLogger::get()) {
90 DefaultLogger::get()->warn(Util::AddTokenText("FBX-Parser",message,&token));
91 }
92 }
93
94 // ------------------------------------------------------------------------------------------------
95 void ParseWarning(const std::string& message, const Element* element = NULL)
96 {
97 if(element) {
98 ParseWarning(message,element->KeyToken());
99 return;
100 }
101 if(DefaultLogger::get()) {
102 DefaultLogger::get()->warn("FBX-Parser: " + message);
103 }
104 }
105
106 // ------------------------------------------------------------------------------------------------
107 void ParseError(const std::string& message, TokenPtr token)
108 {
109 if(token) {
110 ParseError(message, *token);
111 }
112 ParseError(message);
113 }
114
115 }
116
117 namespace Assimp {
118 namespace FBX {
119
120 // ------------------------------------------------------------------------------------------------
121 Element::Element(const Token& key_token, Parser& parser)
122 : key_token(key_token)
123 {
124 TokenPtr n = NULL;
125 do {
126 n = parser.AdvanceToNextToken();
127 if(!n) {
128 ParseError("unexpected end of file, expected closing bracket",parser.LastToken());
129 }
130
131 if (n->Type() == TokenType_DATA) {
132 tokens.push_back(n);
133
134 n = parser.AdvanceToNextToken();
135 if(!n) {
136 ParseError("unexpected end of file, expected bracket, comma or key",parser.LastToken());
137 }
138
139 const TokenType ty = n->Type();
140 if (ty != TokenType_OPEN_BRACKET && ty != TokenType_CLOSE_BRACKET && ty != TokenType_COMMA && ty != TokenType_KEY) {
141 ParseError("unexpected token; expected bracket, comma or key",n);
142 }
143 }
144
145 if (n->Type() == TokenType_OPEN_BRACKET) {
146 compound.reset(new Scope(parser));
147
148 // current token should be a TOK_CLOSE_BRACKET
149 n = parser.CurrentToken();
150 ai_assert(n);
151
152 if (n->Type() != TokenType_CLOSE_BRACKET) {
153 ParseError("expected closing bracket",n);
154 }
155
156 parser.AdvanceToNextToken();
157 return;
158 }
159 }
160 while(n->Type() != TokenType_KEY && n->Type() != TokenType_CLOSE_BRACKET);
161 }
162
163 // ------------------------------------------------------------------------------------------------
164 Element::~Element()
165 {
166 // no need to delete tokens, they are owned by the parser
167 }
168
169 // ------------------------------------------------------------------------------------------------
170 Scope::Scope(Parser& parser,bool topLevel)
171 {
172 if(!topLevel) {
173 TokenPtr t = parser.CurrentToken();
174 if (t->Type() != TokenType_OPEN_BRACKET) {
175 ParseError("expected open bracket",t);
176 }
177 }
178
179 TokenPtr n = parser.AdvanceToNextToken();
180 if(n == NULL) {
181 ParseError("unexpected end of file");
182 }
183
184 // note: empty scopes are allowed
185 while(n->Type() != TokenType_CLOSE_BRACKET) {
186 if (n->Type() != TokenType_KEY) {
187 ParseError("unexpected token, expected TOK_KEY",n);
188 }
189
190 const std::string& str = n->StringContents();
191 elements.insert(ElementMap::value_type(str,new_Element(*n,parser)));
192
193 // Element() should stop at the next Key token (or right after a Close token)
194 n = parser.CurrentToken();
195 if(n == NULL) {
196 if (topLevel) {
197 return;
198 }
199 ParseError("unexpected end of file",parser.LastToken());
200 }
201 }
202 }
203
204 // ------------------------------------------------------------------------------------------------
205 Scope::~Scope()
206 {
207 BOOST_FOREACH(ElementMap::value_type& v, elements) {
208 delete v.second;
209 }
210 }
211
212
213 // ------------------------------------------------------------------------------------------------
214 Parser::Parser (const TokenList& tokens, bool is_binary)
215 : tokens(tokens)
216 , last()
217 , current()
218 , cursor(tokens.begin())
219 , is_binary(is_binary)
220 {
221 root.reset(new Scope(*this,true));
222 }
223
224
225 // ------------------------------------------------------------------------------------------------
226 Parser::~Parser()
227 {
228 }
229
230
231 // ------------------------------------------------------------------------------------------------
232 TokenPtr Parser::AdvanceToNextToken()
233 {
234 last = current;
235 if (cursor == tokens.end()) {
236 current = NULL;
237 }
238 else {
239 current = *cursor++;
240 }
241 return current;
242 }
243
244
245 // ------------------------------------------------------------------------------------------------
246 TokenPtr Parser::CurrentToken() const
247 {
248 return current;
249 }
250
251
252 // ------------------------------------------------------------------------------------------------
253 TokenPtr Parser::LastToken() const
254 {
255 return last;
256 }
257
258
259 // ------------------------------------------------------------------------------------------------
260 uint64_t ParseTokenAsID(const Token& t, const char*& err_out)
261 {
262 err_out = NULL;
263
264 if (t.Type() != TokenType_DATA) {
265 err_out = "expected TOK_DATA token";
266 return 0L;
267 }
268
269 if(t.IsBinary())
270 {
271 const char* data = t.begin();
272 if (data[0] != 'L') {
273 err_out = "failed to parse ID, unexpected data type, expected L(ong) (binary)";
274 return 0L;
275 }
276
277 ai_assert(t.end() - data == 9);
278
279 BE_NCONST uint64_t id = *reinterpret_cast<const uint64_t*>(data+1);
280 AI_SWAP8(id);
281 return id;
282 }
283
284 // XXX: should use size_t here
285 unsigned int length = static_cast<unsigned int>(t.end() - t.begin());
286 ai_assert(length > 0);
287
288 const char* out;
289 const uint64_t id = strtoul10_64(t.begin(),&out,&length);
290 if (out > t.end()) {
291 err_out = "failed to parse ID (text)";
292 return 0L;
293 }
294
295 return id;
296 }
297
298
299 // ------------------------------------------------------------------------------------------------
300 size_t ParseTokenAsDim(const Token& t, const char*& err_out)
301 {
302 // same as ID parsing, except there is a trailing asterisk
303 err_out = NULL;
304
305 if (t.Type() != TokenType_DATA) {
306 err_out = "expected TOK_DATA token";
307 return 0;
308 }
309
310 if(t.IsBinary())
311 {
312 const char* data = t.begin();
313 if (data[0] != 'L') {
314 err_out = "failed to parse ID, unexpected data type, expected L(ong) (binary)";
315 return 0;
316 }
317
318 ai_assert(t.end() - data == 9);
319 BE_NCONST uint64_t id = *reinterpret_cast<const uint64_t*>(data+1);
320 AI_SWAP8(id);
321 return static_cast<size_t>(id);
322 }
323
324 if(*t.begin() != '*') {
325 err_out = "expected asterisk before array dimension";
326 return 0;
327 }
328
329 // XXX: should use size_t here
330 unsigned int length = static_cast<unsigned int>(t.end() - t.begin());
331 if(length == 0) {
332 err_out = "expected valid integer number after asterisk";
333 return 0;
334 }
335
336 const char* out;
337 const size_t id = static_cast<size_t>(strtoul10_64(t.begin() + 1,&out,&length));
338 if (out > t.end()) {
339 err_out = "failed to parse ID";
340 return 0;
341 }
342
343 return id;
344 }
345
346
347 // ------------------------------------------------------------------------------------------------
348 float ParseTokenAsFloat(const Token& t, const char*& err_out)
349 {
350 err_out = NULL;
351
352 if (t.Type() != TokenType_DATA) {
353 err_out = "expected TOK_DATA token";
354 return 0.0f;
355 }
356
357 if(t.IsBinary())
358 {
359 const char* data = t.begin();
360 if (data[0] != 'F' && data[0] != 'D') {
361 err_out = "failed to parse F(loat) or D(ouble), unexpected data type (binary)";
362 return 0.0f;
363 }
364
365 if (data[0] == 'F') {
366 // Actual size validation happens during Tokenization so
367 // this is valid as an assertion.
368 ai_assert(t.end() - data == sizeof(float) + 1);
369 // Initially, we did reinterpret_cast, breaking strict aliasing rules.
370 // This actually caused trouble on Android, so let's be safe this time.
371 // https://github.com/assimp/assimp/issues/24
372
373 float out_float;
374 ::memcpy(&out_float, data+1, sizeof(float));
375 return out_float;
376 }
377 else {
378 ai_assert(t.end() - data == sizeof(double) + 1);
379
380 // Same
381 double out_double;
382 ::memcpy(&out_double, data+1, sizeof(double));
383 return static_cast<float>(out_double);
384 }
385 }
386
387 // need to copy the input string to a temporary buffer
388 // first - next in the fbx token stream comes ',',
389 // which fast_atof could interpret as decimal point.
390 #define MAX_FLOAT_LENGTH 31
391 char temp[MAX_FLOAT_LENGTH + 1];
392 const size_t length = static_cast<size_t>(t.end()-t.begin());
393 std::copy(t.begin(),t.end(),temp);
394 temp[std::min(static_cast<size_t>(MAX_FLOAT_LENGTH),length)] = '\0';
395
396 return fast_atof(temp);
397 }
398
399
400 // ------------------------------------------------------------------------------------------------
401 int ParseTokenAsInt(const Token& t, const char*& err_out)
402 {
403 err_out = NULL;
404
405 if (t.Type() != TokenType_DATA) {
406 err_out = "expected TOK_DATA token";
407 return 0;
408 }
409
410 if(t.IsBinary())
411 {
412 const char* data = t.begin();
413 if (data[0] != 'I') {
414 err_out = "failed to parse I(nt), unexpected data type (binary)";
415 return 0;
416 }
417
418 ai_assert(t.end() - data == 5);
419 BE_NCONST int32_t ival = *reinterpret_cast<const int32_t*>(data+1);
420 AI_SWAP4(ival);
421 return static_cast<int>(ival);
422 }
423
424 ai_assert(static_cast<size_t>(t.end() - t.begin()) > 0);
425
426 const char* out;
427 const int intval = strtol10(t.begin(),&out);
428 if (out != t.end()) {
429 err_out = "failed to parse ID";
430 return 0;
431 }
432
433 return intval;
434 }
435
436
437 // ------------------------------------------------------------------------------------------------
438 std::string ParseTokenAsString(const Token& t, const char*& err_out)
439 {
440 err_out = NULL;
441
442 if (t.Type() != TokenType_DATA) {
443 err_out = "expected TOK_DATA token";
444 return "";
445 }
446
447 if(t.IsBinary())
448 {
449 const char* data = t.begin();
450 if (data[0] != 'S') {
451 err_out = "failed to parse S(tring), unexpected data type (binary)";
452 return "";
453 }
454
455 ai_assert(t.end() - data >= 5);
456
457 // read string length
458 BE_NCONST int32_t len = *reinterpret_cast<const int32_t*>(data+1);
459 AI_SWAP4(len);
460
461 ai_assert(t.end() - data == 5 + len);
462 return std::string(data + 5, len);
463 }
464
465 const size_t length = static_cast<size_t>(t.end() - t.begin());
466 if(length < 2) {
467 err_out = "token is too short to hold a string";
468 return "";
469 }
470
471 const char* s = t.begin(), *e = t.end() - 1;
472 if (*s != '\"' || *e != '\"') {
473 err_out = "expected double quoted string";
474 return "";
475 }
476
477 return std::string(s+1,length-2);
478 }
479
480
481 namespace {
482
483 // ------------------------------------------------------------------------------------------------
484 // read the type code and element count of a binary data array and stop there
485 void ReadBinaryDataArrayHead(const char*& data, const char* end, char& type, uint32_t& count,
486 const Element& el)
487 {
488 if (static_cast<size_t>(end-data) < 5) {
489 ParseError("binary data array is too short, need five (5) bytes for type signature and element count",&el);
490 }
491
492 // data type
493 type = *data;
494
495 // read number of elements
496 BE_NCONST uint32_t len = *reinterpret_cast<const uint32_t*>(data+1);
497 AI_SWAP4(len);
498
499 count = len;
500 data += 5;
501 }
502
503
504 // ------------------------------------------------------------------------------------------------
505 // read binary data array, assume cursor points to the 'compression mode' field (i.e. behind the header)
506 void ReadBinaryDataArray(char type, uint32_t count, const char*& data, const char* end,
507 std::vector<char>& buff,
508 const Element& el)
509 {
510 ai_assert(static_cast<size_t>(end-data) >= 4); // runtime check for this happens at tokenization stage
511
512 BE_NCONST uint32_t encmode = *reinterpret_cast<const uint32_t*>(data);
513 AI_SWAP4(encmode);
514 data += 4;
515
516 // next comes the compressed length
517 BE_NCONST uint32_t comp_len = *reinterpret_cast<const uint32_t*>(data);
518 AI_SWAP4(comp_len);
519 data += 4;
520
521 ai_assert(data + comp_len == end);
522
523 // determine the length of the uncompressed data by looking at the type signature
524 uint32_t stride = 0;
525 switch(type)
526 {
527 case 'f':
528 case 'i':
529 stride = 4;
530 break;
531
532 case 'd':
533 case 'l':
534 stride = 8;
535 break;
536
537 default:
538 ai_assert(false);
539 };
540
541 const uint32_t full_length = stride * count;
542 buff.resize(full_length);
543
544 if(encmode == 0) {
545 ai_assert(full_length == comp_len);
546
547 // plain data, no compression
548 std::copy(data, end, buff.begin());
549 }
550 else if(encmode == 1) {
551 // zlib/deflate, next comes ZIP head (0x78 0x01)
552 // see http://www.ietf.org/rfc/rfc1950.txt
553
554 z_stream zstream;
555 zstream.opaque = Z_NULL;
556 zstream.zalloc = Z_NULL;
557 zstream.zfree = Z_NULL;
558 zstream.data_type = Z_BINARY;
559
560 // http://hewgill.com/journal/entries/349-how-to-decompress-gzip-stream-with-zlib
561 inflateInit(&zstream);
562
563 zstream.next_in = reinterpret_cast<Bytef*>( const_cast<char*>(data) );
564 zstream.avail_in = comp_len;
565
566 zstream.avail_out = buff.size();
567 zstream.next_out = reinterpret_cast<Bytef*>(&*buff.begin());
568 const int ret = inflate(&zstream, Z_FINISH);
569
570 if (ret != Z_STREAM_END && ret != Z_OK) {
571 ParseError("failure decompressing compressed data section");
572 }
573
574 // terminate zlib
575 inflateEnd(&zstream);
576 }
577 #ifdef ASSIMP_BUILD_DEBUG
578 else {
579 // runtime check for this happens at tokenization stage
580 ai_assert(false);
581 }
582 #endif
583
584 data += comp_len;
585 ai_assert(data == end);
586 }
587
588 } // !anon
589
590
591 // ------------------------------------------------------------------------------------------------
592 // read an array of float3 tuples
593 void ParseVectorDataArray(std::vector<aiVector3D>& out, const Element& el)
594 {
595 out.clear();
596
597 const TokenList& tok = el.Tokens();
598 if(tok.empty()) {
599 ParseError("unexpected empty element",&el);
600 }
601
602 if(tok[0]->IsBinary()) {
603 const char* data = tok[0]->begin(), *end = tok[0]->end();
604
605 char type;
606 uint32_t count;
607 ReadBinaryDataArrayHead(data, end, type, count, el);
608
609 if(count % 3 != 0) {
610 ParseError("number of floats is not a multiple of three (3) (binary)",&el);
611 }
612
613 if(!count) {
614 return;
615 }
616
617 if (type != 'd' && type != 'f') {
618 ParseError("expected float or double array (binary)",&el);
619 }
620
621 std::vector<char> buff;
622 ReadBinaryDataArray(type, count, data, end, buff, el);
623
624 ai_assert(data == end);
625 ai_assert(buff.size() == count * (type == 'd' ? 8 : 4));
626
627 const uint32_t count3 = count / 3;
628 out.reserve(count3);
629
630 if (type == 'd') {
631 const double* d = reinterpret_cast<const double*>(&buff[0]);
632 for (unsigned int i = 0; i < count3; ++i, d += 3) {
633 out.push_back(aiVector3D(static_cast<float>(d[0]),
634 static_cast<float>(d[1]),
635 static_cast<float>(d[2])));
636 }
637 }
638 else if (type == 'f') {
639 const float* f = reinterpret_cast<const float*>(&buff[0]);
640 for (unsigned int i = 0; i < count3; ++i, f += 3) {
641 out.push_back(aiVector3D(f[0],f[1],f[2]));
642 }
643 }
644
645 return;
646 }
647
648 const size_t dim = ParseTokenAsDim(*tok[0]);
649
650 // may throw bad_alloc if the input is rubbish, but this need
651 // not to be prevented - importing would fail but we wouldn't
652 // crash since assimp handles this case properly.
653 out.reserve(dim);
654
655 const Scope& scope = GetRequiredScope(el);
656 const Element& a = GetRequiredElement(scope,"a",&el);
657
658 if (a.Tokens().size() % 3 != 0) {
659 ParseError("number of floats is not a multiple of three (3)",&el);
660 }
661 for (TokenList::const_iterator it = a.Tokens().begin(), end = a.Tokens().end(); it != end; ) {
662 aiVector3D v;
663 v.x = ParseTokenAsFloat(**it++);
664 v.y = ParseTokenAsFloat(**it++);
665 v.z = ParseTokenAsFloat(**it++);
666
667 out.push_back(v);
668 }
669 }
670
671
672 // ------------------------------------------------------------------------------------------------
673 // read an array of color4 tuples
674 void ParseVectorDataArray(std::vector<aiColor4D>& out, const Element& el)
675 {
676 out.clear();
677 const TokenList& tok = el.Tokens();
678 if(tok.empty()) {
679 ParseError("unexpected empty element",&el);
680 }
681
682 if(tok[0]->IsBinary()) {
683 const char* data = tok[0]->begin(), *end = tok[0]->end();
684
685 char type;
686 uint32_t count;
687 ReadBinaryDataArrayHead(data, end, type, count, el);
688
689 if(count % 4 != 0) {
690 ParseError("number of floats is not a multiple of four (4) (binary)",&el);
691 }
692
693 if(!count) {
694 return;
695 }
696
697 if (type != 'd' && type != 'f') {
698 ParseError("expected float or double array (binary)",&el);
699 }
700
701 std::vector<char> buff;
702 ReadBinaryDataArray(type, count, data, end, buff, el);
703
704 ai_assert(data == end);
705 ai_assert(buff.size() == count * (type == 'd' ? 8 : 4));
706
707 const uint32_t count4 = count / 4;
708 out.reserve(count4);
709
710 if (type == 'd') {
711 const double* d = reinterpret_cast<const double*>(&buff[0]);
712 for (unsigned int i = 0; i < count4; ++i, d += 4) {
713 out.push_back(aiColor4D(static_cast<float>(d[0]),
714 static_cast<float>(d[1]),
715 static_cast<float>(d[2]),
716 static_cast<float>(d[3])));
717 }
718 }
719 else if (type == 'f') {
720 const float* f = reinterpret_cast<const float*>(&buff[0]);
721 for (unsigned int i = 0; i < count4; ++i, f += 4) {
722 out.push_back(aiColor4D(f[0],f[1],f[2],f[3]));
723 }
724 }
725 return;
726 }
727
728 const size_t dim = ParseTokenAsDim(*tok[0]);
729
730 // see notes in ParseVectorDataArray() above
731 out.reserve(dim);
732
733 const Scope& scope = GetRequiredScope(el);
734 const Element& a = GetRequiredElement(scope,"a",&el);
735
736 if (a.Tokens().size() % 4 != 0) {
737 ParseError("number of floats is not a multiple of four (4)",&el);
738 }
739 for (TokenList::const_iterator it = a.Tokens().begin(), end = a.Tokens().end(); it != end; ) {
740 aiColor4D v;
741 v.r = ParseTokenAsFloat(**it++);
742 v.g = ParseTokenAsFloat(**it++);
743 v.b = ParseTokenAsFloat(**it++);
744 v.a = ParseTokenAsFloat(**it++);
745
746 out.push_back(v);
747 }
748 }
749
750
751 // ------------------------------------------------------------------------------------------------
752 // read an array of float2 tuples
753 void ParseVectorDataArray(std::vector<aiVector2D>& out, const Element& el)
754 {
755 out.clear();
756 const TokenList& tok = el.Tokens();
757 if(tok.empty()) {
758 ParseError("unexpected empty element",&el);
759 }
760
761 if(tok[0]->IsBinary()) {
762 const char* data = tok[0]->begin(), *end = tok[0]->end();
763
764 char type;
765 uint32_t count;
766 ReadBinaryDataArrayHead(data, end, type, count, el);
767
768 if(count % 2 != 0) {
769 ParseError("number of floats is not a multiple of two (2) (binary)",&el);
770 }
771
772 if(!count) {
773 return;
774 }
775
776 if (type != 'd' && type != 'f') {
777 ParseError("expected float or double array (binary)",&el);
778 }
779
780 std::vector<char> buff;
781 ReadBinaryDataArray(type, count, data, end, buff, el);
782
783 ai_assert(data == end);
784 ai_assert(buff.size() == count * (type == 'd' ? 8 : 4));
785
786 const uint32_t count2 = count / 2;
787 out.reserve(count2);
788
789 if (type == 'd') {
790 const double* d = reinterpret_cast<const double*>(&buff[0]);
791 for (unsigned int i = 0; i < count2; ++i, d += 2) {
792 out.push_back(aiVector2D(static_cast<float>(d[0]),
793 static_cast<float>(d[1])));
794 }
795 }
796 else if (type == 'f') {
797 const float* f = reinterpret_cast<const float*>(&buff[0]);
798 for (unsigned int i = 0; i < count2; ++i, f += 2) {
799 out.push_back(aiVector2D(f[0],f[1]));
800 }
801 }
802
803 return;
804 }
805
806 const size_t dim = ParseTokenAsDim(*tok[0]);
807
808 // see notes in ParseVectorDataArray() above
809 out.reserve(dim);
810
811 const Scope& scope = GetRequiredScope(el);
812 const Element& a = GetRequiredElement(scope,"a",&el);
813
814 if (a.Tokens().size() % 2 != 0) {
815 ParseError("number of floats is not a multiple of two (2)",&el);
816 }
817 for (TokenList::const_iterator it = a.Tokens().begin(), end = a.Tokens().end(); it != end; ) {
818 aiVector2D v;
819 v.x = ParseTokenAsFloat(**it++);
820 v.y = ParseTokenAsFloat(**it++);
821
822 out.push_back(v);
823 }
824 }
825
826
827 // ------------------------------------------------------------------------------------------------
828 // read an array of ints
829 void ParseVectorDataArray(std::vector<int>& out, const Element& el)
830 {
831 out.clear();
832 const TokenList& tok = el.Tokens();
833 if(tok.empty()) {
834 ParseError("unexpected empty element",&el);
835 }
836
837 if(tok[0]->IsBinary()) {
838 const char* data = tok[0]->begin(), *end = tok[0]->end();
839
840 char type;
841 uint32_t count;
842 ReadBinaryDataArrayHead(data, end, type, count, el);
843
844 if(!count) {
845 return;
846 }
847
848 if (type != 'i') {
849 ParseError("expected int array (binary)",&el);
850 }
851
852 std::vector<char> buff;
853 ReadBinaryDataArray(type, count, data, end, buff, el);
854
855 ai_assert(data == end);
856 ai_assert(buff.size() == count * 4);
857
858 out.reserve(count);
859
860 const int32_t* ip = reinterpret_cast<const int32_t*>(&buff[0]);
861 for (unsigned int i = 0; i < count; ++i, ++ip) {
862 BE_NCONST int32_t val = *ip;
863 AI_SWAP4(val);
864 out.push_back(val);
865 }
866
867 return;
868 }
869
870 const size_t dim = ParseTokenAsDim(*tok[0]);
871
872 // see notes in ParseVectorDataArray()
873 out.reserve(dim);
874
875 const Scope& scope = GetRequiredScope(el);
876 const Element& a = GetRequiredElement(scope,"a",&el);
877
878 for (TokenList::const_iterator it = a.Tokens().begin(), end = a.Tokens().end(); it != end; ) {
879 const int ival = ParseTokenAsInt(**it++);
880 out.push_back(ival);
881 }
882 }
883
884
885 // ------------------------------------------------------------------------------------------------
886 // read an array of floats
887 void ParseVectorDataArray(std::vector<float>& out, const Element& el)
888 {
889 out.clear();
890 const TokenList& tok = el.Tokens();
891 if(tok.empty()) {
892 ParseError("unexpected empty element",&el);
893 }
894
895 if(tok[0]->IsBinary()) {
896 const char* data = tok[0]->begin(), *end = tok[0]->end();
897
898 char type;
899 uint32_t count;
900 ReadBinaryDataArrayHead(data, end, type, count, el);
901
902 if(!count) {
903 return;
904 }
905
906 if (type != 'd' && type != 'f') {
907 ParseError("expected float or double array (binary)",&el);
908 }
909
910 std::vector<char> buff;
911 ReadBinaryDataArray(type, count, data, end, buff, el);
912
913 ai_assert(data == end);
914 ai_assert(buff.size() == count * (type == 'd' ? 8 : 4));
915
916 if (type == 'd') {
917 const double* d = reinterpret_cast<const double*>(&buff[0]);
918 for (unsigned int i = 0; i < count; ++i, ++d) {
919 out.push_back(static_cast<float>(*d));
920 }
921 }
922 else if (type == 'f') {
923 const float* f = reinterpret_cast<const float*>(&buff[0]);
924 for (unsigned int i = 0; i < count; ++i, ++f) {
925 out.push_back(*f);
926 }
927 }
928
929 return;
930 }
931
932 const size_t dim = ParseTokenAsDim(*tok[0]);
933
934 // see notes in ParseVectorDataArray()
935 out.reserve(dim);
936
937 const Scope& scope = GetRequiredScope(el);
938 const Element& a = GetRequiredElement(scope,"a",&el);
939
940 for (TokenList::const_iterator it = a.Tokens().begin(), end = a.Tokens().end(); it != end; ) {
941 const float ival = ParseTokenAsFloat(**it++);
942 out.push_back(ival);
943 }
944 }
945
946
947 // ------------------------------------------------------------------------------------------------
948 // read an array of uints
949 void ParseVectorDataArray(std::vector<unsigned int>& out, const Element& el)
950 {
951 out.clear();
952 const TokenList& tok = el.Tokens();
953 if(tok.empty()) {
954 ParseError("unexpected empty element",&el);
955 }
956
957 if(tok[0]->IsBinary()) {
958 const char* data = tok[0]->begin(), *end = tok[0]->end();
959
960 char type;
961 uint32_t count;
962 ReadBinaryDataArrayHead(data, end, type, count, el);
963
964 if(!count) {
965 return;
966 }
967
968 if (type != 'i') {
969 ParseError("expected (u)int array (binary)",&el);
970 }
971
972 std::vector<char> buff;
973 ReadBinaryDataArray(type, count, data, end, buff, el);
974
975 ai_assert(data == end);
976 ai_assert(buff.size() == count * 4);
977
978 out.reserve(count);
979
980 const int32_t* ip = reinterpret_cast<const int32_t*>(&buff[0]);
981 for (unsigned int i = 0; i < count; ++i, ++ip) {
982 BE_NCONST int32_t val = *ip;
983 if(val < 0) {
984 ParseError("encountered negative integer index (binary)");
985 }
986
987 AI_SWAP4(val);
988 out.push_back(val);
989 }
990
991 return;
992 }
993
994 const size_t dim = ParseTokenAsDim(*tok[0]);
995
996 // see notes in ParseVectorDataArray()
997 out.reserve(dim);
998
999 const Scope& scope = GetRequiredScope(el);
1000 const Element& a = GetRequiredElement(scope,"a",&el);
1001
1002 for (TokenList::const_iterator it = a.Tokens().begin(), end = a.Tokens().end(); it != end; ) {
1003 const int ival = ParseTokenAsInt(**it++);
1004 if(ival < 0) {
1005 ParseError("encountered negative integer index");
1006 }
1007 out.push_back(static_cast<unsigned int>(ival));
1008 }
1009 }
1010
1011
1012 // ------------------------------------------------------------------------------------------------
1013 // read an array of uint64_ts
1014 void ParseVectorDataArray(std::vector<uint64_t>& out, const Element& el)
1015 {
1016 out.clear();
1017 const TokenList& tok = el.Tokens();
1018 if(tok.empty()) {
1019 ParseError("unexpected empty element",&el);
1020 }
1021
1022 if(tok[0]->IsBinary()) {
1023 const char* data = tok[0]->begin(), *end = tok[0]->end();
1024
1025 char type;
1026 uint32_t count;
1027 ReadBinaryDataArrayHead(data, end, type, count, el);
1028
1029 if(!count) {
1030 return;
1031 }
1032
1033 if (type != 'l') {
1034 ParseError("expected long array (binary)",&el);
1035 }
1036
1037 std::vector<char> buff;
1038 ReadBinaryDataArray(type, count, data, end, buff, el);
1039
1040 ai_assert(data == end);
1041 ai_assert(buff.size() == count * 8);
1042
1043 out.reserve(count);
1044
1045 const uint64_t* ip = reinterpret_cast<const uint64_t*>(&buff[0]);
1046 for (unsigned int i = 0; i < count; ++i, ++ip) {
1047 BE_NCONST uint64_t val = *ip;
1048 AI_SWAP8(val);
1049 out.push_back(val);
1050 }
1051
1052 return;
1053 }
1054
1055 const size_t dim = ParseTokenAsDim(*tok[0]);
1056
1057 // see notes in ParseVectorDataArray()
1058 out.reserve(dim);
1059
1060 const Scope& scope = GetRequiredScope(el);
1061 const Element& a = GetRequiredElement(scope,"a",&el);
1062
1063 for (TokenList::const_iterator it = a.Tokens().begin(), end = a.Tokens().end(); it != end; ) {
1064 const uint64_t ival = ParseTokenAsID(**it++);
1065
1066 out.push_back(ival);
1067 }
1068 }
1069
1070
1071 // ------------------------------------------------------------------------------------------------
1072 aiMatrix4x4 ReadMatrix(const Element& element)
1073 {
1074 std::vector<float> values;
1075 ParseVectorDataArray(values,element);
1076
1077 if(values.size() != 16) {
1078 ParseError("expected 16 matrix elements");
1079 }
1080
1081 aiMatrix4x4 result;
1082
1083
1084 result.a1 = values[0];
1085 result.a2 = values[1];
1086 result.a3 = values[2];
1087 result.a4 = values[3];
1088
1089 result.b1 = values[4];
1090 result.b2 = values[5];
1091 result.b3 = values[6];
1092 result.b4 = values[7];
1093
1094 result.c1 = values[8];
1095 result.c2 = values[9];
1096 result.c3 = values[10];
1097 result.c4 = values[11];
1098
1099 result.d1 = values[12];
1100 result.d2 = values[13];
1101 result.d3 = values[14];
1102 result.d4 = values[15];
1103
1104 result.Transpose();
1105 return result;
1106 }
1107
1108
1109 // ------------------------------------------------------------------------------------------------
1110 // wrapper around ParseTokenAsString() with ParseError handling
1111 std::string ParseTokenAsString(const Token& t)
1112 {
1113 const char* err;
1114 const std::string& i = ParseTokenAsString(t,err);
1115 if(err) {
1116 ParseError(err,t);
1117 }
1118 return i;
1119 }
1120
1121
1122 // ------------------------------------------------------------------------------------------------
1123 // extract a required element from a scope, abort if the element cannot be found
1124 const Element& GetRequiredElement(const Scope& sc, const std::string& index, const Element* element /*= NULL*/)
1125 {
1126 const Element* el = sc[index];
1127 if(!el) {
1128 ParseError("did not find required element \"" + index + "\"",element);
1129 }
1130 return *el;
1131 }
1132
1133
1134 // ------------------------------------------------------------------------------------------------
1135 // extract required compound scope
1136 const Scope& GetRequiredScope(const Element& el)
1137 {
1138 const Scope* const s = el.Compound();
1139 if(!s) {
1140 ParseError("expected compound scope",&el);
1141 }
1142
1143 return *s;
1144 }
1145
1146
1147 // ------------------------------------------------------------------------------------------------
1148 // get token at a particular index
1149 const Token& GetRequiredToken(const Element& el, unsigned int index)
1150 {
1151 const TokenList& t = el.Tokens();
1152 if(index >= t.size()) {
1153 ParseError(Formatter::format( "missing token at index " ) << index,&el);
1154 }
1155
1156 return *t[index];
1157 }
1158
1159
1160 // ------------------------------------------------------------------------------------------------
1161 // wrapper around ParseTokenAsID() with ParseError handling
1162 uint64_t ParseTokenAsID(const Token& t)
1163 {
1164 const char* err;
1165 const uint64_t i = ParseTokenAsID(t,err);
1166 if(err) {
1167 ParseError(err,t);
1168 }
1169 return i;
1170 }
1171
1172
1173 // ------------------------------------------------------------------------------------------------
1174 // wrapper around ParseTokenAsDim() with ParseError handling
1175 size_t ParseTokenAsDim(const Token& t)
1176 {
1177 const char* err;
1178 const size_t i = ParseTokenAsDim(t,err);
1179 if(err) {
1180 ParseError(err,t);
1181 }
1182 return i;
1183 }
1184
1185
1186 // ------------------------------------------------------------------------------------------------
1187 // wrapper around ParseTokenAsFloat() with ParseError handling
1188 float ParseTokenAsFloat(const Token& t)
1189 {
1190 const char* err;
1191 const float i = ParseTokenAsFloat(t,err);
1192 if(err) {
1193 ParseError(err,t);
1194 }
1195 return i;
1196 }
1197
1198
1199 // ------------------------------------------------------------------------------------------------
1200 // wrapper around ParseTokenAsInt() with ParseError handling
1201 int ParseTokenAsInt(const Token& t)
1202 {
1203 const char* err;
1204 const int i = ParseTokenAsInt(t,err);
1205 if(err) {
1206 ParseError(err,t);
1207 }
1208 return i;
1209 }
1210
1211
1212
1213 } // !FBX
1214 } // !Assimp
1215
1216 #endif
1217
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXParser.h
41 * @brief FBX parsing code
42 */
43 #ifndef INCLUDED_AI_FBX_PARSER_H
44 #define INCLUDED_AI_FBX_PARSER_H
45
46 #include <vector>
47 #include <map>
48 #include <string>
49 #include <utility>
50
51 #include <boost/shared_ptr.hpp>
52
53 #include "LogAux.h"
54
55 #include "FBXCompileConfig.h"
56 #include "FBXTokenizer.h"
57
58 namespace Assimp {
59 namespace FBX {
60
61 class Scope;
62 class Parser;
63 class Element;
64
65 // XXX should use C++11's unique_ptr - but assimp's need to keep working with 03
66 typedef std::vector< Scope* > ScopeList;
67 typedef std::fbx_unordered_multimap< std::string, Element* > ElementMap;
68
69 typedef std::pair<ElementMap::const_iterator,ElementMap::const_iterator> ElementCollection;
70
71 # define new_Scope new Scope
72 # define new_Element new Element
73
74
75 /** FBX data entity that consists of a key:value tuple.
76 *
77 * Example:
78 * @verbatim
79 * AnimationCurve: 23, "AnimCurve::", "" {
80 * [..]
81 * }
82 * @endverbatim
83 *
84 * As can be seen in this sample, elements can contain nested #Scope
85 * as their trailing member. **/
86 class Element
87 {
88 public:
89
90 Element(const Token& key_token, Parser& parser);
91 ~Element();
92
93 public:
94
95 const Scope* Compound() const {
96 return compound.get();
97 }
98
99 const Token& KeyToken() const {
100 return key_token;
101 }
102
103 const TokenList& Tokens() const {
104 return tokens;
105 }
106
107 private:
108
109 const Token& key_token;
110 TokenList tokens;
111 boost::scoped_ptr<Scope> compound;
112 };
113
114
115
116 /** FBX data entity that consists of a 'scope', a collection
117 * of not necessarily unique #Element instances.
118 *
119 * Example:
120 * @verbatim
121 * GlobalSettings: {
122 * Version: 1000
123 * Properties70:
124 * [...]
125 * }
126 * @endverbatim */
127 class Scope
128 {
129
130 public:
131
132 Scope(Parser& parser, bool topLevel = false);
133 ~Scope();
134
135 public:
136
137 const Element* operator[] (const std::string& index) const {
138 ElementMap::const_iterator it = elements.find(index);
139 return it == elements.end() ? NULL : (*it).second;
140 }
141
142 ElementCollection GetCollection(const std::string& index) const {
143 return elements.equal_range(index);
144 }
145
146 const ElementMap& Elements() const {
147 return elements;
148 }
149
150 private:
151
152 ElementMap elements;
153 };
154
155
156 /** FBX parsing class, takes a list of input tokens and generates a hierarchy
157 * of nested #Scope instances, representing the fbx DOM.*/
158 class Parser
159 {
160 public:
161
162 /** Parse given a token list. Does not take ownership of the tokens -
163 * the objects must persist during the entire parser lifetime */
164 Parser (const TokenList& tokens,bool is_binary);
165 ~Parser();
166
167 public:
168
169 const Scope& GetRootScope() const {
170 return *root.get();
171 }
172
173
174 bool IsBinary() const {
175 return is_binary;
176 }
177
178 private:
179
180 friend class Scope;
181 friend class Element;
182
183 TokenPtr AdvanceToNextToken();
184
185 TokenPtr LastToken() const;
186 TokenPtr CurrentToken() const;
187
188
189
190 private:
191
192 const TokenList& tokens;
193
194 TokenPtr last, current;
195 TokenList::const_iterator cursor;
196 boost::scoped_ptr<Scope> root;
197
198 const bool is_binary;
199 };
200
201
202 /* token parsing - this happens when building the DOM out of the parse-tree*/
203 uint64_t ParseTokenAsID(const Token& t, const char*& err_out);
204 size_t ParseTokenAsDim(const Token& t, const char*& err_out);
205
206 float ParseTokenAsFloat(const Token& t, const char*& err_out);
207 int ParseTokenAsInt(const Token& t, const char*& err_out);
208 std::string ParseTokenAsString(const Token& t, const char*& err_out);
209
210
211 /* wrapper around ParseTokenAsXXX() with DOMError handling */
212 uint64_t ParseTokenAsID(const Token& t);
213 size_t ParseTokenAsDim(const Token& t);
214 float ParseTokenAsFloat(const Token& t);
215 int ParseTokenAsInt(const Token& t);
216 std::string ParseTokenAsString(const Token& t);
217
218 /* read data arrays */
219 void ParseVectorDataArray(std::vector<aiVector3D>& out, const Element& el);
220 void ParseVectorDataArray(std::vector<aiColor4D>& out, const Element& el);
221 void ParseVectorDataArray(std::vector<aiVector2D>& out, const Element& el);
222 void ParseVectorDataArray(std::vector<int>& out, const Element& el);
223 void ParseVectorDataArray(std::vector<float>& out, const Element& el);
224 void ParseVectorDataArray(std::vector<unsigned int>& out, const Element& el);
225 void ParseVectorDataArray(std::vector<uint64_t>& out, const Element& e);
226
227
228
229 // extract a required element from a scope, abort if the element cannot be found
230 const Element& GetRequiredElement(const Scope& sc, const std::string& index, const Element* element = NULL);
231
232 // extract required compound scope
233 const Scope& GetRequiredScope(const Element& el);
234 // get token at a particular index
235 const Token& GetRequiredToken(const Element& el, unsigned int index);
236
237
238
239 // read a 4x4 matrix from an array of 16 floats
240 aiMatrix4x4 ReadMatrix(const Element& element);
241
242 } // ! FBX
243 } // ! Assimp
244
245 #endif // ! INCLUDED_AI_FBX_PARSER_H
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXProperties.cpp
41 * @brief Implementation of the FBX dynamic properties system
42 */
43 #include "AssimpPCH.h"
44
45 #ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
46
47 #include "FBXTokenizer.h"
48 #include "FBXParser.h"
49 #include "FBXDocument.h"
50 #include "FBXDocumentUtil.h"
51 #include "FBXProperties.h"
52
53 namespace Assimp {
54 namespace FBX {
55
56 using namespace Util;
57
58 // ------------------------------------------------------------------------------------------------
59 Property::Property()
60 {
61 }
62
63 // ------------------------------------------------------------------------------------------------
64 Property::~Property()
65 {
66 }
67
68 namespace {
69
70 // ------------------------------------------------------------------------------------------------
71 // read a typed property out of a FBX element. The return value is NULL if the property cannot be read.
72 Property* ReadTypedProperty(const Element& element)
73 {
74 ai_assert(element.KeyToken().StringContents() == "P");
75
76 const TokenList& tok = element.Tokens();
77 ai_assert(tok.size() >= 5);
78
79 const std::string& s = ParseTokenAsString(*tok[1]);
80 const char* const cs = s.c_str();
81 if (!strcmp(cs,"KString")) {
82 return new TypedProperty<std::string>(ParseTokenAsString(*tok[4]));
83 }
84 else if (!strcmp(cs,"bool") || !strcmp(cs,"Bool")) {
85 return new TypedProperty<bool>(ParseTokenAsInt(*tok[4]) != 0);
86 }
87 else if (!strcmp(cs,"int") || !strcmp(cs,"enum")) {
88 return new TypedProperty<int>(ParseTokenAsInt(*tok[4]));
89 }
90 else if (!strcmp(cs,"ULongLong")) {
91 return new TypedProperty<uint64_t>(ParseTokenAsID(*tok[4]));
92 }
93 else if (!strcmp(cs,"Vector3D") ||
94 !strcmp(cs,"ColorRGB") ||
95 !strcmp(cs,"Vector") ||
96 !strcmp(cs,"Color") ||
97 !strcmp(cs,"Lcl Translation") ||
98 !strcmp(cs,"Lcl Rotation") ||
99 !strcmp(cs,"Lcl Scaling")
100 ) {
101 return new TypedProperty<aiVector3D>(aiVector3D(
102 ParseTokenAsFloat(*tok[4]),
103 ParseTokenAsFloat(*tok[5]),
104 ParseTokenAsFloat(*tok[6]))
105 );
106 }
107 else if (!strcmp(cs,"double") || !strcmp(cs,"Number") || !strcmp(cs,"KTime") || !strcmp(cs,"Float")) {
108 return new TypedProperty<float>(ParseTokenAsFloat(*tok[4]));
109 }
110 return NULL;
111 }
112
113
114 // ------------------------------------------------------------------------------------------------
115 // peek into an element and check if it contains a FBX property, if so return its name.
116 std::string PeekPropertyName(const Element& element)
117 {
118 ai_assert(element.KeyToken().StringContents() == "P");
119 const TokenList& tok = element.Tokens();
120 if(tok.size() < 4) {
121 return "";
122 }
123
124 return ParseTokenAsString(*tok[0]);
125 }
126
127 } //! anon
128
129
130 // ------------------------------------------------------------------------------------------------
131 PropertyTable::PropertyTable()
132 : templateProps()
133 , element()
134 {
135 }
136
137
138 // ------------------------------------------------------------------------------------------------
139 PropertyTable::PropertyTable(const Element& element, boost::shared_ptr<const PropertyTable> templateProps)
140 : templateProps(templateProps)
141 , element(&element)
142 {
143 const Scope& scope = GetRequiredScope(element);
144 BOOST_FOREACH(const ElementMap::value_type& v, scope.Elements()) {
145 if(v.first != "P") {
146 DOMWarning("expected only P elements in property table",v.second);
147 continue;
148 }
149
150 const std::string& name = PeekPropertyName(*v.second);
151 if(!name.length()) {
152 DOMWarning("could not read property name",v.second);
153 continue;
154 }
155
156 LazyPropertyMap::const_iterator it = lazyProps.find(name);
157 if (it != lazyProps.end()) {
158 DOMWarning("duplicate property name, will hide previous value: " + name,v.second);
159 continue;
160 }
161
162 lazyProps[name] = v.second;
163 }
164 }
165
166
167 // ------------------------------------------------------------------------------------------------
168 PropertyTable::~PropertyTable()
169 {
170 BOOST_FOREACH(PropertyMap::value_type& v, props) {
171 delete v.second;
172 }
173 }
174
175
176 // ------------------------------------------------------------------------------------------------
177 const Property* PropertyTable::Get(const std::string& name) const
178 {
179 PropertyMap::const_iterator it = props.find(name);
180 if (it == props.end()) {
181 // hasn't been parsed yet?
182 LazyPropertyMap::const_iterator lit = lazyProps.find(name);
183 if(lit != lazyProps.end()) {
184 props[name] = ReadTypedProperty(*(*lit).second);
185 it = props.find(name);
186
187 ai_assert(it != props.end());
188 }
189
190 if (it == props.end()) {
191 // check property template
192 if(templateProps) {
193 return templateProps->Get(name);
194 }
195
196 return NULL;
197 }
198 }
199
200 return (*it).second;
201 }
202
203 DirectPropertyMap PropertyTable::GetUnparsedProperties() const
204 {
205 DirectPropertyMap result;
206
207 // Loop through all the lazy properties (which is all the properties)
208 BOOST_FOREACH(const LazyPropertyMap::value_type& element, lazyProps) {
209
210 // Skip parsed properties
211 if (props.end() != props.find(element.first)) continue;
212
213 // Read the element's value.
214 // Wrap the naked pointer (since the call site is required to acquire ownership)
215 // std::unique_ptr from C++11 would be preferred both as a wrapper and a return value.
216 boost::shared_ptr<Property> prop = boost::shared_ptr<Property>(ReadTypedProperty(*element.second));
217
218 // Element could not be read. Skip it.
219 if (!prop) continue;
220
221 // Add to result
222 result[element.first] = prop;
223 }
224
225 return result;
226 }
227
228
229
230 } //! FBX
231 } //! Assimp
232
233 #endif
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXProperties.h
41 * @brief FBX dynamic properties
42 */
43 #ifndef INCLUDED_AI_FBX_PROPERTIES_H
44 #define INCLUDED_AI_FBX_PROPERTIES_H
45
46 #include <map>
47 #include <string>
48
49 namespace Assimp {
50 namespace FBX {
51
52 class Element;
53
54
55 /** Represents a dynamic property. Type info added by deriving classes,
56 * see #TypedProperty.
57 Example:
58 @verbatim
59 P: "ShininessExponent", "double", "Number", "",0.5
60 @endvebatim
61
62 */
63 class Property
64 {
65 protected:
66
67 Property();
68
69 public:
70
71 virtual ~Property();
72
73 public:
74
75 template <typename T>
76 const T* As() const {
77 return dynamic_cast<const T*>(this);
78 }
79 };
80
81
82 template<typename T>
83 class TypedProperty : public Property
84 {
85 public:
86
87 TypedProperty(const T& value)
88 : value(value)
89 {
90 }
91
92 public:
93
94 const T& Value() const {
95 return value;
96 }
97
98 private:
99 T value;
100 };
101
102
103 typedef std::fbx_unordered_map<std::string,boost::shared_ptr<Property> > DirectPropertyMap;
104 typedef std::fbx_unordered_map<std::string,const Property*> PropertyMap;
105 typedef std::fbx_unordered_map<std::string,const Element*> LazyPropertyMap;
106
107 /** Represents a property table as can be found in the newer FBX files (Properties60, Properties70)*/
108 class PropertyTable
109 {
110 public:
111
112 // in-memory property table with no source element
113 PropertyTable();
114
115 PropertyTable(const Element& element, boost::shared_ptr<const PropertyTable> templateProps);
116 ~PropertyTable();
117
118 public:
119
120 const Property* Get(const std::string& name) const;
121
122 // PropertyTable's need not be coupled with FBX elements so this can be NULL
123 const Element* GetElement() const {
124 return element;
125 }
126
127 const PropertyTable* TemplateProps() const {
128 return templateProps.get();
129 }
130
131 DirectPropertyMap GetUnparsedProperties() const;
132
133 private:
134
135 LazyPropertyMap lazyProps;
136 mutable PropertyMap props;
137 const boost::shared_ptr<const PropertyTable> templateProps;
138 const Element* const element;
139 };
140
141
142 // ------------------------------------------------------------------------------------------------
143 template <typename T>
144 inline T PropertyGet(const PropertyTable& in, const std::string& name,
145 const T& defaultValue,
146 bool ignoreTemplate = false)
147 {
148 const Property* const prop = in.Get(name);
149 if(!prop) {
150 return defaultValue;
151 }
152
153 // strong typing, no need to be lenient
154 const TypedProperty<T>* const tprop = prop->As< TypedProperty<T> >();
155 if(!tprop) {
156 return defaultValue;
157 }
158
159 return tprop->Value();
160 }
161
162
163 // ------------------------------------------------------------------------------------------------
164 template <typename T>
165 inline T PropertyGet(const PropertyTable& in, const std::string& name,
166 bool& result,
167 bool ignoreTemplate = false)
168 {
169 const Property* const prop = in.Get(name);
170 if(!prop) {
171 result = false;
172 return T();
173 }
174
175 // strong typing, no need to be lenient
176 const TypedProperty<T>* const tprop = prop->As< TypedProperty<T> >();
177 if(!tprop) {
178 result = false;
179 return T();
180 }
181
182 result = true;
183 return tprop->Value();
184 }
185
186
187 } //! FBX
188 } //! Assimp
189
190 #endif //
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXTokenizer.cpp
41 * @brief Implementation of the FBX broadphase lexer
42 */
43 #include "AssimpPCH.h"
44
45 #ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
46
47 // tab width for logging columns
48 #define ASSIMP_FBX_TAB_WIDTH 4
49
50 #include "ParsingUtils.h"
51
52 #include "FBXTokenizer.h"
53 #include "FBXUtil.h"
54
55 namespace Assimp {
56 namespace FBX {
57
58 // ------------------------------------------------------------------------------------------------
59 Token::Token(const char* sbegin, const char* send, TokenType type, unsigned int line, unsigned int column)
60 : sbegin(sbegin)
61 , send(send)
62 , type(type)
63 , line(line)
64 , column(column)
65 #ifdef DEBUG
66 , contents(sbegin, static_cast<size_t>(send-sbegin))
67 #endif
68 {
69 ai_assert(sbegin);
70 ai_assert(send);
71
72 // tokens must be of non-zero length
73 ai_assert(static_cast<size_t>(send-sbegin) > 0);
74 }
75
76
77 // ------------------------------------------------------------------------------------------------
78 Token::~Token()
79 {
80 }
81
82
83 namespace {
84
85 // ------------------------------------------------------------------------------------------------
86 // signal tokenization error, this is always unrecoverable. Throws DeadlyImportError.
87 void TokenizeError(const std::string& message, unsigned int line, unsigned int column)
88 {
89 throw DeadlyImportError(Util::AddLineAndColumn("FBX-Tokenize",message,line,column));
90 }
91
92
93 // process a potential data token up to 'cur', adding it to 'output_tokens'.
94 // ------------------------------------------------------------------------------------------------
95 void ProcessDataToken( TokenList& output_tokens, const char*& start, const char*& end,
96 unsigned int line,
97 unsigned int column,
98 TokenType type = TokenType_DATA,
99 bool must_have_token = false)
100 {
101 if (start && end) {
102 // sanity check:
103 // tokens should have no whitespace outside quoted text and [start,end] should
104 // properly delimit the valid range.
105 bool in_double_quotes = false;
106 for (const char* c = start; c != end + 1; ++c) {
107 if (*c == '\"') {
108 in_double_quotes = !in_double_quotes;
109 }
110
111 if (!in_double_quotes && IsSpaceOrNewLine(*c)) {
112 TokenizeError("unexpected whitespace in token", line, column);
113 }
114 }
115
116 if (in_double_quotes) {
117 TokenizeError("non-terminated double quotes", line, column);
118 }
119
120 output_tokens.push_back(new_Token(start,end + 1,type,line,column));
121 }
122 else if (must_have_token) {
123 TokenizeError("unexpected character, expected data token", line, column);
124 }
125
126 start = end = NULL;
127 }
128
129 }
130
131 // ------------------------------------------------------------------------------------------------
132 void Tokenize(TokenList& output_tokens, const char* input)
133 {
134 ai_assert(input);
135
136 // line and column numbers numbers are one-based
137 unsigned int line = 1;
138 unsigned int column = 1;
139
140 bool comment = false;
141 bool in_double_quotes = false;
142 bool pending_data_token = false;
143
144 const char* token_begin = NULL, *token_end = NULL;
145 for (const char* cur = input;*cur;column += (*cur == '\t' ? ASSIMP_FBX_TAB_WIDTH : 1), ++cur) {
146 const char c = *cur;
147
148 if (IsLineEnd(c)) {
149 comment = false;
150
151 column = 0;
152 ++line;
153 }
154
155 if(comment) {
156 continue;
157 }
158
159 if(in_double_quotes) {
160 if (c == '\"') {
161 in_double_quotes = false;
162 token_end = cur;
163
164 ProcessDataToken(output_tokens,token_begin,token_end,line,column);
165 pending_data_token = false;
166 }
167 continue;
168 }
169
170 switch(c)
171 {
172 case '\"':
173 if (token_begin) {
174 TokenizeError("unexpected double-quote", line, column);
175 }
176 token_begin = cur;
177 in_double_quotes = true;
178 continue;
179
180 case ';':
181 ProcessDataToken(output_tokens,token_begin,token_end,line,column);
182 comment = true;
183 continue;
184
185 case '{':
186 ProcessDataToken(output_tokens,token_begin,token_end, line, column);
187 output_tokens.push_back(new_Token(cur,cur+1,TokenType_OPEN_BRACKET,line,column));
188 continue;
189
190 case '}':
191 ProcessDataToken(output_tokens,token_begin,token_end,line,column);
192 output_tokens.push_back(new_Token(cur,cur+1,TokenType_CLOSE_BRACKET,line,column));
193 continue;
194
195 case ',':
196 if (pending_data_token) {
197 ProcessDataToken(output_tokens,token_begin,token_end,line,column,TokenType_DATA,true);
198 }
199 output_tokens.push_back(new_Token(cur,cur+1,TokenType_COMMA,line,column));
200 continue;
201
202 case ':':
203 if (pending_data_token) {
204 ProcessDataToken(output_tokens,token_begin,token_end,line,column,TokenType_KEY,true);
205 }
206 else {
207 TokenizeError("unexpected colon", line, column);
208 }
209 continue;
210 }
211
212 if (IsSpaceOrNewLine(c)) {
213
214 if (token_begin) {
215 // peek ahead and check if the next token is a colon in which
216 // case this counts as KEY token.
217 TokenType type = TokenType_DATA;
218 for (const char* peek = cur; *peek && IsSpaceOrNewLine(*peek); ++peek) {
219 if (*peek == ':') {
220 type = TokenType_KEY;
221 cur = peek;
222 break;
223 }
224 }
225
226 ProcessDataToken(output_tokens,token_begin,token_end,line,column,type);
227 }
228
229 pending_data_token = false;
230 }
231 else {
232 token_end = cur;
233 if (!token_begin) {
234 token_begin = cur;
235 }
236
237 pending_data_token = true;
238 }
239 }
240 }
241
242 } // !FBX
243 } // !Assimp
244
245 #endif
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXTokenizer.h
41 * @brief FBX lexer
42 */
43 #ifndef INCLUDED_AI_FBX_TOKENIZER_H
44 #define INCLUDED_AI_FBX_TOKENIZER_H
45
46 #include <boost/shared_ptr.hpp>
47
48 #include "FBXCompileConfig.h"
49
50 namespace Assimp {
51 namespace FBX {
52
53 /** Rough classification for text FBX tokens used for constructing the
54 * basic scope hierarchy. */
55 enum TokenType
56 {
57 // {
58 TokenType_OPEN_BRACKET = 0,
59
60 // }
61 TokenType_CLOSE_BRACKET,
62
63 // '"blablubb"', '2', '*14' - very general token class,
64 // further processing happens at a later stage.
65 TokenType_DATA,
66
67 //
68 TokenType_BINARY_DATA,
69
70 // ,
71 TokenType_COMMA,
72
73 // blubb:
74 TokenType_KEY
75 };
76
77
78 /** Represents a single token in a FBX file. Tokens are
79 * classified by the #TokenType enumerated types.
80 *
81 * Offers iterator protocol. Tokens are immutable. */
82 class Token
83 {
84
85 private:
86
87 static const unsigned int BINARY_MARKER = static_cast<unsigned int>(-1);
88
89 public:
90
91 /** construct a textual token */
92 Token(const char* sbegin, const char* send, TokenType type, unsigned int line, unsigned int column);
93
94 /** construct a binary token */
95 Token(const char* sbegin, const char* send, TokenType type, unsigned int offset);
96
97 ~Token();
98
99 public:
100
101 std::string StringContents() const {
102 return std::string(begin(),end());
103 }
104
105 public:
106
107 bool IsBinary() const {
108 return column == BINARY_MARKER;
109 }
110
111 const char* begin() const {
112 return sbegin;
113 }
114
115 const char* end() const {
116 return send;
117 }
118
119 TokenType Type() const {
120 return type;
121 }
122
123 unsigned int Offset() const {
124 ai_assert(IsBinary());
125 return offset;
126 }
127
128 unsigned int Line() const {
129 ai_assert(!IsBinary());
130 return line;
131 }
132
133 unsigned int Column() const {
134 ai_assert(!IsBinary());
135 return column;
136 }
137
138 private:
139
140 #ifdef DEBUG
141 // full string copy for the sole purpose that it nicely appears
142 // in msvc's debugger window.
143 const std::string contents;
144 #endif
145
146
147 const char* const sbegin;
148 const char* const send;
149 const TokenType type;
150
151 union {
152 const unsigned int line;
153 unsigned int offset;
154 };
155 const unsigned int column;
156 };
157
158 // XXX should use C++11's unique_ptr - but assimp's need to keep working with 03
159 typedef const Token* TokenPtr;
160 typedef std::vector< TokenPtr > TokenList;
161
162 #define new_Token new Token
163
164
165 /** Main FBX tokenizer function. Transform input buffer into a list of preprocessed tokens.
166 *
167 * Skips over comments and generates line and column numbers.
168 *
169 * @param output_tokens Receives a list of all tokens in the input data.
170 * @param input_buffer Textual input buffer to be processed, 0-terminated.
171 * @throw DeadlyImportError if something goes wrong */
172 void Tokenize(TokenList& output_tokens, const char* input);
173
174
175 /** Tokenizer function for binary FBX files.
176 *
177 * Emits a token list suitable for direct parsing.
178 *
179 * @param output_tokens Receives a list of all tokens in the input data.
180 * @param input_buffer Binary input buffer to be processed.
181 * @param length Length of input buffer, in bytes. There is no 0-terminal.
182 * @throw DeadlyImportError if something goes wrong */
183 void TokenizeBinary(TokenList& output_tokens, const char* input, unsigned int length);
184
185
186 } // ! FBX
187 } // ! Assimp
188
189 #endif // ! INCLUDED_AI_FBX_PARSER_H
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXUtil.cpp
41 * @brief Implementation of internal FBX utility functions
42 */
43 #include "AssimpPCH.h"
44
45 #include "FBXUtil.h"
46 #include "FBXTokenizer.h"
47
48 #include "TinyFormatter.h"
49
50 #ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
51
52 namespace Assimp {
53 namespace FBX {
54 namespace Util {
55
56 // ------------------------------------------------------------------------------------------------
57 const char* TokenTypeString(TokenType t)
58 {
59 switch(t) {
60 case TokenType_OPEN_BRACKET:
61 return "TOK_OPEN_BRACKET";
62
63 case TokenType_CLOSE_BRACKET:
64 return "TOK_CLOSE_BRACKET";
65
66 case TokenType_DATA:
67 return "TOK_DATA";
68
69 case TokenType_COMMA:
70 return "TOK_COMMA";
71
72 case TokenType_KEY:
73 return "TOK_KEY";
74
75 case TokenType_BINARY_DATA:
76 return "TOK_BINARY_DATA";
77 }
78
79 ai_assert(false);
80 return "";
81 }
82
83
84 // ------------------------------------------------------------------------------------------------
85 std::string AddOffset(const std::string& prefix, const std::string& text, unsigned int offset)
86 {
87 return static_cast<std::string>( (Formatter::format(),prefix," (offset 0x",std::hex,offset,") ",text) );
88 }
89
90 // ------------------------------------------------------------------------------------------------
91 std::string AddLineAndColumn(const std::string& prefix, const std::string& text, unsigned int line, unsigned int column)
92 {
93 return static_cast<std::string>( (Formatter::format(),prefix," (line ",line,", col ",column,") ",text) );
94 }
95
96 // ------------------------------------------------------------------------------------------------
97 std::string AddTokenText(const std::string& prefix, const std::string& text, const Token* tok)
98 {
99 if(tok->IsBinary()) {
100 return static_cast<std::string>( (Formatter::format(),prefix,
101 " (",TokenTypeString(tok->Type()),
102 ", offset 0x", std::hex, tok->Offset(),") ",
103 text) );
104 }
105
106 return static_cast<std::string>( (Formatter::format(),prefix,
107 " (",TokenTypeString(tok->Type()),
108 ", line ",tok->Line(),
109 ", col ",tok->Column(),") ",
110 text) );
111 }
112
113 } // !Util
114 } // !FBX
115 } // !Assimp
116
117 #endif
118
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file FBXUtil.h
41 * @brief FBX utility functions for internal use
42 */
43 #ifndef INCLUDED_AI_FBX_UTIL_H
44 #define INCLUDED_AI_FBX_UTIL_H
45
46 #include <string>
47 #include "FBXCompileConfig.h"
48 #include "FBXTokenizer.h"
49
50 namespace Assimp {
51 namespace FBX {
52
53
54 namespace Util {
55
56
57 /** helper for std::for_each to delete all heap-allocated items in a container */
58 template<typename T>
59 struct delete_fun
60 {
61 void operator()(const volatile T* del) {
62 delete del;
63 }
64 };
65
66 /** Get a string representation for a #TokenType. */
67 const char* TokenTypeString(TokenType t);
68
69
70
71 /** Format log/error messages using a given offset in the source binary file
72 *
73 * @param prefix Message prefix to be preprended to the location info.
74 * @param text Message text
75 * @param line Line index, 1-based
76 * @param column Colum index, 1-based
77 * @return A string of the following format: {prefix} (offset 0x{offset}) {text}*/
78 std::string AddOffset(const std::string& prefix, const std::string& text, unsigned int offset);
79
80
81 /** Format log/error messages using a given line location in the source file.
82 *
83 * @param prefix Message prefix to be preprended to the location info.
84 * @param text Message text
85 * @param line Line index, 1-based
86 * @param column Colum index, 1-based
87 * @return A string of the following format: {prefix} (line {line}, col {column}) {text}*/
88 std::string AddLineAndColumn(const std::string& prefix, const std::string& text, unsigned int line, unsigned int column);
89
90
91 /** Format log/error messages using a given cursor token.
92 *
93 * @param prefix Message prefix to be preprended to the location info.
94 * @param text Message text
95 * @param tok Token where parsing/processing stopped
96 * @return A string of the following format: {prefix} ({token-type}, line {line}, col {column}) {text}*/
97 std::string AddTokenText(const std::string& prefix, const std::string& text, const Token* tok);
98
99 }
100 }
101 }
102
103 #endif // ! INCLUDED_AI_FBX_UTIL_H
5252 // ---------------------------------------------------------------------------
5353 /** FindDegeneratesProcess: Searches a mesh for degenerated triangles.
5454 */
55 class FindDegeneratesProcess : public BaseProcess
55 class ASSIMP_API FindDegeneratesProcess : public BaseProcess
5656 {
5757 public:
5858
5050 namespace Assimp {
5151
5252 // ---------------------------------------------------------------------------
53 /** The FindInvalidData postprocessing step. It searches the mesh data
53 /** The FindInvalidData post-processing step. It searches the mesh data
5454 * for parts that are obviously invalid and removes them.
5555 *
5656 * Originally this was a workaround for some models written by Blender
5757 * which have zero normal vectors. */
58 class FindInvalidDataProcess
59 : public BaseProcess
58 class ASSIMP_API FindInvalidDataProcess : public BaseProcess
6059 {
6160 public:
6261
141141 const aiVector3D* pV1 = &pMesh->mVertices[face.mIndices[0]];
142142 const aiVector3D* pV2 = &pMesh->mVertices[face.mIndices[1]];
143143 const aiVector3D* pV3 = &pMesh->mVertices[face.mIndices[face.mNumIndices-1]];
144 const aiVector3D vNor = ((*pV2 - *pV1) ^ (*pV3 - *pV1)).Normalize();
144 const aiVector3D vNor = ((*pV2 - *pV1) ^ (*pV3 - *pV1));
145145
146146 for (unsigned int i = 0;i < face.mNumIndices;++i) {
147147 pMesh->mNormals[face.mIndices[i]] = vNor;
208208 // Get all vertices that share this one ...
209209 vertexFinder->FindPositions( pMesh->mVertices[i] , posEpsilon, verticesFound);
210210
211 aiVector3D vr = pMesh->mNormals[i];
212 float vrlen = vr.Length();
213
211214 aiVector3D pcNor;
212215 for (unsigned int a = 0; a < verticesFound.size(); ++a) {
213 const aiVector3D& v = pMesh->mNormals[verticesFound[a]];
216 aiVector3D v = pMesh->mNormals[verticesFound[a]];
214217
215218 // check whether the angle between the two normals is not too large
216219 // HACK: if v.x is qnan the dot product will become qnan, too
217220 // therefore the comparison against fLimit should be false
218221 // in every case.
219 if (v * pMesh->mNormals[i] < fLimit)
220 continue;
221
222 pcNor += v;
222 if (v * vr >= fLimit * vrlen * v.Length())
223 pcNor += v;
223224 }
224225 pcNew[i] = pcNor.Normalize();
225226 }
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2010, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file IFCBoolean.cpp
41 * @brief Implements a subset of Ifc boolean operations
42 */
43
44 #include "AssimpPCH.h"
45
46 #ifndef ASSIMP_BUILD_NO_IFC_IMPORTER
47 #include "IFCUtil.h"
48 #include "PolyTools.h"
49 #include "ProcessHelper.h"
50
51 #include <iterator>
52
53 namespace Assimp {
54 namespace IFC {
55
56 // ------------------------------------------------------------------------------------------------
57 enum Intersect {
58 Intersect_No,
59 Intersect_LiesOnPlane,
60 Intersect_Yes
61 };
62
63 // ------------------------------------------------------------------------------------------------
64 Intersect IntersectSegmentPlane(const IfcVector3& p,const IfcVector3& n, const IfcVector3& e0,
65 const IfcVector3& e1,
66 IfcVector3& out)
67 {
68 const IfcVector3 pdelta = e0 - p, seg = e1-e0;
69 const IfcFloat dotOne = n*seg, dotTwo = -(n*pdelta);
70
71 if (fabs(dotOne) < 1e-6) {
72 return fabs(dotTwo) < 1e-6f ? Intersect_LiesOnPlane : Intersect_No;
73 }
74
75 const IfcFloat t = dotTwo/dotOne;
76 // t must be in [0..1] if the intersection point is within the given segment
77 if (t > 1.f || t < 0.f) {
78 return Intersect_No;
79 }
80 out = e0+t*seg;
81 return Intersect_Yes;
82 }
83
84 // ------------------------------------------------------------------------------------------------
85 void ProcessBooleanHalfSpaceDifference(const IfcHalfSpaceSolid* hs, TempMesh& result,
86 const TempMesh& first_operand,
87 ConversionData& conv)
88 {
89 ai_assert(hs != NULL);
90
91 const IfcPlane* const plane = hs->BaseSurface->ToPtr<IfcPlane>();
92 if(!plane) {
93 IFCImporter::LogError("expected IfcPlane as base surface for the IfcHalfSpaceSolid");
94 return;
95 }
96
97 // extract plane base position vector and normal vector
98 IfcVector3 p,n(0.f,0.f,1.f);
99 if (plane->Position->Axis) {
100 ConvertDirection(n,plane->Position->Axis.Get());
101 }
102 ConvertCartesianPoint(p,plane->Position->Location);
103
104 if(!IsTrue(hs->AgreementFlag)) {
105 n *= -1.f;
106 }
107
108 // clip the current contents of `meshout` against the plane we obtained from the second operand
109 const std::vector<IfcVector3>& in = first_operand.verts;
110 std::vector<IfcVector3>& outvert = result.verts;
111
112 std::vector<unsigned int>::const_iterator begin = first_operand.vertcnt.begin(),
113 end = first_operand.vertcnt.end(), iit;
114
115 outvert.reserve(in.size());
116 result.vertcnt.reserve(first_operand.vertcnt.size());
117
118 unsigned int vidx = 0;
119 for(iit = begin; iit != end; vidx += *iit++) {
120
121 unsigned int newcount = 0;
122 for(unsigned int i = 0; i < *iit; ++i) {
123 const IfcVector3& e0 = in[vidx+i], e1 = in[vidx+(i+1)%*iit];
124
125 // does the next segment intersect the plane?
126 IfcVector3 isectpos;
127 const Intersect isect = IntersectSegmentPlane(p,n,e0,e1,isectpos);
128 if (isect == Intersect_No || isect == Intersect_LiesOnPlane) {
129 if ( (e0-p).Normalize()*n > 0 ) {
130 outvert.push_back(e0);
131 ++newcount;
132 }
133 }
134 else if (isect == Intersect_Yes) {
135 if ( (e0-p).Normalize()*n > 0 ) {
136 // e0 is on the right side, so keep it
137 outvert.push_back(e0);
138 outvert.push_back(isectpos);
139 newcount += 2;
140 }
141 else {
142 // e0 is on the wrong side, so drop it and keep e1 instead
143 outvert.push_back(isectpos);
144 ++newcount;
145 }
146 }
147 }
148
149 if (!newcount) {
150 continue;
151 }
152
153 IfcVector3 vmin,vmax;
154 ArrayBounds(&*(outvert.end()-newcount),newcount,vmin,vmax);
155
156 // filter our IfcFloat points - those may happen if a point lies
157 // directly on the intersection line. However, due to IfcFloat
158 // precision a bitwise comparison is not feasible to detect
159 // this case.
160 const IfcFloat epsilon = (vmax-vmin).SquareLength() / 1e6f;
161 FuzzyVectorCompare fz(epsilon);
162
163 std::vector<IfcVector3>::iterator e = std::unique( outvert.end()-newcount, outvert.end(), fz );
164
165 if (e != outvert.end()) {
166 newcount -= static_cast<unsigned int>(std::distance(e,outvert.end()));
167 outvert.erase(e,outvert.end());
168 }
169 if (fz(*( outvert.end()-newcount),outvert.back())) {
170 outvert.pop_back();
171 --newcount;
172 }
173 if(newcount > 2) {
174 result.vertcnt.push_back(newcount);
175 }
176 else while(newcount-->0) {
177 result.verts.pop_back();
178 }
179
180 }
181 IFCImporter::LogDebug("generating CSG geometry by plane clipping (IfcBooleanClippingResult)");
182 }
183
184 // ------------------------------------------------------------------------------------------------
185 // Check if e0-e1 intersects a sub-segment of the given boundary line.
186 // note: this functions works on 3D vectors, but performs its intersection checks solely in xy.
187 bool IntersectsBoundaryProfile( const IfcVector3& e0, const IfcVector3& e1, const std::vector<IfcVector3>& boundary,
188 std::vector<size_t>& intersected_boundary_segments,
189 std::vector<IfcVector3>& intersected_boundary_points,
190 bool half_open = false,
191 bool* e0_hits_border = NULL)
192 {
193 ai_assert(intersected_boundary_segments.empty());
194 ai_assert(intersected_boundary_points.empty());
195
196 if(e0_hits_border) {
197 *e0_hits_border = false;
198 }
199
200 const IfcVector3& e = e1 - e0;
201
202 for (size_t i = 0, bcount = boundary.size(); i < bcount; ++i) {
203 // boundary segment i: b0-b1
204 const IfcVector3& b0 = boundary[i];
205 const IfcVector3& b1 = boundary[(i+1) % bcount];
206
207 const IfcVector3& b = b1 - b0;
208
209 // segment-segment intersection
210 // solve b0 + b*s = e0 + e*t for (s,t)
211 const IfcFloat det = (-b.x * e.y + e.x * b.y);
212 if(fabs(det) < 1e-6) {
213 // no solutions (parallel lines)
214 continue;
215 }
216
217 const IfcFloat x = b0.x - e0.x;
218 const IfcFloat y = b0.y - e0.y;
219
220 const IfcFloat s = (x*e.y - e.x*y)/det;
221 const IfcFloat t = (x*b.y - b.x*y)/det;
222
223 #ifdef ASSIMP_BUILD_DEBUG
224 const IfcVector3 check = b0 + b*s - (e0 + e*t);
225 ai_assert((IfcVector2(check.x,check.y)).SquareLength() < 1e-5);
226 #endif
227
228 // for a valid intersection, s-t should be in range [0,1].
229 // note that for t (i.e. the segment point) we only use a
230 // half-sided epsilon because the next segment should catch
231 // this case.
232 const IfcFloat epsilon = 1e-6;
233 if (t >= -epsilon && (t <= 1.0+epsilon || half_open) && s >= -epsilon && s <= 1.0) {
234
235 if (e0_hits_border && !*e0_hits_border) {
236 *e0_hits_border = fabs(t) < 1e-5f;
237 }
238
239 const IfcVector3& p = e0 + e*t;
240
241 // only insert the point into the list if it is sufficiently
242 // far away from the previous intersection point. This way,
243 // we avoid duplicate detection if the intersection is
244 // directly on the vertex between two segments.
245 if (!intersected_boundary_points.empty() && intersected_boundary_segments.back()==i-1 ) {
246 const IfcVector3 diff = intersected_boundary_points.back() - p;
247 if(IfcVector2(diff.x, diff.y).SquareLength() < 1e-7) {
248 continue;
249 }
250 }
251 intersected_boundary_segments.push_back(i);
252 intersected_boundary_points.push_back(p);
253 }
254 }
255
256 return !intersected_boundary_segments.empty();
257 }
258
259
260 // ------------------------------------------------------------------------------------------------
261 // note: this functions works on 3D vectors, but performs its intersection checks solely in xy.
262 bool PointInPoly(const IfcVector3& p, const std::vector<IfcVector3>& boundary)
263 {
264 // even-odd algorithm: take a random vector that extends from p to infinite
265 // and counts how many times it intersects edges of the boundary.
266 // because checking for segment intersections is prone to numeric inaccuracies
267 // or double detections (i.e. when hitting multiple adjacent segments at their
268 // shared vertices) we do it thrice with different rays and vote on it.
269
270 // the even-odd algorithm doesn't work for points which lie directly on
271 // the border of the polygon. If any of our attempts produces this result,
272 // we return false immediately.
273
274 std::vector<size_t> intersected_boundary_segments;
275 std::vector<IfcVector3> intersected_boundary_points;
276 size_t votes = 0;
277
278 bool is_border;
279 IntersectsBoundaryProfile(p, p + IfcVector3(1.0,0,0), boundary,
280 intersected_boundary_segments,
281 intersected_boundary_points, true, &is_border);
282
283 if(is_border) {
284 return false;
285 }
286
287 votes += intersected_boundary_segments.size() % 2;
288
289 intersected_boundary_segments.clear();
290 intersected_boundary_points.clear();
291
292 IntersectsBoundaryProfile(p, p + IfcVector3(0,1.0,0), boundary,
293 intersected_boundary_segments,
294 intersected_boundary_points, true, &is_border);
295
296 if(is_border) {
297 return false;
298 }
299
300 votes += intersected_boundary_segments.size() % 2;
301
302 intersected_boundary_segments.clear();
303 intersected_boundary_points.clear();
304
305 IntersectsBoundaryProfile(p, p + IfcVector3(0.6,-0.6,0.0), boundary,
306 intersected_boundary_segments,
307 intersected_boundary_points, true, &is_border);
308
309 if(is_border) {
310 return false;
311 }
312
313 votes += intersected_boundary_segments.size() % 2;
314 //ai_assert(votes == 3 || votes == 0);
315 return votes > 1;
316 }
317
318
319 // ------------------------------------------------------------------------------------------------
320 void ProcessPolygonalBoundedBooleanHalfSpaceDifference(const IfcPolygonalBoundedHalfSpace* hs, TempMesh& result,
321 const TempMesh& first_operand,
322 ConversionData& conv)
323 {
324 ai_assert(hs != NULL);
325
326 const IfcPlane* const plane = hs->BaseSurface->ToPtr<IfcPlane>();
327 if(!plane) {
328 IFCImporter::LogError("expected IfcPlane as base surface for the IfcHalfSpaceSolid");
329 return;
330 }
331
332 // extract plane base position vector and normal vector
333 IfcVector3 p,n(0.f,0.f,1.f);
334 if (plane->Position->Axis) {
335 ConvertDirection(n,plane->Position->Axis.Get());
336 }
337 ConvertCartesianPoint(p,plane->Position->Location);
338
339 if(!IsTrue(hs->AgreementFlag)) {
340 n *= -1.f;
341 }
342
343 n.Normalize();
344
345 // obtain the polygonal bounding volume
346 boost::shared_ptr<TempMesh> profile = boost::shared_ptr<TempMesh>(new TempMesh());
347 if(!ProcessCurve(hs->PolygonalBoundary, *profile.get(), conv)) {
348 IFCImporter::LogError("expected valid polyline for boundary of boolean halfspace");
349 return;
350 }
351
352 IfcMatrix4 proj_inv;
353 ConvertAxisPlacement(proj_inv,hs->Position);
354
355 // and map everything into a plane coordinate space so all intersection
356 // tests can be done in 2D space.
357 IfcMatrix4 proj = proj_inv;
358 proj.Inverse();
359
360 // clip the current contents of `meshout` against the plane we obtained from the second operand
361 const std::vector<IfcVector3>& in = first_operand.verts;
362 std::vector<IfcVector3>& outvert = result.verts;
363
364 std::vector<unsigned int>::const_iterator begin = first_operand.vertcnt.begin(),
365 end = first_operand.vertcnt.end(), iit;
366
367 outvert.reserve(in.size());
368 result.vertcnt.reserve(first_operand.vertcnt.size());
369
370 std::vector<size_t> intersected_boundary_segments;
371 std::vector<IfcVector3> intersected_boundary_points;
372
373 // TODO: the following algorithm doesn't handle all cases.
374 unsigned int vidx = 0;
375 for(iit = begin; iit != end; vidx += *iit++) {
376 if (!*iit) {
377 continue;
378 }
379
380 unsigned int newcount = 0;
381 bool was_outside_boundary = !PointInPoly(proj * in[vidx], profile->verts);
382
383 // used any more?
384 //size_t last_intersected_boundary_segment;
385 IfcVector3 last_intersected_boundary_point;
386
387 bool extra_point_flag = false;
388 IfcVector3 extra_point;
389
390 IfcVector3 enter_volume;
391 bool entered_volume_flag = false;
392
393 for(unsigned int i = 0; i < *iit; ++i) {
394 // current segment: [i,i+1 mod size] or [*extra_point,i] if extra_point_flag is set
395 const IfcVector3& e0 = extra_point_flag ? extra_point : in[vidx+i];
396 const IfcVector3& e1 = extra_point_flag ? in[vidx+i] : in[vidx+(i+1)%*iit];
397
398 // does the current segment intersect the polygonal boundary?
399 const IfcVector3& e0_plane = proj * e0;
400 const IfcVector3& e1_plane = proj * e1;
401
402 intersected_boundary_segments.clear();
403 intersected_boundary_points.clear();
404
405 const bool is_outside_boundary = !PointInPoly(e1_plane, profile->verts);
406 const bool is_boundary_intersection = is_outside_boundary != was_outside_boundary;
407
408 IntersectsBoundaryProfile(e0_plane, e1_plane, profile->verts,
409 intersected_boundary_segments,
410 intersected_boundary_points);
411
412 ai_assert(!is_boundary_intersection || !intersected_boundary_segments.empty());
413
414 // does the current segment intersect the plane?
415 // (no extra check if this is an extra point)
416 IfcVector3 isectpos;
417 const Intersect isect = extra_point_flag ? Intersect_No : IntersectSegmentPlane(p,n,e0,e1,isectpos);
418
419 #ifdef ASSIMP_BUILD_DEBUG
420 if (isect == Intersect_Yes) {
421 const IfcFloat f = fabs((isectpos - p)*n);
422 ai_assert(f < 1e-5);
423 }
424 #endif
425
426 const bool is_white_side = (e0-p)*n >= -1e-6;
427
428 // e0 on good side of plane? (i.e. we should keep all geometry on this side)
429 if (is_white_side) {
430 // but is there an intersection in e0-e1 and is e1 in the clipping
431 // boundary? In this case, generate a line that only goes to the
432 // intersection point.
433 if (isect == Intersect_Yes && !is_outside_boundary) {
434 outvert.push_back(e0);
435 ++newcount;
436
437 outvert.push_back(isectpos);
438 ++newcount;
439
440 /*
441 // this is, however, only a line that goes to the plane, but not
442 // necessarily to the point where the bounding volume on the
443 // black side of the plane is hit. So basically, we need another
444 // check for [isectpos-e1], which should yield an intersection
445 // point.
446 extra_point_flag = true;
447 extra_point = isectpos;
448
449 was_outside_boundary = true;
450 continue; */
451
452 // [isectpos, enter_volume] potentially needs extra points.
453 // For this, we determine the intersection point with the
454 // bounding volume and project it onto the plane.
455 /*
456 const IfcVector3& enter_volume_proj = proj * enter_volume;
457 const IfcVector3& enter_isectpos = proj * isectpos;
458
459 intersected_boundary_segments.clear();
460 intersected_boundary_points.clear();
461
462 IntersectsBoundaryProfile(enter_volume_proj, enter_isectpos, profile->verts,
463 intersected_boundary_segments,
464 intersected_boundary_points);
465
466 if(!intersected_boundary_segments.empty()) {
467
468 vec = vec + ((p - vec) * n) * n;
469 }
470 */
471
472 //entered_volume_flag = true;
473 }
474 else {
475 outvert.push_back(e0);
476 ++newcount;
477 }
478 }
479 // e0 on bad side of plane, e1 on good (i.e. we should remove geometry on this side,
480 // but only if it is within the bounding volume).
481 else if (isect == Intersect_Yes) {
482 // is e0 within the clipping volume? Insert the intersection point
483 // of [e0,e1] and the plane instead of e0.
484 if(was_outside_boundary) {
485 outvert.push_back(e0);
486 }
487 else {
488 if(entered_volume_flag) {
489 const IfcVector3& fix_point = enter_volume + ((p - enter_volume) * n) * n;
490 outvert.push_back(fix_point);
491 ++newcount;
492 }
493
494 outvert.push_back(isectpos);
495 }
496 entered_volume_flag = false;
497 ++newcount;
498 }
499 else { // no intersection with plane or parallel; e0,e1 are on the bad side
500
501 // did we just pass the boundary line to the poly bounding?
502 if (is_boundary_intersection) {
503
504 // and are now outside the clipping boundary?
505 if (is_outside_boundary) {
506 // in this case, get the point where the clipping boundary
507 // was entered first. Then, get the point where the clipping
508 // boundary volume was left! These two points with the plane
509 // normal form another plane that intersects the clipping
510 // volume. There are two ways to get from the first to the
511 // second point along the intersection curve, try to pick the
512 // one that lies within the current polygon.
513
514 // TODO this approach doesn't handle all cases
515
516 // ...
517
518 IfcFloat d = 1e20;
519 IfcVector3 vclosest;
520 BOOST_FOREACH(const IfcVector3& v, intersected_boundary_points) {
521 const IfcFloat dn = (v-e1_plane).SquareLength();
522 if (dn < d) {
523 d = dn;
524 vclosest = v;
525 }
526 }
527
528 vclosest = proj_inv * vclosest;
529 if(entered_volume_flag) {
530 const IfcVector3& fix_point = vclosest + ((p - vclosest) * n) * n;
531 outvert.push_back(fix_point);
532 ++newcount;
533
534 entered_volume_flag = false;
535 }
536
537 outvert.push_back(vclosest);
538 ++newcount;
539
540 //outvert.push_back(e1);
541 //++newcount;
542 }
543 else {
544 entered_volume_flag = true;
545
546 // we just entered the clipping boundary. Record the point
547 // and the segment where we entered and also generate this point.
548 //last_intersected_boundary_segment = intersected_boundary_segments.front();
549 //last_intersected_boundary_point = intersected_boundary_points.front();
550
551 outvert.push_back(e0);
552 ++newcount;
553
554 IfcFloat d = 1e20;
555 IfcVector3 vclosest;
556 BOOST_FOREACH(const IfcVector3& v, intersected_boundary_points) {
557 const IfcFloat dn = (v-e0_plane).SquareLength();
558 if (dn < d) {
559 d = dn;
560 vclosest = v;
561 }
562 }
563
564 enter_volume = proj_inv * vclosest;
565 outvert.push_back(enter_volume);
566 ++newcount;
567 }
568 }
569 // if not, we just keep the vertex
570 else if (is_outside_boundary) {
571 outvert.push_back(e0);
572 ++newcount;
573
574 entered_volume_flag = false;
575 }
576 }
577
578 was_outside_boundary = is_outside_boundary;
579 extra_point_flag = false;
580 }
581
582 if (!newcount) {
583 continue;
584 }
585
586 IfcVector3 vmin,vmax;
587 ArrayBounds(&*(outvert.end()-newcount),newcount,vmin,vmax);
588
589 // filter our IfcFloat points - those may happen if a point lies
590 // directly on the intersection line. However, due to IfcFloat
591 // precision a bitwise comparison is not feasible to detect
592 // this case.
593 const IfcFloat epsilon = (vmax-vmin).SquareLength() / 1e6f;
594 FuzzyVectorCompare fz(epsilon);
595
596 std::vector<IfcVector3>::iterator e = std::unique( outvert.end()-newcount, outvert.end(), fz );
597
598 if (e != outvert.end()) {
599 newcount -= static_cast<unsigned int>(std::distance(e,outvert.end()));
600 outvert.erase(e,outvert.end());
601 }
602 if (fz(*( outvert.end()-newcount),outvert.back())) {
603 outvert.pop_back();
604 --newcount;
605 }
606 if(newcount > 2) {
607 result.vertcnt.push_back(newcount);
608 }
609 else while(newcount-->0) {
610 result.verts.pop_back();
611 }
612
613 }
614 IFCImporter::LogDebug("generating CSG geometry by plane clipping with polygonal bounding (IfcBooleanClippingResult)");
615 }
616
617 // ------------------------------------------------------------------------------------------------
618 void ProcessBooleanExtrudedAreaSolidDifference(const IfcExtrudedAreaSolid* as, TempMesh& result,
619 const TempMesh& first_operand,
620 ConversionData& conv)
621 {
622 ai_assert(as != NULL);
623
624 // This case is handled by reduction to an instance of the quadrify() algorithm.
625 // Obviously, this won't work for arbitrarily complex cases. In fact, the first
626 // operand should be near-planar. Luckily, this is usually the case in Ifc
627 // buildings.
628
629 boost::shared_ptr<TempMesh> meshtmp = boost::shared_ptr<TempMesh>(new TempMesh());
630 ProcessExtrudedAreaSolid(*as,*meshtmp,conv,false);
631
632 std::vector<TempOpening> openings(1, TempOpening(as,IfcVector3(0,0,0),meshtmp,boost::shared_ptr<TempMesh>()));
633
634 result = first_operand;
635
636 TempMesh temp;
637
638 std::vector<IfcVector3>::const_iterator vit = first_operand.verts.begin();
639 BOOST_FOREACH(unsigned int pcount, first_operand.vertcnt) {
640 temp.Clear();
641
642 temp.verts.insert(temp.verts.end(), vit, vit + pcount);
643 temp.vertcnt.push_back(pcount);
644
645 // The algorithms used to generate mesh geometry sometimes
646 // spit out lines or other degenerates which must be
647 // filtered to avoid running into assertions later on.
648
649 // ComputePolygonNormal returns the Newell normal, so the
650 // length of the normal is the area of the polygon.
651 const IfcVector3& normal = temp.ComputeLastPolygonNormal(false);
652 if (normal.SquareLength() < static_cast<IfcFloat>(1e-5)) {
653 IFCImporter::LogWarn("skipping degenerate polygon (ProcessBooleanExtrudedAreaSolidDifference)");
654 continue;
655 }
656
657 GenerateOpenings(openings, std::vector<IfcVector3>(1,IfcVector3(1,0,0)), temp, false, true);
658 result.Append(temp);
659
660 vit += pcount;
661 }
662
663 IFCImporter::LogDebug("generating CSG geometry by geometric difference to a solid (IfcExtrudedAreaSolid)");
664 }
665
666 // ------------------------------------------------------------------------------------------------
667 void ProcessBoolean(const IfcBooleanResult& boolean, TempMesh& result, ConversionData& conv)
668 {
669 // supported CSG operations:
670 // DIFFERENCE
671 if(const IfcBooleanResult* const clip = boolean.ToPtr<IfcBooleanResult>()) {
672 if(clip->Operator != "DIFFERENCE") {
673 IFCImporter::LogWarn("encountered unsupported boolean operator: " + (std::string)clip->Operator);
674 return;
675 }
676
677 // supported cases (1st operand):
678 // IfcBooleanResult -- call ProcessBoolean recursively
679 // IfcSweptAreaSolid -- obtain polygonal geometry first
680
681 // supported cases (2nd operand):
682 // IfcHalfSpaceSolid -- easy, clip against plane
683 // IfcExtrudedAreaSolid -- reduce to an instance of the quadrify() algorithm
684
685
686 const IfcHalfSpaceSolid* const hs = clip->SecondOperand->ResolveSelectPtr<IfcHalfSpaceSolid>(conv.db);
687 const IfcExtrudedAreaSolid* const as = clip->SecondOperand->ResolveSelectPtr<IfcExtrudedAreaSolid>(conv.db);
688 if(!hs && !as) {
689 IFCImporter::LogError("expected IfcHalfSpaceSolid or IfcExtrudedAreaSolid as second clipping operand");
690 return;
691 }
692
693 TempMesh first_operand;
694 if(const IfcBooleanResult* const op0 = clip->FirstOperand->ResolveSelectPtr<IfcBooleanResult>(conv.db)) {
695 ProcessBoolean(*op0,first_operand,conv);
696 }
697 else if (const IfcSweptAreaSolid* const swept = clip->FirstOperand->ResolveSelectPtr<IfcSweptAreaSolid>(conv.db)) {
698 ProcessSweptAreaSolid(*swept,first_operand,conv);
699 }
700 else {
701 IFCImporter::LogError("expected IfcSweptAreaSolid or IfcBooleanResult as first clipping operand");
702 return;
703 }
704
705 if(hs) {
706
707 const IfcPolygonalBoundedHalfSpace* const hs_bounded = clip->SecondOperand->ResolveSelectPtr<IfcPolygonalBoundedHalfSpace>(conv.db);
708 if (hs_bounded) {
709 ProcessPolygonalBoundedBooleanHalfSpaceDifference(hs_bounded, result, first_operand, conv);
710 }
711 else {
712 ProcessBooleanHalfSpaceDifference(hs, result, first_operand, conv);
713 }
714 }
715 else {
716 ProcessBooleanExtrudedAreaSolidDifference(as, result, first_operand, conv);
717 }
718 }
719 else {
720 IFCImporter::LogWarn("skipping unknown IfcBooleanResult entity, type is " + boolean.GetClassName());
721 }
722 }
723
724 } // ! IFC
725 } // ! Assimp
726
727 #endif
728
8484 size_t EstimateSampleCount(IfcFloat a, IfcFloat b) const {
8585 ai_assert(InRange(a) && InRange(b));
8686
87 a = fmod(a,static_cast<IfcFloat>( 360. ));
88 b = fmod(b,static_cast<IfcFloat>( 360. ));
89 return static_cast<size_t>( abs(ceil(( b-a)) / conv.settings.conicSamplingAngle) );
87 a *= conv.angle_scale;
88 b *= conv.angle_scale;
89
90 a = fmod(a,static_cast<IfcFloat>( AI_MATH_TWO_PI ));
91 b = fmod(b,static_cast<IfcFloat>( AI_MATH_TWO_PI ));
92 const IfcFloat setting = static_cast<IfcFloat>( AI_MATH_PI * conv.settings.conicSamplingAngle / 180.0 );
93 return static_cast<size_t>( ceil(abs( b-a)) / setting);
9094 }
9195
9296 // --------------------------------------------------
9397 ParamRange GetParametricRange() const {
94 return std::make_pair(static_cast<IfcFloat>( 0. ), static_cast<IfcFloat>( 360. ));
98 return std::make_pair(static_cast<IfcFloat>( 0. ), static_cast<IfcFloat>( AI_MATH_TWO_PI / conv.angle_scale ));
9599 }
96100
97101 protected:
271275 IfcFloat acc = 0;
272276 BOOST_FOREACH(const CurveEntry& entry, curves) {
273277 const ParamRange& range = entry.first->GetParametricRange();
274 const IfcFloat delta = range.second-range.first;
278 const IfcFloat delta = abs(range.second-range.first);
275279 if (u < acc+delta) {
276280 return entry.first->Eval( entry.second ? (u-acc) + range.first : range.second-(u-acc));
277281 }
290294 IfcFloat acc = 0;
291295 BOOST_FOREACH(const CurveEntry& entry, curves) {
292296 const ParamRange& range = entry.first->GetParametricRange();
293 const IfcFloat delta = range.second-range.first;
297 const IfcFloat delta = abs(range.second-range.first);
294298 if (a <= acc+delta && b >= acc) {
295299 const IfcFloat at = std::max(static_cast<IfcFloat>( 0. ),a-acc), bt = std::min(delta,b-acc);
296300 cnt += entry.first->EstimateSampleCount( entry.second ? at + range.first : range.second - bt, entry.second ? bt + range.first : range.second - at );
424428 }
425429
426430 // --------------------------------------------------
431 void SampleDiscrete(TempMesh& out,IfcFloat a,IfcFloat b) const {
432 ai_assert(InRange(a) && InRange(b));
433 return base->SampleDiscrete(out,TrimParam(a),TrimParam(b));
434 }
435
436 // --------------------------------------------------
427437 ParamRange GetParametricRange() const {
428438 return std::make_pair(static_cast<IfcFloat>( 0. ),maxval);
429439 }
539549 return NULL;
540550 }
541551
542 #ifdef _DEBUG
552 #ifdef ASSIMP_BUILD_DEBUG
543553 // ------------------------------------------------------------------------------------------------
544554 bool Curve :: InRange(IfcFloat u) const
545555 {
546556 const ParamRange range = GetParametricRange();
547557 if (IsClosed()) {
548 ai_assert(range.first != std::numeric_limits<IfcFloat>::infinity() && range.second != std::numeric_limits<IfcFloat>::infinity());
549 u = range.first + fmod(u-range.first,range.second-range.first);
550 }
551 return u >= range.first && u <= range.second;
558 return true;
559 //ai_assert(range.first != std::numeric_limits<IfcFloat>::infinity() && range.second != std::numeric_limits<IfcFloat>::infinity());
560 //u = range.first + fmod(u-range.first,range.second-range.first);
561 }
562 const IfcFloat epsilon = 1e-5;
563 return u - range.first > -epsilon && range.second - u > -epsilon;
552564 }
553565 #endif
554566
556568 IfcFloat Curve :: GetParametricRangeDelta() const
557569 {
558570 const ParamRange& range = GetParametricRange();
559 return range.second - range.first;
571 return abs(range.second - range.first);
560572 }
561573
562574 // ------------------------------------------------------------------------------------------------
5656 namespace Assimp {
5757 namespace IFC {
5858
59 using ClipperLib::ulong64;
60 // XXX use full -+ range ...
61 const ClipperLib::long64 max_ulong64 = 1518500249; // clipper.cpp / hiRange var
62
63 //#define to_int64(p) (static_cast<ulong64>( std::max( 0., std::min( static_cast<IfcFloat>((p)), 1.) ) * max_ulong64 ))
64 #define to_int64(p) (static_cast<ulong64>(static_cast<IfcFloat>((p) ) * max_ulong64 ))
65 #define from_int64(p) (static_cast<IfcFloat>((p)) / max_ulong64)
66
6759 // ------------------------------------------------------------------------------------------------
6860 bool ProcessPolyloop(const IfcPolyLoop& loop, TempMesh& meshout, ConversionData& /*conv*/)
6961 {
9183 }
9284
9385 // ------------------------------------------------------------------------------------------------
94 void ComputePolygonNormals(const TempMesh& meshout, std::vector<IfcVector3>& normals, bool normalize = true, size_t ofs = 0)
95 {
96 size_t max_vcount = 0;
97 std::vector<unsigned int>::const_iterator begin=meshout.vertcnt.begin()+ofs, end=meshout.vertcnt.end(), iit;
98 for(iit = begin; iit != end; ++iit) {
99 max_vcount = std::max(max_vcount,static_cast<size_t>(*iit));
100 }
101
102 std::vector<IfcFloat> temp((max_vcount+2)*4);
103 normals.reserve( normals.size() + meshout.vertcnt.size()-ofs );
104
105 // `NewellNormal()` currently has a relatively strange interface and need to
106 // re-structure things a bit to meet them.
107 size_t vidx = std::accumulate(meshout.vertcnt.begin(),begin,0);
108 for(iit = begin; iit != end; vidx += *iit++) {
109 if (!*iit) {
110 normals.push_back(IfcVector3());
111 continue;
112 }
113 for(size_t vofs = 0, cnt = 0; vofs < *iit; ++vofs) {
114 const IfcVector3& v = meshout.verts[vidx+vofs];
115 temp[cnt++] = v.x;
116 temp[cnt++] = v.y;
117 temp[cnt++] = v.z;
118 #ifdef _DEBUG
119 temp[cnt] = std::numeric_limits<IfcFloat>::quiet_NaN();
120 #endif
121 ++cnt;
122 }
123
124 normals.push_back(IfcVector3());
125 NewellNormal<4,4,4>(normals.back(),*iit,&temp[0],&temp[1],&temp[2]);
126 }
127
128 if(normalize) {
129 BOOST_FOREACH(IfcVector3& n, normals) {
130 n.Normalize();
131 }
132 }
133 }
134
135 // ------------------------------------------------------------------------------------------------
136 // Compute the normal of the last polygon in the given mesh
137 IfcVector3 ComputePolygonNormal(const TempMesh& inmesh, bool normalize = true)
138 {
139 size_t total = inmesh.vertcnt.back(), vidx = inmesh.verts.size() - total;
140 std::vector<IfcFloat> temp((total+2)*3);
141 for(size_t vofs = 0, cnt = 0; vofs < total; ++vofs) {
142 const IfcVector3& v = inmesh.verts[vidx+vofs];
143 temp[cnt++] = v.x;
144 temp[cnt++] = v.y;
145 temp[cnt++] = v.z;
146 }
147 IfcVector3 nor;
148 NewellNormal<3,3,3>(nor,total,&temp[0],&temp[1],&temp[2]);
149 return normalize ? nor.Normalize() : nor;
150 }
151
152 // ------------------------------------------------------------------------------------------------
153 void FixupFaceOrientation(TempMesh& result)
154 {
155 const IfcVector3 vavg = result.Center();
156
157 std::vector<IfcVector3> normals;
158 ComputePolygonNormals(result,normals);
159
160 size_t c = 0, ofs = 0;
161 BOOST_FOREACH(unsigned int cnt, result.vertcnt) {
162 if (cnt>2){
163 const IfcVector3& thisvert = result.verts[c];
164 if (normals[ofs]*(thisvert-vavg) < 0) {
165 std::reverse(result.verts.begin()+c,result.verts.begin()+cnt+c);
166 }
167 }
168 c += cnt;
169 ++ofs;
170 }
171 }
172
173 // ------------------------------------------------------------------------------------------------
174 void RecursiveMergeBoundaries(TempMesh& final_result, const TempMesh& in, const TempMesh& boundary, std::vector<IfcVector3>& normals, const IfcVector3& nor_boundary)
175 {
176 ai_assert(in.vertcnt.size() >= 1);
177 ai_assert(boundary.vertcnt.size() == 1);
178 std::vector<unsigned int>::const_iterator end = in.vertcnt.end(), begin=in.vertcnt.begin(), iit, best_iit;
179
180 TempMesh out;
181
182 // iterate through all other bounds and find the one for which the shortest connection
183 // to the outer boundary is actually the shortest possible.
184 size_t vidx = 0, best_vidx_start = 0;
185 size_t best_ofs, best_outer = boundary.verts.size();
186 IfcFloat best_dist = 1e10;
187 for(std::vector<unsigned int>::const_iterator iit = begin; iit != end; vidx += *iit++) {
188
189 for(size_t vofs = 0; vofs < *iit; ++vofs) {
190 const IfcVector3& v = in.verts[vidx+vofs];
191
192 for(size_t outer = 0; outer < boundary.verts.size(); ++outer) {
193 const IfcVector3& o = boundary.verts[outer];
194 const IfcFloat d = (o-v).SquareLength();
195
196 if (d < best_dist) {
197 best_dist = d;
198 best_ofs = vofs;
199 best_outer = outer;
200 best_iit = iit;
201 best_vidx_start = vidx;
202 }
203 }
204 }
205 }
206
207 ai_assert(best_outer != boundary.verts.size());
208
209
210 // now that we collected all vertex connections to be added, build the output polygon
211 const size_t cnt = boundary.verts.size() + *best_iit+2;
212 out.verts.reserve(cnt);
213
214 for(size_t outer = 0; outer < boundary.verts.size(); ++outer) {
215 const IfcVector3& o = boundary.verts[outer];
216 out.verts.push_back(o);
217
218 if (outer == best_outer) {
219 for(size_t i = best_ofs; i < *best_iit; ++i) {
220 out.verts.push_back(in.verts[best_vidx_start + i]);
221 }
222
223 // we need the first vertex of the inner polygon twice as we return to the
224 // outer loop through the very same connection through which we got there.
225 for(size_t i = 0; i <= best_ofs; ++i) {
226 out.verts.push_back(in.verts[best_vidx_start + i]);
227 }
228
229 // reverse face winding if the normal of the sub-polygon points in the
230 // same direction as the normal of the outer polygonal boundary
231 if (normals[std::distance(begin,best_iit)] * nor_boundary > 0) {
232 std::reverse(out.verts.rbegin(),out.verts.rbegin()+*best_iit+1);
233 }
234
235 // also append a copy of the initial insertion point to be able to continue the outer polygon
236 out.verts.push_back(o);
237 }
238 }
239 out.vertcnt.push_back(cnt);
240 ai_assert(out.verts.size() == cnt);
241
242 if (in.vertcnt.size()-std::count(begin,end,0) > 1) {
243 // Recursively apply the same algorithm if there are more boundaries to merge. The
244 // current implementation is relatively inefficient, though.
245
246 TempMesh temp;
247
248 // drop the boundary that we just processed
249 const size_t dist = std::distance(begin, best_iit);
250 TempMesh remaining = in;
251 remaining.vertcnt.erase(remaining.vertcnt.begin() + dist);
252 remaining.verts.erase(remaining.verts.begin()+best_vidx_start,remaining.verts.begin()+best_vidx_start+*best_iit);
253
254 normals.erase(normals.begin() + dist);
255 RecursiveMergeBoundaries(temp,remaining,out,normals,nor_boundary);
256
257 final_result.Append(temp);
258 }
259 else final_result.Append(out);
260 }
261
262 // ------------------------------------------------------------------------------------------------
263 void MergePolygonBoundaries(TempMesh& result, const TempMesh& inmesh, size_t master_bounds = -1)
264 {
265 // standard case - only one boundary, just copy it to the result vector
266 if (inmesh.vertcnt.size() <= 1) {
86 void ProcessPolygonBoundaries(TempMesh& result, const TempMesh& inmesh, size_t master_bounds = (size_t)-1)
87 {
88 // handle all trivial cases
89 if(inmesh.vertcnt.empty()) {
90 return;
91 }
92 if(inmesh.vertcnt.size() == 1) {
26793 result.Append(inmesh);
26894 return;
26995 }
27096
271 result.vertcnt.reserve(inmesh.vertcnt.size()+result.vertcnt.size());
272
273 // XXX get rid of the extra copy if possible
274 TempMesh meshout = inmesh;
275
276 // handle polygons with holes. Our built in triangulation won't handle them as is, but
277 // the ear cutting algorithm is solid enough to deal with them if we join the inner
278 // holes with the outer boundaries by dummy connections.
279 IFCImporter::LogDebug("fixing polygon with holes for triangulation via ear-cutting");
280 std::vector<unsigned int>::iterator outer_polygon = meshout.vertcnt.end(), begin=meshout.vertcnt.begin(), end=outer_polygon, iit;
281
282 // each hole results in two extra vertices
283 result.verts.reserve(meshout.verts.size()+meshout.vertcnt.size()*2+result.verts.size());
284 size_t outer_polygon_start = 0;
285
97 ai_assert(std::count(inmesh.vertcnt.begin(), inmesh.vertcnt.end(), 0) == 0);
98
99 typedef std::vector<unsigned int>::const_iterator face_iter;
100
101 face_iter begin = inmesh.vertcnt.begin(), end = inmesh.vertcnt.end(), iit;
102 std::vector<unsigned int>::const_iterator outer_polygon_it = end;
103
104 // major task here: given a list of nested polygon boundaries (one of which
105 // is the outer contour), reduce the triangulation task arising here to
106 // one that can be solved using the "quadrulation" algorithm which we use
107 // for pouring windows out of walls. The algorithm does not handle all
108 // cases but at least it is numerically stable and gives "nice" triangles.
109
110 // first compute normals for all polygons using Newell's algorithm
286111 // do not normalize 'normals', we need the original length for computing the polygon area
287112 std::vector<IfcVector3> normals;
288 ComputePolygonNormals(meshout,normals,false);
289
290 // see if one of the polygons is a IfcFaceOuterBound (in which case `master_bounds` is its index).
291 // sadly we can't rely on it, the docs say 'At most one of the bounds shall be of the type IfcFaceOuterBound'
113 inmesh.ComputePolygonNormals(normals,false);
114
115 // One of the polygons might be a IfcFaceOuterBound (in which case `master_bounds`
116 // is its index). Sadly we can't rely on it, the docs say 'At most one of the bounds
117 // shall be of the type IfcFaceOuterBound'
292118 IfcFloat area_outer_polygon = 1e-10f;
293119 if (master_bounds != (size_t)-1) {
294 outer_polygon = begin + master_bounds;
295 outer_polygon_start = std::accumulate(begin,outer_polygon,0);
296 area_outer_polygon = normals[master_bounds].SquareLength();
120 ai_assert(master_bounds < inmesh.vertcnt.size());
121 outer_polygon_it = begin + master_bounds;
297122 }
298123 else {
299 size_t vidx = 0;
300 for(iit = begin; iit != meshout.vertcnt.end(); vidx += *iit++) {
301 // find the polygon with the largest area, it must be the outer bound.
124 for(iit = begin; iit != end; iit++) {
125 // find the polygon with the largest area and take it as the outer bound.
302126 IfcVector3& n = normals[std::distance(begin,iit)];
303127 const IfcFloat area = n.SquareLength();
304128 if (area > area_outer_polygon) {
305129 area_outer_polygon = area;
306 outer_polygon = iit;
307 outer_polygon_start = vidx;
308 }
309 }
310 }
311
312 ai_assert(outer_polygon != meshout.vertcnt.end());
313 std::vector<IfcVector3>& in = meshout.verts;
314
315 // skip over extremely small boundaries - this is a workaround to fix cases
316 // in which the number of holes is so extremely large that the
317 // triangulation code fails.
318 #define IFC_VERTICAL_HOLE_SIZE_THRESHOLD 0.000001f
319 size_t vidx = 0, removed = 0, index = 0;
320 const IfcFloat threshold = area_outer_polygon * IFC_VERTICAL_HOLE_SIZE_THRESHOLD;
321 for(iit = begin; iit != end ;++index) {
322 const IfcFloat sqlen = normals[index].SquareLength();
323 if (sqlen < threshold) {
324 std::vector<IfcVector3>::iterator inbase = in.begin()+vidx;
325 in.erase(inbase,inbase+*iit);
326
327 outer_polygon_start -= outer_polygon_start>vidx ? *iit : 0;
328 *iit++ = 0;
329 ++removed;
330
331 IFCImporter::LogDebug("skip small hole below threshold");
332 }
333 else {
334 normals[index] /= sqrt(sqlen);
335 vidx += *iit++;
336 }
337 }
338
339 // see if one or more of the hole has a face that lies directly on an outer bound.
340 // this happens for doors, for example.
341 vidx = 0;
342 for(iit = begin; ; vidx += *iit++) {
343 next_loop:
344 if (iit == end) {
345 break;
346 }
347 if (iit == outer_polygon) {
130 outer_polygon_it = iit;
131 }
132 }
133 }
134
135 ai_assert(outer_polygon_it != end);
136
137 const size_t outer_polygon_size = *outer_polygon_it;
138 const IfcVector3& master_normal = normals[std::distance(begin, outer_polygon_it)];
139
140 // Generate fake openings to meet the interface for the quadrulate
141 // algorithm. It boils down to generating small boxes given the
142 // inner polygon and the surface normal of the outer contour.
143 // It is important that we use the outer contour's normal because
144 // this is the plane onto which the quadrulate algorithm will
145 // project the entire mesh.
146 std::vector<TempOpening> fake_openings;
147 fake_openings.reserve(inmesh.vertcnt.size()-1);
148
149 std::vector<IfcVector3>::const_iterator vit = inmesh.verts.begin(), outer_vit;
150
151 for(iit = begin; iit != end; vit += *iit++) {
152 if (iit == outer_polygon_it) {
153 outer_vit = vit;
348154 continue;
349155 }
350156
351 for(size_t vofs = 0; vofs < *iit; ++vofs) {
352 if (!*iit) {
353 continue;
354 }
355 const size_t next = (vofs+1)%*iit;
356 const IfcVector3& v = in[vidx+vofs], &vnext = in[vidx+next],&vd = (vnext-v).Normalize();
357
358 for(size_t outer = 0; outer < *outer_polygon; ++outer) {
359 const IfcVector3& o = in[outer_polygon_start+outer], &onext = in[outer_polygon_start+(outer+1)%*outer_polygon], &od = (onext-o).Normalize();
360
361 if (fabs(vd * od) > 1.f-1e-6f && (onext-v).Normalize() * vd > 1.f-1e-6f && (onext-v)*(o-v) < 0) {
362 IFCImporter::LogDebug("got an inner hole that lies partly on the outer polygonal boundary, merging them to a single contour");
363
364 // in between outer and outer+1 insert all vertices of this loop, then drop the original altogether.
365 std::vector<IfcVector3> tmp(*iit);
366
367 const size_t start = (v-o).SquareLength() > (vnext-o).SquareLength() ? vofs : next;
368 std::vector<IfcVector3>::iterator inbase = in.begin()+vidx, it = std::copy(inbase+start, inbase+*iit,tmp.begin());
369 std::copy(inbase, inbase+start,it);
370 std::reverse(tmp.begin(),tmp.end());
371
372 in.insert(in.begin()+outer_polygon_start+(outer+1)%*outer_polygon,tmp.begin(),tmp.end());
373 vidx += outer_polygon_start<vidx ? *iit : 0;
374
375 inbase = in.begin()+vidx;
376 in.erase(inbase,inbase+*iit);
377
378 outer_polygon_start -= outer_polygon_start>vidx ? *iit : 0;
379
380 *outer_polygon += tmp.size();
381 *iit++ = 0;
382 ++removed;
383 goto next_loop;
384 }
385 }
386 }
387 }
388
389 if ( meshout.vertcnt.size() - removed <= 1) {
390 result.Append(meshout);
391 return;
392 }
393
394 // extract the outer boundary and move it to a separate mesh
395 TempMesh boundary;
396 boundary.vertcnt.resize(1,*outer_polygon);
397 boundary.verts.resize(*outer_polygon);
398
399 std::vector<IfcVector3>::iterator b = in.begin()+outer_polygon_start;
400 std::copy(b,b+*outer_polygon,boundary.verts.begin());
401 in.erase(b,b+*outer_polygon);
402
403 std::vector<IfcVector3>::iterator norit = normals.begin()+std::distance(meshout.vertcnt.begin(),outer_polygon);
404 const IfcVector3 nor_boundary = *norit;
405 normals.erase(norit);
406 meshout.vertcnt.erase(outer_polygon);
407
408 // keep merging the closest inner boundary with the outer boundary until no more boundaries are left
409 RecursiveMergeBoundaries(result,meshout,boundary,normals,nor_boundary);
410 }
411
157 // Filter degenerate polygons to keep them from causing trouble later on
158 IfcVector3& n = normals[std::distance(begin,iit)];
159 const IfcFloat area = n.SquareLength();
160 if (area < 1e-5f) {
161 IFCImporter::LogWarn("skipping degenerate polygon (ProcessPolygonBoundaries)");
162 continue;
163 }
164
165 fake_openings.push_back(TempOpening());
166 TempOpening& opening = fake_openings.back();
167
168 opening.extrusionDir = master_normal;
169 opening.solid = NULL;
170
171 opening.profileMesh = boost::make_shared<TempMesh>();
172 opening.profileMesh->verts.reserve(*iit);
173 opening.profileMesh->vertcnt.push_back(*iit);
174
175 std::copy(vit, vit + *iit, std::back_inserter(opening.profileMesh->verts));
176 }
177
178 // fill a mesh with ONLY the main polygon
179 TempMesh temp;
180 temp.verts.reserve(outer_polygon_size);
181 temp.vertcnt.push_back(outer_polygon_size);
182 std::copy(outer_vit, outer_vit+outer_polygon_size,
183 std::back_inserter(temp.verts));
184
185 GenerateOpenings(fake_openings, normals, temp, false, false);
186 result.Append(temp);
187 }
412188
413189 // ------------------------------------------------------------------------------------------------
414190 void ProcessConnectedFaceSet(const IfcConnectedFaceSet& fset, TempMesh& result, ConversionData& conv)
415191 {
416192 BOOST_FOREACH(const IfcFace& face, fset.CfsFaces) {
417
418193 // size_t ob = -1, cnt = 0;
419194 TempMesh meshout;
420195 BOOST_FOREACH(const IfcFaceBound& bound, face.Bounds) {
421196
422 // XXX implement proper merging for polygonal loops
423197 if(const IfcPolyLoop* const polyloop = bound.Bound->ToPtr<IfcPolyLoop>()) {
424198 if(ProcessPolyloop(*polyloop, meshout,conv)) {
199
200 // The outer boundary is better determined by checking which
201 // polygon covers the largest area.
425202
426203 //if(bound.ToPtr<IfcFaceOuterBound>()) {
427204 // ob = cnt;
434211 IFCImporter::LogWarn("skipping unknown IfcFaceBound entity, type is " + bound.Bound->GetClassName());
435212 continue;
436213 }
214
215 // And this, even though it is sometimes TRUE and sometimes FALSE,
216 // does not really improve results.
437217
438218 /*if(!IsTrue(bound.Orientation)) {
439219 size_t c = 0;
442222 cnt += c;
443223 }
444224 }*/
445
446 }
447 MergePolygonBoundaries(result,meshout);
448 }
449 }
450
451
452
225 }
226 ProcessPolygonBoundaries(result, meshout);
227 }
228 }
453229
454230 // ------------------------------------------------------------------------------------------------
455231 void ProcessRevolvedAreaSolid(const IfcRevolvedAreaSolid& solid, TempMesh& result, ConversionData& conv)
538314 IFCImporter::LogDebug("generate mesh procedurally by radial extrusion (IfcRevolvedAreaSolid)");
539315 }
540316
541 // ------------------------------------------------------------------------------------------------
542 IfcMatrix3 DerivePlaneCoordinateSpace(const TempMesh& curmesh) {
543
317
318
319 // ------------------------------------------------------------------------------------------------
320 void ProcessSweptDiskSolid(const IfcSweptDiskSolid solid, TempMesh& result, ConversionData& conv)
321 {
322 const Curve* const curve = Curve::Convert(*solid.Directrix, conv);
323 if(!curve) {
324 IFCImporter::LogError("failed to convert Directrix curve (IfcSweptDiskSolid)");
325 return;
326 }
327
328 const unsigned int cnt_segments = 16;
329 const IfcFloat deltaAngle = AI_MATH_TWO_PI/cnt_segments;
330
331 const size_t samples = curve->EstimateSampleCount(solid.StartParam,solid.EndParam);
332
333 result.verts.reserve(cnt_segments * samples * 4);
334 result.vertcnt.reserve((cnt_segments - 1) * samples);
335
336 std::vector<IfcVector3> points;
337 points.reserve(cnt_segments * samples);
338
339 TempMesh temp;
340 curve->SampleDiscrete(temp,solid.StartParam,solid.EndParam);
341 const std::vector<IfcVector3>& curve_points = temp.verts;
342
343 if(curve_points.empty()) {
344 IFCImporter::LogWarn("curve evaluation yielded no points (IfcSweptDiskSolid)");
345 return;
346 }
347
348 IfcVector3 current = curve_points[0];
349 IfcVector3 previous = current;
350 IfcVector3 next;
351
352 IfcVector3 startvec;
353 startvec.x = 1.0f;
354 startvec.y = 1.0f;
355 startvec.z = 1.0f;
356
357 unsigned int last_dir = 0;
358
359 // generate circles at the sweep positions
360 for(size_t i = 0; i < samples; ++i) {
361
362 if(i != samples - 1) {
363 next = curve_points[i + 1];
364 }
365
366 // get a direction vector reflecting the approximate curvature (i.e. tangent)
367 IfcVector3 d = (current-previous) + (next-previous);
368
369 d.Normalize();
370
371 // figure out an arbitrary point q so that (p-q) * d = 0,
372 // try to maximize ||(p-q)|| * ||(p_last-q_last)||
373 IfcVector3 q;
374 bool take_any = false;
375
376 for (unsigned int i = 0; i < 2; ++i, take_any = true) {
377 if ((last_dir == 0 || take_any) && abs(d.x) > 1e-6) {
378 q.y = startvec.y;
379 q.z = startvec.z;
380 q.x = -(d.y * q.y + d.z * q.z) / d.x;
381 last_dir = 0;
382 break;
383 }
384 else if ((last_dir == 1 || take_any) && abs(d.y) > 1e-6) {
385 q.x = startvec.x;
386 q.z = startvec.z;
387 q.y = -(d.x * q.x + d.z * q.z) / d.y;
388 last_dir = 1;
389 break;
390 }
391 else if ((last_dir == 2 && abs(d.z) > 1e-6) || take_any) {
392 q.y = startvec.y;
393 q.x = startvec.x;
394 q.z = -(d.y * q.y + d.x * q.x) / d.z;
395 last_dir = 2;
396 break;
397 }
398 }
399
400 q *= solid.Radius / q.Length();
401 startvec = q;
402
403 // generate a rotation matrix to rotate q around d
404 IfcMatrix4 rot;
405 IfcMatrix4::Rotation(deltaAngle,d,rot);
406
407 for (unsigned int seg = 0; seg < cnt_segments; ++seg, q *= rot ) {
408 points.push_back(q + current);
409 }
410
411 previous = current;
412 current = next;
413 }
414
415 // make quads
416 for(size_t i = 0; i < samples - 1; ++i) {
417
418 const aiVector3D& this_start = points[ i * cnt_segments ];
419
420 // locate corresponding point on next sample ring
421 unsigned int best_pair_offset = 0;
422 float best_distance_squared = 1e10f;
423 for (unsigned int seg = 0; seg < cnt_segments; ++seg) {
424 const aiVector3D& p = points[ (i+1) * cnt_segments + seg];
425 const float l = (p-this_start).SquareLength();
426
427 if(l < best_distance_squared) {
428 best_pair_offset = seg;
429 best_distance_squared = l;
430 }
431 }
432
433 for (unsigned int seg = 0; seg < cnt_segments; ++seg) {
434
435 result.verts.push_back(points[ i * cnt_segments + (seg % cnt_segments)]);
436 result.verts.push_back(points[ i * cnt_segments + (seg + 1) % cnt_segments]);
437 result.verts.push_back(points[ (i+1) * cnt_segments + ((seg + 1 + best_pair_offset) % cnt_segments)]);
438 result.verts.push_back(points[ (i+1) * cnt_segments + ((seg + best_pair_offset) % cnt_segments)]);
439
440 IfcVector3& v1 = *(result.verts.end()-1);
441 IfcVector3& v2 = *(result.verts.end()-2);
442 IfcVector3& v3 = *(result.verts.end()-3);
443 IfcVector3& v4 = *(result.verts.end()-4);
444
445 if (((v4-v3) ^ (v4-v1)) * (v4 - curve_points[i]) < 0.0f) {
446 std::swap(v4, v1);
447 std::swap(v3, v2);
448 }
449
450 result.vertcnt.push_back(4);
451 }
452 }
453
454 IFCImporter::LogDebug("generate mesh procedurally by sweeping a disk along a curve (IfcSweptDiskSolid)");
455 }
456
457 // ------------------------------------------------------------------------------------------------
458 IfcMatrix3 DerivePlaneCoordinateSpace(const TempMesh& curmesh, bool& ok, IfcVector3& norOut)
459 {
544460 const std::vector<IfcVector3>& out = curmesh.verts;
545461 IfcMatrix3 m;
546462
463 ok = true;
464
465 // The input "mesh" must be a single polygon
547466 const size_t s = out.size();
548467 assert(curmesh.vertcnt.size() == 1 && curmesh.vertcnt.back() == s);
549468
550469 const IfcVector3 any_point = out[s-1];
551470 IfcVector3 nor;
552471
553 // The input polygon is arbitrarily shaped, so we might need some tries
554 // until we find a suitable normal (and it does not even need to be
555 // right in all cases, Newell's algorithm would be the correct one ... ).
556 size_t base = s-curmesh.vertcnt.back(), i, j;
557 for (i = base; i < s-1; ++i) {
558 for (j = i+1; j < s; ++j) {
472 // The input polygon is arbitrarily shaped, therefore we might need some tries
473 // until we find a suitable normal. Note that Newell's algorithm would give
474 // a more robust result, but this variant also gives us a suitable first
475 // axis for the 2D coordinate space on the polygon plane, exploiting the
476 // fact that the input polygon is nearly always a quad.
477 bool done = false;
478 size_t i, j;
479 for (i = 0; !done && i < s-2; done || ++i) {
480 for (j = i+1; j < s-1; ++j) {
559481 nor = -((out[i]-any_point)^(out[j]-any_point));
560482 if(fabs(nor.Length()) > 1e-8f) {
561 goto out;
562 }
563 }
564 }
565
566 assert(0);
567
568 out:
483 done = true;
484 break;
485 }
486 }
487 }
488
489 if(!done) {
490 ok = false;
491 return m;
492 }
569493
570494 nor.Normalize();
495 norOut = nor;
571496
572497 IfcVector3 r = (out[i]-any_point);
573498 r.Normalize();
574499
575 // reconstruct orthonormal basis
500 //if(d) {
501 // *d = -any_point * nor;
502 //}
503
504 // Reconstruct orthonormal basis
505 // XXX use Gram Schmidt for increased robustness
576506 IfcVector3 u = r ^ nor;
577507 u.Normalize();
578508
584514 m.b2 = u.y;
585515 m.b3 = u.z;
586516
587 m.c1 = nor.x;
588 m.c2 = nor.y;
589 m.c3 = nor.z;
517 m.c1 = -nor.x;
518 m.c2 = -nor.y;
519 m.c3 = -nor.z;
590520
591521 return m;
592522 }
593523
594 // ------------------------------------------------------------------------------------------------
595 bool TryAddOpenings_Poly2Tri(const std::vector<TempOpening>& openings,const std::vector<IfcVector3>& nors, TempMesh& curmesh)
596 {
597 std::vector<IfcVector3>& out = curmesh.verts;
598
599 bool result = false;
600
601 // Try to derive a solid base plane within the current surface for use as
602 // working coordinate system.
603 const IfcMatrix3& m = DerivePlaneCoordinateSpace(curmesh);
604 const IfcMatrix3 minv = IfcMatrix3(m).Inverse();
605 const IfcVector3& nor = IfcVector3(m.c1, m.c2, m.c3);
606
607 IfcFloat coord = -1;
608
609 std::vector<IfcVector2> contour_flat;
610 contour_flat.reserve(out.size());
611
612 IfcVector2 vmin, vmax;
613 MinMaxChooser<IfcVector2>()(vmin, vmax);
614
615 // Move all points into the new coordinate system, collecting min/max verts on the way
616 BOOST_FOREACH(IfcVector3& x, out) {
617 const IfcVector3 vv = m * x;
618
619 // keep Z offset in the plane coordinate system. Ignoring precision issues
620 // (which are present, of course), this should be the same value for
621 // all polygon vertices (assuming the polygon is planar).
622
623
624 // XXX this should be guarded, but we somehow need to pick a suitable
625 // epsilon
626 // if(coord != -1.0f) {
627 // assert(fabs(coord - vv.z) < 1e-3f);
628 // }
629
630 coord = vv.z;
631
632 vmin = std::min(IfcVector2(vv.x, vv.y), vmin);
633 vmax = std::max(IfcVector2(vv.x, vv.y), vmax);
634
635 contour_flat.push_back(IfcVector2(vv.x,vv.y));
636 }
637
638 // With the current code in DerivePlaneCoordinateSpace,
639 // vmin,vmax should always be the 0...1 rectangle (+- numeric inaccuracies)
640 // but here we won't rely on this.
641
642 vmax -= vmin;
643
644 // If this happens then the projection must have been wrong.
645 assert(vmax.Length());
646
647 ClipperLib::ExPolygons clipped;
648 ClipperLib::Polygons holes_union;
649
650
651 IfcVector3 wall_extrusion;
652 bool do_connections = false, first = true;
653
654 try {
655
656 ClipperLib::Clipper clipper_holes;
657 size_t c = 0;
658
659 BOOST_FOREACH(const TempOpening& t,openings) {
660 const IfcVector3& outernor = nors[c++];
661 const IfcFloat dot = nor * outernor;
662 if (fabs(dot)<1.f-1e-6f) {
663 continue;
664 }
665
666 const std::vector<IfcVector3>& va = t.profileMesh->verts;
667 if(va.size() <= 2) {
668 continue;
669 }
670
671 std::vector<IfcVector2> contour;
672
673 BOOST_FOREACH(const IfcVector3& xx, t.profileMesh->verts) {
674 IfcVector3 vv = m * xx, vv_extr = m * (xx + t.extrusionDir);
675
676 const bool is_extruded_side = fabs(vv.z - coord) > fabs(vv_extr.z - coord);
677 if (first) {
678 first = false;
679 if (dot > 0.f) {
680 do_connections = true;
681 wall_extrusion = t.extrusionDir;
682 if (is_extruded_side) {
683 wall_extrusion = - wall_extrusion;
684 }
685 }
686 }
687
688 // XXX should not be necessary - but it is. Why? For precision reasons?
689 vv = is_extruded_side ? vv_extr : vv;
690 contour.push_back(IfcVector2(vv.x,vv.y));
691 }
692
693 ClipperLib::Polygon hole;
694 BOOST_FOREACH(IfcVector2& pip, contour) {
695 pip.x = (pip.x - vmin.x) / vmax.x;
696 pip.y = (pip.y - vmin.y) / vmax.y;
697
698 hole.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
699 }
700
701 if (!ClipperLib::Orientation(hole)) {
702 std::reverse(hole.begin(), hole.end());
703 // assert(ClipperLib::Orientation(hole));
704 }
705
706 /*ClipperLib::Polygons pol_temp(1), pol_temp2(1);
707 pol_temp[0] = hole;
708
709 ClipperLib::OffsetPolygons(pol_temp,pol_temp2,5.0);
710 hole = pol_temp2[0];*/
711
712 clipper_holes.AddPolygon(hole,ClipperLib::ptSubject);
713 }
714
715 clipper_holes.Execute(ClipperLib::ctUnion,holes_union,
716 ClipperLib::pftNonZero,
717 ClipperLib::pftNonZero);
718
719 if (holes_union.empty()) {
720 return false;
721 }
722
723 // Now that we have the big union of all holes, subtract it from the outer contour
724 // to obtain the final polygon to feed into the triangulator.
725 {
726 ClipperLib::Polygon poly;
727 BOOST_FOREACH(IfcVector2& pip, contour_flat) {
728 pip.x = (pip.x - vmin.x) / vmax.x;
729 pip.y = (pip.y - vmin.y) / vmax.y;
730
731 poly.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
732 }
733
734 if (ClipperLib::Orientation(poly)) {
735 std::reverse(poly.begin(), poly.end());
736 }
737 clipper_holes.Clear();
738 clipper_holes.AddPolygon(poly,ClipperLib::ptSubject);
739
740 clipper_holes.AddPolygons(holes_union,ClipperLib::ptClip);
741 clipper_holes.Execute(ClipperLib::ctDifference,clipped,
742 ClipperLib::pftNonZero,
743 ClipperLib::pftNonZero);
744 }
745
746 }
747 catch (const char* sx) {
748 IFCImporter::LogError("Ifc: error during polygon clipping, skipping openings for this face: (Clipper: "
749 + std::string(sx) + ")");
750
751 return false;
752 }
753
754 std::vector<IfcVector3> old_verts;
755 std::vector<unsigned int> old_vertcnt;
756
757 old_verts.swap(curmesh.verts);
758 old_vertcnt.swap(curmesh.vertcnt);
759
760
761 // add connection geometry to close the adjacent 'holes' for the openings
762 // this should only be done from one side of the wall or the polygons
763 // would be emitted twice.
764 if (false && do_connections) {
765
766 std::vector<IfcVector3> tmpvec;
767 BOOST_FOREACH(ClipperLib::Polygon& opening, holes_union) {
768
769 assert(ClipperLib::Orientation(opening));
770
771 tmpvec.clear();
772
773 BOOST_FOREACH(ClipperLib::IntPoint& point, opening) {
774
775 tmpvec.push_back( minv * IfcVector3(
776 vmin.x + from_int64(point.X) * vmax.x,
777 vmin.y + from_int64(point.Y) * vmax.y,
778 coord));
779 }
780
781 for(size_t i = 0, size = tmpvec.size(); i < size; ++i) {
782 const size_t next = (i+1)%size;
783
784 curmesh.vertcnt.push_back(4);
785
786 const IfcVector3& in_world = tmpvec[i];
787 const IfcVector3& next_world = tmpvec[next];
788
789 // Assumptions: no 'partial' openings, wall thickness roughly the same across the wall
790 curmesh.verts.push_back(in_world);
791 curmesh.verts.push_back(in_world+wall_extrusion);
792 curmesh.verts.push_back(next_world+wall_extrusion);
793 curmesh.verts.push_back(next_world);
794 }
795 }
796 }
797
798 std::vector< std::vector<p2t::Point*> > contours;
799 BOOST_FOREACH(ClipperLib::ExPolygon& clip, clipped) {
800
801 contours.clear();
802
803 // Build the outer polygon contour line for feeding into poly2tri
804 std::vector<p2t::Point*> contour_points;
805 BOOST_FOREACH(ClipperLib::IntPoint& point, clip.outer) {
806 contour_points.push_back( new p2t::Point(from_int64(point.X), from_int64(point.Y)) );
807 }
808
809 p2t::CDT* cdt ;
810 try {
811 // Note: this relies on custom modifications in poly2tri to raise runtime_error's
812 // instead if assertions. These failures are not debug only, they can actually
813 // happen in production use if the input data is broken. An assertion would be
814 // inappropriate.
815 cdt = new p2t::CDT(contour_points);
816 }
817 catch(const std::exception& e) {
818 IFCImporter::LogError("Ifc: error during polygon triangulation, skipping some openings: (poly2tri: "
819 + std::string(e.what()) + ")");
820 continue;
821 }
822
823
824 // Build the poly2tri inner contours for all holes we got from ClipperLib
825 BOOST_FOREACH(ClipperLib::Polygon& opening, clip.holes) {
826
827 contours.push_back(std::vector<p2t::Point*>());
828 std::vector<p2t::Point*>& contour = contours.back();
829
830 BOOST_FOREACH(ClipperLib::IntPoint& point, opening) {
831 contour.push_back( new p2t::Point(from_int64(point.X), from_int64(point.Y)) );
832 }
833
834 cdt->AddHole(contour);
835 }
836
837 try {
838 // Note: See above
839 cdt->Triangulate();
840 }
841 catch(const std::exception& e) {
842 IFCImporter::LogError("Ifc: error during polygon triangulation, skipping some openings: (poly2tri: "
843 + std::string(e.what()) + ")");
844 continue;
845 }
846
847 const std::vector<p2t::Triangle*>& tris = cdt->GetTriangles();
848
849 // Collect the triangles we just produced
850 BOOST_FOREACH(p2t::Triangle* tri, tris) {
851 for(int i = 0; i < 3; ++i) {
852
853 const IfcVector2& v = IfcVector2(
854 static_cast<IfcFloat>( tri->GetPoint(i)->x ),
855 static_cast<IfcFloat>( tri->GetPoint(i)->y )
856 );
857
858 assert(v.x <= 1.0 && v.x >= 0.0 && v.y <= 1.0 && v.y >= 0.0);
859 const IfcVector3 v3 = minv * IfcVector3(vmin.x + v.x * vmax.x, vmin.y + v.y * vmax.y,coord) ;
860
861 curmesh.verts.push_back(v3);
862 }
863 curmesh.vertcnt.push_back(3);
864 }
865
866 result = true;
867 }
868
869 if (!result) {
870 // revert -- it's a shame, but better than nothing
871 curmesh.verts.insert(curmesh.verts.end(),old_verts.begin(), old_verts.end());
872 curmesh.vertcnt.insert(curmesh.vertcnt.end(),old_vertcnt.begin(), old_vertcnt.end());
873
874 IFCImporter::LogError("Ifc: revert, could not generate openings for this wall");
875 }
876
877 return result;
878 }
879
880 // ------------------------------------------------------------------------------------------------
881 struct DistanceSorter {
882
883 DistanceSorter(const IfcVector3& base) : base(base) {}
884
885 bool operator () (const TempOpening& a, const TempOpening& b) const {
886 return (a.profileMesh->Center()-base).SquareLength() < (b.profileMesh->Center()-base).SquareLength();
887 }
888
889 IfcVector3 base;
890 };
891
892 // ------------------------------------------------------------------------------------------------
893 struct XYSorter {
894
895 // sort first by X coordinates, then by Y coordinates
896 bool operator () (const IfcVector2&a, const IfcVector2& b) const {
897 if (a.x == b.x) {
898 return a.y < b.y;
899 }
900 return a.x < b.x;
901 }
902 };
903
904 typedef std::pair< IfcVector2, IfcVector2 > BoundingBox;
905 typedef std::map<IfcVector2,size_t,XYSorter> XYSortedField;
906
907
908 // ------------------------------------------------------------------------------------------------
909 void QuadrifyPart(const IfcVector2& pmin, const IfcVector2& pmax, XYSortedField& field, const std::vector< BoundingBox >& bbs,
910 std::vector<IfcVector2>& out)
911 {
912 if (!(pmin.x-pmax.x) || !(pmin.y-pmax.y)) {
913 return;
914 }
915
916 IfcFloat xs = 1e10, xe = 1e10;
917 bool found = false;
918
919 // Search along the x-axis until we find an opening
920 XYSortedField::iterator start = field.begin();
921 for(; start != field.end(); ++start) {
922 const BoundingBox& bb = bbs[(*start).second];
923 if(bb.first.x >= pmax.x) {
924 break;
925 }
926
927 if (bb.second.x > pmin.x && bb.second.y > pmin.y && bb.first.y < pmax.y) {
928 xs = bb.first.x;
929 xe = bb.second.x;
930 found = true;
931 break;
932 }
933 }
934
935 if (!found) {
936 // the rectangle [pmin,pend] is opaque, fill it
937 out.push_back(pmin);
938 out.push_back(IfcVector2(pmin.x,pmax.y));
939 out.push_back(pmax);
940 out.push_back(IfcVector2(pmax.x,pmin.y));
941 return;
942 }
943
944 xs = std::max(pmin.x,xs);
945 xe = std::min(pmax.x,xe);
946
947 // see if there's an offset to fill at the top of our quad
948 if (xs - pmin.x) {
949 out.push_back(pmin);
950 out.push_back(IfcVector2(pmin.x,pmax.y));
951 out.push_back(IfcVector2(xs,pmax.y));
952 out.push_back(IfcVector2(xs,pmin.y));
953 }
954
955 // search along the y-axis for all openings that overlap xs and our quad
956 IfcFloat ylast = pmin.y;
957 found = false;
958 for(; start != field.end(); ++start) {
959 const BoundingBox& bb = bbs[(*start).second];
960 if (bb.first.x > xs || bb.first.y >= pmax.y) {
961 break;
962 }
963
964 if (bb.second.y > ylast) {
965
966 found = true;
967 const IfcFloat ys = std::max(bb.first.y,pmin.y), ye = std::min(bb.second.y,pmax.y);
968 if (ys - ylast) {
969 QuadrifyPart( IfcVector2(xs,ylast), IfcVector2(xe,ys) ,field,bbs,out);
970 }
971
972 // the following are the window vertices
973
974 /*wnd.push_back(IfcVector2(xs,ys));
975 wnd.push_back(IfcVector2(xs,ye));
976 wnd.push_back(IfcVector2(xe,ye));
977 wnd.push_back(IfcVector2(xe,ys));*/
978 ylast = ye;
979 }
980 }
981 if (!found) {
982 // the rectangle [pmin,pend] is opaque, fill it
983 out.push_back(IfcVector2(xs,pmin.y));
984 out.push_back(IfcVector2(xs,pmax.y));
985 out.push_back(IfcVector2(xe,pmax.y));
986 out.push_back(IfcVector2(xe,pmin.y));
987 return;
988 }
989 if (ylast < pmax.y) {
990 QuadrifyPart( IfcVector2(xs,ylast), IfcVector2(xe,pmax.y) ,field,bbs,out);
991 }
992
993 // now for the whole rest
994 if (pmax.x-xe) {
995 QuadrifyPart(IfcVector2(xe,pmin.y), pmax ,field,bbs,out);
996 }
997 }
998
999 // ------------------------------------------------------------------------------------------------
1000 void InsertWindowContours(const std::vector< BoundingBox >& bbs,
1001 const std::vector< std::vector<IfcVector2> >& contours,
1002 const std::vector<TempOpening>& openings,
1003 const std::vector<IfcVector3>& nors,
1004 const IfcMatrix3& minv,
1005 const IfcVector2& scale,
1006 const IfcVector2& offset,
1007 IfcFloat coord,
1008 TempMesh& curmesh)
1009 {
1010 ai_assert(contours.size() == bbs.size());
1011
1012 // fix windows - we need to insert the real, polygonal shapes into the quadratic holes that we have now
1013 for(size_t i = 0; i < contours.size();++i) {
1014 const BoundingBox& bb = bbs[i];
1015 const std::vector<IfcVector2>& contour = contours[i];
1016
1017 // check if we need to do it at all - many windows just fit perfectly into their quadratic holes,
1018 // i.e. their contours *are* already their bounding boxes.
1019 if (contour.size() == 4) {
1020 std::set<IfcVector2,XYSorter> verts;
1021 for(size_t n = 0; n < 4; ++n) {
1022 verts.insert(contour[n]);
1023 }
1024 const std::set<IfcVector2,XYSorter>::const_iterator end = verts.end();
1025 if (verts.find(bb.first)!=end && verts.find(bb.second)!=end
1026 && verts.find(IfcVector2(bb.first.x,bb.second.y))!=end
1027 && verts.find(IfcVector2(bb.second.x,bb.first.y))!=end
1028 ) {
1029 continue;
1030 }
1031 }
1032
1033 const IfcFloat diag = (bb.first-bb.second).Length();
1034 const IfcFloat epsilon = diag/1000.f;
1035
1036 // walk through all contour points and find those that lie on the BB corner
1037 size_t last_hit = -1, very_first_hit = -1;
1038 IfcVector2 edge;
1039 for(size_t n = 0, e=0, size = contour.size();; n=(n+1)%size, ++e) {
1040
1041 // sanity checking
1042 if (e == size*2) {
1043 IFCImporter::LogError("encountered unexpected topology while generating window contour");
1044 break;
1045 }
1046
1047 const IfcVector2& v = contour[n];
1048
1049 bool hit = false;
1050 if (fabs(v.x-bb.first.x)<epsilon) {
1051 edge.x = bb.first.x;
1052 hit = true;
1053 }
1054 else if (fabs(v.x-bb.second.x)<epsilon) {
1055 edge.x = bb.second.x;
1056 hit = true;
1057 }
1058
1059 if (fabs(v.y-bb.first.y)<epsilon) {
1060 edge.y = bb.first.y;
1061 hit = true;
1062 }
1063 else if (fabs(v.y-bb.second.y)<epsilon) {
1064 edge.y = bb.second.y;
1065 hit = true;
1066 }
1067
1068 if (hit) {
1069 if (last_hit != (size_t)-1) {
1070
1071 const size_t old = curmesh.verts.size();
1072 size_t cnt = last_hit > n ? size-(last_hit-n) : n-last_hit;
1073 for(size_t a = last_hit, e = 0; e <= cnt; a=(a+1)%size, ++e) {
1074 // hack: this is to fix cases where opening contours are self-intersecting.
1075 // Clipper doesn't produce such polygons, but as soon as we're back in
1076 // our brave new floating-point world, very small distances are consumed
1077 // by the maximum available precision, leading to self-intersecting
1078 // polygons. This fix makes concave windows fail even worse, but
1079 // anyway, fail is fail.
1080 if ((contour[a] - edge).SquareLength() > diag*diag*0.7) {
1081 continue;
1082 }
1083 const IfcVector3 v3 = minv * IfcVector3(offset.x + contour[a].x * scale.x, offset.y + contour[a].y * scale.y,coord);
1084 curmesh.verts.push_back(v3);
1085 }
1086
1087 if (edge != contour[last_hit]) {
1088
1089 IfcVector2 corner = edge;
1090
1091 if (fabs(contour[last_hit].x-bb.first.x)<epsilon) {
1092 corner.x = bb.first.x;
1093 }
1094 else if (fabs(contour[last_hit].x-bb.second.x)<epsilon) {
1095 corner.x = bb.second.x;
1096 }
1097
1098 if (fabs(contour[last_hit].y-bb.first.y)<epsilon) {
1099 corner.y = bb.first.y;
1100 }
1101 else if (fabs(contour[last_hit].y-bb.second.y)<epsilon) {
1102 corner.y = bb.second.y;
1103 }
1104
1105 const IfcVector3 v3 = minv * IfcVector3(offset.x + corner.x * scale.x, offset.y + corner.y * scale.y,coord);
1106 curmesh.verts.push_back(v3);
1107 }
1108 else if (cnt == 1) {
1109 // avoid degenerate polygons (also known as lines or points)
1110 curmesh.verts.erase(curmesh.verts.begin()+old,curmesh.verts.end());
1111 }
1112
1113 if (const size_t d = curmesh.verts.size()-old) {
1114 curmesh.vertcnt.push_back(d);
1115 std::reverse(curmesh.verts.rbegin(),curmesh.verts.rbegin()+d);
1116 }
1117 if (n == very_first_hit) {
1118 break;
1119 }
1120 }
1121 else {
1122 very_first_hit = n;
1123 }
1124
1125 last_hit = n;
1126 }
1127 }
1128 }
1129 }
1130
1131 // ------------------------------------------------------------------------------------------------
1132 void MergeContours (const std::vector<IfcVector2>& a, const std::vector<IfcVector2>& b, ClipperLib::ExPolygons& out)
1133 {
1134 ClipperLib::Clipper clipper;
1135 ClipperLib::Polygon clip;
1136
1137 BOOST_FOREACH(const IfcVector2& pip, a) {
1138 clip.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
1139 }
1140
1141 if (ClipperLib::Orientation(clip)) {
1142 std::reverse(clip.begin(), clip.end());
1143 }
1144
1145 clipper.AddPolygon(clip, ClipperLib::ptSubject);
1146 clip.clear();
1147
1148 BOOST_FOREACH(const IfcVector2& pip, b) {
1149 clip.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
1150 }
1151
1152 if (ClipperLib::Orientation(clip)) {
1153 std::reverse(clip.begin(), clip.end());
1154 }
1155
1156 clipper.AddPolygon(clip, ClipperLib::ptSubject);
1157 clipper.Execute(ClipperLib::ctUnion, out,ClipperLib::pftNonZero,ClipperLib::pftNonZero);
1158 }
1159
1160 // ------------------------------------------------------------------------------------------------
1161 bool TryAddOpenings_Quadrulate(const std::vector<TempOpening>& openings,const std::vector<IfcVector3>& nors, TempMesh& curmesh)
1162 {
1163 std::vector<IfcVector3>& out = curmesh.verts;
1164
1165 // Try to derive a solid base plane within the current surface for use as
1166 // working coordinate system.
1167 const IfcMatrix3& m = DerivePlaneCoordinateSpace(curmesh);
1168 const IfcMatrix3 minv = IfcMatrix3(m).Inverse();
1169 const IfcVector3& nor = IfcVector3(m.c1, m.c2, m.c3);
1170
1171 IfcFloat coord = -1;
1172
1173 std::vector<IfcVector2> contour_flat;
1174 contour_flat.reserve(out.size());
1175
1176 IfcVector2 vmin, vmax;
1177 MinMaxChooser<IfcVector2>()(vmin, vmax);
1178
1179 // Move all points into the new coordinate system, collecting min/max verts on the way
1180 BOOST_FOREACH(IfcVector3& x, out) {
1181 const IfcVector3 vv = m * x;
1182
1183 // keep Z offset in the plane coordinate system. Ignoring precision issues
1184 // (which are present, of course), this should be the same value for
1185 // all polygon vertices (assuming the polygon is planar).
1186
1187
1188 // XXX this should be guarded, but we somehow need to pick a suitable
1189 // epsilon
1190 // if(coord != -1.0f) {
1191 // assert(fabs(coord - vv.z) < 1e-3f);
1192 // }
1193
1194 coord = vv.z;
1195 vmin = std::min(IfcVector2(vv.x, vv.y), vmin);
1196 vmax = std::max(IfcVector2(vv.x, vv.y), vmax);
1197
1198 contour_flat.push_back(IfcVector2(vv.x,vv.y));
1199 }
1200
1201 // With the current code in DerivePlaneCoordinateSpace,
1202 // vmin,vmax should always be the 0...1 rectangle (+- numeric inaccuracies)
1203 // but here we won't rely on this.
1204
1205 vmax -= vmin;
1206 BOOST_FOREACH(IfcVector2& vv, contour_flat) {
1207 vv.x = (vv.x - vmin.x) / vmax.x;
1208 vv.y = (vv.y - vmin.y) / vmax.y;
1209 }
1210
1211 // project all points into the coordinate system defined by the p+sv*tu plane
1212 // and compute bounding boxes for them
1213 std::vector< BoundingBox > bbs;
1214 std::vector< std::vector<IfcVector2> > contours;
1215
1216 size_t c = 0;
1217 BOOST_FOREACH(const TempOpening& t,openings) {
1218 const IfcVector3& outernor = nors[c++];
1219 const IfcFloat dot = nor * outernor;
1220 if (fabs(dot)<1.f-1e-6f) {
1221 continue;
1222 }
1223
1224 const std::vector<IfcVector3>& va = t.profileMesh->verts;
1225 if(va.size() <= 2) {
1226 continue;
1227 }
1228
1229 IfcVector2 vpmin,vpmax;
1230 MinMaxChooser<IfcVector2>()(vpmin,vpmax);
1231
1232 std::vector<IfcVector2> contour;
1233
1234 BOOST_FOREACH(const IfcVector3& x, t.profileMesh->verts) {
1235 const IfcVector3 v = m * x;
1236
1237 IfcVector2 vv(v.x, v.y);
1238
1239 // rescale
1240 vv.x = (vv.x - vmin.x) / vmax.x;
1241 vv.y = (vv.y - vmin.y) / vmax.y;
1242
1243 vpmin = std::min(vpmin,vv);
1244 vpmax = std::max(vpmax,vv);
1245
1246 contour.push_back(vv);
1247 }
1248
1249 BoundingBox bb = BoundingBox(vpmin,vpmax);
1250
1251 // see if this BB intersects any other, in which case we could not use the Quadrify()
1252 // algorithm and would revert to Poly2Tri only.
1253 for (std::vector<BoundingBox>::iterator it = bbs.begin(); it != bbs.end();) {
1254 const BoundingBox& ibb = *it;
1255
1256 if (ibb.first.x < bb.second.x && ibb.second.x > bb.first.x &&
1257 ibb.first.y < bb.second.y && ibb.second.y > bb.second.x) {
1258
1259 // take these two contours and try to merge them. If they overlap (which
1260 // should not happen, but in fact happens-in-the-real-world [tm] ),
1261 // resume using a single contour and a single bounding box.
1262 const std::vector<IfcVector2>& other = contours[std::distance(bbs.begin(),it)];
1263
1264 ClipperLib::ExPolygons poly;
1265 MergeContours(contour, other, poly);
1266
1267 if (poly.size() > 1) {
1268 IFCImporter::LogWarn("cannot use quadrify algorithm to generate wall openings due to "
1269 "bounding box overlaps, using poly2tri fallback");
1270 return TryAddOpenings_Poly2Tri(openings, nors, curmesh);
1271 }
1272 else if (poly.size() == 0) {
1273 IFCImporter::LogWarn("ignoring duplicate opening");
1274 contour.clear();
1275 break;
1276 }
1277 else {
1278 IFCImporter::LogDebug("merging oberlapping openings, this should not happen");
1279
1280 contour.clear();
1281 BOOST_FOREACH(const ClipperLib::IntPoint& point, poly[0].outer) {
1282 contour.push_back( IfcVector2( from_int64(point.X), from_int64(point.Y)));
1283 }
1284
1285 bb.first = std::min(bb.first, ibb.first);
1286 bb.second = std::max(bb.second, ibb.second);
1287
1288 contours.erase(contours.begin() + std::distance(bbs.begin(),it));
1289 it = bbs.erase(it);
1290 continue;
1291 }
1292 }
1293 ++it;
1294 }
1295
1296 if(contour.size()) {
1297 contours.push_back(contour);
1298 bbs.push_back(bb);
1299 }
1300 }
1301
1302 if (bbs.empty()) {
1303 return false;
1304 }
1305
1306 XYSortedField field;
1307 for (std::vector<BoundingBox>::iterator it = bbs.begin(); it != bbs.end(); ++it) {
1308 if (field.find((*it).first) != field.end()) {
1309 IFCImporter::LogWarn("constraint failure during generation of wall openings, results may be faulty");
1310 }
1311 field[(*it).first] = std::distance(bbs.begin(),it);
1312 }
1313
1314 std::vector<IfcVector2> outflat;
1315 outflat.reserve(openings.size()*4);
1316 QuadrifyPart(IfcVector2(0.f,0.f),IfcVector2(1.f,1.f),field,bbs,outflat);
1317 ai_assert(!(outflat.size() % 4));
1318
1319 std::vector<IfcVector3> vold;
1320 std::vector<unsigned int> iold;
1321
1322 vold.reserve(outflat.size());
1323 iold.reserve(outflat.size() / 4);
1324
1325 // Fix the outer contour using polyclipper
1326 try {
1327
1328 ClipperLib::Polygon subject;
1329 ClipperLib::Clipper clipper;
1330 ClipperLib::ExPolygons clipped;
1331
1332 ClipperLib::Polygon clip;
1333 clip.reserve(contour_flat.size());
1334 BOOST_FOREACH(const IfcVector2& pip, contour_flat) {
1335 clip.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
1336 }
1337
1338 if (!ClipperLib::Orientation(clip)) {
1339 std::reverse(clip.begin(), clip.end());
1340 }
1341
1342 // We need to run polyclipper on every single quad -- we can't run it one all
1343 // of them at once or it would merge them all together which would undo all
1344 // previous steps
1345 subject.reserve(4);
1346 size_t cnt = 0;
1347 BOOST_FOREACH(const IfcVector2& pip, outflat) {
1348 subject.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
1349 if (!(++cnt % 4)) {
1350 if (!ClipperLib::Orientation(subject)) {
1351 std::reverse(subject.begin(), subject.end());
1352 }
1353
1354 clipper.AddPolygon(subject,ClipperLib::ptSubject);
1355 clipper.AddPolygon(clip,ClipperLib::ptClip);
1356
1357 clipper.Execute(ClipperLib::ctIntersection,clipped,ClipperLib::pftNonZero,ClipperLib::pftNonZero);
1358
1359 BOOST_FOREACH(const ClipperLib::ExPolygon& ex, clipped) {
1360 iold.push_back(ex.outer.size());
1361 BOOST_FOREACH(const ClipperLib::IntPoint& point, ex.outer) {
1362 vold.push_back( minv * IfcVector3(
1363 vmin.x + from_int64(point.X) * vmax.x,
1364 vmin.y + from_int64(point.Y) * vmax.y,
1365 coord));
1366 }
1367 }
1368
1369 subject.clear();
1370 clipped.clear();
1371 clipper.Clear();
1372 }
1373 }
1374
1375 assert(!(cnt % 4));
1376 }
1377 catch (const char* sx) {
1378 IFCImporter::LogError("Ifc: error during polygon clipping, contour line may be wrong: (Clipper: "
1379 + std::string(sx) + ")");
1380
1381 iold.resize(outflat.size()/4,4);
1382
1383 BOOST_FOREACH(const IfcVector2& vproj, outflat) {
1384 const IfcVector3 v3 = minv * IfcVector3(vmin.x + vproj.x * vmax.x, vmin.y + vproj.y * vmax.y,coord);
1385 vold.push_back(v3);
1386 }
1387 }
1388
1389 // undo the projection, generate output quads
1390 std::swap(vold,curmesh.verts);
1391 std::swap(iold,curmesh.vertcnt);
1392
1393 InsertWindowContours(bbs,contours,openings, nors,minv,vmax, vmin, coord, curmesh);
1394 return true;
1395 }
1396
1397
1398 // ------------------------------------------------------------------------------------------------
1399 void ProcessExtrudedAreaSolid(const IfcExtrudedAreaSolid& solid, TempMesh& result, ConversionData& conv)
524
525 // ------------------------------------------------------------------------------------------------
526 void ProcessExtrudedAreaSolid(const IfcExtrudedAreaSolid& solid, TempMesh& result,
527 ConversionData& conv, bool collect_openings)
1400528 {
1401529 TempMesh meshout;
1402530
1408536 IfcVector3 dir;
1409537 ConvertDirection(dir,solid.ExtrudedDirection);
1410538
1411 dir *= solid.Depth;
539 dir *= solid.Depth; /*
540 if(conv.collect_openings && !conv.apply_openings) {
541 dir *= 1000.0;
542 } */
1412543
1413544 // Outline: assuming that `meshout.verts` is now a list of vertex points forming
1414545 // the underlying profile, extrude along the given axis, forming new
1418549 const size_t size=in.size();
1419550
1420551 const bool has_area = solid.SweptArea->ProfileType == "AREA" && size>2;
1421 if(solid.Depth < 1e-3) {
552 if(solid.Depth < 1e-6) {
1422553 if(has_area) {
1423 meshout = result;
554 result = meshout;
1424555 }
1425556 return;
1426557 }
1431562 // First step: transform all vertices into the target coordinate space
1432563 IfcMatrix4 trafo;
1433564 ConvertAxisPlacement(trafo, solid.Position);
565
566 IfcVector3 vmin, vmax;
567 MinMaxChooser<IfcVector3>()(vmin, vmax);
1434568 BOOST_FOREACH(IfcVector3& v,in) {
1435569 v *= trafo;
1436 }
570
571 vmin = std::min(vmin, v);
572 vmax = std::max(vmax, v);
573 }
574
575 vmax -= vmin;
576 const IfcFloat diag = vmax.Length();
1437577
1438578 IfcVector3 min = in[0];
1439579 dir *= IfcMatrix3(trafo);
1443583
1444584 // Compute the normal vectors for all opening polygons as a prerequisite
1445585 // to TryAddOpenings_Poly2Tri()
586 // XXX this belongs into the aforementioned function
1446587 if (openings) {
1447588
1448589 if (!conv.settings.useCustomTriangulation) {
1450591 // doesn't matter, but we would screw up if we started with e.g. a door in between
1451592 // two windows.
1452593 std::sort(conv.apply_openings->begin(),conv.apply_openings->end(),
1453 DistanceSorter(min));
594 TempOpening::DistanceSorter(min));
1454595 }
1455596
1456597 nors.reserve(conv.apply_openings->size());
1482623 out.push_back(in[next]);
1483624
1484625 if(openings) {
1485 if(TryAddOpenings_Quadrulate(*conv.apply_openings,nors,temp)) {
626 if((in[i]-in[next]).Length() > diag * 0.1 && GenerateOpenings(*conv.apply_openings,nors,temp,true, true, dir)) {
1486627 ++sides_with_openings;
1487628 }
1488629
1490631 temp.Clear();
1491632 }
1492633 }
634
635 if(openings) {
636 BOOST_FOREACH(TempOpening& opening, *conv.apply_openings) {
637 if (!opening.wallPoints.empty()) {
638 IFCImporter::LogError("failed to generate all window caps");
639 }
640 opening.wallPoints.clear();
641 }
642 }
1493643
1494644 size_t sides_with_v_openings = 0;
1495645 if(has_area) {
1501651
1502652 curmesh.vertcnt.push_back(size);
1503653 if(openings && size > 2) {
1504 if(TryAddOpenings_Quadrulate(*conv.apply_openings,nors,temp)) {
654 if(GenerateOpenings(*conv.apply_openings,nors,temp,true, true, dir)) {
1505655 ++sides_with_v_openings;
1506656 }
1507657
1511661 }
1512662 }
1513663
1514
1515 if(openings && ((sides_with_openings != 2 && sides_with_openings) || (sides_with_v_openings != 2 && sides_with_v_openings))) {
664 if(openings && ((sides_with_openings == 1 && sides_with_openings) || (sides_with_v_openings == 2 && sides_with_v_openings))) {
1516665 IFCImporter::LogWarn("failed to resolve all openings, presumably their topology is not supported by Assimp");
1517666 }
1518667
1519668 IFCImporter::LogDebug("generate mesh procedurally by extrusion (IfcExtrudedAreaSolid)");
1520 }
1521
1522
1523
1524 // ------------------------------------------------------------------------------------------------
1525 void ProcessSweptAreaSolid(const IfcSweptAreaSolid& swept, TempMesh& meshout, ConversionData& conv)
669
670 // If this is an opening element, store both the extruded mesh and the 2D profile mesh
671 // it was created from. Return an empty mesh to the caller.
672 if(collect_openings && !result.IsEmpty()) {
673 ai_assert(conv.collect_openings);
674 boost::shared_ptr<TempMesh> profile = boost::shared_ptr<TempMesh>(new TempMesh());
675 profile->Swap(result);
676
677 boost::shared_ptr<TempMesh> profile2D = boost::shared_ptr<TempMesh>(new TempMesh());
678 profile2D->Swap(meshout);
679 conv.collect_openings->push_back(TempOpening(&solid,dir,profile, profile2D));
680
681 ai_assert(result.IsEmpty());
682 }
683 }
684
685 // ------------------------------------------------------------------------------------------------
686 void ProcessSweptAreaSolid(const IfcSweptAreaSolid& swept, TempMesh& meshout,
687 ConversionData& conv)
1526688 {
1527689 if(const IfcExtrudedAreaSolid* const solid = swept.ToPtr<IfcExtrudedAreaSolid>()) {
1528 // Do we just collect openings for a parent element (i.e. a wall)?
1529 // In this case we don't extrude the surface yet, just keep the profile and transform it correctly
1530 if(conv.collect_openings) {
1531 boost::shared_ptr<TempMesh> meshtmp(new TempMesh());
1532 ProcessProfile(swept.SweptArea,*meshtmp,conv);
1533
1534 IfcMatrix4 m;
1535 ConvertAxisPlacement(m,solid->Position);
1536 meshtmp->Transform(m);
1537
1538 IfcVector3 dir;
1539 ConvertDirection(dir,solid->ExtrudedDirection);
1540 conv.collect_openings->push_back(TempOpening(solid, IfcMatrix3(m) * (dir*static_cast<IfcFloat>(solid->Depth)),meshtmp));
1541 return;
1542 }
1543
1544 ProcessExtrudedAreaSolid(*solid,meshout,conv);
690 ProcessExtrudedAreaSolid(*solid,meshout,conv, !!conv.collect_openings);
1545691 }
1546692 else if(const IfcRevolvedAreaSolid* const rev = swept.ToPtr<IfcRevolvedAreaSolid>()) {
1547693 ProcessRevolvedAreaSolid(*rev,meshout,conv);
1551697 }
1552698 }
1553699
1554
1555 // ------------------------------------------------------------------------------------------------
1556 enum Intersect {
1557 Intersect_No,
1558 Intersect_LiesOnPlane,
1559 Intersect_Yes
1560 };
1561
1562 // ------------------------------------------------------------------------------------------------
1563 Intersect IntersectSegmentPlane(const IfcVector3& p,const IfcVector3& n, const IfcVector3& e0, const IfcVector3& e1, IfcVector3& out)
1564 {
1565 const IfcVector3 pdelta = e0 - p, seg = e1-e0;
1566 const IfcFloat dotOne = n*seg, dotTwo = -(n*pdelta);
1567
1568 if (fabs(dotOne) < 1e-6) {
1569 return fabs(dotTwo) < 1e-6f ? Intersect_LiesOnPlane : Intersect_No;
1570 }
1571
1572 const IfcFloat t = dotTwo/dotOne;
1573 // t must be in [0..1] if the intersection point is within the given segment
1574 if (t > 1.f || t < 0.f) {
1575 return Intersect_No;
1576 }
1577 out = e0+t*seg;
1578 return Intersect_Yes;
1579 }
1580
1581 // ------------------------------------------------------------------------------------------------
1582 void ProcessBoolean(const IfcBooleanResult& boolean, TempMesh& result, ConversionData& conv)
1583 {
1584 if(const IfcBooleanResult* const clip = boolean.ToPtr<IfcBooleanResult>()) {
1585 if(clip->Operator != "DIFFERENCE") {
1586 IFCImporter::LogWarn("encountered unsupported boolean operator: " + (std::string)clip->Operator);
1587 return;
1588 }
1589
1590 TempMesh meshout;
1591 const IfcHalfSpaceSolid* const hs = clip->SecondOperand->ResolveSelectPtr<IfcHalfSpaceSolid>(conv.db);
1592 if(!hs) {
1593 IFCImporter::LogError("expected IfcHalfSpaceSolid as second clipping operand");
1594 return;
1595 }
1596
1597 const IfcPlane* const plane = hs->BaseSurface->ToPtr<IfcPlane>();
1598 if(!plane) {
1599 IFCImporter::LogError("expected IfcPlane as base surface for the IfcHalfSpaceSolid");
1600 return;
1601 }
1602
1603 if(const IfcBooleanResult* const op0 = clip->FirstOperand->ResolveSelectPtr<IfcBooleanResult>(conv.db)) {
1604 ProcessBoolean(*op0,meshout,conv);
1605 }
1606 else if (const IfcSweptAreaSolid* const swept = clip->FirstOperand->ResolveSelectPtr<IfcSweptAreaSolid>(conv.db)) {
1607 ProcessSweptAreaSolid(*swept,meshout,conv);
1608 }
1609 else {
1610 IFCImporter::LogError("expected IfcSweptAreaSolid or IfcBooleanResult as first clipping operand");
1611 return;
1612 }
1613
1614 // extract plane base position vector and normal vector
1615 IfcVector3 p,n(0.f,0.f,1.f);
1616 if (plane->Position->Axis) {
1617 ConvertDirection(n,plane->Position->Axis.Get());
1618 }
1619 ConvertCartesianPoint(p,plane->Position->Location);
1620
1621 if(!IsTrue(hs->AgreementFlag)) {
1622 n *= -1.f;
1623 }
1624
1625 // clip the current contents of `meshout` against the plane we obtained from the second operand
1626 const std::vector<IfcVector3>& in = meshout.verts;
1627 std::vector<IfcVector3>& outvert = result.verts;
1628 std::vector<unsigned int>::const_iterator begin=meshout.vertcnt.begin(), end=meshout.vertcnt.end(), iit;
1629
1630 outvert.reserve(in.size());
1631 result.vertcnt.reserve(meshout.vertcnt.size());
1632
1633 unsigned int vidx = 0;
1634 for(iit = begin; iit != end; vidx += *iit++) {
1635
1636 unsigned int newcount = 0;
1637 for(unsigned int i = 0; i < *iit; ++i) {
1638 const IfcVector3& e0 = in[vidx+i], e1 = in[vidx+(i+1)%*iit];
1639
1640 // does the next segment intersect the plane?
1641 IfcVector3 isectpos;
1642 const Intersect isect = IntersectSegmentPlane(p,n,e0,e1,isectpos);
1643 if (isect == Intersect_No || isect == Intersect_LiesOnPlane) {
1644 if ( (e0-p).Normalize()*n > 0 ) {
1645 outvert.push_back(e0);
1646 ++newcount;
1647 }
1648 }
1649 else if (isect == Intersect_Yes) {
1650 if ( (e0-p).Normalize()*n > 0 ) {
1651 // e0 is on the right side, so keep it
1652 outvert.push_back(e0);
1653 outvert.push_back(isectpos);
1654 newcount += 2;
1655 }
1656 else {
1657 // e0 is on the wrong side, so drop it and keep e1 instead
1658 outvert.push_back(isectpos);
1659 ++newcount;
1660 }
1661 }
1662 }
1663
1664 if (!newcount) {
1665 continue;
1666 }
1667
1668 IfcVector3 vmin,vmax;
1669 ArrayBounds(&*(outvert.end()-newcount),newcount,vmin,vmax);
1670
1671 // filter our IfcFloat points - those may happen if a point lies
1672 // directly on the intersection line. However, due to IfcFloat
1673 // precision a bitwise comparison is not feasible to detect
1674 // this case.
1675 const IfcFloat epsilon = (vmax-vmin).SquareLength() / 1e6f;
1676 FuzzyVectorCompare fz(epsilon);
1677
1678 std::vector<IfcVector3>::iterator e = std::unique( outvert.end()-newcount, outvert.end(), fz );
1679 if (e != outvert.end()) {
1680 newcount -= static_cast<unsigned int>(std::distance(e,outvert.end()));
1681 outvert.erase(e,outvert.end());
1682 }
1683 if (fz(*( outvert.end()-newcount),outvert.back())) {
1684 outvert.pop_back();
1685 --newcount;
1686 }
1687 if(newcount > 2) {
1688 result.vertcnt.push_back(newcount);
1689 }
1690 else while(newcount-->0)result.verts.pop_back();
1691
1692 }
1693 IFCImporter::LogDebug("generating CSG geometry by plane clipping (IfcBooleanClippingResult)");
1694 }
1695 else {
1696 IFCImporter::LogWarn("skipping unknown IfcBooleanResult entity, type is " + boolean.GetClassName());
1697 }
1698 }
1699
1700
1701
1702 // ------------------------------------------------------------------------------------------------
1703 bool ProcessGeometricItem(const IfcRepresentationItem& geo, std::vector<unsigned int>& mesh_indices, ConversionData& conv)
1704 {
1705 TempMesh meshtmp;
700 // ------------------------------------------------------------------------------------------------
701 bool ProcessGeometricItem(const IfcRepresentationItem& geo, std::vector<unsigned int>& mesh_indices,
702 ConversionData& conv)
703 {
704 bool fix_orientation = true;
705 boost::shared_ptr< TempMesh > meshtmp = boost::make_shared<TempMesh>();
1706706 if(const IfcShellBasedSurfaceModel* shellmod = geo.ToPtr<IfcShellBasedSurfaceModel>()) {
1707707 BOOST_FOREACH(boost::shared_ptr<const IfcShell> shell,shellmod->SbsmBoundary) {
1708708 try {
1709709 const EXPRESS::ENTITY& e = shell->To<ENTITY>();
1710710 const IfcConnectedFaceSet& fs = conv.db.MustGetObject(e).To<IfcConnectedFaceSet>();
1711711
1712 ProcessConnectedFaceSet(fs,meshtmp,conv);
712 ProcessConnectedFaceSet(fs,*meshtmp.get(),conv);
1713713 }
1714714 catch(std::bad_cast&) {
1715715 IFCImporter::LogWarn("unexpected type error, IfcShell ought to inherit from IfcConnectedFaceSet");
1717717 }
1718718 }
1719719 else if(const IfcConnectedFaceSet* fset = geo.ToPtr<IfcConnectedFaceSet>()) {
1720 ProcessConnectedFaceSet(*fset,meshtmp,conv);
720 ProcessConnectedFaceSet(*fset,*meshtmp.get(),conv);
1721721 }
1722722 else if(const IfcSweptAreaSolid* swept = geo.ToPtr<IfcSweptAreaSolid>()) {
1723 ProcessSweptAreaSolid(*swept,meshtmp,conv);
723 ProcessSweptAreaSolid(*swept,*meshtmp.get(),conv);
724 }
725 else if(const IfcSweptDiskSolid* disk = geo.ToPtr<IfcSweptDiskSolid>()) {
726 ProcessSweptDiskSolid(*disk,*meshtmp.get(),conv);
727 fix_orientation = false;
1724728 }
1725729 else if(const IfcManifoldSolidBrep* brep = geo.ToPtr<IfcManifoldSolidBrep>()) {
1726 ProcessConnectedFaceSet(brep->Outer,meshtmp,conv);
730 ProcessConnectedFaceSet(brep->Outer,*meshtmp.get(),conv);
1727731 }
1728732 else if(const IfcFaceBasedSurfaceModel* surf = geo.ToPtr<IfcFaceBasedSurfaceModel>()) {
1729733 BOOST_FOREACH(const IfcConnectedFaceSet& fc, surf->FbsmFaces) {
1730 ProcessConnectedFaceSet(fc,meshtmp,conv);
734 ProcessConnectedFaceSet(fc,*meshtmp.get(),conv);
1731735 }
1732736 }
1733737 else if(const IfcBooleanResult* boolean = geo.ToPtr<IfcBooleanResult>()) {
1734 ProcessBoolean(*boolean,meshtmp,conv);
738 ProcessBoolean(*boolean,*meshtmp.get(),conv);
1735739 }
1736740 else if(geo.ToPtr<IfcBoundingBox>()) {
1737741 // silently skip over bounding boxes
1742746 return false;
1743747 }
1744748
1745 meshtmp.RemoveAdjacentDuplicates();
1746 FixupFaceOrientation(meshtmp);
1747
1748 aiMesh* const mesh = meshtmp.ToMesh();
749 // Do we just collect openings for a parent element (i.e. a wall)?
750 // In such a case, we generate the polygonal mesh as usual,
751 // but attach it to a TempOpening instance which will later be applied
752 // to the wall it pertains to.
753
754 // Note: swep area solids are added in ProcessExtrudedAreaSolid(),
755 // which returns an empty mesh.
756 if(conv.collect_openings) {
757 if (!meshtmp->IsEmpty()) {
758 conv.collect_openings->push_back(TempOpening(geo.ToPtr<IfcSolidModel>(),
759 IfcVector3(0,0,0),
760 meshtmp,
761 boost::shared_ptr<TempMesh>()));
762 }
763 return true;
764 }
765
766 if (meshtmp->IsEmpty()) {
767 return false;
768 }
769
770 meshtmp->RemoveAdjacentDuplicates();
771 meshtmp->RemoveDegenerates();
772
773 if(fix_orientation) {
774 meshtmp->FixupFaceOrientation();
775 }
776
777 aiMesh* const mesh = meshtmp->ToMesh();
1749778 if(mesh) {
1750779 mesh->mMaterialIndex = ProcessMaterials(geo,conv);
1751780 mesh_indices.push_back(conv.meshes.size());
1756785 }
1757786
1758787 // ------------------------------------------------------------------------------------------------
1759 void AssignAddedMeshes(std::vector<unsigned int>& mesh_indices,aiNode* nd,ConversionData& /*conv*/)
788 void AssignAddedMeshes(std::vector<unsigned int>& mesh_indices,aiNode* nd,
789 ConversionData& /*conv*/)
1760790 {
1761791 if (!mesh_indices.empty()) {
1762792
1775805 }
1776806
1777807 // ------------------------------------------------------------------------------------------------
1778 bool TryQueryMeshCache(const IfcRepresentationItem& item, std::vector<unsigned int>& mesh_indices, ConversionData& conv)
808 bool TryQueryMeshCache(const IfcRepresentationItem& item,
809 std::vector<unsigned int>& mesh_indices,
810 ConversionData& conv)
1779811 {
1780812 ConversionData::MeshCache::const_iterator it = conv.cached_meshes.find(&item);
1781813 if (it != conv.cached_meshes.end()) {
1786818 }
1787819
1788820 // ------------------------------------------------------------------------------------------------
1789 void PopulateMeshCache(const IfcRepresentationItem& item, const std::vector<unsigned int>& mesh_indices, ConversionData& conv)
821 void PopulateMeshCache(const IfcRepresentationItem& item,
822 const std::vector<unsigned int>& mesh_indices,
823 ConversionData& conv)
1790824 {
1791825 conv.cached_meshes[&item] = mesh_indices;
1792826 }
1793827
1794828 // ------------------------------------------------------------------------------------------------
1795 bool ProcessRepresentationItem(const IfcRepresentationItem& item, std::vector<unsigned int>& mesh_indices, ConversionData& conv)
829 bool ProcessRepresentationItem(const IfcRepresentationItem& item,
830 std::vector<unsigned int>& mesh_indices,
831 ConversionData& conv)
1796832 {
1797833 if (!TryQueryMeshCache(item,mesh_indices,conv)) {
1798834 if(ProcessGeometricItem(item,mesh_indices,conv)) {
1805841 return true;
1806842 }
1807843
1808 #undef to_int64
1809 #undef from_int64
1810 #undef from_int64_f
1811844
1812845 } // ! IFC
1813846 } // ! Assimp
4747 #include <iterator>
4848 #include <boost/tuple/tuple.hpp>
4949
50 #ifndef ASSIMP_BUILD_NO_COMPRESSED_IFC
51 # include "../contrib/unzip/unzip.h"
52 #endif
5053
5154 #include "IFCLoader.h"
5255 #include "STEPFileReader.h"
102105 0,
103106 0,
104107 0,
105 "ifc"
108 "ifc ifczip"
106109 };
107110
108111
122125 bool IFCImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const
123126 {
124127 const std::string& extension = GetExtension(pFile);
125 if (extension == "ifc") {
128 if (extension == "ifc" || extension == "ifczip") {
126129 return true;
127130 }
128131
167170 ThrowException("Could not open file for reading");
168171 }
169172
173
174 // if this is a ifczip file, decompress its contents first
175 if(GetExtension(pFile) == "ifczip") {
176 #ifndef ASSIMP_BUILD_NO_COMPRESSED_IFC
177 unzFile zip = unzOpen( pFile.c_str() );
178 if(zip == NULL) {
179 ThrowException("Could not open ifczip file for reading, unzip failed");
180 }
181
182 // chop 'zip' postfix
183 std::string fileName = pFile.substr(0,pFile.length() - 3);
184
185 std::string::size_type s = pFile.find_last_of('\\');
186 if(s == std::string::npos) {
187 s = pFile.find_last_of('/');
188 }
189 if(s != std::string::npos) {
190 fileName = fileName.substr(s+1);
191 }
192
193 // search file (same name as the IFCZIP except for the file extension) and place file pointer there
194 if(UNZ_OK == unzGoToFirstFile(zip)) {
195 do {
196 // get file size, etc.
197 unz_file_info fileInfo;
198 char filename[256];
199 unzGetCurrentFileInfo( zip , &fileInfo, filename, sizeof(filename), 0, 0, 0, 0 );
200 if (GetExtension(filename) != "ifc") {
201 continue;
202 }
203 uint8_t* buff = new uint8_t[fileInfo.uncompressed_size];
204 LogInfo("Decompressing IFCZIP file");
205 unzOpenCurrentFile( zip );
206 const int ret = unzReadCurrentFile( zip, buff, fileInfo.uncompressed_size);
207 size_t filesize = fileInfo.uncompressed_size;
208 if ( ret < 0 || size_t(ret) != filesize )
209 {
210 delete[] buff;
211 ThrowException("Failed to decompress IFC ZIP file");
212 }
213 unzCloseCurrentFile( zip );
214 stream.reset(new MemoryIOStream(buff,fileInfo.uncompressed_size,true));
215 break;
216
217 if (unzGoToNextFile(zip) == UNZ_END_OF_LIST_OF_FILE) {
218 ThrowException("Found no IFC file member in IFCZIP file (1)");
219 }
220
221 } while(true);
222 }
223 else {
224 ThrowException("Found no IFC file member in IFCZIP file (2)");
225 }
226
227 unzClose(zip);
228 #else
229 ThrowException("Could not open ifczip file for reading, assimp was built without ifczip support");
230 #endif
231 }
232
170233 boost::scoped_ptr<STEP::DB> db(STEP::ReadFileHeader(stream));
171234 const STEP::HeaderInfo& head = static_cast<const STEP::DB&>(*db).GetHeader();
172235
195258
196259 // tell the reader for which types we need to simulate STEPs reverse indices
197260 static const char* const inverse_indices_to_track[] = {
198 "ifcrelcontainedinspatialstructure", "ifcrelaggregates", "ifcrelvoidselement", "ifcstyleditem"
261 "ifcrelcontainedinspatialstructure", "ifcrelaggregates", "ifcrelvoidselement", "ifcreldefinesbyproperties", "ifcpropertyset", "ifcstyleditem"
199262 };
200263
201264 // feed the IFC schema into the reader and pre-parse all lines
202265 STEP::ReadFile(*db, schema, types_to_track, inverse_indices_to_track);
203
204266 const STEP::LazyObject* proj = db->GetObject("ifcproject");
205267 if (!proj) {
206268 ThrowException("missing IfcProject entity");
216278 // in a build with no entities disabled. See
217279 // scripts/IFCImporter/CPPGenerator.py
218280 // for more information.
219 #ifdef ASSIMP_IFC_TEST
220 db->EvaluateAll();
221 #endif
281 #ifdef ASSIMP_IFC_TEST
282 db->EvaluateAll();
283 #endif
222284
223285 // do final data copying
224286 if (conv.meshes.size()) {
457519 return -3;
458520 }
459521
460 // give strong preference to extruded geometry
522 // give strong preference to extruded geometry.
461523 if (r == "SweptSolid") {
462524 return -10;
463525 }
494556 if(!el.Representation) {
495557 return;
496558 }
497
498
499559 std::vector<unsigned int> meshes;
500
501560 // we want only one representation type, so bring them in a suitable order (i.e try those
502561 // that look as if we could read them quickly at first). This way of reading
503562 // representation is relatively generic and allows the concrete implementations
504563 // for the different representation types to make some sensible choices what
505564 // to load and what not to load.
506565 const STEP::ListOf< STEP::Lazy< IfcRepresentation >, 1, 0 >& src = el.Representation.Get()->Representations;
507
508566 std::vector<const IfcRepresentation*> repr_ordered(src.size());
509567 std::copy(src.begin(),src.end(),repr_ordered.begin());
510568 std::sort(repr_ordered.begin(),repr_ordered.end(),RateRepresentationPredicate());
511
512569 BOOST_FOREACH(const IfcRepresentation* repr, repr_ordered) {
513570 bool res = false;
514571 BOOST_FOREACH(const IfcRepresentationItem& item, repr->Items) {
524581 break;
525582 }
526583 }
527
528584 AssignAddedMeshes(meshes,nd,conv);
585 }
586
587 typedef std::map<std::string, std::string> Metadata;
588
589 // ------------------------------------------------------------------------------------------------
590 void ProcessMetadata(const ListOf< Lazy< IfcProperty >, 1, 0 >& set, ConversionData& conv, Metadata& properties,
591 const std::string& prefix = "",
592 unsigned int nest = 0)
593 {
594 BOOST_FOREACH(const IfcProperty& property, set) {
595 const std::string& key = prefix.length() > 0 ? (prefix + "." + property.Name) : property.Name;
596 if (const IfcPropertySingleValue* const singleValue = property.ToPtr<IfcPropertySingleValue>()) {
597 if (singleValue->NominalValue) {
598 if (const EXPRESS::STRING* str = singleValue->NominalValue.Get()->ToPtr<EXPRESS::STRING>()) {
599 std::string value = static_cast<std::string>(*str);
600 properties[key]=value;
601 }
602 else if (const EXPRESS::REAL* val = singleValue->NominalValue.Get()->ToPtr<EXPRESS::REAL>()) {
603 float value = static_cast<float>(*val);
604 std::stringstream s;
605 s << value;
606 properties[key]=s.str();
607 }
608 else if (const EXPRESS::INTEGER* val = singleValue->NominalValue.Get()->ToPtr<EXPRESS::INTEGER>()) {
609 int64_t value = static_cast<int64_t>(*val);
610 std::stringstream s;
611 s << value;
612 properties[key]=s.str();
613 }
614 }
615 }
616 else if (const IfcPropertyListValue* const listValue = property.ToPtr<IfcPropertyListValue>()) {
617 std::stringstream ss;
618 ss << "[";
619 unsigned index=0;
620 BOOST_FOREACH(const IfcValue::Out& v, listValue->ListValues) {
621 if (!v) continue;
622 if (const EXPRESS::STRING* str = v->ToPtr<EXPRESS::STRING>()) {
623 std::string value = static_cast<std::string>(*str);
624 ss << "'" << value << "'";
625 }
626 else if (const EXPRESS::REAL* val = v->ToPtr<EXPRESS::REAL>()) {
627 float value = static_cast<float>(*val);
628 ss << value;
629 }
630 else if (const EXPRESS::INTEGER* val = v->ToPtr<EXPRESS::INTEGER>()) {
631 int64_t value = static_cast<int64_t>(*val);
632 ss << value;
633 }
634 if (index+1<listValue->ListValues.size()) {
635 ss << ",";
636 }
637 index++;
638 }
639 ss << "]";
640 properties[key]=ss.str();
641 }
642 else if (const IfcComplexProperty* const complexProp = property.ToPtr<IfcComplexProperty>()) {
643 if(nest > 2) { // mostly arbitrary limit to prevent stack overflow vulnerabilities
644 IFCImporter::LogError("maximum nesting level for IfcComplexProperty reached, skipping this property.");
645 }
646 else {
647 ProcessMetadata(complexProp->HasProperties, conv, properties, key, nest + 1);
648 }
649 }
650 else {
651 properties[key]="";
652 }
653 }
654 }
655
656
657 // ------------------------------------------------------------------------------------------------
658 void ProcessMetadata(uint64_t relDefinesByPropertiesID, ConversionData& conv, Metadata& properties)
659 {
660 if (const IfcRelDefinesByProperties* const pset = conv.db.GetObject(relDefinesByPropertiesID)->ToPtr<IfcRelDefinesByProperties>()) {
661 if (const IfcPropertySet* const set = conv.db.GetObject(pset->RelatingPropertyDefinition->GetID())->ToPtr<IfcPropertySet>()) {
662 ProcessMetadata(set->HasProperties, conv, properties);
663 }
664 }
529665 }
530666
531667 // ------------------------------------------------------------------------------------------------
550686
551687 // add an output node for this spatial structure
552688 std::auto_ptr<aiNode> nd(new aiNode());
553 nd->mName.Set(el.GetClassName()+"_"+(el.Name?el.Name:el.GlobalId));
689 nd->mName.Set(el.GetClassName()+"_"+(el.Name?el.Name.Get():"Unnamed")+"_"+el.GlobalId);
554690 nd->mParent = parent;
691
692 conv.already_processed.insert(el.GetID());
693
694 // check for node metadata
695 STEP::DB::RefMapRange children = refs.equal_range(el.GetID());
696 if (children.first!=refs.end()) {
697 Metadata properties;
698 if (children.first==children.second) {
699 // handles single property set
700 ProcessMetadata((*children.first).second, conv, properties);
701 }
702 else {
703 // handles multiple property sets (currently all property sets are merged,
704 // which may not be the best solution in the long run)
705 for (STEP::DB::RefMap::const_iterator it=children.first; it!=children.second; ++it) {
706 ProcessMetadata((*it).second, conv, properties);
707 }
708 }
709
710 if (!properties.empty()) {
711 aiMetadata* data = new aiMetadata();
712 data->mNumProperties = properties.size();
713 data->mKeys = new aiString[data->mNumProperties]();
714 data->mValues = new aiMetadataEntry[data->mNumProperties]();
715
716 unsigned int index = 0;
717 BOOST_FOREACH(const Metadata::value_type& kv, properties)
718 data->Set(index++, kv.first, aiString(kv.second));
719
720 nd->mMetaData = data;
721 }
722 }
555723
556724 if(el.ObjectPlacement) {
557725 ResolveObjectPlacement(nd->mTransformation,el.ObjectPlacement.Get(),conv);
571739 STEP::DB::RefMapRange range = refs.equal_range(el.GetID());
572740
573741 for(STEP::DB::RefMapRange range2 = range; range2.first != range.second; ++range2.first) {
742 // skip over meshes that have already been processed before. This is strictly necessary
743 // because the reverse indices also include references contained in argument lists and
744 // therefore every element has a back-reference hold by its parent.
745 if (conv.already_processed.find((*range2.first).second) != conv.already_processed.end()) {
746 continue;
747 }
574748 const STEP::LazyObject& obj = conv.db.MustGetObject((*range2.first).second);
575749
576750 // handle regularly-contained elements
577751 if(const IfcRelContainedInSpatialStructure* const cont = obj->ToPtr<IfcRelContainedInSpatialStructure>()) {
752 if(cont->RelatingStructure->GetID() != el.GetID()) {
753 continue;
754 }
578755 BOOST_FOREACH(const IfcProduct& pro, cont->RelatedElements) {
579756 if(const IfcOpeningElement* const open = pro.ToPtr<IfcOpeningElement>()) {
580757 // IfcOpeningElement is handled below. Sadly we can't use it here as is:
581 // The docs say that opening elements are USUALLY attached to building storeys
582 // but we want them for the building elements to which they belong to.
758 // The docs say that opening elements are USUALLY attached to building storey,
759 // but we want them for the building elements to which they belong.
583760 continue;
584761 }
585762
630807 }
631808
632809 for(;range.first != range.second; ++range.first) {
810 // see note in loop above
811 if (conv.already_processed.find((*range.first).second) != conv.already_processed.end()) {
812 continue;
813 }
633814 if(const IfcRelAggregates* const aggr = conv.db.GetObject((*range.first).second)->ToPtr<IfcRelAggregates>()) {
815 if(aggr->RelatingObject->GetID() != el.GetID()) {
816 continue;
817 }
634818
635819 // move aggregate elements to a separate node since they are semantically different than elements that are just 'contained'
636820 std::auto_ptr<aiNode> nd_aggr(new aiNode());
676860 throw;
677861 }
678862
863 ai_assert(conv.already_processed.find(el.GetID()) != conv.already_processed.end());
864 conv.already_processed.erase(conv.already_processed.find(el.GetID()));
679865 return nd.release();
680866 }
681867
122122 }
123123 }
124124 }
125 }
125 } /*
126126 else if (const IFC::IfcSurfaceStyleWithTextures* tex = sel2->ResolveSelectPtr<IFC::IfcSurfaceStyleWithTextures>(conv.db)) {
127127 // XXX
128 }
128 } */
129129 }
130130
131131 }
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2010, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file IFCOpenings.cpp
41 * @brief Implements a subset of Ifc CSG operations for pouring
42 * holes for windows and doors into walls.
43 */
44
45 #include "AssimpPCH.h"
46
47 #ifndef ASSIMP_BUILD_NO_IFC_IMPORTER
48 #include "IFCUtil.h"
49 #include "PolyTools.h"
50 #include "ProcessHelper.h"
51
52 #include "../contrib/poly2tri/poly2tri/poly2tri.h"
53 #include "../contrib/clipper/clipper.hpp"
54
55 #include <iterator>
56
57 namespace Assimp {
58 namespace IFC {
59
60 using ClipperLib::ulong64;
61 // XXX use full -+ range ...
62 const ClipperLib::long64 max_ulong64 = 1518500249; // clipper.cpp / hiRange var
63
64 //#define to_int64(p) (static_cast<ulong64>( std::max( 0., std::min( static_cast<IfcFloat>((p)), 1.) ) * max_ulong64 ))
65 #define to_int64(p) (static_cast<ulong64>(static_cast<IfcFloat>((p) ) * max_ulong64 ))
66 #define from_int64(p) (static_cast<IfcFloat>((p)) / max_ulong64)
67 #define one_vec (IfcVector2(static_cast<IfcFloat>(1.0),static_cast<IfcFloat>(1.0)))
68
69
70 // fallback method to generate wall openings
71 bool TryAddOpenings_Poly2Tri(const std::vector<TempOpening>& openings,const std::vector<IfcVector3>& nors,
72 TempMesh& curmesh);
73
74
75 typedef std::pair< IfcVector2, IfcVector2 > BoundingBox;
76 typedef std::map<IfcVector2,size_t,XYSorter> XYSortedField;
77
78
79 // ------------------------------------------------------------------------------------------------
80 void QuadrifyPart(const IfcVector2& pmin, const IfcVector2& pmax, XYSortedField& field,
81 const std::vector< BoundingBox >& bbs,
82 std::vector<IfcVector2>& out)
83 {
84 if (!(pmin.x-pmax.x) || !(pmin.y-pmax.y)) {
85 return;
86 }
87
88 IfcFloat xs = 1e10, xe = 1e10;
89 bool found = false;
90
91 // Search along the x-axis until we find an opening
92 XYSortedField::iterator start = field.begin();
93 for(; start != field.end(); ++start) {
94 const BoundingBox& bb = bbs[(*start).second];
95 if(bb.first.x >= pmax.x) {
96 break;
97 }
98
99 if (bb.second.x > pmin.x && bb.second.y > pmin.y && bb.first.y < pmax.y) {
100 xs = bb.first.x;
101 xe = bb.second.x;
102 found = true;
103 break;
104 }
105 }
106
107 if (!found) {
108 // the rectangle [pmin,pend] is opaque, fill it
109 out.push_back(pmin);
110 out.push_back(IfcVector2(pmin.x,pmax.y));
111 out.push_back(pmax);
112 out.push_back(IfcVector2(pmax.x,pmin.y));
113 return;
114 }
115
116 xs = std::max(pmin.x,xs);
117 xe = std::min(pmax.x,xe);
118
119 // see if there's an offset to fill at the top of our quad
120 if (xs - pmin.x) {
121 out.push_back(pmin);
122 out.push_back(IfcVector2(pmin.x,pmax.y));
123 out.push_back(IfcVector2(xs,pmax.y));
124 out.push_back(IfcVector2(xs,pmin.y));
125 }
126
127 // search along the y-axis for all openings that overlap xs and our quad
128 IfcFloat ylast = pmin.y;
129 found = false;
130 for(; start != field.end(); ++start) {
131 const BoundingBox& bb = bbs[(*start).second];
132 if (bb.first.x > xs || bb.first.y >= pmax.y) {
133 break;
134 }
135
136 if (bb.second.y > ylast) {
137
138 found = true;
139 const IfcFloat ys = std::max(bb.first.y,pmin.y), ye = std::min(bb.second.y,pmax.y);
140 if (ys - ylast > 0.0f) {
141 QuadrifyPart( IfcVector2(xs,ylast), IfcVector2(xe,ys) ,field,bbs,out);
142 }
143
144 // the following are the window vertices
145
146 /*wnd.push_back(IfcVector2(xs,ys));
147 wnd.push_back(IfcVector2(xs,ye));
148 wnd.push_back(IfcVector2(xe,ye));
149 wnd.push_back(IfcVector2(xe,ys));*/
150 ylast = ye;
151 }
152 }
153 if (!found) {
154 // the rectangle [pmin,pend] is opaque, fill it
155 out.push_back(IfcVector2(xs,pmin.y));
156 out.push_back(IfcVector2(xs,pmax.y));
157 out.push_back(IfcVector2(xe,pmax.y));
158 out.push_back(IfcVector2(xe,pmin.y));
159 return;
160 }
161 if (ylast < pmax.y) {
162 QuadrifyPart( IfcVector2(xs,ylast), IfcVector2(xe,pmax.y) ,field,bbs,out);
163 }
164
165 // now for the whole rest
166 if (pmax.x-xe) {
167 QuadrifyPart(IfcVector2(xe,pmin.y), pmax ,field,bbs,out);
168 }
169 }
170
171 typedef std::vector<IfcVector2> Contour;
172 typedef std::vector<bool> SkipList; // should probably use int for performance reasons
173
174 struct ProjectedWindowContour
175 {
176 Contour contour;
177 BoundingBox bb;
178 SkipList skiplist;
179 bool is_rectangular;
180
181
182 ProjectedWindowContour(const Contour& contour, const BoundingBox& bb, bool is_rectangular)
183 : contour(contour)
184 , bb(bb)
185 , is_rectangular(is_rectangular)
186 {}
187
188
189 bool IsInvalid() const {
190 return contour.empty();
191 }
192
193 void FlagInvalid() {
194 contour.clear();
195 }
196
197 void PrepareSkiplist() {
198 skiplist.resize(contour.size(),false);
199 }
200 };
201
202 typedef std::vector< ProjectedWindowContour > ContourVector;
203
204 // ------------------------------------------------------------------------------------------------
205 bool BoundingBoxesOverlapping( const BoundingBox &ibb, const BoundingBox &bb )
206 {
207 // count the '=' case as non-overlapping but as adjacent to each other
208 return ibb.first.x < bb.second.x && ibb.second.x > bb.first.x &&
209 ibb.first.y < bb.second.y && ibb.second.y > bb.first.y;
210 }
211
212 // ------------------------------------------------------------------------------------------------
213 bool IsDuplicateVertex(const IfcVector2& vv, const std::vector<IfcVector2>& temp_contour)
214 {
215 // sanity check for duplicate vertices
216 BOOST_FOREACH(const IfcVector2& cp, temp_contour) {
217 if ((cp-vv).SquareLength() < 1e-5f) {
218 return true;
219 }
220 }
221 return false;
222 }
223
224 // ------------------------------------------------------------------------------------------------
225 void ExtractVerticesFromClipper(const ClipperLib::Polygon& poly, std::vector<IfcVector2>& temp_contour,
226 bool filter_duplicates = false)
227 {
228 temp_contour.clear();
229 BOOST_FOREACH(const ClipperLib::IntPoint& point, poly) {
230 IfcVector2 vv = IfcVector2( from_int64(point.X), from_int64(point.Y));
231 vv = std::max(vv,IfcVector2());
232 vv = std::min(vv,one_vec);
233
234 if (!filter_duplicates || !IsDuplicateVertex(vv, temp_contour)) {
235 temp_contour.push_back(vv);
236 }
237 }
238 }
239
240 // ------------------------------------------------------------------------------------------------
241 BoundingBox GetBoundingBox(const ClipperLib::Polygon& poly)
242 {
243 IfcVector2 newbb_min, newbb_max;
244 MinMaxChooser<IfcVector2>()(newbb_min, newbb_max);
245
246 BOOST_FOREACH(const ClipperLib::IntPoint& point, poly) {
247 IfcVector2 vv = IfcVector2( from_int64(point.X), from_int64(point.Y));
248
249 // sanity rounding
250 vv = std::max(vv,IfcVector2());
251 vv = std::min(vv,one_vec);
252
253 newbb_min = std::min(newbb_min,vv);
254 newbb_max = std::max(newbb_max,vv);
255 }
256 return BoundingBox(newbb_min, newbb_max);
257 }
258
259 // ------------------------------------------------------------------------------------------------
260 void InsertWindowContours(const ContourVector& contours,
261 const std::vector<TempOpening>& openings,
262 TempMesh& curmesh)
263 {
264 // fix windows - we need to insert the real, polygonal shapes into the quadratic holes that we have now
265 for(size_t i = 0; i < contours.size();++i) {
266 const BoundingBox& bb = contours[i].bb;
267 const std::vector<IfcVector2>& contour = contours[i].contour;
268 if(contour.empty()) {
269 continue;
270 }
271
272 // check if we need to do it at all - many windows just fit perfectly into their quadratic holes,
273 // i.e. their contours *are* already their bounding boxes.
274 if (contour.size() == 4) {
275 std::set<IfcVector2,XYSorter> verts;
276 for(size_t n = 0; n < 4; ++n) {
277 verts.insert(contour[n]);
278 }
279 const std::set<IfcVector2,XYSorter>::const_iterator end = verts.end();
280 if (verts.find(bb.first)!=end && verts.find(bb.second)!=end
281 && verts.find(IfcVector2(bb.first.x,bb.second.y))!=end
282 && verts.find(IfcVector2(bb.second.x,bb.first.y))!=end
283 ) {
284 continue;
285 }
286 }
287
288 const IfcFloat diag = (bb.first-bb.second).Length();
289 const IfcFloat epsilon = diag/1000.f;
290
291 // walk through all contour points and find those that lie on the BB corner
292 size_t last_hit = -1, very_first_hit = -1;
293 IfcVector2 edge;
294 for(size_t n = 0, e=0, size = contour.size();; n=(n+1)%size, ++e) {
295
296 // sanity checking
297 if (e == size*2) {
298 IFCImporter::LogError("encountered unexpected topology while generating window contour");
299 break;
300 }
301
302 const IfcVector2& v = contour[n];
303
304 bool hit = false;
305 if (fabs(v.x-bb.first.x)<epsilon) {
306 edge.x = bb.first.x;
307 hit = true;
308 }
309 else if (fabs(v.x-bb.second.x)<epsilon) {
310 edge.x = bb.second.x;
311 hit = true;
312 }
313
314 if (fabs(v.y-bb.first.y)<epsilon) {
315 edge.y = bb.first.y;
316 hit = true;
317 }
318 else if (fabs(v.y-bb.second.y)<epsilon) {
319 edge.y = bb.second.y;
320 hit = true;
321 }
322
323 if (hit) {
324 if (last_hit != (size_t)-1) {
325
326 const size_t old = curmesh.verts.size();
327 size_t cnt = last_hit > n ? size-(last_hit-n) : n-last_hit;
328 for(size_t a = last_hit, e = 0; e <= cnt; a=(a+1)%size, ++e) {
329 // hack: this is to fix cases where opening contours are self-intersecting.
330 // Clipper doesn't produce such polygons, but as soon as we're back in
331 // our brave new floating-point world, very small distances are consumed
332 // by the maximum available precision, leading to self-intersecting
333 // polygons. This fix makes concave windows fail even worse, but
334 // anyway, fail is fail.
335 if ((contour[a] - edge).SquareLength() > diag*diag*0.7) {
336 continue;
337 }
338 curmesh.verts.push_back(IfcVector3(contour[a].x, contour[a].y, 0.0f));
339 }
340
341 if (edge != contour[last_hit]) {
342
343 IfcVector2 corner = edge;
344
345 if (fabs(contour[last_hit].x-bb.first.x)<epsilon) {
346 corner.x = bb.first.x;
347 }
348 else if (fabs(contour[last_hit].x-bb.second.x)<epsilon) {
349 corner.x = bb.second.x;
350 }
351
352 if (fabs(contour[last_hit].y-bb.first.y)<epsilon) {
353 corner.y = bb.first.y;
354 }
355 else if (fabs(contour[last_hit].y-bb.second.y)<epsilon) {
356 corner.y = bb.second.y;
357 }
358
359 curmesh.verts.push_back(IfcVector3(corner.x, corner.y, 0.0f));
360 }
361 else if (cnt == 1) {
362 // avoid degenerate polygons (also known as lines or points)
363 curmesh.verts.erase(curmesh.verts.begin()+old,curmesh.verts.end());
364 }
365
366 if (const size_t d = curmesh.verts.size()-old) {
367 curmesh.vertcnt.push_back(d);
368 std::reverse(curmesh.verts.rbegin(),curmesh.verts.rbegin()+d);
369 }
370 if (n == very_first_hit) {
371 break;
372 }
373 }
374 else {
375 very_first_hit = n;
376 }
377
378 last_hit = n;
379 }
380 }
381 }
382 }
383
384 // ------------------------------------------------------------------------------------------------
385 void MergeWindowContours (const std::vector<IfcVector2>& a,
386 const std::vector<IfcVector2>& b,
387 ClipperLib::ExPolygons& out)
388 {
389 out.clear();
390
391 ClipperLib::Clipper clipper;
392 ClipperLib::Polygon clip;
393
394 BOOST_FOREACH(const IfcVector2& pip, a) {
395 clip.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
396 }
397
398 if (ClipperLib::Orientation(clip)) {
399 std::reverse(clip.begin(), clip.end());
400 }
401
402 clipper.AddPolygon(clip, ClipperLib::ptSubject);
403 clip.clear();
404
405 BOOST_FOREACH(const IfcVector2& pip, b) {
406 clip.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
407 }
408
409 if (ClipperLib::Orientation(clip)) {
410 std::reverse(clip.begin(), clip.end());
411 }
412
413 clipper.AddPolygon(clip, ClipperLib::ptSubject);
414 clipper.Execute(ClipperLib::ctUnion, out,ClipperLib::pftNonZero,ClipperLib::pftNonZero);
415 }
416
417 // ------------------------------------------------------------------------------------------------
418 // Subtract a from b
419 void MakeDisjunctWindowContours (const std::vector<IfcVector2>& a,
420 const std::vector<IfcVector2>& b,
421 ClipperLib::ExPolygons& out)
422 {
423 out.clear();
424
425 ClipperLib::Clipper clipper;
426 ClipperLib::Polygon clip;
427
428 BOOST_FOREACH(const IfcVector2& pip, a) {
429 clip.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
430 }
431
432 if (ClipperLib::Orientation(clip)) {
433 std::reverse(clip.begin(), clip.end());
434 }
435
436 clipper.AddPolygon(clip, ClipperLib::ptClip);
437 clip.clear();
438
439 BOOST_FOREACH(const IfcVector2& pip, b) {
440 clip.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
441 }
442
443 if (ClipperLib::Orientation(clip)) {
444 std::reverse(clip.begin(), clip.end());
445 }
446
447 clipper.AddPolygon(clip, ClipperLib::ptSubject);
448 clipper.Execute(ClipperLib::ctDifference, out,ClipperLib::pftNonZero,ClipperLib::pftNonZero);
449 }
450
451 // ------------------------------------------------------------------------------------------------
452 void CleanupWindowContour(ProjectedWindowContour& window)
453 {
454 std::vector<IfcVector2> scratch;
455 std::vector<IfcVector2>& contour = window.contour;
456
457 ClipperLib::Polygon subject;
458 ClipperLib::Clipper clipper;
459 ClipperLib::ExPolygons clipped;
460
461 BOOST_FOREACH(const IfcVector2& pip, contour) {
462 subject.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
463 }
464
465 clipper.AddPolygon(subject,ClipperLib::ptSubject);
466 clipper.Execute(ClipperLib::ctUnion,clipped,ClipperLib::pftNonZero,ClipperLib::pftNonZero);
467
468 // This should yield only one polygon or something went wrong
469 if (clipped.size() != 1) {
470
471 // Empty polygon? drop the contour altogether
472 if(clipped.empty()) {
473 IFCImporter::LogError("error during polygon clipping, window contour is degenerate");
474 window.FlagInvalid();
475 return;
476 }
477
478 // Else: take the first only
479 IFCImporter::LogError("error during polygon clipping, window contour is not convex");
480 }
481
482 ExtractVerticesFromClipper(clipped[0].outer, scratch);
483 // Assume the bounding box doesn't change during this operation
484 }
485
486 // ------------------------------------------------------------------------------------------------
487 void CleanupWindowContours(ContourVector& contours)
488 {
489 // Use PolyClipper to clean up window contours
490 try {
491 BOOST_FOREACH(ProjectedWindowContour& window, contours) {
492 CleanupWindowContour(window);
493 }
494 }
495 catch (const char* sx) {
496 IFCImporter::LogError("error during polygon clipping, window shape may be wrong: (Clipper: "
497 + std::string(sx) + ")");
498 }
499 }
500
501 // ------------------------------------------------------------------------------------------------
502 void CleanupOuterContour(const std::vector<IfcVector2>& contour_flat, TempMesh& curmesh)
503 {
504 std::vector<IfcVector3> vold;
505 std::vector<unsigned int> iold;
506
507 vold.reserve(curmesh.verts.size());
508 iold.reserve(curmesh.vertcnt.size());
509
510 // Fix the outer contour using polyclipper
511 try {
512
513 ClipperLib::Polygon subject;
514 ClipperLib::Clipper clipper;
515 ClipperLib::ExPolygons clipped;
516
517 ClipperLib::Polygon clip;
518 clip.reserve(contour_flat.size());
519 BOOST_FOREACH(const IfcVector2& pip, contour_flat) {
520 clip.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
521 }
522
523 if (!ClipperLib::Orientation(clip)) {
524 std::reverse(clip.begin(), clip.end());
525 }
526
527 // We need to run polyclipper on every single polygon -- we can't run it one all
528 // of them at once or it would merge them all together which would undo all
529 // previous steps
530 subject.reserve(4);
531 size_t index = 0;
532 size_t countdown = 0;
533 BOOST_FOREACH(const IfcVector3& pip, curmesh.verts) {
534 if (!countdown) {
535 countdown = curmesh.vertcnt[index++];
536 if (!countdown) {
537 continue;
538 }
539 }
540 subject.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
541 if (--countdown == 0) {
542 if (!ClipperLib::Orientation(subject)) {
543 std::reverse(subject.begin(), subject.end());
544 }
545
546 clipper.AddPolygon(subject,ClipperLib::ptSubject);
547 clipper.AddPolygon(clip,ClipperLib::ptClip);
548
549 clipper.Execute(ClipperLib::ctIntersection,clipped,ClipperLib::pftNonZero,ClipperLib::pftNonZero);
550
551 BOOST_FOREACH(const ClipperLib::ExPolygon& ex, clipped) {
552 iold.push_back(ex.outer.size());
553 BOOST_FOREACH(const ClipperLib::IntPoint& point, ex.outer) {
554 vold.push_back(IfcVector3(
555 from_int64(point.X),
556 from_int64(point.Y),
557 0.0f));
558 }
559 }
560
561 subject.clear();
562 clipped.clear();
563 clipper.Clear();
564 }
565 }
566 }
567 catch (const char* sx) {
568 IFCImporter::LogError("Ifc: error during polygon clipping, wall contour line may be wrong: (Clipper: "
569 + std::string(sx) + ")");
570
571 return;
572 }
573
574 // swap data arrays
575 std::swap(vold,curmesh.verts);
576 std::swap(iold,curmesh.vertcnt);
577 }
578
579 typedef std::vector<TempOpening*> OpeningRefs;
580 typedef std::vector<OpeningRefs > OpeningRefVector;
581
582 typedef std::vector<std::pair<
583 ContourVector::const_iterator,
584 Contour::const_iterator>
585 > ContourRefVector;
586
587 // ------------------------------------------------------------------------------------------------
588 bool BoundingBoxesAdjacent(const BoundingBox& bb, const BoundingBox& ibb)
589 {
590 // TODO: I'm pretty sure there is a much more compact way to check this
591 const IfcFloat epsilon = 1e-5f;
592 return (fabs(bb.second.x - ibb.first.x) < epsilon && bb.first.y <= ibb.second.y && bb.second.y >= ibb.first.y) ||
593 (fabs(bb.first.x - ibb.second.x) < epsilon && ibb.first.y <= bb.second.y && ibb.second.y >= bb.first.y) ||
594 (fabs(bb.second.y - ibb.first.y) < epsilon && bb.first.x <= ibb.second.x && bb.second.x >= ibb.first.x) ||
595 (fabs(bb.first.y - ibb.second.y) < epsilon && ibb.first.x <= bb.second.x && ibb.second.x >= bb.first.x);
596 }
597
598 // ------------------------------------------------------------------------------------------------
599 // Check if m0,m1 intersects n0,n1 assuming same ordering of the points in the line segments
600 // output the intersection points on n0,n1
601 bool IntersectingLineSegments(const IfcVector2& n0, const IfcVector2& n1,
602 const IfcVector2& m0, const IfcVector2& m1,
603 IfcVector2& out0, IfcVector2& out1)
604 {
605 const IfcVector2& n0_to_n1 = n1 - n0;
606
607 const IfcVector2& n0_to_m0 = m0 - n0;
608 const IfcVector2& n1_to_m1 = m1 - n1;
609
610 const IfcVector2& n0_to_m1 = m1 - n0;
611
612 const IfcFloat e = 1e-5f;
613 const IfcFloat smalle = 1e-9f;
614
615 static const IfcFloat inf = std::numeric_limits<IfcFloat>::infinity();
616
617 if (!(n0_to_m0.SquareLength() < e*e || fabs(n0_to_m0 * n0_to_n1) / (n0_to_m0.Length() * n0_to_n1.Length()) > 1-1e-5 )) {
618 return false;
619 }
620
621 if (!(n1_to_m1.SquareLength() < e*e || fabs(n1_to_m1 * n0_to_n1) / (n1_to_m1.Length() * n0_to_n1.Length()) > 1-1e-5 )) {
622 return false;
623 }
624
625 IfcFloat s0;
626 IfcFloat s1;
627
628 // pick the axis with the higher absolute difference so the result
629 // is more accurate. Since we cannot guarantee that the axis with
630 // the higher absolute difference is big enough as to avoid
631 // divisions by zero, the case 0/0 ~ infinity is detected and
632 // handled separately.
633 if(fabs(n0_to_n1.x) > fabs(n0_to_n1.y)) {
634 s0 = n0_to_m0.x / n0_to_n1.x;
635 s1 = n0_to_m1.x / n0_to_n1.x;
636
637 if (fabs(s0) == inf && fabs(n0_to_m0.x) < smalle) {
638 s0 = 0.;
639 }
640 if (fabs(s1) == inf && fabs(n0_to_m1.x) < smalle) {
641 s1 = 0.;
642 }
643 }
644 else {
645 s0 = n0_to_m0.y / n0_to_n1.y;
646 s1 = n0_to_m1.y / n0_to_n1.y;
647
648 if (fabs(s0) == inf && fabs(n0_to_m0.y) < smalle) {
649 s0 = 0.;
650 }
651 if (fabs(s1) == inf && fabs(n0_to_m1.y) < smalle) {
652 s1 = 0.;
653 }
654 }
655
656 if (s1 < s0) {
657 std::swap(s1,s0);
658 }
659
660 s0 = std::max(0.0,s0);
661 s1 = std::max(0.0,s1);
662
663 s0 = std::min(1.0,s0);
664 s1 = std::min(1.0,s1);
665
666 if (fabs(s1-s0) < e) {
667 return false;
668 }
669
670 out0 = n0 + s0 * n0_to_n1;
671 out1 = n0 + s1 * n0_to_n1;
672
673 return true;
674 }
675
676 // ------------------------------------------------------------------------------------------------
677 void FindAdjacentContours(ContourVector::iterator current, const ContourVector& contours)
678 {
679 const IfcFloat sqlen_epsilon = static_cast<IfcFloat>(1e-8);
680 const BoundingBox& bb = (*current).bb;
681
682 // What is to be done here is to populate the skip lists for the contour
683 // and to add necessary padding points when needed.
684 SkipList& skiplist = (*current).skiplist;
685
686 // First step to find possible adjacent contours is to check for adjacent bounding
687 // boxes. If the bounding boxes are not adjacent, the contours lines cannot possibly be.
688 for (ContourVector::const_iterator it = contours.begin(), end = contours.end(); it != end; ++it) {
689 if ((*it).IsInvalid()) {
690 continue;
691 }
692
693 // this left here to make clear we also run on the current contour
694 // to check for overlapping contour segments (which can happen due
695 // to projection artifacts).
696 //if(it == current) {
697 // continue;
698 //}
699
700 const bool is_me = it == current;
701
702 const BoundingBox& ibb = (*it).bb;
703
704 // Assumption: the bounding boxes are pairwise disjoint or identical
705 ai_assert(is_me || !BoundingBoxesOverlapping(bb, ibb));
706
707 if (is_me || BoundingBoxesAdjacent(bb, ibb)) {
708
709 // Now do a each-against-everyone check for intersecting contour
710 // lines. This obviously scales terribly, but in typical real
711 // world Ifc files it will not matter since most windows that
712 // are adjacent to each others are rectangular anyway.
713
714 Contour& ncontour = (*current).contour;
715 const Contour& mcontour = (*it).contour;
716
717 for (size_t n = 0; n < ncontour.size(); ++n) {
718 const IfcVector2& n0 = ncontour[n];
719 const IfcVector2& n1 = ncontour[(n+1) % ncontour.size()];
720
721 for (size_t m = 0, mend = (is_me ? n : mcontour.size()); m < mend; ++m) {
722 ai_assert(&mcontour != &ncontour || m < n);
723
724 const IfcVector2& m0 = mcontour[m];
725 const IfcVector2& m1 = mcontour[(m+1) % mcontour.size()];
726
727 IfcVector2 isect0, isect1;
728 if (IntersectingLineSegments(n0,n1, m0, m1, isect0, isect1)) {
729
730 if ((isect0 - n0).SquareLength() > sqlen_epsilon) {
731 ++n;
732
733 ncontour.insert(ncontour.begin() + n, isect0);
734 skiplist.insert(skiplist.begin() + n, true);
735 }
736 else {
737 skiplist[n] = true;
738 }
739
740 if ((isect1 - n1).SquareLength() > sqlen_epsilon) {
741 ++n;
742
743 ncontour.insert(ncontour.begin() + n, isect1);
744 skiplist.insert(skiplist.begin() + n, false);
745 }
746 }
747 }
748 }
749 }
750 }
751 }
752
753 // ------------------------------------------------------------------------------------------------
754 AI_FORCE_INLINE bool LikelyBorder(const IfcVector2& vdelta)
755 {
756 const IfcFloat dot_point_epsilon = static_cast<IfcFloat>(1e-5);
757 return fabs(vdelta.x * vdelta.y) < dot_point_epsilon;
758 }
759
760 // ------------------------------------------------------------------------------------------------
761 void FindBorderContours(ContourVector::iterator current)
762 {
763 const IfcFloat border_epsilon_upper = static_cast<IfcFloat>(1-1e-4);
764 const IfcFloat border_epsilon_lower = static_cast<IfcFloat>(1e-4);
765
766 bool outer_border = false;
767 bool start_on_outer_border = false;
768
769 SkipList& skiplist = (*current).skiplist;
770 IfcVector2 last_proj_point;
771
772 const Contour::const_iterator cbegin = (*current).contour.begin(), cend = (*current).contour.end();
773
774 for (Contour::const_iterator cit = cbegin; cit != cend; ++cit) {
775 const IfcVector2& proj_point = *cit;
776
777 // Check if this connection is along the outer boundary of the projection
778 // plane. In such a case we better drop it because such 'edges' should
779 // not have any geometry to close them (think of door openings).
780 if (proj_point.x <= border_epsilon_lower || proj_point.x >= border_epsilon_upper ||
781 proj_point.y <= border_epsilon_lower || proj_point.y >= border_epsilon_upper) {
782
783 if (outer_border) {
784 ai_assert(cit != cbegin);
785 if (LikelyBorder(proj_point - last_proj_point)) {
786 skiplist[std::distance(cbegin, cit) - 1] = true;
787 }
788 }
789 else if (cit == cbegin) {
790 start_on_outer_border = true;
791 }
792
793 outer_border = true;
794 }
795 else {
796 outer_border = false;
797 }
798
799 last_proj_point = proj_point;
800 }
801
802 // handle last segment
803 if (outer_border && start_on_outer_border) {
804 const IfcVector2& proj_point = *cbegin;
805 if (LikelyBorder(proj_point - last_proj_point)) {
806 skiplist[skiplist.size()-1] = true;
807 }
808 }
809 }
810
811 // ------------------------------------------------------------------------------------------------
812 AI_FORCE_INLINE bool LikelyDiagonal(IfcVector2 vdelta)
813 {
814 vdelta.x = fabs(vdelta.x);
815 vdelta.y = fabs(vdelta.y);
816 return (fabs(vdelta.x-vdelta.y) < 0.8 * std::max(vdelta.x, vdelta.y));
817 }
818
819 // ------------------------------------------------------------------------------------------------
820 void FindLikelyCrossingLines(ContourVector::iterator current)
821 {
822 SkipList& skiplist = (*current).skiplist;
823 IfcVector2 last_proj_point;
824
825 const Contour::const_iterator cbegin = (*current).contour.begin(), cend = (*current).contour.end();
826 for (Contour::const_iterator cit = cbegin; cit != cend; ++cit) {
827 const IfcVector2& proj_point = *cit;
828
829 if (cit != cbegin) {
830 IfcVector2 vdelta = proj_point - last_proj_point;
831 if (LikelyDiagonal(vdelta)) {
832 skiplist[std::distance(cbegin, cit) - 1] = true;
833 }
834 }
835
836 last_proj_point = proj_point;
837 }
838
839 // handle last segment
840 if (LikelyDiagonal(*cbegin - last_proj_point)) {
841 skiplist[skiplist.size()-1] = true;
842 }
843 }
844
845 // ------------------------------------------------------------------------------------------------
846 size_t CloseWindows(ContourVector& contours,
847 const IfcMatrix4& minv,
848 OpeningRefVector& contours_to_openings,
849 TempMesh& curmesh)
850 {
851 size_t closed = 0;
852 // For all contour points, check if one of the assigned openings does
853 // already have points assigned to it. In this case, assume this is
854 // the other side of the wall and generate connections between
855 // the two holes in order to close the window.
856
857 // All this gets complicated by the fact that contours may pertain to
858 // multiple openings(due to merging of adjacent or overlapping openings).
859 // The code is based on the assumption that this happens symmetrically
860 // on both sides of the wall. If it doesn't (which would be a bug anyway)
861 // wrong geometry may be generated.
862 for (ContourVector::iterator it = contours.begin(), end = contours.end(); it != end; ++it) {
863 if ((*it).IsInvalid()) {
864 continue;
865 }
866 OpeningRefs& refs = contours_to_openings[std::distance(contours.begin(), it)];
867
868 bool has_other_side = false;
869 BOOST_FOREACH(const TempOpening* opening, refs) {
870 if(!opening->wallPoints.empty()) {
871 has_other_side = true;
872 break;
873 }
874 }
875
876 if (has_other_side) {
877
878 ContourRefVector adjacent_contours;
879
880 // prepare a skiplist for this contour. The skiplist is used to
881 // eliminate unwanted contour lines for adjacent windows and
882 // those bordering the outer frame.
883 (*it).PrepareSkiplist();
884
885 FindAdjacentContours(it, contours);
886 FindBorderContours(it);
887
888 // if the window is the result of a finite union or intersection of rectangles,
889 // there shouldn't be any crossing or diagonal lines in it. Such lines would
890 // be artifacts caused by numerical inaccuracies or other bugs in polyclipper
891 // and our own code. Since rectangular openings are by far the most frequent
892 // case, it is worth filtering for this corner case.
893 if((*it).is_rectangular) {
894 FindLikelyCrossingLines(it);
895 }
896
897 ai_assert((*it).skiplist.size() == (*it).contour.size());
898
899 SkipList::const_iterator skipbegin = (*it).skiplist.begin();
900
901 curmesh.verts.reserve(curmesh.verts.size() + (*it).contour.size() * 4);
902 curmesh.vertcnt.reserve(curmesh.vertcnt.size() + (*it).contour.size());
903
904 // XXX this algorithm is really a bit inefficient - both in terms
905 // of constant factor and of asymptotic runtime.
906 std::vector<bool>::const_iterator skipit = skipbegin;
907
908 IfcVector3 start0;
909 IfcVector3 start1;
910
911 IfcVector2 last_proj;
912 //const IfcVector2& first_proj;
913
914 const Contour::const_iterator cbegin = (*it).contour.begin(), cend = (*it).contour.end();
915
916 bool drop_this_edge = false;
917 for (Contour::const_iterator cit = cbegin; cit != cend; ++cit, drop_this_edge = *skipit++) {
918 const IfcVector2& proj_point = *cit;
919
920 // Locate the closest opposite point. This should be a good heuristic to
921 // connect only the points that are really intended to be connected.
922 IfcFloat best = static_cast<IfcFloat>(1e10);
923 IfcVector3 bestv;
924
925 /* debug code to check for unwanted diagonal lines in window contours
926 if (cit != cbegin) {
927 const IfcVector2& vdelta = proj_point - last_proj;
928 if (fabs(vdelta.x-vdelta.y) < 0.5 * std::max(vdelta.x, vdelta.y)) {
929 //continue;
930 }
931 } */
932
933 const IfcVector3& world_point = minv * IfcVector3(proj_point.x,proj_point.y,0.0f);
934
935 last_proj = proj_point;
936
937 BOOST_FOREACH(const TempOpening* opening, refs) {
938 BOOST_FOREACH(const IfcVector3& other, opening->wallPoints) {
939 const IfcFloat sqdist = (world_point - other).SquareLength();
940
941 if (sqdist < best) {
942 // avoid self-connections
943 if(sqdist < 1e-5) {
944 continue;
945 }
946
947 bestv = other;
948 best = sqdist;
949 }
950 }
951 }
952
953 if (drop_this_edge) {
954 curmesh.verts.pop_back();
955 curmesh.verts.pop_back();
956 }
957 else {
958 curmesh.verts.push_back(cit == cbegin ? world_point : bestv);
959 curmesh.verts.push_back(cit == cbegin ? bestv : world_point);
960
961 curmesh.vertcnt.push_back(4);
962 ++closed;
963 }
964
965 if (cit == cbegin) {
966 start0 = world_point;
967 start1 = bestv;
968 continue;
969 }
970
971 curmesh.verts.push_back(world_point);
972 curmesh.verts.push_back(bestv);
973
974 if (cit == cend - 1) {
975 drop_this_edge = *skipit;
976
977 // Check if the final connection (last to first element) is itself
978 // a border edge that needs to be dropped.
979 if (drop_this_edge) {
980 --closed;
981 curmesh.vertcnt.pop_back();
982 curmesh.verts.pop_back();
983 curmesh.verts.pop_back();
984 }
985 else {
986 curmesh.verts.push_back(start1);
987 curmesh.verts.push_back(start0);
988 }
989 }
990 }
991 /*
992 BOOST_FOREACH(TempOpening* opening, refs) {
993 //opening->wallPoints.clear();
994 }*/
995
996 }
997 else {
998
999 const Contour::const_iterator cbegin = (*it).contour.begin(), cend = (*it).contour.end();
1000 BOOST_FOREACH(TempOpening* opening, refs) {
1001 ai_assert(opening->wallPoints.empty());
1002 opening->wallPoints.reserve(opening->wallPoints.capacity() + (*it).contour.size());
1003 for (Contour::const_iterator cit = cbegin; cit != cend; ++cit) {
1004
1005 const IfcVector2& proj_point = *cit;
1006 opening->wallPoints.push_back(minv * IfcVector3(proj_point.x,proj_point.y,0.0f));
1007 }
1008 }
1009 }
1010 }
1011 return closed;
1012 }
1013
1014 // ------------------------------------------------------------------------------------------------
1015 void Quadrify(const std::vector< BoundingBox >& bbs, TempMesh& curmesh)
1016 {
1017 ai_assert(curmesh.IsEmpty());
1018
1019 std::vector<IfcVector2> quads;
1020 quads.reserve(bbs.size()*4);
1021
1022 // sort openings by x and y axis as a preliminiary to the QuadrifyPart() algorithm
1023 XYSortedField field;
1024 for (std::vector<BoundingBox>::const_iterator it = bbs.begin(); it != bbs.end(); ++it) {
1025 if (field.find((*it).first) != field.end()) {
1026 IFCImporter::LogWarn("constraint failure during generation of wall openings, results may be faulty");
1027 }
1028 field[(*it).first] = std::distance(bbs.begin(),it);
1029 }
1030
1031 QuadrifyPart(IfcVector2(),one_vec,field,bbs,quads);
1032 ai_assert(!(quads.size() % 4));
1033
1034 curmesh.vertcnt.resize(quads.size()/4,4);
1035 curmesh.verts.reserve(quads.size());
1036 BOOST_FOREACH(const IfcVector2& v2, quads) {
1037 curmesh.verts.push_back(IfcVector3(v2.x, v2.y, static_cast<IfcFloat>(0.0)));
1038 }
1039 }
1040
1041 // ------------------------------------------------------------------------------------------------
1042 void Quadrify(const ContourVector& contours, TempMesh& curmesh)
1043 {
1044 std::vector<BoundingBox> bbs;
1045 bbs.reserve(contours.size());
1046
1047 BOOST_FOREACH(const ContourVector::value_type& val, contours) {
1048 bbs.push_back(val.bb);
1049 }
1050
1051 Quadrify(bbs, curmesh);
1052 }
1053
1054 // ------------------------------------------------------------------------------------------------
1055 IfcMatrix4 ProjectOntoPlane(std::vector<IfcVector2>& out_contour, const TempMesh& in_mesh,
1056 bool &ok, IfcVector3& nor_out)
1057 {
1058 const std::vector<IfcVector3>& in_verts = in_mesh.verts;
1059 ok = true;
1060
1061 IfcMatrix4 m = IfcMatrix4(DerivePlaneCoordinateSpace(in_mesh, ok, nor_out));
1062 if(!ok) {
1063 return IfcMatrix4();
1064 }
1065 #ifdef ASSIMP_BUILD_DEBUG
1066 const IfcFloat det = m.Determinant();
1067 ai_assert(fabs(det-1) < 1e-5);
1068 #endif
1069
1070 IfcFloat zcoord = 0;
1071 out_contour.reserve(in_verts.size());
1072
1073
1074 IfcVector3 vmin, vmax;
1075 MinMaxChooser<IfcVector3>()(vmin, vmax);
1076
1077 // Project all points into the new coordinate system, collect min/max verts on the way
1078 BOOST_FOREACH(const IfcVector3& x, in_verts) {
1079 const IfcVector3& vv = m * x;
1080 // keep Z offset in the plane coordinate system. Ignoring precision issues
1081 // (which are present, of course), this should be the same value for
1082 // all polygon vertices (assuming the polygon is planar).
1083
1084 // XXX this should be guarded, but we somehow need to pick a suitable
1085 // epsilon
1086 // if(coord != -1.0f) {
1087 // assert(fabs(coord - vv.z) < 1e-3f);
1088 // }
1089 zcoord += vv.z;
1090 vmin = std::min(vv, vmin);
1091 vmax = std::max(vv, vmax);
1092
1093 out_contour.push_back(IfcVector2(vv.x,vv.y));
1094 }
1095
1096 zcoord /= in_verts.size();
1097
1098 // Further improve the projection by mapping the entire working set into
1099 // [0,1] range. This gives us a consistent data range so all epsilons
1100 // used below can be constants.
1101 vmax -= vmin;
1102 BOOST_FOREACH(IfcVector2& vv, out_contour) {
1103 vv.x = (vv.x - vmin.x) / vmax.x;
1104 vv.y = (vv.y - vmin.y) / vmax.y;
1105
1106 // sanity rounding
1107 vv = std::max(vv,IfcVector2());
1108 vv = std::min(vv,one_vec);
1109 }
1110
1111 IfcMatrix4 mult;
1112 mult.a1 = static_cast<IfcFloat>(1.0) / vmax.x;
1113 mult.b2 = static_cast<IfcFloat>(1.0) / vmax.y;
1114
1115 mult.a4 = -vmin.x * mult.a1;
1116 mult.b4 = -vmin.y * mult.b2;
1117 mult.c4 = -zcoord;
1118 m = mult * m;
1119
1120 // debug code to verify correctness
1121 #ifdef ASSIMP_BUILD_DEBUG
1122 std::vector<IfcVector2> out_contour2;
1123 BOOST_FOREACH(const IfcVector3& x, in_verts) {
1124 const IfcVector3& vv = m * x;
1125
1126 out_contour2.push_back(IfcVector2(vv.x,vv.y));
1127 ai_assert(fabs(vv.z) < vmax.z + 1e-8);
1128 }
1129
1130 for(size_t i = 0; i < out_contour.size(); ++i) {
1131 ai_assert((out_contour[i]-out_contour2[i]).SquareLength() < 1e-6);
1132 }
1133 #endif
1134
1135 return m;
1136 }
1137
1138 // ------------------------------------------------------------------------------------------------
1139 bool GenerateOpenings(std::vector<TempOpening>& openings,
1140 const std::vector<IfcVector3>& nors,
1141 TempMesh& curmesh,
1142 bool check_intersection,
1143 bool generate_connection_geometry,
1144 const IfcVector3& wall_extrusion_axis)
1145 {
1146 OpeningRefVector contours_to_openings;
1147
1148 // Try to derive a solid base plane within the current surface for use as
1149 // working coordinate system. Map all vertices onto this plane and
1150 // rescale them to [0,1] range. This normalization means all further
1151 // epsilons need not be scaled.
1152 bool ok = true;
1153
1154 std::vector<IfcVector2> contour_flat;
1155
1156 IfcVector3 nor;
1157 const IfcMatrix4& m = ProjectOntoPlane(contour_flat, curmesh, ok, nor);
1158 if(!ok) {
1159 return false;
1160 }
1161
1162 // Obtain inverse transform for getting back to world space later on
1163 const IfcMatrix4 minv = IfcMatrix4(m).Inverse();
1164
1165 // Compute bounding boxes for all 2D openings in projection space
1166 ContourVector contours;
1167
1168 std::vector<IfcVector2> temp_contour;
1169 std::vector<IfcVector2> temp_contour2;
1170
1171 IfcVector3 wall_extrusion_axis_norm = wall_extrusion_axis;
1172 wall_extrusion_axis_norm.Normalize();
1173
1174 BOOST_FOREACH(TempOpening& opening,openings) {
1175
1176 // extrusionDir may be 0,0,0 on case where the opening mesh is not an
1177 // IfcExtrudedAreaSolid but something else (i.e. a brep)
1178 IfcVector3 norm_extrusion_dir = opening.extrusionDir;
1179 if (norm_extrusion_dir.SquareLength() > 1e-10) {
1180 norm_extrusion_dir.Normalize();
1181 }
1182 else {
1183 norm_extrusion_dir = IfcVector3();
1184 }
1185
1186 TempMesh* profile_data = opening.profileMesh.get();
1187 bool is_2d_source = false;
1188 if (opening.profileMesh2D && norm_extrusion_dir.SquareLength() > 0) {
1189
1190 if(fabs(norm_extrusion_dir * wall_extrusion_axis_norm) < 0.1) {
1191 // horizontal extrusion
1192 if (fabs(norm_extrusion_dir * nor) > 0.9) {
1193 profile_data = opening.profileMesh2D.get();
1194 is_2d_source = true;
1195 }
1196 else {
1197 //continue;
1198 }
1199 }
1200 else {
1201 // vertical extrusion
1202 if (fabs(norm_extrusion_dir * nor) > 0.9) {
1203 continue;
1204 }
1205 continue;
1206 }
1207 }
1208 std::vector<IfcVector3> profile_verts = profile_data->verts;
1209 std::vector<unsigned int> profile_vertcnts = profile_data->vertcnt;
1210 if(profile_verts.size() <= 2) {
1211 continue;
1212 }
1213
1214 // The opening meshes are real 3D meshes so skip over all faces
1215 // clearly facing into the wrong direction. Also, we need to check
1216 // whether the meshes do actually intersect the base surface plane.
1217 // This is done by recording minimum and maximum values for the
1218 // d component of the plane equation for all polys and checking
1219 // against surface d.
1220
1221 // Use the sign of the dot product of the face normal to the plane
1222 // normal to determine to which side of the difference mesh a
1223 // triangle belongs. Get independent bounding boxes and vertex
1224 // sets for both sides and take the better one (we can't just
1225 // take both - this would likely cause major screwup of vertex
1226 // winding, producing errors as late as in CloseWindows()).
1227 IfcFloat dmin, dmax;
1228 MinMaxChooser<IfcFloat>()(dmin,dmax);
1229
1230 temp_contour.clear();
1231 temp_contour2.clear();
1232
1233 IfcVector2 vpmin,vpmax;
1234 MinMaxChooser<IfcVector2>()(vpmin,vpmax);
1235
1236 IfcVector2 vpmin2,vpmax2;
1237 MinMaxChooser<IfcVector2>()(vpmin2,vpmax2);
1238
1239 for (size_t f = 0, vi_total = 0, fend = profile_vertcnts.size(); f < fend; ++f) {
1240
1241 bool side_flag = true;
1242 if (!is_2d_source) {
1243 const IfcVector3& face_nor = ((profile_verts[vi_total+2] - profile_verts[vi_total]) ^
1244 (profile_verts[vi_total+1] - profile_verts[vi_total])).Normalize();
1245
1246 const IfcFloat abs_dot_face_nor = abs(nor * face_nor);
1247 if (abs_dot_face_nor < 0.9) {
1248 vi_total += profile_vertcnts[f];
1249 continue;
1250 }
1251
1252 side_flag = nor * face_nor > 0;
1253 }
1254
1255 for (unsigned int vi = 0, vend = profile_vertcnts[f]; vi < vend; ++vi, ++vi_total) {
1256 const IfcVector3& x = profile_verts[vi_total];
1257
1258 const IfcVector3& v = m * x;
1259 IfcVector2 vv(v.x, v.y);
1260
1261 //if(check_intersection) {
1262 dmin = std::min(dmin, v.z);
1263 dmax = std::max(dmax, v.z);
1264 //}
1265
1266 // sanity rounding
1267 vv = std::max(vv,IfcVector2());
1268 vv = std::min(vv,one_vec);
1269
1270 if(side_flag) {
1271 vpmin = std::min(vpmin,vv);
1272 vpmax = std::max(vpmax,vv);
1273 }
1274 else {
1275 vpmin2 = std::min(vpmin2,vv);
1276 vpmax2 = std::max(vpmax2,vv);
1277 }
1278
1279 std::vector<IfcVector2>& store = side_flag ? temp_contour : temp_contour2;
1280
1281 if (!IsDuplicateVertex(vv, store)) {
1282 store.push_back(vv);
1283 }
1284 }
1285 }
1286
1287 if (temp_contour2.size() > 2) {
1288 ai_assert(!is_2d_source);
1289 const IfcVector2 area = vpmax-vpmin;
1290 const IfcVector2 area2 = vpmax2-vpmin2;
1291 if (temp_contour.size() <= 2 || fabs(area2.x * area2.y) > fabs(area.x * area.y)) {
1292 temp_contour.swap(temp_contour2);
1293
1294 vpmax = vpmax2;
1295 vpmin = vpmin2;
1296 }
1297 }
1298 if(temp_contour.size() <= 2) {
1299 continue;
1300 }
1301
1302 // TODO: This epsilon may be too large
1303 const IfcFloat epsilon = fabs(dmax-dmin) * 0.0001;
1304 if (!is_2d_source && check_intersection && (0 < dmin-epsilon || 0 > dmax+epsilon)) {
1305 continue;
1306 }
1307
1308 BoundingBox bb = BoundingBox(vpmin,vpmax);
1309
1310 // Skip over very small openings - these are likely projection errors
1311 // (i.e. they don't belong to this side of the wall)
1312 if(fabs(vpmax.x - vpmin.x) * fabs(vpmax.y - vpmin.y) < static_cast<IfcFloat>(1e-10)) {
1313 continue;
1314 }
1315 std::vector<TempOpening*> joined_openings(1, &opening);
1316
1317 bool is_rectangle = temp_contour.size() == 4;
1318
1319 // See if this BB intersects or is in close adjacency to any other BB we have so far.
1320 for (ContourVector::iterator it = contours.begin(); it != contours.end(); ) {
1321 const BoundingBox& ibb = (*it).bb;
1322
1323 if (BoundingBoxesOverlapping(ibb, bb)) {
1324
1325 if (!(*it).is_rectangular) {
1326 is_rectangle = false;
1327 }
1328
1329 const std::vector<IfcVector2>& other = (*it).contour;
1330 ClipperLib::ExPolygons poly;
1331
1332 // First check whether subtracting the old contour (to which ibb belongs)
1333 // from the new contour (to which bb belongs) yields an updated bb which
1334 // no longer overlaps ibb
1335 MakeDisjunctWindowContours(other, temp_contour, poly);
1336 if(poly.size() == 1) {
1337
1338 const BoundingBox& newbb = GetBoundingBox(poly[0].outer);
1339 if (!BoundingBoxesOverlapping(ibb, newbb )) {
1340 // Good guy bounding box
1341 bb = newbb ;
1342
1343 ExtractVerticesFromClipper(poly[0].outer, temp_contour, false);
1344 continue;
1345 }
1346 }
1347
1348 // Take these two overlapping contours and try to merge them. If they
1349 // overlap (which should not happen, but in fact happens-in-the-real-
1350 // world [tm] ), resume using a single contour and a single bounding box.
1351 MergeWindowContours(temp_contour, other, poly);
1352
1353 if (poly.size() > 1) {
1354 return TryAddOpenings_Poly2Tri(openings, nors, curmesh);
1355 }
1356 else if (poly.size() == 0) {
1357 IFCImporter::LogWarn("ignoring duplicate opening");
1358 temp_contour.clear();
1359 break;
1360 }
1361 else {
1362 IFCImporter::LogDebug("merging overlapping openings");
1363 ExtractVerticesFromClipper(poly[0].outer, temp_contour, false);
1364
1365 // Generate the union of the bounding boxes
1366 bb.first = std::min(bb.first, ibb.first);
1367 bb.second = std::max(bb.second, ibb.second);
1368
1369 // Update contour-to-opening tables accordingly
1370 if (generate_connection_geometry) {
1371 std::vector<TempOpening*>& t = contours_to_openings[std::distance(contours.begin(),it)];
1372 joined_openings.insert(joined_openings.end(), t.begin(), t.end());
1373
1374 contours_to_openings.erase(contours_to_openings.begin() + std::distance(contours.begin(),it));
1375 }
1376
1377 contours.erase(it);
1378
1379 // Restart from scratch because the newly formed BB might now
1380 // overlap any other BB which its constituent BBs didn't
1381 // previously overlap.
1382 it = contours.begin();
1383 continue;
1384 }
1385 }
1386 ++it;
1387 }
1388
1389 if(!temp_contour.empty()) {
1390 if (generate_connection_geometry) {
1391 contours_to_openings.push_back(std::vector<TempOpening*>(
1392 joined_openings.begin(),
1393 joined_openings.end()));
1394 }
1395
1396 contours.push_back(ProjectedWindowContour(temp_contour, bb, is_rectangle));
1397 }
1398 }
1399
1400 // Check if we still have any openings left - it may well be that this is
1401 // not the cause, for example if all the opening candidates don't intersect
1402 // this surface or point into a direction perpendicular to it.
1403 if (contours.empty()) {
1404 return false;
1405 }
1406
1407 curmesh.Clear();
1408
1409 // Generate a base subdivision into quads to accommodate the given list
1410 // of window bounding boxes.
1411 Quadrify(contours,curmesh);
1412
1413 // Run a sanity cleanup pass on the window contours to avoid generating
1414 // artifacts during the contour generation phase later on.
1415 CleanupWindowContours(contours);
1416
1417 // Previously we reduced all windows to rectangular AABBs in projection
1418 // space, now it is time to fill the gaps between the BBs and the real
1419 // window openings.
1420 InsertWindowContours(contours,openings, curmesh);
1421
1422 // Clip the entire outer contour of our current result against the real
1423 // outer contour of the surface. This is necessary because the result
1424 // of the Quadrify() algorithm is always a square area spanning
1425 // over [0,1]^2 (i.e. entire projection space).
1426 CleanupOuterContour(contour_flat, curmesh);
1427
1428 // Undo the projection and get back to world (or local object) space
1429 BOOST_FOREACH(IfcVector3& v3, curmesh.verts) {
1430 v3 = minv * v3;
1431 }
1432
1433 // Generate window caps to connect the symmetric openings on both sides
1434 // of the wall.
1435 if (generate_connection_geometry) {
1436 CloseWindows(contours, minv, contours_to_openings, curmesh);
1437 }
1438 return true;
1439 }
1440
1441 // ------------------------------------------------------------------------------------------------
1442 bool TryAddOpenings_Poly2Tri(const std::vector<TempOpening>& openings,const std::vector<IfcVector3>& nors,
1443 TempMesh& curmesh)
1444 {
1445 IFCImporter::LogWarn("forced to use poly2tri fallback method to generate wall openings");
1446 std::vector<IfcVector3>& out = curmesh.verts;
1447
1448 bool result = false;
1449
1450 // Try to derive a solid base plane within the current surface for use as
1451 // working coordinate system.
1452 bool ok;
1453 IfcVector3 nor;
1454 const IfcMatrix3& m = DerivePlaneCoordinateSpace(curmesh, ok, nor);
1455 if (!ok) {
1456 return false;
1457 }
1458
1459 const IfcMatrix3 minv = IfcMatrix3(m).Inverse();
1460
1461
1462 IfcFloat coord = -1;
1463
1464 std::vector<IfcVector2> contour_flat;
1465 contour_flat.reserve(out.size());
1466
1467 IfcVector2 vmin, vmax;
1468 MinMaxChooser<IfcVector2>()(vmin, vmax);
1469
1470 // Move all points into the new coordinate system, collecting min/max verts on the way
1471 BOOST_FOREACH(IfcVector3& x, out) {
1472 const IfcVector3 vv = m * x;
1473
1474 // keep Z offset in the plane coordinate system. Ignoring precision issues
1475 // (which are present, of course), this should be the same value for
1476 // all polygon vertices (assuming the polygon is planar).
1477
1478
1479 // XXX this should be guarded, but we somehow need to pick a suitable
1480 // epsilon
1481 // if(coord != -1.0f) {
1482 // assert(fabs(coord - vv.z) < 1e-3f);
1483 // }
1484
1485 coord = vv.z;
1486
1487 vmin = std::min(IfcVector2(vv.x, vv.y), vmin);
1488 vmax = std::max(IfcVector2(vv.x, vv.y), vmax);
1489
1490 contour_flat.push_back(IfcVector2(vv.x,vv.y));
1491 }
1492
1493 // With the current code in DerivePlaneCoordinateSpace,
1494 // vmin,vmax should always be the 0...1 rectangle (+- numeric inaccuracies)
1495 // but here we won't rely on this.
1496
1497 vmax -= vmin;
1498
1499 // If this happens then the projection must have been wrong.
1500 assert(vmax.Length());
1501
1502 ClipperLib::ExPolygons clipped;
1503 ClipperLib::Polygons holes_union;
1504
1505
1506 IfcVector3 wall_extrusion;
1507 bool do_connections = false, first = true;
1508
1509 try {
1510
1511 ClipperLib::Clipper clipper_holes;
1512 size_t c = 0;
1513
1514 BOOST_FOREACH(const TempOpening& t,openings) {
1515 const IfcVector3& outernor = nors[c++];
1516 const IfcFloat dot = nor * outernor;
1517 if (fabs(dot)<1.f-1e-6f) {
1518 continue;
1519 }
1520
1521 const std::vector<IfcVector3>& va = t.profileMesh->verts;
1522 if(va.size() <= 2) {
1523 continue;
1524 }
1525
1526 std::vector<IfcVector2> contour;
1527
1528 BOOST_FOREACH(const IfcVector3& xx, t.profileMesh->verts) {
1529 IfcVector3 vv = m * xx, vv_extr = m * (xx + t.extrusionDir);
1530
1531 const bool is_extruded_side = fabs(vv.z - coord) > fabs(vv_extr.z - coord);
1532 if (first) {
1533 first = false;
1534 if (dot > 0.f) {
1535 do_connections = true;
1536 wall_extrusion = t.extrusionDir;
1537 if (is_extruded_side) {
1538 wall_extrusion = - wall_extrusion;
1539 }
1540 }
1541 }
1542
1543 // XXX should not be necessary - but it is. Why? For precision reasons?
1544 vv = is_extruded_side ? vv_extr : vv;
1545 contour.push_back(IfcVector2(vv.x,vv.y));
1546 }
1547
1548 ClipperLib::Polygon hole;
1549 BOOST_FOREACH(IfcVector2& pip, contour) {
1550 pip.x = (pip.x - vmin.x) / vmax.x;
1551 pip.y = (pip.y - vmin.y) / vmax.y;
1552
1553 hole.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
1554 }
1555
1556 if (!ClipperLib::Orientation(hole)) {
1557 std::reverse(hole.begin(), hole.end());
1558 // assert(ClipperLib::Orientation(hole));
1559 }
1560
1561 /*ClipperLib::Polygons pol_temp(1), pol_temp2(1);
1562 pol_temp[0] = hole;
1563
1564 ClipperLib::OffsetPolygons(pol_temp,pol_temp2,5.0);
1565 hole = pol_temp2[0];*/
1566
1567 clipper_holes.AddPolygon(hole,ClipperLib::ptSubject);
1568 }
1569
1570 clipper_holes.Execute(ClipperLib::ctUnion,holes_union,
1571 ClipperLib::pftNonZero,
1572 ClipperLib::pftNonZero);
1573
1574 if (holes_union.empty()) {
1575 return false;
1576 }
1577
1578 // Now that we have the big union of all holes, subtract it from the outer contour
1579 // to obtain the final polygon to feed into the triangulator.
1580 {
1581 ClipperLib::Polygon poly;
1582 BOOST_FOREACH(IfcVector2& pip, contour_flat) {
1583 pip.x = (pip.x - vmin.x) / vmax.x;
1584 pip.y = (pip.y - vmin.y) / vmax.y;
1585
1586 poly.push_back(ClipperLib::IntPoint( to_int64(pip.x), to_int64(pip.y) ));
1587 }
1588
1589 if (ClipperLib::Orientation(poly)) {
1590 std::reverse(poly.begin(), poly.end());
1591 }
1592 clipper_holes.Clear();
1593 clipper_holes.AddPolygon(poly,ClipperLib::ptSubject);
1594
1595 clipper_holes.AddPolygons(holes_union,ClipperLib::ptClip);
1596 clipper_holes.Execute(ClipperLib::ctDifference,clipped,
1597 ClipperLib::pftNonZero,
1598 ClipperLib::pftNonZero);
1599 }
1600
1601 }
1602 catch (const char* sx) {
1603 IFCImporter::LogError("Ifc: error during polygon clipping, skipping openings for this face: (Clipper: "
1604 + std::string(sx) + ")");
1605
1606 return false;
1607 }
1608
1609 std::vector<IfcVector3> old_verts;
1610 std::vector<unsigned int> old_vertcnt;
1611
1612 old_verts.swap(curmesh.verts);
1613 old_vertcnt.swap(curmesh.vertcnt);
1614
1615
1616 // add connection geometry to close the adjacent 'holes' for the openings
1617 // this should only be done from one side of the wall or the polygons
1618 // would be emitted twice.
1619 if (false && do_connections) {
1620
1621 std::vector<IfcVector3> tmpvec;
1622 BOOST_FOREACH(ClipperLib::Polygon& opening, holes_union) {
1623
1624 assert(ClipperLib::Orientation(opening));
1625
1626 tmpvec.clear();
1627
1628 BOOST_FOREACH(ClipperLib::IntPoint& point, opening) {
1629
1630 tmpvec.push_back( minv * IfcVector3(
1631 vmin.x + from_int64(point.X) * vmax.x,
1632 vmin.y + from_int64(point.Y) * vmax.y,
1633 coord));
1634 }
1635
1636 for(size_t i = 0, size = tmpvec.size(); i < size; ++i) {
1637 const size_t next = (i+1)%size;
1638
1639 curmesh.vertcnt.push_back(4);
1640
1641 const IfcVector3& in_world = tmpvec[i];
1642 const IfcVector3& next_world = tmpvec[next];
1643
1644 // Assumptions: no 'partial' openings, wall thickness roughly the same across the wall
1645 curmesh.verts.push_back(in_world);
1646 curmesh.verts.push_back(in_world+wall_extrusion);
1647 curmesh.verts.push_back(next_world+wall_extrusion);
1648 curmesh.verts.push_back(next_world);
1649 }
1650 }
1651 }
1652
1653 std::vector< std::vector<p2t::Point*> > contours;
1654 BOOST_FOREACH(ClipperLib::ExPolygon& clip, clipped) {
1655
1656 contours.clear();
1657
1658 // Build the outer polygon contour line for feeding into poly2tri
1659 std::vector<p2t::Point*> contour_points;
1660 BOOST_FOREACH(ClipperLib::IntPoint& point, clip.outer) {
1661 contour_points.push_back( new p2t::Point(from_int64(point.X), from_int64(point.Y)) );
1662 }
1663
1664 p2t::CDT* cdt ;
1665 try {
1666 // Note: this relies on custom modifications in poly2tri to raise runtime_error's
1667 // instead if assertions. These failures are not debug only, they can actually
1668 // happen in production use if the input data is broken. An assertion would be
1669 // inappropriate.
1670 cdt = new p2t::CDT(contour_points);
1671 }
1672 catch(const std::exception& e) {
1673 IFCImporter::LogError("Ifc: error during polygon triangulation, skipping some openings: (poly2tri: "
1674 + std::string(e.what()) + ")");
1675 continue;
1676 }
1677
1678
1679 // Build the poly2tri inner contours for all holes we got from ClipperLib
1680 BOOST_FOREACH(ClipperLib::Polygon& opening, clip.holes) {
1681
1682 contours.push_back(std::vector<p2t::Point*>());
1683 std::vector<p2t::Point*>& contour = contours.back();
1684
1685 BOOST_FOREACH(ClipperLib::IntPoint& point, opening) {
1686 contour.push_back( new p2t::Point(from_int64(point.X), from_int64(point.Y)) );
1687 }
1688
1689 cdt->AddHole(contour);
1690 }
1691
1692 try {
1693 // Note: See above
1694 cdt->Triangulate();
1695 }
1696 catch(const std::exception& e) {
1697 IFCImporter::LogError("Ifc: error during polygon triangulation, skipping some openings: (poly2tri: "
1698 + std::string(e.what()) + ")");
1699 continue;
1700 }
1701
1702 const std::vector<p2t::Triangle*>& tris = cdt->GetTriangles();
1703
1704 // Collect the triangles we just produced
1705 BOOST_FOREACH(p2t::Triangle* tri, tris) {
1706 for(int i = 0; i < 3; ++i) {
1707
1708 const IfcVector2& v = IfcVector2(
1709 static_cast<IfcFloat>( tri->GetPoint(i)->x ),
1710 static_cast<IfcFloat>( tri->GetPoint(i)->y )
1711 );
1712
1713 assert(v.x <= 1.0 && v.x >= 0.0 && v.y <= 1.0 && v.y >= 0.0);
1714 const IfcVector3 v3 = minv * IfcVector3(vmin.x + v.x * vmax.x, vmin.y + v.y * vmax.y,coord) ;
1715
1716 curmesh.verts.push_back(v3);
1717 }
1718 curmesh.vertcnt.push_back(3);
1719 }
1720
1721 result = true;
1722 }
1723
1724 if (!result) {
1725 // revert -- it's a shame, but better than nothing
1726 curmesh.verts.insert(curmesh.verts.end(),old_verts.begin(), old_verts.end());
1727 curmesh.vertcnt.insert(curmesh.vertcnt.end(),old_vertcnt.begin(), old_vertcnt.end());
1728
1729 IFCImporter::LogError("Ifc: revert, could not generate openings for this wall");
1730 }
1731
1732 return result;
1733 }
1734
1735
1736 } // ! IFC
1737 } // ! Assimp
1738
1739 #undef to_int64
1740 #undef from_int64
1741 #undef one_vec
1742
1743 #endif
128128
129129 meshout.vertcnt.push_back(segments);
130130 }
131 else if( const IfcIShapeProfileDef* const ishape = def.ToPtr<IfcIShapeProfileDef>()) {
132 // construct simplified IBeam shape
133 const IfcFloat offset = (ishape->OverallWidth - ishape->WebThickness) / 2;
134 const IfcFloat inner_height = ishape->OverallDepth - ishape->FlangeThickness * 2;
135
136 meshout.verts.reserve(12);
137 meshout.verts.push_back(IfcVector3(0,0,0));
138 meshout.verts.push_back(IfcVector3(0,ishape->FlangeThickness,0));
139 meshout.verts.push_back(IfcVector3(offset,ishape->FlangeThickness,0));
140 meshout.verts.push_back(IfcVector3(offset,ishape->FlangeThickness + inner_height,0));
141 meshout.verts.push_back(IfcVector3(0,ishape->FlangeThickness + inner_height,0));
142 meshout.verts.push_back(IfcVector3(0,ishape->OverallDepth,0));
143 meshout.verts.push_back(IfcVector3(ishape->OverallWidth,ishape->OverallDepth,0));
144 meshout.verts.push_back(IfcVector3(ishape->OverallWidth,ishape->FlangeThickness + inner_height,0));
145 meshout.verts.push_back(IfcVector3(offset+ishape->WebThickness,ishape->FlangeThickness + inner_height,0));
146 meshout.verts.push_back(IfcVector3(offset+ishape->WebThickness,ishape->FlangeThickness,0));
147 meshout.verts.push_back(IfcVector3(ishape->OverallWidth,ishape->FlangeThickness,0));
148 meshout.verts.push_back(IfcVector3(ishape->OverallWidth,0,0));
149
150 meshout.vertcnt.push_back(12);
151 }
131152 else {
132153 IFCImporter::LogWarn("skipping unknown IfcParameterizedProfileDef entity, type is " + def.GetClassName());
133154 return;
00 /*
1 Open Asset Import Library (assimp)
1 Open Asset Import Library (ASSIMP)
22 ----------------------------------------------------------------------
33
4 Copyright (c) 2006-2012, assimp team
4 Copyright (c) 2006-2010, ASSIMP Development Team
55 All rights reserved.
66
77 Redistribution and use of this software in source and binary forms,
1717 following disclaimer in the documentation and/or other
1818 materials provided with the distribution.
1919
20 * Neither the name of the assimp team, nor the names of its
20 * Neither the name of the ASSIMP team, nor the names of its
2121 contributors may be used to endorse or promote products
2222 derived from this software without specific prior
23 written permission of the assimp team.
23 written permission of the ASSIMP Development Team.
2424
2525 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2626 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
5151
5252 typedef EXPRESS::ConversionSchema::SchemaEntry SchemaEntry;
5353 const SchemaEntry schema_raw[] = {
54 SchemaEntry("ifcsoundpowermeasure",NULL )
54 SchemaEntry("ifcstairtypeenum",NULL )
55 , SchemaEntry("ifcspacetypeenum",NULL )
56 , SchemaEntry("ifcwalltypeenum",NULL )
57 , SchemaEntry("ifcmonthinyearnumber",NULL )
58 , SchemaEntry("ifcheatfluxdensitymeasure",NULL )
59 , SchemaEntry("ifckinematicviscositymeasure",NULL )
60 , SchemaEntry("ifcsequenceenum",NULL )
61 , SchemaEntry("ifcairtoairheatrecoverytypeenum",NULL )
62 , SchemaEntry("ifcactorselect",NULL )
63 , SchemaEntry("ifctransformertypeenum",NULL )
64 , SchemaEntry("ifcunitaryequipmenttypeenum",NULL )
65 , SchemaEntry("ifcelectricflowstoragedevicetypeenum",NULL )
66 , SchemaEntry("ifcenergysequenceenum",NULL )
67 , SchemaEntry("ifcworkcontroltypeenum",NULL )
68 , SchemaEntry("ifccurvaturemeasure",NULL )
69 , SchemaEntry("ifcparametervalue",NULL )
70 , SchemaEntry("ifcappliedvalueselect",NULL )
71 , SchemaEntry("ifcwarpingconstantmeasure",NULL )
72 , SchemaEntry("ifcarithmeticoperatorenum",NULL )
73 , SchemaEntry("ifclinearforcemeasure",NULL )
74 , SchemaEntry("ifcwindowpanelpositionenum",NULL )
75 , SchemaEntry("ifcflowmetertypeenum",NULL )
76 , SchemaEntry("ifcrampflighttypeenum",NULL )
77 , SchemaEntry("ifcspecularhighlightselect",NULL )
78 , SchemaEntry("ifcactiontypeenum",NULL )
79 , SchemaEntry("ifcgeometricprojectionenum",NULL )
80 , SchemaEntry("ifctimeseriesdatatypeenum",NULL )
81 , SchemaEntry("ifcmagneticfluxmeasure",NULL )
82 , SchemaEntry("ifcobjecttypeenum",NULL )
83 , SchemaEntry("ifcdataoriginenum",NULL )
84 , SchemaEntry("ifcmassdensitymeasure",NULL )
85 , SchemaEntry("ifclightfixturetypeenum",NULL )
86 , SchemaEntry("ifcservicelifetypeenum",NULL )
87 , SchemaEntry("ifcelectricvoltagemeasure",NULL )
88 , SchemaEntry("ifcheatingvaluemeasure",NULL )
89 , SchemaEntry("ifcpresentabletext",NULL )
90 , SchemaEntry("ifcaheadorbehind",NULL )
91 , SchemaEntry("ifcsimplevalue",NULL )
92 , SchemaEntry("ifcsensortypeenum",NULL )
93 , SchemaEntry("ifcderivedunitenum",NULL )
94 , SchemaEntry("ifcsizeselect",NULL )
95 , SchemaEntry("ifctransportelementtypeenum",NULL )
96 , SchemaEntry("ifcinventorytypeenum",NULL )
97 , SchemaEntry("ifctextdecoration",NULL )
98 , SchemaEntry("ifcdirectionsenseenum",NULL )
99 , SchemaEntry("ifcductfittingtypeenum",NULL )
100 , SchemaEntry("ifcdocumentstatusenum",NULL )
101 , SchemaEntry("ifcslabtypeenum",NULL )
102 , SchemaEntry("ifcdoorstyleconstructionenum",NULL )
103 , SchemaEntry("ifcvolumemeasure",NULL )
104 , SchemaEntry("ifcinductancemeasure",NULL )
105 , SchemaEntry("ifccurtainwalltypeenum",NULL )
106 , SchemaEntry("ifcsiunitname",NULL )
107 , SchemaEntry("ifcspecularexponent",NULL )
108 , SchemaEntry("ifcsoundpressuremeasure",NULL )
109 , SchemaEntry("ifcanalysistheorytypeenum",NULL )
110 , SchemaEntry("ifcgasterminaltypeenum",NULL )
111 , SchemaEntry("ifcyearnumber",NULL )
112 , SchemaEntry("ifcmodulusofelasticitymeasure",NULL )
113 , SchemaEntry("ifcchangeactionenum",NULL )
114 , SchemaEntry("ifcdampertypeenum",NULL )
115 , SchemaEntry("ifcevaporatortypeenum",NULL )
116 , SchemaEntry("ifcionconcentrationmeasure",NULL )
117 , SchemaEntry("ifcductsegmenttypeenum",NULL )
118 , SchemaEntry("ifcprotectivedevicetypeenum",NULL )
119 , SchemaEntry("ifcabsorbeddosemeasure",NULL )
120 , SchemaEntry("ifcmassperlengthmeasure",NULL )
121 , SchemaEntry("ifctextfontname",NULL )
122 , SchemaEntry("ifcorientationselect",NULL )
123 , SchemaEntry("ifcilluminancemeasure",NULL )
124 , SchemaEntry("ifcfiresuppressionterminaltypeenum",NULL )
125 , SchemaEntry("ifcfontstyle",NULL )
126 , SchemaEntry("ifcmomentofinertiameasure",NULL )
127 , SchemaEntry("ifcmodulusofsubgradereactionmeasure",NULL )
128 , SchemaEntry("ifccomplexnumber",NULL )
129 , SchemaEntry("ifchumidifiertypeenum",NULL )
130 , SchemaEntry("ifcpresentationstyleselect",NULL )
131 , SchemaEntry("ifcthermaltransmittancemeasure",NULL )
132 , SchemaEntry("ifcribplatedirectionenum",NULL )
133 , SchemaEntry("ifcclassificationnotationselect",NULL )
134 , SchemaEntry("ifcminuteinhour",NULL )
135 , SchemaEntry("ifcinternalorexternalenum",NULL )
136 , SchemaEntry("ifcrotationalfrequencymeasure",NULL )
137 , SchemaEntry("ifcsanitaryterminaltypeenum",NULL )
138 , SchemaEntry("ifcsymbolstyleselect",NULL )
139 , SchemaEntry("ifcelementcompositionenum",NULL )
140 , SchemaEntry("ifctextpath",NULL )
141 , SchemaEntry("ifcpowermeasure",NULL )
142 , SchemaEntry("ifcsurfacestyleelementselect",NULL )
143 , SchemaEntry("ifcresourceconsumptionenum",NULL )
144 , SchemaEntry("ifcelectriccapacitancemeasure",NULL )
145 , SchemaEntry("ifclayersetdirectionenum",NULL )
146 , SchemaEntry("ifcrailingtypeenum",NULL )
147 , SchemaEntry("ifcobjectiveenum",NULL )
148 , SchemaEntry("ifcdocumentselect",NULL )
149 , SchemaEntry("ifcmodulusoflinearsubgradereactionmeasure",NULL )
150 , SchemaEntry("ifcthermaladmittancemeasure",NULL )
151 , SchemaEntry("ifctransitioncode",NULL )
152 , SchemaEntry("ifcconnectiontypeenum",NULL )
153 , SchemaEntry("ifcmonetarymeasure",NULL )
154 , SchemaEntry("ifcstackterminaltypeenum",NULL )
155 , SchemaEntry("ifccolour",NULL )
156 , SchemaEntry("ifctext",NULL )
157 , SchemaEntry("ifccontextdependentmeasure",NULL )
158 , SchemaEntry("ifcthermalconductivitymeasure",NULL )
159 , SchemaEntry("ifcprojectedortruelengthenum",NULL )
160 , SchemaEntry("ifcpressuremeasure",NULL )
161 , SchemaEntry("ifcmoisturediffusivitymeasure",NULL )
162 , SchemaEntry("ifcbooleanoperator",NULL )
163 , SchemaEntry("ifcpropertysourceenum",NULL )
164 , SchemaEntry("ifctimestamp",NULL )
165 , SchemaEntry("ifcmaterialselect",NULL )
166 , SchemaEntry("ifcgloballyuniqueid",NULL )
167 , SchemaEntry("ifcreflectancemethodenum",NULL )
168 , SchemaEntry("ifcvaporpermeabilitymeasure",NULL )
169 , SchemaEntry("ifctimeseriesscheduletypeenum",NULL )
170 , SchemaEntry("ifclinearmomentmeasure",NULL )
171 , SchemaEntry("ifcgeometricsetselect",NULL )
172 , SchemaEntry("ifcsectionmodulusmeasure",NULL )
173 , SchemaEntry("ifcbsplinecurveform",NULL )
174 , SchemaEntry("ifcdimensionextentusage",NULL )
175 , SchemaEntry("ifcthermalexpansioncoefficientmeasure",NULL )
176 , SchemaEntry("ifchourinday",NULL )
177 , SchemaEntry("ifclinearvelocitymeasure",NULL )
178 , SchemaEntry("ifctorquemeasure",NULL )
179 , SchemaEntry("ifctemperaturegradientmeasure",NULL )
180 , SchemaEntry("ifcfillstyleselect",NULL )
181 , SchemaEntry("ifcelectricchargemeasure",NULL )
182 , SchemaEntry("ifcheatexchangertypeenum",NULL )
183 , SchemaEntry("ifcelectriccurrentenum",NULL )
184 , SchemaEntry("ifcdaylightsavinghour",NULL )
185 , SchemaEntry("ifcshell",NULL )
186 , SchemaEntry("ifcdoseequivalentmeasure",NULL )
187 , SchemaEntry("ifcprojectordertypeenum",NULL )
188 , SchemaEntry("ifcderivedmeasurevalue",NULL )
189 , SchemaEntry("ifclightdistributioncurveenum",NULL )
190 , SchemaEntry("ifcwarpingmomentmeasure",NULL )
191 , SchemaEntry("ifcmembertypeenum",NULL )
192 , SchemaEntry("ifcsoundpowermeasure",NULL )
193 , SchemaEntry("ifctextalignment",NULL )
194 , SchemaEntry("ifccurveoredgecurve",NULL )
195 , SchemaEntry("ifcmassflowratemeasure",NULL )
196 , SchemaEntry("ifcisothermalmoisturecapacitymeasure",NULL )
197 , SchemaEntry("ifccsgselect",NULL )
198 , SchemaEntry("ifccoolingtowertypeenum",NULL )
199 , SchemaEntry("ifcmassmeasure",NULL )
200 , SchemaEntry("ifcpileconstructionenum",NULL )
55201 , SchemaEntry("ifcdoorstyleoperationenum",NULL )
56 , SchemaEntry("ifcrotationalfrequencymeasure",NULL )
57 , SchemaEntry("ifccharacterstyleselect",NULL )
202 , SchemaEntry("ifcflowdirectionenum",NULL )
203 , SchemaEntry("ifcthermalloadsourceenum",NULL )
204 , SchemaEntry("ifclengthmeasure",NULL )
205 , SchemaEntry("ifcconstraintenum",NULL )
206 , SchemaEntry("ifcaxis2placement",NULL )
207 , SchemaEntry("ifcloadgrouptypeenum",NULL )
208 , SchemaEntry("ifcvalue",NULL )
209 , SchemaEntry("ifcreinforcingbarsurfaceenum",NULL )
210 , SchemaEntry("ifcprojectorderrecordtypeenum",NULL )
211 , SchemaEntry("ifcdatetimeselect",NULL )
212 , SchemaEntry("ifcstructuralsurfacetypeenum",NULL )
213 , SchemaEntry("ifcpermeablecoveringoperationenum",NULL )
214 , SchemaEntry("ifcfontweight",NULL )
215 , SchemaEntry("ifcphmeasure",NULL )
216 , SchemaEntry("ifcdescriptivemeasure",NULL )
217 , SchemaEntry("ifccurvestylefontselect",NULL )
218 , SchemaEntry("ifcunit",NULL )
219 , SchemaEntry("ifchatchlinedistanceselect",NULL )
220 , SchemaEntry("ifctextstyleselect",NULL )
221 , SchemaEntry("ifcmetricvalueselect",NULL )
222 , SchemaEntry("ifcvectorordirection",NULL )
223 , SchemaEntry("ifcassemblyplaceenum",NULL )
224 , SchemaEntry("ifcairterminaltypeenum",NULL )
225 , SchemaEntry("ifccoveringtypeenum",NULL )
226 , SchemaEntry("ifcplanarforcemeasure",NULL )
227 , SchemaEntry("ifcvalvetypeenum",NULL )
228 , SchemaEntry("ifcalarmtypeenum",NULL )
229 , SchemaEntry("ifcdynamicviscositymeasure",NULL )
230 , SchemaEntry("ifccurrencyenum",NULL )
231 , SchemaEntry("ifcmodulusofrotationalsubgradereactionmeasure",NULL )
232 , SchemaEntry("ifccablecarrierfittingtypeenum",NULL )
233 , SchemaEntry("ifcboolean",NULL )
234 , SchemaEntry("ifcactionsourcetypeenum",NULL )
235 , SchemaEntry("ifcstructuralactivityassignmentselect",NULL )
236 , SchemaEntry("ifcdistributionchamberelementtypeenum",NULL )
237 , SchemaEntry("ifcevaporativecoolertypeenum",NULL )
238 , SchemaEntry("ifcmagneticfluxdensitymeasure",NULL )
239 , SchemaEntry("ifclightdistributiondatasourceselect",NULL )
240 , SchemaEntry("ifctubebundletypeenum",NULL )
241 , SchemaEntry("ifcaccelerationmeasure",NULL )
242 , SchemaEntry("ifcboilertypeenum",NULL )
243 , SchemaEntry("ifcramptypeenum",NULL )
244 , SchemaEntry("ifcluminousintensitydistributionmeasure",NULL )
245 , SchemaEntry("ifctrimmingpreference",NULL )
246 , SchemaEntry("ifcspecificheatcapacitymeasure",NULL )
247 , SchemaEntry("ifcamountofsubstancemeasure",NULL )
248 , SchemaEntry("ifcroleenum",NULL )
249 , SchemaEntry("ifcdocumentconfidentialityenum",NULL )
250 , SchemaEntry("ifcfrequencymeasure",NULL )
251 , SchemaEntry("ifcsectiontypeenum",NULL )
252 , SchemaEntry("ifcelementassemblytypeenum",NULL )
253 , SchemaEntry("ifcfootingtypeenum",NULL )
254 , SchemaEntry("ifclayereditem",NULL )
255 , SchemaEntry("ifccablesegmenttypeenum",NULL )
256 , SchemaEntry("ifcdefinedsymbolselect",NULL )
257 , SchemaEntry("ifcbuildingelementproxytypeenum",NULL )
258 , SchemaEntry("ifcelectricgeneratortypeenum",NULL )
259 , SchemaEntry("ifcrotationalstiffnessmeasure",NULL )
260 , SchemaEntry("ifcspaceheatertypeenum",NULL )
261 , SchemaEntry("ifcareameasure",NULL )
262 , SchemaEntry("ifclabel",NULL )
263 , SchemaEntry("ifccostscheduletypeenum",NULL )
264 , SchemaEntry("ifcswitchingdevicetypeenum",NULL )
58265 , SchemaEntry("ifcelectrictimecontroltypeenum",NULL )
59 , SchemaEntry("ifcairterminaltypeenum",NULL )
60 , SchemaEntry("ifcprojectordertypeenum",NULL )
61 , SchemaEntry("ifcsequenceenum",NULL )
62 , SchemaEntry("ifcspecificheatcapacitymeasure",NULL )
63 , SchemaEntry("ifcheatingvaluemeasure",NULL )
64 , SchemaEntry("ifcribplatedirectionenum",NULL )
65 , SchemaEntry("ifcsensortypeenum",NULL )
266 , SchemaEntry("ifcfiltertypeenum",NULL )
267 , SchemaEntry("ifcpositivelengthmeasure",NULL )
268 , SchemaEntry("ifcnullstyle",NULL )
269 , SchemaEntry("ifcconditioncriterionselect",NULL )
270 , SchemaEntry("ifcshearmodulusmeasure",NULL )
271 , SchemaEntry("ifcnormalisedratiomeasure",NULL )
272 , SchemaEntry("ifcdoorpaneloperationenum",NULL )
273 , SchemaEntry("ifcpointorvertexpoint",NULL )
274 , SchemaEntry("ifcrooftypeenum",NULL )
275 , SchemaEntry("ifccountmeasure",NULL )
276 , SchemaEntry("ifcelectricconductancemeasure",NULL )
277 , SchemaEntry("ifcproceduretypeenum",NULL )
278 , SchemaEntry("ifcflowinstrumenttypeenum",NULL )
279 , SchemaEntry("ifcelectricmotortypeenum",NULL )
280 , SchemaEntry("ifcsurfaceside",NULL )
281 , SchemaEntry("ifcstructuralcurvetypeenum",NULL )
282 , SchemaEntry("ifccondensertypeenum",NULL )
283 , SchemaEntry("ifclinearstiffnessmeasure",NULL )
284 , SchemaEntry("ifcunitenum",NULL )
285 , SchemaEntry("ifcoccupanttypeenum",NULL )
286 , SchemaEntry("ifcthermalloadtypeenum",NULL )
287 , SchemaEntry("ifcreinforcingbarroleenum",NULL )
288 , SchemaEntry("ifcbenchmarkenum",NULL )
289 , SchemaEntry("ifcpositiveplaneanglemeasure",NULL )
290 , SchemaEntry("ifctexttransformation",NULL )
291 , SchemaEntry("ifcdraughtingcalloutelement",NULL )
292 , SchemaEntry("ifcratiomeasure",NULL )
293 , SchemaEntry("ifcsolidanglemeasure",NULL )
294 , SchemaEntry("ifcpipesegmenttypeenum",NULL )
295 , SchemaEntry("ifccablecarriersegmenttypeenum",NULL )
296 , SchemaEntry("ifccolourorfactor",NULL )
297 , SchemaEntry("ifcidentifier",NULL )
298 , SchemaEntry("ifctendontypeenum",NULL )
299 , SchemaEntry("ifccontrollertypeenum",NULL )
300 , SchemaEntry("ifcradioactivitymeasure",NULL )
301 , SchemaEntry("ifctimemeasure",NULL )
302 , SchemaEntry("ifcpumptypeenum",NULL )
66303 , SchemaEntry("ifcelectricheatertypeenum",NULL )
67 , SchemaEntry("ifcobjectiveenum",NULL )
68 , SchemaEntry("ifctextstyleselect",NULL )
69 , SchemaEntry("ifccolumntypeenum",NULL )
70 , SchemaEntry("ifcgasterminaltypeenum",NULL )
71 , SchemaEntry("ifcmassdensitymeasure",NULL )
72 , SchemaEntry("ifcsimplevalue",NULL )
73 , SchemaEntry("ifcelectricconductancemeasure",NULL )
74 , SchemaEntry("ifcbuildingelementproxytypeenum",NULL )
75 , SchemaEntry("ifcjunctionboxtypeenum",NULL )
76 , SchemaEntry("ifcmodulusofelasticitymeasure",NULL )
77 , SchemaEntry("ifcactionsourcetypeenum",NULL )
78 , SchemaEntry("ifcsiunitname",NULL )
79 , SchemaEntry("ifcrotationalmassmeasure",NULL )
80 , SchemaEntry("ifcmembertypeenum",NULL )
81 , SchemaEntry("ifctextdecoration",NULL )
82 , SchemaEntry("ifcpositivelengthmeasure",NULL )
83 , SchemaEntry("ifcamountofsubstancemeasure",NULL )
84 , SchemaEntry("ifcdoorstyleconstructionenum",NULL )
85 , SchemaEntry("ifcangularvelocitymeasure",NULL )
86 , SchemaEntry("ifcdirectionsenseenum",NULL )
87 , SchemaEntry("ifcnullstyle",NULL )
88 , SchemaEntry("ifcmonthinyearnumber",NULL )
89 , SchemaEntry("ifcrampflighttypeenum",NULL )
90 , SchemaEntry("ifcwindowstyleoperationenum",NULL )
91 , SchemaEntry("ifccurvaturemeasure",NULL )
92 , SchemaEntry("ifcbooleanoperator",NULL )
93 , SchemaEntry("ifcductfittingtypeenum",NULL )
94 , SchemaEntry("ifccurrencyenum",NULL )
95 , SchemaEntry("ifcobjecttypeenum",NULL )
96 , SchemaEntry("ifcthermalloadtypeenum",NULL )
97 , SchemaEntry("ifcionconcentrationmeasure",NULL )
98 , SchemaEntry("ifcobjectreferenceselect",NULL )
99 , SchemaEntry("ifcclassificationnotationselect",NULL )
100 , SchemaEntry("ifcbsplinecurveform",NULL )
101 , SchemaEntry("ifcelementcompositionenum",NULL )
102 , SchemaEntry("ifcdraughtingcalloutelement",NULL )
103 , SchemaEntry("ifcfillstyleselect",NULL )
104 , SchemaEntry("ifcheatfluxdensitymeasure",NULL )
105 , SchemaEntry("ifcgeometricprojectionenum",NULL )
106 , SchemaEntry("ifcfontvariant",NULL )
107 , SchemaEntry("ifcthermalresistancemeasure",NULL )
108 , SchemaEntry("ifcreflectancemethodenum",NULL )
109 , SchemaEntry("ifcslabtypeenum",NULL )
110 , SchemaEntry("ifcpositiveratiomeasure",NULL )
111 , SchemaEntry("ifcinternalorexternalenum",NULL )
112 , SchemaEntry("ifcdimensionextentusage",NULL )
113 , SchemaEntry("ifcpipefittingtypeenum",NULL )
114 , SchemaEntry("ifcsanitaryterminaltypeenum",NULL )
115 , SchemaEntry("ifcminuteinhour",NULL )
116 , SchemaEntry("ifcwalltypeenum",NULL )
117 , SchemaEntry("ifcmolecularweightmeasure",NULL )
118 , SchemaEntry("ifcunitaryequipmenttypeenum",NULL )
119 , SchemaEntry("ifcproceduretypeenum",NULL )
120 , SchemaEntry("ifcdistributionchamberelementtypeenum",NULL )
121 , SchemaEntry("ifctextpath",NULL )
122 , SchemaEntry("ifccostscheduletypeenum",NULL )
123 , SchemaEntry("ifcshell",NULL )
124 , SchemaEntry("ifclinearmomentmeasure",NULL )
125 , SchemaEntry("ifcelectriccurrentmeasure",NULL )
126 , SchemaEntry("ifcdaylightsavinghour",NULL )
127 , SchemaEntry("ifcnormalisedratiomeasure",NULL )
128 , SchemaEntry("ifcfantypeenum",NULL )
129 , SchemaEntry("ifccontextdependentmeasure",NULL )
130 , SchemaEntry("ifcaheadorbehind",NULL )
131 , SchemaEntry("ifcfontstyle",NULL )
132 , SchemaEntry("ifccooledbeamtypeenum",NULL )
133 , SchemaEntry("ifcsurfacestyleelementselect",NULL )
134 , SchemaEntry("ifcyearnumber",NULL )
135 , SchemaEntry("ifclabel",NULL )
136 , SchemaEntry("ifctimestamp",NULL )
137 , SchemaEntry("ifcfiresuppressionterminaltypeenum",NULL )
138 , SchemaEntry("ifcdocumentconfidentialityenum",NULL )
139 , SchemaEntry("ifccolourorfactor",NULL )
140 , SchemaEntry("ifcairterminalboxtypeenum",NULL )
141 , SchemaEntry("ifcnumericmeasure",NULL )
142 , SchemaEntry("ifcderivedunitenum",NULL )
143 , SchemaEntry("ifccurveoredgecurve",NULL )
144 , SchemaEntry("ifclightemissionsourceenum",NULL )
145 , SchemaEntry("ifckinematicviscositymeasure",NULL )
146 , SchemaEntry("ifcboxalignment",NULL )
147 , SchemaEntry("ifcdocumentselect",NULL )
148 , SchemaEntry("ifccablecarrierfittingtypeenum",NULL )
149 , SchemaEntry("ifcpumptypeenum",NULL )
150 , SchemaEntry("ifchourinday",NULL )
151 , SchemaEntry("ifcprojectorderrecordtypeenum",NULL )
152 , SchemaEntry("ifcwindowstyleconstructionenum",NULL )
153 , SchemaEntry("ifcpresentationstyleselect",NULL )
154 , SchemaEntry("ifccablesegmenttypeenum",NULL )
155 , SchemaEntry("ifcwasteterminaltypeenum",NULL )
156 , SchemaEntry("ifcisothermalmoisturecapacitymeasure",NULL )
157 , SchemaEntry("ifcidentifier",NULL )
158 , SchemaEntry("ifcradioactivitymeasure",NULL )
159 , SchemaEntry("ifcsymbolstyleselect",NULL )
160 , SchemaEntry("ifcrooftypeenum",NULL )
161 , SchemaEntry("ifcreal",NULL )
162 , SchemaEntry("ifcroleenum",NULL )
163 , SchemaEntry("ifcmeasurevalue",NULL )
164 , SchemaEntry("ifcpiletypeenum",NULL )
165 , SchemaEntry("ifcelectriccurrentenum",NULL )
166 , SchemaEntry("ifctexttransformation",NULL )
167 , SchemaEntry("ifcfiltertypeenum",NULL )
168 , SchemaEntry("ifctransformertypeenum",NULL )
169 , SchemaEntry("ifcsurfaceside",NULL )
170 , SchemaEntry("ifcthermaltransmittancemeasure",NULL )
171 , SchemaEntry("ifctubebundletypeenum",NULL )
172 , SchemaEntry("ifclightfixturetypeenum",NULL )
173 , SchemaEntry("ifcinductancemeasure",NULL )
174 , SchemaEntry("ifcglobalorlocalenum",NULL )
175 , SchemaEntry("ifcoutlettypeenum",NULL )
176 , SchemaEntry("ifcworkcontroltypeenum",NULL )
177 , SchemaEntry("ifcwarpingmomentmeasure",NULL )
178 , SchemaEntry("ifcdynamicviscositymeasure",NULL )
179 , SchemaEntry("ifcenergysequenceenum",NULL )
180 , SchemaEntry("ifcfillareastyletileshapeselect",NULL )
181 , SchemaEntry("ifcpointorvertexpoint",NULL )
182 , SchemaEntry("ifcvibrationisolatortypeenum",NULL )
183 , SchemaEntry("ifctanktypeenum",NULL )
184 , SchemaEntry("ifctimeseriesdatatypeenum",NULL )
185 , SchemaEntry("ifcsurfacetextureenum",NULL )
186 , SchemaEntry("ifcaddresstypeenum",NULL )
187 , SchemaEntry("ifcchillertypeenum",NULL )
188 , SchemaEntry("ifccomplexnumber",NULL )
189 , SchemaEntry("ifclightdistributioncurveenum",NULL )
190 , SchemaEntry("ifcreinforcingbarroleenum",NULL )
191 , SchemaEntry("ifcresourceconsumptionenum",NULL )
192 , SchemaEntry("ifccsgselect",NULL )
193 , SchemaEntry("ifcmodulusoflinearsubgradereactionmeasure",NULL )
194 , SchemaEntry("ifcevaporatortypeenum",NULL )
195 , SchemaEntry("ifctimeseriesscheduletypeenum",NULL )
196 , SchemaEntry("ifcdayinmonthnumber",NULL )
197 , SchemaEntry("ifcelectricmotortypeenum",NULL )
198 , SchemaEntry("ifcthermalconductivitymeasure",NULL )
199 , SchemaEntry("ifcenergymeasure",NULL )
200 , SchemaEntry("ifcrotationalstiffnessmeasure",NULL )
201 , SchemaEntry("ifcderivedmeasurevalue",NULL )
202 , SchemaEntry("ifcdoorpaneloperationenum",NULL )
203 , SchemaEntry("ifccurvestylefontselect",NULL )
204 , SchemaEntry("ifcwindowpaneloperationenum",NULL )
205 , SchemaEntry("ifcdataoriginenum",NULL )
206 , SchemaEntry("ifcstairtypeenum",NULL )
207 , SchemaEntry("ifcrailingtypeenum",NULL )
208 , SchemaEntry("ifcpowermeasure",NULL )
209 , SchemaEntry("ifcstackterminaltypeenum",NULL )
210 , SchemaEntry("ifchatchlinedistanceselect",NULL )
211 , SchemaEntry("ifctrimmingselect",NULL )
212 , SchemaEntry("ifcthermalexpansioncoefficientmeasure",NULL )
213 , SchemaEntry("ifclightdistributiondatasourceselect",NULL )
214 , SchemaEntry("ifctorquemeasure",NULL )
215 , SchemaEntry("ifcmassperlengthmeasure",NULL )
216 , SchemaEntry("ifcvalvetypeenum",NULL )
217 , SchemaEntry("ifcwindowpanelpositionenum",NULL )
218 , SchemaEntry("ifcsurfaceorfacesurface",NULL )
219 , SchemaEntry("ifcpropertysourceenum",NULL )
220 , SchemaEntry("ifccablecarriersegmenttypeenum",NULL )
221 , SchemaEntry("ifccountmeasure",NULL )
222 , SchemaEntry("ifcfontweight",NULL )
223 , SchemaEntry("ifcphysicalorvirtualenum",NULL )
224 , SchemaEntry("ifcspacetypeenum",NULL )
225 , SchemaEntry("ifcvolumetricflowratemeasure",NULL )
226 , SchemaEntry("ifcluminousfluxmeasure",NULL )
227 , SchemaEntry("ifcevaporativecoolertypeenum",NULL )
228 , SchemaEntry("ifclayereditem",NULL )
229 , SchemaEntry("ifcmodulusofsubgradereactionmeasure",NULL )
230 , SchemaEntry("ifcheatexchangertypeenum",NULL )
231 , SchemaEntry("ifcprotectivedevicetypeenum",NULL )
232 , SchemaEntry("ifcdampertypeenum",NULL )
233 , SchemaEntry("ifccontrollertypeenum",NULL )
234 , SchemaEntry("ifcmassflowratemeasure",NULL )
235 , SchemaEntry("ifcassemblyplaceenum",NULL )
236 , SchemaEntry("ifcareameasure",NULL )
237 , SchemaEntry("ifcservicelifefactortypeenum",NULL )
238 , SchemaEntry("ifcvolumemeasure",NULL )
239304 , SchemaEntry("ifcbeamtypeenum",NULL )
240305 , SchemaEntry("ifcstateenum",NULL )
241 , SchemaEntry("ifcspaceheatertypeenum",NULL )
242 , SchemaEntry("ifcsectiontypeenum",NULL )
243 , SchemaEntry("ifcfootingtypeenum",NULL )
244 , SchemaEntry("ifcmonetarymeasure",NULL )
245 , SchemaEntry("ifcloadgrouptypeenum",NULL )
246 , SchemaEntry("ifcelectricgeneratortypeenum",NULL )
247 , SchemaEntry("ifcflowmetertypeenum",NULL )
248 , SchemaEntry("ifcmaterialselect",NULL )
306 , SchemaEntry("ifcsiprefix",NULL )
307 , SchemaEntry("ifcnumericmeasure",NULL )
308 , SchemaEntry("ifcoutlettypeenum",NULL )
309 , SchemaEntry("ifccompoundplaneanglemeasure",NULL )
310 , SchemaEntry("ifcservicelifefactortypeenum",NULL )
311 , SchemaEntry("ifclogicaloperatorenum",NULL )
312 , SchemaEntry("ifcbooleanoperand",NULL )
313 , SchemaEntry("ifcobjectreferenceselect",NULL )
314 , SchemaEntry("ifccooledbeamtypeenum",NULL )
315 , SchemaEntry("ifcductsilencertypeenum",NULL )
316 , SchemaEntry("ifcsectionalareaintegralmeasure",NULL )
317 , SchemaEntry("ifcfontvariant",NULL )
318 , SchemaEntry("ifcvolumetricflowratemeasure",NULL )
319 , SchemaEntry("ifcplatetypeenum",NULL )
320 , SchemaEntry("ifcenvironmentalimpactcategoryenum",NULL )
321 , SchemaEntry("ifcvibrationisolatortypeenum",NULL )
322 , SchemaEntry("ifcthermodynamictemperaturemeasure",NULL )
323 , SchemaEntry("ifcrotationalmassmeasure",NULL )
324 , SchemaEntry("ifcsecondinminute",NULL )
325 , SchemaEntry("ifcdayinmonthnumber",NULL )
326 , SchemaEntry("ifcdimensioncount",NULL )
327 , SchemaEntry("ifcwindowstyleoperationenum",NULL )
328 , SchemaEntry("ifcthermalresistancemeasure",NULL )
329 , SchemaEntry("ifcmeasurevalue",NULL )
330 , SchemaEntry("ifcwindowpaneloperationenum",NULL )
331 , SchemaEntry("ifcchillertypeenum",NULL )
332 , SchemaEntry("ifcpositiveratiomeasure",NULL )
333 , SchemaEntry("ifcinteger",NULL )
334 , SchemaEntry("ifclogical",NULL )
335 , SchemaEntry("ifcjunctionboxtypeenum",NULL )
336 , SchemaEntry("ifcaddresstypeenum",NULL )
337 , SchemaEntry("ifcwasteterminaltypeenum",NULL )
338 , SchemaEntry("ifctrimmingselect",NULL )
339 , SchemaEntry("ifclightemissionsourceenum",NULL )
340 , SchemaEntry("ifcsoundscaleenum",NULL )
341 , SchemaEntry("ifcluminousfluxmeasure",NULL )
342 , SchemaEntry("ifcelectricresistancemeasure",NULL )
343 , SchemaEntry("ifcintegercountratemeasure",NULL )
344 , SchemaEntry("ifcphysicalorvirtualenum",NULL )
345 , SchemaEntry("ifcmolecularweightmeasure",NULL )
346 , SchemaEntry("ifcprofiletypeenum",NULL )
347 , SchemaEntry("ifcboxalignment",NULL )
348 , SchemaEntry("ifcglobalorlocalenum",NULL )
349 , SchemaEntry("ifcspecularroughness",NULL )
350 , SchemaEntry("ifclamptypeenum",NULL )
351 , SchemaEntry("ifcpiletypeenum",NULL )
352 , SchemaEntry("ifcelectriccurrentmeasure",NULL )
353 , SchemaEntry("ifcfantypeenum",NULL )
354 , SchemaEntry("ifcsurfaceorfacesurface",NULL )
355 , SchemaEntry("ifcpipefittingtypeenum",NULL )
356 , SchemaEntry("ifctanktypeenum",NULL )
357 , SchemaEntry("ifccurvefontorscaledcurvefontselect",NULL )
358 , SchemaEntry("ifcwindowstyleconstructionenum",NULL )
359 , SchemaEntry("ifcairterminalboxtypeenum",NULL )
360 , SchemaEntry("ifcstairflighttypeenum",NULL )
361 , SchemaEntry("ifcluminousintensitymeasure",NULL )
362 , SchemaEntry("ifcmotorconnectiontypeenum",NULL )
363 , SchemaEntry("ifcplaneanglemeasure",NULL )
364 , SchemaEntry("ifcactuatortypeenum",NULL )
365 , SchemaEntry("ifccolumntypeenum",NULL )
366 , SchemaEntry("ifctextfontselect",NULL )
367 , SchemaEntry("ifcdoorpanelpositionenum",NULL )
368 , SchemaEntry("ifccoiltypeenum",NULL )
369 , SchemaEntry("ifcangularvelocitymeasure",NULL )
249370 , SchemaEntry("ifcanalysismodeltypeenum",NULL )
250 , SchemaEntry("ifctemperaturegradientmeasure",NULL )
251 , SchemaEntry("ifcmodulusofrotationalsubgradereactionmeasure",NULL )
252 , SchemaEntry("ifccolour",NULL )
253 , SchemaEntry("ifccurtainwalltypeenum",NULL )
254 , SchemaEntry("ifcmetricvalueselect",NULL )
255 , SchemaEntry("ifctextalignment",NULL )
256 , SchemaEntry("ifcdoorpanelpositionenum",NULL )
257 , SchemaEntry("ifcplatetypeenum",NULL )
258 , SchemaEntry("ifcsectionalareaintegralmeasure",NULL )
259 , SchemaEntry("ifcpresentabletext",NULL )
260 , SchemaEntry("ifcvaporpermeabilitymeasure",NULL )
261 , SchemaEntry("ifcstructuralsurfacetypeenum",NULL )
262 , SchemaEntry("ifclinearvelocitymeasure",NULL )
263 , SchemaEntry("ifcintegercountratemeasure",NULL )
264 , SchemaEntry("ifcairtoairheatrecoverytypeenum",NULL )
265 , SchemaEntry("ifcdocumentstatusenum",NULL )
266 , SchemaEntry("ifclengthmeasure",NULL )
267 , SchemaEntry("ifcplanarforcemeasure",NULL )
268 , SchemaEntry("ifcbooleanoperand",NULL )
269 , SchemaEntry("ifcinteger",NULL )
270 , SchemaEntry("ifcramptypeenum",NULL )
271 , SchemaEntry("ifcactorselect",NULL )
272 , SchemaEntry("ifcelectricchargemeasure",NULL )
273 , SchemaEntry("ifcgeometricsetselect",NULL )
274 , SchemaEntry("ifcconnectiontypeenum",NULL )
275 , SchemaEntry("ifcvalue",NULL )
276 , SchemaEntry("ifccoolingtowertypeenum",NULL )
277 , SchemaEntry("ifcplaneanglemeasure",NULL )
278 , SchemaEntry("ifcswitchingdevicetypeenum",NULL )
279 , SchemaEntry("ifcflowdirectionenum",NULL )
280 , SchemaEntry("ifcthermalloadsourceenum",NULL )
281 , SchemaEntry("ifctextfontselect",NULL )
282 , SchemaEntry("ifcspecularhighlightselect",NULL )
283 , SchemaEntry("ifcanalysistheorytypeenum",NULL )
284 , SchemaEntry("ifctextfontname",NULL )
285 , SchemaEntry("ifcelectricvoltagemeasure",NULL )
286 , SchemaEntry("ifctendontypeenum",NULL )
287 , SchemaEntry("ifcsoundpressuremeasure",NULL )
371 , SchemaEntry("ifclibraryselect",NULL )
372 , SchemaEntry("ifcforcemeasure",NULL )
373 , SchemaEntry("ifcfillareastyletileshapeselect",NULL )
374 , SchemaEntry("ifcelectricappliancetypeenum",NULL )
375 , SchemaEntry("ifcsurfacetextureenum",NULL )
376 , SchemaEntry("ifccharacterstyleselect",NULL )
377 , SchemaEntry("ifcenergymeasure",NULL )
378 , SchemaEntry("ifcreal",NULL )
379 , SchemaEntry("ifccompressortypeenum",NULL )
288380 , SchemaEntry("ifcelectricdistributionpointfunctionenum",NULL )
289 , SchemaEntry("ifcspecularroughness",NULL )
290 , SchemaEntry("ifcactiontypeenum",NULL )
291 , SchemaEntry("ifcreinforcingbarsurfaceenum",NULL )
292 , SchemaEntry("ifchumidifiertypeenum",NULL )
293 , SchemaEntry("ifcilluminancemeasure",NULL )
294 , SchemaEntry("ifclibraryselect",NULL )
295 , SchemaEntry("ifctext",NULL )
296 , SchemaEntry("ifclayersetdirectionenum",NULL )
297 , SchemaEntry("ifcboilertypeenum",NULL )
298 , SchemaEntry("ifctimemeasure",NULL )
299 , SchemaEntry("ifcaccelerationmeasure",NULL )
300 , SchemaEntry("ifcelectricflowstoragedevicetypeenum",NULL )
301 , SchemaEntry("ifcluminousintensitymeasure",NULL )
302 , SchemaEntry("ifcdefinedsymbolselect",NULL )
303 , SchemaEntry("ifcunitenum",NULL )
304 , SchemaEntry("ifcinventorytypeenum",NULL )
305 , SchemaEntry("ifcstructuralactivityassignmentselect",NULL )
306 , SchemaEntry("ifcelementassemblytypeenum",NULL )
307 , SchemaEntry("ifcservicelifetypeenum",NULL )
308 , SchemaEntry("ifccoveringtypeenum",NULL )
309 , SchemaEntry("ifcstairflighttypeenum",NULL )
310 , SchemaEntry("ifcsiprefix",NULL )
311 , SchemaEntry("ifcelectriccapacitancemeasure",NULL )
312 , SchemaEntry("ifcflowinstrumenttypeenum",NULL )
313 , SchemaEntry("ifcthermodynamictemperaturemeasure",NULL )
314 , SchemaEntry("ifcgloballyuniqueid",NULL )
315 , SchemaEntry("ifclamptypeenum",NULL )
316 , SchemaEntry("ifcmagneticfluxmeasure",NULL )
317 , SchemaEntry("ifcsolidanglemeasure",NULL )
318 , SchemaEntry("ifcfrequencymeasure",NULL )
319 , SchemaEntry("ifctransportelementtypeenum",NULL )
320 , SchemaEntry("ifcsoundscaleenum",NULL )
321 , SchemaEntry("ifcphmeasure",NULL )
322 , SchemaEntry("ifcactuatortypeenum",NULL )
323 , SchemaEntry("ifcpositiveplaneanglemeasure",NULL )
324 , SchemaEntry("ifcappliedvalueselect",NULL )
325 , SchemaEntry("ifcsecondinminute",NULL )
326 , SchemaEntry("ifcductsegmenttypeenum",NULL )
327 , SchemaEntry("ifcthermaladmittancemeasure",NULL )
328 , SchemaEntry("ifcspecularexponent",NULL )
329 , SchemaEntry("ifcdatetimeselect",NULL )
330 , SchemaEntry("ifctransitioncode",NULL )
331 , SchemaEntry("ifcdimensioncount",NULL )
332 , SchemaEntry("ifclinearstiffnessmeasure",NULL )
333 , SchemaEntry("ifccompoundplaneanglemeasure",NULL )
334 , SchemaEntry("ifcelectricappliancetypeenum",NULL )
335 , SchemaEntry("ifcprofiletypeenum",NULL )
336 , SchemaEntry("ifccurvefontorscaledcurvefontselect",NULL )
337 , SchemaEntry("ifcprojectedortruelengthenum",NULL )
338 , SchemaEntry("ifcabsorbeddosemeasure",NULL )
339 , SchemaEntry("ifcparametervalue",NULL )
340 , SchemaEntry("ifcpileconstructionenum",NULL )
341 , SchemaEntry("ifcmotorconnectiontypeenum",NULL )
342 , SchemaEntry("ifcoccupanttypeenum",NULL )
343 , SchemaEntry("ifcunit",NULL )
344 , SchemaEntry("ifclinearforcemeasure",NULL )
345 , SchemaEntry("ifccondensertypeenum",NULL )
346 , SchemaEntry("ifcdescriptivemeasure",NULL )
347 , SchemaEntry("ifcmomentofinertiameasure",NULL )
348 , SchemaEntry("ifcdoseequivalentmeasure",NULL )
349 , SchemaEntry("ifcorientationselect",NULL )
350 , SchemaEntry("ifclogical",NULL )
351 , SchemaEntry("ifcsizeselect",NULL )
352 , SchemaEntry("ifcenvironmentalimpactcategoryenum",NULL )
353 , SchemaEntry("ifclogicaloperatorenum",NULL )
354 , SchemaEntry("ifccompressortypeenum",NULL )
355 , SchemaEntry("ifcbenchmarkenum",NULL )
356 , SchemaEntry("ifcratiomeasure",NULL )
357 , SchemaEntry("ifcvectorordirection",NULL )
358 , SchemaEntry("ifcconstraintenum",NULL )
359 , SchemaEntry("ifcalarmtypeenum",NULL )
360 , SchemaEntry("ifcluminousintensitydistributionmeasure",NULL )
361 , SchemaEntry("ifcarithmeticoperatorenum",NULL )
362 , SchemaEntry("ifcaxis2placement",NULL )
363 , SchemaEntry("ifcforcemeasure",NULL )
364 , SchemaEntry("ifctrimmingpreference",NULL )
365 , SchemaEntry("ifcelectricresistancemeasure",NULL )
366 , SchemaEntry("ifcwarpingconstantmeasure",NULL )
367 , SchemaEntry("ifcpipesegmenttypeenum",NULL )
368 , SchemaEntry("ifcconditioncriterionselect",NULL )
369 , SchemaEntry("ifcshearmodulusmeasure",NULL )
370 , SchemaEntry("ifcpressuremeasure",NULL )
371 , SchemaEntry("ifcductsilencertypeenum",NULL )
372 , SchemaEntry("ifcboolean",NULL )
373 , SchemaEntry("ifcsectionmodulusmeasure",NULL )
374 , SchemaEntry("ifcchangeactionenum",NULL )
375 , SchemaEntry("ifccoiltypeenum",NULL )
376 , SchemaEntry("ifcmassmeasure",NULL )
377 , SchemaEntry("ifcstructuralcurvetypeenum",NULL )
378 , SchemaEntry("ifcpermeablecoveringoperationenum",NULL )
379 , SchemaEntry("ifcmagneticfluxdensitymeasure",NULL )
380 , SchemaEntry("ifcmoisturediffusivitymeasure",NULL )
381381 , SchemaEntry("ifcroot",&STEP::ObjectHelper<IfcRoot,4>::Construct )
382382 , SchemaEntry("ifcobjectdefinition",&STEP::ObjectHelper<IfcObjectDefinition,0>::Construct )
383383 , SchemaEntry("ifctypeobject",&STEP::ObjectHelper<IfcTypeObject,2>::Construct )
384384 , SchemaEntry("ifctypeproduct",&STEP::ObjectHelper<IfcTypeProduct,2>::Construct )
385385 , SchemaEntry("ifcelementtype",&STEP::ObjectHelper<IfcElementType,1>::Construct )
386 , SchemaEntry("ifcfurnishingelementtype",&STEP::ObjectHelper<IfcFurnishingElementType,0>::Construct )
387 , SchemaEntry("ifcfurnituretype",&STEP::ObjectHelper<IfcFurnitureType,1>::Construct )
386 , SchemaEntry("ifcdistributionelementtype",&STEP::ObjectHelper<IfcDistributionElementType,0>::Construct )
387 , SchemaEntry("ifcdistributionflowelementtype",&STEP::ObjectHelper<IfcDistributionFlowElementType,0>::Construct )
388 , SchemaEntry("ifcflowcontrollertype",&STEP::ObjectHelper<IfcFlowControllerType,0>::Construct )
389 , SchemaEntry("ifcelectrictimecontroltype",&STEP::ObjectHelper<IfcElectricTimeControlType,1>::Construct )
390 , SchemaEntry("ifcrepresentation",&STEP::ObjectHelper<IfcRepresentation,4>::Construct )
391 , SchemaEntry("ifcshapemodel",&STEP::ObjectHelper<IfcShapeModel,0>::Construct )
392 , SchemaEntry("ifctopologyrepresentation",&STEP::ObjectHelper<IfcTopologyRepresentation,0>::Construct )
393 , SchemaEntry("ifcrelationship",&STEP::ObjectHelper<IfcRelationship,0>::Construct )
394 , SchemaEntry("ifcrelconnects",&STEP::ObjectHelper<IfcRelConnects,0>::Construct )
395 , SchemaEntry("ifcrelcoversspaces",&STEP::ObjectHelper<NotImplemented,0>::Construct )
396 , SchemaEntry("ifcflowfittingtype",&STEP::ObjectHelper<IfcFlowFittingType,0>::Construct )
397 , SchemaEntry("ifccablecarrierfittingtype",&STEP::ObjectHelper<IfcCableCarrierFittingType,1>::Construct )
398 , SchemaEntry("ifcstructuralconnectioncondition",&STEP::ObjectHelper<NotImplemented,0>::Construct )
399 , SchemaEntry("ifcslippageconnectioncondition",&STEP::ObjectHelper<NotImplemented,0>::Construct )
400 , SchemaEntry("ifcenergyconversiondevicetype",&STEP::ObjectHelper<IfcEnergyConversionDeviceType,0>::Construct )
401 , SchemaEntry("ifccoiltype",&STEP::ObjectHelper<IfcCoilType,1>::Construct )
388402 , SchemaEntry("ifcobject",&STEP::ObjectHelper<IfcObject,1>::Construct )
389 , SchemaEntry("ifcproduct",&STEP::ObjectHelper<IfcProduct,2>::Construct )
390 , SchemaEntry("ifcgrid",&STEP::ObjectHelper<IfcGrid,3>::Construct )
403 , SchemaEntry("ifccontrol",&STEP::ObjectHelper<IfcControl,0>::Construct )
404 , SchemaEntry("ifcperformancehistory",&STEP::ObjectHelper<IfcPerformanceHistory,1>::Construct )
391405 , SchemaEntry("ifcrepresentationitem",&STEP::ObjectHelper<IfcRepresentationItem,0>::Construct )
392406 , SchemaEntry("ifcgeometricrepresentationitem",&STEP::ObjectHelper<IfcGeometricRepresentationItem,0>::Construct )
393 , SchemaEntry("ifconedirectionrepeatfactor",&STEP::ObjectHelper<IfcOneDirectionRepeatFactor,1>::Construct )
394 , SchemaEntry("ifctwodirectionrepeatfactor",&STEP::ObjectHelper<IfcTwoDirectionRepeatFactor,1>::Construct )
407 , SchemaEntry("ifctextliteral",&STEP::ObjectHelper<IfcTextLiteral,3>::Construct )
408 , SchemaEntry("ifctextliteralwithextent",&STEP::ObjectHelper<IfcTextLiteralWithExtent,2>::Construct )
409 , SchemaEntry("ifcproductrepresentation",&STEP::ObjectHelper<IfcProductRepresentation,3>::Construct )
410 , SchemaEntry("ifcproduct",&STEP::ObjectHelper<IfcProduct,2>::Construct )
395411 , SchemaEntry("ifcelement",&STEP::ObjectHelper<IfcElement,1>::Construct )
396 , SchemaEntry("ifcelementcomponent",&STEP::ObjectHelper<IfcElementComponent,0>::Construct )
397 , SchemaEntry("ifclocaltime",&STEP::ObjectHelper<NotImplemented,0>::Construct )
398 , SchemaEntry("ifcspatialstructureelementtype",&STEP::ObjectHelper<IfcSpatialStructureElementType,0>::Construct )
399 , SchemaEntry("ifccontrol",&STEP::ObjectHelper<IfcControl,0>::Construct )
400 , SchemaEntry("ifcactionrequest",&STEP::ObjectHelper<IfcActionRequest,1>::Construct )
401 , SchemaEntry("ifctexturevertex",&STEP::ObjectHelper<NotImplemented,0>::Construct )
402 , SchemaEntry("ifcpropertydefinition",&STEP::ObjectHelper<NotImplemented,0>::Construct )
403 , SchemaEntry("ifcpropertysetdefinition",&STEP::ObjectHelper<NotImplemented,0>::Construct )
404 , SchemaEntry("ifcfluidflowproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
405 , SchemaEntry("ifcdocumentinformation",&STEP::ObjectHelper<NotImplemented,0>::Construct )
406 , SchemaEntry("ifccalendardate",&STEP::ObjectHelper<NotImplemented,0>::Construct )
407 , SchemaEntry("ifcdistributionelementtype",&STEP::ObjectHelper<IfcDistributionElementType,0>::Construct )
408 , SchemaEntry("ifcdistributionflowelementtype",&STEP::ObjectHelper<IfcDistributionFlowElementType,0>::Construct )
409 , SchemaEntry("ifcenergyconversiondevicetype",&STEP::ObjectHelper<IfcEnergyConversionDeviceType,0>::Construct )
410 , SchemaEntry("ifccooledbeamtype",&STEP::ObjectHelper<IfcCooledBeamType,1>::Construct )
411 , SchemaEntry("ifccsgprimitive3d",&STEP::ObjectHelper<IfcCsgPrimitive3D,1>::Construct )
412 , SchemaEntry("ifcrectangularpyramid",&STEP::ObjectHelper<IfcRectangularPyramid,3>::Construct )
413 , SchemaEntry("ifcstructuralload",&STEP::ObjectHelper<NotImplemented,0>::Construct )
414 , SchemaEntry("ifcstructuralloadstatic",&STEP::ObjectHelper<NotImplemented,0>::Construct )
415 , SchemaEntry("ifcstructuralloadlinearforce",&STEP::ObjectHelper<NotImplemented,0>::Construct )
412 , SchemaEntry("ifcdistributionelement",&STEP::ObjectHelper<IfcDistributionElement,0>::Construct )
413 , SchemaEntry("ifcdistributionflowelement",&STEP::ObjectHelper<IfcDistributionFlowElement,0>::Construct )
414 , SchemaEntry("ifccurve",&STEP::ObjectHelper<IfcCurve,0>::Construct )
415 , SchemaEntry("ifcboundedcurve",&STEP::ObjectHelper<IfcBoundedCurve,0>::Construct )
416 , SchemaEntry("ifccompositecurve",&STEP::ObjectHelper<IfcCompositeCurve,2>::Construct )
417 , SchemaEntry("ifc2dcompositecurve",&STEP::ObjectHelper<Ifc2DCompositeCurve,0>::Construct )
418 , SchemaEntry("ifcboundarycondition",&STEP::ObjectHelper<NotImplemented,0>::Construct )
419 , SchemaEntry("ifcboundaryfacecondition",&STEP::ObjectHelper<NotImplemented,0>::Construct )
420 , SchemaEntry("ifccartesiantransformationoperator",&STEP::ObjectHelper<IfcCartesianTransformationOperator,4>::Construct )
421 , SchemaEntry("ifccartesiantransformationoperator3d",&STEP::ObjectHelper<IfcCartesianTransformationOperator3D,1>::Construct )
422 , SchemaEntry("ifcproperty",&STEP::ObjectHelper<IfcProperty,2>::Construct )
423 , SchemaEntry("ifcsimpleproperty",&STEP::ObjectHelper<IfcSimpleProperty,0>::Construct )
424 , SchemaEntry("ifcpropertyenumeratedvalue",&STEP::ObjectHelper<IfcPropertyEnumeratedValue,2>::Construct )
425 , SchemaEntry("ifcpresentationlayerassignment",&STEP::ObjectHelper<NotImplemented,0>::Construct )
426 , SchemaEntry("ifcpresentationlayerwithstyle",&STEP::ObjectHelper<NotImplemented,0>::Construct )
427 , SchemaEntry("ifcbuildingelementtype",&STEP::ObjectHelper<IfcBuildingElementType,0>::Construct )
428 , SchemaEntry("ifcstairflighttype",&STEP::ObjectHelper<IfcStairFlightType,1>::Construct )
416429 , SchemaEntry("ifcsurface",&STEP::ObjectHelper<IfcSurface,0>::Construct )
417 , SchemaEntry("ifcboundedsurface",&STEP::ObjectHelper<IfcBoundedSurface,0>::Construct )
418 , SchemaEntry("ifcrectangulartrimmedsurface",&STEP::ObjectHelper<IfcRectangularTrimmedSurface,7>::Construct )
419 , SchemaEntry("ifcphysicalquantity",&STEP::ObjectHelper<NotImplemented,0>::Construct )
420 , SchemaEntry("ifcphysicalsimplequantity",&STEP::ObjectHelper<NotImplemented,0>::Construct )
421 , SchemaEntry("ifcquantityvolume",&STEP::ObjectHelper<NotImplemented,0>::Construct )
422 , SchemaEntry("ifcquantityarea",&STEP::ObjectHelper<NotImplemented,0>::Construct )
423 , SchemaEntry("ifcgroup",&STEP::ObjectHelper<IfcGroup,0>::Construct )
424 , SchemaEntry("ifcrelationship",&STEP::ObjectHelper<IfcRelationship,0>::Construct )
425 , SchemaEntry("ifcrelassigns",&STEP::ObjectHelper<NotImplemented,0>::Construct )
426 , SchemaEntry("ifcrelassignstoactor",&STEP::ObjectHelper<NotImplemented,0>::Construct )
427 , SchemaEntry("ifchalfspacesolid",&STEP::ObjectHelper<IfcHalfSpaceSolid,2>::Construct )
428 , SchemaEntry("ifcpolygonalboundedhalfspace",&STEP::ObjectHelper<IfcPolygonalBoundedHalfSpace,2>::Construct )
429 , SchemaEntry("ifcenergyproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
430 , SchemaEntry("ifcairtoairheatrecoverytype",&STEP::ObjectHelper<IfcAirToAirHeatRecoveryType,1>::Construct )
431 , SchemaEntry("ifcflowfittingtype",&STEP::ObjectHelper<IfcFlowFittingType,0>::Construct )
432 , SchemaEntry("ifcpipefittingtype",&STEP::ObjectHelper<IfcPipeFittingType,1>::Construct )
433 , SchemaEntry("ifcrepresentation",&STEP::ObjectHelper<IfcRepresentation,4>::Construct )
434 , SchemaEntry("ifcstylemodel",&STEP::ObjectHelper<IfcStyleModel,0>::Construct )
435 , SchemaEntry("ifcstyledrepresentation",&STEP::ObjectHelper<IfcStyledRepresentation,0>::Construct )
436 , SchemaEntry("ifcrelassignstocontrol",&STEP::ObjectHelper<NotImplemented,0>::Construct )
437 , SchemaEntry("ifcrelassignstoprojectorder",&STEP::ObjectHelper<NotImplemented,0>::Construct )
438 , SchemaEntry("ifcdimensionalexponents",&STEP::ObjectHelper<NotImplemented,0>::Construct )
439 , SchemaEntry("ifcbooleanresult",&STEP::ObjectHelper<IfcBooleanResult,3>::Construct )
440 , SchemaEntry("ifcsoundproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
441 , SchemaEntry("ifcfeatureelement",&STEP::ObjectHelper<IfcFeatureElement,0>::Construct )
442 , SchemaEntry("ifcfeatureelementsubtraction",&STEP::ObjectHelper<IfcFeatureElementSubtraction,0>::Construct )
443 , SchemaEntry("ifcopeningelement",&STEP::ObjectHelper<IfcOpeningElement,0>::Construct )
444 , SchemaEntry("ifcconditioncriterion",&STEP::ObjectHelper<IfcConditionCriterion,2>::Construct )
445 , SchemaEntry("ifcflowterminaltype",&STEP::ObjectHelper<IfcFlowTerminalType,0>::Construct )
446 , SchemaEntry("ifcflowcontrollertype",&STEP::ObjectHelper<IfcFlowControllerType,0>::Construct )
447 , SchemaEntry("ifcswitchingdevicetype",&STEP::ObjectHelper<IfcSwitchingDeviceType,1>::Construct )
448 , SchemaEntry("ifcsystem",&STEP::ObjectHelper<IfcSystem,0>::Construct )
449 , SchemaEntry("ifcelectricalcircuit",&STEP::ObjectHelper<IfcElectricalCircuit,0>::Construct )
450 , SchemaEntry("ifcactorrole",&STEP::ObjectHelper<NotImplemented,0>::Construct )
451 , SchemaEntry("ifcdateandtime",&STEP::ObjectHelper<NotImplemented,0>::Construct )
452 , SchemaEntry("ifcdraughtingcalloutrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
453 , SchemaEntry("ifcdimensioncalloutrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
454 , SchemaEntry("ifcderivedunitelement",&STEP::ObjectHelper<NotImplemented,0>::Construct )
455 , SchemaEntry("ifcexternalreference",&STEP::ObjectHelper<NotImplemented,0>::Construct )
456 , SchemaEntry("ifcclassificationreference",&STEP::ObjectHelper<NotImplemented,0>::Construct )
457 , SchemaEntry("ifcunitaryequipmenttype",&STEP::ObjectHelper<IfcUnitaryEquipmentType,1>::Construct )
458 , SchemaEntry("ifcproperty",&STEP::ObjectHelper<NotImplemented,0>::Construct )
459 , SchemaEntry("ifcport",&STEP::ObjectHelper<IfcPort,0>::Construct )
460 , SchemaEntry("ifcaddress",&STEP::ObjectHelper<NotImplemented,0>::Construct )
461 , SchemaEntry("ifcplacement",&STEP::ObjectHelper<IfcPlacement,1>::Construct )
462 , SchemaEntry("ifcpredefineditem",&STEP::ObjectHelper<NotImplemented,0>::Construct )
463 , SchemaEntry("ifcpredefinedcolour",&STEP::ObjectHelper<NotImplemented,0>::Construct )
464 , SchemaEntry("ifcdraughtingpredefinedcolour",&STEP::ObjectHelper<NotImplemented,0>::Construct )
465 , SchemaEntry("ifcprofiledef",&STEP::ObjectHelper<IfcProfileDef,2>::Construct )
466 , SchemaEntry("ifcarbitraryclosedprofiledef",&STEP::ObjectHelper<IfcArbitraryClosedProfileDef,1>::Construct )
467 , SchemaEntry("ifccurve",&STEP::ObjectHelper<IfcCurve,0>::Construct )
468 , SchemaEntry("ifcconic",&STEP::ObjectHelper<IfcConic,1>::Construct )
469 , SchemaEntry("ifccircle",&STEP::ObjectHelper<IfcCircle,1>::Construct )
470 , SchemaEntry("ifcappliedvalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
471 , SchemaEntry("ifcenvironmentalimpactvalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
472 , SchemaEntry("ifcsimpleproperty",&STEP::ObjectHelper<NotImplemented,0>::Construct )
473 , SchemaEntry("ifcpropertysinglevalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
474430 , SchemaEntry("ifcelementarysurface",&STEP::ObjectHelper<IfcElementarySurface,1>::Construct )
475431 , SchemaEntry("ifcplane",&STEP::ObjectHelper<IfcPlane,0>::Construct )
476 , SchemaEntry("ifcpropertyboundedvalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
477 , SchemaEntry("ifccostschedule",&STEP::ObjectHelper<IfcCostSchedule,8>::Construct )
478 , SchemaEntry("ifcmonetaryunit",&STEP::ObjectHelper<NotImplemented,0>::Construct )
479 , SchemaEntry("ifcconnectiongeometry",&STEP::ObjectHelper<NotImplemented,0>::Construct )
480 , SchemaEntry("ifcconnectioncurvegeometry",&STEP::ObjectHelper<NotImplemented,0>::Construct )
481 , SchemaEntry("ifcrightcircularcone",&STEP::ObjectHelper<IfcRightCircularCone,2>::Construct )
482 , SchemaEntry("ifcelementassembly",&STEP::ObjectHelper<IfcElementAssembly,2>::Construct )
483 , SchemaEntry("ifcbuildingelement",&STEP::ObjectHelper<IfcBuildingElement,0>::Construct )
484 , SchemaEntry("ifcmember",&STEP::ObjectHelper<IfcMember,0>::Construct )
485 , SchemaEntry("ifcpropertydependencyrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
486 , SchemaEntry("ifcbuildingelementproxy",&STEP::ObjectHelper<IfcBuildingElementProxy,1>::Construct )
487 , SchemaEntry("ifcstructuralactivity",&STEP::ObjectHelper<IfcStructuralActivity,2>::Construct )
488 , SchemaEntry("ifcstructuralaction",&STEP::ObjectHelper<IfcStructuralAction,2>::Construct )
489 , SchemaEntry("ifcstructuralplanaraction",&STEP::ObjectHelper<IfcStructuralPlanarAction,1>::Construct )
490 , SchemaEntry("ifctopologicalrepresentationitem",&STEP::ObjectHelper<IfcTopologicalRepresentationItem,0>::Construct )
491 , SchemaEntry("ifcconnectedfaceset",&STEP::ObjectHelper<IfcConnectedFaceSet,1>::Construct )
492 , SchemaEntry("ifcsweptsurface",&STEP::ObjectHelper<IfcSweptSurface,2>::Construct )
493 , SchemaEntry("ifcsurfaceoflinearextrusion",&STEP::ObjectHelper<IfcSurfaceOfLinearExtrusion,2>::Construct )
494 , SchemaEntry("ifcarbitraryprofiledefwithvoids",&STEP::ObjectHelper<IfcArbitraryProfileDefWithVoids,1>::Construct )
495 , SchemaEntry("ifcprocess",&STEP::ObjectHelper<IfcProcess,0>::Construct )
496 , SchemaEntry("ifcprocedure",&STEP::ObjectHelper<IfcProcedure,3>::Construct )
497 , SchemaEntry("ifccurvestylefontpattern",&STEP::ObjectHelper<NotImplemented,0>::Construct )
498 , SchemaEntry("ifcvector",&STEP::ObjectHelper<IfcVector,2>::Construct )
499 , SchemaEntry("ifcfacebound",&STEP::ObjectHelper<IfcFaceBound,2>::Construct )
500 , SchemaEntry("ifcfaceouterbound",&STEP::ObjectHelper<IfcFaceOuterBound,0>::Construct )
501 , SchemaEntry("ifcfeatureelementaddition",&STEP::ObjectHelper<IfcFeatureElementAddition,0>::Construct )
502 , SchemaEntry("ifcnamedunit",&STEP::ObjectHelper<IfcNamedUnit,2>::Construct )
503 , SchemaEntry("ifcconversionbasedunit",&STEP::ObjectHelper<IfcConversionBasedUnit,2>::Construct )
504 , SchemaEntry("ifcstructuralloadsingleforce",&STEP::ObjectHelper<NotImplemented,0>::Construct )
505 , SchemaEntry("ifcheatexchangertype",&STEP::ObjectHelper<IfcHeatExchangerType,1>::Construct )
506 , SchemaEntry("ifcpresentationstyleassignment",&STEP::ObjectHelper<IfcPresentationStyleAssignment,1>::Construct )
507 , SchemaEntry("ifcflowtreatmentdevicetype",&STEP::ObjectHelper<IfcFlowTreatmentDeviceType,0>::Construct )
508 , SchemaEntry("ifcfiltertype",&STEP::ObjectHelper<IfcFilterType,1>::Construct )
509 , SchemaEntry("ifcresource",&STEP::ObjectHelper<IfcResource,0>::Construct )
510 , SchemaEntry("ifcevaporativecoolertype",&STEP::ObjectHelper<IfcEvaporativeCoolerType,1>::Construct )
511 , SchemaEntry("ifctexturecoordinate",&STEP::ObjectHelper<NotImplemented,0>::Construct )
512 , SchemaEntry("ifctexturecoordinategenerator",&STEP::ObjectHelper<NotImplemented,0>::Construct )
513 , SchemaEntry("ifcoffsetcurve2d",&STEP::ObjectHelper<IfcOffsetCurve2D,3>::Construct )
514 , SchemaEntry("ifcedge",&STEP::ObjectHelper<IfcEdge,2>::Construct )
515 , SchemaEntry("ifcsubedge",&STEP::ObjectHelper<IfcSubedge,1>::Construct )
516 , SchemaEntry("ifcproxy",&STEP::ObjectHelper<IfcProxy,2>::Construct )
517 , SchemaEntry("ifcline",&STEP::ObjectHelper<IfcLine,2>::Construct )
518 , SchemaEntry("ifccolumn",&STEP::ObjectHelper<IfcColumn,0>::Construct )
519 , SchemaEntry("ifcclassificationnotationfacet",&STEP::ObjectHelper<NotImplemented,0>::Construct )
520 , SchemaEntry("ifcobjectplacement",&STEP::ObjectHelper<IfcObjectPlacement,0>::Construct )
521 , SchemaEntry("ifcgridplacement",&STEP::ObjectHelper<IfcGridPlacement,2>::Construct )
522 , SchemaEntry("ifcdistributioncontrolelementtype",&STEP::ObjectHelper<IfcDistributionControlElementType,0>::Construct )
523 , SchemaEntry("ifcstructuralloadsingleforcewarping",&STEP::ObjectHelper<NotImplemented,0>::Construct )
524 , SchemaEntry("ifcexternallydefinedtextfont",&STEP::ObjectHelper<NotImplemented,0>::Construct )
525 , SchemaEntry("ifcrelconnects",&STEP::ObjectHelper<IfcRelConnects,0>::Construct )
526 , SchemaEntry("ifcrelconnectselements",&STEP::ObjectHelper<NotImplemented,0>::Construct )
527 , SchemaEntry("ifcrelconnectswithrealizingelements",&STEP::ObjectHelper<NotImplemented,0>::Construct )
528 , SchemaEntry("ifcconstraintclassificationrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
529 , SchemaEntry("ifcannotation",&STEP::ObjectHelper<IfcAnnotation,0>::Construct )
530 , SchemaEntry("ifcplate",&STEP::ObjectHelper<IfcPlate,0>::Construct )
432 , SchemaEntry("ifcbooleanresult",&STEP::ObjectHelper<IfcBooleanResult,3>::Construct )
433 , SchemaEntry("ifcbooleanclippingresult",&STEP::ObjectHelper<IfcBooleanClippingResult,0>::Construct )
531434 , SchemaEntry("ifcsolidmodel",&STEP::ObjectHelper<IfcSolidModel,0>::Construct )
532435 , SchemaEntry("ifcmanifoldsolidbrep",&STEP::ObjectHelper<IfcManifoldSolidBrep,1>::Construct )
533 , SchemaEntry("ifcpredefinedcurvefont",&STEP::ObjectHelper<NotImplemented,0>::Construct )
534 , SchemaEntry("ifcboundarycondition",&STEP::ObjectHelper<NotImplemented,0>::Construct )
535 , SchemaEntry("ifcboundaryfacecondition",&STEP::ObjectHelper<NotImplemented,0>::Construct )
536 , SchemaEntry("ifcflowstoragedevicetype",&STEP::ObjectHelper<IfcFlowStorageDeviceType,0>::Construct )
537 , SchemaEntry("ifcstructuralitem",&STEP::ObjectHelper<IfcStructuralItem,0>::Construct )
538 , SchemaEntry("ifcstructuralmember",&STEP::ObjectHelper<IfcStructuralMember,0>::Construct )
539 , SchemaEntry("ifcstructuralcurvemember",&STEP::ObjectHelper<IfcStructuralCurveMember,1>::Construct )
540 , SchemaEntry("ifcstructuralconnection",&STEP::ObjectHelper<IfcStructuralConnection,1>::Construct )
541 , SchemaEntry("ifcstructuralsurfaceconnection",&STEP::ObjectHelper<IfcStructuralSurfaceConnection,0>::Construct )
542 , SchemaEntry("ifccoiltype",&STEP::ObjectHelper<IfcCoilType,1>::Construct )
543 , SchemaEntry("ifcductfittingtype",&STEP::ObjectHelper<IfcDuctFittingType,1>::Construct )
544 , SchemaEntry("ifcstyleditem",&STEP::ObjectHelper<IfcStyledItem,3>::Construct )
545 , SchemaEntry("ifcannotationoccurrence",&STEP::ObjectHelper<IfcAnnotationOccurrence,0>::Construct )
546 , SchemaEntry("ifcannotationcurveoccurrence",&STEP::ObjectHelper<IfcAnnotationCurveOccurrence,0>::Construct )
547 , SchemaEntry("ifcdimensioncurve",&STEP::ObjectHelper<IfcDimensionCurve,0>::Construct )
548 , SchemaEntry("ifcboundedcurve",&STEP::ObjectHelper<IfcBoundedCurve,0>::Construct )
549 , SchemaEntry("ifcaxis1placement",&STEP::ObjectHelper<IfcAxis1Placement,1>::Construct )
550 , SchemaEntry("ifclightintensitydistribution",&STEP::ObjectHelper<NotImplemented,0>::Construct )
551 , SchemaEntry("ifcpredefinedsymbol",&STEP::ObjectHelper<NotImplemented,0>::Construct )
552 , SchemaEntry("ifcstructuralpointaction",&STEP::ObjectHelper<IfcStructuralPointAction,0>::Construct )
553 , SchemaEntry("ifcspatialstructureelement",&STEP::ObjectHelper<IfcSpatialStructureElement,2>::Construct )
554 , SchemaEntry("ifcspace",&STEP::ObjectHelper<IfcSpace,2>::Construct )
555 , SchemaEntry("ifccontextdependentunit",&STEP::ObjectHelper<IfcContextDependentUnit,1>::Construct )
556 , SchemaEntry("ifcvirtualgridintersection",&STEP::ObjectHelper<NotImplemented,0>::Construct )
557 , SchemaEntry("ifcrelassociates",&STEP::ObjectHelper<NotImplemented,0>::Construct )
558 , SchemaEntry("ifcrelassociatesclassification",&STEP::ObjectHelper<NotImplemented,0>::Construct )
559 , SchemaEntry("ifccoolingtowertype",&STEP::ObjectHelper<IfcCoolingTowerType,1>::Construct )
560 , SchemaEntry("ifcmaterialproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
561 , SchemaEntry("ifcgeneralmaterialproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
562 , SchemaEntry("ifcfacetedbrepwithvoids",&STEP::ObjectHelper<IfcFacetedBrepWithVoids,1>::Construct )
563436 , SchemaEntry("ifcprofileproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
564437 , SchemaEntry("ifcgeneralprofileproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
565438 , SchemaEntry("ifcstructuralprofileproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
566 , SchemaEntry("ifcvalvetype",&STEP::ObjectHelper<IfcValveType,1>::Construct )
567 , SchemaEntry("ifcsystemfurnitureelementtype",&STEP::ObjectHelper<IfcSystemFurnitureElementType,0>::Construct )
568 , SchemaEntry("ifcdiscreteaccessory",&STEP::ObjectHelper<IfcDiscreteAccessory,0>::Construct )
439 , SchemaEntry("ifcflowterminaltype",&STEP::ObjectHelper<IfcFlowTerminalType,0>::Construct )
440 , SchemaEntry("ifcstackterminaltype",&STEP::ObjectHelper<IfcStackTerminalType,1>::Construct )
441 , SchemaEntry("ifcstructuralitem",&STEP::ObjectHelper<IfcStructuralItem,0>::Construct )
442 , SchemaEntry("ifcstructuralconnection",&STEP::ObjectHelper<IfcStructuralConnection,1>::Construct )
443 , SchemaEntry("ifcstructuralcurveconnection",&STEP::ObjectHelper<IfcStructuralCurveConnection,0>::Construct )
444 , SchemaEntry("ifcjunctionboxtype",&STEP::ObjectHelper<IfcJunctionBoxType,1>::Construct )
445 , SchemaEntry("ifcrelassociates",&STEP::ObjectHelper<NotImplemented,0>::Construct )
446 , SchemaEntry("ifcrelassociatesconstraint",&STEP::ObjectHelper<NotImplemented,0>::Construct )
447 , SchemaEntry("ifcpropertydefinition",&STEP::ObjectHelper<IfcPropertyDefinition,0>::Construct )
448 , SchemaEntry("ifcpropertysetdefinition",&STEP::ObjectHelper<IfcPropertySetDefinition,0>::Construct )
449 , SchemaEntry("ifcdoorpanelproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
450 , SchemaEntry("ifcconstraintrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
451 , SchemaEntry("ifcspacethermalloadproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
452 , SchemaEntry("ifclibraryinformation",&STEP::ObjectHelper<NotImplemented,0>::Construct )
453 , SchemaEntry("ifcprocess",&STEP::ObjectHelper<IfcProcess,0>::Construct )
454 , SchemaEntry("ifctask",&STEP::ObjectHelper<IfcTask,5>::Construct )
455 , SchemaEntry("ifcappliedvalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
456 , SchemaEntry("ifcenvironmentalimpactvalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
457 , SchemaEntry("ifcrelfillselement",&STEP::ObjectHelper<IfcRelFillsElement,2>::Construct )
458 , SchemaEntry("ifcprocedure",&STEP::ObjectHelper<IfcProcedure,3>::Construct )
459 , SchemaEntry("ifcstructuralload",&STEP::ObjectHelper<NotImplemented,0>::Construct )
460 , SchemaEntry("ifcstructuralloadstatic",&STEP::ObjectHelper<NotImplemented,0>::Construct )
461 , SchemaEntry("ifcstructuralloadsingledisplacement",&STEP::ObjectHelper<NotImplemented,0>::Construct )
462 , SchemaEntry("ifcproxy",&STEP::ObjectHelper<IfcProxy,2>::Construct )
463 , SchemaEntry("ifccurvestylefont",&STEP::ObjectHelper<NotImplemented,0>::Construct )
464 , SchemaEntry("ifcresource",&STEP::ObjectHelper<IfcResource,0>::Construct )
465 , SchemaEntry("ifcconstructionresource",&STEP::ObjectHelper<IfcConstructionResource,4>::Construct )
466 , SchemaEntry("ifcsubcontractresource",&STEP::ObjectHelper<IfcSubContractResource,2>::Construct )
467 , SchemaEntry("ifccalendardate",&STEP::ObjectHelper<NotImplemented,0>::Construct )
468 , SchemaEntry("ifcdocumentelectronicformat",&STEP::ObjectHelper<NotImplemented,0>::Construct )
469 , SchemaEntry("ifcrelcontainedinspatialstructure",&STEP::ObjectHelper<IfcRelContainedInSpatialStructure,2>::Construct )
470 , SchemaEntry("ifcmaterialproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
471 , SchemaEntry("ifcproductsofcombustionproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
472 , SchemaEntry("ifctopologicalrepresentationitem",&STEP::ObjectHelper<IfcTopologicalRepresentationItem,0>::Construct )
473 , SchemaEntry("ifcedge",&STEP::ObjectHelper<IfcEdge,2>::Construct )
474 , SchemaEntry("ifcedgecurve",&STEP::ObjectHelper<IfcEdgeCurve,2>::Construct )
475 , SchemaEntry("ifcplatetype",&STEP::ObjectHelper<IfcPlateType,1>::Construct )
476 , SchemaEntry("ifcobjectplacement",&STEP::ObjectHelper<IfcObjectPlacement,0>::Construct )
477 , SchemaEntry("ifcgridplacement",&STEP::ObjectHelper<IfcGridPlacement,2>::Construct )
478 , SchemaEntry("ifcfiresuppressionterminaltype",&STEP::ObjectHelper<IfcFireSuppressionTerminalType,1>::Construct )
479 , SchemaEntry("ifcmechanicalmaterialproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
480 , SchemaEntry("ifcflowstoragedevice",&STEP::ObjectHelper<IfcFlowStorageDevice,0>::Construct )
569481 , SchemaEntry("ifcperson",&STEP::ObjectHelper<NotImplemented,0>::Construct )
570 , SchemaEntry("ifcbuildingelementtype",&STEP::ObjectHelper<IfcBuildingElementType,0>::Construct )
571 , SchemaEntry("ifcrailingtype",&STEP::ObjectHelper<IfcRailingType,1>::Construct )
572 , SchemaEntry("ifcgasterminaltype",&STEP::ObjectHelper<IfcGasTerminalType,1>::Construct )
573 , SchemaEntry("ifctimeseries",&STEP::ObjectHelper<NotImplemented,0>::Construct )
574 , SchemaEntry("ifcirregulartimeseries",&STEP::ObjectHelper<NotImplemented,0>::Construct )
575 , SchemaEntry("ifcspaceprogram",&STEP::ObjectHelper<IfcSpaceProgram,5>::Construct )
576 , SchemaEntry("ifccovering",&STEP::ObjectHelper<IfcCovering,1>::Construct )
577 , SchemaEntry("ifcshapeaspect",&STEP::ObjectHelper<NotImplemented,0>::Construct )
482 , SchemaEntry("ifcsweptsurface",&STEP::ObjectHelper<IfcSweptSurface,2>::Construct )
483 , SchemaEntry("ifcsurfaceofrevolution",&STEP::ObjectHelper<IfcSurfaceOfRevolution,1>::Construct )
484 , SchemaEntry("ifcorientededge",&STEP::ObjectHelper<IfcOrientedEdge,2>::Construct )
485 , SchemaEntry("ifcownerhistory",&STEP::ObjectHelper<NotImplemented,0>::Construct )
486 , SchemaEntry("ifcrelassigns",&STEP::ObjectHelper<NotImplemented,0>::Construct )
487 , SchemaEntry("ifcrelassignstoactor",&STEP::ObjectHelper<NotImplemented,0>::Construct )
488 , SchemaEntry("ifcdirection",&STEP::ObjectHelper<IfcDirection,1>::Construct )
489 , SchemaEntry("ifcreinforcementbarproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
490 , SchemaEntry("ifcprofiledef",&STEP::ObjectHelper<IfcProfileDef,2>::Construct )
491 , SchemaEntry("ifcparameterizedprofiledef",&STEP::ObjectHelper<IfcParameterizedProfileDef,1>::Construct )
492 , SchemaEntry("ifccshapeprofiledef",&STEP::ObjectHelper<IfcCShapeProfileDef,6>::Construct )
493 , SchemaEntry("ifcfeatureelement",&STEP::ObjectHelper<IfcFeatureElement,0>::Construct )
494 , SchemaEntry("ifcfeatureelementsubtraction",&STEP::ObjectHelper<IfcFeatureElementSubtraction,0>::Construct )
495 , SchemaEntry("ifcedgefeature",&STEP::ObjectHelper<IfcEdgeFeature,1>::Construct )
496 , SchemaEntry("ifcchamferedgefeature",&STEP::ObjectHelper<IfcChamferEdgeFeature,2>::Construct )
497 , SchemaEntry("ifcbuildingelement",&STEP::ObjectHelper<IfcBuildingElement,0>::Construct )
498 , SchemaEntry("ifccolumn",&STEP::ObjectHelper<IfcColumn,0>::Construct )
499 , SchemaEntry("ifcpropertyreferencevalue",&STEP::ObjectHelper<IfcPropertyReferenceValue,2>::Construct )
500 , SchemaEntry("ifcmaterialclassificationrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
501 , SchemaEntry("ifcelectricmotortype",&STEP::ObjectHelper<IfcElectricMotorType,1>::Construct )
502 , SchemaEntry("ifcspatialstructureelementtype",&STEP::ObjectHelper<IfcSpatialStructureElementType,0>::Construct )
503 , SchemaEntry("ifcspacetype",&STEP::ObjectHelper<IfcSpaceType,1>::Construct )
504 , SchemaEntry("ifcexternalreference",&STEP::ObjectHelper<NotImplemented,0>::Construct )
505 , SchemaEntry("ifcexternallydefinedhatchstyle",&STEP::ObjectHelper<NotImplemented,0>::Construct )
506 , SchemaEntry("ifccolumntype",&STEP::ObjectHelper<IfcColumnType,1>::Construct )
507 , SchemaEntry("ifccranerailashapeprofiledef",&STEP::ObjectHelper<IfcCraneRailAShapeProfileDef,12>::Construct )
508 , SchemaEntry("ifccondensertype",&STEP::ObjectHelper<IfcCondenserType,1>::Construct )
509 , SchemaEntry("ifcrelconnectselements",&STEP::ObjectHelper<NotImplemented,0>::Construct )
510 , SchemaEntry("ifcrelconnectswithrealizingelements",&STEP::ObjectHelper<NotImplemented,0>::Construct )
511 , SchemaEntry("ifccircleprofiledef",&STEP::ObjectHelper<IfcCircleProfileDef,1>::Construct )
512 , SchemaEntry("ifccirclehollowprofiledef",&STEP::ObjectHelper<IfcCircleHollowProfileDef,1>::Construct )
513 , SchemaEntry("ifcorganizationrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
514 , SchemaEntry("ifcplacement",&STEP::ObjectHelper<IfcPlacement,1>::Construct )
515 , SchemaEntry("ifcaxis2placement3d",&STEP::ObjectHelper<IfcAxis2Placement3D,2>::Construct )
578516 , SchemaEntry("ifcpresentationstyle",&STEP::ObjectHelper<IfcPresentationStyle,1>::Construct )
579 , SchemaEntry("ifcclassificationitemrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
580 , SchemaEntry("ifcelectricheatertype",&STEP::ObjectHelper<IfcElectricHeaterType,1>::Construct )
581 , SchemaEntry("ifcbuildingstorey",&STEP::ObjectHelper<IfcBuildingStorey,1>::Construct )
582 , SchemaEntry("ifcvertex",&STEP::ObjectHelper<IfcVertex,0>::Construct )
583 , SchemaEntry("ifcvertexpoint",&STEP::ObjectHelper<IfcVertexPoint,1>::Construct )
517 , SchemaEntry("ifccurvestyle",&STEP::ObjectHelper<NotImplemented,0>::Construct )
518 , SchemaEntry("ifcequipmentelement",&STEP::ObjectHelper<IfcEquipmentElement,0>::Construct )
519 , SchemaEntry("ifccompositecurvesegment",&STEP::ObjectHelper<IfcCompositeCurveSegment,3>::Construct )
520 , SchemaEntry("ifcrectangleprofiledef",&STEP::ObjectHelper<IfcRectangleProfileDef,2>::Construct )
521 , SchemaEntry("ifcphysicalquantity",&STEP::ObjectHelper<NotImplemented,0>::Construct )
522 , SchemaEntry("ifcphysicalcomplexquantity",&STEP::ObjectHelper<NotImplemented,0>::Construct )
523 , SchemaEntry("ifcrelassociateslibrary",&STEP::ObjectHelper<NotImplemented,0>::Construct )
524 , SchemaEntry("ifcrelsequence",&STEP::ObjectHelper<NotImplemented,0>::Construct )
525 , SchemaEntry("ifcbuildingelementproxy",&STEP::ObjectHelper<IfcBuildingElementProxy,1>::Construct )
526 , SchemaEntry("ifcdistributioncontrolelementtype",&STEP::ObjectHelper<IfcDistributionControlElementType,0>::Construct )
584527 , SchemaEntry("ifcflowinstrumenttype",&STEP::ObjectHelper<IfcFlowInstrumentType,1>::Construct )
585 , SchemaEntry("ifcparameterizedprofiledef",&STEP::ObjectHelper<IfcParameterizedProfileDef,1>::Construct )
586 , SchemaEntry("ifcushapeprofiledef",&STEP::ObjectHelper<IfcUShapeProfileDef,8>::Construct )
587 , SchemaEntry("ifcramp",&STEP::ObjectHelper<IfcRamp,1>::Construct )
588 , SchemaEntry("ifcfillareastyle",&STEP::ObjectHelper<NotImplemented,0>::Construct )
589 , SchemaEntry("ifccompositecurve",&STEP::ObjectHelper<IfcCompositeCurve,2>::Construct )
590 , SchemaEntry("ifcrelservicesbuildings",&STEP::ObjectHelper<NotImplemented,0>::Construct )
591 , SchemaEntry("ifcstructuralcurvemembervarying",&STEP::ObjectHelper<IfcStructuralCurveMemberVarying,0>::Construct )
592 , SchemaEntry("ifcrelreferencedinspatialstructure",&STEP::ObjectHelper<NotImplemented,0>::Construct )
593 , SchemaEntry("ifcrampflighttype",&STEP::ObjectHelper<IfcRampFlightType,1>::Construct )
594528 , SchemaEntry("ifcdraughtingcallout",&STEP::ObjectHelper<IfcDraughtingCallout,1>::Construct )
595529 , SchemaEntry("ifcdimensioncurvedirectedcallout",&STEP::ObjectHelper<IfcDimensionCurveDirectedCallout,0>::Construct )
530 , SchemaEntry("ifclineardimension",&STEP::ObjectHelper<IfcLinearDimension,0>::Construct )
531 , SchemaEntry("ifcelementassembly",&STEP::ObjectHelper<IfcElementAssembly,2>::Construct )
532 , SchemaEntry("ifcdraughtingcalloutrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
533 , SchemaEntry("ifccsgprimitive3d",&STEP::ObjectHelper<IfcCsgPrimitive3D,1>::Construct )
534 , SchemaEntry("ifcrightcircularcone",&STEP::ObjectHelper<IfcRightCircularCone,2>::Construct )
535 , SchemaEntry("ifcexternallydefinedsurfacestyle",&STEP::ObjectHelper<NotImplemented,0>::Construct )
536 , SchemaEntry("ifcprojectorder",&STEP::ObjectHelper<IfcProjectOrder,3>::Construct )
537 , SchemaEntry("ifcpropertyconstraintrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
538 , SchemaEntry("ifclshapeprofiledef",&STEP::ObjectHelper<IfcLShapeProfileDef,8>::Construct )
539 , SchemaEntry("ifcangulardimension",&STEP::ObjectHelper<IfcAngularDimension,0>::Construct )
540 , SchemaEntry("ifctextstylefordefinedfont",&STEP::ObjectHelper<NotImplemented,0>::Construct )
541 , SchemaEntry("ifclocalplacement",&STEP::ObjectHelper<IfcLocalPlacement,2>::Construct )
542 , SchemaEntry("ifcsweptareasolid",&STEP::ObjectHelper<IfcSweptAreaSolid,2>::Construct )
543 , SchemaEntry("ifcrevolvedareasolid",&STEP::ObjectHelper<IfcRevolvedAreaSolid,2>::Construct )
544 , SchemaEntry("ifcstructuralsurfaceconnection",&STEP::ObjectHelper<IfcStructuralSurfaceConnection,0>::Construct )
596545 , SchemaEntry("ifcradiusdimension",&STEP::ObjectHelper<IfcRadiusDimension,0>::Construct )
597 , SchemaEntry("ifcedgefeature",&STEP::ObjectHelper<IfcEdgeFeature,1>::Construct )
598 , SchemaEntry("ifcsweptareasolid",&STEP::ObjectHelper<IfcSweptAreaSolid,2>::Construct )
599 , SchemaEntry("ifcextrudedareasolid",&STEP::ObjectHelper<IfcExtrudedAreaSolid,2>::Construct )
600 , SchemaEntry("ifcquantitycount",&STEP::ObjectHelper<NotImplemented,0>::Construct )
601 , SchemaEntry("ifcannotationtextoccurrence",&STEP::ObjectHelper<IfcAnnotationTextOccurrence,0>::Construct )
602 , SchemaEntry("ifcreferencesvaluedocument",&STEP::ObjectHelper<NotImplemented,0>::Construct )
546 , SchemaEntry("ifcsweptdisksolid",&STEP::ObjectHelper<IfcSweptDiskSolid,5>::Construct )
547 , SchemaEntry("ifchalfspacesolid",&STEP::ObjectHelper<IfcHalfSpaceSolid,2>::Construct )
548 , SchemaEntry("ifcpolygonalboundedhalfspace",&STEP::ObjectHelper<IfcPolygonalBoundedHalfSpace,2>::Construct )
549 , SchemaEntry("ifctimeseriesschedule",&STEP::ObjectHelper<IfcTimeSeriesSchedule,3>::Construct )
550 , SchemaEntry("ifcdimensioncalloutrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
551 , SchemaEntry("ifccooledbeamtype",&STEP::ObjectHelper<IfcCooledBeamType,1>::Construct )
552 , SchemaEntry("ifcproject",&STEP::ObjectHelper<IfcProject,4>::Construct )
553 , SchemaEntry("ifcapprovalrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
554 , SchemaEntry("ifcevaporatortype",&STEP::ObjectHelper<IfcEvaporatorType,1>::Construct )
555 , SchemaEntry("ifclaborresource",&STEP::ObjectHelper<IfcLaborResource,1>::Construct )
556 , SchemaEntry("ifcstructuralloadsingledisplacementdistortion",&STEP::ObjectHelper<NotImplemented,0>::Construct )
557 , SchemaEntry("ifcpropertyboundedvalue",&STEP::ObjectHelper<IfcPropertyBoundedValue,3>::Construct )
558 , SchemaEntry("ifcrampflighttype",&STEP::ObjectHelper<IfcRampFlightType,1>::Construct )
559 , SchemaEntry("ifcmember",&STEP::ObjectHelper<IfcMember,0>::Construct )
560 , SchemaEntry("ifcstructuralloadplanarforce",&STEP::ObjectHelper<NotImplemented,0>::Construct )
561 , SchemaEntry("ifctubebundletype",&STEP::ObjectHelper<IfcTubeBundleType,1>::Construct )
562 , SchemaEntry("ifcvalvetype",&STEP::ObjectHelper<IfcValveType,1>::Construct )
563 , SchemaEntry("ifcexternallydefinedtextfont",&STEP::ObjectHelper<NotImplemented,0>::Construct )
564 , SchemaEntry("ifctrimmedcurve",&STEP::ObjectHelper<IfcTrimmedCurve,5>::Construct )
565 , SchemaEntry("ifcreldefines",&STEP::ObjectHelper<IfcRelDefines,1>::Construct )
566 , SchemaEntry("ifcreldefinesbyproperties",&STEP::ObjectHelper<IfcRelDefinesByProperties,1>::Construct )
567 , SchemaEntry("ifcrelassignstocontrol",&STEP::ObjectHelper<NotImplemented,0>::Construct )
568 , SchemaEntry("ifcactor",&STEP::ObjectHelper<IfcActor,1>::Construct )
569 , SchemaEntry("ifcoccupant",&STEP::ObjectHelper<IfcOccupant,1>::Construct )
570 , SchemaEntry("ifchumidifiertype",&STEP::ObjectHelper<IfcHumidifierType,1>::Construct )
571 , SchemaEntry("ifcarbitraryopenprofiledef",&STEP::ObjectHelper<IfcArbitraryOpenProfileDef,1>::Construct )
572 , SchemaEntry("ifcrelassignstoprojectorder",&STEP::ObjectHelper<NotImplemented,0>::Construct )
573 , SchemaEntry("ifcpermit",&STEP::ObjectHelper<IfcPermit,1>::Construct )
574 , SchemaEntry("ifcoffsetcurve3d",&STEP::ObjectHelper<IfcOffsetCurve3D,4>::Construct )
575 , SchemaEntry("ifclightsource",&STEP::ObjectHelper<IfcLightSource,4>::Construct )
576 , SchemaEntry("ifclightsourcepositional",&STEP::ObjectHelper<IfcLightSourcePositional,5>::Construct )
577 , SchemaEntry("ifcsurfacetexture",&STEP::ObjectHelper<NotImplemented,0>::Construct )
578 , SchemaEntry("ifcblobtexture",&STEP::ObjectHelper<NotImplemented,0>::Construct )
579 , SchemaEntry("ifccompositeprofiledef",&STEP::ObjectHelper<IfcCompositeProfileDef,2>::Construct )
580 , SchemaEntry("ifcdocumentinformation",&STEP::ObjectHelper<NotImplemented,0>::Construct )
581 , SchemaEntry("ifcsurfacestylelighting",&STEP::ObjectHelper<NotImplemented,0>::Construct )
582 , SchemaEntry("ifcphysicalsimplequantity",&STEP::ObjectHelper<NotImplemented,0>::Construct )
583 , SchemaEntry("ifcquantityarea",&STEP::ObjectHelper<NotImplemented,0>::Construct )
584 , SchemaEntry("ifctimeseries",&STEP::ObjectHelper<NotImplemented,0>::Construct )
585 , SchemaEntry("ifcclassificationnotation",&STEP::ObjectHelper<NotImplemented,0>::Construct )
586 , SchemaEntry("ifcramp",&STEP::ObjectHelper<IfcRamp,1>::Construct )
587 , SchemaEntry("ifcpredefineditem",&STEP::ObjectHelper<NotImplemented,0>::Construct )
588 , SchemaEntry("ifcpredefinedcurvefont",&STEP::ObjectHelper<NotImplemented,0>::Construct )
589 , SchemaEntry("ifcpredefinedcolour",&STEP::ObjectHelper<NotImplemented,0>::Construct )
590 , SchemaEntry("ifccurrencyrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
591 , SchemaEntry("ifcflowmovingdevice",&STEP::ObjectHelper<IfcFlowMovingDevice,0>::Construct )
592 , SchemaEntry("ifcspaceheatertype",&STEP::ObjectHelper<IfcSpaceHeaterType,1>::Construct )
593 , SchemaEntry("ifclamptype",&STEP::ObjectHelper<IfcLampType,1>::Construct )
594 , SchemaEntry("ifcbuildingelementcomponent",&STEP::ObjectHelper<IfcBuildingElementComponent,0>::Construct )
595 , SchemaEntry("ifcreinforcingelement",&STEP::ObjectHelper<IfcReinforcingElement,1>::Construct )
596 , SchemaEntry("ifcreinforcingbar",&STEP::ObjectHelper<IfcReinforcingBar,5>::Construct )
597 , SchemaEntry("ifcelectricheatertype",&STEP::ObjectHelper<IfcElectricHeaterType,1>::Construct )
598 , SchemaEntry("ifctshapeprofiledef",&STEP::ObjectHelper<IfcTShapeProfileDef,10>::Construct )
599 , SchemaEntry("ifcconstraint",&STEP::ObjectHelper<NotImplemented,0>::Construct )
600 , SchemaEntry("ifcobjective",&STEP::ObjectHelper<NotImplemented,0>::Construct )
601 , SchemaEntry("ifcstructuralactivity",&STEP::ObjectHelper<IfcStructuralActivity,2>::Construct )
602 , SchemaEntry("ifcstructuralaction",&STEP::ObjectHelper<IfcStructuralAction,2>::Construct )
603 , SchemaEntry("ifctexturecoordinate",&STEP::ObjectHelper<NotImplemented,0>::Construct )
604 , SchemaEntry("ifctexturemap",&STEP::ObjectHelper<NotImplemented,0>::Construct )
605 , SchemaEntry("ifcmonetaryunit",&STEP::ObjectHelper<NotImplemented,0>::Construct )
606 , SchemaEntry("ifcquantitytime",&STEP::ObjectHelper<NotImplemented,0>::Construct )
607 , SchemaEntry("ifctablerow",&STEP::ObjectHelper<NotImplemented,0>::Construct )
608 , SchemaEntry("ifclightdistributiondata",&STEP::ObjectHelper<NotImplemented,0>::Construct )
609 , SchemaEntry("ifcductfittingtype",&STEP::ObjectHelper<IfcDuctFittingType,1>::Construct )
610 , SchemaEntry("ifccartesiantransformationoperator2d",&STEP::ObjectHelper<IfcCartesianTransformationOperator2D,0>::Construct )
611 , SchemaEntry("ifccartesiantransformationoperator2dnonuniform",&STEP::ObjectHelper<IfcCartesianTransformationOperator2DnonUniform,1>::Construct )
612 , SchemaEntry("ifcclassificationnotationfacet",&STEP::ObjectHelper<NotImplemented,0>::Construct )
613 , SchemaEntry("ifcrelassociatesapproval",&STEP::ObjectHelper<NotImplemented,0>::Construct )
614 , SchemaEntry("ifcdraughtingpredefinedcurvefont",&STEP::ObjectHelper<NotImplemented,0>::Construct )
615 , SchemaEntry("ifcstructuralloadsingleforce",&STEP::ObjectHelper<NotImplemented,0>::Construct )
616 , SchemaEntry("ifcstructuralloadsingleforcewarping",&STEP::ObjectHelper<NotImplemented,0>::Construct )
617 , SchemaEntry("ifccurvestylefontandscaling",&STEP::ObjectHelper<NotImplemented,0>::Construct )
618 , SchemaEntry("ifcvirtualelement",&STEP::ObjectHelper<IfcVirtualElement,0>::Construct )
619 , SchemaEntry("ifcrightcircularcylinder",&STEP::ObjectHelper<IfcRightCircularCylinder,2>::Construct )
620 , SchemaEntry("ifcoutlettype",&STEP::ObjectHelper<IfcOutletType,1>::Construct )
621 , SchemaEntry("ifcreldecomposes",&STEP::ObjectHelper<IfcRelDecomposes,2>::Construct )
622 , SchemaEntry("ifcrelnests",&STEP::ObjectHelper<NotImplemented,0>::Construct )
623 , SchemaEntry("ifccovering",&STEP::ObjectHelper<IfcCovering,1>::Construct )
624 , SchemaEntry("ifcexternallydefinedsymbol",&STEP::ObjectHelper<NotImplemented,0>::Construct )
625 , SchemaEntry("ifcirregulartimeseries",&STEP::ObjectHelper<NotImplemented,0>::Construct )
626 , SchemaEntry("ifcpolyline",&STEP::ObjectHelper<IfcPolyline,1>::Construct )
627 , SchemaEntry("ifcpath",&STEP::ObjectHelper<IfcPath,1>::Construct )
628 , SchemaEntry("ifcelementcomponent",&STEP::ObjectHelper<IfcElementComponent,0>::Construct )
629 , SchemaEntry("ifcfastener",&STEP::ObjectHelper<IfcFastener,0>::Construct )
630 , SchemaEntry("ifcmappeditem",&STEP::ObjectHelper<IfcMappedItem,2>::Construct )
631 , SchemaEntry("ifcmetric",&STEP::ObjectHelper<NotImplemented,0>::Construct )
632 , SchemaEntry("ifcdocumentreference",&STEP::ObjectHelper<NotImplemented,0>::Construct )
633 , SchemaEntry("ifcsectionproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
634 , SchemaEntry("ifcrectangularpyramid",&STEP::ObjectHelper<IfcRectangularPyramid,3>::Construct )
635 , SchemaEntry("ifcrelreferencedinspatialstructure",&STEP::ObjectHelper<NotImplemented,0>::Construct )
636 , SchemaEntry("ifccrewresource",&STEP::ObjectHelper<IfcCrewResource,0>::Construct )
637 , SchemaEntry("ifcnamedunit",&STEP::ObjectHelper<IfcNamedUnit,2>::Construct )
638 , SchemaEntry("ifccontextdependentunit",&STEP::ObjectHelper<IfcContextDependentUnit,1>::Construct )
639 , SchemaEntry("ifcunitaryequipmenttype",&STEP::ObjectHelper<IfcUnitaryEquipmentType,1>::Construct )
640 , SchemaEntry("ifcroof",&STEP::ObjectHelper<IfcRoof,1>::Construct )
641 , SchemaEntry("ifcrelassignstasks",&STEP::ObjectHelper<NotImplemented,0>::Construct )
642 , SchemaEntry("ifcstructuralmember",&STEP::ObjectHelper<IfcStructuralMember,0>::Construct )
643 , SchemaEntry("ifcrelconnectsports",&STEP::ObjectHelper<NotImplemented,0>::Construct )
644 , SchemaEntry("ifcstylemodel",&STEP::ObjectHelper<IfcStyleModel,0>::Construct )
645 , SchemaEntry("ifcstyledrepresentation",&STEP::ObjectHelper<IfcStyledRepresentation,0>::Construct )
646 , SchemaEntry("ifcspatialstructureelement",&STEP::ObjectHelper<IfcSpatialStructureElement,2>::Construct )
647 , SchemaEntry("ifcbuilding",&STEP::ObjectHelper<IfcBuilding,3>::Construct )
648 , SchemaEntry("ifcconnectedfaceset",&STEP::ObjectHelper<IfcConnectedFaceSet,1>::Construct )
649 , SchemaEntry("ifcopenshell",&STEP::ObjectHelper<IfcOpenShell,0>::Construct )
650 , SchemaEntry("ifcfacetedbrep",&STEP::ObjectHelper<IfcFacetedBrep,0>::Construct )
651 , SchemaEntry("ifclocaltime",&STEP::ObjectHelper<NotImplemented,0>::Construct )
652 , SchemaEntry("ifcmechanicalconcretematerialproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
653 , SchemaEntry("ifcconic",&STEP::ObjectHelper<IfcConic,1>::Construct )
654 , SchemaEntry("ifccoveringtype",&STEP::ObjectHelper<IfcCoveringType,1>::Construct )
655 , SchemaEntry("ifcroundedrectangleprofiledef",&STEP::ObjectHelper<IfcRoundedRectangleProfileDef,1>::Construct )
656 , SchemaEntry("ifcairterminaltype",&STEP::ObjectHelper<IfcAirTerminalType,1>::Construct )
657 , SchemaEntry("ifcflowmovingdevicetype",&STEP::ObjectHelper<IfcFlowMovingDeviceType,0>::Construct )
658 , SchemaEntry("ifccompressortype",&STEP::ObjectHelper<IfcCompressorType,1>::Construct )
659 , SchemaEntry("ifcwindowpanelproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
660 , SchemaEntry("ifcpredefinedsymbol",&STEP::ObjectHelper<NotImplemented,0>::Construct )
661 , SchemaEntry("ifcpredefinedterminatorsymbol",&STEP::ObjectHelper<NotImplemented,0>::Construct )
662 , SchemaEntry("ifcishapeprofiledef",&STEP::ObjectHelper<IfcIShapeProfileDef,5>::Construct )
663 , SchemaEntry("ifcasymmetricishapeprofiledef",&STEP::ObjectHelper<IfcAsymmetricIShapeProfileDef,4>::Construct )
664 , SchemaEntry("ifccontrollertype",&STEP::ObjectHelper<IfcControllerType,1>::Construct )
665 , SchemaEntry("ifcrailing",&STEP::ObjectHelper<IfcRailing,1>::Construct )
666 , SchemaEntry("ifcgroup",&STEP::ObjectHelper<IfcGroup,0>::Construct )
667 , SchemaEntry("ifcasset",&STEP::ObjectHelper<IfcAsset,9>::Construct )
668 , SchemaEntry("ifcmaterialdefinitionrepresentation",&STEP::ObjectHelper<IfcMaterialDefinitionRepresentation,1>::Construct )
669 , SchemaEntry("ifccurvestylefontpattern",&STEP::ObjectHelper<NotImplemented,0>::Construct )
670 , SchemaEntry("ifcapprovalpropertyrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
671 , SchemaEntry("ifcrailingtype",&STEP::ObjectHelper<IfcRailingType,1>::Construct )
672 , SchemaEntry("ifcwall",&STEP::ObjectHelper<IfcWall,0>::Construct )
673 , SchemaEntry("ifcclassificationitem",&STEP::ObjectHelper<NotImplemented,0>::Construct )
674 , SchemaEntry("ifcstructuralpointconnection",&STEP::ObjectHelper<IfcStructuralPointConnection,0>::Construct )
675 , SchemaEntry("ifcconnectiongeometry",&STEP::ObjectHelper<NotImplemented,0>::Construct )
676 , SchemaEntry("ifcconnectionpointgeometry",&STEP::ObjectHelper<NotImplemented,0>::Construct )
677 , SchemaEntry("ifctimeseriesvalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
678 , SchemaEntry("ifcpropertylistvalue",&STEP::ObjectHelper<IfcPropertyListValue,2>::Construct )
679 , SchemaEntry("ifcfurniturestandard",&STEP::ObjectHelper<IfcFurnitureStandard,0>::Construct )
680 , SchemaEntry("ifcrelschedulescostitems",&STEP::ObjectHelper<NotImplemented,0>::Construct )
681 , SchemaEntry("ifcelectricgeneratortype",&STEP::ObjectHelper<IfcElectricGeneratorType,1>::Construct )
682 , SchemaEntry("ifcdoor",&STEP::ObjectHelper<IfcDoor,2>::Construct )
683 , SchemaEntry("ifcstyleditem",&STEP::ObjectHelper<IfcStyledItem,3>::Construct )
684 , SchemaEntry("ifcannotationoccurrence",&STEP::ObjectHelper<IfcAnnotationOccurrence,0>::Construct )
685 , SchemaEntry("ifcannotationsymboloccurrence",&STEP::ObjectHelper<IfcAnnotationSymbolOccurrence,0>::Construct )
686 , SchemaEntry("ifcarbitraryclosedprofiledef",&STEP::ObjectHelper<IfcArbitraryClosedProfileDef,1>::Construct )
687 , SchemaEntry("ifcarbitraryprofiledefwithvoids",&STEP::ObjectHelper<IfcArbitraryProfileDefWithVoids,1>::Construct )
688 , SchemaEntry("ifcline",&STEP::ObjectHelper<IfcLine,2>::Construct )
689 , SchemaEntry("ifcmateriallayerset",&STEP::ObjectHelper<NotImplemented,0>::Construct )
690 , SchemaEntry("ifcflowsegmenttype",&STEP::ObjectHelper<IfcFlowSegmentType,0>::Construct )
691 , SchemaEntry("ifcairterminalboxtype",&STEP::ObjectHelper<IfcAirTerminalBoxType,1>::Construct )
692 , SchemaEntry("ifcrelconnectsstructuralmember",&STEP::ObjectHelper<NotImplemented,0>::Construct )
693 , SchemaEntry("ifcpropertysinglevalue",&STEP::ObjectHelper<IfcPropertySingleValue,2>::Construct )
694 , SchemaEntry("ifcalarmtype",&STEP::ObjectHelper<IfcAlarmType,1>::Construct )
695 , SchemaEntry("ifcellipseprofiledef",&STEP::ObjectHelper<IfcEllipseProfileDef,2>::Construct )
603696 , SchemaEntry("ifcstair",&STEP::ObjectHelper<IfcStair,1>::Construct )
604 , SchemaEntry("ifcsymbolstyle",&STEP::ObjectHelper<NotImplemented,0>::Construct )
605 , SchemaEntry("ifcfillareastyletilesymbolwithstyle",&STEP::ObjectHelper<IfcFillAreaStyleTileSymbolWithStyle,1>::Construct )
606 , SchemaEntry("ifcannotationsymboloccurrence",&STEP::ObjectHelper<IfcAnnotationSymbolOccurrence,0>::Construct )
607 , SchemaEntry("ifcterminatorsymbol",&STEP::ObjectHelper<IfcTerminatorSymbol,1>::Construct )
608 , SchemaEntry("ifcdimensioncurveterminator",&STEP::ObjectHelper<IfcDimensionCurveTerminator,1>::Construct )
609 , SchemaEntry("ifcrectangleprofiledef",&STEP::ObjectHelper<IfcRectangleProfileDef,2>::Construct )
610 , SchemaEntry("ifcrectanglehollowprofiledef",&STEP::ObjectHelper<IfcRectangleHollowProfileDef,3>::Construct )
611 , SchemaEntry("ifcrelassociateslibrary",&STEP::ObjectHelper<NotImplemented,0>::Construct )
612 , SchemaEntry("ifclocalplacement",&STEP::ObjectHelper<IfcLocalPlacement,2>::Construct )
613 , SchemaEntry("ifcopticalmaterialproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
614 , SchemaEntry("ifcservicelifefactor",&STEP::ObjectHelper<NotImplemented,0>::Construct )
615 , SchemaEntry("ifcrelassignstasks",&STEP::ObjectHelper<NotImplemented,0>::Construct )
616 , SchemaEntry("ifctask",&STEP::ObjectHelper<IfcTask,5>::Construct )
617 , SchemaEntry("ifcannotationfillareaoccurrence",&STEP::ObjectHelper<IfcAnnotationFillAreaOccurrence,2>::Construct )
618 , SchemaEntry("ifcface",&STEP::ObjectHelper<IfcFace,1>::Construct )
619 , SchemaEntry("ifcflowsegmenttype",&STEP::ObjectHelper<IfcFlowSegmentType,0>::Construct )
620 , SchemaEntry("ifcductsegmenttype",&STEP::ObjectHelper<IfcDuctSegmentType,1>::Construct )
621 , SchemaEntry("ifcpropertyenumeration",&STEP::ObjectHelper<NotImplemented,0>::Construct )
622 , SchemaEntry("ifcconstructionresource",&STEP::ObjectHelper<IfcConstructionResource,4>::Construct )
623 , SchemaEntry("ifcconstructionequipmentresource",&STEP::ObjectHelper<IfcConstructionEquipmentResource,0>::Construct )
624 , SchemaEntry("ifcsanitaryterminaltype",&STEP::ObjectHelper<IfcSanitaryTerminalType,1>::Construct )
625 , SchemaEntry("ifcpredefineddimensionsymbol",&STEP::ObjectHelper<NotImplemented,0>::Construct )
626 , SchemaEntry("ifcorganization",&STEP::ObjectHelper<NotImplemented,0>::Construct )
627 , SchemaEntry("ifccircleprofiledef",&STEP::ObjectHelper<IfcCircleProfileDef,1>::Construct )
628 , SchemaEntry("ifcstructuralreaction",&STEP::ObjectHelper<IfcStructuralReaction,0>::Construct )
629 , SchemaEntry("ifcstructuralpointreaction",&STEP::ObjectHelper<IfcStructuralPointReaction,0>::Construct )
630 , SchemaEntry("ifcrailing",&STEP::ObjectHelper<IfcRailing,1>::Construct )
631 , SchemaEntry("ifctextliteral",&STEP::ObjectHelper<IfcTextLiteral,3>::Construct )
632 , SchemaEntry("ifccartesiantransformationoperator",&STEP::ObjectHelper<IfcCartesianTransformationOperator,4>::Construct )
633 , SchemaEntry("ifccostvalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
634 , SchemaEntry("ifctextstyle",&STEP::ObjectHelper<NotImplemented,0>::Construct )
635 , SchemaEntry("ifclineardimension",&STEP::ObjectHelper<IfcLinearDimension,0>::Construct )
636 , SchemaEntry("ifcdampertype",&STEP::ObjectHelper<IfcDamperType,1>::Construct )
637 , SchemaEntry("ifcsiunit",&STEP::ObjectHelper<IfcSIUnit,2>::Construct )
638 , SchemaEntry("ifcsurfacestylelighting",&STEP::ObjectHelper<NotImplemented,0>::Construct )
639 , SchemaEntry("ifcmeasurewithunit",&STEP::ObjectHelper<IfcMeasureWithUnit,2>::Construct )
640 , SchemaEntry("ifcmateriallayerset",&STEP::ObjectHelper<NotImplemented,0>::Construct )
641 , SchemaEntry("ifcdistributionelement",&STEP::ObjectHelper<IfcDistributionElement,0>::Construct )
642 , SchemaEntry("ifcdistributioncontrolelement",&STEP::ObjectHelper<IfcDistributionControlElement,1>::Construct )
643 , SchemaEntry("ifctransformertype",&STEP::ObjectHelper<IfcTransformerType,1>::Construct )
644 , SchemaEntry("ifclaborresource",&STEP::ObjectHelper<IfcLaborResource,1>::Construct )
645 , SchemaEntry("ifcderivedprofiledef",&STEP::ObjectHelper<IfcDerivedProfileDef,3>::Construct )
646 , SchemaEntry("ifcrelconnectsstructuralmember",&STEP::ObjectHelper<NotImplemented,0>::Construct )
647 , SchemaEntry("ifcrelconnectswitheccentricity",&STEP::ObjectHelper<NotImplemented,0>::Construct )
648 , SchemaEntry("ifcfurniturestandard",&STEP::ObjectHelper<IfcFurnitureStandard,0>::Construct )
649 , SchemaEntry("ifcstairflighttype",&STEP::ObjectHelper<IfcStairFlightType,1>::Construct )
650 , SchemaEntry("ifcworkcontrol",&STEP::ObjectHelper<IfcWorkControl,10>::Construct )
651 , SchemaEntry("ifcworkplan",&STEP::ObjectHelper<IfcWorkPlan,0>::Construct )
652 , SchemaEntry("ifcreldefines",&STEP::ObjectHelper<NotImplemented,0>::Construct )
653 , SchemaEntry("ifcreldefinesbyproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
654 , SchemaEntry("ifccondition",&STEP::ObjectHelper<IfcCondition,0>::Construct )
655 , SchemaEntry("ifcgridaxis",&STEP::ObjectHelper<NotImplemented,0>::Construct )
656 , SchemaEntry("ifcrelvoidselement",&STEP::ObjectHelper<IfcRelVoidsElement,2>::Construct )
657 , SchemaEntry("ifcwindow",&STEP::ObjectHelper<IfcWindow,2>::Construct )
658 , SchemaEntry("ifcrelflowcontrolelements",&STEP::ObjectHelper<NotImplemented,0>::Construct )
659 , SchemaEntry("ifcrelconnectsporttoelement",&STEP::ObjectHelper<NotImplemented,0>::Construct )
660 , SchemaEntry("ifcprotectivedevicetype",&STEP::ObjectHelper<IfcProtectiveDeviceType,1>::Construct )
661 , SchemaEntry("ifcjunctionboxtype",&STEP::ObjectHelper<IfcJunctionBoxType,1>::Construct )
662 , SchemaEntry("ifcstructuralanalysismodel",&STEP::ObjectHelper<IfcStructuralAnalysisModel,4>::Construct )
663 , SchemaEntry("ifcaxis2placement2d",&STEP::ObjectHelper<IfcAxis2Placement2D,1>::Construct )
664 , SchemaEntry("ifcspacetype",&STEP::ObjectHelper<IfcSpaceType,1>::Construct )
665 , SchemaEntry("ifcellipseprofiledef",&STEP::ObjectHelper<IfcEllipseProfileDef,2>::Construct )
666 , SchemaEntry("ifcdistributionflowelement",&STEP::ObjectHelper<IfcDistributionFlowElement,0>::Construct )
667 , SchemaEntry("ifcflowmovingdevice",&STEP::ObjectHelper<IfcFlowMovingDevice,0>::Construct )
668 , SchemaEntry("ifcsurfacestylewithtextures",&STEP::ObjectHelper<IfcSurfaceStyleWithTextures,1>::Construct )
669 , SchemaEntry("ifcgeometricset",&STEP::ObjectHelper<IfcGeometricSet,1>::Construct )
670 , SchemaEntry("ifcmechanicalmaterialproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
671 , SchemaEntry("ifcmechanicalconcretematerialproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
672 , SchemaEntry("ifcribplateprofileproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
673 , SchemaEntry("ifcdocumentinformationrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
674 , SchemaEntry("ifcprojectorder",&STEP::ObjectHelper<IfcProjectOrder,3>::Construct )
675 , SchemaEntry("ifcbsplinecurve",&STEP::ObjectHelper<IfcBSplineCurve,5>::Construct )
676 , SchemaEntry("ifcbeziercurve",&STEP::ObjectHelper<IfcBezierCurve,0>::Construct )
677 , SchemaEntry("ifcstructuralpointconnection",&STEP::ObjectHelper<IfcStructuralPointConnection,0>::Construct )
678 , SchemaEntry("ifcflowcontroller",&STEP::ObjectHelper<IfcFlowController,0>::Construct )
679 , SchemaEntry("ifcelectricdistributionpoint",&STEP::ObjectHelper<IfcElectricDistributionPoint,2>::Construct )
680 , SchemaEntry("ifcsite",&STEP::ObjectHelper<IfcSite,5>::Construct )
681 , SchemaEntry("ifcoffsetcurve3d",&STEP::ObjectHelper<IfcOffsetCurve3D,4>::Construct )
682 , SchemaEntry("ifcpropertyset",&STEP::ObjectHelper<NotImplemented,0>::Construct )
683 , SchemaEntry("ifcconnectionsurfacegeometry",&STEP::ObjectHelper<NotImplemented,0>::Construct )
684 , SchemaEntry("ifcvirtualelement",&STEP::ObjectHelper<IfcVirtualElement,0>::Construct )
685 , SchemaEntry("ifcconstructionproductresource",&STEP::ObjectHelper<IfcConstructionProductResource,0>::Construct )
686 , SchemaEntry("ifcwaterproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
687 , SchemaEntry("ifcsurfacecurvesweptareasolid",&STEP::ObjectHelper<IfcSurfaceCurveSweptAreaSolid,4>::Construct )
688 , SchemaEntry("ifcpermeablecoveringproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
689 , SchemaEntry("ifccartesiantransformationoperator3d",&STEP::ObjectHelper<IfcCartesianTransformationOperator3D,1>::Construct )
690 , SchemaEntry("ifccartesiantransformationoperator3dnonuniform",&STEP::ObjectHelper<IfcCartesianTransformationOperator3DnonUniform,2>::Construct )
691 , SchemaEntry("ifccrewresource",&STEP::ObjectHelper<IfcCrewResource,0>::Construct )
692 , SchemaEntry("ifcstructuralsurfacemember",&STEP::ObjectHelper<IfcStructuralSurfaceMember,2>::Construct )
693 , SchemaEntry("ifc2dcompositecurve",&STEP::ObjectHelper<Ifc2DCompositeCurve,0>::Construct )
694 , SchemaEntry("ifcrepresentationcontext",&STEP::ObjectHelper<IfcRepresentationContext,2>::Construct )
695 , SchemaEntry("ifcgeometricrepresentationcontext",&STEP::ObjectHelper<IfcGeometricRepresentationContext,4>::Construct )
696 , SchemaEntry("ifcflowtreatmentdevice",&STEP::ObjectHelper<IfcFlowTreatmentDevice,0>::Construct )
697 , SchemaEntry("ifctextstylefordefinedfont",&STEP::ObjectHelper<NotImplemented,0>::Construct )
698 , SchemaEntry("ifcrightcircularcylinder",&STEP::ObjectHelper<IfcRightCircularCylinder,2>::Construct )
699 , SchemaEntry("ifcwasteterminaltype",&STEP::ObjectHelper<IfcWasteTerminalType,1>::Construct )
700 , SchemaEntry("ifcspacethermalloadproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
701 , SchemaEntry("ifcconstraintrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
702 , SchemaEntry("ifcbuildingelementcomponent",&STEP::ObjectHelper<IfcBuildingElementComponent,0>::Construct )
703 , SchemaEntry("ifcbuildingelementpart",&STEP::ObjectHelper<IfcBuildingElementPart,0>::Construct )
704 , SchemaEntry("ifcwall",&STEP::ObjectHelper<IfcWall,0>::Construct )
705 , SchemaEntry("ifcwallstandardcase",&STEP::ObjectHelper<IfcWallStandardCase,0>::Construct )
706 , SchemaEntry("ifcapprovalactorrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
707 , SchemaEntry("ifcpath",&STEP::ObjectHelper<IfcPath,1>::Construct )
708 , SchemaEntry("ifcdefinedsymbol",&STEP::ObjectHelper<IfcDefinedSymbol,2>::Construct )
709 , SchemaEntry("ifcstructuralsurfacemembervarying",&STEP::ObjectHelper<IfcStructuralSurfaceMemberVarying,2>::Construct )
710 , SchemaEntry("ifcpoint",&STEP::ObjectHelper<IfcPoint,0>::Construct )
711 , SchemaEntry("ifcsurfaceofrevolution",&STEP::ObjectHelper<IfcSurfaceOfRevolution,1>::Construct )
712 , SchemaEntry("ifcflowterminal",&STEP::ObjectHelper<IfcFlowTerminal,0>::Construct )
713 , SchemaEntry("ifcfurnishingelement",&STEP::ObjectHelper<IfcFurnishingElement,0>::Construct )
714 , SchemaEntry("ifccurvestylefont",&STEP::ObjectHelper<NotImplemented,0>::Construct )
715 , SchemaEntry("ifcsurfacestyleshading",&STEP::ObjectHelper<IfcSurfaceStyleShading,1>::Construct )
716 , SchemaEntry("ifcsurfacestylerendering",&STEP::ObjectHelper<IfcSurfaceStyleRendering,8>::Construct )
717 , SchemaEntry("ifccoordinateduniversaltimeoffset",&STEP::ObjectHelper<NotImplemented,0>::Construct )
718 , SchemaEntry("ifcstructuralloadsingledisplacement",&STEP::ObjectHelper<NotImplemented,0>::Construct )
719 , SchemaEntry("ifccirclehollowprofiledef",&STEP::ObjectHelper<IfcCircleHollowProfileDef,1>::Construct )
720 , SchemaEntry("ifcflowmovingdevicetype",&STEP::ObjectHelper<IfcFlowMovingDeviceType,0>::Construct )
721 , SchemaEntry("ifcfantype",&STEP::ObjectHelper<IfcFanType,1>::Construct )
722 , SchemaEntry("ifcstructuralplanaractionvarying",&STEP::ObjectHelper<IfcStructuralPlanarActionVarying,2>::Construct )
723 , SchemaEntry("ifcproductrepresentation",&STEP::ObjectHelper<IfcProductRepresentation,3>::Construct )
724 , SchemaEntry("ifcreldefinesbytype",&STEP::ObjectHelper<NotImplemented,0>::Construct )
725697 , SchemaEntry("ifcpredefinedtextfont",&STEP::ObjectHelper<NotImplemented,0>::Construct )
726698 , SchemaEntry("ifctextstylefontmodel",&STEP::ObjectHelper<NotImplemented,0>::Construct )
727 , SchemaEntry("ifcstackterminaltype",&STEP::ObjectHelper<IfcStackTerminalType,1>::Construct )
728 , SchemaEntry("ifcapprovalpropertyrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
729 , SchemaEntry("ifcexternallydefinedsymbol",&STEP::ObjectHelper<NotImplemented,0>::Construct )
730 , SchemaEntry("ifcreinforcingelement",&STEP::ObjectHelper<IfcReinforcingElement,1>::Construct )
731 , SchemaEntry("ifcreinforcingmesh",&STEP::ObjectHelper<IfcReinforcingMesh,8>::Construct )
732 , SchemaEntry("ifcorderaction",&STEP::ObjectHelper<IfcOrderAction,1>::Construct )
733 , SchemaEntry("ifcrelcoversbldgelements",&STEP::ObjectHelper<NotImplemented,0>::Construct )
734 , SchemaEntry("ifclightsource",&STEP::ObjectHelper<IfcLightSource,4>::Construct )
735 , SchemaEntry("ifclightsourcedirectional",&STEP::ObjectHelper<IfcLightSourceDirectional,1>::Construct )
736 , SchemaEntry("ifcloop",&STEP::ObjectHelper<IfcLoop,0>::Construct )
737 , SchemaEntry("ifcvertexloop",&STEP::ObjectHelper<IfcVertexLoop,1>::Construct )
738 , SchemaEntry("ifcchamferedgefeature",&STEP::ObjectHelper<IfcChamferEdgeFeature,2>::Construct )
739 , SchemaEntry("ifcwindowpanelproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
740 , SchemaEntry("ifcclassification",&STEP::ObjectHelper<NotImplemented,0>::Construct )
699 , SchemaEntry("ifcsurfacestyleshading",&STEP::ObjectHelper<IfcSurfaceStyleShading,1>::Construct )
700 , SchemaEntry("ifcpumptype",&STEP::ObjectHelper<IfcPumpType,1>::Construct )
701 , SchemaEntry("ifcdefinedsymbol",&STEP::ObjectHelper<IfcDefinedSymbol,2>::Construct )
702 , SchemaEntry("ifcclassificationitemrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
703 , SchemaEntry("ifcgeneralmaterialproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
741704 , SchemaEntry("ifcelementcomponenttype",&STEP::ObjectHelper<IfcElementComponentType,0>::Construct )
742705 , SchemaEntry("ifcfastenertype",&STEP::ObjectHelper<IfcFastenerType,0>::Construct )
743706 , SchemaEntry("ifcmechanicalfastenertype",&STEP::ObjectHelper<IfcMechanicalFastenerType,0>::Construct )
707 , SchemaEntry("ifcpermeablecoveringproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
708 , SchemaEntry("ifcflowfitting",&STEP::ObjectHelper<IfcFlowFitting,0>::Construct )
709 , SchemaEntry("ifcapproval",&STEP::ObjectHelper<NotImplemented,0>::Construct )
710 , SchemaEntry("ifcshapeaspect",&STEP::ObjectHelper<NotImplemented,0>::Construct )
711 , SchemaEntry("ifcconstraintclassificationrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
712 , SchemaEntry("ifclightsourcedirectional",&STEP::ObjectHelper<IfcLightSourceDirectional,1>::Construct )
713 , SchemaEntry("ifcsurfacestyle",&STEP::ObjectHelper<IfcSurfaceStyle,2>::Construct )
714 , SchemaEntry("ifcrelconnectsstructuralactivity",&STEP::ObjectHelper<NotImplemented,0>::Construct )
715 , SchemaEntry("ifcrelassociatesprofileproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
716 , SchemaEntry("ifcannotationsurface",&STEP::ObjectHelper<IfcAnnotationSurface,2>::Construct )
717 , SchemaEntry("ifcfuelproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
718 , SchemaEntry("ifcflowcontroller",&STEP::ObjectHelper<IfcFlowController,0>::Construct )
719 , SchemaEntry("ifcfailureconnectioncondition",&STEP::ObjectHelper<NotImplemented,0>::Construct )
720 , SchemaEntry("ifcbuildingstorey",&STEP::ObjectHelper<IfcBuildingStorey,1>::Construct )
721 , SchemaEntry("ifcworkcontrol",&STEP::ObjectHelper<IfcWorkControl,10>::Construct )
722 , SchemaEntry("ifcworkschedule",&STEP::ObjectHelper<IfcWorkSchedule,0>::Construct )
723 , SchemaEntry("ifctable",&STEP::ObjectHelper<NotImplemented,0>::Construct )
724 , SchemaEntry("ifcductsegmenttype",&STEP::ObjectHelper<IfcDuctSegmentType,1>::Construct )
725 , SchemaEntry("ifcstructuralsteelprofileproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
726 , SchemaEntry("ifcdraughtingpredefinedtextfont",&STEP::ObjectHelper<NotImplemented,0>::Construct )
727 , SchemaEntry("ifcface",&STEP::ObjectHelper<IfcFace,1>::Construct )
728 , SchemaEntry("ifcstructuralsurfacemember",&STEP::ObjectHelper<IfcStructuralSurfaceMember,2>::Construct )
729 , SchemaEntry("ifcstructuralsurfacemembervarying",&STEP::ObjectHelper<IfcStructuralSurfaceMemberVarying,2>::Construct )
730 , SchemaEntry("ifcfacesurface",&STEP::ObjectHelper<IfcFaceSurface,2>::Construct )
731 , SchemaEntry("ifcclassification",&STEP::ObjectHelper<NotImplemented,0>::Construct )
732 , SchemaEntry("ifcmateriallist",&STEP::ObjectHelper<NotImplemented,0>::Construct )
733 , SchemaEntry("ifccostschedule",&STEP::ObjectHelper<IfcCostSchedule,8>::Construct )
734 , SchemaEntry("ifccoordinateduniversaltimeoffset",&STEP::ObjectHelper<NotImplemented,0>::Construct )
735 , SchemaEntry("ifcplanarextent",&STEP::ObjectHelper<IfcPlanarExtent,2>::Construct )
736 , SchemaEntry("ifcplanarbox",&STEP::ObjectHelper<IfcPlanarBox,1>::Construct )
737 , SchemaEntry("ifcfillareastyle",&STEP::ObjectHelper<NotImplemented,0>::Construct )
738 , SchemaEntry("ifcsectionreinforcementproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
739 , SchemaEntry("ifccolourspecification",&STEP::ObjectHelper<IfcColourSpecification,1>::Construct )
740 , SchemaEntry("ifcvector",&STEP::ObjectHelper<IfcVector,2>::Construct )
741 , SchemaEntry("ifcbeam",&STEP::ObjectHelper<IfcBeam,0>::Construct )
742 , SchemaEntry("ifccolourrgb",&STEP::ObjectHelper<IfcColourRgb,3>::Construct )
743 , SchemaEntry("ifcstructuralplanaraction",&STEP::ObjectHelper<IfcStructuralPlanarAction,1>::Construct )
744 , SchemaEntry("ifcstructuralplanaractionvarying",&STEP::ObjectHelper<IfcStructuralPlanarActionVarying,2>::Construct )
745 , SchemaEntry("ifcsite",&STEP::ObjectHelper<IfcSite,5>::Construct )
746 , SchemaEntry("ifcdiscreteaccessorytype",&STEP::ObjectHelper<IfcDiscreteAccessoryType,0>::Construct )
747 , SchemaEntry("ifcvibrationisolatortype",&STEP::ObjectHelper<IfcVibrationIsolatorType,1>::Construct )
748 , SchemaEntry("ifcevaporativecoolertype",&STEP::ObjectHelper<IfcEvaporativeCoolerType,1>::Construct )
749 , SchemaEntry("ifcdistributionchamberelementtype",&STEP::ObjectHelper<IfcDistributionChamberElementType,1>::Construct )
750 , SchemaEntry("ifcfeatureelementaddition",&STEP::ObjectHelper<IfcFeatureElementAddition,0>::Construct )
751 , SchemaEntry("ifcrelassignstoresource",&STEP::ObjectHelper<NotImplemented,0>::Construct )
752 , SchemaEntry("ifcstructureddimensioncallout",&STEP::ObjectHelper<IfcStructuredDimensionCallout,0>::Construct )
753 , SchemaEntry("ifccoolingtowertype",&STEP::ObjectHelper<IfcCoolingTowerType,1>::Construct )
754 , SchemaEntry("ifccenterlineprofiledef",&STEP::ObjectHelper<IfcCenterLineProfileDef,1>::Construct )
755 , SchemaEntry("ifctexturevertex",&STEP::ObjectHelper<NotImplemented,0>::Construct )
756 , SchemaEntry("ifcorganization",&STEP::ObjectHelper<NotImplemented,0>::Construct )
757 , SchemaEntry("ifcwindowstyle",&STEP::ObjectHelper<IfcWindowStyle,4>::Construct )
758 , SchemaEntry("ifclightsourcegoniometric",&STEP::ObjectHelper<IfcLightSourceGoniometric,6>::Construct )
759 , SchemaEntry("ifcribplateprofileproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
760 , SchemaEntry("ifctransformertype",&STEP::ObjectHelper<IfcTransformerType,1>::Construct )
761 , SchemaEntry("ifcmembertype",&STEP::ObjectHelper<IfcMemberType,1>::Construct )
762 , SchemaEntry("ifcsurfaceoflinearextrusion",&STEP::ObjectHelper<IfcSurfaceOfLinearExtrusion,2>::Construct )
763 , SchemaEntry("ifcmotorconnectiontype",&STEP::ObjectHelper<IfcMotorConnectionType,1>::Construct )
764 , SchemaEntry("ifcflowtreatmentdevicetype",&STEP::ObjectHelper<IfcFlowTreatmentDeviceType,0>::Construct )
765 , SchemaEntry("ifcductsilencertype",&STEP::ObjectHelper<IfcDuctSilencerType,1>::Construct )
766 , SchemaEntry("ifcwindowliningproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
767 , SchemaEntry("ifcfurnishingelementtype",&STEP::ObjectHelper<IfcFurnishingElementType,0>::Construct )
768 , SchemaEntry("ifcsystemfurnitureelementtype",&STEP::ObjectHelper<IfcSystemFurnitureElementType,0>::Construct )
769 , SchemaEntry("ifcconnectionpointeccentricity",&STEP::ObjectHelper<NotImplemented,0>::Construct )
770 , SchemaEntry("ifcwasteterminaltype",&STEP::ObjectHelper<IfcWasteTerminalType,1>::Construct )
771 , SchemaEntry("ifcbsplinecurve",&STEP::ObjectHelper<IfcBSplineCurve,5>::Construct )
772 , SchemaEntry("ifcbeziercurve",&STEP::ObjectHelper<IfcBezierCurve,0>::Construct )
773 , SchemaEntry("ifcdocumentinformationrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
774 , SchemaEntry("ifcactuatortype",&STEP::ObjectHelper<IfcActuatorType,1>::Construct )
775 , SchemaEntry("ifcdistributioncontrolelement",&STEP::ObjectHelper<IfcDistributionControlElement,1>::Construct )
776 , SchemaEntry("ifcannotation",&STEP::ObjectHelper<IfcAnnotation,0>::Construct )
777 , SchemaEntry("ifcrelassociatesdocument",&STEP::ObjectHelper<NotImplemented,0>::Construct )
778 , SchemaEntry("ifcdoorliningproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
779 , SchemaEntry("ifcshellbasedsurfacemodel",&STEP::ObjectHelper<IfcShellBasedSurfaceModel,1>::Construct )
780 , SchemaEntry("ifcactionrequest",&STEP::ObjectHelper<IfcActionRequest,1>::Construct )
781 , SchemaEntry("ifcextrudedareasolid",&STEP::ObjectHelper<IfcExtrudedAreaSolid,2>::Construct )
782 , SchemaEntry("ifcsystem",&STEP::ObjectHelper<IfcSystem,0>::Construct )
783 , SchemaEntry("ifcfillareastylehatching",&STEP::ObjectHelper<IfcFillAreaStyleHatching,5>::Construct )
784 , SchemaEntry("ifcrelvoidselement",&STEP::ObjectHelper<IfcRelVoidsElement,2>::Construct )
785 , SchemaEntry("ifcrelconnectspathelements",&STEP::ObjectHelper<NotImplemented,0>::Construct )
786 , SchemaEntry("ifcrelspaceboundary",&STEP::ObjectHelper<NotImplemented,0>::Construct )
787 , SchemaEntry("ifcsurfacecurvesweptareasolid",&STEP::ObjectHelper<IfcSurfaceCurveSweptAreaSolid,4>::Construct )
788 , SchemaEntry("ifccartesiantransformationoperator3dnonuniform",&STEP::ObjectHelper<IfcCartesianTransformationOperator3DnonUniform,2>::Construct )
789 , SchemaEntry("ifcrelinteractionrequirements",&STEP::ObjectHelper<NotImplemented,0>::Construct )
790 , SchemaEntry("ifccurtainwalltype",&STEP::ObjectHelper<IfcCurtainWallType,1>::Construct )
791 , SchemaEntry("ifcquantitylength",&STEP::ObjectHelper<NotImplemented,0>::Construct )
792 , SchemaEntry("ifcequipmentstandard",&STEP::ObjectHelper<IfcEquipmentStandard,0>::Construct )
793 , SchemaEntry("ifcflowstoragedevicetype",&STEP::ObjectHelper<IfcFlowStorageDeviceType,0>::Construct )
794 , SchemaEntry("ifcvirtualgridintersection",&STEP::ObjectHelper<NotImplemented,0>::Construct )
795 , SchemaEntry("ifcdiameterdimension",&STEP::ObjectHelper<IfcDiameterDimension,0>::Construct )
796 , SchemaEntry("ifcswitchingdevicetype",&STEP::ObjectHelper<IfcSwitchingDeviceType,1>::Construct )
797 , SchemaEntry("ifcaddress",&STEP::ObjectHelper<NotImplemented,0>::Construct )
798 , SchemaEntry("ifctelecomaddress",&STEP::ObjectHelper<NotImplemented,0>::Construct )
799 , SchemaEntry("ifcwindow",&STEP::ObjectHelper<IfcWindow,2>::Construct )
800 , SchemaEntry("ifcmechanicalsteelmaterialproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
801 , SchemaEntry("ifcflowtreatmentdevice",&STEP::ObjectHelper<IfcFlowTreatmentDevice,0>::Construct )
802 , SchemaEntry("ifcrelservicesbuildings",&STEP::ObjectHelper<NotImplemented,0>::Construct )
803 , SchemaEntry("ifcchillertype",&STEP::ObjectHelper<IfcChillerType,1>::Construct )
804 , SchemaEntry("ifcrelassignstoproduct",&STEP::ObjectHelper<NotImplemented,0>::Construct )
805 , SchemaEntry("ifcrectanglehollowprofiledef",&STEP::ObjectHelper<IfcRectangleHollowProfileDef,3>::Construct )
806 , SchemaEntry("ifcenergyproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
807 , SchemaEntry("ifcboxedhalfspace",&STEP::ObjectHelper<IfcBoxedHalfSpace,1>::Construct )
808 , SchemaEntry("ifcaxis2placement2d",&STEP::ObjectHelper<IfcAxis2Placement2D,1>::Construct )
809 , SchemaEntry("ifcspaceprogram",&STEP::ObjectHelper<IfcSpaceProgram,5>::Construct )
810 , SchemaEntry("ifcpoint",&STEP::ObjectHelper<IfcPoint,0>::Construct )
811 , SchemaEntry("ifccartesianpoint",&STEP::ObjectHelper<IfcCartesianPoint,1>::Construct )
812 , SchemaEntry("ifcboundedsurface",&STEP::ObjectHelper<IfcBoundedSurface,0>::Construct )
813 , SchemaEntry("ifcloop",&STEP::ObjectHelper<IfcLoop,0>::Construct )
814 , SchemaEntry("ifcpolyloop",&STEP::ObjectHelper<IfcPolyLoop,1>::Construct )
815 , SchemaEntry("ifcpredefinedpointmarkersymbol",&STEP::ObjectHelper<NotImplemented,0>::Construct )
816 , SchemaEntry("ifcterminatorsymbol",&STEP::ObjectHelper<IfcTerminatorSymbol,1>::Construct )
817 , SchemaEntry("ifcdimensioncurveterminator",&STEP::ObjectHelper<IfcDimensionCurveTerminator,1>::Construct )
818 , SchemaEntry("ifcrelprojectselement",&STEP::ObjectHelper<NotImplemented,0>::Construct )
819 , SchemaEntry("ifctrapeziumprofiledef",&STEP::ObjectHelper<IfcTrapeziumProfileDef,4>::Construct )
820 , SchemaEntry("ifcrepresentationcontext",&STEP::ObjectHelper<IfcRepresentationContext,2>::Construct )
821 , SchemaEntry("ifcgeometricrepresentationcontext",&STEP::ObjectHelper<IfcGeometricRepresentationContext,4>::Construct )
822 , SchemaEntry("ifctextstylewithboxcharacteristics",&STEP::ObjectHelper<NotImplemented,0>::Construct )
823 , SchemaEntry("ifccurveboundedplane",&STEP::ObjectHelper<IfcCurveBoundedPlane,3>::Construct )
824 , SchemaEntry("ifcquantitycount",&STEP::ObjectHelper<NotImplemented,0>::Construct )
825 , SchemaEntry("ifctimeseriesreferencerelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
826 , SchemaEntry("ifcstructuralloadtemperature",&STEP::ObjectHelper<NotImplemented,0>::Construct )
827 , SchemaEntry("ifcsiunit",&STEP::ObjectHelper<IfcSIUnit,2>::Construct )
828 , SchemaEntry("ifcstructuralreaction",&STEP::ObjectHelper<IfcStructuralReaction,0>::Construct )
829 , SchemaEntry("ifcstructuralpointreaction",&STEP::ObjectHelper<IfcStructuralPointReaction,0>::Construct )
830 , SchemaEntry("ifcaxis1placement",&STEP::ObjectHelper<IfcAxis1Placement,1>::Construct )
831 , SchemaEntry("ifcreinforcementdefinitionproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
832 , SchemaEntry("ifcelectricappliancetype",&STEP::ObjectHelper<IfcElectricApplianceType,1>::Construct )
833 , SchemaEntry("ifcsensortype",&STEP::ObjectHelper<IfcSensorType,1>::Construct )
834 , SchemaEntry("ifcfurnishingelement",&STEP::ObjectHelper<IfcFurnishingElement,0>::Construct )
835 , SchemaEntry("ifcprotectivedevicetype",&STEP::ObjectHelper<IfcProtectiveDeviceType,1>::Construct )
836 , SchemaEntry("ifczshapeprofiledef",&STEP::ObjectHelper<IfcZShapeProfileDef,6>::Construct )
744837 , SchemaEntry("ifcscheduletimecontrol",&STEP::ObjectHelper<IfcScheduleTimeControl,18>::Construct )
745 , SchemaEntry("ifcsurfacestyle",&STEP::ObjectHelper<IfcSurfaceStyle,2>::Construct )
746 , SchemaEntry("ifcreinforcementbarproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
747 , SchemaEntry("ifcopenshell",&STEP::ObjectHelper<IfcOpenShell,0>::Construct )
748 , SchemaEntry("ifclibraryreference",&STEP::ObjectHelper<NotImplemented,0>::Construct )
749 , SchemaEntry("ifcsubcontractresource",&STEP::ObjectHelper<IfcSubContractResource,2>::Construct )
750 , SchemaEntry("ifctimeseriesreferencerelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
751 , SchemaEntry("ifcsweptdisksolid",&STEP::ObjectHelper<IfcSweptDiskSolid,5>::Construct )
752 , SchemaEntry("ifccompositeprofiledef",&STEP::ObjectHelper<IfcCompositeProfileDef,2>::Construct )
838 , SchemaEntry("ifcrepresentationmap",&STEP::ObjectHelper<IfcRepresentationMap,2>::Construct )
839 , SchemaEntry("ifcclosedshell",&STEP::ObjectHelper<IfcClosedShell,0>::Construct )
840 , SchemaEntry("ifcbuildingelementpart",&STEP::ObjectHelper<IfcBuildingElementPart,0>::Construct )
841 , SchemaEntry("ifcdraughtingpredefinedcolour",&STEP::ObjectHelper<NotImplemented,0>::Construct )
842 , SchemaEntry("ifcpostaladdress",&STEP::ObjectHelper<NotImplemented,0>::Construct )
843 , SchemaEntry("ifcblock",&STEP::ObjectHelper<IfcBlock,3>::Construct )
844 , SchemaEntry("ifclightfixturetype",&STEP::ObjectHelper<IfcLightFixtureType,1>::Construct )
845 , SchemaEntry("ifcopeningelement",&STEP::ObjectHelper<IfcOpeningElement,0>::Construct )
846 , SchemaEntry("ifclightsourcespot",&STEP::ObjectHelper<IfcLightSourceSpot,4>::Construct )
847 , SchemaEntry("ifctendonanchor",&STEP::ObjectHelper<IfcTendonAnchor,0>::Construct )
848 , SchemaEntry("ifcsurfacestylerefraction",&STEP::ObjectHelper<NotImplemented,0>::Construct )
849 , SchemaEntry("ifcelectricflowstoragedevicetype",&STEP::ObjectHelper<IfcElectricFlowStorageDeviceType,1>::Construct )
850 , SchemaEntry("ifcfluidflowproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
851 , SchemaEntry("ifcsphere",&STEP::ObjectHelper<IfcSphere,1>::Construct )
852 , SchemaEntry("ifcrelassociatesappliedvalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
853 , SchemaEntry("ifcdampertype",&STEP::ObjectHelper<IfcDamperType,1>::Construct )
854 , SchemaEntry("ifcprojectorderrecord",&STEP::ObjectHelper<IfcProjectOrderRecord,2>::Construct )
855 , SchemaEntry("ifcdimensionalexponents",&STEP::ObjectHelper<NotImplemented,0>::Construct )
856 , SchemaEntry("ifcreldefinesbytype",&STEP::ObjectHelper<NotImplemented,0>::Construct )
857 , SchemaEntry("ifcdistributionchamberelement",&STEP::ObjectHelper<IfcDistributionChamberElement,0>::Construct )
858 , SchemaEntry("ifcmechanicalfastener",&STEP::ObjectHelper<IfcMechanicalFastener,2>::Construct )
859 , SchemaEntry("ifcquantityvolume",&STEP::ObjectHelper<NotImplemented,0>::Construct )
860 , SchemaEntry("ifcrectangulartrimmedsurface",&STEP::ObjectHelper<IfcRectangularTrimmedSurface,7>::Construct )
861 , SchemaEntry("ifcdateandtime",&STEP::ObjectHelper<NotImplemented,0>::Construct )
862 , SchemaEntry("ifczone",&STEP::ObjectHelper<IfcZone,0>::Construct )
863 , SchemaEntry("ifcfantype",&STEP::ObjectHelper<IfcFanType,1>::Construct )
864 , SchemaEntry("ifcgeometricset",&STEP::ObjectHelper<IfcGeometricSet,1>::Construct )
865 , SchemaEntry("ifcfillareastyletiles",&STEP::ObjectHelper<IfcFillAreaStyleTiles,3>::Construct )
866 , SchemaEntry("ifcpixeltexture",&STEP::ObjectHelper<NotImplemented,0>::Construct )
867 , SchemaEntry("ifccablesegmenttype",&STEP::ObjectHelper<IfcCableSegmentType,1>::Construct )
868 , SchemaEntry("ifcreloverridesproperties",&STEP::ObjectHelper<IfcRelOverridesProperties,1>::Construct )
869 , SchemaEntry("ifcmeasurewithunit",&STEP::ObjectHelper<IfcMeasureWithUnit,2>::Construct )
870 , SchemaEntry("ifcslabtype",&STEP::ObjectHelper<IfcSlabType,1>::Construct )
871 , SchemaEntry("ifcservicelife",&STEP::ObjectHelper<IfcServiceLife,2>::Construct )
872 , SchemaEntry("ifcfurnituretype",&STEP::ObjectHelper<IfcFurnitureType,1>::Construct )
873 , SchemaEntry("ifccostitem",&STEP::ObjectHelper<IfcCostItem,0>::Construct )
874 , SchemaEntry("ifcreinforcingmesh",&STEP::ObjectHelper<IfcReinforcingMesh,8>::Construct )
875 , SchemaEntry("ifcextendedmaterialproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
876 , SchemaEntry("ifcactorrole",&STEP::ObjectHelper<NotImplemented,0>::Construct )
877 , SchemaEntry("ifcfacetedbrepwithvoids",&STEP::ObjectHelper<IfcFacetedBrepWithVoids,1>::Construct )
878 , SchemaEntry("ifcconstraintaggregationrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
879 , SchemaEntry("ifcgasterminaltype",&STEP::ObjectHelper<IfcGasTerminalType,1>::Construct )
880 , SchemaEntry("ifcrelconnectswitheccentricity",&STEP::ObjectHelper<NotImplemented,0>::Construct )
881 , SchemaEntry("ifcpile",&STEP::ObjectHelper<IfcPile,2>::Construct )
882 , SchemaEntry("ifcfillareastyletilesymbolwithstyle",&STEP::ObjectHelper<IfcFillAreaStyleTileSymbolWithStyle,1>::Construct )
753883 , SchemaEntry("ifcelectricalbaseproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
754 , SchemaEntry("ifcpredefinedpointmarkersymbol",&STEP::ObjectHelper<NotImplemented,0>::Construct )
755 , SchemaEntry("ifctanktype",&STEP::ObjectHelper<IfcTankType,1>::Construct )
884 , SchemaEntry("ifcconstructionmaterialresource",&STEP::ObjectHelper<IfcConstructionMaterialResource,2>::Construct )
885 , SchemaEntry("ifcannotationcurveoccurrence",&STEP::ObjectHelper<IfcAnnotationCurveOccurrence,0>::Construct )
886 , SchemaEntry("ifcdimensioncurve",&STEP::ObjectHelper<IfcDimensionCurve,0>::Construct )
887 , SchemaEntry("ifcgeometriccurveset",&STEP::ObjectHelper<IfcGeometricCurveSet,0>::Construct )
888 , SchemaEntry("ifcrelaggregates",&STEP::ObjectHelper<IfcRelAggregates,0>::Construct )
889 , SchemaEntry("ifcfacebasedsurfacemodel",&STEP::ObjectHelper<IfcFaceBasedSurfaceModel,1>::Construct )
890 , SchemaEntry("ifcenergyconversiondevice",&STEP::ObjectHelper<IfcEnergyConversionDevice,0>::Construct )
891 , SchemaEntry("ifcrampflight",&STEP::ObjectHelper<IfcRampFlight,0>::Construct )
892 , SchemaEntry("ifcpropertyenumeration",&STEP::ObjectHelper<NotImplemented,0>::Construct )
893 , SchemaEntry("ifcvertexloop",&STEP::ObjectHelper<IfcVertexLoop,1>::Construct )
894 , SchemaEntry("ifcplate",&STEP::ObjectHelper<IfcPlate,0>::Construct )
895 , SchemaEntry("ifcushapeprofiledef",&STEP::ObjectHelper<IfcUShapeProfileDef,8>::Construct )
896 , SchemaEntry("ifchygroscopicmaterialproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
897 , SchemaEntry("ifcfacebound",&STEP::ObjectHelper<IfcFaceBound,2>::Construct )
898 , SchemaEntry("ifcfaceouterbound",&STEP::ObjectHelper<IfcFaceOuterBound,0>::Construct )
899 , SchemaEntry("ifconedirectionrepeatfactor",&STEP::ObjectHelper<IfcOneDirectionRepeatFactor,1>::Construct )
900 , SchemaEntry("ifcboilertype",&STEP::ObjectHelper<IfcBoilerType,1>::Construct )
901 , SchemaEntry("ifcconstructionequipmentresource",&STEP::ObjectHelper<IfcConstructionEquipmentResource,0>::Construct )
902 , SchemaEntry("ifccomplexproperty",&STEP::ObjectHelper<IfcComplexProperty,2>::Construct )
903 , SchemaEntry("ifcfooting",&STEP::ObjectHelper<IfcFooting,1>::Construct )
904 , SchemaEntry("ifcopticalmaterialproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
905 , SchemaEntry("ifcconstructionproductresource",&STEP::ObjectHelper<IfcConstructionProductResource,0>::Construct )
906 , SchemaEntry("ifcboundaryedgecondition",&STEP::ObjectHelper<NotImplemented,0>::Construct )
907 , SchemaEntry("ifcderivedprofiledef",&STEP::ObjectHelper<IfcDerivedProfileDef,3>::Construct )
908 , SchemaEntry("ifcpropertytablevalue",&STEP::ObjectHelper<IfcPropertyTableValue,5>::Construct )
909 , SchemaEntry("ifcrelassignstogroup",&STEP::ObjectHelper<NotImplemented,0>::Construct )
910 , SchemaEntry("ifcflowmetertype",&STEP::ObjectHelper<IfcFlowMeterType,1>::Construct )
911 , SchemaEntry("ifcdoorstyle",&STEP::ObjectHelper<IfcDoorStyle,4>::Construct )
912 , SchemaEntry("ifcrelconnectsporttoelement",&STEP::ObjectHelper<NotImplemented,0>::Construct )
913 , SchemaEntry("ifcrelassociatesclassification",&STEP::ObjectHelper<NotImplemented,0>::Construct )
914 , SchemaEntry("ifcunitassignment",&STEP::ObjectHelper<IfcUnitAssignment,1>::Construct )
915 , SchemaEntry("ifcflowterminal",&STEP::ObjectHelper<IfcFlowTerminal,0>::Construct )
916 , SchemaEntry("ifccranerailfshapeprofiledef",&STEP::ObjectHelper<IfcCraneRailFShapeProfileDef,9>::Construct )
917 , SchemaEntry("ifcflowsegment",&STEP::ObjectHelper<IfcFlowSegment,0>::Construct )
918 , SchemaEntry("ifcelementquantity",&STEP::ObjectHelper<IfcElementQuantity,2>::Construct )
756919 , SchemaEntry("ifcboundarynodecondition",&STEP::ObjectHelper<NotImplemented,0>::Construct )
757920 , SchemaEntry("ifcboundarynodeconditionwarping",&STEP::ObjectHelper<NotImplemented,0>::Construct )
758 , SchemaEntry("ifcrelassignstogroup",&STEP::ObjectHelper<NotImplemented,0>::Construct )
759 , SchemaEntry("ifcpresentationlayerassignment",&STEP::ObjectHelper<NotImplemented,0>::Construct )
760 , SchemaEntry("ifcsphere",&STEP::ObjectHelper<IfcSphere,1>::Construct )
761 , SchemaEntry("ifcpolyloop",&STEP::ObjectHelper<IfcPolyLoop,1>::Construct )
762 , SchemaEntry("ifccablecarrierfittingtype",&STEP::ObjectHelper<IfcCableCarrierFittingType,1>::Construct )
763 , SchemaEntry("ifchumidifiertype",&STEP::ObjectHelper<IfcHumidifierType,1>::Construct )
764 , SchemaEntry("ifcpropertylistvalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
765 , SchemaEntry("ifcpropertyconstraintrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
766 , SchemaEntry("ifcperformancehistory",&STEP::ObjectHelper<IfcPerformanceHistory,1>::Construct )
767 , SchemaEntry("ifcshapemodel",&STEP::ObjectHelper<IfcShapeModel,0>::Construct )
768 , SchemaEntry("ifctopologyrepresentation",&STEP::ObjectHelper<IfcTopologyRepresentation,0>::Construct )
769 , SchemaEntry("ifcbuilding",&STEP::ObjectHelper<IfcBuilding,3>::Construct )
770 , SchemaEntry("ifcroundedrectangleprofiledef",&STEP::ObjectHelper<IfcRoundedRectangleProfileDef,1>::Construct )
921 , SchemaEntry("ifccurtainwall",&STEP::ObjectHelper<IfcCurtainWall,0>::Construct )
922 , SchemaEntry("ifcdiscreteaccessory",&STEP::ObjectHelper<IfcDiscreteAccessory,0>::Construct )
923 , SchemaEntry("ifcgrid",&STEP::ObjectHelper<IfcGrid,3>::Construct )
924 , SchemaEntry("ifcsanitaryterminaltype",&STEP::ObjectHelper<IfcSanitaryTerminalType,1>::Construct )
925 , SchemaEntry("ifcsoundproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
926 , SchemaEntry("ifcsubedge",&STEP::ObjectHelper<IfcSubedge,1>::Construct )
927 , SchemaEntry("ifctextstyletextmodel",&STEP::ObjectHelper<NotImplemented,0>::Construct )
928 , SchemaEntry("ifcfiltertype",&STEP::ObjectHelper<IfcFilterType,1>::Construct )
929 , SchemaEntry("ifcsymbolstyle",&STEP::ObjectHelper<NotImplemented,0>::Construct )
930 , SchemaEntry("ifctendon",&STEP::ObjectHelper<IfcTendon,8>::Construct )
931 , SchemaEntry("ifcdimensionpair",&STEP::ObjectHelper<NotImplemented,0>::Construct )
932 , SchemaEntry("ifcstructuralloadgroup",&STEP::ObjectHelper<IfcStructuralLoadGroup,5>::Construct )
933 , SchemaEntry("ifcpresentationstyleassignment",&STEP::ObjectHelper<IfcPresentationStyleAssignment,1>::Construct )
934 , SchemaEntry("ifcregulartimeseries",&STEP::ObjectHelper<NotImplemented,0>::Construct )
935 , SchemaEntry("ifcstructuralcurvemember",&STEP::ObjectHelper<IfcStructuralCurveMember,1>::Construct )
936 , SchemaEntry("ifclightsourceambient",&STEP::ObjectHelper<IfcLightSourceAmbient,0>::Construct )
937 , SchemaEntry("ifccondition",&STEP::ObjectHelper<IfcCondition,0>::Construct )
938 , SchemaEntry("ifcport",&STEP::ObjectHelper<IfcPort,0>::Construct )
939 , SchemaEntry("ifcspace",&STEP::ObjectHelper<IfcSpace,2>::Construct )
940 , SchemaEntry("ifcheatexchangertype",&STEP::ObjectHelper<IfcHeatExchangerType,1>::Construct )
941 , SchemaEntry("ifctanktype",&STEP::ObjectHelper<IfcTankType,1>::Construct )
942 , SchemaEntry("ifcinventory",&STEP::ObjectHelper<IfcInventory,6>::Construct )
943 , SchemaEntry("ifctextstyle",&STEP::ObjectHelper<NotImplemented,0>::Construct )
944 , SchemaEntry("ifcappliedvaluerelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
945 , SchemaEntry("ifcsoundvalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
946 , SchemaEntry("ifctransportelementtype",&STEP::ObjectHelper<IfcTransportElementType,1>::Construct )
947 , SchemaEntry("ifcairtoairheatrecoverytype",&STEP::ObjectHelper<IfcAirToAirHeatRecoveryType,1>::Construct )
771948 , SchemaEntry("ifcstairflight",&STEP::ObjectHelper<IfcStairFlight,4>::Construct )
772 , SchemaEntry("ifcsurfacestylerefraction",&STEP::ObjectHelper<NotImplemented,0>::Construct )
773 , SchemaEntry("ifcrelinteractionrequirements",&STEP::ObjectHelper<NotImplemented,0>::Construct )
774 , SchemaEntry("ifcconstraint",&STEP::ObjectHelper<NotImplemented,0>::Construct )
775 , SchemaEntry("ifcobjective",&STEP::ObjectHelper<NotImplemented,0>::Construct )
949 , SchemaEntry("ifcelectricalelement",&STEP::ObjectHelper<IfcElectricalElement,0>::Construct )
950 , SchemaEntry("ifclightintensitydistribution",&STEP::ObjectHelper<NotImplemented,0>::Construct )
951 , SchemaEntry("ifcclassificationreference",&STEP::ObjectHelper<NotImplemented,0>::Construct )
952 , SchemaEntry("ifcsurfacestylewithtextures",&STEP::ObjectHelper<IfcSurfaceStyleWithTextures,1>::Construct )
953 , SchemaEntry("ifcboundingbox",&STEP::ObjectHelper<IfcBoundingBox,4>::Construct )
954 , SchemaEntry("ifcapplication",&STEP::ObjectHelper<NotImplemented,0>::Construct )
955 , SchemaEntry("ifcwalltype",&STEP::ObjectHelper<IfcWallType,1>::Construct )
956 , SchemaEntry("ifcmove",&STEP::ObjectHelper<IfcMove,3>::Construct )
957 , SchemaEntry("ifccircle",&STEP::ObjectHelper<IfcCircle,1>::Construct )
958 , SchemaEntry("ifcoffsetcurve2d",&STEP::ObjectHelper<IfcOffsetCurve2D,3>::Construct )
959 , SchemaEntry("ifcmateriallayersetusage",&STEP::ObjectHelper<NotImplemented,0>::Construct )
960 , SchemaEntry("ifcpointoncurve",&STEP::ObjectHelper<IfcPointOnCurve,2>::Construct )
961 , SchemaEntry("ifcstructuralresultgroup",&STEP::ObjectHelper<IfcStructuralResultGroup,3>::Construct )
962 , SchemaEntry("ifcsectionedspine",&STEP::ObjectHelper<IfcSectionedSpine,3>::Construct )
963 , SchemaEntry("ifcslab",&STEP::ObjectHelper<IfcSlab,1>::Construct )
776964 , SchemaEntry("ifcconnectionportgeometry",&STEP::ObjectHelper<NotImplemented,0>::Construct )
777 , SchemaEntry("ifcdistributionchamberelement",&STEP::ObjectHelper<IfcDistributionChamberElement,0>::Construct )
965 , SchemaEntry("ifcquantityweight",&STEP::ObjectHelper<NotImplemented,0>::Construct )
966 , SchemaEntry("ifcrelassociatesmaterial",&STEP::ObjectHelper<NotImplemented,0>::Construct )
967 , SchemaEntry("ifcvertex",&STEP::ObjectHelper<IfcVertex,0>::Construct )
968 , SchemaEntry("ifcvertexpoint",&STEP::ObjectHelper<IfcVertexPoint,1>::Construct )
969 , SchemaEntry("ifcreferencesvaluedocument",&STEP::ObjectHelper<NotImplemented,0>::Construct )
778970 , SchemaEntry("ifcpersonandorganization",&STEP::ObjectHelper<NotImplemented,0>::Construct )
779 , SchemaEntry("ifcshaperepresentation",&STEP::ObjectHelper<IfcShapeRepresentation,0>::Construct )
780 , SchemaEntry("ifcrampflight",&STEP::ObjectHelper<IfcRampFlight,0>::Construct )
781 , SchemaEntry("ifcbeamtype",&STEP::ObjectHelper<IfcBeamType,1>::Construct )
782 , SchemaEntry("ifcreldecomposes",&STEP::ObjectHelper<IfcRelDecomposes,2>::Construct )
783 , SchemaEntry("ifcroof",&STEP::ObjectHelper<IfcRoof,1>::Construct )
784 , SchemaEntry("ifcfooting",&STEP::ObjectHelper<IfcFooting,1>::Construct )
785 , SchemaEntry("ifcrelcoversspaces",&STEP::ObjectHelper<NotImplemented,0>::Construct )
786 , SchemaEntry("ifclightsourceambient",&STEP::ObjectHelper<IfcLightSourceAmbient,0>::Construct )
787 , SchemaEntry("ifctimeseriesvalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
788 , SchemaEntry("ifcwindowstyle",&STEP::ObjectHelper<IfcWindowStyle,4>::Construct )
789 , SchemaEntry("ifcpropertyreferencevalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
790 , SchemaEntry("ifcapproval",&STEP::ObjectHelper<NotImplemented,0>::Construct )
791 , SchemaEntry("ifcrelconnectsstructuralelement",&STEP::ObjectHelper<NotImplemented,0>::Construct )
792 , SchemaEntry("ifcbuildingelementproxytype",&STEP::ObjectHelper<IfcBuildingElementProxyType,1>::Construct )
793 , SchemaEntry("ifcrelassociatesprofileproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
794 , SchemaEntry("ifcaxis2placement3d",&STEP::ObjectHelper<IfcAxis2Placement3D,2>::Construct )
795 , SchemaEntry("ifcrelconnectsports",&STEP::ObjectHelper<NotImplemented,0>::Construct )
796 , SchemaEntry("ifcedgecurve",&STEP::ObjectHelper<IfcEdgeCurve,2>::Construct )
797 , SchemaEntry("ifcclosedshell",&STEP::ObjectHelper<IfcClosedShell,0>::Construct )
798 , SchemaEntry("ifctendonanchor",&STEP::ObjectHelper<IfcTendonAnchor,0>::Construct )
799 , SchemaEntry("ifccondensertype",&STEP::ObjectHelper<IfcCondenserType,1>::Construct )
800 , SchemaEntry("ifcquantitytime",&STEP::ObjectHelper<NotImplemented,0>::Construct )
801 , SchemaEntry("ifcsurfacetexture",&STEP::ObjectHelper<NotImplemented,0>::Construct )
802 , SchemaEntry("ifcpixeltexture",&STEP::ObjectHelper<NotImplemented,0>::Construct )
803 , SchemaEntry("ifcstructuralconnectioncondition",&STEP::ObjectHelper<NotImplemented,0>::Construct )
804 , SchemaEntry("ifcfailureconnectioncondition",&STEP::ObjectHelper<NotImplemented,0>::Construct )
805 , SchemaEntry("ifcdocumentreference",&STEP::ObjectHelper<NotImplemented,0>::Construct )
806 , SchemaEntry("ifcmechanicalsteelmaterialproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
807 , SchemaEntry("ifcpipesegmenttype",&STEP::ObjectHelper<IfcPipeSegmentType,1>::Construct )
808 , SchemaEntry("ifcpointonsurface",&STEP::ObjectHelper<IfcPointOnSurface,3>::Construct )
809 , SchemaEntry("ifctable",&STEP::ObjectHelper<NotImplemented,0>::Construct )
810 , SchemaEntry("ifclightdistributiondata",&STEP::ObjectHelper<NotImplemented,0>::Construct )
811 , SchemaEntry("ifcpropertytablevalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
812 , SchemaEntry("ifcpresentationlayerwithstyle",&STEP::ObjectHelper<NotImplemented,0>::Construct )
813 , SchemaEntry("ifcasset",&STEP::ObjectHelper<IfcAsset,9>::Construct )
814 , SchemaEntry("ifclightsourcepositional",&STEP::ObjectHelper<IfcLightSourcePositional,5>::Construct )
815 , SchemaEntry("ifclibraryinformation",&STEP::ObjectHelper<NotImplemented,0>::Construct )
816 , SchemaEntry("ifctextstyletextmodel",&STEP::ObjectHelper<NotImplemented,0>::Construct )
817 , SchemaEntry("ifcprojectioncurve",&STEP::ObjectHelper<IfcProjectionCurve,0>::Construct )
818 , SchemaEntry("ifcfillareastyletiles",&STEP::ObjectHelper<IfcFillAreaStyleTiles,3>::Construct )
819 , SchemaEntry("ifcrelfillselement",&STEP::ObjectHelper<IfcRelFillsElement,2>::Construct )
820 , SchemaEntry("ifcelectricmotortype",&STEP::ObjectHelper<IfcElectricMotorType,1>::Construct )
821 , SchemaEntry("ifctendon",&STEP::ObjectHelper<IfcTendon,8>::Construct )
822 , SchemaEntry("ifcdistributionchamberelementtype",&STEP::ObjectHelper<IfcDistributionChamberElementType,1>::Construct )
823 , SchemaEntry("ifcmembertype",&STEP::ObjectHelper<IfcMemberType,1>::Construct )
971 , SchemaEntry("ifcrelflowcontrolelements",&STEP::ObjectHelper<NotImplemented,0>::Construct )
972 , SchemaEntry("ifcrelassignstoprocess",&STEP::ObjectHelper<NotImplemented,0>::Construct )
824973 , SchemaEntry("ifcstructurallinearaction",&STEP::ObjectHelper<IfcStructuralLinearAction,1>::Construct )
825974 , SchemaEntry("ifcstructurallinearactionvarying",&STEP::ObjectHelper<IfcStructuralLinearActionVarying,2>::Construct )
975 , SchemaEntry("ifcbuildingelementproxytype",&STEP::ObjectHelper<IfcBuildingElementProxyType,1>::Construct )
976 , SchemaEntry("ifcprojectionelement",&STEP::ObjectHelper<IfcProjectionElement,0>::Construct )
977 , SchemaEntry("ifcderivedunit",&STEP::ObjectHelper<NotImplemented,0>::Construct )
978 , SchemaEntry("ifcapprovalactorrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
979 , SchemaEntry("ifcconversionbasedunit",&STEP::ObjectHelper<IfcConversionBasedUnit,2>::Construct )
980 , SchemaEntry("ifcmaterial",&STEP::ObjectHelper<NotImplemented,0>::Construct )
981 , SchemaEntry("ifcgeometricrepresentationsubcontext",&STEP::ObjectHelper<IfcGeometricRepresentationSubContext,4>::Construct )
982 , SchemaEntry("ifcannotationsurfaceoccurrence",&STEP::ObjectHelper<IfcAnnotationSurfaceOccurrence,0>::Construct )
983 , SchemaEntry("ifcpredefineddimensionsymbol",&STEP::ObjectHelper<NotImplemented,0>::Construct )
984 , SchemaEntry("ifcroundededgefeature",&STEP::ObjectHelper<IfcRoundedEdgeFeature,1>::Construct )
985 , SchemaEntry("ifcrelcoversbldgelements",&STEP::ObjectHelper<NotImplemented,0>::Construct )
986 , SchemaEntry("ifcelectricdistributionpoint",&STEP::ObjectHelper<IfcElectricDistributionPoint,2>::Construct )
987 , SchemaEntry("ifccablecarriersegmenttype",&STEP::ObjectHelper<IfcCableCarrierSegmentType,1>::Construct )
988 , SchemaEntry("ifcstructuralloadlinearforce",&STEP::ObjectHelper<NotImplemented,0>::Construct )
989 , SchemaEntry("ifcgridaxis",&STEP::ObjectHelper<NotImplemented,0>::Construct )
990 , SchemaEntry("ifcirregulartimeseriesvalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
991 , SchemaEntry("ifcwallstandardcase",&STEP::ObjectHelper<IfcWallStandardCase,0>::Construct )
992 , SchemaEntry("ifcreloccupiesspaces",&STEP::ObjectHelper<NotImplemented,0>::Construct )
993 , SchemaEntry("ifcderivedunitelement",&STEP::ObjectHelper<NotImplemented,0>::Construct )
994 , SchemaEntry("ifccsgsolid",&STEP::ObjectHelper<IfcCsgSolid,1>::Construct )
995 , SchemaEntry("ifcbeamtype",&STEP::ObjectHelper<IfcBeamType,1>::Construct )
996 , SchemaEntry("ifcannotationfillarea",&STEP::ObjectHelper<IfcAnnotationFillArea,2>::Construct )
997 , SchemaEntry("ifcrelaxation",&STEP::ObjectHelper<NotImplemented,0>::Construct )
998 , SchemaEntry("ifcstructuralcurvemembervarying",&STEP::ObjectHelper<IfcStructuralCurveMemberVarying,0>::Construct )
999 , SchemaEntry("ifcpointonsurface",&STEP::ObjectHelper<IfcPointOnSurface,3>::Construct )
1000 , SchemaEntry("ifcpropertydependencyrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1001 , SchemaEntry("ifcvertexbasedtexturemap",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1002 , SchemaEntry("ifcorderaction",&STEP::ObjectHelper<IfcOrderAction,1>::Construct )
1003 , SchemaEntry("ifclibraryreference",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1004 , SchemaEntry("ifcedgeloop",&STEP::ObjectHelper<IfcEdgeLoop,1>::Construct )
1005 , SchemaEntry("ifcannotationfillareaoccurrence",&STEP::ObjectHelper<IfcAnnotationFillAreaOccurrence,2>::Construct )
1006 , SchemaEntry("ifcrelconnectsstructuralelement",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1007 , SchemaEntry("ifcworkplan",&STEP::ObjectHelper<IfcWorkPlan,0>::Construct )
1008 , SchemaEntry("ifcellipse",&STEP::ObjectHelper<IfcEllipse,2>::Construct )
8261009 , SchemaEntry("ifcproductdefinitionshape",&STEP::ObjectHelper<IfcProductDefinitionShape,0>::Construct )
827 , SchemaEntry("ifcfastener",&STEP::ObjectHelper<IfcFastener,0>::Construct )
828 , SchemaEntry("ifcmechanicalfastener",&STEP::ObjectHelper<IfcMechanicalFastener,2>::Construct )
829 , SchemaEntry("ifcfuelproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
830 , SchemaEntry("ifcevaporatortype",&STEP::ObjectHelper<IfcEvaporatorType,1>::Construct )
831 , SchemaEntry("ifcmateriallayersetusage",&STEP::ObjectHelper<NotImplemented,0>::Construct )
832 , SchemaEntry("ifcdiscreteaccessorytype",&STEP::ObjectHelper<IfcDiscreteAccessoryType,0>::Construct )
833 , SchemaEntry("ifcstructuralcurveconnection",&STEP::ObjectHelper<IfcStructuralCurveConnection,0>::Construct )
834 , SchemaEntry("ifcprojectionelement",&STEP::ObjectHelper<IfcProjectionElement,0>::Construct )
1010 , SchemaEntry("ifcprojectioncurve",&STEP::ObjectHelper<IfcProjectionCurve,0>::Construct )
1011 , SchemaEntry("ifcelectricalcircuit",&STEP::ObjectHelper<IfcElectricalCircuit,0>::Construct )
1012 , SchemaEntry("ifcrationalbeziercurve",&STEP::ObjectHelper<IfcRationalBezierCurve,1>::Construct )
1013 , SchemaEntry("ifcstructuralpointaction",&STEP::ObjectHelper<IfcStructuralPointAction,0>::Construct )
1014 , SchemaEntry("ifcservicelifefactor",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1015 , SchemaEntry("ifcthermalmaterialproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1016 , SchemaEntry("ifctexturecoordinategenerator",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1017 , SchemaEntry("ifcpipesegmenttype",&STEP::ObjectHelper<IfcPipeSegmentType,1>::Construct )
1018 , SchemaEntry("ifctwodirectionrepeatfactor",&STEP::ObjectHelper<IfcTwoDirectionRepeatFactor,1>::Construct )
1019 , SchemaEntry("ifcshaperepresentation",&STEP::ObjectHelper<IfcShapeRepresentation,0>::Construct )
1020 , SchemaEntry("ifcpropertyset",&STEP::ObjectHelper<IfcPropertySet,1>::Construct )
1021 , SchemaEntry("ifcsurfacestylerendering",&STEP::ObjectHelper<IfcSurfaceStyleRendering,8>::Construct )
1022 , SchemaEntry("ifcdistributionport",&STEP::ObjectHelper<IfcDistributionPort,1>::Construct )
8351023 , SchemaEntry("ifcimagetexture",&STEP::ObjectHelper<NotImplemented,0>::Construct )
836 , SchemaEntry("ifccoveringtype",&STEP::ObjectHelper<IfcCoveringType,1>::Construct )
837 , SchemaEntry("ifcrelassociatesappliedvalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
838 , SchemaEntry("ifcpumptype",&STEP::ObjectHelper<IfcPumpType,1>::Construct )
839 , SchemaEntry("ifcpile",&STEP::ObjectHelper<IfcPile,2>::Construct )
840 , SchemaEntry("ifcunitassignment",&STEP::ObjectHelper<IfcUnitAssignment,1>::Construct )
841 , SchemaEntry("ifcboundingbox",&STEP::ObjectHelper<IfcBoundingBox,4>::Construct )
842 , SchemaEntry("ifcshellbasedsurfacemodel",&STEP::ObjectHelper<IfcShellBasedSurfaceModel,1>::Construct )
843 , SchemaEntry("ifcfacetedbrep",&STEP::ObjectHelper<IfcFacetedBrep,0>::Construct )
844 , SchemaEntry("ifctextliteralwithextent",&STEP::ObjectHelper<IfcTextLiteralWithExtent,2>::Construct )
845 , SchemaEntry("ifcapplication",&STEP::ObjectHelper<NotImplemented,0>::Construct )
846 , SchemaEntry("ifcextendedmaterialproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
847 , SchemaEntry("ifcelectricappliancetype",&STEP::ObjectHelper<IfcElectricApplianceType,1>::Construct )
848 , SchemaEntry("ifcreloccupiesspaces",&STEP::ObjectHelper<NotImplemented,0>::Construct )
849 , SchemaEntry("ifctrapeziumprofiledef",&STEP::ObjectHelper<IfcTrapeziumProfileDef,4>::Construct )
850 , SchemaEntry("ifcquantityweight",&STEP::ObjectHelper<NotImplemented,0>::Construct )
851 , SchemaEntry("ifcrelcontainedinspatialstructure",&STEP::ObjectHelper<IfcRelContainedInSpatialStructure,2>::Construct )
852 , SchemaEntry("ifcedgeloop",&STEP::ObjectHelper<IfcEdgeLoop,1>::Construct )
853 , SchemaEntry("ifcproject",&STEP::ObjectHelper<IfcProject,4>::Construct )
854 , SchemaEntry("ifccartesianpoint",&STEP::ObjectHelper<IfcCartesianPoint,1>::Construct )
855 , SchemaEntry("ifcmaterial",&STEP::ObjectHelper<NotImplemented,0>::Construct )
856 , SchemaEntry("ifccurveboundedplane",&STEP::ObjectHelper<IfcCurveBoundedPlane,3>::Construct )
857 , SchemaEntry("ifcwalltype",&STEP::ObjectHelper<IfcWallType,1>::Construct )
858 , SchemaEntry("ifcfillareastylehatching",&STEP::ObjectHelper<IfcFillAreaStyleHatching,5>::Construct )
859 , SchemaEntry("ifcequipmentstandard",&STEP::ObjectHelper<IfcEquipmentStandard,0>::Construct )
860 , SchemaEntry("ifchygroscopicmaterialproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
861 , SchemaEntry("ifcdoorpanelproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
862 , SchemaEntry("ifcdiameterdimension",&STEP::ObjectHelper<IfcDiameterDimension,0>::Construct )
863 , SchemaEntry("ifcstructuralloadgroup",&STEP::ObjectHelper<IfcStructuralLoadGroup,5>::Construct )
864 , SchemaEntry("ifctelecomaddress",&STEP::ObjectHelper<NotImplemented,0>::Construct )
865 , SchemaEntry("ifcconstructionmaterialresource",&STEP::ObjectHelper<IfcConstructionMaterialResource,2>::Construct )
866 , SchemaEntry("ifcblobtexture",&STEP::ObjectHelper<NotImplemented,0>::Construct )
867 , SchemaEntry("ifcirregulartimeseriesvalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
868 , SchemaEntry("ifcrelaggregates",&STEP::ObjectHelper<IfcRelAggregates,0>::Construct )
869 , SchemaEntry("ifcboilertype",&STEP::ObjectHelper<IfcBoilerType,1>::Construct )
870 , SchemaEntry("ifcrelprojectselement",&STEP::ObjectHelper<NotImplemented,0>::Construct )
871 , SchemaEntry("ifccolourspecification",&STEP::ObjectHelper<IfcColourSpecification,1>::Construct )
872 , SchemaEntry("ifccolourrgb",&STEP::ObjectHelper<IfcColourRgb,3>::Construct )
873 , SchemaEntry("ifcrelconnectsstructuralactivity",&STEP::ObjectHelper<NotImplemented,0>::Construct )
874 , SchemaEntry("ifcdoorstyle",&STEP::ObjectHelper<IfcDoorStyle,4>::Construct )
875 , SchemaEntry("ifcstructuralloadsingledisplacementdistortion",&STEP::ObjectHelper<NotImplemented,0>::Construct )
876 , SchemaEntry("ifcrelassignstoprocess",&STEP::ObjectHelper<NotImplemented,0>::Construct )
877 , SchemaEntry("ifcductsilencertype",&STEP::ObjectHelper<IfcDuctSilencerType,1>::Construct )
878 , SchemaEntry("ifclightsourcegoniometric",&STEP::ObjectHelper<IfcLightSourceGoniometric,6>::Construct )
879 , SchemaEntry("ifcactuatortype",&STEP::ObjectHelper<IfcActuatorType,1>::Construct )
880 , SchemaEntry("ifcsensortype",&STEP::ObjectHelper<IfcSensorType,1>::Construct )
881 , SchemaEntry("ifcairterminalboxtype",&STEP::ObjectHelper<IfcAirTerminalBoxType,1>::Construct )
882 , SchemaEntry("ifcannotationsurfaceoccurrence",&STEP::ObjectHelper<IfcAnnotationSurfaceOccurrence,0>::Construct )
883 , SchemaEntry("ifczshapeprofiledef",&STEP::ObjectHelper<IfcZShapeProfileDef,6>::Construct )
884 , SchemaEntry("ifcclassificationnotation",&STEP::ObjectHelper<NotImplemented,0>::Construct )
885 , SchemaEntry("ifcrationalbeziercurve",&STEP::ObjectHelper<IfcRationalBezierCurve,1>::Construct )
886 , SchemaEntry("ifccartesiantransformationoperator2d",&STEP::ObjectHelper<IfcCartesianTransformationOperator2D,0>::Construct )
887 , SchemaEntry("ifccartesiantransformationoperator2dnonuniform",&STEP::ObjectHelper<IfcCartesianTransformationOperator2DnonUniform,1>::Construct )
888 , SchemaEntry("ifcmove",&STEP::ObjectHelper<IfcMove,3>::Construct )
889 , SchemaEntry("ifcboundaryedgecondition",&STEP::ObjectHelper<NotImplemented,0>::Construct )
890 , SchemaEntry("ifcdoorliningproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
891 , SchemaEntry("ifccablecarriersegmenttype",&STEP::ObjectHelper<IfcCableCarrierSegmentType,1>::Construct )
892 , SchemaEntry("ifcpostaladdress",&STEP::ObjectHelper<NotImplemented,0>::Construct )
893 , SchemaEntry("ifcrelconnectspathelements",&STEP::ObjectHelper<NotImplemented,0>::Construct )
894 , SchemaEntry("ifcelectricalelement",&STEP::ObjectHelper<IfcElectricalElement,0>::Construct )
895 , SchemaEntry("ifcownerhistory",&STEP::ObjectHelper<NotImplemented,0>::Construct )
896 , SchemaEntry("ifcstructuralloadtemperature",&STEP::ObjectHelper<NotImplemented,0>::Construct )
897 , SchemaEntry("ifctextstylewithboxcharacteristics",&STEP::ObjectHelper<NotImplemented,0>::Construct )
898 , SchemaEntry("ifcchillertype",&STEP::ObjectHelper<IfcChillerType,1>::Construct )
899 , SchemaEntry("ifcrelschedulescostitems",&STEP::ObjectHelper<NotImplemented,0>::Construct )
900 , SchemaEntry("ifcreinforcingbar",&STEP::ObjectHelper<IfcReinforcingBar,5>::Construct )
901 , SchemaEntry("ifccurrencyrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
902 , SchemaEntry("ifcsoundvalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
903 , SchemaEntry("ifccshapeprofiledef",&STEP::ObjectHelper<IfcCShapeProfileDef,6>::Construct )
904 , SchemaEntry("ifcpermit",&STEP::ObjectHelper<IfcPermit,1>::Construct )
905 , SchemaEntry("ifcslabtype",&STEP::ObjectHelper<IfcSlabType,1>::Construct )
906 , SchemaEntry("ifcslippageconnectioncondition",&STEP::ObjectHelper<NotImplemented,0>::Construct )
907 , SchemaEntry("ifclamptype",&STEP::ObjectHelper<IfcLampType,1>::Construct )
908 , SchemaEntry("ifcplanarextent",&STEP::ObjectHelper<IfcPlanarExtent,2>::Construct )
909 , SchemaEntry("ifcalarmtype",&STEP::ObjectHelper<IfcAlarmType,1>::Construct )
910 , SchemaEntry("ifcdocumentelectronicformat",&STEP::ObjectHelper<NotImplemented,0>::Construct )
911 , SchemaEntry("ifcelectricflowstoragedevicetype",&STEP::ObjectHelper<IfcElectricFlowStorageDeviceType,1>::Construct )
912 , SchemaEntry("ifcequipmentelement",&STEP::ObjectHelper<IfcEquipmentElement,0>::Construct )
913 , SchemaEntry("ifclightfixturetype",&STEP::ObjectHelper<IfcLightFixtureType,1>::Construct )
914 , SchemaEntry("ifcmetric",&STEP::ObjectHelper<NotImplemented,0>::Construct )
915 , SchemaEntry("ifcrelnests",&STEP::ObjectHelper<NotImplemented,0>::Construct )
916 , SchemaEntry("ifccurtainwall",&STEP::ObjectHelper<IfcCurtainWall,0>::Construct )
917 , SchemaEntry("ifcrelassociatesdocument",&STEP::ObjectHelper<NotImplemented,0>::Construct )
918 , SchemaEntry("ifccomplexproperty",&STEP::ObjectHelper<NotImplemented,0>::Construct )
919 , SchemaEntry("ifcvertexbasedtexturemap",&STEP::ObjectHelper<NotImplemented,0>::Construct )
920 , SchemaEntry("ifcslab",&STEP::ObjectHelper<IfcSlab,1>::Construct )
921 , SchemaEntry("ifccurtainwalltype",&STEP::ObjectHelper<IfcCurtainWallType,1>::Construct )
922 , SchemaEntry("ifcoutlettype",&STEP::ObjectHelper<IfcOutletType,1>::Construct )
923 , SchemaEntry("ifccompressortype",&STEP::ObjectHelper<IfcCompressorType,1>::Construct )
924 , SchemaEntry("ifccranerailashapeprofiledef",&STEP::ObjectHelper<IfcCraneRailAShapeProfileDef,12>::Construct )
925 , SchemaEntry("ifcflowsegment",&STEP::ObjectHelper<IfcFlowSegment,0>::Construct )
926 , SchemaEntry("ifcsectionedspine",&STEP::ObjectHelper<IfcSectionedSpine,3>::Construct )
927 , SchemaEntry("ifctablerow",&STEP::ObjectHelper<NotImplemented,0>::Construct )
928 , SchemaEntry("ifcdraughtingpredefinedtextfont",&STEP::ObjectHelper<NotImplemented,0>::Construct )
929 , SchemaEntry("ifcelectrictimecontroltype",&STEP::ObjectHelper<IfcElectricTimeControlType,1>::Construct )
930 , SchemaEntry("ifcfacesurface",&STEP::ObjectHelper<IfcFaceSurface,2>::Construct )
931 , SchemaEntry("ifcmateriallist",&STEP::ObjectHelper<NotImplemented,0>::Construct )
932 , SchemaEntry("ifcmotorconnectiontype",&STEP::ObjectHelper<IfcMotorConnectionType,1>::Construct )
933 , SchemaEntry("ifcflowfitting",&STEP::ObjectHelper<IfcFlowFitting,0>::Construct )
934 , SchemaEntry("ifcpointoncurve",&STEP::ObjectHelper<IfcPointOnCurve,2>::Construct )
935 , SchemaEntry("ifctransportelementtype",&STEP::ObjectHelper<IfcTransportElementType,1>::Construct )
936 , SchemaEntry("ifcregulartimeseries",&STEP::ObjectHelper<NotImplemented,0>::Construct )
937 , SchemaEntry("ifcrelassociatesconstraint",&STEP::ObjectHelper<NotImplemented,0>::Construct )
938 , SchemaEntry("ifcpropertyenumeratedvalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
939 , SchemaEntry("ifcstructuralsteelprofileproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
940 , SchemaEntry("ifccablesegmenttype",&STEP::ObjectHelper<IfcCableSegmentType,1>::Construct )
941 , SchemaEntry("ifcexternallydefinedhatchstyle",&STEP::ObjectHelper<NotImplemented,0>::Construct )
942 , SchemaEntry("ifcannotationsurface",&STEP::ObjectHelper<IfcAnnotationSurface,2>::Construct )
943 , SchemaEntry("ifccompositecurvesegment",&STEP::ObjectHelper<IfcCompositeCurveSegment,3>::Construct )
944 , SchemaEntry("ifcservicelife",&STEP::ObjectHelper<IfcServiceLife,2>::Construct )
945 , SchemaEntry("ifcplatetype",&STEP::ObjectHelper<IfcPlateType,1>::Construct )
946 , SchemaEntry("ifccurvestyle",&STEP::ObjectHelper<NotImplemented,0>::Construct )
947 , SchemaEntry("ifcsectionproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
948 , SchemaEntry("ifcvibrationisolatortype",&STEP::ObjectHelper<IfcVibrationIsolatorType,1>::Construct )
949 , SchemaEntry("ifctexturemap",&STEP::ObjectHelper<NotImplemented,0>::Construct )
950 , SchemaEntry("ifctrimmedcurve",&STEP::ObjectHelper<IfcTrimmedCurve,5>::Construct )
951 , SchemaEntry("ifcmappeditem",&STEP::ObjectHelper<IfcMappedItem,2>::Construct )
1024 , SchemaEntry("ifcpipefittingtype",&STEP::ObjectHelper<IfcPipeFittingType,1>::Construct )
1025 , SchemaEntry("ifctransportelement",&STEP::ObjectHelper<IfcTransportElement,3>::Construct )
1026 , SchemaEntry("ifcannotationtextoccurrence",&STEP::ObjectHelper<IfcAnnotationTextOccurrence,0>::Construct )
1027 , SchemaEntry("ifcconnectionsurfacegeometry",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1028 , SchemaEntry("ifcstructuralanalysismodel",&STEP::ObjectHelper<IfcStructuralAnalysisModel,4>::Construct )
1029 , SchemaEntry("ifcconnectioncurvegeometry",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1030 , SchemaEntry("ifcconditioncriterion",&STEP::ObjectHelper<IfcConditionCriterion,2>::Construct )
1031 , SchemaEntry("ifcwaterproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
9521032 , SchemaEntry("ifcmateriallayer",&STEP::ObjectHelper<NotImplemented,0>::Construct )
953 , SchemaEntry("ifcdirection",&STEP::ObjectHelper<IfcDirection,1>::Construct )
954 , SchemaEntry("ifcblock",&STEP::ObjectHelper<IfcBlock,3>::Construct )
955 , SchemaEntry("ifcprojectorderrecord",&STEP::ObjectHelper<IfcProjectOrderRecord,2>::Construct )
956 , SchemaEntry("ifcflowmetertype",&STEP::ObjectHelper<IfcFlowMeterType,1>::Construct )
957 , SchemaEntry("ifccontrollertype",&STEP::ObjectHelper<IfcControllerType,1>::Construct )
958 , SchemaEntry("ifcbeam",&STEP::ObjectHelper<IfcBeam,0>::Construct )
959 , SchemaEntry("ifcarbitraryopenprofiledef",&STEP::ObjectHelper<IfcArbitraryOpenProfileDef,1>::Construct )
960 , SchemaEntry("ifccenterlineprofiledef",&STEP::ObjectHelper<IfcCenterLineProfileDef,1>::Construct )
961 , SchemaEntry("ifcstructuralloadplanarforce",&STEP::ObjectHelper<NotImplemented,0>::Construct )
962 , SchemaEntry("ifctimeseriesschedule",&STEP::ObjectHelper<IfcTimeSeriesSchedule,3>::Construct )
963 , SchemaEntry("ifcroundededgefeature",&STEP::ObjectHelper<IfcRoundedEdgeFeature,1>::Construct )
964 , SchemaEntry("ifcwindowliningproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
965 , SchemaEntry("ifcreloverridesproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
966 , SchemaEntry("ifcapprovalrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
967 , SchemaEntry("ifcishapeprofiledef",&STEP::ObjectHelper<IfcIShapeProfileDef,5>::Construct )
968 , SchemaEntry("ifcspaceheatertype",&STEP::ObjectHelper<IfcSpaceHeaterType,1>::Construct )
969 , SchemaEntry("ifcexternallydefinedsurfacestyle",&STEP::ObjectHelper<NotImplemented,0>::Construct )
970 , SchemaEntry("ifcderivedunit",&STEP::ObjectHelper<NotImplemented,0>::Construct )
971 , SchemaEntry("ifcflowstoragedevice",&STEP::ObjectHelper<IfcFlowStorageDevice,0>::Construct )
972 , SchemaEntry("ifcmaterialclassificationrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
973 , SchemaEntry("ifcclassificationitem",&STEP::ObjectHelper<NotImplemented,0>::Construct )
974 , SchemaEntry("ifcrevolvedareasolid",&STEP::ObjectHelper<IfcRevolvedAreaSolid,2>::Construct )
975 , SchemaEntry("ifcconnectionpointgeometry",&STEP::ObjectHelper<NotImplemented,0>::Construct )
976 , SchemaEntry("ifcdoor",&STEP::ObjectHelper<IfcDoor,2>::Construct )
977 , SchemaEntry("ifcellipse",&STEP::ObjectHelper<IfcEllipse,2>::Construct )
978 , SchemaEntry("ifctubebundletype",&STEP::ObjectHelper<IfcTubeBundleType,1>::Construct )
979 , SchemaEntry("ifcangulardimension",&STEP::ObjectHelper<IfcAngularDimension,0>::Construct )
980 , SchemaEntry("ifcthermalmaterialproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
981 , SchemaEntry("ifcfacebasedsurfacemodel",&STEP::ObjectHelper<IfcFaceBasedSurfaceModel,1>::Construct )
982 , SchemaEntry("ifccranerailfshapeprofiledef",&STEP::ObjectHelper<IfcCraneRailFShapeProfileDef,9>::Construct )
983 , SchemaEntry("ifccolumntype",&STEP::ObjectHelper<IfcColumnType,1>::Construct )
984 , SchemaEntry("ifctshapeprofiledef",&STEP::ObjectHelper<IfcTShapeProfileDef,10>::Construct )
985 , SchemaEntry("ifcenergyconversiondevice",&STEP::ObjectHelper<IfcEnergyConversionDevice,0>::Construct )
986 , SchemaEntry("ifcconnectionpointeccentricity",&STEP::ObjectHelper<NotImplemented,0>::Construct )
987 , SchemaEntry("ifcreinforcementdefinitionproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
988 , SchemaEntry("ifccurvestylefontandscaling",&STEP::ObjectHelper<NotImplemented,0>::Construct )
989 , SchemaEntry("ifcworkschedule",&STEP::ObjectHelper<IfcWorkSchedule,0>::Construct )
990 , SchemaEntry("ifcorganizationrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
991 , SchemaEntry("ifczone",&STEP::ObjectHelper<IfcZone,0>::Construct )
992 , SchemaEntry("ifctransportelement",&STEP::ObjectHelper<IfcTransportElement,3>::Construct )
993 , SchemaEntry("ifcdraughtingpredefinedcurvefont",&STEP::ObjectHelper<NotImplemented,0>::Construct )
994 , SchemaEntry("ifcgeometricrepresentationsubcontext",&STEP::ObjectHelper<IfcGeometricRepresentationSubContext,4>::Construct )
995 , SchemaEntry("ifclshapeprofiledef",&STEP::ObjectHelper<IfcLShapeProfileDef,8>::Construct )
996 , SchemaEntry("ifcgeometriccurveset",&STEP::ObjectHelper<IfcGeometricCurveSet,0>::Construct )
997 , SchemaEntry("ifcactor",&STEP::ObjectHelper<IfcActor,1>::Construct )
998 , SchemaEntry("ifcoccupant",&STEP::ObjectHelper<IfcOccupant,1>::Construct )
999 , SchemaEntry("ifcphysicalcomplexquantity",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1000 , SchemaEntry("ifcbooleanclippingresult",&STEP::ObjectHelper<IfcBooleanClippingResult,0>::Construct )
1001 , SchemaEntry("ifcpredefinedterminatorsymbol",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1002 , SchemaEntry("ifcannotationfillarea",&STEP::ObjectHelper<IfcAnnotationFillArea,2>::Construct )
1003 , SchemaEntry("ifcconstraintaggregationrelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1004 , SchemaEntry("ifcrelassociatesapproval",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1005 , SchemaEntry("ifcrelassociatesmaterial",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1006 , SchemaEntry("ifcrelassignstoproduct",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1007 , SchemaEntry("ifcappliedvaluerelationship",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1008 , SchemaEntry("ifclightsourcespot",&STEP::ObjectHelper<IfcLightSourceSpot,4>::Construct )
1009 , SchemaEntry("ifcfiresuppressionterminaltype",&STEP::ObjectHelper<IfcFireSuppressionTerminalType,1>::Construct )
1010 , SchemaEntry("ifcelementquantity",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1011 , SchemaEntry("ifcdimensionpair",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1012 , SchemaEntry("ifcelectricgeneratortype",&STEP::ObjectHelper<IfcElectricGeneratorType,1>::Construct )
1013 , SchemaEntry("ifcrelsequence",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1014 , SchemaEntry("ifcinventory",&STEP::ObjectHelper<IfcInventory,6>::Construct )
1015 , SchemaEntry("ifcpolyline",&STEP::ObjectHelper<IfcPolyline,1>::Construct )
1016 , SchemaEntry("ifcboxedhalfspace",&STEP::ObjectHelper<IfcBoxedHalfSpace,1>::Construct )
1017 , SchemaEntry("ifcairterminaltype",&STEP::ObjectHelper<IfcAirTerminalType,1>::Construct )
1018 , SchemaEntry("ifcsectionreinforcementproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1019 , SchemaEntry("ifcdistributionport",&STEP::ObjectHelper<IfcDistributionPort,1>::Construct )
1020 , SchemaEntry("ifccostitem",&STEP::ObjectHelper<IfcCostItem,0>::Construct )
1021 , SchemaEntry("ifcstructureddimensioncallout",&STEP::ObjectHelper<IfcStructuredDimensionCallout,0>::Construct )
1022 , SchemaEntry("ifcstructuralresultgroup",&STEP::ObjectHelper<IfcStructuralResultGroup,3>::Construct )
1023 , SchemaEntry("ifcrelspaceboundary",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1024 , SchemaEntry("ifcorientededge",&STEP::ObjectHelper<IfcOrientedEdge,2>::Construct )
1025 , SchemaEntry("ifcrelassignstoresource",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1026 , SchemaEntry("ifccsgsolid",&STEP::ObjectHelper<IfcCsgSolid,1>::Construct )
1027 , SchemaEntry("ifcproductsofcombustionproperties",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1028 , SchemaEntry("ifcrelaxation",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1029 , SchemaEntry("ifcplanarbox",&STEP::ObjectHelper<IfcPlanarBox,1>::Construct )
1030 , SchemaEntry("ifcquantitylength",&STEP::ObjectHelper<NotImplemented,0>::Construct )
1031 , SchemaEntry("ifcmaterialdefinitionrepresentation",&STEP::ObjectHelper<IfcMaterialDefinitionRepresentation,1>::Construct )
1032 , SchemaEntry("ifcasymmetricishapeprofiledef",&STEP::ObjectHelper<IfcAsymmetricIShapeProfileDef,4>::Construct )
1033 , SchemaEntry("ifcrepresentationmap",&STEP::ObjectHelper<IfcRepresentationMap,2>::Construct )
1033 , SchemaEntry("ifccostvalue",&STEP::ObjectHelper<NotImplemented,0>::Construct )
10341034
10351035 };
10361036 }
11111111 return base;
11121112 }
11131113 // -----------------------------------------------------------------------------------------------------------
1114 template <> size_t GenericFill<IfcFurnishingElementType>(const DB& db, const LIST& params, IfcFurnishingElementType* in)
1114 template <> size_t GenericFill<IfcDistributionElementType>(const DB& db, const LIST& params, IfcDistributionElementType* in)
11151115 {
11161116 size_t base = GenericFill(db,params,static_cast<IfcElementType*>(in));
11171117 // this data structure is not used yet, so there is no code generated to fill its members
11181118 return base;
11191119 }
11201120 // -----------------------------------------------------------------------------------------------------------
1121 template <> size_t GenericFill<IfcFurnitureType>(const DB& db, const LIST& params, IfcFurnitureType* in)
1122 {
1123 size_t base = GenericFill(db,params,static_cast<IfcFurnishingElementType*>(in));
1121 template <> size_t GenericFill<IfcDistributionFlowElementType>(const DB& db, const LIST& params, IfcDistributionFlowElementType* in)
1122 {
1123 size_t base = GenericFill(db,params,static_cast<IfcDistributionElementType*>(in));
1124 // this data structure is not used yet, so there is no code generated to fill its members
1125 return base;
1126 }
1127 // -----------------------------------------------------------------------------------------------------------
1128 template <> size_t GenericFill<IfcFlowControllerType>(const DB& db, const LIST& params, IfcFlowControllerType* in)
1129 {
1130 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElementType*>(in));
1131 // this data structure is not used yet, so there is no code generated to fill its members
1132 return base;
1133 }
1134 // -----------------------------------------------------------------------------------------------------------
1135 template <> size_t GenericFill<IfcElectricTimeControlType>(const DB& db, const LIST& params, IfcElectricTimeControlType* in)
1136 {
1137 size_t base = GenericFill(db,params,static_cast<IfcFlowControllerType*>(in));
1138 // this data structure is not used yet, so there is no code generated to fill its members
1139 return base;
1140 }
1141 // -----------------------------------------------------------------------------------------------------------
1142 template <> size_t GenericFill<IfcRepresentation>(const DB& db, const LIST& params, IfcRepresentation* in)
1143 {
1144 size_t base = 0;
1145 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcRepresentation"); } do { // convert the 'ContextOfItems' argument
1146 boost::shared_ptr<const DataType> arg = params[base++];
1147 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRepresentation,4>::aux_is_derived[0]=true; break; }
1148 try { GenericConvert( in->ContextOfItems, arg, db ); break; }
1149 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcRepresentation to be a `IfcRepresentationContext`")); }
1150 } while(0);
1151 do { // convert the 'RepresentationIdentifier' argument
1152 boost::shared_ptr<const DataType> arg = params[base++];
1153 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRepresentation,4>::aux_is_derived[1]=true; break; }
1154 if (dynamic_cast<const UNSET*>(&*arg)) break;
1155 try { GenericConvert( in->RepresentationIdentifier, arg, db ); break; }
1156 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcRepresentation to be a `IfcLabel`")); }
1157 } while(0);
1158 do { // convert the 'RepresentationType' argument
1159 boost::shared_ptr<const DataType> arg = params[base++];
1160 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRepresentation,4>::aux_is_derived[2]=true; break; }
1161 if (dynamic_cast<const UNSET*>(&*arg)) break;
1162 try { GenericConvert( in->RepresentationType, arg, db ); break; }
1163 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcRepresentation to be a `IfcLabel`")); }
1164 } while(0);
1165 do { // convert the 'Items' argument
1166 boost::shared_ptr<const DataType> arg = params[base++];
1167 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRepresentation,4>::aux_is_derived[3]=true; break; }
1168 try { GenericConvert( in->Items, arg, db ); break; }
1169 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcRepresentation to be a `SET [1:?] OF IfcRepresentationItem`")); }
1170 } while(0);
1171 return base;
1172 }
1173 // -----------------------------------------------------------------------------------------------------------
1174 template <> size_t GenericFill<IfcShapeModel>(const DB& db, const LIST& params, IfcShapeModel* in)
1175 {
1176 size_t base = GenericFill(db,params,static_cast<IfcRepresentation*>(in));
1177 // this data structure is not used yet, so there is no code generated to fill its members
1178 return base;
1179 }
1180 // -----------------------------------------------------------------------------------------------------------
1181 template <> size_t GenericFill<IfcTopologyRepresentation>(const DB& db, const LIST& params, IfcTopologyRepresentation* in)
1182 {
1183 size_t base = GenericFill(db,params,static_cast<IfcShapeModel*>(in));
1184 // this data structure is not used yet, so there is no code generated to fill its members
1185 return base;
1186 }
1187 // -----------------------------------------------------------------------------------------------------------
1188 template <> size_t GenericFill<IfcRelationship>(const DB& db, const LIST& params, IfcRelationship* in)
1189 {
1190 size_t base = GenericFill(db,params,static_cast<IfcRoot*>(in));
1191 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcRelationship"); } return base;
1192 }
1193 // -----------------------------------------------------------------------------------------------------------
1194 template <> size_t GenericFill<IfcRelConnects>(const DB& db, const LIST& params, IfcRelConnects* in)
1195 {
1196 size_t base = GenericFill(db,params,static_cast<IfcRelationship*>(in));
1197 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcRelConnects"); } return base;
1198 }
1199 // -----------------------------------------------------------------------------------------------------------
1200 template <> size_t GenericFill<IfcFlowFittingType>(const DB& db, const LIST& params, IfcFlowFittingType* in)
1201 {
1202 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElementType*>(in));
1203 // this data structure is not used yet, so there is no code generated to fill its members
1204 return base;
1205 }
1206 // -----------------------------------------------------------------------------------------------------------
1207 template <> size_t GenericFill<IfcCableCarrierFittingType>(const DB& db, const LIST& params, IfcCableCarrierFittingType* in)
1208 {
1209 size_t base = GenericFill(db,params,static_cast<IfcFlowFittingType*>(in));
1210 // this data structure is not used yet, so there is no code generated to fill its members
1211 return base;
1212 }
1213 // -----------------------------------------------------------------------------------------------------------
1214 template <> size_t GenericFill<IfcEnergyConversionDeviceType>(const DB& db, const LIST& params, IfcEnergyConversionDeviceType* in)
1215 {
1216 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElementType*>(in));
1217 // this data structure is not used yet, so there is no code generated to fill its members
1218 return base;
1219 }
1220 // -----------------------------------------------------------------------------------------------------------
1221 template <> size_t GenericFill<IfcCoilType>(const DB& db, const LIST& params, IfcCoilType* in)
1222 {
1223 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
11241224 // this data structure is not used yet, so there is no code generated to fill its members
11251225 return base;
11261226 }
11381238 return base;
11391239 }
11401240 // -----------------------------------------------------------------------------------------------------------
1241 template <> size_t GenericFill<IfcControl>(const DB& db, const LIST& params, IfcControl* in)
1242 {
1243 size_t base = GenericFill(db,params,static_cast<IfcObject*>(in));
1244 // this data structure is not used yet, so there is no code generated to fill its members
1245 return base;
1246 }
1247 // -----------------------------------------------------------------------------------------------------------
1248 template <> size_t GenericFill<IfcPerformanceHistory>(const DB& db, const LIST& params, IfcPerformanceHistory* in)
1249 {
1250 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
1251 // this data structure is not used yet, so there is no code generated to fill its members
1252 return base;
1253 }
1254 // -----------------------------------------------------------------------------------------------------------
1255 template <> size_t GenericFill<IfcRepresentationItem>(const DB& db, const LIST& params, IfcRepresentationItem* in)
1256 {
1257 size_t base = 0;
1258 return base;
1259 }
1260 // -----------------------------------------------------------------------------------------------------------
1261 template <> size_t GenericFill<IfcGeometricRepresentationItem>(const DB& db, const LIST& params, IfcGeometricRepresentationItem* in)
1262 {
1263 size_t base = GenericFill(db,params,static_cast<IfcRepresentationItem*>(in));
1264 return base;
1265 }
1266 // -----------------------------------------------------------------------------------------------------------
1267 template <> size_t GenericFill<IfcTextLiteral>(const DB& db, const LIST& params, IfcTextLiteral* in)
1268 {
1269 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
1270 // this data structure is not used yet, so there is no code generated to fill its members
1271 return base;
1272 }
1273 // -----------------------------------------------------------------------------------------------------------
1274 template <> size_t GenericFill<IfcTextLiteralWithExtent>(const DB& db, const LIST& params, IfcTextLiteralWithExtent* in)
1275 {
1276 size_t base = GenericFill(db,params,static_cast<IfcTextLiteral*>(in));
1277 // this data structure is not used yet, so there is no code generated to fill its members
1278 return base;
1279 }
1280 // -----------------------------------------------------------------------------------------------------------
1281 template <> size_t GenericFill<IfcProductRepresentation>(const DB& db, const LIST& params, IfcProductRepresentation* in)
1282 {
1283 size_t base = 0;
1284 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcProductRepresentation"); } do { // convert the 'Name' argument
1285 boost::shared_ptr<const DataType> arg = params[base++];
1286 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProductRepresentation,3>::aux_is_derived[0]=true; break; }
1287 if (dynamic_cast<const UNSET*>(&*arg)) break;
1288 try { GenericConvert( in->Name, arg, db ); break; }
1289 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcProductRepresentation to be a `IfcLabel`")); }
1290 } while(0);
1291 do { // convert the 'Description' argument
1292 boost::shared_ptr<const DataType> arg = params[base++];
1293 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProductRepresentation,3>::aux_is_derived[1]=true; break; }
1294 if (dynamic_cast<const UNSET*>(&*arg)) break;
1295 try { GenericConvert( in->Description, arg, db ); break; }
1296 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcProductRepresentation to be a `IfcText`")); }
1297 } while(0);
1298 do { // convert the 'Representations' argument
1299 boost::shared_ptr<const DataType> arg = params[base++];
1300 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProductRepresentation,3>::aux_is_derived[2]=true; break; }
1301 try { GenericConvert( in->Representations, arg, db ); break; }
1302 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcProductRepresentation to be a `LIST [1:?] OF IfcRepresentation`")); }
1303 } while(0);
1304 return base;
1305 }
1306 // -----------------------------------------------------------------------------------------------------------
11411307 template <> size_t GenericFill<IfcProduct>(const DB& db, const LIST& params, IfcProduct* in)
11421308 {
11431309 size_t base = GenericFill(db,params,static_cast<IfcObject*>(in));
11581324 return base;
11591325 }
11601326 // -----------------------------------------------------------------------------------------------------------
1161 template <> size_t GenericFill<IfcGrid>(const DB& db, const LIST& params, IfcGrid* in)
1162 {
1163 size_t base = GenericFill(db,params,static_cast<IfcProduct*>(in));
1164 // this data structure is not used yet, so there is no code generated to fill its members
1165 return base;
1166 }
1167 // -----------------------------------------------------------------------------------------------------------
1168 template <> size_t GenericFill<IfcRepresentationItem>(const DB& db, const LIST& params, IfcRepresentationItem* in)
1169 {
1170 size_t base = 0;
1171 return base;
1172 }
1173 // -----------------------------------------------------------------------------------------------------------
1174 template <> size_t GenericFill<IfcGeometricRepresentationItem>(const DB& db, const LIST& params, IfcGeometricRepresentationItem* in)
1175 {
1176 size_t base = GenericFill(db,params,static_cast<IfcRepresentationItem*>(in));
1177 return base;
1178 }
1179 // -----------------------------------------------------------------------------------------------------------
1180 template <> size_t GenericFill<IfcOneDirectionRepeatFactor>(const DB& db, const LIST& params, IfcOneDirectionRepeatFactor* in)
1181 {
1182 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
1183 // this data structure is not used yet, so there is no code generated to fill its members
1184 return base;
1185 }
1186 // -----------------------------------------------------------------------------------------------------------
1187 template <> size_t GenericFill<IfcTwoDirectionRepeatFactor>(const DB& db, const LIST& params, IfcTwoDirectionRepeatFactor* in)
1188 {
1189 size_t base = GenericFill(db,params,static_cast<IfcOneDirectionRepeatFactor*>(in));
1190 // this data structure is not used yet, so there is no code generated to fill its members
1191 return base;
1192 }
1193 // -----------------------------------------------------------------------------------------------------------
11941327 template <> size_t GenericFill<IfcElement>(const DB& db, const LIST& params, IfcElement* in)
11951328 {
11961329 size_t base = GenericFill(db,params,static_cast<IfcProduct*>(in));
12041337 return base;
12051338 }
12061339 // -----------------------------------------------------------------------------------------------------------
1207 template <> size_t GenericFill<IfcElementComponent>(const DB& db, const LIST& params, IfcElementComponent* in)
1340 template <> size_t GenericFill<IfcDistributionElement>(const DB& db, const LIST& params, IfcDistributionElement* in)
12081341 {
12091342 size_t base = GenericFill(db,params,static_cast<IfcElement*>(in));
12101343 // this data structure is not used yet, so there is no code generated to fill its members
12111344 return base;
12121345 }
12131346 // -----------------------------------------------------------------------------------------------------------
1347 template <> size_t GenericFill<IfcDistributionFlowElement>(const DB& db, const LIST& params, IfcDistributionFlowElement* in)
1348 {
1349 size_t base = GenericFill(db,params,static_cast<IfcDistributionElement*>(in));
1350 // this data structure is not used yet, so there is no code generated to fill its members
1351 return base;
1352 }
1353 // -----------------------------------------------------------------------------------------------------------
1354 template <> size_t GenericFill<IfcCurve>(const DB& db, const LIST& params, IfcCurve* in)
1355 {
1356 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
1357 return base;
1358 }
1359 // -----------------------------------------------------------------------------------------------------------
1360 template <> size_t GenericFill<IfcBoundedCurve>(const DB& db, const LIST& params, IfcBoundedCurve* in)
1361 {
1362 size_t base = GenericFill(db,params,static_cast<IfcCurve*>(in));
1363 return base;
1364 }
1365 // -----------------------------------------------------------------------------------------------------------
1366 template <> size_t GenericFill<IfcCompositeCurve>(const DB& db, const LIST& params, IfcCompositeCurve* in)
1367 {
1368 size_t base = GenericFill(db,params,static_cast<IfcBoundedCurve*>(in));
1369 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcCompositeCurve"); } do { // convert the 'Segments' argument
1370 boost::shared_ptr<const DataType> arg = params[base++];
1371 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcCompositeCurve,2>::aux_is_derived[0]=true; break; }
1372 try { GenericConvert( in->Segments, arg, db ); break; }
1373 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcCompositeCurve to be a `LIST [1:?] OF IfcCompositeCurveSegment`")); }
1374 } while(0);
1375 do { // convert the 'SelfIntersect' argument
1376 boost::shared_ptr<const DataType> arg = params[base++];
1377 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcCompositeCurve,2>::aux_is_derived[1]=true; break; }
1378 try { GenericConvert( in->SelfIntersect, arg, db ); break; }
1379 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCompositeCurve to be a `LOGICAL`")); }
1380 } while(0);
1381 return base;
1382 }
1383 // -----------------------------------------------------------------------------------------------------------
1384 template <> size_t GenericFill<Ifc2DCompositeCurve>(const DB& db, const LIST& params, Ifc2DCompositeCurve* in)
1385 {
1386 size_t base = GenericFill(db,params,static_cast<IfcCompositeCurve*>(in));
1387 // this data structure is not used yet, so there is no code generated to fill its members
1388 return base;
1389 }
1390 // -----------------------------------------------------------------------------------------------------------
1391 template <> size_t GenericFill<IfcCartesianTransformationOperator>(const DB& db, const LIST& params, IfcCartesianTransformationOperator* in)
1392 {
1393 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
1394 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcCartesianTransformationOperator"); } do { // convert the 'Axis1' argument
1395 boost::shared_ptr<const DataType> arg = params[base++];
1396 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcCartesianTransformationOperator,4>::aux_is_derived[0]=true; break; }
1397 if (dynamic_cast<const UNSET*>(&*arg)) break;
1398 try { GenericConvert( in->Axis1, arg, db ); break; }
1399 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcCartesianTransformationOperator to be a `IfcDirection`")); }
1400 } while(0);
1401 do { // convert the 'Axis2' argument
1402 boost::shared_ptr<const DataType> arg = params[base++];
1403 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcCartesianTransformationOperator,4>::aux_is_derived[1]=true; break; }
1404 if (dynamic_cast<const UNSET*>(&*arg)) break;
1405 try { GenericConvert( in->Axis2, arg, db ); break; }
1406 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCartesianTransformationOperator to be a `IfcDirection`")); }
1407 } while(0);
1408 do { // convert the 'LocalOrigin' argument
1409 boost::shared_ptr<const DataType> arg = params[base++];
1410 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcCartesianTransformationOperator,4>::aux_is_derived[2]=true; break; }
1411 try { GenericConvert( in->LocalOrigin, arg, db ); break; }
1412 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcCartesianTransformationOperator to be a `IfcCartesianPoint`")); }
1413 } while(0);
1414 do { // convert the 'Scale' argument
1415 boost::shared_ptr<const DataType> arg = params[base++];
1416 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcCartesianTransformationOperator,4>::aux_is_derived[3]=true; break; }
1417 if (dynamic_cast<const UNSET*>(&*arg)) break;
1418 try { GenericConvert( in->Scale, arg, db ); break; }
1419 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcCartesianTransformationOperator to be a `REAL`")); }
1420 } while(0);
1421 return base;
1422 }
1423 // -----------------------------------------------------------------------------------------------------------
1424 template <> size_t GenericFill<IfcCartesianTransformationOperator3D>(const DB& db, const LIST& params, IfcCartesianTransformationOperator3D* in)
1425 {
1426 size_t base = GenericFill(db,params,static_cast<IfcCartesianTransformationOperator*>(in));
1427 if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcCartesianTransformationOperator3D"); } do { // convert the 'Axis3' argument
1428 boost::shared_ptr<const DataType> arg = params[base++];
1429 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcCartesianTransformationOperator3D,1>::aux_is_derived[0]=true; break; }
1430 if (dynamic_cast<const UNSET*>(&*arg)) break;
1431 try { GenericConvert( in->Axis3, arg, db ); break; }
1432 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcCartesianTransformationOperator3D to be a `IfcDirection`")); }
1433 } while(0);
1434 return base;
1435 }
1436 // -----------------------------------------------------------------------------------------------------------
1437 template <> size_t GenericFill<IfcProperty>(const DB& db, const LIST& params, IfcProperty* in)
1438 {
1439 size_t base = 0;
1440 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcProperty"); } do { // convert the 'Name' argument
1441 boost::shared_ptr<const DataType> arg = params[base++];
1442 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProperty,2>::aux_is_derived[0]=true; break; }
1443 try { GenericConvert( in->Name, arg, db ); break; }
1444 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcProperty to be a `IfcIdentifier`")); }
1445 } while(0);
1446 do { // convert the 'Description' argument
1447 boost::shared_ptr<const DataType> arg = params[base++];
1448 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProperty,2>::aux_is_derived[1]=true; break; }
1449 if (dynamic_cast<const UNSET*>(&*arg)) break;
1450 try { GenericConvert( in->Description, arg, db ); break; }
1451 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcProperty to be a `IfcText`")); }
1452 } while(0);
1453 return base;
1454 }
1455 // -----------------------------------------------------------------------------------------------------------
1456 template <> size_t GenericFill<IfcSimpleProperty>(const DB& db, const LIST& params, IfcSimpleProperty* in)
1457 {
1458 size_t base = GenericFill(db,params,static_cast<IfcProperty*>(in));
1459 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcSimpleProperty"); } return base;
1460 }
1461 // -----------------------------------------------------------------------------------------------------------
1462 template <> size_t GenericFill<IfcPropertyEnumeratedValue>(const DB& db, const LIST& params, IfcPropertyEnumeratedValue* in)
1463 {
1464 size_t base = GenericFill(db,params,static_cast<IfcSimpleProperty*>(in));
1465 // this data structure is not used yet, so there is no code generated to fill its members
1466 return base;
1467 }
1468 // -----------------------------------------------------------------------------------------------------------
1469 template <> size_t GenericFill<IfcBuildingElementType>(const DB& db, const LIST& params, IfcBuildingElementType* in)
1470 {
1471 size_t base = GenericFill(db,params,static_cast<IfcElementType*>(in));
1472 // this data structure is not used yet, so there is no code generated to fill its members
1473 return base;
1474 }
1475 // -----------------------------------------------------------------------------------------------------------
1476 template <> size_t GenericFill<IfcStairFlightType>(const DB& db, const LIST& params, IfcStairFlightType* in)
1477 {
1478 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
1479 // this data structure is not used yet, so there is no code generated to fill its members
1480 return base;
1481 }
1482 // -----------------------------------------------------------------------------------------------------------
1483 template <> size_t GenericFill<IfcSurface>(const DB& db, const LIST& params, IfcSurface* in)
1484 {
1485 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
1486 return base;
1487 }
1488 // -----------------------------------------------------------------------------------------------------------
1489 template <> size_t GenericFill<IfcElementarySurface>(const DB& db, const LIST& params, IfcElementarySurface* in)
1490 {
1491 size_t base = GenericFill(db,params,static_cast<IfcSurface*>(in));
1492 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcElementarySurface"); } do { // convert the 'Position' argument
1493 boost::shared_ptr<const DataType> arg = params[base++];
1494 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcElementarySurface,1>::aux_is_derived[0]=true; break; }
1495 try { GenericConvert( in->Position, arg, db ); break; }
1496 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcElementarySurface to be a `IfcAxis2Placement3D`")); }
1497 } while(0);
1498 return base;
1499 }
1500 // -----------------------------------------------------------------------------------------------------------
1501 template <> size_t GenericFill<IfcPlane>(const DB& db, const LIST& params, IfcPlane* in)
1502 {
1503 size_t base = GenericFill(db,params,static_cast<IfcElementarySurface*>(in));
1504 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPlane"); } return base;
1505 }
1506 // -----------------------------------------------------------------------------------------------------------
1507 template <> size_t GenericFill<IfcBooleanResult>(const DB& db, const LIST& params, IfcBooleanResult* in)
1508 {
1509 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
1510 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcBooleanResult"); } do { // convert the 'Operator' argument
1511 boost::shared_ptr<const DataType> arg = params[base++];
1512 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcBooleanResult,3>::aux_is_derived[0]=true; break; }
1513 try { GenericConvert( in->Operator, arg, db ); break; }
1514 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcBooleanResult to be a `IfcBooleanOperator`")); }
1515 } while(0);
1516 do { // convert the 'FirstOperand' argument
1517 boost::shared_ptr<const DataType> arg = params[base++];
1518 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcBooleanResult,3>::aux_is_derived[1]=true; break; }
1519 try { GenericConvert( in->FirstOperand, arg, db ); break; }
1520 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcBooleanResult to be a `IfcBooleanOperand`")); }
1521 } while(0);
1522 do { // convert the 'SecondOperand' argument
1523 boost::shared_ptr<const DataType> arg = params[base++];
1524 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcBooleanResult,3>::aux_is_derived[2]=true; break; }
1525 try { GenericConvert( in->SecondOperand, arg, db ); break; }
1526 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcBooleanResult to be a `IfcBooleanOperand`")); }
1527 } while(0);
1528 return base;
1529 }
1530 // -----------------------------------------------------------------------------------------------------------
1531 template <> size_t GenericFill<IfcBooleanClippingResult>(const DB& db, const LIST& params, IfcBooleanClippingResult* in)
1532 {
1533 size_t base = GenericFill(db,params,static_cast<IfcBooleanResult*>(in));
1534 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcBooleanClippingResult"); } return base;
1535 }
1536 // -----------------------------------------------------------------------------------------------------------
1537 template <> size_t GenericFill<IfcSolidModel>(const DB& db, const LIST& params, IfcSolidModel* in)
1538 {
1539 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
1540 return base;
1541 }
1542 // -----------------------------------------------------------------------------------------------------------
1543 template <> size_t GenericFill<IfcManifoldSolidBrep>(const DB& db, const LIST& params, IfcManifoldSolidBrep* in)
1544 {
1545 size_t base = GenericFill(db,params,static_cast<IfcSolidModel*>(in));
1546 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcManifoldSolidBrep"); } do { // convert the 'Outer' argument
1547 boost::shared_ptr<const DataType> arg = params[base++];
1548 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcManifoldSolidBrep,1>::aux_is_derived[0]=true; break; }
1549 try { GenericConvert( in->Outer, arg, db ); break; }
1550 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcManifoldSolidBrep to be a `IfcClosedShell`")); }
1551 } while(0);
1552 return base;
1553 }
1554 // -----------------------------------------------------------------------------------------------------------
1555 template <> size_t GenericFill<IfcFlowTerminalType>(const DB& db, const LIST& params, IfcFlowTerminalType* in)
1556 {
1557 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElementType*>(in));
1558 // this data structure is not used yet, so there is no code generated to fill its members
1559 return base;
1560 }
1561 // -----------------------------------------------------------------------------------------------------------
1562 template <> size_t GenericFill<IfcStackTerminalType>(const DB& db, const LIST& params, IfcStackTerminalType* in)
1563 {
1564 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
1565 // this data structure is not used yet, so there is no code generated to fill its members
1566 return base;
1567 }
1568 // -----------------------------------------------------------------------------------------------------------
1569 template <> size_t GenericFill<IfcStructuralItem>(const DB& db, const LIST& params, IfcStructuralItem* in)
1570 {
1571 size_t base = GenericFill(db,params,static_cast<IfcProduct*>(in));
1572 // this data structure is not used yet, so there is no code generated to fill its members
1573 return base;
1574 }
1575 // -----------------------------------------------------------------------------------------------------------
1576 template <> size_t GenericFill<IfcStructuralConnection>(const DB& db, const LIST& params, IfcStructuralConnection* in)
1577 {
1578 size_t base = GenericFill(db,params,static_cast<IfcStructuralItem*>(in));
1579 // this data structure is not used yet, so there is no code generated to fill its members
1580 return base;
1581 }
1582 // -----------------------------------------------------------------------------------------------------------
1583 template <> size_t GenericFill<IfcStructuralCurveConnection>(const DB& db, const LIST& params, IfcStructuralCurveConnection* in)
1584 {
1585 size_t base = GenericFill(db,params,static_cast<IfcStructuralConnection*>(in));
1586 // this data structure is not used yet, so there is no code generated to fill its members
1587 return base;
1588 }
1589 // -----------------------------------------------------------------------------------------------------------
1590 template <> size_t GenericFill<IfcJunctionBoxType>(const DB& db, const LIST& params, IfcJunctionBoxType* in)
1591 {
1592 size_t base = GenericFill(db,params,static_cast<IfcFlowFittingType*>(in));
1593 // this data structure is not used yet, so there is no code generated to fill its members
1594 return base;
1595 }
1596 // -----------------------------------------------------------------------------------------------------------
1597 template <> size_t GenericFill<IfcPropertyDefinition>(const DB& db, const LIST& params, IfcPropertyDefinition* in)
1598 {
1599 size_t base = GenericFill(db,params,static_cast<IfcRoot*>(in));
1600 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPropertyDefinition"); } return base;
1601 }
1602 // -----------------------------------------------------------------------------------------------------------
1603 template <> size_t GenericFill<IfcPropertySetDefinition>(const DB& db, const LIST& params, IfcPropertySetDefinition* in)
1604 {
1605 size_t base = GenericFill(db,params,static_cast<IfcPropertyDefinition*>(in));
1606 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPropertySetDefinition"); } return base;
1607 }
1608 // -----------------------------------------------------------------------------------------------------------
1609 template <> size_t GenericFill<IfcProcess>(const DB& db, const LIST& params, IfcProcess* in)
1610 {
1611 size_t base = GenericFill(db,params,static_cast<IfcObject*>(in));
1612 // this data structure is not used yet, so there is no code generated to fill its members
1613 return base;
1614 }
1615 // -----------------------------------------------------------------------------------------------------------
1616 template <> size_t GenericFill<IfcTask>(const DB& db, const LIST& params, IfcTask* in)
1617 {
1618 size_t base = GenericFill(db,params,static_cast<IfcProcess*>(in));
1619 // this data structure is not used yet, so there is no code generated to fill its members
1620 return base;
1621 }
1622 // -----------------------------------------------------------------------------------------------------------
1623 template <> size_t GenericFill<IfcRelFillsElement>(const DB& db, const LIST& params, IfcRelFillsElement* in)
1624 {
1625 size_t base = GenericFill(db,params,static_cast<IfcRelConnects*>(in));
1626 if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelFillsElement"); } do { // convert the 'RelatingOpeningElement' argument
1627 boost::shared_ptr<const DataType> arg = params[base++];
1628 try { GenericConvert( in->RelatingOpeningElement, arg, db ); break; }
1629 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelFillsElement to be a `IfcOpeningElement`")); }
1630 } while(0);
1631 do { // convert the 'RelatedBuildingElement' argument
1632 boost::shared_ptr<const DataType> arg = params[base++];
1633 try { GenericConvert( in->RelatedBuildingElement, arg, db ); break; }
1634 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelFillsElement to be a `IfcElement`")); }
1635 } while(0);
1636 return base;
1637 }
1638 // -----------------------------------------------------------------------------------------------------------
1639 template <> size_t GenericFill<IfcProcedure>(const DB& db, const LIST& params, IfcProcedure* in)
1640 {
1641 size_t base = GenericFill(db,params,static_cast<IfcProcess*>(in));
1642 // this data structure is not used yet, so there is no code generated to fill its members
1643 return base;
1644 }
1645 // -----------------------------------------------------------------------------------------------------------
1646 template <> size_t GenericFill<IfcProxy>(const DB& db, const LIST& params, IfcProxy* in)
1647 {
1648 size_t base = GenericFill(db,params,static_cast<IfcProduct*>(in));
1649 // this data structure is not used yet, so there is no code generated to fill its members
1650 return base;
1651 }
1652 // -----------------------------------------------------------------------------------------------------------
1653 template <> size_t GenericFill<IfcResource>(const DB& db, const LIST& params, IfcResource* in)
1654 {
1655 size_t base = GenericFill(db,params,static_cast<IfcObject*>(in));
1656 // this data structure is not used yet, so there is no code generated to fill its members
1657 return base;
1658 }
1659 // -----------------------------------------------------------------------------------------------------------
1660 template <> size_t GenericFill<IfcConstructionResource>(const DB& db, const LIST& params, IfcConstructionResource* in)
1661 {
1662 size_t base = GenericFill(db,params,static_cast<IfcResource*>(in));
1663 // this data structure is not used yet, so there is no code generated to fill its members
1664 return base;
1665 }
1666 // -----------------------------------------------------------------------------------------------------------
1667 template <> size_t GenericFill<IfcSubContractResource>(const DB& db, const LIST& params, IfcSubContractResource* in)
1668 {
1669 size_t base = GenericFill(db,params,static_cast<IfcConstructionResource*>(in));
1670 // this data structure is not used yet, so there is no code generated to fill its members
1671 return base;
1672 }
1673 // -----------------------------------------------------------------------------------------------------------
1674 template <> size_t GenericFill<IfcRelContainedInSpatialStructure>(const DB& db, const LIST& params, IfcRelContainedInSpatialStructure* in)
1675 {
1676 size_t base = GenericFill(db,params,static_cast<IfcRelConnects*>(in));
1677 if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelContainedInSpatialStructure"); } do { // convert the 'RelatedElements' argument
1678 boost::shared_ptr<const DataType> arg = params[base++];
1679 try { GenericConvert( in->RelatedElements, arg, db ); break; }
1680 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelContainedInSpatialStructure to be a `SET [1:?] OF IfcProduct`")); }
1681 } while(0);
1682 do { // convert the 'RelatingStructure' argument
1683 boost::shared_ptr<const DataType> arg = params[base++];
1684 try { GenericConvert( in->RelatingStructure, arg, db ); break; }
1685 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelContainedInSpatialStructure to be a `IfcSpatialStructureElement`")); }
1686 } while(0);
1687 return base;
1688 }
1689 // -----------------------------------------------------------------------------------------------------------
1690 template <> size_t GenericFill<IfcTopologicalRepresentationItem>(const DB& db, const LIST& params, IfcTopologicalRepresentationItem* in)
1691 {
1692 size_t base = GenericFill(db,params,static_cast<IfcRepresentationItem*>(in));
1693 return base;
1694 }
1695 // -----------------------------------------------------------------------------------------------------------
1696 template <> size_t GenericFill<IfcEdge>(const DB& db, const LIST& params, IfcEdge* in)
1697 {
1698 size_t base = GenericFill(db,params,static_cast<IfcTopologicalRepresentationItem*>(in));
1699 // this data structure is not used yet, so there is no code generated to fill its members
1700 return base;
1701 }
1702 // -----------------------------------------------------------------------------------------------------------
1703 template <> size_t GenericFill<IfcEdgeCurve>(const DB& db, const LIST& params, IfcEdgeCurve* in)
1704 {
1705 size_t base = GenericFill(db,params,static_cast<IfcEdge*>(in));
1706 // this data structure is not used yet, so there is no code generated to fill its members
1707 return base;
1708 }
1709 // -----------------------------------------------------------------------------------------------------------
1710 template <> size_t GenericFill<IfcPlateType>(const DB& db, const LIST& params, IfcPlateType* in)
1711 {
1712 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
1713 // this data structure is not used yet, so there is no code generated to fill its members
1714 return base;
1715 }
1716 // -----------------------------------------------------------------------------------------------------------
1717 template <> size_t GenericFill<IfcObjectPlacement>(const DB& db, const LIST& params, IfcObjectPlacement* in)
1718 {
1719 size_t base = 0;
1720 return base;
1721 }
1722 // -----------------------------------------------------------------------------------------------------------
1723 template <> size_t GenericFill<IfcGridPlacement>(const DB& db, const LIST& params, IfcGridPlacement* in)
1724 {
1725 size_t base = GenericFill(db,params,static_cast<IfcObjectPlacement*>(in));
1726 // this data structure is not used yet, so there is no code generated to fill its members
1727 return base;
1728 }
1729 // -----------------------------------------------------------------------------------------------------------
1730 template <> size_t GenericFill<IfcFireSuppressionTerminalType>(const DB& db, const LIST& params, IfcFireSuppressionTerminalType* in)
1731 {
1732 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
1733 // this data structure is not used yet, so there is no code generated to fill its members
1734 return base;
1735 }
1736 // -----------------------------------------------------------------------------------------------------------
1737 template <> size_t GenericFill<IfcFlowStorageDevice>(const DB& db, const LIST& params, IfcFlowStorageDevice* in)
1738 {
1739 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElement*>(in));
1740 // this data structure is not used yet, so there is no code generated to fill its members
1741 return base;
1742 }
1743 // -----------------------------------------------------------------------------------------------------------
1744 template <> size_t GenericFill<IfcSweptSurface>(const DB& db, const LIST& params, IfcSweptSurface* in)
1745 {
1746 size_t base = GenericFill(db,params,static_cast<IfcSurface*>(in));
1747 // this data structure is not used yet, so there is no code generated to fill its members
1748 return base;
1749 }
1750 // -----------------------------------------------------------------------------------------------------------
1751 template <> size_t GenericFill<IfcSurfaceOfRevolution>(const DB& db, const LIST& params, IfcSurfaceOfRevolution* in)
1752 {
1753 size_t base = GenericFill(db,params,static_cast<IfcSweptSurface*>(in));
1754 // this data structure is not used yet, so there is no code generated to fill its members
1755 return base;
1756 }
1757 // -----------------------------------------------------------------------------------------------------------
1758 template <> size_t GenericFill<IfcOrientedEdge>(const DB& db, const LIST& params, IfcOrientedEdge* in)
1759 {
1760 size_t base = GenericFill(db,params,static_cast<IfcEdge*>(in));
1761 // this data structure is not used yet, so there is no code generated to fill its members
1762 return base;
1763 }
1764 // -----------------------------------------------------------------------------------------------------------
1765 template <> size_t GenericFill<IfcDirection>(const DB& db, const LIST& params, IfcDirection* in)
1766 {
1767 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
1768 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcDirection"); } do { // convert the 'DirectionRatios' argument
1769 boost::shared_ptr<const DataType> arg = params[base++];
1770 try { GenericConvert( in->DirectionRatios, arg, db ); break; }
1771 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcDirection to be a `LIST [2:3] OF REAL`")); }
1772 } while(0);
1773 return base;
1774 }
1775 // -----------------------------------------------------------------------------------------------------------
1776 template <> size_t GenericFill<IfcProfileDef>(const DB& db, const LIST& params, IfcProfileDef* in)
1777 {
1778 size_t base = 0;
1779 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcProfileDef"); } do { // convert the 'ProfileType' argument
1780 boost::shared_ptr<const DataType> arg = params[base++];
1781 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProfileDef,2>::aux_is_derived[0]=true; break; }
1782 try { GenericConvert( in->ProfileType, arg, db ); break; }
1783 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcProfileDef to be a `IfcProfileTypeEnum`")); }
1784 } while(0);
1785 do { // convert the 'ProfileName' argument
1786 boost::shared_ptr<const DataType> arg = params[base++];
1787 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProfileDef,2>::aux_is_derived[1]=true; break; }
1788 if (dynamic_cast<const UNSET*>(&*arg)) break;
1789 try { GenericConvert( in->ProfileName, arg, db ); break; }
1790 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcProfileDef to be a `IfcLabel`")); }
1791 } while(0);
1792 return base;
1793 }
1794 // -----------------------------------------------------------------------------------------------------------
1795 template <> size_t GenericFill<IfcParameterizedProfileDef>(const DB& db, const LIST& params, IfcParameterizedProfileDef* in)
1796 {
1797 size_t base = GenericFill(db,params,static_cast<IfcProfileDef*>(in));
1798 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcParameterizedProfileDef"); } do { // convert the 'Position' argument
1799 boost::shared_ptr<const DataType> arg = params[base++];
1800 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcParameterizedProfileDef,1>::aux_is_derived[0]=true; break; }
1801 try { GenericConvert( in->Position, arg, db ); break; }
1802 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcParameterizedProfileDef to be a `IfcAxis2Placement2D`")); }
1803 } while(0);
1804 return base;
1805 }
1806 // -----------------------------------------------------------------------------------------------------------
1807 template <> size_t GenericFill<IfcCShapeProfileDef>(const DB& db, const LIST& params, IfcCShapeProfileDef* in)
1808 {
1809 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
1810 // this data structure is not used yet, so there is no code generated to fill its members
1811 return base;
1812 }
1813 // -----------------------------------------------------------------------------------------------------------
1814 template <> size_t GenericFill<IfcFeatureElement>(const DB& db, const LIST& params, IfcFeatureElement* in)
1815 {
1816 size_t base = GenericFill(db,params,static_cast<IfcElement*>(in));
1817 if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcFeatureElement"); } return base;
1818 }
1819 // -----------------------------------------------------------------------------------------------------------
1820 template <> size_t GenericFill<IfcFeatureElementSubtraction>(const DB& db, const LIST& params, IfcFeatureElementSubtraction* in)
1821 {
1822 size_t base = GenericFill(db,params,static_cast<IfcFeatureElement*>(in));
1823 if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcFeatureElementSubtraction"); } return base;
1824 }
1825 // -----------------------------------------------------------------------------------------------------------
1826 template <> size_t GenericFill<IfcEdgeFeature>(const DB& db, const LIST& params, IfcEdgeFeature* in)
1827 {
1828 size_t base = GenericFill(db,params,static_cast<IfcFeatureElementSubtraction*>(in));
1829 // this data structure is not used yet, so there is no code generated to fill its members
1830 return base;
1831 }
1832 // -----------------------------------------------------------------------------------------------------------
1833 template <> size_t GenericFill<IfcChamferEdgeFeature>(const DB& db, const LIST& params, IfcChamferEdgeFeature* in)
1834 {
1835 size_t base = GenericFill(db,params,static_cast<IfcEdgeFeature*>(in));
1836 // this data structure is not used yet, so there is no code generated to fill its members
1837 return base;
1838 }
1839 // -----------------------------------------------------------------------------------------------------------
1840 template <> size_t GenericFill<IfcBuildingElement>(const DB& db, const LIST& params, IfcBuildingElement* in)
1841 {
1842 size_t base = GenericFill(db,params,static_cast<IfcElement*>(in));
1843 if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcBuildingElement"); } return base;
1844 }
1845 // -----------------------------------------------------------------------------------------------------------
1846 template <> size_t GenericFill<IfcColumn>(const DB& db, const LIST& params, IfcColumn* in)
1847 {
1848 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
1849 // this data structure is not used yet, so there is no code generated to fill its members
1850 return base;
1851 }
1852 // -----------------------------------------------------------------------------------------------------------
1853 template <> size_t GenericFill<IfcPropertyReferenceValue>(const DB& db, const LIST& params, IfcPropertyReferenceValue* in)
1854 {
1855 size_t base = GenericFill(db,params,static_cast<IfcSimpleProperty*>(in));
1856 // this data structure is not used yet, so there is no code generated to fill its members
1857 return base;
1858 }
1859 // -----------------------------------------------------------------------------------------------------------
1860 template <> size_t GenericFill<IfcElectricMotorType>(const DB& db, const LIST& params, IfcElectricMotorType* in)
1861 {
1862 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
1863 // this data structure is not used yet, so there is no code generated to fill its members
1864 return base;
1865 }
1866 // -----------------------------------------------------------------------------------------------------------
12141867 template <> size_t GenericFill<IfcSpatialStructureElementType>(const DB& db, const LIST& params, IfcSpatialStructureElementType* in)
12151868 {
12161869 size_t base = GenericFill(db,params,static_cast<IfcElementType*>(in));
12181871 return base;
12191872 }
12201873 // -----------------------------------------------------------------------------------------------------------
1221 template <> size_t GenericFill<IfcControl>(const DB& db, const LIST& params, IfcControl* in)
1222 {
1223 size_t base = GenericFill(db,params,static_cast<IfcObject*>(in));
1224 // this data structure is not used yet, so there is no code generated to fill its members
1225 return base;
1226 }
1227 // -----------------------------------------------------------------------------------------------------------
1228 template <> size_t GenericFill<IfcActionRequest>(const DB& db, const LIST& params, IfcActionRequest* in)
1874 template <> size_t GenericFill<IfcSpaceType>(const DB& db, const LIST& params, IfcSpaceType* in)
1875 {
1876 size_t base = GenericFill(db,params,static_cast<IfcSpatialStructureElementType*>(in));
1877 // this data structure is not used yet, so there is no code generated to fill its members
1878 return base;
1879 }
1880 // -----------------------------------------------------------------------------------------------------------
1881 template <> size_t GenericFill<IfcColumnType>(const DB& db, const LIST& params, IfcColumnType* in)
1882 {
1883 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
1884 // this data structure is not used yet, so there is no code generated to fill its members
1885 return base;
1886 }
1887 // -----------------------------------------------------------------------------------------------------------
1888 template <> size_t GenericFill<IfcCraneRailAShapeProfileDef>(const DB& db, const LIST& params, IfcCraneRailAShapeProfileDef* in)
1889 {
1890 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
1891 // this data structure is not used yet, so there is no code generated to fill its members
1892 return base;
1893 }
1894 // -----------------------------------------------------------------------------------------------------------
1895 template <> size_t GenericFill<IfcCondenserType>(const DB& db, const LIST& params, IfcCondenserType* in)
1896 {
1897 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
1898 // this data structure is not used yet, so there is no code generated to fill its members
1899 return base;
1900 }
1901 // -----------------------------------------------------------------------------------------------------------
1902 template <> size_t GenericFill<IfcCircleProfileDef>(const DB& db, const LIST& params, IfcCircleProfileDef* in)
1903 {
1904 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
1905 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcCircleProfileDef"); } do { // convert the 'Radius' argument
1906 boost::shared_ptr<const DataType> arg = params[base++];
1907 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcCircleProfileDef,1>::aux_is_derived[0]=true; break; }
1908 try { GenericConvert( in->Radius, arg, db ); break; }
1909 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcCircleProfileDef to be a `IfcPositiveLengthMeasure`")); }
1910 } while(0);
1911 return base;
1912 }
1913 // -----------------------------------------------------------------------------------------------------------
1914 template <> size_t GenericFill<IfcCircleHollowProfileDef>(const DB& db, const LIST& params, IfcCircleHollowProfileDef* in)
1915 {
1916 size_t base = GenericFill(db,params,static_cast<IfcCircleProfileDef*>(in));
1917 if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcCircleHollowProfileDef"); } do { // convert the 'WallThickness' argument
1918 boost::shared_ptr<const DataType> arg = params[base++];
1919 try { GenericConvert( in->WallThickness, arg, db ); break; }
1920 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcCircleHollowProfileDef to be a `IfcPositiveLengthMeasure`")); }
1921 } while(0);
1922 return base;
1923 }
1924 // -----------------------------------------------------------------------------------------------------------
1925 template <> size_t GenericFill<IfcPlacement>(const DB& db, const LIST& params, IfcPlacement* in)
1926 {
1927 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
1928 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPlacement"); } do { // convert the 'Location' argument
1929 boost::shared_ptr<const DataType> arg = params[base++];
1930 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcPlacement,1>::aux_is_derived[0]=true; break; }
1931 try { GenericConvert( in->Location, arg, db ); break; }
1932 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPlacement to be a `IfcCartesianPoint`")); }
1933 } while(0);
1934 return base;
1935 }
1936 // -----------------------------------------------------------------------------------------------------------
1937 template <> size_t GenericFill<IfcAxis2Placement3D>(const DB& db, const LIST& params, IfcAxis2Placement3D* in)
1938 {
1939 size_t base = GenericFill(db,params,static_cast<IfcPlacement*>(in));
1940 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcAxis2Placement3D"); } do { // convert the 'Axis' argument
1941 boost::shared_ptr<const DataType> arg = params[base++];
1942 if (dynamic_cast<const UNSET*>(&*arg)) break;
1943 try { GenericConvert( in->Axis, arg, db ); break; }
1944 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcAxis2Placement3D to be a `IfcDirection`")); }
1945 } while(0);
1946 do { // convert the 'RefDirection' argument
1947 boost::shared_ptr<const DataType> arg = params[base++];
1948 if (dynamic_cast<const UNSET*>(&*arg)) break;
1949 try { GenericConvert( in->RefDirection, arg, db ); break; }
1950 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcAxis2Placement3D to be a `IfcDirection`")); }
1951 } while(0);
1952 return base;
1953 }
1954 // -----------------------------------------------------------------------------------------------------------
1955 template <> size_t GenericFill<IfcPresentationStyle>(const DB& db, const LIST& params, IfcPresentationStyle* in)
1956 {
1957 size_t base = 0;
1958 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPresentationStyle"); } do { // convert the 'Name' argument
1959 boost::shared_ptr<const DataType> arg = params[base++];
1960 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcPresentationStyle,1>::aux_is_derived[0]=true; break; }
1961 if (dynamic_cast<const UNSET*>(&*arg)) break;
1962 try { GenericConvert( in->Name, arg, db ); break; }
1963 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPresentationStyle to be a `IfcLabel`")); }
1964 } while(0);
1965 return base;
1966 }
1967 // -----------------------------------------------------------------------------------------------------------
1968 template <> size_t GenericFill<IfcEquipmentElement>(const DB& db, const LIST& params, IfcEquipmentElement* in)
1969 {
1970 size_t base = GenericFill(db,params,static_cast<IfcElement*>(in));
1971 // this data structure is not used yet, so there is no code generated to fill its members
1972 return base;
1973 }
1974 // -----------------------------------------------------------------------------------------------------------
1975 template <> size_t GenericFill<IfcCompositeCurveSegment>(const DB& db, const LIST& params, IfcCompositeCurveSegment* in)
1976 {
1977 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
1978 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcCompositeCurveSegment"); } do { // convert the 'Transition' argument
1979 boost::shared_ptr<const DataType> arg = params[base++];
1980 try { GenericConvert( in->Transition, arg, db ); break; }
1981 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcCompositeCurveSegment to be a `IfcTransitionCode`")); }
1982 } while(0);
1983 do { // convert the 'SameSense' argument
1984 boost::shared_ptr<const DataType> arg = params[base++];
1985 try { GenericConvert( in->SameSense, arg, db ); break; }
1986 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCompositeCurveSegment to be a `BOOLEAN`")); }
1987 } while(0);
1988 do { // convert the 'ParentCurve' argument
1989 boost::shared_ptr<const DataType> arg = params[base++];
1990 try { GenericConvert( in->ParentCurve, arg, db ); break; }
1991 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcCompositeCurveSegment to be a `IfcCurve`")); }
1992 } while(0);
1993 return base;
1994 }
1995 // -----------------------------------------------------------------------------------------------------------
1996 template <> size_t GenericFill<IfcRectangleProfileDef>(const DB& db, const LIST& params, IfcRectangleProfileDef* in)
1997 {
1998 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
1999 if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcRectangleProfileDef"); } do { // convert the 'XDim' argument
2000 boost::shared_ptr<const DataType> arg = params[base++];
2001 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRectangleProfileDef,2>::aux_is_derived[0]=true; break; }
2002 try { GenericConvert( in->XDim, arg, db ); break; }
2003 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcRectangleProfileDef to be a `IfcPositiveLengthMeasure`")); }
2004 } while(0);
2005 do { // convert the 'YDim' argument
2006 boost::shared_ptr<const DataType> arg = params[base++];
2007 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRectangleProfileDef,2>::aux_is_derived[1]=true; break; }
2008 try { GenericConvert( in->YDim, arg, db ); break; }
2009 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRectangleProfileDef to be a `IfcPositiveLengthMeasure`")); }
2010 } while(0);
2011 return base;
2012 }
2013 // -----------------------------------------------------------------------------------------------------------
2014 template <> size_t GenericFill<IfcBuildingElementProxy>(const DB& db, const LIST& params, IfcBuildingElementProxy* in)
2015 {
2016 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
2017 // this data structure is not used yet, so there is no code generated to fill its members
2018 return base;
2019 }
2020 // -----------------------------------------------------------------------------------------------------------
2021 template <> size_t GenericFill<IfcDistributionControlElementType>(const DB& db, const LIST& params, IfcDistributionControlElementType* in)
2022 {
2023 size_t base = GenericFill(db,params,static_cast<IfcDistributionElementType*>(in));
2024 // this data structure is not used yet, so there is no code generated to fill its members
2025 return base;
2026 }
2027 // -----------------------------------------------------------------------------------------------------------
2028 template <> size_t GenericFill<IfcFlowInstrumentType>(const DB& db, const LIST& params, IfcFlowInstrumentType* in)
2029 {
2030 size_t base = GenericFill(db,params,static_cast<IfcDistributionControlElementType*>(in));
2031 // this data structure is not used yet, so there is no code generated to fill its members
2032 return base;
2033 }
2034 // -----------------------------------------------------------------------------------------------------------
2035 template <> size_t GenericFill<IfcDraughtingCallout>(const DB& db, const LIST& params, IfcDraughtingCallout* in)
2036 {
2037 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
2038 // this data structure is not used yet, so there is no code generated to fill its members
2039 return base;
2040 }
2041 // -----------------------------------------------------------------------------------------------------------
2042 template <> size_t GenericFill<IfcDimensionCurveDirectedCallout>(const DB& db, const LIST& params, IfcDimensionCurveDirectedCallout* in)
2043 {
2044 size_t base = GenericFill(db,params,static_cast<IfcDraughtingCallout*>(in));
2045 // this data structure is not used yet, so there is no code generated to fill its members
2046 return base;
2047 }
2048 // -----------------------------------------------------------------------------------------------------------
2049 template <> size_t GenericFill<IfcLinearDimension>(const DB& db, const LIST& params, IfcLinearDimension* in)
2050 {
2051 size_t base = GenericFill(db,params,static_cast<IfcDimensionCurveDirectedCallout*>(in));
2052 // this data structure is not used yet, so there is no code generated to fill its members
2053 return base;
2054 }
2055 // -----------------------------------------------------------------------------------------------------------
2056 template <> size_t GenericFill<IfcElementAssembly>(const DB& db, const LIST& params, IfcElementAssembly* in)
2057 {
2058 size_t base = GenericFill(db,params,static_cast<IfcElement*>(in));
2059 // this data structure is not used yet, so there is no code generated to fill its members
2060 return base;
2061 }
2062 // -----------------------------------------------------------------------------------------------------------
2063 template <> size_t GenericFill<IfcCsgPrimitive3D>(const DB& db, const LIST& params, IfcCsgPrimitive3D* in)
2064 {
2065 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
2066 // this data structure is not used yet, so there is no code generated to fill its members
2067 return base;
2068 }
2069 // -----------------------------------------------------------------------------------------------------------
2070 template <> size_t GenericFill<IfcRightCircularCone>(const DB& db, const LIST& params, IfcRightCircularCone* in)
2071 {
2072 size_t base = GenericFill(db,params,static_cast<IfcCsgPrimitive3D*>(in));
2073 // this data structure is not used yet, so there is no code generated to fill its members
2074 return base;
2075 }
2076 // -----------------------------------------------------------------------------------------------------------
2077 template <> size_t GenericFill<IfcProjectOrder>(const DB& db, const LIST& params, IfcProjectOrder* in)
12292078 {
12302079 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
12312080 // this data structure is not used yet, so there is no code generated to fill its members
12322081 return base;
12332082 }
12342083 // -----------------------------------------------------------------------------------------------------------
1235 template <> size_t GenericFill<IfcDistributionElementType>(const DB& db, const LIST& params, IfcDistributionElementType* in)
1236 {
1237 size_t base = GenericFill(db,params,static_cast<IfcElementType*>(in));
1238 // this data structure is not used yet, so there is no code generated to fill its members
1239 return base;
1240 }
1241 // -----------------------------------------------------------------------------------------------------------
1242 template <> size_t GenericFill<IfcDistributionFlowElementType>(const DB& db, const LIST& params, IfcDistributionFlowElementType* in)
1243 {
1244 size_t base = GenericFill(db,params,static_cast<IfcDistributionElementType*>(in));
1245 // this data structure is not used yet, so there is no code generated to fill its members
1246 return base;
1247 }
1248 // -----------------------------------------------------------------------------------------------------------
1249 template <> size_t GenericFill<IfcEnergyConversionDeviceType>(const DB& db, const LIST& params, IfcEnergyConversionDeviceType* in)
1250 {
1251 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElementType*>(in));
1252 // this data structure is not used yet, so there is no code generated to fill its members
1253 return base;
1254 }
1255 // -----------------------------------------------------------------------------------------------------------
1256 template <> size_t GenericFill<IfcCooledBeamType>(const DB& db, const LIST& params, IfcCooledBeamType* in)
1257 {
1258 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
1259 // this data structure is not used yet, so there is no code generated to fill its members
1260 return base;
1261 }
1262 // -----------------------------------------------------------------------------------------------------------
1263 template <> size_t GenericFill<IfcCsgPrimitive3D>(const DB& db, const LIST& params, IfcCsgPrimitive3D* in)
1264 {
1265 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
1266 // this data structure is not used yet, so there is no code generated to fill its members
1267 return base;
1268 }
1269 // -----------------------------------------------------------------------------------------------------------
1270 template <> size_t GenericFill<IfcRectangularPyramid>(const DB& db, const LIST& params, IfcRectangularPyramid* in)
1271 {
1272 size_t base = GenericFill(db,params,static_cast<IfcCsgPrimitive3D*>(in));
1273 // this data structure is not used yet, so there is no code generated to fill its members
1274 return base;
1275 }
1276 // -----------------------------------------------------------------------------------------------------------
1277 template <> size_t GenericFill<IfcSurface>(const DB& db, const LIST& params, IfcSurface* in)
1278 {
1279 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
1280 return base;
1281 }
1282 // -----------------------------------------------------------------------------------------------------------
1283 template <> size_t GenericFill<IfcBoundedSurface>(const DB& db, const LIST& params, IfcBoundedSurface* in)
1284 {
1285 size_t base = GenericFill(db,params,static_cast<IfcSurface*>(in));
1286 // this data structure is not used yet, so there is no code generated to fill its members
1287 return base;
1288 }
1289 // -----------------------------------------------------------------------------------------------------------
1290 template <> size_t GenericFill<IfcRectangularTrimmedSurface>(const DB& db, const LIST& params, IfcRectangularTrimmedSurface* in)
1291 {
1292 size_t base = GenericFill(db,params,static_cast<IfcBoundedSurface*>(in));
1293 // this data structure is not used yet, so there is no code generated to fill its members
1294 return base;
1295 }
1296 // -----------------------------------------------------------------------------------------------------------
1297 template <> size_t GenericFill<IfcGroup>(const DB& db, const LIST& params, IfcGroup* in)
1298 {
1299 size_t base = GenericFill(db,params,static_cast<IfcObject*>(in));
1300 // this data structure is not used yet, so there is no code generated to fill its members
1301 return base;
1302 }
1303 // -----------------------------------------------------------------------------------------------------------
1304 template <> size_t GenericFill<IfcRelationship>(const DB& db, const LIST& params, IfcRelationship* in)
1305 {
1306 size_t base = GenericFill(db,params,static_cast<IfcRoot*>(in));
1307 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcRelationship"); } return base;
2084 template <> size_t GenericFill<IfcLShapeProfileDef>(const DB& db, const LIST& params, IfcLShapeProfileDef* in)
2085 {
2086 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
2087 // this data structure is not used yet, so there is no code generated to fill its members
2088 return base;
2089 }
2090 // -----------------------------------------------------------------------------------------------------------
2091 template <> size_t GenericFill<IfcAngularDimension>(const DB& db, const LIST& params, IfcAngularDimension* in)
2092 {
2093 size_t base = GenericFill(db,params,static_cast<IfcDimensionCurveDirectedCallout*>(in));
2094 // this data structure is not used yet, so there is no code generated to fill its members
2095 return base;
2096 }
2097 // -----------------------------------------------------------------------------------------------------------
2098 template <> size_t GenericFill<IfcLocalPlacement>(const DB& db, const LIST& params, IfcLocalPlacement* in)
2099 {
2100 size_t base = GenericFill(db,params,static_cast<IfcObjectPlacement*>(in));
2101 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcLocalPlacement"); } do { // convert the 'PlacementRelTo' argument
2102 boost::shared_ptr<const DataType> arg = params[base++];
2103 if (dynamic_cast<const UNSET*>(&*arg)) break;
2104 try { GenericConvert( in->PlacementRelTo, arg, db ); break; }
2105 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcLocalPlacement to be a `IfcObjectPlacement`")); }
2106 } while(0);
2107 do { // convert the 'RelativePlacement' argument
2108 boost::shared_ptr<const DataType> arg = params[base++];
2109 try { GenericConvert( in->RelativePlacement, arg, db ); break; }
2110 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcLocalPlacement to be a `IfcAxis2Placement`")); }
2111 } while(0);
2112 return base;
2113 }
2114 // -----------------------------------------------------------------------------------------------------------
2115 template <> size_t GenericFill<IfcSweptAreaSolid>(const DB& db, const LIST& params, IfcSweptAreaSolid* in)
2116 {
2117 size_t base = GenericFill(db,params,static_cast<IfcSolidModel*>(in));
2118 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcSweptAreaSolid"); } do { // convert the 'SweptArea' argument
2119 boost::shared_ptr<const DataType> arg = params[base++];
2120 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcSweptAreaSolid,2>::aux_is_derived[0]=true; break; }
2121 try { GenericConvert( in->SweptArea, arg, db ); break; }
2122 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSweptAreaSolid to be a `IfcProfileDef`")); }
2123 } while(0);
2124 do { // convert the 'Position' argument
2125 boost::shared_ptr<const DataType> arg = params[base++];
2126 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcSweptAreaSolid,2>::aux_is_derived[1]=true; break; }
2127 try { GenericConvert( in->Position, arg, db ); break; }
2128 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcSweptAreaSolid to be a `IfcAxis2Placement3D`")); }
2129 } while(0);
2130 return base;
2131 }
2132 // -----------------------------------------------------------------------------------------------------------
2133 template <> size_t GenericFill<IfcRevolvedAreaSolid>(const DB& db, const LIST& params, IfcRevolvedAreaSolid* in)
2134 {
2135 size_t base = GenericFill(db,params,static_cast<IfcSweptAreaSolid*>(in));
2136 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcRevolvedAreaSolid"); } do { // convert the 'Axis' argument
2137 boost::shared_ptr<const DataType> arg = params[base++];
2138 try { GenericConvert( in->Axis, arg, db ); break; }
2139 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcRevolvedAreaSolid to be a `IfcAxis1Placement`")); }
2140 } while(0);
2141 do { // convert the 'Angle' argument
2142 boost::shared_ptr<const DataType> arg = params[base++];
2143 try { GenericConvert( in->Angle, arg, db ); break; }
2144 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcRevolvedAreaSolid to be a `IfcPlaneAngleMeasure`")); }
2145 } while(0);
2146 return base;
2147 }
2148 // -----------------------------------------------------------------------------------------------------------
2149 template <> size_t GenericFill<IfcStructuralSurfaceConnection>(const DB& db, const LIST& params, IfcStructuralSurfaceConnection* in)
2150 {
2151 size_t base = GenericFill(db,params,static_cast<IfcStructuralConnection*>(in));
2152 // this data structure is not used yet, so there is no code generated to fill its members
2153 return base;
2154 }
2155 // -----------------------------------------------------------------------------------------------------------
2156 template <> size_t GenericFill<IfcRadiusDimension>(const DB& db, const LIST& params, IfcRadiusDimension* in)
2157 {
2158 size_t base = GenericFill(db,params,static_cast<IfcDimensionCurveDirectedCallout*>(in));
2159 // this data structure is not used yet, so there is no code generated to fill its members
2160 return base;
2161 }
2162 // -----------------------------------------------------------------------------------------------------------
2163 template <> size_t GenericFill<IfcSweptDiskSolid>(const DB& db, const LIST& params, IfcSweptDiskSolid* in)
2164 {
2165 size_t base = GenericFill(db,params,static_cast<IfcSolidModel*>(in));
2166 if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcSweptDiskSolid"); } do { // convert the 'Directrix' argument
2167 boost::shared_ptr<const DataType> arg = params[base++];
2168 try { GenericConvert( in->Directrix, arg, db ); break; }
2169 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSweptDiskSolid to be a `IfcCurve`")); }
2170 } while(0);
2171 do { // convert the 'Radius' argument
2172 boost::shared_ptr<const DataType> arg = params[base++];
2173 try { GenericConvert( in->Radius, arg, db ); break; }
2174 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcSweptDiskSolid to be a `IfcPositiveLengthMeasure`")); }
2175 } while(0);
2176 do { // convert the 'InnerRadius' argument
2177 boost::shared_ptr<const DataType> arg = params[base++];
2178 if (dynamic_cast<const UNSET*>(&*arg)) break;
2179 try { GenericConvert( in->InnerRadius, arg, db ); break; }
2180 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcSweptDiskSolid to be a `IfcPositiveLengthMeasure`")); }
2181 } while(0);
2182 do { // convert the 'StartParam' argument
2183 boost::shared_ptr<const DataType> arg = params[base++];
2184 try { GenericConvert( in->StartParam, arg, db ); break; }
2185 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcSweptDiskSolid to be a `IfcParameterValue`")); }
2186 } while(0);
2187 do { // convert the 'EndParam' argument
2188 boost::shared_ptr<const DataType> arg = params[base++];
2189 try { GenericConvert( in->EndParam, arg, db ); break; }
2190 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcSweptDiskSolid to be a `IfcParameterValue`")); }
2191 } while(0);
2192 return base;
13082193 }
13092194 // -----------------------------------------------------------------------------------------------------------
13102195 template <> size_t GenericFill<IfcHalfSpaceSolid>(const DB& db, const LIST& params, IfcHalfSpaceSolid* in)
13412226 return base;
13422227 }
13432228 // -----------------------------------------------------------------------------------------------------------
1344 template <> size_t GenericFill<IfcAirToAirHeatRecoveryType>(const DB& db, const LIST& params, IfcAirToAirHeatRecoveryType* in)
2229 template <> size_t GenericFill<IfcTimeSeriesSchedule>(const DB& db, const LIST& params, IfcTimeSeriesSchedule* in)
2230 {
2231 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
2232 // this data structure is not used yet, so there is no code generated to fill its members
2233 return base;
2234 }
2235 // -----------------------------------------------------------------------------------------------------------
2236 template <> size_t GenericFill<IfcCooledBeamType>(const DB& db, const LIST& params, IfcCooledBeamType* in)
13452237 {
13462238 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
13472239 // this data structure is not used yet, so there is no code generated to fill its members
13482240 return base;
13492241 }
13502242 // -----------------------------------------------------------------------------------------------------------
1351 template <> size_t GenericFill<IfcFlowFittingType>(const DB& db, const LIST& params, IfcFlowFittingType* in)
2243 template <> size_t GenericFill<IfcProject>(const DB& db, const LIST& params, IfcProject* in)
2244 {
2245 size_t base = GenericFill(db,params,static_cast<IfcObject*>(in));
2246 if (params.GetSize() < 9) { throw STEP::TypeError("expected 9 arguments to IfcProject"); } do { // convert the 'LongName' argument
2247 boost::shared_ptr<const DataType> arg = params[base++];
2248 if (dynamic_cast<const UNSET*>(&*arg)) break;
2249 try { GenericConvert( in->LongName, arg, db ); break; }
2250 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcProject to be a `IfcLabel`")); }
2251 } while(0);
2252 do { // convert the 'Phase' argument
2253 boost::shared_ptr<const DataType> arg = params[base++];
2254 if (dynamic_cast<const UNSET*>(&*arg)) break;
2255 try { GenericConvert( in->Phase, arg, db ); break; }
2256 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 6 to IfcProject to be a `IfcLabel`")); }
2257 } while(0);
2258 do { // convert the 'RepresentationContexts' argument
2259 boost::shared_ptr<const DataType> arg = params[base++];
2260 try { GenericConvert( in->RepresentationContexts, arg, db ); break; }
2261 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcProject to be a `SET [1:?] OF IfcRepresentationContext`")); }
2262 } while(0);
2263 do { // convert the 'UnitsInContext' argument
2264 boost::shared_ptr<const DataType> arg = params[base++];
2265 try { GenericConvert( in->UnitsInContext, arg, db ); break; }
2266 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 8 to IfcProject to be a `IfcUnitAssignment`")); }
2267 } while(0);
2268 return base;
2269 }
2270 // -----------------------------------------------------------------------------------------------------------
2271 template <> size_t GenericFill<IfcEvaporatorType>(const DB& db, const LIST& params, IfcEvaporatorType* in)
2272 {
2273 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
2274 // this data structure is not used yet, so there is no code generated to fill its members
2275 return base;
2276 }
2277 // -----------------------------------------------------------------------------------------------------------
2278 template <> size_t GenericFill<IfcLaborResource>(const DB& db, const LIST& params, IfcLaborResource* in)
2279 {
2280 size_t base = GenericFill(db,params,static_cast<IfcConstructionResource*>(in));
2281 // this data structure is not used yet, so there is no code generated to fill its members
2282 return base;
2283 }
2284 // -----------------------------------------------------------------------------------------------------------
2285 template <> size_t GenericFill<IfcPropertyBoundedValue>(const DB& db, const LIST& params, IfcPropertyBoundedValue* in)
2286 {
2287 size_t base = GenericFill(db,params,static_cast<IfcSimpleProperty*>(in));
2288 // this data structure is not used yet, so there is no code generated to fill its members
2289 return base;
2290 }
2291 // -----------------------------------------------------------------------------------------------------------
2292 template <> size_t GenericFill<IfcRampFlightType>(const DB& db, const LIST& params, IfcRampFlightType* in)
2293 {
2294 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
2295 // this data structure is not used yet, so there is no code generated to fill its members
2296 return base;
2297 }
2298 // -----------------------------------------------------------------------------------------------------------
2299 template <> size_t GenericFill<IfcMember>(const DB& db, const LIST& params, IfcMember* in)
2300 {
2301 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
2302 // this data structure is not used yet, so there is no code generated to fill its members
2303 return base;
2304 }
2305 // -----------------------------------------------------------------------------------------------------------
2306 template <> size_t GenericFill<IfcTubeBundleType>(const DB& db, const LIST& params, IfcTubeBundleType* in)
2307 {
2308 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
2309 // this data structure is not used yet, so there is no code generated to fill its members
2310 return base;
2311 }
2312 // -----------------------------------------------------------------------------------------------------------
2313 template <> size_t GenericFill<IfcValveType>(const DB& db, const LIST& params, IfcValveType* in)
2314 {
2315 size_t base = GenericFill(db,params,static_cast<IfcFlowControllerType*>(in));
2316 // this data structure is not used yet, so there is no code generated to fill its members
2317 return base;
2318 }
2319 // -----------------------------------------------------------------------------------------------------------
2320 template <> size_t GenericFill<IfcTrimmedCurve>(const DB& db, const LIST& params, IfcTrimmedCurve* in)
2321 {
2322 size_t base = GenericFill(db,params,static_cast<IfcBoundedCurve*>(in));
2323 if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcTrimmedCurve"); } do { // convert the 'BasisCurve' argument
2324 boost::shared_ptr<const DataType> arg = params[base++];
2325 try { GenericConvert( in->BasisCurve, arg, db ); break; }
2326 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcTrimmedCurve to be a `IfcCurve`")); }
2327 } while(0);
2328 do { // convert the 'Trim1' argument
2329 boost::shared_ptr<const DataType> arg = params[base++];
2330 try { GenericConvert( in->Trim1, arg, db ); break; }
2331 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcTrimmedCurve to be a `SET [1:2] OF IfcTrimmingSelect`")); }
2332 } while(0);
2333 do { // convert the 'Trim2' argument
2334 boost::shared_ptr<const DataType> arg = params[base++];
2335 try { GenericConvert( in->Trim2, arg, db ); break; }
2336 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcTrimmedCurve to be a `SET [1:2] OF IfcTrimmingSelect`")); }
2337 } while(0);
2338 do { // convert the 'SenseAgreement' argument
2339 boost::shared_ptr<const DataType> arg = params[base++];
2340 try { GenericConvert( in->SenseAgreement, arg, db ); break; }
2341 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcTrimmedCurve to be a `BOOLEAN`")); }
2342 } while(0);
2343 do { // convert the 'MasterRepresentation' argument
2344 boost::shared_ptr<const DataType> arg = params[base++];
2345 try { GenericConvert( in->MasterRepresentation, arg, db ); break; }
2346 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcTrimmedCurve to be a `IfcTrimmingPreference`")); }
2347 } while(0);
2348 return base;
2349 }
2350 // -----------------------------------------------------------------------------------------------------------
2351 template <> size_t GenericFill<IfcRelDefines>(const DB& db, const LIST& params, IfcRelDefines* in)
2352 {
2353 size_t base = GenericFill(db,params,static_cast<IfcRelationship*>(in));
2354 if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcRelDefines"); } do { // convert the 'RelatedObjects' argument
2355 boost::shared_ptr<const DataType> arg = params[base++];
2356 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRelDefines,1>::aux_is_derived[0]=true; break; }
2357 try { GenericConvert( in->RelatedObjects, arg, db ); break; }
2358 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelDefines to be a `SET [1:?] OF IfcObject`")); }
2359 } while(0);
2360 return base;
2361 }
2362 // -----------------------------------------------------------------------------------------------------------
2363 template <> size_t GenericFill<IfcRelDefinesByProperties>(const DB& db, const LIST& params, IfcRelDefinesByProperties* in)
2364 {
2365 size_t base = GenericFill(db,params,static_cast<IfcRelDefines*>(in));
2366 if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelDefinesByProperties"); } do { // convert the 'RelatingPropertyDefinition' argument
2367 boost::shared_ptr<const DataType> arg = params[base++];
2368 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRelDefinesByProperties,1>::aux_is_derived[0]=true; break; }
2369 try { GenericConvert( in->RelatingPropertyDefinition, arg, db ); break; }
2370 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelDefinesByProperties to be a `IfcPropertySetDefinition`")); }
2371 } while(0);
2372 return base;
2373 }
2374 // -----------------------------------------------------------------------------------------------------------
2375 template <> size_t GenericFill<IfcActor>(const DB& db, const LIST& params, IfcActor* in)
2376 {
2377 size_t base = GenericFill(db,params,static_cast<IfcObject*>(in));
2378 // this data structure is not used yet, so there is no code generated to fill its members
2379 return base;
2380 }
2381 // -----------------------------------------------------------------------------------------------------------
2382 template <> size_t GenericFill<IfcOccupant>(const DB& db, const LIST& params, IfcOccupant* in)
2383 {
2384 size_t base = GenericFill(db,params,static_cast<IfcActor*>(in));
2385 // this data structure is not used yet, so there is no code generated to fill its members
2386 return base;
2387 }
2388 // -----------------------------------------------------------------------------------------------------------
2389 template <> size_t GenericFill<IfcHumidifierType>(const DB& db, const LIST& params, IfcHumidifierType* in)
2390 {
2391 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
2392 // this data structure is not used yet, so there is no code generated to fill its members
2393 return base;
2394 }
2395 // -----------------------------------------------------------------------------------------------------------
2396 template <> size_t GenericFill<IfcArbitraryOpenProfileDef>(const DB& db, const LIST& params, IfcArbitraryOpenProfileDef* in)
2397 {
2398 size_t base = GenericFill(db,params,static_cast<IfcProfileDef*>(in));
2399 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcArbitraryOpenProfileDef"); } do { // convert the 'Curve' argument
2400 boost::shared_ptr<const DataType> arg = params[base++];
2401 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcArbitraryOpenProfileDef,1>::aux_is_derived[0]=true; break; }
2402 try { GenericConvert( in->Curve, arg, db ); break; }
2403 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcArbitraryOpenProfileDef to be a `IfcBoundedCurve`")); }
2404 } while(0);
2405 return base;
2406 }
2407 // -----------------------------------------------------------------------------------------------------------
2408 template <> size_t GenericFill<IfcPermit>(const DB& db, const LIST& params, IfcPermit* in)
2409 {
2410 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
2411 // this data structure is not used yet, so there is no code generated to fill its members
2412 return base;
2413 }
2414 // -----------------------------------------------------------------------------------------------------------
2415 template <> size_t GenericFill<IfcOffsetCurve3D>(const DB& db, const LIST& params, IfcOffsetCurve3D* in)
2416 {
2417 size_t base = GenericFill(db,params,static_cast<IfcCurve*>(in));
2418 // this data structure is not used yet, so there is no code generated to fill its members
2419 return base;
2420 }
2421 // -----------------------------------------------------------------------------------------------------------
2422 template <> size_t GenericFill<IfcLightSource>(const DB& db, const LIST& params, IfcLightSource* in)
2423 {
2424 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
2425 // this data structure is not used yet, so there is no code generated to fill its members
2426 return base;
2427 }
2428 // -----------------------------------------------------------------------------------------------------------
2429 template <> size_t GenericFill<IfcLightSourcePositional>(const DB& db, const LIST& params, IfcLightSourcePositional* in)
2430 {
2431 size_t base = GenericFill(db,params,static_cast<IfcLightSource*>(in));
2432 // this data structure is not used yet, so there is no code generated to fill its members
2433 return base;
2434 }
2435 // -----------------------------------------------------------------------------------------------------------
2436 template <> size_t GenericFill<IfcCompositeProfileDef>(const DB& db, const LIST& params, IfcCompositeProfileDef* in)
2437 {
2438 size_t base = GenericFill(db,params,static_cast<IfcProfileDef*>(in));
2439 // this data structure is not used yet, so there is no code generated to fill its members
2440 return base;
2441 }
2442 // -----------------------------------------------------------------------------------------------------------
2443 template <> size_t GenericFill<IfcRamp>(const DB& db, const LIST& params, IfcRamp* in)
2444 {
2445 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
2446 // this data structure is not used yet, so there is no code generated to fill its members
2447 return base;
2448 }
2449 // -----------------------------------------------------------------------------------------------------------
2450 template <> size_t GenericFill<IfcFlowMovingDevice>(const DB& db, const LIST& params, IfcFlowMovingDevice* in)
2451 {
2452 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElement*>(in));
2453 // this data structure is not used yet, so there is no code generated to fill its members
2454 return base;
2455 }
2456 // -----------------------------------------------------------------------------------------------------------
2457 template <> size_t GenericFill<IfcSpaceHeaterType>(const DB& db, const LIST& params, IfcSpaceHeaterType* in)
2458 {
2459 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
2460 // this data structure is not used yet, so there is no code generated to fill its members
2461 return base;
2462 }
2463 // -----------------------------------------------------------------------------------------------------------
2464 template <> size_t GenericFill<IfcLampType>(const DB& db, const LIST& params, IfcLampType* in)
2465 {
2466 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
2467 // this data structure is not used yet, so there is no code generated to fill its members
2468 return base;
2469 }
2470 // -----------------------------------------------------------------------------------------------------------
2471 template <> size_t GenericFill<IfcBuildingElementComponent>(const DB& db, const LIST& params, IfcBuildingElementComponent* in)
2472 {
2473 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
2474 // this data structure is not used yet, so there is no code generated to fill its members
2475 return base;
2476 }
2477 // -----------------------------------------------------------------------------------------------------------
2478 template <> size_t GenericFill<IfcReinforcingElement>(const DB& db, const LIST& params, IfcReinforcingElement* in)
2479 {
2480 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementComponent*>(in));
2481 // this data structure is not used yet, so there is no code generated to fill its members
2482 return base;
2483 }
2484 // -----------------------------------------------------------------------------------------------------------
2485 template <> size_t GenericFill<IfcReinforcingBar>(const DB& db, const LIST& params, IfcReinforcingBar* in)
2486 {
2487 size_t base = GenericFill(db,params,static_cast<IfcReinforcingElement*>(in));
2488 // this data structure is not used yet, so there is no code generated to fill its members
2489 return base;
2490 }
2491 // -----------------------------------------------------------------------------------------------------------
2492 template <> size_t GenericFill<IfcElectricHeaterType>(const DB& db, const LIST& params, IfcElectricHeaterType* in)
2493 {
2494 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
2495 // this data structure is not used yet, so there is no code generated to fill its members
2496 return base;
2497 }
2498 // -----------------------------------------------------------------------------------------------------------
2499 template <> size_t GenericFill<IfcTShapeProfileDef>(const DB& db, const LIST& params, IfcTShapeProfileDef* in)
2500 {
2501 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
2502 // this data structure is not used yet, so there is no code generated to fill its members
2503 return base;
2504 }
2505 // -----------------------------------------------------------------------------------------------------------
2506 template <> size_t GenericFill<IfcStructuralActivity>(const DB& db, const LIST& params, IfcStructuralActivity* in)
2507 {
2508 size_t base = GenericFill(db,params,static_cast<IfcProduct*>(in));
2509 // this data structure is not used yet, so there is no code generated to fill its members
2510 return base;
2511 }
2512 // -----------------------------------------------------------------------------------------------------------
2513 template <> size_t GenericFill<IfcStructuralAction>(const DB& db, const LIST& params, IfcStructuralAction* in)
2514 {
2515 size_t base = GenericFill(db,params,static_cast<IfcStructuralActivity*>(in));
2516 // this data structure is not used yet, so there is no code generated to fill its members
2517 return base;
2518 }
2519 // -----------------------------------------------------------------------------------------------------------
2520 template <> size_t GenericFill<IfcDuctFittingType>(const DB& db, const LIST& params, IfcDuctFittingType* in)
2521 {
2522 size_t base = GenericFill(db,params,static_cast<IfcFlowFittingType*>(in));
2523 // this data structure is not used yet, so there is no code generated to fill its members
2524 return base;
2525 }
2526 // -----------------------------------------------------------------------------------------------------------
2527 template <> size_t GenericFill<IfcCartesianTransformationOperator2D>(const DB& db, const LIST& params, IfcCartesianTransformationOperator2D* in)
2528 {
2529 size_t base = GenericFill(db,params,static_cast<IfcCartesianTransformationOperator*>(in));
2530 // this data structure is not used yet, so there is no code generated to fill its members
2531 return base;
2532 }
2533 // -----------------------------------------------------------------------------------------------------------
2534 template <> size_t GenericFill<IfcCartesianTransformationOperator2DnonUniform>(const DB& db, const LIST& params, IfcCartesianTransformationOperator2DnonUniform* in)
2535 {
2536 size_t base = GenericFill(db,params,static_cast<IfcCartesianTransformationOperator2D*>(in));
2537 // this data structure is not used yet, so there is no code generated to fill its members
2538 return base;
2539 }
2540 // -----------------------------------------------------------------------------------------------------------
2541 template <> size_t GenericFill<IfcVirtualElement>(const DB& db, const LIST& params, IfcVirtualElement* in)
2542 {
2543 size_t base = GenericFill(db,params,static_cast<IfcElement*>(in));
2544 // this data structure is not used yet, so there is no code generated to fill its members
2545 return base;
2546 }
2547 // -----------------------------------------------------------------------------------------------------------
2548 template <> size_t GenericFill<IfcRightCircularCylinder>(const DB& db, const LIST& params, IfcRightCircularCylinder* in)
2549 {
2550 size_t base = GenericFill(db,params,static_cast<IfcCsgPrimitive3D*>(in));
2551 // this data structure is not used yet, so there is no code generated to fill its members
2552 return base;
2553 }
2554 // -----------------------------------------------------------------------------------------------------------
2555 template <> size_t GenericFill<IfcOutletType>(const DB& db, const LIST& params, IfcOutletType* in)
2556 {
2557 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
2558 // this data structure is not used yet, so there is no code generated to fill its members
2559 return base;
2560 }
2561 // -----------------------------------------------------------------------------------------------------------
2562 template <> size_t GenericFill<IfcRelDecomposes>(const DB& db, const LIST& params, IfcRelDecomposes* in)
2563 {
2564 size_t base = GenericFill(db,params,static_cast<IfcRelationship*>(in));
2565 if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelDecomposes"); } do { // convert the 'RelatingObject' argument
2566 boost::shared_ptr<const DataType> arg = params[base++];
2567 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRelDecomposes,2>::aux_is_derived[0]=true; break; }
2568 try { GenericConvert( in->RelatingObject, arg, db ); break; }
2569 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelDecomposes to be a `IfcObjectDefinition`")); }
2570 } while(0);
2571 do { // convert the 'RelatedObjects' argument
2572 boost::shared_ptr<const DataType> arg = params[base++];
2573 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRelDecomposes,2>::aux_is_derived[1]=true; break; }
2574 try { GenericConvert( in->RelatedObjects, arg, db ); break; }
2575 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelDecomposes to be a `SET [1:?] OF IfcObjectDefinition`")); }
2576 } while(0);
2577 return base;
2578 }
2579 // -----------------------------------------------------------------------------------------------------------
2580 template <> size_t GenericFill<IfcCovering>(const DB& db, const LIST& params, IfcCovering* in)
2581 {
2582 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
2583 // this data structure is not used yet, so there is no code generated to fill its members
2584 return base;
2585 }
2586 // -----------------------------------------------------------------------------------------------------------
2587 template <> size_t GenericFill<IfcPolyline>(const DB& db, const LIST& params, IfcPolyline* in)
2588 {
2589 size_t base = GenericFill(db,params,static_cast<IfcBoundedCurve*>(in));
2590 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPolyline"); } do { // convert the 'Points' argument
2591 boost::shared_ptr<const DataType> arg = params[base++];
2592 try { GenericConvert( in->Points, arg, db ); break; }
2593 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPolyline to be a `LIST [2:?] OF IfcCartesianPoint`")); }
2594 } while(0);
2595 return base;
2596 }
2597 // -----------------------------------------------------------------------------------------------------------
2598 template <> size_t GenericFill<IfcPath>(const DB& db, const LIST& params, IfcPath* in)
2599 {
2600 size_t base = GenericFill(db,params,static_cast<IfcTopologicalRepresentationItem*>(in));
2601 // this data structure is not used yet, so there is no code generated to fill its members
2602 return base;
2603 }
2604 // -----------------------------------------------------------------------------------------------------------
2605 template <> size_t GenericFill<IfcElementComponent>(const DB& db, const LIST& params, IfcElementComponent* in)
2606 {
2607 size_t base = GenericFill(db,params,static_cast<IfcElement*>(in));
2608 // this data structure is not used yet, so there is no code generated to fill its members
2609 return base;
2610 }
2611 // -----------------------------------------------------------------------------------------------------------
2612 template <> size_t GenericFill<IfcFastener>(const DB& db, const LIST& params, IfcFastener* in)
2613 {
2614 size_t base = GenericFill(db,params,static_cast<IfcElementComponent*>(in));
2615 // this data structure is not used yet, so there is no code generated to fill its members
2616 return base;
2617 }
2618 // -----------------------------------------------------------------------------------------------------------
2619 template <> size_t GenericFill<IfcMappedItem>(const DB& db, const LIST& params, IfcMappedItem* in)
2620 {
2621 size_t base = GenericFill(db,params,static_cast<IfcRepresentationItem*>(in));
2622 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcMappedItem"); } do { // convert the 'MappingSource' argument
2623 boost::shared_ptr<const DataType> arg = params[base++];
2624 try { GenericConvert( in->MappingSource, arg, db ); break; }
2625 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcMappedItem to be a `IfcRepresentationMap`")); }
2626 } while(0);
2627 do { // convert the 'MappingTarget' argument
2628 boost::shared_ptr<const DataType> arg = params[base++];
2629 try { GenericConvert( in->MappingTarget, arg, db ); break; }
2630 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcMappedItem to be a `IfcCartesianTransformationOperator`")); }
2631 } while(0);
2632 return base;
2633 }
2634 // -----------------------------------------------------------------------------------------------------------
2635 template <> size_t GenericFill<IfcRectangularPyramid>(const DB& db, const LIST& params, IfcRectangularPyramid* in)
2636 {
2637 size_t base = GenericFill(db,params,static_cast<IfcCsgPrimitive3D*>(in));
2638 // this data structure is not used yet, so there is no code generated to fill its members
2639 return base;
2640 }
2641 // -----------------------------------------------------------------------------------------------------------
2642 template <> size_t GenericFill<IfcCrewResource>(const DB& db, const LIST& params, IfcCrewResource* in)
2643 {
2644 size_t base = GenericFill(db,params,static_cast<IfcConstructionResource*>(in));
2645 // this data structure is not used yet, so there is no code generated to fill its members
2646 return base;
2647 }
2648 // -----------------------------------------------------------------------------------------------------------
2649 template <> size_t GenericFill<IfcNamedUnit>(const DB& db, const LIST& params, IfcNamedUnit* in)
2650 {
2651 size_t base = 0;
2652 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcNamedUnit"); } do { // convert the 'Dimensions' argument
2653 boost::shared_ptr<const DataType> arg = params[base++];
2654 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcNamedUnit,2>::aux_is_derived[0]=true; break; }
2655 try { GenericConvert( in->Dimensions, arg, db ); break; }
2656 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcNamedUnit to be a `IfcDimensionalExponents`")); }
2657 } while(0);
2658 do { // convert the 'UnitType' argument
2659 boost::shared_ptr<const DataType> arg = params[base++];
2660 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcNamedUnit,2>::aux_is_derived[1]=true; break; }
2661 try { GenericConvert( in->UnitType, arg, db ); break; }
2662 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcNamedUnit to be a `IfcUnitEnum`")); }
2663 } while(0);
2664 return base;
2665 }
2666 // -----------------------------------------------------------------------------------------------------------
2667 template <> size_t GenericFill<IfcContextDependentUnit>(const DB& db, const LIST& params, IfcContextDependentUnit* in)
2668 {
2669 size_t base = GenericFill(db,params,static_cast<IfcNamedUnit*>(in));
2670 // this data structure is not used yet, so there is no code generated to fill its members
2671 return base;
2672 }
2673 // -----------------------------------------------------------------------------------------------------------
2674 template <> size_t GenericFill<IfcUnitaryEquipmentType>(const DB& db, const LIST& params, IfcUnitaryEquipmentType* in)
2675 {
2676 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
2677 // this data structure is not used yet, so there is no code generated to fill its members
2678 return base;
2679 }
2680 // -----------------------------------------------------------------------------------------------------------
2681 template <> size_t GenericFill<IfcRoof>(const DB& db, const LIST& params, IfcRoof* in)
2682 {
2683 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
2684 // this data structure is not used yet, so there is no code generated to fill its members
2685 return base;
2686 }
2687 // -----------------------------------------------------------------------------------------------------------
2688 template <> size_t GenericFill<IfcStructuralMember>(const DB& db, const LIST& params, IfcStructuralMember* in)
2689 {
2690 size_t base = GenericFill(db,params,static_cast<IfcStructuralItem*>(in));
2691 // this data structure is not used yet, so there is no code generated to fill its members
2692 return base;
2693 }
2694 // -----------------------------------------------------------------------------------------------------------
2695 template <> size_t GenericFill<IfcStyleModel>(const DB& db, const LIST& params, IfcStyleModel* in)
2696 {
2697 size_t base = GenericFill(db,params,static_cast<IfcRepresentation*>(in));
2698 // this data structure is not used yet, so there is no code generated to fill its members
2699 return base;
2700 }
2701 // -----------------------------------------------------------------------------------------------------------
2702 template <> size_t GenericFill<IfcStyledRepresentation>(const DB& db, const LIST& params, IfcStyledRepresentation* in)
2703 {
2704 size_t base = GenericFill(db,params,static_cast<IfcStyleModel*>(in));
2705 // this data structure is not used yet, so there is no code generated to fill its members
2706 return base;
2707 }
2708 // -----------------------------------------------------------------------------------------------------------
2709 template <> size_t GenericFill<IfcSpatialStructureElement>(const DB& db, const LIST& params, IfcSpatialStructureElement* in)
2710 {
2711 size_t base = GenericFill(db,params,static_cast<IfcProduct*>(in));
2712 if (params.GetSize() < 9) { throw STEP::TypeError("expected 9 arguments to IfcSpatialStructureElement"); } do { // convert the 'LongName' argument
2713 boost::shared_ptr<const DataType> arg = params[base++];
2714 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcSpatialStructureElement,2>::aux_is_derived[0]=true; break; }
2715 if (dynamic_cast<const UNSET*>(&*arg)) break;
2716 try { GenericConvert( in->LongName, arg, db ); break; }
2717 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcSpatialStructureElement to be a `IfcLabel`")); }
2718 } while(0);
2719 do { // convert the 'CompositionType' argument
2720 boost::shared_ptr<const DataType> arg = params[base++];
2721 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcSpatialStructureElement,2>::aux_is_derived[1]=true; break; }
2722 try { GenericConvert( in->CompositionType, arg, db ); break; }
2723 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 8 to IfcSpatialStructureElement to be a `IfcElementCompositionEnum`")); }
2724 } while(0);
2725 return base;
2726 }
2727 // -----------------------------------------------------------------------------------------------------------
2728 template <> size_t GenericFill<IfcBuilding>(const DB& db, const LIST& params, IfcBuilding* in)
2729 {
2730 size_t base = GenericFill(db,params,static_cast<IfcSpatialStructureElement*>(in));
2731 if (params.GetSize() < 12) { throw STEP::TypeError("expected 12 arguments to IfcBuilding"); } do { // convert the 'ElevationOfRefHeight' argument
2732 boost::shared_ptr<const DataType> arg = params[base++];
2733 if (dynamic_cast<const UNSET*>(&*arg)) break;
2734 try { GenericConvert( in->ElevationOfRefHeight, arg, db ); break; }
2735 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcBuilding to be a `IfcLengthMeasure`")); }
2736 } while(0);
2737 do { // convert the 'ElevationOfTerrain' argument
2738 boost::shared_ptr<const DataType> arg = params[base++];
2739 if (dynamic_cast<const UNSET*>(&*arg)) break;
2740 try { GenericConvert( in->ElevationOfTerrain, arg, db ); break; }
2741 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 10 to IfcBuilding to be a `IfcLengthMeasure`")); }
2742 } while(0);
2743 do { // convert the 'BuildingAddress' argument
2744 boost::shared_ptr<const DataType> arg = params[base++];
2745 if (dynamic_cast<const UNSET*>(&*arg)) break;
2746 try { GenericConvert( in->BuildingAddress, arg, db ); break; }
2747 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 11 to IfcBuilding to be a `IfcPostalAddress`")); }
2748 } while(0);
2749 return base;
2750 }
2751 // -----------------------------------------------------------------------------------------------------------
2752 template <> size_t GenericFill<IfcConnectedFaceSet>(const DB& db, const LIST& params, IfcConnectedFaceSet* in)
2753 {
2754 size_t base = GenericFill(db,params,static_cast<IfcTopologicalRepresentationItem*>(in));
2755 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcConnectedFaceSet"); } do { // convert the 'CfsFaces' argument
2756 boost::shared_ptr<const DataType> arg = params[base++];
2757 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcConnectedFaceSet,1>::aux_is_derived[0]=true; break; }
2758 try { GenericConvert( in->CfsFaces, arg, db ); break; }
2759 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcConnectedFaceSet to be a `SET [1:?] OF IfcFace`")); }
2760 } while(0);
2761 return base;
2762 }
2763 // -----------------------------------------------------------------------------------------------------------
2764 template <> size_t GenericFill<IfcOpenShell>(const DB& db, const LIST& params, IfcOpenShell* in)
2765 {
2766 size_t base = GenericFill(db,params,static_cast<IfcConnectedFaceSet*>(in));
2767 // this data structure is not used yet, so there is no code generated to fill its members
2768 return base;
2769 }
2770 // -----------------------------------------------------------------------------------------------------------
2771 template <> size_t GenericFill<IfcFacetedBrep>(const DB& db, const LIST& params, IfcFacetedBrep* in)
2772 {
2773 size_t base = GenericFill(db,params,static_cast<IfcManifoldSolidBrep*>(in));
2774 // this data structure is not used yet, so there is no code generated to fill its members
2775 return base;
2776 }
2777 // -----------------------------------------------------------------------------------------------------------
2778 template <> size_t GenericFill<IfcConic>(const DB& db, const LIST& params, IfcConic* in)
2779 {
2780 size_t base = GenericFill(db,params,static_cast<IfcCurve*>(in));
2781 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcConic"); } do { // convert the 'Position' argument
2782 boost::shared_ptr<const DataType> arg = params[base++];
2783 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcConic,1>::aux_is_derived[0]=true; break; }
2784 try { GenericConvert( in->Position, arg, db ); break; }
2785 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcConic to be a `IfcAxis2Placement`")); }
2786 } while(0);
2787 return base;
2788 }
2789 // -----------------------------------------------------------------------------------------------------------
2790 template <> size_t GenericFill<IfcCoveringType>(const DB& db, const LIST& params, IfcCoveringType* in)
2791 {
2792 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
2793 // this data structure is not used yet, so there is no code generated to fill its members
2794 return base;
2795 }
2796 // -----------------------------------------------------------------------------------------------------------
2797 template <> size_t GenericFill<IfcRoundedRectangleProfileDef>(const DB& db, const LIST& params, IfcRoundedRectangleProfileDef* in)
2798 {
2799 size_t base = GenericFill(db,params,static_cast<IfcRectangleProfileDef*>(in));
2800 // this data structure is not used yet, so there is no code generated to fill its members
2801 return base;
2802 }
2803 // -----------------------------------------------------------------------------------------------------------
2804 template <> size_t GenericFill<IfcAirTerminalType>(const DB& db, const LIST& params, IfcAirTerminalType* in)
2805 {
2806 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
2807 // this data structure is not used yet, so there is no code generated to fill its members
2808 return base;
2809 }
2810 // -----------------------------------------------------------------------------------------------------------
2811 template <> size_t GenericFill<IfcFlowMovingDeviceType>(const DB& db, const LIST& params, IfcFlowMovingDeviceType* in)
13522812 {
13532813 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElementType*>(in));
13542814 // this data structure is not used yet, so there is no code generated to fill its members
13552815 return base;
13562816 }
13572817 // -----------------------------------------------------------------------------------------------------------
1358 template <> size_t GenericFill<IfcPipeFittingType>(const DB& db, const LIST& params, IfcPipeFittingType* in)
1359 {
1360 size_t base = GenericFill(db,params,static_cast<IfcFlowFittingType*>(in));
1361 // this data structure is not used yet, so there is no code generated to fill its members
1362 return base;
1363 }
1364 // -----------------------------------------------------------------------------------------------------------
1365 template <> size_t GenericFill<IfcRepresentation>(const DB& db, const LIST& params, IfcRepresentation* in)
1366 {
1367 size_t base = 0;
1368 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcRepresentation"); } do { // convert the 'ContextOfItems' argument
1369 boost::shared_ptr<const DataType> arg = params[base++];
1370 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRepresentation,4>::aux_is_derived[0]=true; break; }
1371 try { GenericConvert( in->ContextOfItems, arg, db ); break; }
1372 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcRepresentation to be a `IfcRepresentationContext`")); }
1373 } while(0);
1374 do { // convert the 'RepresentationIdentifier' argument
1375 boost::shared_ptr<const DataType> arg = params[base++];
1376 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRepresentation,4>::aux_is_derived[1]=true; break; }
1377 if (dynamic_cast<const UNSET*>(&*arg)) break;
1378 try { GenericConvert( in->RepresentationIdentifier, arg, db ); break; }
1379 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcRepresentation to be a `IfcLabel`")); }
1380 } while(0);
1381 do { // convert the 'RepresentationType' argument
1382 boost::shared_ptr<const DataType> arg = params[base++];
1383 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRepresentation,4>::aux_is_derived[2]=true; break; }
1384 if (dynamic_cast<const UNSET*>(&*arg)) break;
1385 try { GenericConvert( in->RepresentationType, arg, db ); break; }
1386 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcRepresentation to be a `IfcLabel`")); }
1387 } while(0);
1388 do { // convert the 'Items' argument
1389 boost::shared_ptr<const DataType> arg = params[base++];
1390 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRepresentation,4>::aux_is_derived[3]=true; break; }
1391 try { GenericConvert( in->Items, arg, db ); break; }
1392 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcRepresentation to be a `SET [1:?] OF IfcRepresentationItem`")); }
1393 } while(0);
1394 return base;
1395 }
1396 // -----------------------------------------------------------------------------------------------------------
1397 template <> size_t GenericFill<IfcStyleModel>(const DB& db, const LIST& params, IfcStyleModel* in)
1398 {
1399 size_t base = GenericFill(db,params,static_cast<IfcRepresentation*>(in));
1400 // this data structure is not used yet, so there is no code generated to fill its members
1401 return base;
1402 }
1403 // -----------------------------------------------------------------------------------------------------------
1404 template <> size_t GenericFill<IfcStyledRepresentation>(const DB& db, const LIST& params, IfcStyledRepresentation* in)
1405 {
1406 size_t base = GenericFill(db,params,static_cast<IfcStyleModel*>(in));
1407 // this data structure is not used yet, so there is no code generated to fill its members
1408 return base;
1409 }
1410 // -----------------------------------------------------------------------------------------------------------
1411 template <> size_t GenericFill<IfcBooleanResult>(const DB& db, const LIST& params, IfcBooleanResult* in)
1412 {
1413 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
1414 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcBooleanResult"); } do { // convert the 'Operator' argument
1415 boost::shared_ptr<const DataType> arg = params[base++];
1416 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcBooleanResult,3>::aux_is_derived[0]=true; break; }
1417 try { GenericConvert( in->Operator, arg, db ); break; }
1418 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcBooleanResult to be a `IfcBooleanOperator`")); }
1419 } while(0);
1420 do { // convert the 'FirstOperand' argument
1421 boost::shared_ptr<const DataType> arg = params[base++];
1422 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcBooleanResult,3>::aux_is_derived[1]=true; break; }
1423 try { GenericConvert( in->FirstOperand, arg, db ); break; }
1424 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcBooleanResult to be a `IfcBooleanOperand`")); }
1425 } while(0);
1426 do { // convert the 'SecondOperand' argument
1427 boost::shared_ptr<const DataType> arg = params[base++];
1428 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcBooleanResult,3>::aux_is_derived[2]=true; break; }
1429 try { GenericConvert( in->SecondOperand, arg, db ); break; }
1430 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcBooleanResult to be a `IfcBooleanOperand`")); }
1431 } while(0);
1432 return base;
1433 }
1434 // -----------------------------------------------------------------------------------------------------------
1435 template <> size_t GenericFill<IfcFeatureElement>(const DB& db, const LIST& params, IfcFeatureElement* in)
1436 {
1437 size_t base = GenericFill(db,params,static_cast<IfcElement*>(in));
1438 if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcFeatureElement"); } return base;
1439 }
1440 // -----------------------------------------------------------------------------------------------------------
1441 template <> size_t GenericFill<IfcFeatureElementSubtraction>(const DB& db, const LIST& params, IfcFeatureElementSubtraction* in)
1442 {
1443 size_t base = GenericFill(db,params,static_cast<IfcFeatureElement*>(in));
1444 if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcFeatureElementSubtraction"); } return base;
1445 }
1446 // -----------------------------------------------------------------------------------------------------------
1447 template <> size_t GenericFill<IfcOpeningElement>(const DB& db, const LIST& params, IfcOpeningElement* in)
1448 {
1449 size_t base = GenericFill(db,params,static_cast<IfcFeatureElementSubtraction*>(in));
1450 if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcOpeningElement"); } return base;
1451 }
1452 // -----------------------------------------------------------------------------------------------------------
1453 template <> size_t GenericFill<IfcConditionCriterion>(const DB& db, const LIST& params, IfcConditionCriterion* in)
2818 template <> size_t GenericFill<IfcCompressorType>(const DB& db, const LIST& params, IfcCompressorType* in)
2819 {
2820 size_t base = GenericFill(db,params,static_cast<IfcFlowMovingDeviceType*>(in));
2821 // this data structure is not used yet, so there is no code generated to fill its members
2822 return base;
2823 }
2824 // -----------------------------------------------------------------------------------------------------------
2825 template <> size_t GenericFill<IfcIShapeProfileDef>(const DB& db, const LIST& params, IfcIShapeProfileDef* in)
2826 {
2827 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
2828 if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcIShapeProfileDef"); } do { // convert the 'OverallWidth' argument
2829 boost::shared_ptr<const DataType> arg = params[base++];
2830 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcIShapeProfileDef,5>::aux_is_derived[0]=true; break; }
2831 try { GenericConvert( in->OverallWidth, arg, db ); break; }
2832 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); }
2833 } while(0);
2834 do { // convert the 'OverallDepth' argument
2835 boost::shared_ptr<const DataType> arg = params[base++];
2836 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcIShapeProfileDef,5>::aux_is_derived[1]=true; break; }
2837 try { GenericConvert( in->OverallDepth, arg, db ); break; }
2838 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); }
2839 } while(0);
2840 do { // convert the 'WebThickness' argument
2841 boost::shared_ptr<const DataType> arg = params[base++];
2842 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcIShapeProfileDef,5>::aux_is_derived[2]=true; break; }
2843 try { GenericConvert( in->WebThickness, arg, db ); break; }
2844 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); }
2845 } while(0);
2846 do { // convert the 'FlangeThickness' argument
2847 boost::shared_ptr<const DataType> arg = params[base++];
2848 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcIShapeProfileDef,5>::aux_is_derived[3]=true; break; }
2849 try { GenericConvert( in->FlangeThickness, arg, db ); break; }
2850 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 6 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); }
2851 } while(0);
2852 do { // convert the 'FilletRadius' argument
2853 boost::shared_ptr<const DataType> arg = params[base++];
2854 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcIShapeProfileDef,5>::aux_is_derived[4]=true; break; }
2855 if (dynamic_cast<const UNSET*>(&*arg)) break;
2856 try { GenericConvert( in->FilletRadius, arg, db ); break; }
2857 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcIShapeProfileDef to be a `IfcPositiveLengthMeasure`")); }
2858 } while(0);
2859 return base;
2860 }
2861 // -----------------------------------------------------------------------------------------------------------
2862 template <> size_t GenericFill<IfcAsymmetricIShapeProfileDef>(const DB& db, const LIST& params, IfcAsymmetricIShapeProfileDef* in)
2863 {
2864 size_t base = GenericFill(db,params,static_cast<IfcIShapeProfileDef*>(in));
2865 // this data structure is not used yet, so there is no code generated to fill its members
2866 return base;
2867 }
2868 // -----------------------------------------------------------------------------------------------------------
2869 template <> size_t GenericFill<IfcControllerType>(const DB& db, const LIST& params, IfcControllerType* in)
2870 {
2871 size_t base = GenericFill(db,params,static_cast<IfcDistributionControlElementType*>(in));
2872 // this data structure is not used yet, so there is no code generated to fill its members
2873 return base;
2874 }
2875 // -----------------------------------------------------------------------------------------------------------
2876 template <> size_t GenericFill<IfcRailing>(const DB& db, const LIST& params, IfcRailing* in)
2877 {
2878 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
2879 // this data structure is not used yet, so there is no code generated to fill its members
2880 return base;
2881 }
2882 // -----------------------------------------------------------------------------------------------------------
2883 template <> size_t GenericFill<IfcGroup>(const DB& db, const LIST& params, IfcGroup* in)
2884 {
2885 size_t base = GenericFill(db,params,static_cast<IfcObject*>(in));
2886 // this data structure is not used yet, so there is no code generated to fill its members
2887 return base;
2888 }
2889 // -----------------------------------------------------------------------------------------------------------
2890 template <> size_t GenericFill<IfcAsset>(const DB& db, const LIST& params, IfcAsset* in)
2891 {
2892 size_t base = GenericFill(db,params,static_cast<IfcGroup*>(in));
2893 // this data structure is not used yet, so there is no code generated to fill its members
2894 return base;
2895 }
2896 // -----------------------------------------------------------------------------------------------------------
2897 template <> size_t GenericFill<IfcMaterialDefinitionRepresentation>(const DB& db, const LIST& params, IfcMaterialDefinitionRepresentation* in)
2898 {
2899 size_t base = GenericFill(db,params,static_cast<IfcProductRepresentation*>(in));
2900 // this data structure is not used yet, so there is no code generated to fill its members
2901 return base;
2902 }
2903 // -----------------------------------------------------------------------------------------------------------
2904 template <> size_t GenericFill<IfcRailingType>(const DB& db, const LIST& params, IfcRailingType* in)
2905 {
2906 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
2907 // this data structure is not used yet, so there is no code generated to fill its members
2908 return base;
2909 }
2910 // -----------------------------------------------------------------------------------------------------------
2911 template <> size_t GenericFill<IfcWall>(const DB& db, const LIST& params, IfcWall* in)
2912 {
2913 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
2914 // this data structure is not used yet, so there is no code generated to fill its members
2915 return base;
2916 }
2917 // -----------------------------------------------------------------------------------------------------------
2918 template <> size_t GenericFill<IfcStructuralPointConnection>(const DB& db, const LIST& params, IfcStructuralPointConnection* in)
2919 {
2920 size_t base = GenericFill(db,params,static_cast<IfcStructuralConnection*>(in));
2921 // this data structure is not used yet, so there is no code generated to fill its members
2922 return base;
2923 }
2924 // -----------------------------------------------------------------------------------------------------------
2925 template <> size_t GenericFill<IfcPropertyListValue>(const DB& db, const LIST& params, IfcPropertyListValue* in)
2926 {
2927 size_t base = GenericFill(db,params,static_cast<IfcSimpleProperty*>(in));
2928 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPropertyListValue"); } do { // convert the 'ListValues' argument
2929 boost::shared_ptr<const DataType> arg = params[base++];
2930 try { GenericConvert( in->ListValues, arg, db ); break; }
2931 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcPropertyListValue to be a `LIST [1:?] OF IfcValue`")); }
2932 } while(0);
2933 do { // convert the 'Unit' argument
2934 boost::shared_ptr<const DataType> arg = params[base++];
2935 if (dynamic_cast<const UNSET*>(&*arg)) break;
2936 try { GenericConvert( in->Unit, arg, db ); break; }
2937 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcPropertyListValue to be a `IfcUnit`")); }
2938 } while(0);
2939 return base;
2940 }
2941 // -----------------------------------------------------------------------------------------------------------
2942 template <> size_t GenericFill<IfcFurnitureStandard>(const DB& db, const LIST& params, IfcFurnitureStandard* in)
14542943 {
14552944 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
14562945 // this data structure is not used yet, so there is no code generated to fill its members
14572946 return base;
14582947 }
14592948 // -----------------------------------------------------------------------------------------------------------
1460 template <> size_t GenericFill<IfcFlowTerminalType>(const DB& db, const LIST& params, IfcFlowTerminalType* in)
1461 {
1462 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElementType*>(in));
1463 // this data structure is not used yet, so there is no code generated to fill its members
1464 return base;
1465 }
1466 // -----------------------------------------------------------------------------------------------------------
1467 template <> size_t GenericFill<IfcFlowControllerType>(const DB& db, const LIST& params, IfcFlowControllerType* in)
1468 {
1469 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElementType*>(in));
1470 // this data structure is not used yet, so there is no code generated to fill its members
1471 return base;
1472 }
1473 // -----------------------------------------------------------------------------------------------------------
1474 template <> size_t GenericFill<IfcSwitchingDeviceType>(const DB& db, const LIST& params, IfcSwitchingDeviceType* in)
1475 {
1476 size_t base = GenericFill(db,params,static_cast<IfcFlowControllerType*>(in));
1477 // this data structure is not used yet, so there is no code generated to fill its members
1478 return base;
1479 }
1480 // -----------------------------------------------------------------------------------------------------------
1481 template <> size_t GenericFill<IfcSystem>(const DB& db, const LIST& params, IfcSystem* in)
1482 {
1483 size_t base = GenericFill(db,params,static_cast<IfcGroup*>(in));
1484 // this data structure is not used yet, so there is no code generated to fill its members
1485 return base;
1486 }
1487 // -----------------------------------------------------------------------------------------------------------
1488 template <> size_t GenericFill<IfcElectricalCircuit>(const DB& db, const LIST& params, IfcElectricalCircuit* in)
1489 {
1490 size_t base = GenericFill(db,params,static_cast<IfcSystem*>(in));
1491 // this data structure is not used yet, so there is no code generated to fill its members
1492 return base;
1493 }
1494 // -----------------------------------------------------------------------------------------------------------
1495 template <> size_t GenericFill<IfcUnitaryEquipmentType>(const DB& db, const LIST& params, IfcUnitaryEquipmentType* in)
2949 template <> size_t GenericFill<IfcElectricGeneratorType>(const DB& db, const LIST& params, IfcElectricGeneratorType* in)
14962950 {
14972951 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
14982952 // this data structure is not used yet, so there is no code generated to fill its members
14992953 return base;
15002954 }
15012955 // -----------------------------------------------------------------------------------------------------------
1502 template <> size_t GenericFill<IfcPort>(const DB& db, const LIST& params, IfcPort* in)
1503 {
1504 size_t base = GenericFill(db,params,static_cast<IfcProduct*>(in));
1505 // this data structure is not used yet, so there is no code generated to fill its members
1506 return base;
1507 }
1508 // -----------------------------------------------------------------------------------------------------------
1509 template <> size_t GenericFill<IfcPlacement>(const DB& db, const LIST& params, IfcPlacement* in)
1510 {
1511 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
1512 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPlacement"); } do { // convert the 'Location' argument
1513 boost::shared_ptr<const DataType> arg = params[base++];
1514 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcPlacement,1>::aux_is_derived[0]=true; break; }
1515 try { GenericConvert( in->Location, arg, db ); break; }
1516 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPlacement to be a `IfcCartesianPoint`")); }
1517 } while(0);
1518 return base;
1519 }
1520 // -----------------------------------------------------------------------------------------------------------
1521 template <> size_t GenericFill<IfcProfileDef>(const DB& db, const LIST& params, IfcProfileDef* in)
1522 {
1523 size_t base = 0;
1524 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcProfileDef"); } do { // convert the 'ProfileType' argument
1525 boost::shared_ptr<const DataType> arg = params[base++];
1526 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProfileDef,2>::aux_is_derived[0]=true; break; }
1527 try { GenericConvert( in->ProfileType, arg, db ); break; }
1528 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcProfileDef to be a `IfcProfileTypeEnum`")); }
1529 } while(0);
1530 do { // convert the 'ProfileName' argument
1531 boost::shared_ptr<const DataType> arg = params[base++];
1532 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProfileDef,2>::aux_is_derived[1]=true; break; }
1533 if (dynamic_cast<const UNSET*>(&*arg)) break;
1534 try { GenericConvert( in->ProfileName, arg, db ); break; }
1535 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcProfileDef to be a `IfcLabel`")); }
1536 } while(0);
2956 template <> size_t GenericFill<IfcDoor>(const DB& db, const LIST& params, IfcDoor* in)
2957 {
2958 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
2959 if (params.GetSize() < 10) { throw STEP::TypeError("expected 10 arguments to IfcDoor"); } do { // convert the 'OverallHeight' argument
2960 boost::shared_ptr<const DataType> arg = params[base++];
2961 if (dynamic_cast<const UNSET*>(&*arg)) break;
2962 try { GenericConvert( in->OverallHeight, arg, db ); break; }
2963 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 8 to IfcDoor to be a `IfcPositiveLengthMeasure`")); }
2964 } while(0);
2965 do { // convert the 'OverallWidth' argument
2966 boost::shared_ptr<const DataType> arg = params[base++];
2967 if (dynamic_cast<const UNSET*>(&*arg)) break;
2968 try { GenericConvert( in->OverallWidth, arg, db ); break; }
2969 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcDoor to be a `IfcPositiveLengthMeasure`")); }
2970 } while(0);
2971 return base;
2972 }
2973 // -----------------------------------------------------------------------------------------------------------
2974 template <> size_t GenericFill<IfcStyledItem>(const DB& db, const LIST& params, IfcStyledItem* in)
2975 {
2976 size_t base = GenericFill(db,params,static_cast<IfcRepresentationItem*>(in));
2977 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcStyledItem"); } do { // convert the 'Item' argument
2978 boost::shared_ptr<const DataType> arg = params[base++];
2979 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcStyledItem,3>::aux_is_derived[0]=true; break; }
2980 if (dynamic_cast<const UNSET*>(&*arg)) break;
2981 try { GenericConvert( in->Item, arg, db ); break; }
2982 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcStyledItem to be a `IfcRepresentationItem`")); }
2983 } while(0);
2984 do { // convert the 'Styles' argument
2985 boost::shared_ptr<const DataType> arg = params[base++];
2986 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcStyledItem,3>::aux_is_derived[1]=true; break; }
2987 try { GenericConvert( in->Styles, arg, db ); break; }
2988 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcStyledItem to be a `SET [1:?] OF IfcPresentationStyleAssignment`")); }
2989 } while(0);
2990 do { // convert the 'Name' argument
2991 boost::shared_ptr<const DataType> arg = params[base++];
2992 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcStyledItem,3>::aux_is_derived[2]=true; break; }
2993 if (dynamic_cast<const UNSET*>(&*arg)) break;
2994 try { GenericConvert( in->Name, arg, db ); break; }
2995 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcStyledItem to be a `IfcLabel`")); }
2996 } while(0);
2997 return base;
2998 }
2999 // -----------------------------------------------------------------------------------------------------------
3000 template <> size_t GenericFill<IfcAnnotationOccurrence>(const DB& db, const LIST& params, IfcAnnotationOccurrence* in)
3001 {
3002 size_t base = GenericFill(db,params,static_cast<IfcStyledItem*>(in));
3003 // this data structure is not used yet, so there is no code generated to fill its members
3004 return base;
3005 }
3006 // -----------------------------------------------------------------------------------------------------------
3007 template <> size_t GenericFill<IfcAnnotationSymbolOccurrence>(const DB& db, const LIST& params, IfcAnnotationSymbolOccurrence* in)
3008 {
3009 size_t base = GenericFill(db,params,static_cast<IfcAnnotationOccurrence*>(in));
3010 // this data structure is not used yet, so there is no code generated to fill its members
15373011 return base;
15383012 }
15393013 // -----------------------------------------------------------------------------------------------------------
15493023 return base;
15503024 }
15513025 // -----------------------------------------------------------------------------------------------------------
1552 template <> size_t GenericFill<IfcCurve>(const DB& db, const LIST& params, IfcCurve* in)
3026 template <> size_t GenericFill<IfcArbitraryProfileDefWithVoids>(const DB& db, const LIST& params, IfcArbitraryProfileDefWithVoids* in)
3027 {
3028 size_t base = GenericFill(db,params,static_cast<IfcArbitraryClosedProfileDef*>(in));
3029 // this data structure is not used yet, so there is no code generated to fill its members
3030 return base;
3031 }
3032 // -----------------------------------------------------------------------------------------------------------
3033 template <> size_t GenericFill<IfcLine>(const DB& db, const LIST& params, IfcLine* in)
3034 {
3035 size_t base = GenericFill(db,params,static_cast<IfcCurve*>(in));
3036 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcLine"); } do { // convert the 'Pnt' argument
3037 boost::shared_ptr<const DataType> arg = params[base++];
3038 try { GenericConvert( in->Pnt, arg, db ); break; }
3039 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcLine to be a `IfcCartesianPoint`")); }
3040 } while(0);
3041 do { // convert the 'Dir' argument
3042 boost::shared_ptr<const DataType> arg = params[base++];
3043 try { GenericConvert( in->Dir, arg, db ); break; }
3044 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcLine to be a `IfcVector`")); }
3045 } while(0);
3046 return base;
3047 }
3048 // -----------------------------------------------------------------------------------------------------------
3049 template <> size_t GenericFill<IfcFlowSegmentType>(const DB& db, const LIST& params, IfcFlowSegmentType* in)
3050 {
3051 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElementType*>(in));
3052 // this data structure is not used yet, so there is no code generated to fill its members
3053 return base;
3054 }
3055 // -----------------------------------------------------------------------------------------------------------
3056 template <> size_t GenericFill<IfcAirTerminalBoxType>(const DB& db, const LIST& params, IfcAirTerminalBoxType* in)
3057 {
3058 size_t base = GenericFill(db,params,static_cast<IfcFlowControllerType*>(in));
3059 // this data structure is not used yet, so there is no code generated to fill its members
3060 return base;
3061 }
3062 // -----------------------------------------------------------------------------------------------------------
3063 template <> size_t GenericFill<IfcPropertySingleValue>(const DB& db, const LIST& params, IfcPropertySingleValue* in)
3064 {
3065 size_t base = GenericFill(db,params,static_cast<IfcSimpleProperty*>(in));
3066 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcPropertySingleValue"); } do { // convert the 'NominalValue' argument
3067 boost::shared_ptr<const DataType> arg = params[base++];
3068 if (dynamic_cast<const UNSET*>(&*arg)) break;
3069 try { GenericConvert( in->NominalValue, arg, db ); break; }
3070 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcPropertySingleValue to be a `IfcValue`")); }
3071 } while(0);
3072 do { // convert the 'Unit' argument
3073 boost::shared_ptr<const DataType> arg = params[base++];
3074 if (dynamic_cast<const UNSET*>(&*arg)) break;
3075 try { GenericConvert( in->Unit, arg, db ); break; }
3076 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcPropertySingleValue to be a `IfcUnit`")); }
3077 } while(0);
3078 return base;
3079 }
3080 // -----------------------------------------------------------------------------------------------------------
3081 template <> size_t GenericFill<IfcAlarmType>(const DB& db, const LIST& params, IfcAlarmType* in)
3082 {
3083 size_t base = GenericFill(db,params,static_cast<IfcDistributionControlElementType*>(in));
3084 // this data structure is not used yet, so there is no code generated to fill its members
3085 return base;
3086 }
3087 // -----------------------------------------------------------------------------------------------------------
3088 template <> size_t GenericFill<IfcEllipseProfileDef>(const DB& db, const LIST& params, IfcEllipseProfileDef* in)
3089 {
3090 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
3091 // this data structure is not used yet, so there is no code generated to fill its members
3092 return base;
3093 }
3094 // -----------------------------------------------------------------------------------------------------------
3095 template <> size_t GenericFill<IfcStair>(const DB& db, const LIST& params, IfcStair* in)
3096 {
3097 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
3098 // this data structure is not used yet, so there is no code generated to fill its members
3099 return base;
3100 }
3101 // -----------------------------------------------------------------------------------------------------------
3102 template <> size_t GenericFill<IfcSurfaceStyleShading>(const DB& db, const LIST& params, IfcSurfaceStyleShading* in)
3103 {
3104 size_t base = 0;
3105 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcSurfaceStyleShading"); } do { // convert the 'SurfaceColour' argument
3106 boost::shared_ptr<const DataType> arg = params[base++];
3107 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcSurfaceStyleShading,1>::aux_is_derived[0]=true; break; }
3108 try { GenericConvert( in->SurfaceColour, arg, db ); break; }
3109 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSurfaceStyleShading to be a `IfcColourRgb`")); }
3110 } while(0);
3111 return base;
3112 }
3113 // -----------------------------------------------------------------------------------------------------------
3114 template <> size_t GenericFill<IfcPumpType>(const DB& db, const LIST& params, IfcPumpType* in)
3115 {
3116 size_t base = GenericFill(db,params,static_cast<IfcFlowMovingDeviceType*>(in));
3117 // this data structure is not used yet, so there is no code generated to fill its members
3118 return base;
3119 }
3120 // -----------------------------------------------------------------------------------------------------------
3121 template <> size_t GenericFill<IfcDefinedSymbol>(const DB& db, const LIST& params, IfcDefinedSymbol* in)
15533122 {
15543123 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
1555 return base;
1556 }
1557 // -----------------------------------------------------------------------------------------------------------
1558 template <> size_t GenericFill<IfcConic>(const DB& db, const LIST& params, IfcConic* in)
1559 {
1560 size_t base = GenericFill(db,params,static_cast<IfcCurve*>(in));
1561 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcConic"); } do { // convert the 'Position' argument
1562 boost::shared_ptr<const DataType> arg = params[base++];
1563 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcConic,1>::aux_is_derived[0]=true; break; }
1564 try { GenericConvert( in->Position, arg, db ); break; }
1565 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcConic to be a `IfcAxis2Placement`")); }
1566 } while(0);
1567 return base;
1568 }
1569 // -----------------------------------------------------------------------------------------------------------
1570 template <> size_t GenericFill<IfcCircle>(const DB& db, const LIST& params, IfcCircle* in)
1571 {
1572 size_t base = GenericFill(db,params,static_cast<IfcConic*>(in));
1573 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcCircle"); } do { // convert the 'Radius' argument
1574 boost::shared_ptr<const DataType> arg = params[base++];
1575 try { GenericConvert( in->Radius, arg, db ); break; }
1576 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCircle to be a `IfcPositiveLengthMeasure`")); }
1577 } while(0);
1578 return base;
1579 }
1580 // -----------------------------------------------------------------------------------------------------------
1581 template <> size_t GenericFill<IfcElementarySurface>(const DB& db, const LIST& params, IfcElementarySurface* in)
1582 {
1583 size_t base = GenericFill(db,params,static_cast<IfcSurface*>(in));
1584 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcElementarySurface"); } do { // convert the 'Position' argument
1585 boost::shared_ptr<const DataType> arg = params[base++];
1586 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcElementarySurface,1>::aux_is_derived[0]=true; break; }
1587 try { GenericConvert( in->Position, arg, db ); break; }
1588 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcElementarySurface to be a `IfcAxis2Placement3D`")); }
1589 } while(0);
1590 return base;
1591 }
1592 // -----------------------------------------------------------------------------------------------------------
1593 template <> size_t GenericFill<IfcPlane>(const DB& db, const LIST& params, IfcPlane* in)
1594 {
1595 size_t base = GenericFill(db,params,static_cast<IfcElementarySurface*>(in));
1596 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPlane"); } return base;
3124 // this data structure is not used yet, so there is no code generated to fill its members
3125 return base;
3126 }
3127 // -----------------------------------------------------------------------------------------------------------
3128 template <> size_t GenericFill<IfcElementComponentType>(const DB& db, const LIST& params, IfcElementComponentType* in)
3129 {
3130 size_t base = GenericFill(db,params,static_cast<IfcElementType*>(in));
3131 // this data structure is not used yet, so there is no code generated to fill its members
3132 return base;
3133 }
3134 // -----------------------------------------------------------------------------------------------------------
3135 template <> size_t GenericFill<IfcFastenerType>(const DB& db, const LIST& params, IfcFastenerType* in)
3136 {
3137 size_t base = GenericFill(db,params,static_cast<IfcElementComponentType*>(in));
3138 // this data structure is not used yet, so there is no code generated to fill its members
3139 return base;
3140 }
3141 // -----------------------------------------------------------------------------------------------------------
3142 template <> size_t GenericFill<IfcMechanicalFastenerType>(const DB& db, const LIST& params, IfcMechanicalFastenerType* in)
3143 {
3144 size_t base = GenericFill(db,params,static_cast<IfcFastenerType*>(in));
3145 // this data structure is not used yet, so there is no code generated to fill its members
3146 return base;
3147 }
3148 // -----------------------------------------------------------------------------------------------------------
3149 template <> size_t GenericFill<IfcFlowFitting>(const DB& db, const LIST& params, IfcFlowFitting* in)
3150 {
3151 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElement*>(in));
3152 // this data structure is not used yet, so there is no code generated to fill its members
3153 return base;
3154 }
3155 // -----------------------------------------------------------------------------------------------------------
3156 template <> size_t GenericFill<IfcLightSourceDirectional>(const DB& db, const LIST& params, IfcLightSourceDirectional* in)
3157 {
3158 size_t base = GenericFill(db,params,static_cast<IfcLightSource*>(in));
3159 // this data structure is not used yet, so there is no code generated to fill its members
3160 return base;
3161 }
3162 // -----------------------------------------------------------------------------------------------------------
3163 template <> size_t GenericFill<IfcSurfaceStyle>(const DB& db, const LIST& params, IfcSurfaceStyle* in)
3164 {
3165 size_t base = GenericFill(db,params,static_cast<IfcPresentationStyle*>(in));
3166 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcSurfaceStyle"); } do { // convert the 'Side' argument
3167 boost::shared_ptr<const DataType> arg = params[base++];
3168 try { GenericConvert( in->Side, arg, db ); break; }
3169 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcSurfaceStyle to be a `IfcSurfaceSide`")); }
3170 } while(0);
3171 do { // convert the 'Styles' argument
3172 boost::shared_ptr<const DataType> arg = params[base++];
3173 try { GenericConvert( in->Styles, arg, db ); break; }
3174 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcSurfaceStyle to be a `SET [1:5] OF IfcSurfaceStyleElementSelect`")); }
3175 } while(0);
3176 return base;
3177 }
3178 // -----------------------------------------------------------------------------------------------------------
3179 template <> size_t GenericFill<IfcAnnotationSurface>(const DB& db, const LIST& params, IfcAnnotationSurface* in)
3180 {
3181 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
3182 // this data structure is not used yet, so there is no code generated to fill its members
3183 return base;
3184 }
3185 // -----------------------------------------------------------------------------------------------------------
3186 template <> size_t GenericFill<IfcFlowController>(const DB& db, const LIST& params, IfcFlowController* in)
3187 {
3188 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElement*>(in));
3189 // this data structure is not used yet, so there is no code generated to fill its members
3190 return base;
3191 }
3192 // -----------------------------------------------------------------------------------------------------------
3193 template <> size_t GenericFill<IfcBuildingStorey>(const DB& db, const LIST& params, IfcBuildingStorey* in)
3194 {
3195 size_t base = GenericFill(db,params,static_cast<IfcSpatialStructureElement*>(in));
3196 // this data structure is not used yet, so there is no code generated to fill its members
3197 return base;
3198 }
3199 // -----------------------------------------------------------------------------------------------------------
3200 template <> size_t GenericFill<IfcWorkControl>(const DB& db, const LIST& params, IfcWorkControl* in)
3201 {
3202 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
3203 // this data structure is not used yet, so there is no code generated to fill its members
3204 return base;
3205 }
3206 // -----------------------------------------------------------------------------------------------------------
3207 template <> size_t GenericFill<IfcWorkSchedule>(const DB& db, const LIST& params, IfcWorkSchedule* in)
3208 {
3209 size_t base = GenericFill(db,params,static_cast<IfcWorkControl*>(in));
3210 // this data structure is not used yet, so there is no code generated to fill its members
3211 return base;
3212 }
3213 // -----------------------------------------------------------------------------------------------------------
3214 template <> size_t GenericFill<IfcDuctSegmentType>(const DB& db, const LIST& params, IfcDuctSegmentType* in)
3215 {
3216 size_t base = GenericFill(db,params,static_cast<IfcFlowSegmentType*>(in));
3217 // this data structure is not used yet, so there is no code generated to fill its members
3218 return base;
3219 }
3220 // -----------------------------------------------------------------------------------------------------------
3221 template <> size_t GenericFill<IfcFace>(const DB& db, const LIST& params, IfcFace* in)
3222 {
3223 size_t base = GenericFill(db,params,static_cast<IfcTopologicalRepresentationItem*>(in));
3224 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcFace"); } do { // convert the 'Bounds' argument
3225 boost::shared_ptr<const DataType> arg = params[base++];
3226 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcFace,1>::aux_is_derived[0]=true; break; }
3227 try { GenericConvert( in->Bounds, arg, db ); break; }
3228 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcFace to be a `SET [1:?] OF IfcFaceBound`")); }
3229 } while(0);
3230 return base;
3231 }
3232 // -----------------------------------------------------------------------------------------------------------
3233 template <> size_t GenericFill<IfcStructuralSurfaceMember>(const DB& db, const LIST& params, IfcStructuralSurfaceMember* in)
3234 {
3235 size_t base = GenericFill(db,params,static_cast<IfcStructuralMember*>(in));
3236 // this data structure is not used yet, so there is no code generated to fill its members
3237 return base;
3238 }
3239 // -----------------------------------------------------------------------------------------------------------
3240 template <> size_t GenericFill<IfcStructuralSurfaceMemberVarying>(const DB& db, const LIST& params, IfcStructuralSurfaceMemberVarying* in)
3241 {
3242 size_t base = GenericFill(db,params,static_cast<IfcStructuralSurfaceMember*>(in));
3243 // this data structure is not used yet, so there is no code generated to fill its members
3244 return base;
3245 }
3246 // -----------------------------------------------------------------------------------------------------------
3247 template <> size_t GenericFill<IfcFaceSurface>(const DB& db, const LIST& params, IfcFaceSurface* in)
3248 {
3249 size_t base = GenericFill(db,params,static_cast<IfcFace*>(in));
3250 // this data structure is not used yet, so there is no code generated to fill its members
3251 return base;
15973252 }
15983253 // -----------------------------------------------------------------------------------------------------------
15993254 template <> size_t GenericFill<IfcCostSchedule>(const DB& db, const LIST& params, IfcCostSchedule* in)
16033258 return base;
16043259 }
16053260 // -----------------------------------------------------------------------------------------------------------
1606 template <> size_t GenericFill<IfcRightCircularCone>(const DB& db, const LIST& params, IfcRightCircularCone* in)
1607 {
1608 size_t base = GenericFill(db,params,static_cast<IfcCsgPrimitive3D*>(in));
1609 // this data structure is not used yet, so there is no code generated to fill its members
1610 return base;
1611 }
1612 // -----------------------------------------------------------------------------------------------------------
1613 template <> size_t GenericFill<IfcElementAssembly>(const DB& db, const LIST& params, IfcElementAssembly* in)
1614 {
1615 size_t base = GenericFill(db,params,static_cast<IfcElement*>(in));
1616 // this data structure is not used yet, so there is no code generated to fill its members
1617 return base;
1618 }
1619 // -----------------------------------------------------------------------------------------------------------
1620 template <> size_t GenericFill<IfcBuildingElement>(const DB& db, const LIST& params, IfcBuildingElement* in)
1621 {
1622 size_t base = GenericFill(db,params,static_cast<IfcElement*>(in));
1623 if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcBuildingElement"); } return base;
1624 }
1625 // -----------------------------------------------------------------------------------------------------------
1626 template <> size_t GenericFill<IfcMember>(const DB& db, const LIST& params, IfcMember* in)
1627 {
1628 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
1629 // this data structure is not used yet, so there is no code generated to fill its members
1630 return base;
1631 }
1632 // -----------------------------------------------------------------------------------------------------------
1633 template <> size_t GenericFill<IfcBuildingElementProxy>(const DB& db, const LIST& params, IfcBuildingElementProxy* in)
1634 {
1635 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
1636 // this data structure is not used yet, so there is no code generated to fill its members
1637 return base;
1638 }
1639 // -----------------------------------------------------------------------------------------------------------
1640 template <> size_t GenericFill<IfcStructuralActivity>(const DB& db, const LIST& params, IfcStructuralActivity* in)
1641 {
1642 size_t base = GenericFill(db,params,static_cast<IfcProduct*>(in));
1643 // this data structure is not used yet, so there is no code generated to fill its members
1644 return base;
1645 }
1646 // -----------------------------------------------------------------------------------------------------------
1647 template <> size_t GenericFill<IfcStructuralAction>(const DB& db, const LIST& params, IfcStructuralAction* in)
1648 {
1649 size_t base = GenericFill(db,params,static_cast<IfcStructuralActivity*>(in));
1650 // this data structure is not used yet, so there is no code generated to fill its members
1651 return base;
1652 }
1653 // -----------------------------------------------------------------------------------------------------------
1654 template <> size_t GenericFill<IfcStructuralPlanarAction>(const DB& db, const LIST& params, IfcStructuralPlanarAction* in)
1655 {
1656 size_t base = GenericFill(db,params,static_cast<IfcStructuralAction*>(in));
1657 // this data structure is not used yet, so there is no code generated to fill its members
1658 return base;
1659 }
1660 // -----------------------------------------------------------------------------------------------------------
1661 template <> size_t GenericFill<IfcTopologicalRepresentationItem>(const DB& db, const LIST& params, IfcTopologicalRepresentationItem* in)
1662 {
1663 size_t base = GenericFill(db,params,static_cast<IfcRepresentationItem*>(in));
1664 return base;
1665 }
1666 // -----------------------------------------------------------------------------------------------------------
1667 template <> size_t GenericFill<IfcConnectedFaceSet>(const DB& db, const LIST& params, IfcConnectedFaceSet* in)
1668 {
1669 size_t base = GenericFill(db,params,static_cast<IfcTopologicalRepresentationItem*>(in));
1670 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcConnectedFaceSet"); } do { // convert the 'CfsFaces' argument
1671 boost::shared_ptr<const DataType> arg = params[base++];
1672 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcConnectedFaceSet,1>::aux_is_derived[0]=true; break; }
1673 try { GenericConvert( in->CfsFaces, arg, db ); break; }
1674 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcConnectedFaceSet to be a `SET [1:?] OF IfcFace`")); }
1675 } while(0);
1676 return base;
1677 }
1678 // -----------------------------------------------------------------------------------------------------------
1679 template <> size_t GenericFill<IfcSweptSurface>(const DB& db, const LIST& params, IfcSweptSurface* in)
1680 {
1681 size_t base = GenericFill(db,params,static_cast<IfcSurface*>(in));
1682 // this data structure is not used yet, so there is no code generated to fill its members
1683 return base;
1684 }
1685 // -----------------------------------------------------------------------------------------------------------
1686 template <> size_t GenericFill<IfcSurfaceOfLinearExtrusion>(const DB& db, const LIST& params, IfcSurfaceOfLinearExtrusion* in)
1687 {
1688 size_t base = GenericFill(db,params,static_cast<IfcSweptSurface*>(in));
1689 // this data structure is not used yet, so there is no code generated to fill its members
1690 return base;
1691 }
1692 // -----------------------------------------------------------------------------------------------------------
1693 template <> size_t GenericFill<IfcArbitraryProfileDefWithVoids>(const DB& db, const LIST& params, IfcArbitraryProfileDefWithVoids* in)
1694 {
1695 size_t base = GenericFill(db,params,static_cast<IfcArbitraryClosedProfileDef*>(in));
1696 // this data structure is not used yet, so there is no code generated to fill its members
1697 return base;
1698 }
1699 // -----------------------------------------------------------------------------------------------------------
1700 template <> size_t GenericFill<IfcProcess>(const DB& db, const LIST& params, IfcProcess* in)
1701 {
1702 size_t base = GenericFill(db,params,static_cast<IfcObject*>(in));
1703 // this data structure is not used yet, so there is no code generated to fill its members
1704 return base;
1705 }
1706 // -----------------------------------------------------------------------------------------------------------
1707 template <> size_t GenericFill<IfcProcedure>(const DB& db, const LIST& params, IfcProcedure* in)
1708 {
1709 size_t base = GenericFill(db,params,static_cast<IfcProcess*>(in));
1710 // this data structure is not used yet, so there is no code generated to fill its members
3261 template <> size_t GenericFill<IfcPlanarExtent>(const DB& db, const LIST& params, IfcPlanarExtent* in)
3262 {
3263 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
3264 // this data structure is not used yet, so there is no code generated to fill its members
3265 return base;
3266 }
3267 // -----------------------------------------------------------------------------------------------------------
3268 template <> size_t GenericFill<IfcPlanarBox>(const DB& db, const LIST& params, IfcPlanarBox* in)
3269 {
3270 size_t base = GenericFill(db,params,static_cast<IfcPlanarExtent*>(in));
3271 // this data structure is not used yet, so there is no code generated to fill its members
3272 return base;
3273 }
3274 // -----------------------------------------------------------------------------------------------------------
3275 template <> size_t GenericFill<IfcColourSpecification>(const DB& db, const LIST& params, IfcColourSpecification* in)
3276 {
3277 size_t base = 0;
3278 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcColourSpecification"); } do { // convert the 'Name' argument
3279 boost::shared_ptr<const DataType> arg = params[base++];
3280 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcColourSpecification,1>::aux_is_derived[0]=true; break; }
3281 if (dynamic_cast<const UNSET*>(&*arg)) break;
3282 try { GenericConvert( in->Name, arg, db ); break; }
3283 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcColourSpecification to be a `IfcLabel`")); }
3284 } while(0);
17113285 return base;
17123286 }
17133287 // -----------------------------------------------------------------------------------------------------------
17243298 try { GenericConvert( in->Magnitude, arg, db ); break; }
17253299 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcVector to be a `IfcLengthMeasure`")); }
17263300 } while(0);
3301 return base;
3302 }
3303 // -----------------------------------------------------------------------------------------------------------
3304 template <> size_t GenericFill<IfcBeam>(const DB& db, const LIST& params, IfcBeam* in)
3305 {
3306 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
3307 // this data structure is not used yet, so there is no code generated to fill its members
3308 return base;
3309 }
3310 // -----------------------------------------------------------------------------------------------------------
3311 template <> size_t GenericFill<IfcColourRgb>(const DB& db, const LIST& params, IfcColourRgb* in)
3312 {
3313 size_t base = GenericFill(db,params,static_cast<IfcColourSpecification*>(in));
3314 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcColourRgb"); } do { // convert the 'Red' argument
3315 boost::shared_ptr<const DataType> arg = params[base++];
3316 try { GenericConvert( in->Red, arg, db ); break; }
3317 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcColourRgb to be a `IfcNormalisedRatioMeasure`")); }
3318 } while(0);
3319 do { // convert the 'Green' argument
3320 boost::shared_ptr<const DataType> arg = params[base++];
3321 try { GenericConvert( in->Green, arg, db ); break; }
3322 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcColourRgb to be a `IfcNormalisedRatioMeasure`")); }
3323 } while(0);
3324 do { // convert the 'Blue' argument
3325 boost::shared_ptr<const DataType> arg = params[base++];
3326 try { GenericConvert( in->Blue, arg, db ); break; }
3327 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcColourRgb to be a `IfcNormalisedRatioMeasure`")); }
3328 } while(0);
3329 return base;
3330 }
3331 // -----------------------------------------------------------------------------------------------------------
3332 template <> size_t GenericFill<IfcStructuralPlanarAction>(const DB& db, const LIST& params, IfcStructuralPlanarAction* in)
3333 {
3334 size_t base = GenericFill(db,params,static_cast<IfcStructuralAction*>(in));
3335 // this data structure is not used yet, so there is no code generated to fill its members
3336 return base;
3337 }
3338 // -----------------------------------------------------------------------------------------------------------
3339 template <> size_t GenericFill<IfcStructuralPlanarActionVarying>(const DB& db, const LIST& params, IfcStructuralPlanarActionVarying* in)
3340 {
3341 size_t base = GenericFill(db,params,static_cast<IfcStructuralPlanarAction*>(in));
3342 // this data structure is not used yet, so there is no code generated to fill its members
3343 return base;
3344 }
3345 // -----------------------------------------------------------------------------------------------------------
3346 template <> size_t GenericFill<IfcSite>(const DB& db, const LIST& params, IfcSite* in)
3347 {
3348 size_t base = GenericFill(db,params,static_cast<IfcSpatialStructureElement*>(in));
3349 if (params.GetSize() < 14) { throw STEP::TypeError("expected 14 arguments to IfcSite"); } do { // convert the 'RefLatitude' argument
3350 boost::shared_ptr<const DataType> arg = params[base++];
3351 if (dynamic_cast<const UNSET*>(&*arg)) break;
3352 try { GenericConvert( in->RefLatitude, arg, db ); break; }
3353 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcSite to be a `IfcCompoundPlaneAngleMeasure`")); }
3354 } while(0);
3355 do { // convert the 'RefLongitude' argument
3356 boost::shared_ptr<const DataType> arg = params[base++];
3357 if (dynamic_cast<const UNSET*>(&*arg)) break;
3358 try { GenericConvert( in->RefLongitude, arg, db ); break; }
3359 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 10 to IfcSite to be a `IfcCompoundPlaneAngleMeasure`")); }
3360 } while(0);
3361 do { // convert the 'RefElevation' argument
3362 boost::shared_ptr<const DataType> arg = params[base++];
3363 if (dynamic_cast<const UNSET*>(&*arg)) break;
3364 try { GenericConvert( in->RefElevation, arg, db ); break; }
3365 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 11 to IfcSite to be a `IfcLengthMeasure`")); }
3366 } while(0);
3367 do { // convert the 'LandTitleNumber' argument
3368 boost::shared_ptr<const DataType> arg = params[base++];
3369 if (dynamic_cast<const UNSET*>(&*arg)) break;
3370 try { GenericConvert( in->LandTitleNumber, arg, db ); break; }
3371 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 12 to IfcSite to be a `IfcLabel`")); }
3372 } while(0);
3373 do { // convert the 'SiteAddress' argument
3374 boost::shared_ptr<const DataType> arg = params[base++];
3375 if (dynamic_cast<const UNSET*>(&*arg)) break;
3376 try { GenericConvert( in->SiteAddress, arg, db ); break; }
3377 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 13 to IfcSite to be a `IfcPostalAddress`")); }
3378 } while(0);
3379 return base;
3380 }
3381 // -----------------------------------------------------------------------------------------------------------
3382 template <> size_t GenericFill<IfcDiscreteAccessoryType>(const DB& db, const LIST& params, IfcDiscreteAccessoryType* in)
3383 {
3384 size_t base = GenericFill(db,params,static_cast<IfcElementComponentType*>(in));
3385 // this data structure is not used yet, so there is no code generated to fill its members
3386 return base;
3387 }
3388 // -----------------------------------------------------------------------------------------------------------
3389 template <> size_t GenericFill<IfcVibrationIsolatorType>(const DB& db, const LIST& params, IfcVibrationIsolatorType* in)
3390 {
3391 size_t base = GenericFill(db,params,static_cast<IfcDiscreteAccessoryType*>(in));
3392 // this data structure is not used yet, so there is no code generated to fill its members
3393 return base;
3394 }
3395 // -----------------------------------------------------------------------------------------------------------
3396 template <> size_t GenericFill<IfcEvaporativeCoolerType>(const DB& db, const LIST& params, IfcEvaporativeCoolerType* in)
3397 {
3398 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
3399 // this data structure is not used yet, so there is no code generated to fill its members
3400 return base;
3401 }
3402 // -----------------------------------------------------------------------------------------------------------
3403 template <> size_t GenericFill<IfcDistributionChamberElementType>(const DB& db, const LIST& params, IfcDistributionChamberElementType* in)
3404 {
3405 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElementType*>(in));
3406 // this data structure is not used yet, so there is no code generated to fill its members
3407 return base;
3408 }
3409 // -----------------------------------------------------------------------------------------------------------
3410 template <> size_t GenericFill<IfcFeatureElementAddition>(const DB& db, const LIST& params, IfcFeatureElementAddition* in)
3411 {
3412 size_t base = GenericFill(db,params,static_cast<IfcFeatureElement*>(in));
3413 // this data structure is not used yet, so there is no code generated to fill its members
3414 return base;
3415 }
3416 // -----------------------------------------------------------------------------------------------------------
3417 template <> size_t GenericFill<IfcStructuredDimensionCallout>(const DB& db, const LIST& params, IfcStructuredDimensionCallout* in)
3418 {
3419 size_t base = GenericFill(db,params,static_cast<IfcDraughtingCallout*>(in));
3420 // this data structure is not used yet, so there is no code generated to fill its members
3421 return base;
3422 }
3423 // -----------------------------------------------------------------------------------------------------------
3424 template <> size_t GenericFill<IfcCoolingTowerType>(const DB& db, const LIST& params, IfcCoolingTowerType* in)
3425 {
3426 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
3427 // this data structure is not used yet, so there is no code generated to fill its members
3428 return base;
3429 }
3430 // -----------------------------------------------------------------------------------------------------------
3431 template <> size_t GenericFill<IfcCenterLineProfileDef>(const DB& db, const LIST& params, IfcCenterLineProfileDef* in)
3432 {
3433 size_t base = GenericFill(db,params,static_cast<IfcArbitraryOpenProfileDef*>(in));
3434 // this data structure is not used yet, so there is no code generated to fill its members
3435 return base;
3436 }
3437 // -----------------------------------------------------------------------------------------------------------
3438 template <> size_t GenericFill<IfcWindowStyle>(const DB& db, const LIST& params, IfcWindowStyle* in)
3439 {
3440 size_t base = GenericFill(db,params,static_cast<IfcTypeProduct*>(in));
3441 // this data structure is not used yet, so there is no code generated to fill its members
3442 return base;
3443 }
3444 // -----------------------------------------------------------------------------------------------------------
3445 template <> size_t GenericFill<IfcLightSourceGoniometric>(const DB& db, const LIST& params, IfcLightSourceGoniometric* in)
3446 {
3447 size_t base = GenericFill(db,params,static_cast<IfcLightSource*>(in));
3448 // this data structure is not used yet, so there is no code generated to fill its members
3449 return base;
3450 }
3451 // -----------------------------------------------------------------------------------------------------------
3452 template <> size_t GenericFill<IfcTransformerType>(const DB& db, const LIST& params, IfcTransformerType* in)
3453 {
3454 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
3455 // this data structure is not used yet, so there is no code generated to fill its members
3456 return base;
3457 }
3458 // -----------------------------------------------------------------------------------------------------------
3459 template <> size_t GenericFill<IfcMemberType>(const DB& db, const LIST& params, IfcMemberType* in)
3460 {
3461 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
3462 // this data structure is not used yet, so there is no code generated to fill its members
3463 return base;
3464 }
3465 // -----------------------------------------------------------------------------------------------------------
3466 template <> size_t GenericFill<IfcSurfaceOfLinearExtrusion>(const DB& db, const LIST& params, IfcSurfaceOfLinearExtrusion* in)
3467 {
3468 size_t base = GenericFill(db,params,static_cast<IfcSweptSurface*>(in));
3469 // this data structure is not used yet, so there is no code generated to fill its members
3470 return base;
3471 }
3472 // -----------------------------------------------------------------------------------------------------------
3473 template <> size_t GenericFill<IfcMotorConnectionType>(const DB& db, const LIST& params, IfcMotorConnectionType* in)
3474 {
3475 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
3476 // this data structure is not used yet, so there is no code generated to fill its members
3477 return base;
3478 }
3479 // -----------------------------------------------------------------------------------------------------------
3480 template <> size_t GenericFill<IfcFlowTreatmentDeviceType>(const DB& db, const LIST& params, IfcFlowTreatmentDeviceType* in)
3481 {
3482 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElementType*>(in));
3483 // this data structure is not used yet, so there is no code generated to fill its members
3484 return base;
3485 }
3486 // -----------------------------------------------------------------------------------------------------------
3487 template <> size_t GenericFill<IfcDuctSilencerType>(const DB& db, const LIST& params, IfcDuctSilencerType* in)
3488 {
3489 size_t base = GenericFill(db,params,static_cast<IfcFlowTreatmentDeviceType*>(in));
3490 // this data structure is not used yet, so there is no code generated to fill its members
3491 return base;
3492 }
3493 // -----------------------------------------------------------------------------------------------------------
3494 template <> size_t GenericFill<IfcFurnishingElementType>(const DB& db, const LIST& params, IfcFurnishingElementType* in)
3495 {
3496 size_t base = GenericFill(db,params,static_cast<IfcElementType*>(in));
3497 // this data structure is not used yet, so there is no code generated to fill its members
3498 return base;
3499 }
3500 // -----------------------------------------------------------------------------------------------------------
3501 template <> size_t GenericFill<IfcSystemFurnitureElementType>(const DB& db, const LIST& params, IfcSystemFurnitureElementType* in)
3502 {
3503 size_t base = GenericFill(db,params,static_cast<IfcFurnishingElementType*>(in));
3504 // this data structure is not used yet, so there is no code generated to fill its members
3505 return base;
3506 }
3507 // -----------------------------------------------------------------------------------------------------------
3508 template <> size_t GenericFill<IfcWasteTerminalType>(const DB& db, const LIST& params, IfcWasteTerminalType* in)
3509 {
3510 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
3511 // this data structure is not used yet, so there is no code generated to fill its members
3512 return base;
3513 }
3514 // -----------------------------------------------------------------------------------------------------------
3515 template <> size_t GenericFill<IfcBSplineCurve>(const DB& db, const LIST& params, IfcBSplineCurve* in)
3516 {
3517 size_t base = GenericFill(db,params,static_cast<IfcBoundedCurve*>(in));
3518 if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcBSplineCurve"); } do { // convert the 'Degree' argument
3519 boost::shared_ptr<const DataType> arg = params[base++];
3520 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcBSplineCurve,5>::aux_is_derived[0]=true; break; }
3521 try { GenericConvert( in->Degree, arg, db ); break; }
3522 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcBSplineCurve to be a `INTEGER`")); }
3523 } while(0);
3524 do { // convert the 'ControlPointsList' argument
3525 boost::shared_ptr<const DataType> arg = params[base++];
3526 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcBSplineCurve,5>::aux_is_derived[1]=true; break; }
3527 try { GenericConvert( in->ControlPointsList, arg, db ); break; }
3528 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcBSplineCurve to be a `LIST [2:?] OF IfcCartesianPoint`")); }
3529 } while(0);
3530 do { // convert the 'CurveForm' argument
3531 boost::shared_ptr<const DataType> arg = params[base++];
3532 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcBSplineCurve,5>::aux_is_derived[2]=true; break; }
3533 try { GenericConvert( in->CurveForm, arg, db ); break; }
3534 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcBSplineCurve to be a `IfcBSplineCurveForm`")); }
3535 } while(0);
3536 do { // convert the 'ClosedCurve' argument
3537 boost::shared_ptr<const DataType> arg = params[base++];
3538 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcBSplineCurve,5>::aux_is_derived[3]=true; break; }
3539 try { GenericConvert( in->ClosedCurve, arg, db ); break; }
3540 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcBSplineCurve to be a `LOGICAL`")); }
3541 } while(0);
3542 do { // convert the 'SelfIntersect' argument
3543 boost::shared_ptr<const DataType> arg = params[base++];
3544 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcBSplineCurve,5>::aux_is_derived[4]=true; break; }
3545 try { GenericConvert( in->SelfIntersect, arg, db ); break; }
3546 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcBSplineCurve to be a `LOGICAL`")); }
3547 } while(0);
3548 return base;
3549 }
3550 // -----------------------------------------------------------------------------------------------------------
3551 template <> size_t GenericFill<IfcBezierCurve>(const DB& db, const LIST& params, IfcBezierCurve* in)
3552 {
3553 size_t base = GenericFill(db,params,static_cast<IfcBSplineCurve*>(in));
3554 // this data structure is not used yet, so there is no code generated to fill its members
3555 return base;
3556 }
3557 // -----------------------------------------------------------------------------------------------------------
3558 template <> size_t GenericFill<IfcActuatorType>(const DB& db, const LIST& params, IfcActuatorType* in)
3559 {
3560 size_t base = GenericFill(db,params,static_cast<IfcDistributionControlElementType*>(in));
3561 // this data structure is not used yet, so there is no code generated to fill its members
3562 return base;
3563 }
3564 // -----------------------------------------------------------------------------------------------------------
3565 template <> size_t GenericFill<IfcDistributionControlElement>(const DB& db, const LIST& params, IfcDistributionControlElement* in)
3566 {
3567 size_t base = GenericFill(db,params,static_cast<IfcDistributionElement*>(in));
3568 // this data structure is not used yet, so there is no code generated to fill its members
3569 return base;
3570 }
3571 // -----------------------------------------------------------------------------------------------------------
3572 template <> size_t GenericFill<IfcAnnotation>(const DB& db, const LIST& params, IfcAnnotation* in)
3573 {
3574 size_t base = GenericFill(db,params,static_cast<IfcProduct*>(in));
3575 if (params.GetSize() < 7) { throw STEP::TypeError("expected 7 arguments to IfcAnnotation"); } return base;
3576 }
3577 // -----------------------------------------------------------------------------------------------------------
3578 template <> size_t GenericFill<IfcShellBasedSurfaceModel>(const DB& db, const LIST& params, IfcShellBasedSurfaceModel* in)
3579 {
3580 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
3581 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcShellBasedSurfaceModel"); } do { // convert the 'SbsmBoundary' argument
3582 boost::shared_ptr<const DataType> arg = params[base++];
3583 try { GenericConvert( in->SbsmBoundary, arg, db ); break; }
3584 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcShellBasedSurfaceModel to be a `SET [1:?] OF IfcShell`")); }
3585 } while(0);
3586 return base;
3587 }
3588 // -----------------------------------------------------------------------------------------------------------
3589 template <> size_t GenericFill<IfcActionRequest>(const DB& db, const LIST& params, IfcActionRequest* in)
3590 {
3591 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
3592 // this data structure is not used yet, so there is no code generated to fill its members
3593 return base;
3594 }
3595 // -----------------------------------------------------------------------------------------------------------
3596 template <> size_t GenericFill<IfcExtrudedAreaSolid>(const DB& db, const LIST& params, IfcExtrudedAreaSolid* in)
3597 {
3598 size_t base = GenericFill(db,params,static_cast<IfcSweptAreaSolid*>(in));
3599 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcExtrudedAreaSolid"); } do { // convert the 'ExtrudedDirection' argument
3600 boost::shared_ptr<const DataType> arg = params[base++];
3601 try { GenericConvert( in->ExtrudedDirection, arg, db ); break; }
3602 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcExtrudedAreaSolid to be a `IfcDirection`")); }
3603 } while(0);
3604 do { // convert the 'Depth' argument
3605 boost::shared_ptr<const DataType> arg = params[base++];
3606 try { GenericConvert( in->Depth, arg, db ); break; }
3607 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcExtrudedAreaSolid to be a `IfcPositiveLengthMeasure`")); }
3608 } while(0);
3609 return base;
3610 }
3611 // -----------------------------------------------------------------------------------------------------------
3612 template <> size_t GenericFill<IfcSystem>(const DB& db, const LIST& params, IfcSystem* in)
3613 {
3614 size_t base = GenericFill(db,params,static_cast<IfcGroup*>(in));
3615 // this data structure is not used yet, so there is no code generated to fill its members
3616 return base;
3617 }
3618 // -----------------------------------------------------------------------------------------------------------
3619 template <> size_t GenericFill<IfcFillAreaStyleHatching>(const DB& db, const LIST& params, IfcFillAreaStyleHatching* in)
3620 {
3621 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
3622 // this data structure is not used yet, so there is no code generated to fill its members
3623 return base;
3624 }
3625 // -----------------------------------------------------------------------------------------------------------
3626 template <> size_t GenericFill<IfcRelVoidsElement>(const DB& db, const LIST& params, IfcRelVoidsElement* in)
3627 {
3628 size_t base = GenericFill(db,params,static_cast<IfcRelConnects*>(in));
3629 if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelVoidsElement"); } do { // convert the 'RelatingBuildingElement' argument
3630 boost::shared_ptr<const DataType> arg = params[base++];
3631 try { GenericConvert( in->RelatingBuildingElement, arg, db ); break; }
3632 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelVoidsElement to be a `IfcElement`")); }
3633 } while(0);
3634 do { // convert the 'RelatedOpeningElement' argument
3635 boost::shared_ptr<const DataType> arg = params[base++];
3636 try { GenericConvert( in->RelatedOpeningElement, arg, db ); break; }
3637 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelVoidsElement to be a `IfcFeatureElementSubtraction`")); }
3638 } while(0);
3639 return base;
3640 }
3641 // -----------------------------------------------------------------------------------------------------------
3642 template <> size_t GenericFill<IfcSurfaceCurveSweptAreaSolid>(const DB& db, const LIST& params, IfcSurfaceCurveSweptAreaSolid* in)
3643 {
3644 size_t base = GenericFill(db,params,static_cast<IfcSweptAreaSolid*>(in));
3645 // this data structure is not used yet, so there is no code generated to fill its members
3646 return base;
3647 }
3648 // -----------------------------------------------------------------------------------------------------------
3649 template <> size_t GenericFill<IfcCartesianTransformationOperator3DnonUniform>(const DB& db, const LIST& params, IfcCartesianTransformationOperator3DnonUniform* in)
3650 {
3651 size_t base = GenericFill(db,params,static_cast<IfcCartesianTransformationOperator3D*>(in));
3652 if (params.GetSize() < 7) { throw STEP::TypeError("expected 7 arguments to IfcCartesianTransformationOperator3DnonUniform"); } do { // convert the 'Scale2' argument
3653 boost::shared_ptr<const DataType> arg = params[base++];
3654 if (dynamic_cast<const UNSET*>(&*arg)) break;
3655 try { GenericConvert( in->Scale2, arg, db ); break; }
3656 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcCartesianTransformationOperator3DnonUniform to be a `REAL`")); }
3657 } while(0);
3658 do { // convert the 'Scale3' argument
3659 boost::shared_ptr<const DataType> arg = params[base++];
3660 if (dynamic_cast<const UNSET*>(&*arg)) break;
3661 try { GenericConvert( in->Scale3, arg, db ); break; }
3662 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 6 to IfcCartesianTransformationOperator3DnonUniform to be a `REAL`")); }
3663 } while(0);
3664 return base;
3665 }
3666 // -----------------------------------------------------------------------------------------------------------
3667 template <> size_t GenericFill<IfcCurtainWallType>(const DB& db, const LIST& params, IfcCurtainWallType* in)
3668 {
3669 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
3670 // this data structure is not used yet, so there is no code generated to fill its members
3671 return base;
3672 }
3673 // -----------------------------------------------------------------------------------------------------------
3674 template <> size_t GenericFill<IfcEquipmentStandard>(const DB& db, const LIST& params, IfcEquipmentStandard* in)
3675 {
3676 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
3677 // this data structure is not used yet, so there is no code generated to fill its members
3678 return base;
3679 }
3680 // -----------------------------------------------------------------------------------------------------------
3681 template <> size_t GenericFill<IfcFlowStorageDeviceType>(const DB& db, const LIST& params, IfcFlowStorageDeviceType* in)
3682 {
3683 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElementType*>(in));
3684 // this data structure is not used yet, so there is no code generated to fill its members
3685 return base;
3686 }
3687 // -----------------------------------------------------------------------------------------------------------
3688 template <> size_t GenericFill<IfcDiameterDimension>(const DB& db, const LIST& params, IfcDiameterDimension* in)
3689 {
3690 size_t base = GenericFill(db,params,static_cast<IfcDimensionCurveDirectedCallout*>(in));
3691 // this data structure is not used yet, so there is no code generated to fill its members
3692 return base;
3693 }
3694 // -----------------------------------------------------------------------------------------------------------
3695 template <> size_t GenericFill<IfcSwitchingDeviceType>(const DB& db, const LIST& params, IfcSwitchingDeviceType* in)
3696 {
3697 size_t base = GenericFill(db,params,static_cast<IfcFlowControllerType*>(in));
3698 // this data structure is not used yet, so there is no code generated to fill its members
3699 return base;
3700 }
3701 // -----------------------------------------------------------------------------------------------------------
3702 template <> size_t GenericFill<IfcWindow>(const DB& db, const LIST& params, IfcWindow* in)
3703 {
3704 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
3705 // this data structure is not used yet, so there is no code generated to fill its members
3706 return base;
3707 }
3708 // -----------------------------------------------------------------------------------------------------------
3709 template <> size_t GenericFill<IfcFlowTreatmentDevice>(const DB& db, const LIST& params, IfcFlowTreatmentDevice* in)
3710 {
3711 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElement*>(in));
3712 // this data structure is not used yet, so there is no code generated to fill its members
3713 return base;
3714 }
3715 // -----------------------------------------------------------------------------------------------------------
3716 template <> size_t GenericFill<IfcChillerType>(const DB& db, const LIST& params, IfcChillerType* in)
3717 {
3718 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
3719 // this data structure is not used yet, so there is no code generated to fill its members
3720 return base;
3721 }
3722 // -----------------------------------------------------------------------------------------------------------
3723 template <> size_t GenericFill<IfcRectangleHollowProfileDef>(const DB& db, const LIST& params, IfcRectangleHollowProfileDef* in)
3724 {
3725 size_t base = GenericFill(db,params,static_cast<IfcRectangleProfileDef*>(in));
3726 // this data structure is not used yet, so there is no code generated to fill its members
3727 return base;
3728 }
3729 // -----------------------------------------------------------------------------------------------------------
3730 template <> size_t GenericFill<IfcBoxedHalfSpace>(const DB& db, const LIST& params, IfcBoxedHalfSpace* in)
3731 {
3732 size_t base = GenericFill(db,params,static_cast<IfcHalfSpaceSolid*>(in));
3733 // this data structure is not used yet, so there is no code generated to fill its members
3734 return base;
3735 }
3736 // -----------------------------------------------------------------------------------------------------------
3737 template <> size_t GenericFill<IfcAxis2Placement2D>(const DB& db, const LIST& params, IfcAxis2Placement2D* in)
3738 {
3739 size_t base = GenericFill(db,params,static_cast<IfcPlacement*>(in));
3740 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcAxis2Placement2D"); } do { // convert the 'RefDirection' argument
3741 boost::shared_ptr<const DataType> arg = params[base++];
3742 if (dynamic_cast<const UNSET*>(&*arg)) break;
3743 try { GenericConvert( in->RefDirection, arg, db ); break; }
3744 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcAxis2Placement2D to be a `IfcDirection`")); }
3745 } while(0);
3746 return base;
3747 }
3748 // -----------------------------------------------------------------------------------------------------------
3749 template <> size_t GenericFill<IfcSpaceProgram>(const DB& db, const LIST& params, IfcSpaceProgram* in)
3750 {
3751 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
3752 // this data structure is not used yet, so there is no code generated to fill its members
3753 return base;
3754 }
3755 // -----------------------------------------------------------------------------------------------------------
3756 template <> size_t GenericFill<IfcPoint>(const DB& db, const LIST& params, IfcPoint* in)
3757 {
3758 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
3759 return base;
3760 }
3761 // -----------------------------------------------------------------------------------------------------------
3762 template <> size_t GenericFill<IfcCartesianPoint>(const DB& db, const LIST& params, IfcCartesianPoint* in)
3763 {
3764 size_t base = GenericFill(db,params,static_cast<IfcPoint*>(in));
3765 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcCartesianPoint"); } do { // convert the 'Coordinates' argument
3766 boost::shared_ptr<const DataType> arg = params[base++];
3767 try { GenericConvert( in->Coordinates, arg, db ); break; }
3768 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcCartesianPoint to be a `LIST [1:3] OF IfcLengthMeasure`")); }
3769 } while(0);
3770 return base;
3771 }
3772 // -----------------------------------------------------------------------------------------------------------
3773 template <> size_t GenericFill<IfcBoundedSurface>(const DB& db, const LIST& params, IfcBoundedSurface* in)
3774 {
3775 size_t base = GenericFill(db,params,static_cast<IfcSurface*>(in));
3776 // this data structure is not used yet, so there is no code generated to fill its members
3777 return base;
3778 }
3779 // -----------------------------------------------------------------------------------------------------------
3780 template <> size_t GenericFill<IfcLoop>(const DB& db, const LIST& params, IfcLoop* in)
3781 {
3782 size_t base = GenericFill(db,params,static_cast<IfcTopologicalRepresentationItem*>(in));
3783 return base;
3784 }
3785 // -----------------------------------------------------------------------------------------------------------
3786 template <> size_t GenericFill<IfcPolyLoop>(const DB& db, const LIST& params, IfcPolyLoop* in)
3787 {
3788 size_t base = GenericFill(db,params,static_cast<IfcLoop*>(in));
3789 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPolyLoop"); } do { // convert the 'Polygon' argument
3790 boost::shared_ptr<const DataType> arg = params[base++];
3791 try { GenericConvert( in->Polygon, arg, db ); break; }
3792 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPolyLoop to be a `LIST [3:?] OF IfcCartesianPoint`")); }
3793 } while(0);
3794 return base;
3795 }
3796 // -----------------------------------------------------------------------------------------------------------
3797 template <> size_t GenericFill<IfcTerminatorSymbol>(const DB& db, const LIST& params, IfcTerminatorSymbol* in)
3798 {
3799 size_t base = GenericFill(db,params,static_cast<IfcAnnotationSymbolOccurrence*>(in));
3800 // this data structure is not used yet, so there is no code generated to fill its members
3801 return base;
3802 }
3803 // -----------------------------------------------------------------------------------------------------------
3804 template <> size_t GenericFill<IfcDimensionCurveTerminator>(const DB& db, const LIST& params, IfcDimensionCurveTerminator* in)
3805 {
3806 size_t base = GenericFill(db,params,static_cast<IfcTerminatorSymbol*>(in));
3807 // this data structure is not used yet, so there is no code generated to fill its members
3808 return base;
3809 }
3810 // -----------------------------------------------------------------------------------------------------------
3811 template <> size_t GenericFill<IfcTrapeziumProfileDef>(const DB& db, const LIST& params, IfcTrapeziumProfileDef* in)
3812 {
3813 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
3814 // this data structure is not used yet, so there is no code generated to fill its members
3815 return base;
3816 }
3817 // -----------------------------------------------------------------------------------------------------------
3818 template <> size_t GenericFill<IfcRepresentationContext>(const DB& db, const LIST& params, IfcRepresentationContext* in)
3819 {
3820 size_t base = 0;
3821 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcRepresentationContext"); } do { // convert the 'ContextIdentifier' argument
3822 boost::shared_ptr<const DataType> arg = params[base++];
3823 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRepresentationContext,2>::aux_is_derived[0]=true; break; }
3824 if (dynamic_cast<const UNSET*>(&*arg)) break;
3825 try { GenericConvert( in->ContextIdentifier, arg, db ); break; }
3826 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcRepresentationContext to be a `IfcLabel`")); }
3827 } while(0);
3828 do { // convert the 'ContextType' argument
3829 boost::shared_ptr<const DataType> arg = params[base++];
3830 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRepresentationContext,2>::aux_is_derived[1]=true; break; }
3831 if (dynamic_cast<const UNSET*>(&*arg)) break;
3832 try { GenericConvert( in->ContextType, arg, db ); break; }
3833 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcRepresentationContext to be a `IfcLabel`")); }
3834 } while(0);
3835 return base;
3836 }
3837 // -----------------------------------------------------------------------------------------------------------
3838 template <> size_t GenericFill<IfcGeometricRepresentationContext>(const DB& db, const LIST& params, IfcGeometricRepresentationContext* in)
3839 {
3840 size_t base = GenericFill(db,params,static_cast<IfcRepresentationContext*>(in));
3841 if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcGeometricRepresentationContext"); } do { // convert the 'CoordinateSpaceDimension' argument
3842 boost::shared_ptr<const DataType> arg = params[base++];
3843 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcGeometricRepresentationContext,4>::aux_is_derived[0]=true; break; }
3844 try { GenericConvert( in->CoordinateSpaceDimension, arg, db ); break; }
3845 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcGeometricRepresentationContext to be a `IfcDimensionCount`")); }
3846 } while(0);
3847 do { // convert the 'Precision' argument
3848 boost::shared_ptr<const DataType> arg = params[base++];
3849 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcGeometricRepresentationContext,4>::aux_is_derived[1]=true; break; }
3850 if (dynamic_cast<const UNSET*>(&*arg)) break;
3851 try { GenericConvert( in->Precision, arg, db ); break; }
3852 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcGeometricRepresentationContext to be a `REAL`")); }
3853 } while(0);
3854 do { // convert the 'WorldCoordinateSystem' argument
3855 boost::shared_ptr<const DataType> arg = params[base++];
3856 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcGeometricRepresentationContext,4>::aux_is_derived[2]=true; break; }
3857 try { GenericConvert( in->WorldCoordinateSystem, arg, db ); break; }
3858 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcGeometricRepresentationContext to be a `IfcAxis2Placement`")); }
3859 } while(0);
3860 do { // convert the 'TrueNorth' argument
3861 boost::shared_ptr<const DataType> arg = params[base++];
3862 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcGeometricRepresentationContext,4>::aux_is_derived[3]=true; break; }
3863 if (dynamic_cast<const UNSET*>(&*arg)) break;
3864 try { GenericConvert( in->TrueNorth, arg, db ); break; }
3865 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcGeometricRepresentationContext to be a `IfcDirection`")); }
3866 } while(0);
3867 return base;
3868 }
3869 // -----------------------------------------------------------------------------------------------------------
3870 template <> size_t GenericFill<IfcCurveBoundedPlane>(const DB& db, const LIST& params, IfcCurveBoundedPlane* in)
3871 {
3872 size_t base = GenericFill(db,params,static_cast<IfcBoundedSurface*>(in));
3873 // this data structure is not used yet, so there is no code generated to fill its members
3874 return base;
3875 }
3876 // -----------------------------------------------------------------------------------------------------------
3877 template <> size_t GenericFill<IfcSIUnit>(const DB& db, const LIST& params, IfcSIUnit* in)
3878 {
3879 size_t base = GenericFill(db,params,static_cast<IfcNamedUnit*>(in));
3880 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcSIUnit"); } do { // convert the 'Prefix' argument
3881 boost::shared_ptr<const DataType> arg = params[base++];
3882 if (dynamic_cast<const UNSET*>(&*arg)) break;
3883 try { GenericConvert( in->Prefix, arg, db ); break; }
3884 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcSIUnit to be a `IfcSIPrefix`")); }
3885 } while(0);
3886 do { // convert the 'Name' argument
3887 boost::shared_ptr<const DataType> arg = params[base++];
3888 try { GenericConvert( in->Name, arg, db ); break; }
3889 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcSIUnit to be a `IfcSIUnitName`")); }
3890 } while(0);
3891 return base;
3892 }
3893 // -----------------------------------------------------------------------------------------------------------
3894 template <> size_t GenericFill<IfcStructuralReaction>(const DB& db, const LIST& params, IfcStructuralReaction* in)
3895 {
3896 size_t base = GenericFill(db,params,static_cast<IfcStructuralActivity*>(in));
3897 // this data structure is not used yet, so there is no code generated to fill its members
3898 return base;
3899 }
3900 // -----------------------------------------------------------------------------------------------------------
3901 template <> size_t GenericFill<IfcStructuralPointReaction>(const DB& db, const LIST& params, IfcStructuralPointReaction* in)
3902 {
3903 size_t base = GenericFill(db,params,static_cast<IfcStructuralReaction*>(in));
3904 // this data structure is not used yet, so there is no code generated to fill its members
3905 return base;
3906 }
3907 // -----------------------------------------------------------------------------------------------------------
3908 template <> size_t GenericFill<IfcAxis1Placement>(const DB& db, const LIST& params, IfcAxis1Placement* in)
3909 {
3910 size_t base = GenericFill(db,params,static_cast<IfcPlacement*>(in));
3911 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcAxis1Placement"); } do { // convert the 'Axis' argument
3912 boost::shared_ptr<const DataType> arg = params[base++];
3913 if (dynamic_cast<const UNSET*>(&*arg)) break;
3914 try { GenericConvert( in->Axis, arg, db ); break; }
3915 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcAxis1Placement to be a `IfcDirection`")); }
3916 } while(0);
3917 return base;
3918 }
3919 // -----------------------------------------------------------------------------------------------------------
3920 template <> size_t GenericFill<IfcElectricApplianceType>(const DB& db, const LIST& params, IfcElectricApplianceType* in)
3921 {
3922 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
3923 // this data structure is not used yet, so there is no code generated to fill its members
3924 return base;
3925 }
3926 // -----------------------------------------------------------------------------------------------------------
3927 template <> size_t GenericFill<IfcSensorType>(const DB& db, const LIST& params, IfcSensorType* in)
3928 {
3929 size_t base = GenericFill(db,params,static_cast<IfcDistributionControlElementType*>(in));
3930 // this data structure is not used yet, so there is no code generated to fill its members
3931 return base;
3932 }
3933 // -----------------------------------------------------------------------------------------------------------
3934 template <> size_t GenericFill<IfcFurnishingElement>(const DB& db, const LIST& params, IfcFurnishingElement* in)
3935 {
3936 size_t base = GenericFill(db,params,static_cast<IfcElement*>(in));
3937 // this data structure is not used yet, so there is no code generated to fill its members
3938 return base;
3939 }
3940 // -----------------------------------------------------------------------------------------------------------
3941 template <> size_t GenericFill<IfcProtectiveDeviceType>(const DB& db, const LIST& params, IfcProtectiveDeviceType* in)
3942 {
3943 size_t base = GenericFill(db,params,static_cast<IfcFlowControllerType*>(in));
3944 // this data structure is not used yet, so there is no code generated to fill its members
3945 return base;
3946 }
3947 // -----------------------------------------------------------------------------------------------------------
3948 template <> size_t GenericFill<IfcZShapeProfileDef>(const DB& db, const LIST& params, IfcZShapeProfileDef* in)
3949 {
3950 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
3951 // this data structure is not used yet, so there is no code generated to fill its members
3952 return base;
3953 }
3954 // -----------------------------------------------------------------------------------------------------------
3955 template <> size_t GenericFill<IfcScheduleTimeControl>(const DB& db, const LIST& params, IfcScheduleTimeControl* in)
3956 {
3957 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
3958 // this data structure is not used yet, so there is no code generated to fill its members
3959 return base;
3960 }
3961 // -----------------------------------------------------------------------------------------------------------
3962 template <> size_t GenericFill<IfcRepresentationMap>(const DB& db, const LIST& params, IfcRepresentationMap* in)
3963 {
3964 size_t base = 0;
3965 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcRepresentationMap"); } do { // convert the 'MappingOrigin' argument
3966 boost::shared_ptr<const DataType> arg = params[base++];
3967 try { GenericConvert( in->MappingOrigin, arg, db ); break; }
3968 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcRepresentationMap to be a `IfcAxis2Placement`")); }
3969 } while(0);
3970 do { // convert the 'MappedRepresentation' argument
3971 boost::shared_ptr<const DataType> arg = params[base++];
3972 try { GenericConvert( in->MappedRepresentation, arg, db ); break; }
3973 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcRepresentationMap to be a `IfcRepresentation`")); }
3974 } while(0);
3975 return base;
3976 }
3977 // -----------------------------------------------------------------------------------------------------------
3978 template <> size_t GenericFill<IfcClosedShell>(const DB& db, const LIST& params, IfcClosedShell* in)
3979 {
3980 size_t base = GenericFill(db,params,static_cast<IfcConnectedFaceSet*>(in));
3981 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcClosedShell"); } return base;
3982 }
3983 // -----------------------------------------------------------------------------------------------------------
3984 template <> size_t GenericFill<IfcBuildingElementPart>(const DB& db, const LIST& params, IfcBuildingElementPart* in)
3985 {
3986 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementComponent*>(in));
3987 // this data structure is not used yet, so there is no code generated to fill its members
3988 return base;
3989 }
3990 // -----------------------------------------------------------------------------------------------------------
3991 template <> size_t GenericFill<IfcBlock>(const DB& db, const LIST& params, IfcBlock* in)
3992 {
3993 size_t base = GenericFill(db,params,static_cast<IfcCsgPrimitive3D*>(in));
3994 // this data structure is not used yet, so there is no code generated to fill its members
3995 return base;
3996 }
3997 // -----------------------------------------------------------------------------------------------------------
3998 template <> size_t GenericFill<IfcLightFixtureType>(const DB& db, const LIST& params, IfcLightFixtureType* in)
3999 {
4000 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
4001 // this data structure is not used yet, so there is no code generated to fill its members
4002 return base;
4003 }
4004 // -----------------------------------------------------------------------------------------------------------
4005 template <> size_t GenericFill<IfcOpeningElement>(const DB& db, const LIST& params, IfcOpeningElement* in)
4006 {
4007 size_t base = GenericFill(db,params,static_cast<IfcFeatureElementSubtraction*>(in));
4008 if (params.GetSize() < 8) { throw STEP::TypeError("expected 8 arguments to IfcOpeningElement"); } return base;
4009 }
4010 // -----------------------------------------------------------------------------------------------------------
4011 template <> size_t GenericFill<IfcLightSourceSpot>(const DB& db, const LIST& params, IfcLightSourceSpot* in)
4012 {
4013 size_t base = GenericFill(db,params,static_cast<IfcLightSourcePositional*>(in));
4014 // this data structure is not used yet, so there is no code generated to fill its members
4015 return base;
4016 }
4017 // -----------------------------------------------------------------------------------------------------------
4018 template <> size_t GenericFill<IfcTendonAnchor>(const DB& db, const LIST& params, IfcTendonAnchor* in)
4019 {
4020 size_t base = GenericFill(db,params,static_cast<IfcReinforcingElement*>(in));
4021 // this data structure is not used yet, so there is no code generated to fill its members
4022 return base;
4023 }
4024 // -----------------------------------------------------------------------------------------------------------
4025 template <> size_t GenericFill<IfcElectricFlowStorageDeviceType>(const DB& db, const LIST& params, IfcElectricFlowStorageDeviceType* in)
4026 {
4027 size_t base = GenericFill(db,params,static_cast<IfcFlowStorageDeviceType*>(in));
4028 // this data structure is not used yet, so there is no code generated to fill its members
4029 return base;
4030 }
4031 // -----------------------------------------------------------------------------------------------------------
4032 template <> size_t GenericFill<IfcSphere>(const DB& db, const LIST& params, IfcSphere* in)
4033 {
4034 size_t base = GenericFill(db,params,static_cast<IfcCsgPrimitive3D*>(in));
4035 // this data structure is not used yet, so there is no code generated to fill its members
4036 return base;
4037 }
4038 // -----------------------------------------------------------------------------------------------------------
4039 template <> size_t GenericFill<IfcDamperType>(const DB& db, const LIST& params, IfcDamperType* in)
4040 {
4041 size_t base = GenericFill(db,params,static_cast<IfcFlowControllerType*>(in));
4042 // this data structure is not used yet, so there is no code generated to fill its members
4043 return base;
4044 }
4045 // -----------------------------------------------------------------------------------------------------------
4046 template <> size_t GenericFill<IfcProjectOrderRecord>(const DB& db, const LIST& params, IfcProjectOrderRecord* in)
4047 {
4048 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
4049 // this data structure is not used yet, so there is no code generated to fill its members
4050 return base;
4051 }
4052 // -----------------------------------------------------------------------------------------------------------
4053 template <> size_t GenericFill<IfcDistributionChamberElement>(const DB& db, const LIST& params, IfcDistributionChamberElement* in)
4054 {
4055 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElement*>(in));
4056 // this data structure is not used yet, so there is no code generated to fill its members
4057 return base;
4058 }
4059 // -----------------------------------------------------------------------------------------------------------
4060 template <> size_t GenericFill<IfcMechanicalFastener>(const DB& db, const LIST& params, IfcMechanicalFastener* in)
4061 {
4062 size_t base = GenericFill(db,params,static_cast<IfcFastener*>(in));
4063 // this data structure is not used yet, so there is no code generated to fill its members
4064 return base;
4065 }
4066 // -----------------------------------------------------------------------------------------------------------
4067 template <> size_t GenericFill<IfcRectangularTrimmedSurface>(const DB& db, const LIST& params, IfcRectangularTrimmedSurface* in)
4068 {
4069 size_t base = GenericFill(db,params,static_cast<IfcBoundedSurface*>(in));
4070 // this data structure is not used yet, so there is no code generated to fill its members
4071 return base;
4072 }
4073 // -----------------------------------------------------------------------------------------------------------
4074 template <> size_t GenericFill<IfcZone>(const DB& db, const LIST& params, IfcZone* in)
4075 {
4076 size_t base = GenericFill(db,params,static_cast<IfcGroup*>(in));
4077 // this data structure is not used yet, so there is no code generated to fill its members
4078 return base;
4079 }
4080 // -----------------------------------------------------------------------------------------------------------
4081 template <> size_t GenericFill<IfcFanType>(const DB& db, const LIST& params, IfcFanType* in)
4082 {
4083 size_t base = GenericFill(db,params,static_cast<IfcFlowMovingDeviceType*>(in));
4084 // this data structure is not used yet, so there is no code generated to fill its members
4085 return base;
4086 }
4087 // -----------------------------------------------------------------------------------------------------------
4088 template <> size_t GenericFill<IfcGeometricSet>(const DB& db, const LIST& params, IfcGeometricSet* in)
4089 {
4090 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
4091 // this data structure is not used yet, so there is no code generated to fill its members
4092 return base;
4093 }
4094 // -----------------------------------------------------------------------------------------------------------
4095 template <> size_t GenericFill<IfcFillAreaStyleTiles>(const DB& db, const LIST& params, IfcFillAreaStyleTiles* in)
4096 {
4097 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
4098 // this data structure is not used yet, so there is no code generated to fill its members
4099 return base;
4100 }
4101 // -----------------------------------------------------------------------------------------------------------
4102 template <> size_t GenericFill<IfcCableSegmentType>(const DB& db, const LIST& params, IfcCableSegmentType* in)
4103 {
4104 size_t base = GenericFill(db,params,static_cast<IfcFlowSegmentType*>(in));
4105 // this data structure is not used yet, so there is no code generated to fill its members
4106 return base;
4107 }
4108 // -----------------------------------------------------------------------------------------------------------
4109 template <> size_t GenericFill<IfcRelOverridesProperties>(const DB& db, const LIST& params, IfcRelOverridesProperties* in)
4110 {
4111 size_t base = GenericFill(db,params,static_cast<IfcRelDefinesByProperties*>(in));
4112 // this data structure is not used yet, so there is no code generated to fill its members
4113 return base;
4114 }
4115 // -----------------------------------------------------------------------------------------------------------
4116 template <> size_t GenericFill<IfcMeasureWithUnit>(const DB& db, const LIST& params, IfcMeasureWithUnit* in)
4117 {
4118 size_t base = 0;
4119 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcMeasureWithUnit"); } do { // convert the 'ValueComponent' argument
4120 boost::shared_ptr<const DataType> arg = params[base++];
4121 try { GenericConvert( in->ValueComponent, arg, db ); break; }
4122 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcMeasureWithUnit to be a `IfcValue`")); }
4123 } while(0);
4124 do { // convert the 'UnitComponent' argument
4125 boost::shared_ptr<const DataType> arg = params[base++];
4126 try { GenericConvert( in->UnitComponent, arg, db ); break; }
4127 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcMeasureWithUnit to be a `IfcUnit`")); }
4128 } while(0);
4129 return base;
4130 }
4131 // -----------------------------------------------------------------------------------------------------------
4132 template <> size_t GenericFill<IfcSlabType>(const DB& db, const LIST& params, IfcSlabType* in)
4133 {
4134 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
4135 // this data structure is not used yet, so there is no code generated to fill its members
4136 return base;
4137 }
4138 // -----------------------------------------------------------------------------------------------------------
4139 template <> size_t GenericFill<IfcServiceLife>(const DB& db, const LIST& params, IfcServiceLife* in)
4140 {
4141 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
4142 // this data structure is not used yet, so there is no code generated to fill its members
4143 return base;
4144 }
4145 // -----------------------------------------------------------------------------------------------------------
4146 template <> size_t GenericFill<IfcFurnitureType>(const DB& db, const LIST& params, IfcFurnitureType* in)
4147 {
4148 size_t base = GenericFill(db,params,static_cast<IfcFurnishingElementType*>(in));
4149 // this data structure is not used yet, so there is no code generated to fill its members
4150 return base;
4151 }
4152 // -----------------------------------------------------------------------------------------------------------
4153 template <> size_t GenericFill<IfcCostItem>(const DB& db, const LIST& params, IfcCostItem* in)
4154 {
4155 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
4156 // this data structure is not used yet, so there is no code generated to fill its members
4157 return base;
4158 }
4159 // -----------------------------------------------------------------------------------------------------------
4160 template <> size_t GenericFill<IfcReinforcingMesh>(const DB& db, const LIST& params, IfcReinforcingMesh* in)
4161 {
4162 size_t base = GenericFill(db,params,static_cast<IfcReinforcingElement*>(in));
4163 // this data structure is not used yet, so there is no code generated to fill its members
4164 return base;
4165 }
4166 // -----------------------------------------------------------------------------------------------------------
4167 template <> size_t GenericFill<IfcFacetedBrepWithVoids>(const DB& db, const LIST& params, IfcFacetedBrepWithVoids* in)
4168 {
4169 size_t base = GenericFill(db,params,static_cast<IfcManifoldSolidBrep*>(in));
4170 // this data structure is not used yet, so there is no code generated to fill its members
4171 return base;
4172 }
4173 // -----------------------------------------------------------------------------------------------------------
4174 template <> size_t GenericFill<IfcGasTerminalType>(const DB& db, const LIST& params, IfcGasTerminalType* in)
4175 {
4176 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
4177 // this data structure is not used yet, so there is no code generated to fill its members
4178 return base;
4179 }
4180 // -----------------------------------------------------------------------------------------------------------
4181 template <> size_t GenericFill<IfcPile>(const DB& db, const LIST& params, IfcPile* in)
4182 {
4183 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
4184 // this data structure is not used yet, so there is no code generated to fill its members
4185 return base;
4186 }
4187 // -----------------------------------------------------------------------------------------------------------
4188 template <> size_t GenericFill<IfcFillAreaStyleTileSymbolWithStyle>(const DB& db, const LIST& params, IfcFillAreaStyleTileSymbolWithStyle* in)
4189 {
4190 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
4191 // this data structure is not used yet, so there is no code generated to fill its members
4192 return base;
4193 }
4194 // -----------------------------------------------------------------------------------------------------------
4195 template <> size_t GenericFill<IfcConstructionMaterialResource>(const DB& db, const LIST& params, IfcConstructionMaterialResource* in)
4196 {
4197 size_t base = GenericFill(db,params,static_cast<IfcConstructionResource*>(in));
4198 // this data structure is not used yet, so there is no code generated to fill its members
4199 return base;
4200 }
4201 // -----------------------------------------------------------------------------------------------------------
4202 template <> size_t GenericFill<IfcAnnotationCurveOccurrence>(const DB& db, const LIST& params, IfcAnnotationCurveOccurrence* in)
4203 {
4204 size_t base = GenericFill(db,params,static_cast<IfcAnnotationOccurrence*>(in));
4205 // this data structure is not used yet, so there is no code generated to fill its members
4206 return base;
4207 }
4208 // -----------------------------------------------------------------------------------------------------------
4209 template <> size_t GenericFill<IfcDimensionCurve>(const DB& db, const LIST& params, IfcDimensionCurve* in)
4210 {
4211 size_t base = GenericFill(db,params,static_cast<IfcAnnotationCurveOccurrence*>(in));
4212 // this data structure is not used yet, so there is no code generated to fill its members
4213 return base;
4214 }
4215 // -----------------------------------------------------------------------------------------------------------
4216 template <> size_t GenericFill<IfcGeometricCurveSet>(const DB& db, const LIST& params, IfcGeometricCurveSet* in)
4217 {
4218 size_t base = GenericFill(db,params,static_cast<IfcGeometricSet*>(in));
4219 // this data structure is not used yet, so there is no code generated to fill its members
4220 return base;
4221 }
4222 // -----------------------------------------------------------------------------------------------------------
4223 template <> size_t GenericFill<IfcRelAggregates>(const DB& db, const LIST& params, IfcRelAggregates* in)
4224 {
4225 size_t base = GenericFill(db,params,static_cast<IfcRelDecomposes*>(in));
4226 if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelAggregates"); } return base;
4227 }
4228 // -----------------------------------------------------------------------------------------------------------
4229 template <> size_t GenericFill<IfcFaceBasedSurfaceModel>(const DB& db, const LIST& params, IfcFaceBasedSurfaceModel* in)
4230 {
4231 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
4232 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcFaceBasedSurfaceModel"); } do { // convert the 'FbsmFaces' argument
4233 boost::shared_ptr<const DataType> arg = params[base++];
4234 try { GenericConvert( in->FbsmFaces, arg, db ); break; }
4235 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcFaceBasedSurfaceModel to be a `SET [1:?] OF IfcConnectedFaceSet`")); }
4236 } while(0);
4237 return base;
4238 }
4239 // -----------------------------------------------------------------------------------------------------------
4240 template <> size_t GenericFill<IfcEnergyConversionDevice>(const DB& db, const LIST& params, IfcEnergyConversionDevice* in)
4241 {
4242 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElement*>(in));
4243 // this data structure is not used yet, so there is no code generated to fill its members
4244 return base;
4245 }
4246 // -----------------------------------------------------------------------------------------------------------
4247 template <> size_t GenericFill<IfcRampFlight>(const DB& db, const LIST& params, IfcRampFlight* in)
4248 {
4249 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
4250 // this data structure is not used yet, so there is no code generated to fill its members
4251 return base;
4252 }
4253 // -----------------------------------------------------------------------------------------------------------
4254 template <> size_t GenericFill<IfcVertexLoop>(const DB& db, const LIST& params, IfcVertexLoop* in)
4255 {
4256 size_t base = GenericFill(db,params,static_cast<IfcLoop*>(in));
4257 // this data structure is not used yet, so there is no code generated to fill its members
4258 return base;
4259 }
4260 // -----------------------------------------------------------------------------------------------------------
4261 template <> size_t GenericFill<IfcPlate>(const DB& db, const LIST& params, IfcPlate* in)
4262 {
4263 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
4264 // this data structure is not used yet, so there is no code generated to fill its members
4265 return base;
4266 }
4267 // -----------------------------------------------------------------------------------------------------------
4268 template <> size_t GenericFill<IfcUShapeProfileDef>(const DB& db, const LIST& params, IfcUShapeProfileDef* in)
4269 {
4270 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
4271 // this data structure is not used yet, so there is no code generated to fill its members
17274272 return base;
17284273 }
17294274 // -----------------------------------------------------------------------------------------------------------
17514296 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcFaceOuterBound"); } return base;
17524297 }
17534298 // -----------------------------------------------------------------------------------------------------------
1754 template <> size_t GenericFill<IfcFeatureElementAddition>(const DB& db, const LIST& params, IfcFeatureElementAddition* in)
1755 {
1756 size_t base = GenericFill(db,params,static_cast<IfcFeatureElement*>(in));
1757 // this data structure is not used yet, so there is no code generated to fill its members
1758 return base;
1759 }
1760 // -----------------------------------------------------------------------------------------------------------
1761 template <> size_t GenericFill<IfcNamedUnit>(const DB& db, const LIST& params, IfcNamedUnit* in)
4299 template <> size_t GenericFill<IfcOneDirectionRepeatFactor>(const DB& db, const LIST& params, IfcOneDirectionRepeatFactor* in)
4300 {
4301 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
4302 // this data structure is not used yet, so there is no code generated to fill its members
4303 return base;
4304 }
4305 // -----------------------------------------------------------------------------------------------------------
4306 template <> size_t GenericFill<IfcBoilerType>(const DB& db, const LIST& params, IfcBoilerType* in)
4307 {
4308 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
4309 // this data structure is not used yet, so there is no code generated to fill its members
4310 return base;
4311 }
4312 // -----------------------------------------------------------------------------------------------------------
4313 template <> size_t GenericFill<IfcConstructionEquipmentResource>(const DB& db, const LIST& params, IfcConstructionEquipmentResource* in)
4314 {
4315 size_t base = GenericFill(db,params,static_cast<IfcConstructionResource*>(in));
4316 // this data structure is not used yet, so there is no code generated to fill its members
4317 return base;
4318 }
4319 // -----------------------------------------------------------------------------------------------------------
4320 template <> size_t GenericFill<IfcComplexProperty>(const DB& db, const LIST& params, IfcComplexProperty* in)
4321 {
4322 size_t base = GenericFill(db,params,static_cast<IfcProperty*>(in));
4323 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcComplexProperty"); } do { // convert the 'UsageName' argument
4324 boost::shared_ptr<const DataType> arg = params[base++];
4325 try { GenericConvert( in->UsageName, arg, db ); break; }
4326 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcComplexProperty to be a `IfcIdentifier`")); }
4327 } while(0);
4328 do { // convert the 'HasProperties' argument
4329 boost::shared_ptr<const DataType> arg = params[base++];
4330 try { GenericConvert( in->HasProperties, arg, db ); break; }
4331 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcComplexProperty to be a `SET [1:?] OF IfcProperty`")); }
4332 } while(0);
4333 return base;
4334 }
4335 // -----------------------------------------------------------------------------------------------------------
4336 template <> size_t GenericFill<IfcFooting>(const DB& db, const LIST& params, IfcFooting* in)
4337 {
4338 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
4339 // this data structure is not used yet, so there is no code generated to fill its members
4340 return base;
4341 }
4342 // -----------------------------------------------------------------------------------------------------------
4343 template <> size_t GenericFill<IfcConstructionProductResource>(const DB& db, const LIST& params, IfcConstructionProductResource* in)
4344 {
4345 size_t base = GenericFill(db,params,static_cast<IfcConstructionResource*>(in));
4346 // this data structure is not used yet, so there is no code generated to fill its members
4347 return base;
4348 }
4349 // -----------------------------------------------------------------------------------------------------------
4350 template <> size_t GenericFill<IfcDerivedProfileDef>(const DB& db, const LIST& params, IfcDerivedProfileDef* in)
4351 {
4352 size_t base = GenericFill(db,params,static_cast<IfcProfileDef*>(in));
4353 // this data structure is not used yet, so there is no code generated to fill its members
4354 return base;
4355 }
4356 // -----------------------------------------------------------------------------------------------------------
4357 template <> size_t GenericFill<IfcPropertyTableValue>(const DB& db, const LIST& params, IfcPropertyTableValue* in)
4358 {
4359 size_t base = GenericFill(db,params,static_cast<IfcSimpleProperty*>(in));
4360 // this data structure is not used yet, so there is no code generated to fill its members
4361 return base;
4362 }
4363 // -----------------------------------------------------------------------------------------------------------
4364 template <> size_t GenericFill<IfcFlowMeterType>(const DB& db, const LIST& params, IfcFlowMeterType* in)
4365 {
4366 size_t base = GenericFill(db,params,static_cast<IfcFlowControllerType*>(in));
4367 // this data structure is not used yet, so there is no code generated to fill its members
4368 return base;
4369 }
4370 // -----------------------------------------------------------------------------------------------------------
4371 template <> size_t GenericFill<IfcDoorStyle>(const DB& db, const LIST& params, IfcDoorStyle* in)
4372 {
4373 size_t base = GenericFill(db,params,static_cast<IfcTypeProduct*>(in));
4374 // this data structure is not used yet, so there is no code generated to fill its members
4375 return base;
4376 }
4377 // -----------------------------------------------------------------------------------------------------------
4378 template <> size_t GenericFill<IfcUnitAssignment>(const DB& db, const LIST& params, IfcUnitAssignment* in)
17624379 {
17634380 size_t base = 0;
1764 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcNamedUnit"); } do { // convert the 'Dimensions' argument
1765 boost::shared_ptr<const DataType> arg = params[base++];
1766 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcNamedUnit,2>::aux_is_derived[0]=true; break; }
1767 try { GenericConvert( in->Dimensions, arg, db ); break; }
1768 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcNamedUnit to be a `IfcDimensionalExponents`")); }
1769 } while(0);
1770 do { // convert the 'UnitType' argument
1771 boost::shared_ptr<const DataType> arg = params[base++];
1772 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcNamedUnit,2>::aux_is_derived[1]=true; break; }
1773 try { GenericConvert( in->UnitType, arg, db ); break; }
1774 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcNamedUnit to be a `IfcUnitEnum`")); }
1775 } while(0);
4381 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcUnitAssignment"); } do { // convert the 'Units' argument
4382 boost::shared_ptr<const DataType> arg = params[base++];
4383 try { GenericConvert( in->Units, arg, db ); break; }
4384 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcUnitAssignment to be a `SET [1:?] OF IfcUnit`")); }
4385 } while(0);
4386 return base;
4387 }
4388 // -----------------------------------------------------------------------------------------------------------
4389 template <> size_t GenericFill<IfcFlowTerminal>(const DB& db, const LIST& params, IfcFlowTerminal* in)
4390 {
4391 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElement*>(in));
4392 // this data structure is not used yet, so there is no code generated to fill its members
4393 return base;
4394 }
4395 // -----------------------------------------------------------------------------------------------------------
4396 template <> size_t GenericFill<IfcCraneRailFShapeProfileDef>(const DB& db, const LIST& params, IfcCraneRailFShapeProfileDef* in)
4397 {
4398 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
4399 // this data structure is not used yet, so there is no code generated to fill its members
4400 return base;
4401 }
4402 // -----------------------------------------------------------------------------------------------------------
4403 template <> size_t GenericFill<IfcFlowSegment>(const DB& db, const LIST& params, IfcFlowSegment* in)
4404 {
4405 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElement*>(in));
4406 // this data structure is not used yet, so there is no code generated to fill its members
4407 return base;
4408 }
4409 // -----------------------------------------------------------------------------------------------------------
4410 template <> size_t GenericFill<IfcElementQuantity>(const DB& db, const LIST& params, IfcElementQuantity* in)
4411 {
4412 size_t base = GenericFill(db,params,static_cast<IfcPropertySetDefinition*>(in));
4413 if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcElementQuantity"); } do { // convert the 'MethodOfMeasurement' argument
4414 boost::shared_ptr<const DataType> arg = params[base++];
4415 if (dynamic_cast<const UNSET*>(&*arg)) break;
4416 try { GenericConvert( in->MethodOfMeasurement, arg, db ); break; }
4417 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcElementQuantity to be a `IfcLabel`")); }
4418 } while(0);
4419 do { // convert the 'Quantities' argument
4420 boost::shared_ptr<const DataType> arg = params[base++];
4421 try { GenericConvert( in->Quantities, arg, db ); break; }
4422 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcElementQuantity to be a `SET [1:?] OF IfcPhysicalQuantity`")); }
4423 } while(0);
4424 return base;
4425 }
4426 // -----------------------------------------------------------------------------------------------------------
4427 template <> size_t GenericFill<IfcCurtainWall>(const DB& db, const LIST& params, IfcCurtainWall* in)
4428 {
4429 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
4430 // this data structure is not used yet, so there is no code generated to fill its members
4431 return base;
4432 }
4433 // -----------------------------------------------------------------------------------------------------------
4434 template <> size_t GenericFill<IfcDiscreteAccessory>(const DB& db, const LIST& params, IfcDiscreteAccessory* in)
4435 {
4436 size_t base = GenericFill(db,params,static_cast<IfcElementComponent*>(in));
4437 // this data structure is not used yet, so there is no code generated to fill its members
4438 return base;
4439 }
4440 // -----------------------------------------------------------------------------------------------------------
4441 template <> size_t GenericFill<IfcGrid>(const DB& db, const LIST& params, IfcGrid* in)
4442 {
4443 size_t base = GenericFill(db,params,static_cast<IfcProduct*>(in));
4444 // this data structure is not used yet, so there is no code generated to fill its members
4445 return base;
4446 }
4447 // -----------------------------------------------------------------------------------------------------------
4448 template <> size_t GenericFill<IfcSanitaryTerminalType>(const DB& db, const LIST& params, IfcSanitaryTerminalType* in)
4449 {
4450 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
4451 // this data structure is not used yet, so there is no code generated to fill its members
4452 return base;
4453 }
4454 // -----------------------------------------------------------------------------------------------------------
4455 template <> size_t GenericFill<IfcSubedge>(const DB& db, const LIST& params, IfcSubedge* in)
4456 {
4457 size_t base = GenericFill(db,params,static_cast<IfcEdge*>(in));
4458 // this data structure is not used yet, so there is no code generated to fill its members
4459 return base;
4460 }
4461 // -----------------------------------------------------------------------------------------------------------
4462 template <> size_t GenericFill<IfcFilterType>(const DB& db, const LIST& params, IfcFilterType* in)
4463 {
4464 size_t base = GenericFill(db,params,static_cast<IfcFlowTreatmentDeviceType*>(in));
4465 // this data structure is not used yet, so there is no code generated to fill its members
4466 return base;
4467 }
4468 // -----------------------------------------------------------------------------------------------------------
4469 template <> size_t GenericFill<IfcTendon>(const DB& db, const LIST& params, IfcTendon* in)
4470 {
4471 size_t base = GenericFill(db,params,static_cast<IfcReinforcingElement*>(in));
4472 // this data structure is not used yet, so there is no code generated to fill its members
4473 return base;
4474 }
4475 // -----------------------------------------------------------------------------------------------------------
4476 template <> size_t GenericFill<IfcStructuralLoadGroup>(const DB& db, const LIST& params, IfcStructuralLoadGroup* in)
4477 {
4478 size_t base = GenericFill(db,params,static_cast<IfcGroup*>(in));
4479 // this data structure is not used yet, so there is no code generated to fill its members
4480 return base;
4481 }
4482 // -----------------------------------------------------------------------------------------------------------
4483 template <> size_t GenericFill<IfcPresentationStyleAssignment>(const DB& db, const LIST& params, IfcPresentationStyleAssignment* in)
4484 {
4485 size_t base = 0;
4486 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPresentationStyleAssignment"); } do { // convert the 'Styles' argument
4487 boost::shared_ptr<const DataType> arg = params[base++];
4488 try { GenericConvert( in->Styles, arg, db ); break; }
4489 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPresentationStyleAssignment to be a `SET [1:?] OF IfcPresentationStyleSelect`")); }
4490 } while(0);
4491 return base;
4492 }
4493 // -----------------------------------------------------------------------------------------------------------
4494 template <> size_t GenericFill<IfcStructuralCurveMember>(const DB& db, const LIST& params, IfcStructuralCurveMember* in)
4495 {
4496 size_t base = GenericFill(db,params,static_cast<IfcStructuralMember*>(in));
4497 // this data structure is not used yet, so there is no code generated to fill its members
4498 return base;
4499 }
4500 // -----------------------------------------------------------------------------------------------------------
4501 template <> size_t GenericFill<IfcLightSourceAmbient>(const DB& db, const LIST& params, IfcLightSourceAmbient* in)
4502 {
4503 size_t base = GenericFill(db,params,static_cast<IfcLightSource*>(in));
4504 // this data structure is not used yet, so there is no code generated to fill its members
4505 return base;
4506 }
4507 // -----------------------------------------------------------------------------------------------------------
4508 template <> size_t GenericFill<IfcCondition>(const DB& db, const LIST& params, IfcCondition* in)
4509 {
4510 size_t base = GenericFill(db,params,static_cast<IfcGroup*>(in));
4511 // this data structure is not used yet, so there is no code generated to fill its members
4512 return base;
4513 }
4514 // -----------------------------------------------------------------------------------------------------------
4515 template <> size_t GenericFill<IfcPort>(const DB& db, const LIST& params, IfcPort* in)
4516 {
4517 size_t base = GenericFill(db,params,static_cast<IfcProduct*>(in));
4518 // this data structure is not used yet, so there is no code generated to fill its members
4519 return base;
4520 }
4521 // -----------------------------------------------------------------------------------------------------------
4522 template <> size_t GenericFill<IfcSpace>(const DB& db, const LIST& params, IfcSpace* in)
4523 {
4524 size_t base = GenericFill(db,params,static_cast<IfcSpatialStructureElement*>(in));
4525 if (params.GetSize() < 11) { throw STEP::TypeError("expected 11 arguments to IfcSpace"); } do { // convert the 'InteriorOrExteriorSpace' argument
4526 boost::shared_ptr<const DataType> arg = params[base++];
4527 try { GenericConvert( in->InteriorOrExteriorSpace, arg, db ); break; }
4528 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcSpace to be a `IfcInternalOrExternalEnum`")); }
4529 } while(0);
4530 do { // convert the 'ElevationWithFlooring' argument
4531 boost::shared_ptr<const DataType> arg = params[base++];
4532 if (dynamic_cast<const UNSET*>(&*arg)) break;
4533 try { GenericConvert( in->ElevationWithFlooring, arg, db ); break; }
4534 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 10 to IfcSpace to be a `IfcLengthMeasure`")); }
4535 } while(0);
4536 return base;
4537 }
4538 // -----------------------------------------------------------------------------------------------------------
4539 template <> size_t GenericFill<IfcHeatExchangerType>(const DB& db, const LIST& params, IfcHeatExchangerType* in)
4540 {
4541 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
4542 // this data structure is not used yet, so there is no code generated to fill its members
4543 return base;
4544 }
4545 // -----------------------------------------------------------------------------------------------------------
4546 template <> size_t GenericFill<IfcTankType>(const DB& db, const LIST& params, IfcTankType* in)
4547 {
4548 size_t base = GenericFill(db,params,static_cast<IfcFlowStorageDeviceType*>(in));
4549 // this data structure is not used yet, so there is no code generated to fill its members
4550 return base;
4551 }
4552 // -----------------------------------------------------------------------------------------------------------
4553 template <> size_t GenericFill<IfcInventory>(const DB& db, const LIST& params, IfcInventory* in)
4554 {
4555 size_t base = GenericFill(db,params,static_cast<IfcGroup*>(in));
4556 // this data structure is not used yet, so there is no code generated to fill its members
4557 return base;
4558 }
4559 // -----------------------------------------------------------------------------------------------------------
4560 template <> size_t GenericFill<IfcTransportElementType>(const DB& db, const LIST& params, IfcTransportElementType* in)
4561 {
4562 size_t base = GenericFill(db,params,static_cast<IfcElementType*>(in));
4563 // this data structure is not used yet, so there is no code generated to fill its members
4564 return base;
4565 }
4566 // -----------------------------------------------------------------------------------------------------------
4567 template <> size_t GenericFill<IfcAirToAirHeatRecoveryType>(const DB& db, const LIST& params, IfcAirToAirHeatRecoveryType* in)
4568 {
4569 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
4570 // this data structure is not used yet, so there is no code generated to fill its members
4571 return base;
4572 }
4573 // -----------------------------------------------------------------------------------------------------------
4574 template <> size_t GenericFill<IfcStairFlight>(const DB& db, const LIST& params, IfcStairFlight* in)
4575 {
4576 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
4577 // this data structure is not used yet, so there is no code generated to fill its members
4578 return base;
4579 }
4580 // -----------------------------------------------------------------------------------------------------------
4581 template <> size_t GenericFill<IfcElectricalElement>(const DB& db, const LIST& params, IfcElectricalElement* in)
4582 {
4583 size_t base = GenericFill(db,params,static_cast<IfcElement*>(in));
4584 // this data structure is not used yet, so there is no code generated to fill its members
4585 return base;
4586 }
4587 // -----------------------------------------------------------------------------------------------------------
4588 template <> size_t GenericFill<IfcSurfaceStyleWithTextures>(const DB& db, const LIST& params, IfcSurfaceStyleWithTextures* in)
4589 {
4590 size_t base = 0;
4591 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcSurfaceStyleWithTextures"); } do { // convert the 'Textures' argument
4592 boost::shared_ptr<const DataType> arg = params[base++];
4593 try { GenericConvert( in->Textures, arg, db ); break; }
4594 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSurfaceStyleWithTextures to be a `LIST [1:?] OF IfcSurfaceTexture`")); }
4595 } while(0);
4596 return base;
4597 }
4598 // -----------------------------------------------------------------------------------------------------------
4599 template <> size_t GenericFill<IfcBoundingBox>(const DB& db, const LIST& params, IfcBoundingBox* in)
4600 {
4601 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
4602 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcBoundingBox"); } do { // convert the 'Corner' argument
4603 boost::shared_ptr<const DataType> arg = params[base++];
4604 try { GenericConvert( in->Corner, arg, db ); break; }
4605 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcBoundingBox to be a `IfcCartesianPoint`")); }
4606 } while(0);
4607 do { // convert the 'XDim' argument
4608 boost::shared_ptr<const DataType> arg = params[base++];
4609 try { GenericConvert( in->XDim, arg, db ); break; }
4610 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcBoundingBox to be a `IfcPositiveLengthMeasure`")); }
4611 } while(0);
4612 do { // convert the 'YDim' argument
4613 boost::shared_ptr<const DataType> arg = params[base++];
4614 try { GenericConvert( in->YDim, arg, db ); break; }
4615 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcBoundingBox to be a `IfcPositiveLengthMeasure`")); }
4616 } while(0);
4617 do { // convert the 'ZDim' argument
4618 boost::shared_ptr<const DataType> arg = params[base++];
4619 try { GenericConvert( in->ZDim, arg, db ); break; }
4620 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcBoundingBox to be a `IfcPositiveLengthMeasure`")); }
4621 } while(0);
4622 return base;
4623 }
4624 // -----------------------------------------------------------------------------------------------------------
4625 template <> size_t GenericFill<IfcWallType>(const DB& db, const LIST& params, IfcWallType* in)
4626 {
4627 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
4628 // this data structure is not used yet, so there is no code generated to fill its members
4629 return base;
4630 }
4631 // -----------------------------------------------------------------------------------------------------------
4632 template <> size_t GenericFill<IfcMove>(const DB& db, const LIST& params, IfcMove* in)
4633 {
4634 size_t base = GenericFill(db,params,static_cast<IfcTask*>(in));
4635 // this data structure is not used yet, so there is no code generated to fill its members
4636 return base;
4637 }
4638 // -----------------------------------------------------------------------------------------------------------
4639 template <> size_t GenericFill<IfcCircle>(const DB& db, const LIST& params, IfcCircle* in)
4640 {
4641 size_t base = GenericFill(db,params,static_cast<IfcConic*>(in));
4642 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcCircle"); } do { // convert the 'Radius' argument
4643 boost::shared_ptr<const DataType> arg = params[base++];
4644 try { GenericConvert( in->Radius, arg, db ); break; }
4645 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCircle to be a `IfcPositiveLengthMeasure`")); }
4646 } while(0);
4647 return base;
4648 }
4649 // -----------------------------------------------------------------------------------------------------------
4650 template <> size_t GenericFill<IfcOffsetCurve2D>(const DB& db, const LIST& params, IfcOffsetCurve2D* in)
4651 {
4652 size_t base = GenericFill(db,params,static_cast<IfcCurve*>(in));
4653 // this data structure is not used yet, so there is no code generated to fill its members
4654 return base;
4655 }
4656 // -----------------------------------------------------------------------------------------------------------
4657 template <> size_t GenericFill<IfcPointOnCurve>(const DB& db, const LIST& params, IfcPointOnCurve* in)
4658 {
4659 size_t base = GenericFill(db,params,static_cast<IfcPoint*>(in));
4660 // this data structure is not used yet, so there is no code generated to fill its members
4661 return base;
4662 }
4663 // -----------------------------------------------------------------------------------------------------------
4664 template <> size_t GenericFill<IfcStructuralResultGroup>(const DB& db, const LIST& params, IfcStructuralResultGroup* in)
4665 {
4666 size_t base = GenericFill(db,params,static_cast<IfcGroup*>(in));
4667 // this data structure is not used yet, so there is no code generated to fill its members
4668 return base;
4669 }
4670 // -----------------------------------------------------------------------------------------------------------
4671 template <> size_t GenericFill<IfcSectionedSpine>(const DB& db, const LIST& params, IfcSectionedSpine* in)
4672 {
4673 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
4674 // this data structure is not used yet, so there is no code generated to fill its members
4675 return base;
4676 }
4677 // -----------------------------------------------------------------------------------------------------------
4678 template <> size_t GenericFill<IfcSlab>(const DB& db, const LIST& params, IfcSlab* in)
4679 {
4680 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
4681 // this data structure is not used yet, so there is no code generated to fill its members
4682 return base;
4683 }
4684 // -----------------------------------------------------------------------------------------------------------
4685 template <> size_t GenericFill<IfcVertex>(const DB& db, const LIST& params, IfcVertex* in)
4686 {
4687 size_t base = GenericFill(db,params,static_cast<IfcTopologicalRepresentationItem*>(in));
4688 // this data structure is not used yet, so there is no code generated to fill its members
4689 return base;
4690 }
4691 // -----------------------------------------------------------------------------------------------------------
4692 template <> size_t GenericFill<IfcVertexPoint>(const DB& db, const LIST& params, IfcVertexPoint* in)
4693 {
4694 size_t base = GenericFill(db,params,static_cast<IfcVertex*>(in));
4695 // this data structure is not used yet, so there is no code generated to fill its members
4696 return base;
4697 }
4698 // -----------------------------------------------------------------------------------------------------------
4699 template <> size_t GenericFill<IfcStructuralLinearAction>(const DB& db, const LIST& params, IfcStructuralLinearAction* in)
4700 {
4701 size_t base = GenericFill(db,params,static_cast<IfcStructuralAction*>(in));
4702 // this data structure is not used yet, so there is no code generated to fill its members
4703 return base;
4704 }
4705 // -----------------------------------------------------------------------------------------------------------
4706 template <> size_t GenericFill<IfcStructuralLinearActionVarying>(const DB& db, const LIST& params, IfcStructuralLinearActionVarying* in)
4707 {
4708 size_t base = GenericFill(db,params,static_cast<IfcStructuralLinearAction*>(in));
4709 // this data structure is not used yet, so there is no code generated to fill its members
4710 return base;
4711 }
4712 // -----------------------------------------------------------------------------------------------------------
4713 template <> size_t GenericFill<IfcBuildingElementProxyType>(const DB& db, const LIST& params, IfcBuildingElementProxyType* in)
4714 {
4715 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
4716 // this data structure is not used yet, so there is no code generated to fill its members
4717 return base;
4718 }
4719 // -----------------------------------------------------------------------------------------------------------
4720 template <> size_t GenericFill<IfcProjectionElement>(const DB& db, const LIST& params, IfcProjectionElement* in)
4721 {
4722 size_t base = GenericFill(db,params,static_cast<IfcFeatureElementAddition*>(in));
4723 // this data structure is not used yet, so there is no code generated to fill its members
17764724 return base;
17774725 }
17784726 // -----------------------------------------------------------------------------------------------------------
17924740 return base;
17934741 }
17944742 // -----------------------------------------------------------------------------------------------------------
1795 template <> size_t GenericFill<IfcHeatExchangerType>(const DB& db, const LIST& params, IfcHeatExchangerType* in)
1796 {
1797 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
1798 // this data structure is not used yet, so there is no code generated to fill its members
1799 return base;
1800 }
1801 // -----------------------------------------------------------------------------------------------------------
1802 template <> size_t GenericFill<IfcPresentationStyleAssignment>(const DB& db, const LIST& params, IfcPresentationStyleAssignment* in)
1803 {
1804 size_t base = 0;
1805 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPresentationStyleAssignment"); } do { // convert the 'Styles' argument
1806 boost::shared_ptr<const DataType> arg = params[base++];
1807 try { GenericConvert( in->Styles, arg, db ); break; }
1808 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPresentationStyleAssignment to be a `SET [1:?] OF IfcPresentationStyleSelect`")); }
1809 } while(0);
1810 return base;
1811 }
1812 // -----------------------------------------------------------------------------------------------------------
1813 template <> size_t GenericFill<IfcFlowTreatmentDeviceType>(const DB& db, const LIST& params, IfcFlowTreatmentDeviceType* in)
1814 {
1815 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElementType*>(in));
1816 // this data structure is not used yet, so there is no code generated to fill its members
1817 return base;
1818 }
1819 // -----------------------------------------------------------------------------------------------------------
1820 template <> size_t GenericFill<IfcFilterType>(const DB& db, const LIST& params, IfcFilterType* in)
1821 {
1822 size_t base = GenericFill(db,params,static_cast<IfcFlowTreatmentDeviceType*>(in));
1823 // this data structure is not used yet, so there is no code generated to fill its members
1824 return base;
1825 }
1826 // -----------------------------------------------------------------------------------------------------------
1827 template <> size_t GenericFill<IfcResource>(const DB& db, const LIST& params, IfcResource* in)
1828 {
1829 size_t base = GenericFill(db,params,static_cast<IfcObject*>(in));
1830 // this data structure is not used yet, so there is no code generated to fill its members
1831 return base;
1832 }
1833 // -----------------------------------------------------------------------------------------------------------
1834 template <> size_t GenericFill<IfcEvaporativeCoolerType>(const DB& db, const LIST& params, IfcEvaporativeCoolerType* in)
1835 {
1836 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
1837 // this data structure is not used yet, so there is no code generated to fill its members
1838 return base;
1839 }
1840 // -----------------------------------------------------------------------------------------------------------
1841 template <> size_t GenericFill<IfcOffsetCurve2D>(const DB& db, const LIST& params, IfcOffsetCurve2D* in)
1842 {
1843 size_t base = GenericFill(db,params,static_cast<IfcCurve*>(in));
1844 // this data structure is not used yet, so there is no code generated to fill its members
1845 return base;
1846 }
1847 // -----------------------------------------------------------------------------------------------------------
1848 template <> size_t GenericFill<IfcEdge>(const DB& db, const LIST& params, IfcEdge* in)
1849 {
1850 size_t base = GenericFill(db,params,static_cast<IfcTopologicalRepresentationItem*>(in));
1851 // this data structure is not used yet, so there is no code generated to fill its members
1852 return base;
1853 }
1854 // -----------------------------------------------------------------------------------------------------------
1855 template <> size_t GenericFill<IfcSubedge>(const DB& db, const LIST& params, IfcSubedge* in)
1856 {
1857 size_t base = GenericFill(db,params,static_cast<IfcEdge*>(in));
1858 // this data structure is not used yet, so there is no code generated to fill its members
1859 return base;
1860 }
1861 // -----------------------------------------------------------------------------------------------------------
1862 template <> size_t GenericFill<IfcProxy>(const DB& db, const LIST& params, IfcProxy* in)
1863 {
1864 size_t base = GenericFill(db,params,static_cast<IfcProduct*>(in));
1865 // this data structure is not used yet, so there is no code generated to fill its members
1866 return base;
1867 }
1868 // -----------------------------------------------------------------------------------------------------------
1869 template <> size_t GenericFill<IfcLine>(const DB& db, const LIST& params, IfcLine* in)
1870 {
1871 size_t base = GenericFill(db,params,static_cast<IfcCurve*>(in));
1872 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcLine"); } do { // convert the 'Pnt' argument
1873 boost::shared_ptr<const DataType> arg = params[base++];
1874 try { GenericConvert( in->Pnt, arg, db ); break; }
1875 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcLine to be a `IfcCartesianPoint`")); }
1876 } while(0);
1877 do { // convert the 'Dir' argument
1878 boost::shared_ptr<const DataType> arg = params[base++];
1879 try { GenericConvert( in->Dir, arg, db ); break; }
1880 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcLine to be a `IfcVector`")); }
1881 } while(0);
1882 return base;
1883 }
1884 // -----------------------------------------------------------------------------------------------------------
1885 template <> size_t GenericFill<IfcColumn>(const DB& db, const LIST& params, IfcColumn* in)
1886 {
1887 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
1888 // this data structure is not used yet, so there is no code generated to fill its members
1889 return base;
1890 }
1891 // -----------------------------------------------------------------------------------------------------------
1892 template <> size_t GenericFill<IfcObjectPlacement>(const DB& db, const LIST& params, IfcObjectPlacement* in)
1893 {
1894 size_t base = 0;
1895 return base;
1896 }
1897 // -----------------------------------------------------------------------------------------------------------
1898 template <> size_t GenericFill<IfcGridPlacement>(const DB& db, const LIST& params, IfcGridPlacement* in)
1899 {
1900 size_t base = GenericFill(db,params,static_cast<IfcObjectPlacement*>(in));
1901 // this data structure is not used yet, so there is no code generated to fill its members
1902 return base;
1903 }
1904 // -----------------------------------------------------------------------------------------------------------
1905 template <> size_t GenericFill<IfcDistributionControlElementType>(const DB& db, const LIST& params, IfcDistributionControlElementType* in)
1906 {
1907 size_t base = GenericFill(db,params,static_cast<IfcDistributionElementType*>(in));
1908 // this data structure is not used yet, so there is no code generated to fill its members
1909 return base;
1910 }
1911 // -----------------------------------------------------------------------------------------------------------
1912 template <> size_t GenericFill<IfcRelConnects>(const DB& db, const LIST& params, IfcRelConnects* in)
1913 {
1914 size_t base = GenericFill(db,params,static_cast<IfcRelationship*>(in));
1915 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcRelConnects"); } return base;
1916 }
1917 // -----------------------------------------------------------------------------------------------------------
1918 template <> size_t GenericFill<IfcAnnotation>(const DB& db, const LIST& params, IfcAnnotation* in)
1919 {
1920 size_t base = GenericFill(db,params,static_cast<IfcProduct*>(in));
1921 if (params.GetSize() < 7) { throw STEP::TypeError("expected 7 arguments to IfcAnnotation"); } return base;
1922 }
1923 // -----------------------------------------------------------------------------------------------------------
1924 template <> size_t GenericFill<IfcPlate>(const DB& db, const LIST& params, IfcPlate* in)
1925 {
1926 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
1927 // this data structure is not used yet, so there is no code generated to fill its members
1928 return base;
1929 }
1930 // -----------------------------------------------------------------------------------------------------------
1931 template <> size_t GenericFill<IfcSolidModel>(const DB& db, const LIST& params, IfcSolidModel* in)
4743 template <> size_t GenericFill<IfcGeometricRepresentationSubContext>(const DB& db, const LIST& params, IfcGeometricRepresentationSubContext* in)
4744 {
4745 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationContext*>(in));
4746 // this data structure is not used yet, so there is no code generated to fill its members
4747 return base;
4748 }
4749 // -----------------------------------------------------------------------------------------------------------
4750 template <> size_t GenericFill<IfcAnnotationSurfaceOccurrence>(const DB& db, const LIST& params, IfcAnnotationSurfaceOccurrence* in)
4751 {
4752 size_t base = GenericFill(db,params,static_cast<IfcAnnotationOccurrence*>(in));
4753 // this data structure is not used yet, so there is no code generated to fill its members
4754 return base;
4755 }
4756 // -----------------------------------------------------------------------------------------------------------
4757 template <> size_t GenericFill<IfcRoundedEdgeFeature>(const DB& db, const LIST& params, IfcRoundedEdgeFeature* in)
4758 {
4759 size_t base = GenericFill(db,params,static_cast<IfcEdgeFeature*>(in));
4760 // this data structure is not used yet, so there is no code generated to fill its members
4761 return base;
4762 }
4763 // -----------------------------------------------------------------------------------------------------------
4764 template <> size_t GenericFill<IfcElectricDistributionPoint>(const DB& db, const LIST& params, IfcElectricDistributionPoint* in)
4765 {
4766 size_t base = GenericFill(db,params,static_cast<IfcFlowController*>(in));
4767 // this data structure is not used yet, so there is no code generated to fill its members
4768 return base;
4769 }
4770 // -----------------------------------------------------------------------------------------------------------
4771 template <> size_t GenericFill<IfcCableCarrierSegmentType>(const DB& db, const LIST& params, IfcCableCarrierSegmentType* in)
4772 {
4773 size_t base = GenericFill(db,params,static_cast<IfcFlowSegmentType*>(in));
4774 // this data structure is not used yet, so there is no code generated to fill its members
4775 return base;
4776 }
4777 // -----------------------------------------------------------------------------------------------------------
4778 template <> size_t GenericFill<IfcWallStandardCase>(const DB& db, const LIST& params, IfcWallStandardCase* in)
4779 {
4780 size_t base = GenericFill(db,params,static_cast<IfcWall*>(in));
4781 // this data structure is not used yet, so there is no code generated to fill its members
4782 return base;
4783 }
4784 // -----------------------------------------------------------------------------------------------------------
4785 template <> size_t GenericFill<IfcCsgSolid>(const DB& db, const LIST& params, IfcCsgSolid* in)
4786 {
4787 size_t base = GenericFill(db,params,static_cast<IfcSolidModel*>(in));
4788 // this data structure is not used yet, so there is no code generated to fill its members
4789 return base;
4790 }
4791 // -----------------------------------------------------------------------------------------------------------
4792 template <> size_t GenericFill<IfcBeamType>(const DB& db, const LIST& params, IfcBeamType* in)
4793 {
4794 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
4795 // this data structure is not used yet, so there is no code generated to fill its members
4796 return base;
4797 }
4798 // -----------------------------------------------------------------------------------------------------------
4799 template <> size_t GenericFill<IfcAnnotationFillArea>(const DB& db, const LIST& params, IfcAnnotationFillArea* in)
19324800 {
19334801 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
1934 return base;
1935 }
1936 // -----------------------------------------------------------------------------------------------------------
1937 template <> size_t GenericFill<IfcManifoldSolidBrep>(const DB& db, const LIST& params, IfcManifoldSolidBrep* in)
1938 {
1939 size_t base = GenericFill(db,params,static_cast<IfcSolidModel*>(in));
1940 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcManifoldSolidBrep"); } do { // convert the 'Outer' argument
1941 boost::shared_ptr<const DataType> arg = params[base++];
1942 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcManifoldSolidBrep,1>::aux_is_derived[0]=true; break; }
1943 try { GenericConvert( in->Outer, arg, db ); break; }
1944 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcManifoldSolidBrep to be a `IfcClosedShell`")); }
1945 } while(0);
1946 return base;
1947 }
1948 // -----------------------------------------------------------------------------------------------------------
1949 template <> size_t GenericFill<IfcFlowStorageDeviceType>(const DB& db, const LIST& params, IfcFlowStorageDeviceType* in)
1950 {
1951 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElementType*>(in));
1952 // this data structure is not used yet, so there is no code generated to fill its members
1953 return base;
1954 }
1955 // -----------------------------------------------------------------------------------------------------------
1956 template <> size_t GenericFill<IfcStructuralItem>(const DB& db, const LIST& params, IfcStructuralItem* in)
1957 {
1958 size_t base = GenericFill(db,params,static_cast<IfcProduct*>(in));
1959 // this data structure is not used yet, so there is no code generated to fill its members
1960 return base;
1961 }
1962 // -----------------------------------------------------------------------------------------------------------
1963 template <> size_t GenericFill<IfcStructuralMember>(const DB& db, const LIST& params, IfcStructuralMember* in)
1964 {
1965 size_t base = GenericFill(db,params,static_cast<IfcStructuralItem*>(in));
1966 // this data structure is not used yet, so there is no code generated to fill its members
1967 return base;
1968 }
1969 // -----------------------------------------------------------------------------------------------------------
1970 template <> size_t GenericFill<IfcStructuralCurveMember>(const DB& db, const LIST& params, IfcStructuralCurveMember* in)
1971 {
1972 size_t base = GenericFill(db,params,static_cast<IfcStructuralMember*>(in));
1973 // this data structure is not used yet, so there is no code generated to fill its members
1974 return base;
1975 }
1976 // -----------------------------------------------------------------------------------------------------------
1977 template <> size_t GenericFill<IfcStructuralConnection>(const DB& db, const LIST& params, IfcStructuralConnection* in)
1978 {
1979 size_t base = GenericFill(db,params,static_cast<IfcStructuralItem*>(in));
1980 // this data structure is not used yet, so there is no code generated to fill its members
1981 return base;
1982 }
1983 // -----------------------------------------------------------------------------------------------------------
1984 template <> size_t GenericFill<IfcStructuralSurfaceConnection>(const DB& db, const LIST& params, IfcStructuralSurfaceConnection* in)
1985 {
1986 size_t base = GenericFill(db,params,static_cast<IfcStructuralConnection*>(in));
1987 // this data structure is not used yet, so there is no code generated to fill its members
1988 return base;
1989 }
1990 // -----------------------------------------------------------------------------------------------------------
1991 template <> size_t GenericFill<IfcCoilType>(const DB& db, const LIST& params, IfcCoilType* in)
1992 {
1993 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
1994 // this data structure is not used yet, so there is no code generated to fill its members
1995 return base;
1996 }
1997 // -----------------------------------------------------------------------------------------------------------
1998 template <> size_t GenericFill<IfcDuctFittingType>(const DB& db, const LIST& params, IfcDuctFittingType* in)
1999 {
2000 size_t base = GenericFill(db,params,static_cast<IfcFlowFittingType*>(in));
2001 // this data structure is not used yet, so there is no code generated to fill its members
2002 return base;
2003 }
2004 // -----------------------------------------------------------------------------------------------------------
2005 template <> size_t GenericFill<IfcStyledItem>(const DB& db, const LIST& params, IfcStyledItem* in)
2006 {
2007 size_t base = GenericFill(db,params,static_cast<IfcRepresentationItem*>(in));
2008 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcStyledItem"); } do { // convert the 'Item' argument
2009 boost::shared_ptr<const DataType> arg = params[base++];
2010 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcStyledItem,3>::aux_is_derived[0]=true; break; }
2011 if (dynamic_cast<const UNSET*>(&*arg)) break;
2012 try { GenericConvert( in->Item, arg, db ); break; }
2013 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcStyledItem to be a `IfcRepresentationItem`")); }
2014 } while(0);
2015 do { // convert the 'Styles' argument
2016 boost::shared_ptr<const DataType> arg = params[base++];
2017 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcStyledItem,3>::aux_is_derived[1]=true; break; }
2018 try { GenericConvert( in->Styles, arg, db ); break; }
2019 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcStyledItem to be a `SET [1:?] OF IfcPresentationStyleAssignment`")); }
2020 } while(0);
2021 do { // convert the 'Name' argument
2022 boost::shared_ptr<const DataType> arg = params[base++];
2023 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcStyledItem,3>::aux_is_derived[2]=true; break; }
2024 if (dynamic_cast<const UNSET*>(&*arg)) break;
2025 try { GenericConvert( in->Name, arg, db ); break; }
2026 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcStyledItem to be a `IfcLabel`")); }
2027 } while(0);
2028 return base;
2029 }
2030 // -----------------------------------------------------------------------------------------------------------
2031 template <> size_t GenericFill<IfcAnnotationOccurrence>(const DB& db, const LIST& params, IfcAnnotationOccurrence* in)
2032 {
2033 size_t base = GenericFill(db,params,static_cast<IfcStyledItem*>(in));
2034 // this data structure is not used yet, so there is no code generated to fill its members
2035 return base;
2036 }
2037 // -----------------------------------------------------------------------------------------------------------
2038 template <> size_t GenericFill<IfcAnnotationCurveOccurrence>(const DB& db, const LIST& params, IfcAnnotationCurveOccurrence* in)
4802 // this data structure is not used yet, so there is no code generated to fill its members
4803 return base;
4804 }
4805 // -----------------------------------------------------------------------------------------------------------
4806 template <> size_t GenericFill<IfcStructuralCurveMemberVarying>(const DB& db, const LIST& params, IfcStructuralCurveMemberVarying* in)
4807 {
4808 size_t base = GenericFill(db,params,static_cast<IfcStructuralCurveMember*>(in));
4809 // this data structure is not used yet, so there is no code generated to fill its members
4810 return base;
4811 }
4812 // -----------------------------------------------------------------------------------------------------------
4813 template <> size_t GenericFill<IfcPointOnSurface>(const DB& db, const LIST& params, IfcPointOnSurface* in)
4814 {
4815 size_t base = GenericFill(db,params,static_cast<IfcPoint*>(in));
4816 // this data structure is not used yet, so there is no code generated to fill its members
4817 return base;
4818 }
4819 // -----------------------------------------------------------------------------------------------------------
4820 template <> size_t GenericFill<IfcOrderAction>(const DB& db, const LIST& params, IfcOrderAction* in)
4821 {
4822 size_t base = GenericFill(db,params,static_cast<IfcTask*>(in));
4823 // this data structure is not used yet, so there is no code generated to fill its members
4824 return base;
4825 }
4826 // -----------------------------------------------------------------------------------------------------------
4827 template <> size_t GenericFill<IfcEdgeLoop>(const DB& db, const LIST& params, IfcEdgeLoop* in)
4828 {
4829 size_t base = GenericFill(db,params,static_cast<IfcLoop*>(in));
4830 // this data structure is not used yet, so there is no code generated to fill its members
4831 return base;
4832 }
4833 // -----------------------------------------------------------------------------------------------------------
4834 template <> size_t GenericFill<IfcAnnotationFillAreaOccurrence>(const DB& db, const LIST& params, IfcAnnotationFillAreaOccurrence* in)
20394835 {
20404836 size_t base = GenericFill(db,params,static_cast<IfcAnnotationOccurrence*>(in));
20414837 // this data structure is not used yet, so there is no code generated to fill its members
20424838 return base;
20434839 }
20444840 // -----------------------------------------------------------------------------------------------------------
2045 template <> size_t GenericFill<IfcDimensionCurve>(const DB& db, const LIST& params, IfcDimensionCurve* in)
4841 template <> size_t GenericFill<IfcWorkPlan>(const DB& db, const LIST& params, IfcWorkPlan* in)
4842 {
4843 size_t base = GenericFill(db,params,static_cast<IfcWorkControl*>(in));
4844 // this data structure is not used yet, so there is no code generated to fill its members
4845 return base;
4846 }
4847 // -----------------------------------------------------------------------------------------------------------
4848 template <> size_t GenericFill<IfcEllipse>(const DB& db, const LIST& params, IfcEllipse* in)
4849 {
4850 size_t base = GenericFill(db,params,static_cast<IfcConic*>(in));
4851 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcEllipse"); } do { // convert the 'SemiAxis1' argument
4852 boost::shared_ptr<const DataType> arg = params[base++];
4853 try { GenericConvert( in->SemiAxis1, arg, db ); break; }
4854 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcEllipse to be a `IfcPositiveLengthMeasure`")); }
4855 } while(0);
4856 do { // convert the 'SemiAxis2' argument
4857 boost::shared_ptr<const DataType> arg = params[base++];
4858 try { GenericConvert( in->SemiAxis2, arg, db ); break; }
4859 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcEllipse to be a `IfcPositiveLengthMeasure`")); }
4860 } while(0);
4861 return base;
4862 }
4863 // -----------------------------------------------------------------------------------------------------------
4864 template <> size_t GenericFill<IfcProductDefinitionShape>(const DB& db, const LIST& params, IfcProductDefinitionShape* in)
4865 {
4866 size_t base = GenericFill(db,params,static_cast<IfcProductRepresentation*>(in));
4867 // this data structure is not used yet, so there is no code generated to fill its members
4868 return base;
4869 }
4870 // -----------------------------------------------------------------------------------------------------------
4871 template <> size_t GenericFill<IfcProjectionCurve>(const DB& db, const LIST& params, IfcProjectionCurve* in)
20464872 {
20474873 size_t base = GenericFill(db,params,static_cast<IfcAnnotationCurveOccurrence*>(in));
20484874 // this data structure is not used yet, so there is no code generated to fill its members
20494875 return base;
20504876 }
20514877 // -----------------------------------------------------------------------------------------------------------
2052 template <> size_t GenericFill<IfcBoundedCurve>(const DB& db, const LIST& params, IfcBoundedCurve* in)
2053 {
2054 size_t base = GenericFill(db,params,static_cast<IfcCurve*>(in));
2055 return base;
2056 }
2057 // -----------------------------------------------------------------------------------------------------------
2058 template <> size_t GenericFill<IfcAxis1Placement>(const DB& db, const LIST& params, IfcAxis1Placement* in)
2059 {
2060 size_t base = GenericFill(db,params,static_cast<IfcPlacement*>(in));
2061 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcAxis1Placement"); } do { // convert the 'Axis' argument
2062 boost::shared_ptr<const DataType> arg = params[base++];
2063 if (dynamic_cast<const UNSET*>(&*arg)) break;
2064 try { GenericConvert( in->Axis, arg, db ); break; }
2065 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcAxis1Placement to be a `IfcDirection`")); }
2066 } while(0);
4878 template <> size_t GenericFill<IfcElectricalCircuit>(const DB& db, const LIST& params, IfcElectricalCircuit* in)
4879 {
4880 size_t base = GenericFill(db,params,static_cast<IfcSystem*>(in));
4881 // this data structure is not used yet, so there is no code generated to fill its members
4882 return base;
4883 }
4884 // -----------------------------------------------------------------------------------------------------------
4885 template <> size_t GenericFill<IfcRationalBezierCurve>(const DB& db, const LIST& params, IfcRationalBezierCurve* in)
4886 {
4887 size_t base = GenericFill(db,params,static_cast<IfcBezierCurve*>(in));
4888 // this data structure is not used yet, so there is no code generated to fill its members
20674889 return base;
20684890 }
20694891 // -----------------------------------------------------------------------------------------------------------
20744896 return base;
20754897 }
20764898 // -----------------------------------------------------------------------------------------------------------
2077 template <> size_t GenericFill<IfcSpatialStructureElement>(const DB& db, const LIST& params, IfcSpatialStructureElement* in)
2078 {
2079 size_t base = GenericFill(db,params,static_cast<IfcProduct*>(in));
2080 if (params.GetSize() < 9) { throw STEP::TypeError("expected 9 arguments to IfcSpatialStructureElement"); } do { // convert the 'LongName' argument
2081 boost::shared_ptr<const DataType> arg = params[base++];
2082 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcSpatialStructureElement,2>::aux_is_derived[0]=true; break; }
2083 if (dynamic_cast<const UNSET*>(&*arg)) break;
2084 try { GenericConvert( in->LongName, arg, db ); break; }
2085 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcSpatialStructureElement to be a `IfcLabel`")); }
2086 } while(0);
2087 do { // convert the 'CompositionType' argument
2088 boost::shared_ptr<const DataType> arg = params[base++];
2089 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcSpatialStructureElement,2>::aux_is_derived[1]=true; break; }
2090 try { GenericConvert( in->CompositionType, arg, db ); break; }
2091 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 8 to IfcSpatialStructureElement to be a `IfcElementCompositionEnum`")); }
2092 } while(0);
2093 return base;
2094 }
2095 // -----------------------------------------------------------------------------------------------------------
2096 template <> size_t GenericFill<IfcSpace>(const DB& db, const LIST& params, IfcSpace* in)
2097 {
2098 size_t base = GenericFill(db,params,static_cast<IfcSpatialStructureElement*>(in));
2099 if (params.GetSize() < 11) { throw STEP::TypeError("expected 11 arguments to IfcSpace"); } do { // convert the 'InteriorOrExteriorSpace' argument
2100 boost::shared_ptr<const DataType> arg = params[base++];
2101 try { GenericConvert( in->InteriorOrExteriorSpace, arg, db ); break; }
2102 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcSpace to be a `IfcInternalOrExternalEnum`")); }
2103 } while(0);
2104 do { // convert the 'ElevationWithFlooring' argument
2105 boost::shared_ptr<const DataType> arg = params[base++];
2106 if (dynamic_cast<const UNSET*>(&*arg)) break;
2107 try { GenericConvert( in->ElevationWithFlooring, arg, db ); break; }
2108 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 10 to IfcSpace to be a `IfcLengthMeasure`")); }
2109 } while(0);
2110 return base;
2111 }
2112 // -----------------------------------------------------------------------------------------------------------
2113 template <> size_t GenericFill<IfcContextDependentUnit>(const DB& db, const LIST& params, IfcContextDependentUnit* in)
2114 {
2115 size_t base = GenericFill(db,params,static_cast<IfcNamedUnit*>(in));
2116 // this data structure is not used yet, so there is no code generated to fill its members
2117 return base;
2118 }
2119 // -----------------------------------------------------------------------------------------------------------
2120 template <> size_t GenericFill<IfcCoolingTowerType>(const DB& db, const LIST& params, IfcCoolingTowerType* in)
2121 {
2122 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
2123 // this data structure is not used yet, so there is no code generated to fill its members
2124 return base;
2125 }
2126 // -----------------------------------------------------------------------------------------------------------
2127 template <> size_t GenericFill<IfcFacetedBrepWithVoids>(const DB& db, const LIST& params, IfcFacetedBrepWithVoids* in)
2128 {
2129 size_t base = GenericFill(db,params,static_cast<IfcManifoldSolidBrep*>(in));
2130 // this data structure is not used yet, so there is no code generated to fill its members
2131 return base;
2132 }
2133 // -----------------------------------------------------------------------------------------------------------
2134 template <> size_t GenericFill<IfcValveType>(const DB& db, const LIST& params, IfcValveType* in)
2135 {
2136 size_t base = GenericFill(db,params,static_cast<IfcFlowControllerType*>(in));
2137 // this data structure is not used yet, so there is no code generated to fill its members
2138 return base;
2139 }
2140 // -----------------------------------------------------------------------------------------------------------
2141 template <> size_t GenericFill<IfcSystemFurnitureElementType>(const DB& db, const LIST& params, IfcSystemFurnitureElementType* in)
2142 {
2143 size_t base = GenericFill(db,params,static_cast<IfcFurnishingElementType*>(in));
2144 // this data structure is not used yet, so there is no code generated to fill its members
2145 return base;
2146 }
2147 // -----------------------------------------------------------------------------------------------------------
2148 template <> size_t GenericFill<IfcDiscreteAccessory>(const DB& db, const LIST& params, IfcDiscreteAccessory* in)
2149 {
2150 size_t base = GenericFill(db,params,static_cast<IfcElementComponent*>(in));
2151 // this data structure is not used yet, so there is no code generated to fill its members
2152 return base;
2153 }
2154 // -----------------------------------------------------------------------------------------------------------
2155 template <> size_t GenericFill<IfcBuildingElementType>(const DB& db, const LIST& params, IfcBuildingElementType* in)
2156 {
2157 size_t base = GenericFill(db,params,static_cast<IfcElementType*>(in));
2158 // this data structure is not used yet, so there is no code generated to fill its members
2159 return base;
2160 }
2161 // -----------------------------------------------------------------------------------------------------------
2162 template <> size_t GenericFill<IfcRailingType>(const DB& db, const LIST& params, IfcRailingType* in)
2163 {
2164 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
2165 // this data structure is not used yet, so there is no code generated to fill its members
2166 return base;
2167 }
2168 // -----------------------------------------------------------------------------------------------------------
2169 template <> size_t GenericFill<IfcGasTerminalType>(const DB& db, const LIST& params, IfcGasTerminalType* in)
2170 {
2171 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
2172 // this data structure is not used yet, so there is no code generated to fill its members
2173 return base;
2174 }
2175 // -----------------------------------------------------------------------------------------------------------
2176 template <> size_t GenericFill<IfcSpaceProgram>(const DB& db, const LIST& params, IfcSpaceProgram* in)
2177 {
2178 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
2179 // this data structure is not used yet, so there is no code generated to fill its members
2180 return base;
2181 }
2182 // -----------------------------------------------------------------------------------------------------------
2183 template <> size_t GenericFill<IfcCovering>(const DB& db, const LIST& params, IfcCovering* in)
2184 {
2185 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
2186 // this data structure is not used yet, so there is no code generated to fill its members
2187 return base;
2188 }
2189 // -----------------------------------------------------------------------------------------------------------
2190 template <> size_t GenericFill<IfcPresentationStyle>(const DB& db, const LIST& params, IfcPresentationStyle* in)
2191 {
2192 size_t base = 0;
2193 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPresentationStyle"); } do { // convert the 'Name' argument
2194 boost::shared_ptr<const DataType> arg = params[base++];
2195 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcPresentationStyle,1>::aux_is_derived[0]=true; break; }
2196 if (dynamic_cast<const UNSET*>(&*arg)) break;
2197 try { GenericConvert( in->Name, arg, db ); break; }
2198 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPresentationStyle to be a `IfcLabel`")); }
2199 } while(0);
2200 return base;
2201 }
2202 // -----------------------------------------------------------------------------------------------------------
2203 template <> size_t GenericFill<IfcElectricHeaterType>(const DB& db, const LIST& params, IfcElectricHeaterType* in)
2204 {
2205 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
2206 // this data structure is not used yet, so there is no code generated to fill its members
2207 return base;
2208 }
2209 // -----------------------------------------------------------------------------------------------------------
2210 template <> size_t GenericFill<IfcBuildingStorey>(const DB& db, const LIST& params, IfcBuildingStorey* in)
2211 {
2212 size_t base = GenericFill(db,params,static_cast<IfcSpatialStructureElement*>(in));
2213 // this data structure is not used yet, so there is no code generated to fill its members
2214 return base;
2215 }
2216 // -----------------------------------------------------------------------------------------------------------
2217 template <> size_t GenericFill<IfcVertex>(const DB& db, const LIST& params, IfcVertex* in)
2218 {
2219 size_t base = GenericFill(db,params,static_cast<IfcTopologicalRepresentationItem*>(in));
2220 // this data structure is not used yet, so there is no code generated to fill its members
2221 return base;
2222 }
2223 // -----------------------------------------------------------------------------------------------------------
2224 template <> size_t GenericFill<IfcVertexPoint>(const DB& db, const LIST& params, IfcVertexPoint* in)
2225 {
2226 size_t base = GenericFill(db,params,static_cast<IfcVertex*>(in));
2227 // this data structure is not used yet, so there is no code generated to fill its members
2228 return base;
2229 }
2230 // -----------------------------------------------------------------------------------------------------------
2231 template <> size_t GenericFill<IfcFlowInstrumentType>(const DB& db, const LIST& params, IfcFlowInstrumentType* in)
2232 {
2233 size_t base = GenericFill(db,params,static_cast<IfcDistributionControlElementType*>(in));
2234 // this data structure is not used yet, so there is no code generated to fill its members
2235 return base;
2236 }
2237 // -----------------------------------------------------------------------------------------------------------
2238 template <> size_t GenericFill<IfcParameterizedProfileDef>(const DB& db, const LIST& params, IfcParameterizedProfileDef* in)
2239 {
2240 size_t base = GenericFill(db,params,static_cast<IfcProfileDef*>(in));
2241 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcParameterizedProfileDef"); } do { // convert the 'Position' argument
2242 boost::shared_ptr<const DataType> arg = params[base++];
2243 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcParameterizedProfileDef,1>::aux_is_derived[0]=true; break; }
2244 try { GenericConvert( in->Position, arg, db ); break; }
2245 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcParameterizedProfileDef to be a `IfcAxis2Placement2D`")); }
2246 } while(0);
2247 return base;
2248 }
2249 // -----------------------------------------------------------------------------------------------------------
2250 template <> size_t GenericFill<IfcUShapeProfileDef>(const DB& db, const LIST& params, IfcUShapeProfileDef* in)
2251 {
2252 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
2253 // this data structure is not used yet, so there is no code generated to fill its members
2254 return base;
2255 }
2256 // -----------------------------------------------------------------------------------------------------------
2257 template <> size_t GenericFill<IfcRamp>(const DB& db, const LIST& params, IfcRamp* in)
2258 {
2259 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
2260 // this data structure is not used yet, so there is no code generated to fill its members
2261 return base;
2262 }
2263 // -----------------------------------------------------------------------------------------------------------
2264 template <> size_t GenericFill<IfcCompositeCurve>(const DB& db, const LIST& params, IfcCompositeCurve* in)
2265 {
2266 size_t base = GenericFill(db,params,static_cast<IfcBoundedCurve*>(in));
2267 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcCompositeCurve"); } do { // convert the 'Segments' argument
2268 boost::shared_ptr<const DataType> arg = params[base++];
2269 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcCompositeCurve,2>::aux_is_derived[0]=true; break; }
2270 try { GenericConvert( in->Segments, arg, db ); break; }
2271 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcCompositeCurve to be a `LIST [1:?] OF IfcCompositeCurveSegment`")); }
2272 } while(0);
2273 do { // convert the 'SelfIntersect' argument
2274 boost::shared_ptr<const DataType> arg = params[base++];
2275 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcCompositeCurve,2>::aux_is_derived[1]=true; break; }
2276 try { GenericConvert( in->SelfIntersect, arg, db ); break; }
2277 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCompositeCurve to be a `LOGICAL`")); }
2278 } while(0);
2279 return base;
2280 }
2281 // -----------------------------------------------------------------------------------------------------------
2282 template <> size_t GenericFill<IfcStructuralCurveMemberVarying>(const DB& db, const LIST& params, IfcStructuralCurveMemberVarying* in)
2283 {
2284 size_t base = GenericFill(db,params,static_cast<IfcStructuralCurveMember*>(in));
2285 // this data structure is not used yet, so there is no code generated to fill its members
2286 return base;
2287 }
2288 // -----------------------------------------------------------------------------------------------------------
2289 template <> size_t GenericFill<IfcRampFlightType>(const DB& db, const LIST& params, IfcRampFlightType* in)
2290 {
2291 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
2292 // this data structure is not used yet, so there is no code generated to fill its members
2293 return base;
2294 }
2295 // -----------------------------------------------------------------------------------------------------------
2296 template <> size_t GenericFill<IfcDraughtingCallout>(const DB& db, const LIST& params, IfcDraughtingCallout* in)
2297 {
2298 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
2299 // this data structure is not used yet, so there is no code generated to fill its members
2300 return base;
2301 }
2302 // -----------------------------------------------------------------------------------------------------------
2303 template <> size_t GenericFill<IfcDimensionCurveDirectedCallout>(const DB& db, const LIST& params, IfcDimensionCurveDirectedCallout* in)
2304 {
2305 size_t base = GenericFill(db,params,static_cast<IfcDraughtingCallout*>(in));
2306 // this data structure is not used yet, so there is no code generated to fill its members
2307 return base;
2308 }
2309 // -----------------------------------------------------------------------------------------------------------
2310 template <> size_t GenericFill<IfcRadiusDimension>(const DB& db, const LIST& params, IfcRadiusDimension* in)
2311 {
2312 size_t base = GenericFill(db,params,static_cast<IfcDimensionCurveDirectedCallout*>(in));
2313 // this data structure is not used yet, so there is no code generated to fill its members
2314 return base;
2315 }
2316 // -----------------------------------------------------------------------------------------------------------
2317 template <> size_t GenericFill<IfcEdgeFeature>(const DB& db, const LIST& params, IfcEdgeFeature* in)
2318 {
2319 size_t base = GenericFill(db,params,static_cast<IfcFeatureElementSubtraction*>(in));
2320 // this data structure is not used yet, so there is no code generated to fill its members
2321 return base;
2322 }
2323 // -----------------------------------------------------------------------------------------------------------
2324 template <> size_t GenericFill<IfcSweptAreaSolid>(const DB& db, const LIST& params, IfcSweptAreaSolid* in)
2325 {
2326 size_t base = GenericFill(db,params,static_cast<IfcSolidModel*>(in));
2327 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcSweptAreaSolid"); } do { // convert the 'SweptArea' argument
2328 boost::shared_ptr<const DataType> arg = params[base++];
2329 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcSweptAreaSolid,2>::aux_is_derived[0]=true; break; }
2330 try { GenericConvert( in->SweptArea, arg, db ); break; }
2331 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSweptAreaSolid to be a `IfcProfileDef`")); }
2332 } while(0);
2333 do { // convert the 'Position' argument
2334 boost::shared_ptr<const DataType> arg = params[base++];
2335 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcSweptAreaSolid,2>::aux_is_derived[1]=true; break; }
2336 try { GenericConvert( in->Position, arg, db ); break; }
2337 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcSweptAreaSolid to be a `IfcAxis2Placement3D`")); }
2338 } while(0);
2339 return base;
2340 }
2341 // -----------------------------------------------------------------------------------------------------------
2342 template <> size_t GenericFill<IfcExtrudedAreaSolid>(const DB& db, const LIST& params, IfcExtrudedAreaSolid* in)
2343 {
2344 size_t base = GenericFill(db,params,static_cast<IfcSweptAreaSolid*>(in));
2345 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcExtrudedAreaSolid"); } do { // convert the 'ExtrudedDirection' argument
2346 boost::shared_ptr<const DataType> arg = params[base++];
2347 try { GenericConvert( in->ExtrudedDirection, arg, db ); break; }
2348 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcExtrudedAreaSolid to be a `IfcDirection`")); }
2349 } while(0);
2350 do { // convert the 'Depth' argument
2351 boost::shared_ptr<const DataType> arg = params[base++];
2352 try { GenericConvert( in->Depth, arg, db ); break; }
2353 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcExtrudedAreaSolid to be a `IfcPositiveLengthMeasure`")); }
2354 } while(0);
2355 return base;
2356 }
2357 // -----------------------------------------------------------------------------------------------------------
2358 template <> size_t GenericFill<IfcAnnotationTextOccurrence>(const DB& db, const LIST& params, IfcAnnotationTextOccurrence* in)
2359 {
2360 size_t base = GenericFill(db,params,static_cast<IfcAnnotationOccurrence*>(in));
2361 // this data structure is not used yet, so there is no code generated to fill its members
2362 return base;
2363 }
2364 // -----------------------------------------------------------------------------------------------------------
2365 template <> size_t GenericFill<IfcStair>(const DB& db, const LIST& params, IfcStair* in)
2366 {
2367 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
2368 // this data structure is not used yet, so there is no code generated to fill its members
2369 return base;
2370 }
2371 // -----------------------------------------------------------------------------------------------------------
2372 template <> size_t GenericFill<IfcFillAreaStyleTileSymbolWithStyle>(const DB& db, const LIST& params, IfcFillAreaStyleTileSymbolWithStyle* in)
2373 {
2374 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
2375 // this data structure is not used yet, so there is no code generated to fill its members
2376 return base;
2377 }
2378 // -----------------------------------------------------------------------------------------------------------
2379 template <> size_t GenericFill<IfcAnnotationSymbolOccurrence>(const DB& db, const LIST& params, IfcAnnotationSymbolOccurrence* in)
2380 {
2381 size_t base = GenericFill(db,params,static_cast<IfcAnnotationOccurrence*>(in));
2382 // this data structure is not used yet, so there is no code generated to fill its members
2383 return base;
2384 }
2385 // -----------------------------------------------------------------------------------------------------------
2386 template <> size_t GenericFill<IfcTerminatorSymbol>(const DB& db, const LIST& params, IfcTerminatorSymbol* in)
2387 {
2388 size_t base = GenericFill(db,params,static_cast<IfcAnnotationSymbolOccurrence*>(in));
2389 // this data structure is not used yet, so there is no code generated to fill its members
2390 return base;
2391 }
2392 // -----------------------------------------------------------------------------------------------------------
2393 template <> size_t GenericFill<IfcDimensionCurveTerminator>(const DB& db, const LIST& params, IfcDimensionCurveTerminator* in)
2394 {
2395 size_t base = GenericFill(db,params,static_cast<IfcTerminatorSymbol*>(in));
2396 // this data structure is not used yet, so there is no code generated to fill its members
2397 return base;
2398 }
2399 // -----------------------------------------------------------------------------------------------------------
2400 template <> size_t GenericFill<IfcRectangleProfileDef>(const DB& db, const LIST& params, IfcRectangleProfileDef* in)
2401 {
2402 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
2403 if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcRectangleProfileDef"); } do { // convert the 'XDim' argument
2404 boost::shared_ptr<const DataType> arg = params[base++];
2405 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRectangleProfileDef,2>::aux_is_derived[0]=true; break; }
2406 try { GenericConvert( in->XDim, arg, db ); break; }
2407 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcRectangleProfileDef to be a `IfcPositiveLengthMeasure`")); }
2408 } while(0);
2409 do { // convert the 'YDim' argument
2410 boost::shared_ptr<const DataType> arg = params[base++];
2411 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRectangleProfileDef,2>::aux_is_derived[1]=true; break; }
2412 try { GenericConvert( in->YDim, arg, db ); break; }
2413 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRectangleProfileDef to be a `IfcPositiveLengthMeasure`")); }
2414 } while(0);
2415 return base;
2416 }
2417 // -----------------------------------------------------------------------------------------------------------
2418 template <> size_t GenericFill<IfcRectangleHollowProfileDef>(const DB& db, const LIST& params, IfcRectangleHollowProfileDef* in)
2419 {
2420 size_t base = GenericFill(db,params,static_cast<IfcRectangleProfileDef*>(in));
2421 // this data structure is not used yet, so there is no code generated to fill its members
2422 return base;
2423 }
2424 // -----------------------------------------------------------------------------------------------------------
2425 template <> size_t GenericFill<IfcLocalPlacement>(const DB& db, const LIST& params, IfcLocalPlacement* in)
2426 {
2427 size_t base = GenericFill(db,params,static_cast<IfcObjectPlacement*>(in));
2428 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcLocalPlacement"); } do { // convert the 'PlacementRelTo' argument
2429 boost::shared_ptr<const DataType> arg = params[base++];
2430 if (dynamic_cast<const UNSET*>(&*arg)) break;
2431 try { GenericConvert( in->PlacementRelTo, arg, db ); break; }
2432 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcLocalPlacement to be a `IfcObjectPlacement`")); }
2433 } while(0);
2434 do { // convert the 'RelativePlacement' argument
2435 boost::shared_ptr<const DataType> arg = params[base++];
2436 try { GenericConvert( in->RelativePlacement, arg, db ); break; }
2437 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcLocalPlacement to be a `IfcAxis2Placement`")); }
2438 } while(0);
2439 return base;
2440 }
2441 // -----------------------------------------------------------------------------------------------------------
2442 template <> size_t GenericFill<IfcTask>(const DB& db, const LIST& params, IfcTask* in)
2443 {
2444 size_t base = GenericFill(db,params,static_cast<IfcProcess*>(in));
2445 // this data structure is not used yet, so there is no code generated to fill its members
2446 return base;
2447 }
2448 // -----------------------------------------------------------------------------------------------------------
2449 template <> size_t GenericFill<IfcAnnotationFillAreaOccurrence>(const DB& db, const LIST& params, IfcAnnotationFillAreaOccurrence* in)
2450 {
2451 size_t base = GenericFill(db,params,static_cast<IfcAnnotationOccurrence*>(in));
2452 // this data structure is not used yet, so there is no code generated to fill its members
2453 return base;
2454 }
2455 // -----------------------------------------------------------------------------------------------------------
2456 template <> size_t GenericFill<IfcFace>(const DB& db, const LIST& params, IfcFace* in)
2457 {
2458 size_t base = GenericFill(db,params,static_cast<IfcTopologicalRepresentationItem*>(in));
2459 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcFace"); } do { // convert the 'Bounds' argument
2460 boost::shared_ptr<const DataType> arg = params[base++];
2461 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcFace,1>::aux_is_derived[0]=true; break; }
2462 try { GenericConvert( in->Bounds, arg, db ); break; }
2463 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcFace to be a `SET [1:?] OF IfcFaceBound`")); }
2464 } while(0);
2465 return base;
2466 }
2467 // -----------------------------------------------------------------------------------------------------------
2468 template <> size_t GenericFill<IfcFlowSegmentType>(const DB& db, const LIST& params, IfcFlowSegmentType* in)
2469 {
2470 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElementType*>(in));
2471 // this data structure is not used yet, so there is no code generated to fill its members
2472 return base;
2473 }
2474 // -----------------------------------------------------------------------------------------------------------
2475 template <> size_t GenericFill<IfcDuctSegmentType>(const DB& db, const LIST& params, IfcDuctSegmentType* in)
4899 template <> size_t GenericFill<IfcPipeSegmentType>(const DB& db, const LIST& params, IfcPipeSegmentType* in)
24764900 {
24774901 size_t base = GenericFill(db,params,static_cast<IfcFlowSegmentType*>(in));
24784902 // this data structure is not used yet, so there is no code generated to fill its members
24794903 return base;
24804904 }
24814905 // -----------------------------------------------------------------------------------------------------------
2482 template <> size_t GenericFill<IfcConstructionResource>(const DB& db, const LIST& params, IfcConstructionResource* in)
2483 {
2484 size_t base = GenericFill(db,params,static_cast<IfcResource*>(in));
2485 // this data structure is not used yet, so there is no code generated to fill its members
2486 return base;
2487 }
2488 // -----------------------------------------------------------------------------------------------------------
2489 template <> size_t GenericFill<IfcConstructionEquipmentResource>(const DB& db, const LIST& params, IfcConstructionEquipmentResource* in)
2490 {
2491 size_t base = GenericFill(db,params,static_cast<IfcConstructionResource*>(in));
2492 // this data structure is not used yet, so there is no code generated to fill its members
2493 return base;
2494 }
2495 // -----------------------------------------------------------------------------------------------------------
2496 template <> size_t GenericFill<IfcSanitaryTerminalType>(const DB& db, const LIST& params, IfcSanitaryTerminalType* in)
2497 {
2498 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
2499 // this data structure is not used yet, so there is no code generated to fill its members
2500 return base;
2501 }
2502 // -----------------------------------------------------------------------------------------------------------
2503 template <> size_t GenericFill<IfcCircleProfileDef>(const DB& db, const LIST& params, IfcCircleProfileDef* in)
2504 {
2505 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
2506 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcCircleProfileDef"); } do { // convert the 'Radius' argument
2507 boost::shared_ptr<const DataType> arg = params[base++];
2508 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcCircleProfileDef,1>::aux_is_derived[0]=true; break; }
2509 try { GenericConvert( in->Radius, arg, db ); break; }
2510 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcCircleProfileDef to be a `IfcPositiveLengthMeasure`")); }
2511 } while(0);
2512 return base;
2513 }
2514 // -----------------------------------------------------------------------------------------------------------
2515 template <> size_t GenericFill<IfcStructuralReaction>(const DB& db, const LIST& params, IfcStructuralReaction* in)
2516 {
2517 size_t base = GenericFill(db,params,static_cast<IfcStructuralActivity*>(in));
2518 // this data structure is not used yet, so there is no code generated to fill its members
2519 return base;
2520 }
2521 // -----------------------------------------------------------------------------------------------------------
2522 template <> size_t GenericFill<IfcStructuralPointReaction>(const DB& db, const LIST& params, IfcStructuralPointReaction* in)
2523 {
2524 size_t base = GenericFill(db,params,static_cast<IfcStructuralReaction*>(in));
2525 // this data structure is not used yet, so there is no code generated to fill its members
2526 return base;
2527 }
2528 // -----------------------------------------------------------------------------------------------------------
2529 template <> size_t GenericFill<IfcRailing>(const DB& db, const LIST& params, IfcRailing* in)
2530 {
2531 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
2532 // this data structure is not used yet, so there is no code generated to fill its members
2533 return base;
2534 }
2535 // -----------------------------------------------------------------------------------------------------------
2536 template <> size_t GenericFill<IfcTextLiteral>(const DB& db, const LIST& params, IfcTextLiteral* in)
2537 {
2538 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
2539 // this data structure is not used yet, so there is no code generated to fill its members
2540 return base;
2541 }
2542 // -----------------------------------------------------------------------------------------------------------
2543 template <> size_t GenericFill<IfcCartesianTransformationOperator>(const DB& db, const LIST& params, IfcCartesianTransformationOperator* in)
2544 {
2545 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
2546 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcCartesianTransformationOperator"); } do { // convert the 'Axis1' argument
2547 boost::shared_ptr<const DataType> arg = params[base++];
2548 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcCartesianTransformationOperator,4>::aux_is_derived[0]=true; break; }
2549 if (dynamic_cast<const UNSET*>(&*arg)) break;
2550 try { GenericConvert( in->Axis1, arg, db ); break; }
2551 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcCartesianTransformationOperator to be a `IfcDirection`")); }
2552 } while(0);
2553 do { // convert the 'Axis2' argument
2554 boost::shared_ptr<const DataType> arg = params[base++];
2555 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcCartesianTransformationOperator,4>::aux_is_derived[1]=true; break; }
2556 if (dynamic_cast<const UNSET*>(&*arg)) break;
2557 try { GenericConvert( in->Axis2, arg, db ); break; }
2558 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCartesianTransformationOperator to be a `IfcDirection`")); }
2559 } while(0);
2560 do { // convert the 'LocalOrigin' argument
2561 boost::shared_ptr<const DataType> arg = params[base++];
2562 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcCartesianTransformationOperator,4>::aux_is_derived[2]=true; break; }
2563 try { GenericConvert( in->LocalOrigin, arg, db ); break; }
2564 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcCartesianTransformationOperator to be a `IfcCartesianPoint`")); }
2565 } while(0);
2566 do { // convert the 'Scale' argument
2567 boost::shared_ptr<const DataType> arg = params[base++];
2568 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcCartesianTransformationOperator,4>::aux_is_derived[3]=true; break; }
2569 if (dynamic_cast<const UNSET*>(&*arg)) break;
2570 try { GenericConvert( in->Scale, arg, db ); break; }
2571 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcCartesianTransformationOperator to be a `REAL`")); }
2572 } while(0);
2573 return base;
2574 }
2575 // -----------------------------------------------------------------------------------------------------------
2576 template <> size_t GenericFill<IfcLinearDimension>(const DB& db, const LIST& params, IfcLinearDimension* in)
2577 {
2578 size_t base = GenericFill(db,params,static_cast<IfcDimensionCurveDirectedCallout*>(in));
2579 // this data structure is not used yet, so there is no code generated to fill its members
2580 return base;
2581 }
2582 // -----------------------------------------------------------------------------------------------------------
2583 template <> size_t GenericFill<IfcDamperType>(const DB& db, const LIST& params, IfcDamperType* in)
2584 {
2585 size_t base = GenericFill(db,params,static_cast<IfcFlowControllerType*>(in));
2586 // this data structure is not used yet, so there is no code generated to fill its members
2587 return base;
2588 }
2589 // -----------------------------------------------------------------------------------------------------------
2590 template <> size_t GenericFill<IfcSIUnit>(const DB& db, const LIST& params, IfcSIUnit* in)
2591 {
2592 size_t base = GenericFill(db,params,static_cast<IfcNamedUnit*>(in));
2593 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcSIUnit"); } do { // convert the 'Prefix' argument
2594 boost::shared_ptr<const DataType> arg = params[base++];
2595 if (dynamic_cast<const UNSET*>(&*arg)) break;
2596 try { GenericConvert( in->Prefix, arg, db ); break; }
2597 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcSIUnit to be a `IfcSIPrefix`")); }
2598 } while(0);
2599 do { // convert the 'Name' argument
2600 boost::shared_ptr<const DataType> arg = params[base++];
2601 try { GenericConvert( in->Name, arg, db ); break; }
2602 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcSIUnit to be a `IfcSIUnitName`")); }
2603 } while(0);
2604 return base;
2605 }
2606 // -----------------------------------------------------------------------------------------------------------
2607 template <> size_t GenericFill<IfcMeasureWithUnit>(const DB& db, const LIST& params, IfcMeasureWithUnit* in)
2608 {
2609 size_t base = 0;
2610 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcMeasureWithUnit"); } do { // convert the 'ValueComponent' argument
2611 boost::shared_ptr<const DataType> arg = params[base++];
2612 try { GenericConvert( in->ValueComponent, arg, db ); break; }
2613 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcMeasureWithUnit to be a `IfcValue`")); }
2614 } while(0);
2615 do { // convert the 'UnitComponent' argument
2616 boost::shared_ptr<const DataType> arg = params[base++];
2617 try { GenericConvert( in->UnitComponent, arg, db ); break; }
2618 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcMeasureWithUnit to be a `IfcUnit`")); }
2619 } while(0);
2620 return base;
2621 }
2622 // -----------------------------------------------------------------------------------------------------------
2623 template <> size_t GenericFill<IfcDistributionElement>(const DB& db, const LIST& params, IfcDistributionElement* in)
2624 {
2625 size_t base = GenericFill(db,params,static_cast<IfcElement*>(in));
2626 // this data structure is not used yet, so there is no code generated to fill its members
2627 return base;
2628 }
2629 // -----------------------------------------------------------------------------------------------------------
2630 template <> size_t GenericFill<IfcDistributionControlElement>(const DB& db, const LIST& params, IfcDistributionControlElement* in)
2631 {
2632 size_t base = GenericFill(db,params,static_cast<IfcDistributionElement*>(in));
2633 // this data structure is not used yet, so there is no code generated to fill its members
2634 return base;
2635 }
2636 // -----------------------------------------------------------------------------------------------------------
2637 template <> size_t GenericFill<IfcTransformerType>(const DB& db, const LIST& params, IfcTransformerType* in)
2638 {
2639 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
2640 // this data structure is not used yet, so there is no code generated to fill its members
2641 return base;
2642 }
2643 // -----------------------------------------------------------------------------------------------------------
2644 template <> size_t GenericFill<IfcLaborResource>(const DB& db, const LIST& params, IfcLaborResource* in)
2645 {
2646 size_t base = GenericFill(db,params,static_cast<IfcConstructionResource*>(in));
2647 // this data structure is not used yet, so there is no code generated to fill its members
2648 return base;
2649 }
2650 // -----------------------------------------------------------------------------------------------------------
2651 template <> size_t GenericFill<IfcDerivedProfileDef>(const DB& db, const LIST& params, IfcDerivedProfileDef* in)
2652 {
2653 size_t base = GenericFill(db,params,static_cast<IfcProfileDef*>(in));
2654 // this data structure is not used yet, so there is no code generated to fill its members
2655 return base;
2656 }
2657 // -----------------------------------------------------------------------------------------------------------
2658 template <> size_t GenericFill<IfcFurnitureStandard>(const DB& db, const LIST& params, IfcFurnitureStandard* in)
2659 {
2660 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
2661 // this data structure is not used yet, so there is no code generated to fill its members
2662 return base;
2663 }
2664 // -----------------------------------------------------------------------------------------------------------
2665 template <> size_t GenericFill<IfcStairFlightType>(const DB& db, const LIST& params, IfcStairFlightType* in)
2666 {
2667 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
2668 // this data structure is not used yet, so there is no code generated to fill its members
2669 return base;
2670 }
2671 // -----------------------------------------------------------------------------------------------------------
2672 template <> size_t GenericFill<IfcWorkControl>(const DB& db, const LIST& params, IfcWorkControl* in)
2673 {
2674 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
2675 // this data structure is not used yet, so there is no code generated to fill its members
2676 return base;
2677 }
2678 // -----------------------------------------------------------------------------------------------------------
2679 template <> size_t GenericFill<IfcWorkPlan>(const DB& db, const LIST& params, IfcWorkPlan* in)
2680 {
2681 size_t base = GenericFill(db,params,static_cast<IfcWorkControl*>(in));
2682 // this data structure is not used yet, so there is no code generated to fill its members
2683 return base;
2684 }
2685 // -----------------------------------------------------------------------------------------------------------
2686 template <> size_t GenericFill<IfcCondition>(const DB& db, const LIST& params, IfcCondition* in)
2687 {
2688 size_t base = GenericFill(db,params,static_cast<IfcGroup*>(in));
2689 // this data structure is not used yet, so there is no code generated to fill its members
2690 return base;
2691 }
2692 // -----------------------------------------------------------------------------------------------------------
2693 template <> size_t GenericFill<IfcRelVoidsElement>(const DB& db, const LIST& params, IfcRelVoidsElement* in)
2694 {
2695 size_t base = GenericFill(db,params,static_cast<IfcRelConnects*>(in));
2696 if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelVoidsElement"); } do { // convert the 'RelatingBuildingElement' argument
2697 boost::shared_ptr<const DataType> arg = params[base++];
2698 try { GenericConvert( in->RelatingBuildingElement, arg, db ); break; }
2699 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelVoidsElement to be a `IfcElement`")); }
2700 } while(0);
2701 do { // convert the 'RelatedOpeningElement' argument
2702 boost::shared_ptr<const DataType> arg = params[base++];
2703 try { GenericConvert( in->RelatedOpeningElement, arg, db ); break; }
2704 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelVoidsElement to be a `IfcFeatureElementSubtraction`")); }
2705 } while(0);
2706 return base;
2707 }
2708 // -----------------------------------------------------------------------------------------------------------
2709 template <> size_t GenericFill<IfcWindow>(const DB& db, const LIST& params, IfcWindow* in)
2710 {
2711 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
2712 // this data structure is not used yet, so there is no code generated to fill its members
2713 return base;
2714 }
2715 // -----------------------------------------------------------------------------------------------------------
2716 template <> size_t GenericFill<IfcProtectiveDeviceType>(const DB& db, const LIST& params, IfcProtectiveDeviceType* in)
2717 {
2718 size_t base = GenericFill(db,params,static_cast<IfcFlowControllerType*>(in));
2719 // this data structure is not used yet, so there is no code generated to fill its members
2720 return base;
2721 }
2722 // -----------------------------------------------------------------------------------------------------------
2723 template <> size_t GenericFill<IfcJunctionBoxType>(const DB& db, const LIST& params, IfcJunctionBoxType* in)
2724 {
2725 size_t base = GenericFill(db,params,static_cast<IfcFlowFittingType*>(in));
2726 // this data structure is not used yet, so there is no code generated to fill its members
2727 return base;
2728 }
2729 // -----------------------------------------------------------------------------------------------------------
2730 template <> size_t GenericFill<IfcStructuralAnalysisModel>(const DB& db, const LIST& params, IfcStructuralAnalysisModel* in)
2731 {
2732 size_t base = GenericFill(db,params,static_cast<IfcSystem*>(in));
2733 // this data structure is not used yet, so there is no code generated to fill its members
2734 return base;
2735 }
2736 // -----------------------------------------------------------------------------------------------------------
2737 template <> size_t GenericFill<IfcAxis2Placement2D>(const DB& db, const LIST& params, IfcAxis2Placement2D* in)
2738 {
2739 size_t base = GenericFill(db,params,static_cast<IfcPlacement*>(in));
2740 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcAxis2Placement2D"); } do { // convert the 'RefDirection' argument
2741 boost::shared_ptr<const DataType> arg = params[base++];
2742 if (dynamic_cast<const UNSET*>(&*arg)) break;
2743 try { GenericConvert( in->RefDirection, arg, db ); break; }
2744 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcAxis2Placement2D to be a `IfcDirection`")); }
2745 } while(0);
2746 return base;
2747 }
2748 // -----------------------------------------------------------------------------------------------------------
2749 template <> size_t GenericFill<IfcSpaceType>(const DB& db, const LIST& params, IfcSpaceType* in)
2750 {
2751 size_t base = GenericFill(db,params,static_cast<IfcSpatialStructureElementType*>(in));
2752 // this data structure is not used yet, so there is no code generated to fill its members
2753 return base;
2754 }
2755 // -----------------------------------------------------------------------------------------------------------
2756 template <> size_t GenericFill<IfcEllipseProfileDef>(const DB& db, const LIST& params, IfcEllipseProfileDef* in)
2757 {
2758 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
2759 // this data structure is not used yet, so there is no code generated to fill its members
2760 return base;
2761 }
2762 // -----------------------------------------------------------------------------------------------------------
2763 template <> size_t GenericFill<IfcDistributionFlowElement>(const DB& db, const LIST& params, IfcDistributionFlowElement* in)
2764 {
2765 size_t base = GenericFill(db,params,static_cast<IfcDistributionElement*>(in));
2766 // this data structure is not used yet, so there is no code generated to fill its members
2767 return base;
2768 }
2769 // -----------------------------------------------------------------------------------------------------------
2770 template <> size_t GenericFill<IfcFlowMovingDevice>(const DB& db, const LIST& params, IfcFlowMovingDevice* in)
2771 {
2772 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElement*>(in));
2773 // this data structure is not used yet, so there is no code generated to fill its members
2774 return base;
2775 }
2776 // -----------------------------------------------------------------------------------------------------------
2777 template <> size_t GenericFill<IfcSurfaceStyleWithTextures>(const DB& db, const LIST& params, IfcSurfaceStyleWithTextures* in)
2778 {
2779 size_t base = 0;
2780 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcSurfaceStyleWithTextures"); } do { // convert the 'Textures' argument
2781 boost::shared_ptr<const DataType> arg = params[base++];
2782 try { GenericConvert( in->Textures, arg, db ); break; }
2783 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSurfaceStyleWithTextures to be a `LIST [1:?] OF IfcSurfaceTexture`")); }
2784 } while(0);
2785 return base;
2786 }
2787 // -----------------------------------------------------------------------------------------------------------
2788 template <> size_t GenericFill<IfcGeometricSet>(const DB& db, const LIST& params, IfcGeometricSet* in)
2789 {
2790 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
2791 // this data structure is not used yet, so there is no code generated to fill its members
2792 return base;
2793 }
2794 // -----------------------------------------------------------------------------------------------------------
2795 template <> size_t GenericFill<IfcProjectOrder>(const DB& db, const LIST& params, IfcProjectOrder* in)
2796 {
2797 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
2798 // this data structure is not used yet, so there is no code generated to fill its members
2799 return base;
2800 }
2801 // -----------------------------------------------------------------------------------------------------------
2802 template <> size_t GenericFill<IfcBSplineCurve>(const DB& db, const LIST& params, IfcBSplineCurve* in)
2803 {
2804 size_t base = GenericFill(db,params,static_cast<IfcBoundedCurve*>(in));
2805 if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcBSplineCurve"); } do { // convert the 'Degree' argument
2806 boost::shared_ptr<const DataType> arg = params[base++];
2807 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcBSplineCurve,5>::aux_is_derived[0]=true; break; }
2808 try { GenericConvert( in->Degree, arg, db ); break; }
2809 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcBSplineCurve to be a `INTEGER`")); }
2810 } while(0);
2811 do { // convert the 'ControlPointsList' argument
2812 boost::shared_ptr<const DataType> arg = params[base++];
2813 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcBSplineCurve,5>::aux_is_derived[1]=true; break; }
2814 try { GenericConvert( in->ControlPointsList, arg, db ); break; }
2815 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcBSplineCurve to be a `LIST [2:?] OF IfcCartesianPoint`")); }
2816 } while(0);
2817 do { // convert the 'CurveForm' argument
2818 boost::shared_ptr<const DataType> arg = params[base++];
2819 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcBSplineCurve,5>::aux_is_derived[2]=true; break; }
2820 try { GenericConvert( in->CurveForm, arg, db ); break; }
2821 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcBSplineCurve to be a `IfcBSplineCurveForm`")); }
2822 } while(0);
2823 do { // convert the 'ClosedCurve' argument
2824 boost::shared_ptr<const DataType> arg = params[base++];
2825 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcBSplineCurve,5>::aux_is_derived[3]=true; break; }
2826 try { GenericConvert( in->ClosedCurve, arg, db ); break; }
2827 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcBSplineCurve to be a `LOGICAL`")); }
2828 } while(0);
2829 do { // convert the 'SelfIntersect' argument
2830 boost::shared_ptr<const DataType> arg = params[base++];
2831 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcBSplineCurve,5>::aux_is_derived[4]=true; break; }
2832 try { GenericConvert( in->SelfIntersect, arg, db ); break; }
2833 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcBSplineCurve to be a `LOGICAL`")); }
2834 } while(0);
2835 return base;
2836 }
2837 // -----------------------------------------------------------------------------------------------------------
2838 template <> size_t GenericFill<IfcBezierCurve>(const DB& db, const LIST& params, IfcBezierCurve* in)
2839 {
2840 size_t base = GenericFill(db,params,static_cast<IfcBSplineCurve*>(in));
2841 // this data structure is not used yet, so there is no code generated to fill its members
2842 return base;
2843 }
2844 // -----------------------------------------------------------------------------------------------------------
2845 template <> size_t GenericFill<IfcStructuralPointConnection>(const DB& db, const LIST& params, IfcStructuralPointConnection* in)
2846 {
2847 size_t base = GenericFill(db,params,static_cast<IfcStructuralConnection*>(in));
2848 // this data structure is not used yet, so there is no code generated to fill its members
2849 return base;
2850 }
2851 // -----------------------------------------------------------------------------------------------------------
2852 template <> size_t GenericFill<IfcFlowController>(const DB& db, const LIST& params, IfcFlowController* in)
2853 {
2854 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElement*>(in));
2855 // this data structure is not used yet, so there is no code generated to fill its members
2856 return base;
2857 }
2858 // -----------------------------------------------------------------------------------------------------------
2859 template <> size_t GenericFill<IfcElectricDistributionPoint>(const DB& db, const LIST& params, IfcElectricDistributionPoint* in)
2860 {
2861 size_t base = GenericFill(db,params,static_cast<IfcFlowController*>(in));
2862 // this data structure is not used yet, so there is no code generated to fill its members
2863 return base;
2864 }
2865 // -----------------------------------------------------------------------------------------------------------
2866 template <> size_t GenericFill<IfcSite>(const DB& db, const LIST& params, IfcSite* in)
2867 {
2868 size_t base = GenericFill(db,params,static_cast<IfcSpatialStructureElement*>(in));
2869 if (params.GetSize() < 14) { throw STEP::TypeError("expected 14 arguments to IfcSite"); } do { // convert the 'RefLatitude' argument
2870 boost::shared_ptr<const DataType> arg = params[base++];
2871 if (dynamic_cast<const UNSET*>(&*arg)) break;
2872 try { GenericConvert( in->RefLatitude, arg, db ); break; }
2873 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcSite to be a `IfcCompoundPlaneAngleMeasure`")); }
2874 } while(0);
2875 do { // convert the 'RefLongitude' argument
2876 boost::shared_ptr<const DataType> arg = params[base++];
2877 if (dynamic_cast<const UNSET*>(&*arg)) break;
2878 try { GenericConvert( in->RefLongitude, arg, db ); break; }
2879 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 10 to IfcSite to be a `IfcCompoundPlaneAngleMeasure`")); }
2880 } while(0);
2881 do { // convert the 'RefElevation' argument
2882 boost::shared_ptr<const DataType> arg = params[base++];
2883 if (dynamic_cast<const UNSET*>(&*arg)) break;
2884 try { GenericConvert( in->RefElevation, arg, db ); break; }
2885 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 11 to IfcSite to be a `IfcLengthMeasure`")); }
2886 } while(0);
2887 do { // convert the 'LandTitleNumber' argument
2888 boost::shared_ptr<const DataType> arg = params[base++];
2889 if (dynamic_cast<const UNSET*>(&*arg)) break;
2890 try { GenericConvert( in->LandTitleNumber, arg, db ); break; }
2891 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 12 to IfcSite to be a `IfcLabel`")); }
2892 } while(0);
2893 do { // convert the 'SiteAddress' argument
2894 boost::shared_ptr<const DataType> arg = params[base++];
2895 if (dynamic_cast<const UNSET*>(&*arg)) break;
2896 try { GenericConvert( in->SiteAddress, arg, db ); break; }
2897 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 13 to IfcSite to be a `IfcPostalAddress`")); }
2898 } while(0);
2899 return base;
2900 }
2901 // -----------------------------------------------------------------------------------------------------------
2902 template <> size_t GenericFill<IfcOffsetCurve3D>(const DB& db, const LIST& params, IfcOffsetCurve3D* in)
2903 {
2904 size_t base = GenericFill(db,params,static_cast<IfcCurve*>(in));
2905 // this data structure is not used yet, so there is no code generated to fill its members
2906 return base;
2907 }
2908 // -----------------------------------------------------------------------------------------------------------
2909 template <> size_t GenericFill<IfcVirtualElement>(const DB& db, const LIST& params, IfcVirtualElement* in)
2910 {
2911 size_t base = GenericFill(db,params,static_cast<IfcElement*>(in));
2912 // this data structure is not used yet, so there is no code generated to fill its members
2913 return base;
2914 }
2915 // -----------------------------------------------------------------------------------------------------------
2916 template <> size_t GenericFill<IfcConstructionProductResource>(const DB& db, const LIST& params, IfcConstructionProductResource* in)
2917 {
2918 size_t base = GenericFill(db,params,static_cast<IfcConstructionResource*>(in));
2919 // this data structure is not used yet, so there is no code generated to fill its members
2920 return base;
2921 }
2922 // -----------------------------------------------------------------------------------------------------------
2923 template <> size_t GenericFill<IfcSurfaceCurveSweptAreaSolid>(const DB& db, const LIST& params, IfcSurfaceCurveSweptAreaSolid* in)
2924 {
2925 size_t base = GenericFill(db,params,static_cast<IfcSweptAreaSolid*>(in));
2926 // this data structure is not used yet, so there is no code generated to fill its members
2927 return base;
2928 }
2929 // -----------------------------------------------------------------------------------------------------------
2930 template <> size_t GenericFill<IfcCartesianTransformationOperator3D>(const DB& db, const LIST& params, IfcCartesianTransformationOperator3D* in)
2931 {
2932 size_t base = GenericFill(db,params,static_cast<IfcCartesianTransformationOperator*>(in));
2933 if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcCartesianTransformationOperator3D"); } do { // convert the 'Axis3' argument
2934 boost::shared_ptr<const DataType> arg = params[base++];
2935 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcCartesianTransformationOperator3D,1>::aux_is_derived[0]=true; break; }
2936 if (dynamic_cast<const UNSET*>(&*arg)) break;
2937 try { GenericConvert( in->Axis3, arg, db ); break; }
2938 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcCartesianTransformationOperator3D to be a `IfcDirection`")); }
2939 } while(0);
2940 return base;
2941 }
2942 // -----------------------------------------------------------------------------------------------------------
2943 template <> size_t GenericFill<IfcCartesianTransformationOperator3DnonUniform>(const DB& db, const LIST& params, IfcCartesianTransformationOperator3DnonUniform* in)
2944 {
2945 size_t base = GenericFill(db,params,static_cast<IfcCartesianTransformationOperator3D*>(in));
2946 if (params.GetSize() < 7) { throw STEP::TypeError("expected 7 arguments to IfcCartesianTransformationOperator3DnonUniform"); } do { // convert the 'Scale2' argument
2947 boost::shared_ptr<const DataType> arg = params[base++];
2948 if (dynamic_cast<const UNSET*>(&*arg)) break;
2949 try { GenericConvert( in->Scale2, arg, db ); break; }
2950 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcCartesianTransformationOperator3DnonUniform to be a `REAL`")); }
2951 } while(0);
2952 do { // convert the 'Scale3' argument
2953 boost::shared_ptr<const DataType> arg = params[base++];
2954 if (dynamic_cast<const UNSET*>(&*arg)) break;
2955 try { GenericConvert( in->Scale3, arg, db ); break; }
2956 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 6 to IfcCartesianTransformationOperator3DnonUniform to be a `REAL`")); }
2957 } while(0);
2958 return base;
2959 }
2960 // -----------------------------------------------------------------------------------------------------------
2961 template <> size_t GenericFill<IfcCrewResource>(const DB& db, const LIST& params, IfcCrewResource* in)
2962 {
2963 size_t base = GenericFill(db,params,static_cast<IfcConstructionResource*>(in));
2964 // this data structure is not used yet, so there is no code generated to fill its members
2965 return base;
2966 }
2967 // -----------------------------------------------------------------------------------------------------------
2968 template <> size_t GenericFill<IfcStructuralSurfaceMember>(const DB& db, const LIST& params, IfcStructuralSurfaceMember* in)
2969 {
2970 size_t base = GenericFill(db,params,static_cast<IfcStructuralMember*>(in));
2971 // this data structure is not used yet, so there is no code generated to fill its members
2972 return base;
2973 }
2974 // -----------------------------------------------------------------------------------------------------------
2975 template <> size_t GenericFill<Ifc2DCompositeCurve>(const DB& db, const LIST& params, Ifc2DCompositeCurve* in)
2976 {
2977 size_t base = GenericFill(db,params,static_cast<IfcCompositeCurve*>(in));
2978 // this data structure is not used yet, so there is no code generated to fill its members
2979 return base;
2980 }
2981 // -----------------------------------------------------------------------------------------------------------
2982 template <> size_t GenericFill<IfcRepresentationContext>(const DB& db, const LIST& params, IfcRepresentationContext* in)
2983 {
2984 size_t base = 0;
2985 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcRepresentationContext"); } do { // convert the 'ContextIdentifier' argument
2986 boost::shared_ptr<const DataType> arg = params[base++];
2987 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRepresentationContext,2>::aux_is_derived[0]=true; break; }
2988 if (dynamic_cast<const UNSET*>(&*arg)) break;
2989 try { GenericConvert( in->ContextIdentifier, arg, db ); break; }
2990 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcRepresentationContext to be a `IfcLabel`")); }
2991 } while(0);
2992 do { // convert the 'ContextType' argument
2993 boost::shared_ptr<const DataType> arg = params[base++];
2994 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRepresentationContext,2>::aux_is_derived[1]=true; break; }
2995 if (dynamic_cast<const UNSET*>(&*arg)) break;
2996 try { GenericConvert( in->ContextType, arg, db ); break; }
2997 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcRepresentationContext to be a `IfcLabel`")); }
2998 } while(0);
2999 return base;
3000 }
3001 // -----------------------------------------------------------------------------------------------------------
3002 template <> size_t GenericFill<IfcGeometricRepresentationContext>(const DB& db, const LIST& params, IfcGeometricRepresentationContext* in)
3003 {
3004 size_t base = GenericFill(db,params,static_cast<IfcRepresentationContext*>(in));
3005 if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcGeometricRepresentationContext"); } do { // convert the 'CoordinateSpaceDimension' argument
3006 boost::shared_ptr<const DataType> arg = params[base++];
3007 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcGeometricRepresentationContext,4>::aux_is_derived[0]=true; break; }
3008 try { GenericConvert( in->CoordinateSpaceDimension, arg, db ); break; }
3009 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcGeometricRepresentationContext to be a `IfcDimensionCount`")); }
3010 } while(0);
3011 do { // convert the 'Precision' argument
3012 boost::shared_ptr<const DataType> arg = params[base++];
3013 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcGeometricRepresentationContext,4>::aux_is_derived[1]=true; break; }
3014 if (dynamic_cast<const UNSET*>(&*arg)) break;
3015 try { GenericConvert( in->Precision, arg, db ); break; }
3016 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcGeometricRepresentationContext to be a `REAL`")); }
3017 } while(0);
3018 do { // convert the 'WorldCoordinateSystem' argument
3019 boost::shared_ptr<const DataType> arg = params[base++];
3020 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcGeometricRepresentationContext,4>::aux_is_derived[2]=true; break; }
3021 try { GenericConvert( in->WorldCoordinateSystem, arg, db ); break; }
3022 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcGeometricRepresentationContext to be a `IfcAxis2Placement`")); }
3023 } while(0);
3024 do { // convert the 'TrueNorth' argument
3025 boost::shared_ptr<const DataType> arg = params[base++];
3026 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcGeometricRepresentationContext,4>::aux_is_derived[3]=true; break; }
3027 if (dynamic_cast<const UNSET*>(&*arg)) break;
3028 try { GenericConvert( in->TrueNorth, arg, db ); break; }
3029 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcGeometricRepresentationContext to be a `IfcDirection`")); }
3030 } while(0);
3031 return base;
3032 }
3033 // -----------------------------------------------------------------------------------------------------------
3034 template <> size_t GenericFill<IfcFlowTreatmentDevice>(const DB& db, const LIST& params, IfcFlowTreatmentDevice* in)
3035 {
3036 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElement*>(in));
3037 // this data structure is not used yet, so there is no code generated to fill its members
3038 return base;
3039 }
3040 // -----------------------------------------------------------------------------------------------------------
3041 template <> size_t GenericFill<IfcRightCircularCylinder>(const DB& db, const LIST& params, IfcRightCircularCylinder* in)
3042 {
3043 size_t base = GenericFill(db,params,static_cast<IfcCsgPrimitive3D*>(in));
3044 // this data structure is not used yet, so there is no code generated to fill its members
3045 return base;
3046 }
3047 // -----------------------------------------------------------------------------------------------------------
3048 template <> size_t GenericFill<IfcWasteTerminalType>(const DB& db, const LIST& params, IfcWasteTerminalType* in)
3049 {
3050 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
3051 // this data structure is not used yet, so there is no code generated to fill its members
3052 return base;
3053 }
3054 // -----------------------------------------------------------------------------------------------------------
3055 template <> size_t GenericFill<IfcBuildingElementComponent>(const DB& db, const LIST& params, IfcBuildingElementComponent* in)
3056 {
3057 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
3058 // this data structure is not used yet, so there is no code generated to fill its members
3059 return base;
3060 }
3061 // -----------------------------------------------------------------------------------------------------------
3062 template <> size_t GenericFill<IfcBuildingElementPart>(const DB& db, const LIST& params, IfcBuildingElementPart* in)
3063 {
3064 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementComponent*>(in));
3065 // this data structure is not used yet, so there is no code generated to fill its members
3066 return base;
3067 }
3068 // -----------------------------------------------------------------------------------------------------------
3069 template <> size_t GenericFill<IfcWall>(const DB& db, const LIST& params, IfcWall* in)
3070 {
3071 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
3072 // this data structure is not used yet, so there is no code generated to fill its members
3073 return base;
3074 }
3075 // -----------------------------------------------------------------------------------------------------------
3076 template <> size_t GenericFill<IfcWallStandardCase>(const DB& db, const LIST& params, IfcWallStandardCase* in)
3077 {
3078 size_t base = GenericFill(db,params,static_cast<IfcWall*>(in));
3079 // this data structure is not used yet, so there is no code generated to fill its members
3080 return base;
3081 }
3082 // -----------------------------------------------------------------------------------------------------------
3083 template <> size_t GenericFill<IfcPath>(const DB& db, const LIST& params, IfcPath* in)
3084 {
3085 size_t base = GenericFill(db,params,static_cast<IfcTopologicalRepresentationItem*>(in));
3086 // this data structure is not used yet, so there is no code generated to fill its members
3087 return base;
3088 }
3089 // -----------------------------------------------------------------------------------------------------------
3090 template <> size_t GenericFill<IfcDefinedSymbol>(const DB& db, const LIST& params, IfcDefinedSymbol* in)
3091 {
3092 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
3093 // this data structure is not used yet, so there is no code generated to fill its members
3094 return base;
3095 }
3096 // -----------------------------------------------------------------------------------------------------------
3097 template <> size_t GenericFill<IfcStructuralSurfaceMemberVarying>(const DB& db, const LIST& params, IfcStructuralSurfaceMemberVarying* in)
3098 {
3099 size_t base = GenericFill(db,params,static_cast<IfcStructuralSurfaceMember*>(in));
3100 // this data structure is not used yet, so there is no code generated to fill its members
3101 return base;
3102 }
3103 // -----------------------------------------------------------------------------------------------------------
3104 template <> size_t GenericFill<IfcPoint>(const DB& db, const LIST& params, IfcPoint* in)
3105 {
3106 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
3107 return base;
3108 }
3109 // -----------------------------------------------------------------------------------------------------------
3110 template <> size_t GenericFill<IfcSurfaceOfRevolution>(const DB& db, const LIST& params, IfcSurfaceOfRevolution* in)
3111 {
3112 size_t base = GenericFill(db,params,static_cast<IfcSweptSurface*>(in));
3113 // this data structure is not used yet, so there is no code generated to fill its members
3114 return base;
3115 }
3116 // -----------------------------------------------------------------------------------------------------------
3117 template <> size_t GenericFill<IfcFlowTerminal>(const DB& db, const LIST& params, IfcFlowTerminal* in)
3118 {
3119 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElement*>(in));
3120 // this data structure is not used yet, so there is no code generated to fill its members
3121 return base;
3122 }
3123 // -----------------------------------------------------------------------------------------------------------
3124 template <> size_t GenericFill<IfcFurnishingElement>(const DB& db, const LIST& params, IfcFurnishingElement* in)
3125 {
3126 size_t base = GenericFill(db,params,static_cast<IfcElement*>(in));
3127 // this data structure is not used yet, so there is no code generated to fill its members
3128 return base;
3129 }
3130 // -----------------------------------------------------------------------------------------------------------
3131 template <> size_t GenericFill<IfcSurfaceStyleShading>(const DB& db, const LIST& params, IfcSurfaceStyleShading* in)
3132 {
3133 size_t base = 0;
3134 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcSurfaceStyleShading"); } do { // convert the 'SurfaceColour' argument
3135 boost::shared_ptr<const DataType> arg = params[base++];
3136 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcSurfaceStyleShading,1>::aux_is_derived[0]=true; break; }
3137 try { GenericConvert( in->SurfaceColour, arg, db ); break; }
3138 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcSurfaceStyleShading to be a `IfcColourRgb`")); }
4906 template <> size_t GenericFill<IfcTwoDirectionRepeatFactor>(const DB& db, const LIST& params, IfcTwoDirectionRepeatFactor* in)
4907 {
4908 size_t base = GenericFill(db,params,static_cast<IfcOneDirectionRepeatFactor*>(in));
4909 // this data structure is not used yet, so there is no code generated to fill its members
4910 return base;
4911 }
4912 // -----------------------------------------------------------------------------------------------------------
4913 template <> size_t GenericFill<IfcShapeRepresentation>(const DB& db, const LIST& params, IfcShapeRepresentation* in)
4914 {
4915 size_t base = GenericFill(db,params,static_cast<IfcShapeModel*>(in));
4916 // this data structure is not used yet, so there is no code generated to fill its members
4917 return base;
4918 }
4919 // -----------------------------------------------------------------------------------------------------------
4920 template <> size_t GenericFill<IfcPropertySet>(const DB& db, const LIST& params, IfcPropertySet* in)
4921 {
4922 size_t base = GenericFill(db,params,static_cast<IfcPropertySetDefinition*>(in));
4923 if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcPropertySet"); } do { // convert the 'HasProperties' argument
4924 boost::shared_ptr<const DataType> arg = params[base++];
4925 try { GenericConvert( in->HasProperties, arg, db ); break; }
4926 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcPropertySet to be a `SET [1:?] OF IfcProperty`")); }
31394927 } while(0);
31404928 return base;
31414929 }
31934981 return base;
31944982 }
31954983 // -----------------------------------------------------------------------------------------------------------
3196 template <> size_t GenericFill<IfcCircleHollowProfileDef>(const DB& db, const LIST& params, IfcCircleHollowProfileDef* in)
3197 {
3198 size_t base = GenericFill(db,params,static_cast<IfcCircleProfileDef*>(in));
3199 if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcCircleHollowProfileDef"); } do { // convert the 'WallThickness' argument
3200 boost::shared_ptr<const DataType> arg = params[base++];
3201 try { GenericConvert( in->WallThickness, arg, db ); break; }
3202 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcCircleHollowProfileDef to be a `IfcPositiveLengthMeasure`")); }
3203 } while(0);
3204 return base;
3205 }
3206 // -----------------------------------------------------------------------------------------------------------
3207 template <> size_t GenericFill<IfcFlowMovingDeviceType>(const DB& db, const LIST& params, IfcFlowMovingDeviceType* in)
3208 {
3209 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElementType*>(in));
3210 // this data structure is not used yet, so there is no code generated to fill its members
3211 return base;
3212 }
3213 // -----------------------------------------------------------------------------------------------------------
3214 template <> size_t GenericFill<IfcFanType>(const DB& db, const LIST& params, IfcFanType* in)
3215 {
3216 size_t base = GenericFill(db,params,static_cast<IfcFlowMovingDeviceType*>(in));
3217 // this data structure is not used yet, so there is no code generated to fill its members
3218 return base;
3219 }
3220 // -----------------------------------------------------------------------------------------------------------
3221 template <> size_t GenericFill<IfcStructuralPlanarActionVarying>(const DB& db, const LIST& params, IfcStructuralPlanarActionVarying* in)
3222 {
3223 size_t base = GenericFill(db,params,static_cast<IfcStructuralPlanarAction*>(in));
3224 // this data structure is not used yet, so there is no code generated to fill its members
3225 return base;
3226 }
3227 // -----------------------------------------------------------------------------------------------------------
3228 template <> size_t GenericFill<IfcProductRepresentation>(const DB& db, const LIST& params, IfcProductRepresentation* in)
3229 {
3230 size_t base = 0;
3231 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcProductRepresentation"); } do { // convert the 'Name' argument
3232 boost::shared_ptr<const DataType> arg = params[base++];
3233 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProductRepresentation,3>::aux_is_derived[0]=true; break; }
3234 if (dynamic_cast<const UNSET*>(&*arg)) break;
3235 try { GenericConvert( in->Name, arg, db ); break; }
3236 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcProductRepresentation to be a `IfcLabel`")); }
3237 } while(0);
3238 do { // convert the 'Description' argument
3239 boost::shared_ptr<const DataType> arg = params[base++];
3240 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProductRepresentation,3>::aux_is_derived[1]=true; break; }
3241 if (dynamic_cast<const UNSET*>(&*arg)) break;
3242 try { GenericConvert( in->Description, arg, db ); break; }
3243 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcProductRepresentation to be a `IfcText`")); }
3244 } while(0);
3245 do { // convert the 'Representations' argument
3246 boost::shared_ptr<const DataType> arg = params[base++];
3247 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcProductRepresentation,3>::aux_is_derived[2]=true; break; }
3248 try { GenericConvert( in->Representations, arg, db ); break; }
3249 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcProductRepresentation to be a `LIST [1:?] OF IfcRepresentation`")); }
3250 } while(0);
3251 return base;
3252 }
3253 // -----------------------------------------------------------------------------------------------------------
3254 template <> size_t GenericFill<IfcStackTerminalType>(const DB& db, const LIST& params, IfcStackTerminalType* in)
3255 {
3256 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
3257 // this data structure is not used yet, so there is no code generated to fill its members
3258 return base;
3259 }
3260 // -----------------------------------------------------------------------------------------------------------
3261 template <> size_t GenericFill<IfcReinforcingElement>(const DB& db, const LIST& params, IfcReinforcingElement* in)
3262 {
3263 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementComponent*>(in));
3264 // this data structure is not used yet, so there is no code generated to fill its members
3265 return base;
3266 }
3267 // -----------------------------------------------------------------------------------------------------------
3268 template <> size_t GenericFill<IfcReinforcingMesh>(const DB& db, const LIST& params, IfcReinforcingMesh* in)
3269 {
3270 size_t base = GenericFill(db,params,static_cast<IfcReinforcingElement*>(in));
3271 // this data structure is not used yet, so there is no code generated to fill its members
3272 return base;
3273 }
3274 // -----------------------------------------------------------------------------------------------------------
3275 template <> size_t GenericFill<IfcOrderAction>(const DB& db, const LIST& params, IfcOrderAction* in)
3276 {
3277 size_t base = GenericFill(db,params,static_cast<IfcTask*>(in));
3278 // this data structure is not used yet, so there is no code generated to fill its members
3279 return base;
3280 }
3281 // -----------------------------------------------------------------------------------------------------------
3282 template <> size_t GenericFill<IfcLightSource>(const DB& db, const LIST& params, IfcLightSource* in)
3283 {
3284 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
3285 // this data structure is not used yet, so there is no code generated to fill its members
3286 return base;
3287 }
3288 // -----------------------------------------------------------------------------------------------------------
3289 template <> size_t GenericFill<IfcLightSourceDirectional>(const DB& db, const LIST& params, IfcLightSourceDirectional* in)
3290 {
3291 size_t base = GenericFill(db,params,static_cast<IfcLightSource*>(in));
3292 // this data structure is not used yet, so there is no code generated to fill its members
3293 return base;
3294 }
3295 // -----------------------------------------------------------------------------------------------------------
3296 template <> size_t GenericFill<IfcLoop>(const DB& db, const LIST& params, IfcLoop* in)
3297 {
3298 size_t base = GenericFill(db,params,static_cast<IfcTopologicalRepresentationItem*>(in));
3299 return base;
3300 }
3301 // -----------------------------------------------------------------------------------------------------------
3302 template <> size_t GenericFill<IfcVertexLoop>(const DB& db, const LIST& params, IfcVertexLoop* in)
3303 {
3304 size_t base = GenericFill(db,params,static_cast<IfcLoop*>(in));
3305 // this data structure is not used yet, so there is no code generated to fill its members
3306 return base;
3307 }
3308 // -----------------------------------------------------------------------------------------------------------
3309 template <> size_t GenericFill<IfcChamferEdgeFeature>(const DB& db, const LIST& params, IfcChamferEdgeFeature* in)
3310 {
3311 size_t base = GenericFill(db,params,static_cast<IfcEdgeFeature*>(in));
3312 // this data structure is not used yet, so there is no code generated to fill its members
3313 return base;
3314 }
3315 // -----------------------------------------------------------------------------------------------------------
3316 template <> size_t GenericFill<IfcElementComponentType>(const DB& db, const LIST& params, IfcElementComponentType* in)
3317 {
3318 size_t base = GenericFill(db,params,static_cast<IfcElementType*>(in));
3319 // this data structure is not used yet, so there is no code generated to fill its members
3320 return base;
3321 }
3322 // -----------------------------------------------------------------------------------------------------------
3323 template <> size_t GenericFill<IfcFastenerType>(const DB& db, const LIST& params, IfcFastenerType* in)
3324 {
3325 size_t base = GenericFill(db,params,static_cast<IfcElementComponentType*>(in));
3326 // this data structure is not used yet, so there is no code generated to fill its members
3327 return base;
3328 }
3329 // -----------------------------------------------------------------------------------------------------------
3330 template <> size_t GenericFill<IfcMechanicalFastenerType>(const DB& db, const LIST& params, IfcMechanicalFastenerType* in)
3331 {
3332 size_t base = GenericFill(db,params,static_cast<IfcFastenerType*>(in));
3333 // this data structure is not used yet, so there is no code generated to fill its members
3334 return base;
3335 }
3336 // -----------------------------------------------------------------------------------------------------------
3337 template <> size_t GenericFill<IfcScheduleTimeControl>(const DB& db, const LIST& params, IfcScheduleTimeControl* in)
4984 template <> size_t GenericFill<IfcDistributionPort>(const DB& db, const LIST& params, IfcDistributionPort* in)
4985 {
4986 size_t base = GenericFill(db,params,static_cast<IfcPort*>(in));
4987 // this data structure is not used yet, so there is no code generated to fill its members
4988 return base;
4989 }
4990 // -----------------------------------------------------------------------------------------------------------
4991 template <> size_t GenericFill<IfcPipeFittingType>(const DB& db, const LIST& params, IfcPipeFittingType* in)
4992 {
4993 size_t base = GenericFill(db,params,static_cast<IfcFlowFittingType*>(in));
4994 // this data structure is not used yet, so there is no code generated to fill its members
4995 return base;
4996 }
4997 // -----------------------------------------------------------------------------------------------------------
4998 template <> size_t GenericFill<IfcTransportElement>(const DB& db, const LIST& params, IfcTransportElement* in)
4999 {
5000 size_t base = GenericFill(db,params,static_cast<IfcElement*>(in));
5001 // this data structure is not used yet, so there is no code generated to fill its members
5002 return base;
5003 }
5004 // -----------------------------------------------------------------------------------------------------------
5005 template <> size_t GenericFill<IfcAnnotationTextOccurrence>(const DB& db, const LIST& params, IfcAnnotationTextOccurrence* in)
5006 {
5007 size_t base = GenericFill(db,params,static_cast<IfcAnnotationOccurrence*>(in));
5008 // this data structure is not used yet, so there is no code generated to fill its members
5009 return base;
5010 }
5011 // -----------------------------------------------------------------------------------------------------------
5012 template <> size_t GenericFill<IfcStructuralAnalysisModel>(const DB& db, const LIST& params, IfcStructuralAnalysisModel* in)
5013 {
5014 size_t base = GenericFill(db,params,static_cast<IfcSystem*>(in));
5015 // this data structure is not used yet, so there is no code generated to fill its members
5016 return base;
5017 }
5018 // -----------------------------------------------------------------------------------------------------------
5019 template <> size_t GenericFill<IfcConditionCriterion>(const DB& db, const LIST& params, IfcConditionCriterion* in)
33385020 {
33395021 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
33405022 // this data structure is not used yet, so there is no code generated to fill its members
3341 return base;
3342 }
3343 // -----------------------------------------------------------------------------------------------------------
3344 template <> size_t GenericFill<IfcSurfaceStyle>(const DB& db, const LIST& params, IfcSurfaceStyle* in)
3345 {
3346 size_t base = GenericFill(db,params,static_cast<IfcPresentationStyle*>(in));
3347 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcSurfaceStyle"); } do { // convert the 'Side' argument
3348 boost::shared_ptr<const DataType> arg = params[base++];
3349 try { GenericConvert( in->Side, arg, db ); break; }
3350 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcSurfaceStyle to be a `IfcSurfaceSide`")); }
3351 } while(0);
3352 do { // convert the 'Styles' argument
3353 boost::shared_ptr<const DataType> arg = params[base++];
3354 try { GenericConvert( in->Styles, arg, db ); break; }
3355 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcSurfaceStyle to be a `SET [1:5] OF IfcSurfaceStyleElementSelect`")); }
3356 } while(0);
3357 return base;
3358 }
3359 // -----------------------------------------------------------------------------------------------------------
3360 template <> size_t GenericFill<IfcOpenShell>(const DB& db, const LIST& params, IfcOpenShell* in)
3361 {
3362 size_t base = GenericFill(db,params,static_cast<IfcConnectedFaceSet*>(in));
3363 // this data structure is not used yet, so there is no code generated to fill its members
3364 return base;
3365 }
3366 // -----------------------------------------------------------------------------------------------------------
3367 template <> size_t GenericFill<IfcSubContractResource>(const DB& db, const LIST& params, IfcSubContractResource* in)
3368 {
3369 size_t base = GenericFill(db,params,static_cast<IfcConstructionResource*>(in));
3370 // this data structure is not used yet, so there is no code generated to fill its members
3371 return base;
3372 }
3373 // -----------------------------------------------------------------------------------------------------------
3374 template <> size_t GenericFill<IfcSweptDiskSolid>(const DB& db, const LIST& params, IfcSweptDiskSolid* in)
3375 {
3376 size_t base = GenericFill(db,params,static_cast<IfcSolidModel*>(in));
3377 // this data structure is not used yet, so there is no code generated to fill its members
3378 return base;
3379 }
3380 // -----------------------------------------------------------------------------------------------------------
3381 template <> size_t GenericFill<IfcCompositeProfileDef>(const DB& db, const LIST& params, IfcCompositeProfileDef* in)
3382 {
3383 size_t base = GenericFill(db,params,static_cast<IfcProfileDef*>(in));
3384 // this data structure is not used yet, so there is no code generated to fill its members
3385 return base;
3386 }
3387 // -----------------------------------------------------------------------------------------------------------
3388 template <> size_t GenericFill<IfcTankType>(const DB& db, const LIST& params, IfcTankType* in)
3389 {
3390 size_t base = GenericFill(db,params,static_cast<IfcFlowStorageDeviceType*>(in));
3391 // this data structure is not used yet, so there is no code generated to fill its members
3392 return base;
3393 }
3394 // -----------------------------------------------------------------------------------------------------------
3395 template <> size_t GenericFill<IfcSphere>(const DB& db, const LIST& params, IfcSphere* in)
3396 {
3397 size_t base = GenericFill(db,params,static_cast<IfcCsgPrimitive3D*>(in));
3398 // this data structure is not used yet, so there is no code generated to fill its members
3399 return base;
3400 }
3401 // -----------------------------------------------------------------------------------------------------------
3402 template <> size_t GenericFill<IfcPolyLoop>(const DB& db, const LIST& params, IfcPolyLoop* in)
3403 {
3404 size_t base = GenericFill(db,params,static_cast<IfcLoop*>(in));
3405 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPolyLoop"); } do { // convert the 'Polygon' argument
3406 boost::shared_ptr<const DataType> arg = params[base++];
3407 try { GenericConvert( in->Polygon, arg, db ); break; }
3408 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPolyLoop to be a `LIST [3:?] OF IfcCartesianPoint`")); }
3409 } while(0);
3410 return base;
3411 }
3412 // -----------------------------------------------------------------------------------------------------------
3413 template <> size_t GenericFill<IfcCableCarrierFittingType>(const DB& db, const LIST& params, IfcCableCarrierFittingType* in)
3414 {
3415 size_t base = GenericFill(db,params,static_cast<IfcFlowFittingType*>(in));
3416 // this data structure is not used yet, so there is no code generated to fill its members
3417 return base;
3418 }
3419 // -----------------------------------------------------------------------------------------------------------
3420 template <> size_t GenericFill<IfcHumidifierType>(const DB& db, const LIST& params, IfcHumidifierType* in)
3421 {
3422 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
3423 // this data structure is not used yet, so there is no code generated to fill its members
3424 return base;
3425 }
3426 // -----------------------------------------------------------------------------------------------------------
3427 template <> size_t GenericFill<IfcPerformanceHistory>(const DB& db, const LIST& params, IfcPerformanceHistory* in)
3428 {
3429 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
3430 // this data structure is not used yet, so there is no code generated to fill its members
3431 return base;
3432 }
3433 // -----------------------------------------------------------------------------------------------------------
3434 template <> size_t GenericFill<IfcShapeModel>(const DB& db, const LIST& params, IfcShapeModel* in)
3435 {
3436 size_t base = GenericFill(db,params,static_cast<IfcRepresentation*>(in));
3437 // this data structure is not used yet, so there is no code generated to fill its members
3438 return base;
3439 }
3440 // -----------------------------------------------------------------------------------------------------------
3441 template <> size_t GenericFill<IfcTopologyRepresentation>(const DB& db, const LIST& params, IfcTopologyRepresentation* in)
3442 {
3443 size_t base = GenericFill(db,params,static_cast<IfcShapeModel*>(in));
3444 // this data structure is not used yet, so there is no code generated to fill its members
3445 return base;
3446 }
3447 // -----------------------------------------------------------------------------------------------------------
3448 template <> size_t GenericFill<IfcBuilding>(const DB& db, const LIST& params, IfcBuilding* in)
3449 {
3450 size_t base = GenericFill(db,params,static_cast<IfcSpatialStructureElement*>(in));
3451 if (params.GetSize() < 12) { throw STEP::TypeError("expected 12 arguments to IfcBuilding"); } do { // convert the 'ElevationOfRefHeight' argument
3452 boost::shared_ptr<const DataType> arg = params[base++];
3453 if (dynamic_cast<const UNSET*>(&*arg)) break;
3454 try { GenericConvert( in->ElevationOfRefHeight, arg, db ); break; }
3455 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcBuilding to be a `IfcLengthMeasure`")); }
3456 } while(0);
3457 do { // convert the 'ElevationOfTerrain' argument
3458 boost::shared_ptr<const DataType> arg = params[base++];
3459 if (dynamic_cast<const UNSET*>(&*arg)) break;
3460 try { GenericConvert( in->ElevationOfTerrain, arg, db ); break; }
3461 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 10 to IfcBuilding to be a `IfcLengthMeasure`")); }
3462 } while(0);
3463 do { // convert the 'BuildingAddress' argument
3464 boost::shared_ptr<const DataType> arg = params[base++];
3465 if (dynamic_cast<const UNSET*>(&*arg)) break;
3466 try { GenericConvert( in->BuildingAddress, arg, db ); break; }
3467 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 11 to IfcBuilding to be a `IfcPostalAddress`")); }
3468 } while(0);
3469 return base;
3470 }
3471 // -----------------------------------------------------------------------------------------------------------
3472 template <> size_t GenericFill<IfcRoundedRectangleProfileDef>(const DB& db, const LIST& params, IfcRoundedRectangleProfileDef* in)
3473 {
3474 size_t base = GenericFill(db,params,static_cast<IfcRectangleProfileDef*>(in));
3475 // this data structure is not used yet, so there is no code generated to fill its members
3476 return base;
3477 }
3478 // -----------------------------------------------------------------------------------------------------------
3479 template <> size_t GenericFill<IfcStairFlight>(const DB& db, const LIST& params, IfcStairFlight* in)
3480 {
3481 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
3482 // this data structure is not used yet, so there is no code generated to fill its members
3483 return base;
3484 }
3485 // -----------------------------------------------------------------------------------------------------------
3486 template <> size_t GenericFill<IfcDistributionChamberElement>(const DB& db, const LIST& params, IfcDistributionChamberElement* in)
3487 {
3488 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElement*>(in));
3489 // this data structure is not used yet, so there is no code generated to fill its members
3490 return base;
3491 }
3492 // -----------------------------------------------------------------------------------------------------------
3493 template <> size_t GenericFill<IfcShapeRepresentation>(const DB& db, const LIST& params, IfcShapeRepresentation* in)
3494 {
3495 size_t base = GenericFill(db,params,static_cast<IfcShapeModel*>(in));
3496 // this data structure is not used yet, so there is no code generated to fill its members
3497 return base;
3498 }
3499 // -----------------------------------------------------------------------------------------------------------
3500 template <> size_t GenericFill<IfcRampFlight>(const DB& db, const LIST& params, IfcRampFlight* in)
3501 {
3502 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
3503 // this data structure is not used yet, so there is no code generated to fill its members
3504 return base;
3505 }
3506 // -----------------------------------------------------------------------------------------------------------
3507 template <> size_t GenericFill<IfcBeamType>(const DB& db, const LIST& params, IfcBeamType* in)
3508 {
3509 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
3510 // this data structure is not used yet, so there is no code generated to fill its members
3511 return base;
3512 }
3513 // -----------------------------------------------------------------------------------------------------------
3514 template <> size_t GenericFill<IfcRelDecomposes>(const DB& db, const LIST& params, IfcRelDecomposes* in)
3515 {
3516 size_t base = GenericFill(db,params,static_cast<IfcRelationship*>(in));
3517 if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelDecomposes"); } do { // convert the 'RelatingObject' argument
3518 boost::shared_ptr<const DataType> arg = params[base++];
3519 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRelDecomposes,2>::aux_is_derived[0]=true; break; }
3520 try { GenericConvert( in->RelatingObject, arg, db ); break; }
3521 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelDecomposes to be a `IfcObjectDefinition`")); }
3522 } while(0);
3523 do { // convert the 'RelatedObjects' argument
3524 boost::shared_ptr<const DataType> arg = params[base++];
3525 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcRelDecomposes,2>::aux_is_derived[1]=true; break; }
3526 try { GenericConvert( in->RelatedObjects, arg, db ); break; }
3527 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelDecomposes to be a `SET [1:?] OF IfcObjectDefinition`")); }
3528 } while(0);
3529 return base;
3530 }
3531 // -----------------------------------------------------------------------------------------------------------
3532 template <> size_t GenericFill<IfcRoof>(const DB& db, const LIST& params, IfcRoof* in)
3533 {
3534 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
3535 // this data structure is not used yet, so there is no code generated to fill its members
3536 return base;
3537 }
3538 // -----------------------------------------------------------------------------------------------------------
3539 template <> size_t GenericFill<IfcFooting>(const DB& db, const LIST& params, IfcFooting* in)
3540 {
3541 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
3542 // this data structure is not used yet, so there is no code generated to fill its members
3543 return base;
3544 }
3545 // -----------------------------------------------------------------------------------------------------------
3546 template <> size_t GenericFill<IfcLightSourceAmbient>(const DB& db, const LIST& params, IfcLightSourceAmbient* in)
3547 {
3548 size_t base = GenericFill(db,params,static_cast<IfcLightSource*>(in));
3549 // this data structure is not used yet, so there is no code generated to fill its members
3550 return base;
3551 }
3552 // -----------------------------------------------------------------------------------------------------------
3553 template <> size_t GenericFill<IfcWindowStyle>(const DB& db, const LIST& params, IfcWindowStyle* in)
3554 {
3555 size_t base = GenericFill(db,params,static_cast<IfcTypeProduct*>(in));
3556 // this data structure is not used yet, so there is no code generated to fill its members
3557 return base;
3558 }
3559 // -----------------------------------------------------------------------------------------------------------
3560 template <> size_t GenericFill<IfcBuildingElementProxyType>(const DB& db, const LIST& params, IfcBuildingElementProxyType* in)
3561 {
3562 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
3563 // this data structure is not used yet, so there is no code generated to fill its members
3564 return base;
3565 }
3566 // -----------------------------------------------------------------------------------------------------------
3567 template <> size_t GenericFill<IfcAxis2Placement3D>(const DB& db, const LIST& params, IfcAxis2Placement3D* in)
3568 {
3569 size_t base = GenericFill(db,params,static_cast<IfcPlacement*>(in));
3570 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcAxis2Placement3D"); } do { // convert the 'Axis' argument
3571 boost::shared_ptr<const DataType> arg = params[base++];
3572 if (dynamic_cast<const UNSET*>(&*arg)) break;
3573 try { GenericConvert( in->Axis, arg, db ); break; }
3574 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcAxis2Placement3D to be a `IfcDirection`")); }
3575 } while(0);
3576 do { // convert the 'RefDirection' argument
3577 boost::shared_ptr<const DataType> arg = params[base++];
3578 if (dynamic_cast<const UNSET*>(&*arg)) break;
3579 try { GenericConvert( in->RefDirection, arg, db ); break; }
3580 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcAxis2Placement3D to be a `IfcDirection`")); }
3581 } while(0);
3582 return base;
3583 }
3584 // -----------------------------------------------------------------------------------------------------------
3585 template <> size_t GenericFill<IfcEdgeCurve>(const DB& db, const LIST& params, IfcEdgeCurve* in)
3586 {
3587 size_t base = GenericFill(db,params,static_cast<IfcEdge*>(in));
3588 // this data structure is not used yet, so there is no code generated to fill its members
3589 return base;
3590 }
3591 // -----------------------------------------------------------------------------------------------------------
3592 template <> size_t GenericFill<IfcClosedShell>(const DB& db, const LIST& params, IfcClosedShell* in)
3593 {
3594 size_t base = GenericFill(db,params,static_cast<IfcConnectedFaceSet*>(in));
3595 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcClosedShell"); } return base;
3596 }
3597 // -----------------------------------------------------------------------------------------------------------
3598 template <> size_t GenericFill<IfcTendonAnchor>(const DB& db, const LIST& params, IfcTendonAnchor* in)
3599 {
3600 size_t base = GenericFill(db,params,static_cast<IfcReinforcingElement*>(in));
3601 // this data structure is not used yet, so there is no code generated to fill its members
3602 return base;
3603 }
3604 // -----------------------------------------------------------------------------------------------------------
3605 template <> size_t GenericFill<IfcCondenserType>(const DB& db, const LIST& params, IfcCondenserType* in)
3606 {
3607 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
3608 // this data structure is not used yet, so there is no code generated to fill its members
3609 return base;
3610 }
3611 // -----------------------------------------------------------------------------------------------------------
3612 template <> size_t GenericFill<IfcPipeSegmentType>(const DB& db, const LIST& params, IfcPipeSegmentType* in)
3613 {
3614 size_t base = GenericFill(db,params,static_cast<IfcFlowSegmentType*>(in));
3615 // this data structure is not used yet, so there is no code generated to fill its members
3616 return base;
3617 }
3618 // -----------------------------------------------------------------------------------------------------------
3619 template <> size_t GenericFill<IfcPointOnSurface>(const DB& db, const LIST& params, IfcPointOnSurface* in)
3620 {
3621 size_t base = GenericFill(db,params,static_cast<IfcPoint*>(in));
3622 // this data structure is not used yet, so there is no code generated to fill its members
3623 return base;
3624 }
3625 // -----------------------------------------------------------------------------------------------------------
3626 template <> size_t GenericFill<IfcAsset>(const DB& db, const LIST& params, IfcAsset* in)
3627 {
3628 size_t base = GenericFill(db,params,static_cast<IfcGroup*>(in));
3629 // this data structure is not used yet, so there is no code generated to fill its members
3630 return base;
3631 }
3632 // -----------------------------------------------------------------------------------------------------------
3633 template <> size_t GenericFill<IfcLightSourcePositional>(const DB& db, const LIST& params, IfcLightSourcePositional* in)
3634 {
3635 size_t base = GenericFill(db,params,static_cast<IfcLightSource*>(in));
3636 // this data structure is not used yet, so there is no code generated to fill its members
3637 return base;
3638 }
3639 // -----------------------------------------------------------------------------------------------------------
3640 template <> size_t GenericFill<IfcProjectionCurve>(const DB& db, const LIST& params, IfcProjectionCurve* in)
3641 {
3642 size_t base = GenericFill(db,params,static_cast<IfcAnnotationCurveOccurrence*>(in));
3643 // this data structure is not used yet, so there is no code generated to fill its members
3644 return base;
3645 }
3646 // -----------------------------------------------------------------------------------------------------------
3647 template <> size_t GenericFill<IfcFillAreaStyleTiles>(const DB& db, const LIST& params, IfcFillAreaStyleTiles* in)
3648 {
3649 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
3650 // this data structure is not used yet, so there is no code generated to fill its members
3651 return base;
3652 }
3653 // -----------------------------------------------------------------------------------------------------------
3654 template <> size_t GenericFill<IfcRelFillsElement>(const DB& db, const LIST& params, IfcRelFillsElement* in)
3655 {
3656 size_t base = GenericFill(db,params,static_cast<IfcRelConnects*>(in));
3657 if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelFillsElement"); } do { // convert the 'RelatingOpeningElement' argument
3658 boost::shared_ptr<const DataType> arg = params[base++];
3659 try { GenericConvert( in->RelatingOpeningElement, arg, db ); break; }
3660 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelFillsElement to be a `IfcOpeningElement`")); }
3661 } while(0);
3662 do { // convert the 'RelatedBuildingElement' argument
3663 boost::shared_ptr<const DataType> arg = params[base++];
3664 try { GenericConvert( in->RelatedBuildingElement, arg, db ); break; }
3665 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelFillsElement to be a `IfcElement`")); }
3666 } while(0);
3667 return base;
3668 }
3669 // -----------------------------------------------------------------------------------------------------------
3670 template <> size_t GenericFill<IfcElectricMotorType>(const DB& db, const LIST& params, IfcElectricMotorType* in)
3671 {
3672 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
3673 // this data structure is not used yet, so there is no code generated to fill its members
3674 return base;
3675 }
3676 // -----------------------------------------------------------------------------------------------------------
3677 template <> size_t GenericFill<IfcTendon>(const DB& db, const LIST& params, IfcTendon* in)
3678 {
3679 size_t base = GenericFill(db,params,static_cast<IfcReinforcingElement*>(in));
3680 // this data structure is not used yet, so there is no code generated to fill its members
3681 return base;
3682 }
3683 // -----------------------------------------------------------------------------------------------------------
3684 template <> size_t GenericFill<IfcDistributionChamberElementType>(const DB& db, const LIST& params, IfcDistributionChamberElementType* in)
3685 {
3686 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElementType*>(in));
3687 // this data structure is not used yet, so there is no code generated to fill its members
3688 return base;
3689 }
3690 // -----------------------------------------------------------------------------------------------------------
3691 template <> size_t GenericFill<IfcMemberType>(const DB& db, const LIST& params, IfcMemberType* in)
3692 {
3693 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
3694 // this data structure is not used yet, so there is no code generated to fill its members
3695 return base;
3696 }
3697 // -----------------------------------------------------------------------------------------------------------
3698 template <> size_t GenericFill<IfcStructuralLinearAction>(const DB& db, const LIST& params, IfcStructuralLinearAction* in)
3699 {
3700 size_t base = GenericFill(db,params,static_cast<IfcStructuralAction*>(in));
3701 // this data structure is not used yet, so there is no code generated to fill its members
3702 return base;
3703 }
3704 // -----------------------------------------------------------------------------------------------------------
3705 template <> size_t GenericFill<IfcStructuralLinearActionVarying>(const DB& db, const LIST& params, IfcStructuralLinearActionVarying* in)
3706 {
3707 size_t base = GenericFill(db,params,static_cast<IfcStructuralLinearAction*>(in));
3708 // this data structure is not used yet, so there is no code generated to fill its members
3709 return base;
3710 }
3711 // -----------------------------------------------------------------------------------------------------------
3712 template <> size_t GenericFill<IfcProductDefinitionShape>(const DB& db, const LIST& params, IfcProductDefinitionShape* in)
3713 {
3714 size_t base = GenericFill(db,params,static_cast<IfcProductRepresentation*>(in));
3715 // this data structure is not used yet, so there is no code generated to fill its members
3716 return base;
3717 }
3718 // -----------------------------------------------------------------------------------------------------------
3719 template <> size_t GenericFill<IfcFastener>(const DB& db, const LIST& params, IfcFastener* in)
3720 {
3721 size_t base = GenericFill(db,params,static_cast<IfcElementComponent*>(in));
3722 // this data structure is not used yet, so there is no code generated to fill its members
3723 return base;
3724 }
3725 // -----------------------------------------------------------------------------------------------------------
3726 template <> size_t GenericFill<IfcMechanicalFastener>(const DB& db, const LIST& params, IfcMechanicalFastener* in)
3727 {
3728 size_t base = GenericFill(db,params,static_cast<IfcFastener*>(in));
3729 // this data structure is not used yet, so there is no code generated to fill its members
3730 return base;
3731 }
3732 // -----------------------------------------------------------------------------------------------------------
3733 template <> size_t GenericFill<IfcEvaporatorType>(const DB& db, const LIST& params, IfcEvaporatorType* in)
3734 {
3735 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
3736 // this data structure is not used yet, so there is no code generated to fill its members
3737 return base;
3738 }
3739 // -----------------------------------------------------------------------------------------------------------
3740 template <> size_t GenericFill<IfcDiscreteAccessoryType>(const DB& db, const LIST& params, IfcDiscreteAccessoryType* in)
3741 {
3742 size_t base = GenericFill(db,params,static_cast<IfcElementComponentType*>(in));
3743 // this data structure is not used yet, so there is no code generated to fill its members
3744 return base;
3745 }
3746 // -----------------------------------------------------------------------------------------------------------
3747 template <> size_t GenericFill<IfcStructuralCurveConnection>(const DB& db, const LIST& params, IfcStructuralCurveConnection* in)
3748 {
3749 size_t base = GenericFill(db,params,static_cast<IfcStructuralConnection*>(in));
3750 // this data structure is not used yet, so there is no code generated to fill its members
3751 return base;
3752 }
3753 // -----------------------------------------------------------------------------------------------------------
3754 template <> size_t GenericFill<IfcProjectionElement>(const DB& db, const LIST& params, IfcProjectionElement* in)
3755 {
3756 size_t base = GenericFill(db,params,static_cast<IfcFeatureElementAddition*>(in));
3757 // this data structure is not used yet, so there is no code generated to fill its members
3758 return base;
3759 }
3760 // -----------------------------------------------------------------------------------------------------------
3761 template <> size_t GenericFill<IfcCoveringType>(const DB& db, const LIST& params, IfcCoveringType* in)
3762 {
3763 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
3764 // this data structure is not used yet, so there is no code generated to fill its members
3765 return base;
3766 }
3767 // -----------------------------------------------------------------------------------------------------------
3768 template <> size_t GenericFill<IfcPumpType>(const DB& db, const LIST& params, IfcPumpType* in)
3769 {
3770 size_t base = GenericFill(db,params,static_cast<IfcFlowMovingDeviceType*>(in));
3771 // this data structure is not used yet, so there is no code generated to fill its members
3772 return base;
3773 }
3774 // -----------------------------------------------------------------------------------------------------------
3775 template <> size_t GenericFill<IfcPile>(const DB& db, const LIST& params, IfcPile* in)
3776 {
3777 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
3778 // this data structure is not used yet, so there is no code generated to fill its members
3779 return base;
3780 }
3781 // -----------------------------------------------------------------------------------------------------------
3782 template <> size_t GenericFill<IfcUnitAssignment>(const DB& db, const LIST& params, IfcUnitAssignment* in)
3783 {
3784 size_t base = 0;
3785 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcUnitAssignment"); } do { // convert the 'Units' argument
3786 boost::shared_ptr<const DataType> arg = params[base++];
3787 try { GenericConvert( in->Units, arg, db ); break; }
3788 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcUnitAssignment to be a `SET [1:?] OF IfcUnit`")); }
3789 } while(0);
3790 return base;
3791 }
3792 // -----------------------------------------------------------------------------------------------------------
3793 template <> size_t GenericFill<IfcBoundingBox>(const DB& db, const LIST& params, IfcBoundingBox* in)
3794 {
3795 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
3796 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcBoundingBox"); } do { // convert the 'Corner' argument
3797 boost::shared_ptr<const DataType> arg = params[base++];
3798 try { GenericConvert( in->Corner, arg, db ); break; }
3799 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcBoundingBox to be a `IfcCartesianPoint`")); }
3800 } while(0);
3801 do { // convert the 'XDim' argument
3802 boost::shared_ptr<const DataType> arg = params[base++];
3803 try { GenericConvert( in->XDim, arg, db ); break; }
3804 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcBoundingBox to be a `IfcPositiveLengthMeasure`")); }
3805 } while(0);
3806 do { // convert the 'YDim' argument
3807 boost::shared_ptr<const DataType> arg = params[base++];
3808 try { GenericConvert( in->YDim, arg, db ); break; }
3809 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcBoundingBox to be a `IfcPositiveLengthMeasure`")); }
3810 } while(0);
3811 do { // convert the 'ZDim' argument
3812 boost::shared_ptr<const DataType> arg = params[base++];
3813 try { GenericConvert( in->ZDim, arg, db ); break; }
3814 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcBoundingBox to be a `IfcPositiveLengthMeasure`")); }
3815 } while(0);
3816 return base;
3817 }
3818 // -----------------------------------------------------------------------------------------------------------
3819 template <> size_t GenericFill<IfcShellBasedSurfaceModel>(const DB& db, const LIST& params, IfcShellBasedSurfaceModel* in)
3820 {
3821 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
3822 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcShellBasedSurfaceModel"); } do { // convert the 'SbsmBoundary' argument
3823 boost::shared_ptr<const DataType> arg = params[base++];
3824 try { GenericConvert( in->SbsmBoundary, arg, db ); break; }
3825 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcShellBasedSurfaceModel to be a `SET [1:?] OF IfcShell`")); }
3826 } while(0);
3827 return base;
3828 }
3829 // -----------------------------------------------------------------------------------------------------------
3830 template <> size_t GenericFill<IfcFacetedBrep>(const DB& db, const LIST& params, IfcFacetedBrep* in)
3831 {
3832 size_t base = GenericFill(db,params,static_cast<IfcManifoldSolidBrep*>(in));
3833 // this data structure is not used yet, so there is no code generated to fill its members
3834 return base;
3835 }
3836 // -----------------------------------------------------------------------------------------------------------
3837 template <> size_t GenericFill<IfcTextLiteralWithExtent>(const DB& db, const LIST& params, IfcTextLiteralWithExtent* in)
3838 {
3839 size_t base = GenericFill(db,params,static_cast<IfcTextLiteral*>(in));
3840 // this data structure is not used yet, so there is no code generated to fill its members
3841 return base;
3842 }
3843 // -----------------------------------------------------------------------------------------------------------
3844 template <> size_t GenericFill<IfcElectricApplianceType>(const DB& db, const LIST& params, IfcElectricApplianceType* in)
3845 {
3846 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
3847 // this data structure is not used yet, so there is no code generated to fill its members
3848 return base;
3849 }
3850 // -----------------------------------------------------------------------------------------------------------
3851 template <> size_t GenericFill<IfcTrapeziumProfileDef>(const DB& db, const LIST& params, IfcTrapeziumProfileDef* in)
3852 {
3853 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
3854 // this data structure is not used yet, so there is no code generated to fill its members
3855 return base;
3856 }
3857 // -----------------------------------------------------------------------------------------------------------
3858 template <> size_t GenericFill<IfcRelContainedInSpatialStructure>(const DB& db, const LIST& params, IfcRelContainedInSpatialStructure* in)
3859 {
3860 size_t base = GenericFill(db,params,static_cast<IfcRelConnects*>(in));
3861 if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelContainedInSpatialStructure"); } do { // convert the 'RelatedElements' argument
3862 boost::shared_ptr<const DataType> arg = params[base++];
3863 try { GenericConvert( in->RelatedElements, arg, db ); break; }
3864 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcRelContainedInSpatialStructure to be a `SET [1:?] OF IfcProduct`")); }
3865 } while(0);
3866 do { // convert the 'RelatingStructure' argument
3867 boost::shared_ptr<const DataType> arg = params[base++];
3868 try { GenericConvert( in->RelatingStructure, arg, db ); break; }
3869 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcRelContainedInSpatialStructure to be a `IfcSpatialStructureElement`")); }
3870 } while(0);
3871 return base;
3872 }
3873 // -----------------------------------------------------------------------------------------------------------
3874 template <> size_t GenericFill<IfcEdgeLoop>(const DB& db, const LIST& params, IfcEdgeLoop* in)
3875 {
3876 size_t base = GenericFill(db,params,static_cast<IfcLoop*>(in));
3877 // this data structure is not used yet, so there is no code generated to fill its members
3878 return base;
3879 }
3880 // -----------------------------------------------------------------------------------------------------------
3881 template <> size_t GenericFill<IfcProject>(const DB& db, const LIST& params, IfcProject* in)
3882 {
3883 size_t base = GenericFill(db,params,static_cast<IfcObject*>(in));
3884 if (params.GetSize() < 9) { throw STEP::TypeError("expected 9 arguments to IfcProject"); } do { // convert the 'LongName' argument
3885 boost::shared_ptr<const DataType> arg = params[base++];
3886 if (dynamic_cast<const UNSET*>(&*arg)) break;
3887 try { GenericConvert( in->LongName, arg, db ); break; }
3888 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 5 to IfcProject to be a `IfcLabel`")); }
3889 } while(0);
3890 do { // convert the 'Phase' argument
3891 boost::shared_ptr<const DataType> arg = params[base++];
3892 if (dynamic_cast<const UNSET*>(&*arg)) break;
3893 try { GenericConvert( in->Phase, arg, db ); break; }
3894 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 6 to IfcProject to be a `IfcLabel`")); }
3895 } while(0);
3896 do { // convert the 'RepresentationContexts' argument
3897 boost::shared_ptr<const DataType> arg = params[base++];
3898 try { GenericConvert( in->RepresentationContexts, arg, db ); break; }
3899 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 7 to IfcProject to be a `SET [1:?] OF IfcRepresentationContext`")); }
3900 } while(0);
3901 do { // convert the 'UnitsInContext' argument
3902 boost::shared_ptr<const DataType> arg = params[base++];
3903 try { GenericConvert( in->UnitsInContext, arg, db ); break; }
3904 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 8 to IfcProject to be a `IfcUnitAssignment`")); }
3905 } while(0);
3906 return base;
3907 }
3908 // -----------------------------------------------------------------------------------------------------------
3909 template <> size_t GenericFill<IfcCartesianPoint>(const DB& db, const LIST& params, IfcCartesianPoint* in)
3910 {
3911 size_t base = GenericFill(db,params,static_cast<IfcPoint*>(in));
3912 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcCartesianPoint"); } do { // convert the 'Coordinates' argument
3913 boost::shared_ptr<const DataType> arg = params[base++];
3914 try { GenericConvert( in->Coordinates, arg, db ); break; }
3915 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcCartesianPoint to be a `LIST [1:3] OF IfcLengthMeasure`")); }
3916 } while(0);
3917 return base;
3918 }
3919 // -----------------------------------------------------------------------------------------------------------
3920 template <> size_t GenericFill<IfcCurveBoundedPlane>(const DB& db, const LIST& params, IfcCurveBoundedPlane* in)
3921 {
3922 size_t base = GenericFill(db,params,static_cast<IfcBoundedSurface*>(in));
3923 // this data structure is not used yet, so there is no code generated to fill its members
3924 return base;
3925 }
3926 // -----------------------------------------------------------------------------------------------------------
3927 template <> size_t GenericFill<IfcWallType>(const DB& db, const LIST& params, IfcWallType* in)
3928 {
3929 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
3930 // this data structure is not used yet, so there is no code generated to fill its members
3931 return base;
3932 }
3933 // -----------------------------------------------------------------------------------------------------------
3934 template <> size_t GenericFill<IfcFillAreaStyleHatching>(const DB& db, const LIST& params, IfcFillAreaStyleHatching* in)
3935 {
3936 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
3937 // this data structure is not used yet, so there is no code generated to fill its members
3938 return base;
3939 }
3940 // -----------------------------------------------------------------------------------------------------------
3941 template <> size_t GenericFill<IfcEquipmentStandard>(const DB& db, const LIST& params, IfcEquipmentStandard* in)
3942 {
3943 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
3944 // this data structure is not used yet, so there is no code generated to fill its members
3945 return base;
3946 }
3947 // -----------------------------------------------------------------------------------------------------------
3948 template <> size_t GenericFill<IfcDiameterDimension>(const DB& db, const LIST& params, IfcDiameterDimension* in)
3949 {
3950 size_t base = GenericFill(db,params,static_cast<IfcDimensionCurveDirectedCallout*>(in));
3951 // this data structure is not used yet, so there is no code generated to fill its members
3952 return base;
3953 }
3954 // -----------------------------------------------------------------------------------------------------------
3955 template <> size_t GenericFill<IfcStructuralLoadGroup>(const DB& db, const LIST& params, IfcStructuralLoadGroup* in)
3956 {
3957 size_t base = GenericFill(db,params,static_cast<IfcGroup*>(in));
3958 // this data structure is not used yet, so there is no code generated to fill its members
3959 return base;
3960 }
3961 // -----------------------------------------------------------------------------------------------------------
3962 template <> size_t GenericFill<IfcConstructionMaterialResource>(const DB& db, const LIST& params, IfcConstructionMaterialResource* in)
3963 {
3964 size_t base = GenericFill(db,params,static_cast<IfcConstructionResource*>(in));
3965 // this data structure is not used yet, so there is no code generated to fill its members
3966 return base;
3967 }
3968 // -----------------------------------------------------------------------------------------------------------
3969 template <> size_t GenericFill<IfcRelAggregates>(const DB& db, const LIST& params, IfcRelAggregates* in)
3970 {
3971 size_t base = GenericFill(db,params,static_cast<IfcRelDecomposes*>(in));
3972 if (params.GetSize() < 6) { throw STEP::TypeError("expected 6 arguments to IfcRelAggregates"); } return base;
3973 }
3974 // -----------------------------------------------------------------------------------------------------------
3975 template <> size_t GenericFill<IfcBoilerType>(const DB& db, const LIST& params, IfcBoilerType* in)
3976 {
3977 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
3978 // this data structure is not used yet, so there is no code generated to fill its members
3979 return base;
3980 }
3981 // -----------------------------------------------------------------------------------------------------------
3982 template <> size_t GenericFill<IfcColourSpecification>(const DB& db, const LIST& params, IfcColourSpecification* in)
3983 {
3984 size_t base = 0;
3985 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcColourSpecification"); } do { // convert the 'Name' argument
3986 boost::shared_ptr<const DataType> arg = params[base++];
3987 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcColourSpecification,1>::aux_is_derived[0]=true; break; }
3988 if (dynamic_cast<const UNSET*>(&*arg)) break;
3989 try { GenericConvert( in->Name, arg, db ); break; }
3990 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcColourSpecification to be a `IfcLabel`")); }
3991 } while(0);
3992 return base;
3993 }
3994 // -----------------------------------------------------------------------------------------------------------
3995 template <> size_t GenericFill<IfcColourRgb>(const DB& db, const LIST& params, IfcColourRgb* in)
3996 {
3997 size_t base = GenericFill(db,params,static_cast<IfcColourSpecification*>(in));
3998 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcColourRgb"); } do { // convert the 'Red' argument
3999 boost::shared_ptr<const DataType> arg = params[base++];
4000 try { GenericConvert( in->Red, arg, db ); break; }
4001 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcColourRgb to be a `IfcNormalisedRatioMeasure`")); }
4002 } while(0);
4003 do { // convert the 'Green' argument
4004 boost::shared_ptr<const DataType> arg = params[base++];
4005 try { GenericConvert( in->Green, arg, db ); break; }
4006 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcColourRgb to be a `IfcNormalisedRatioMeasure`")); }
4007 } while(0);
4008 do { // convert the 'Blue' argument
4009 boost::shared_ptr<const DataType> arg = params[base++];
4010 try { GenericConvert( in->Blue, arg, db ); break; }
4011 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcColourRgb to be a `IfcNormalisedRatioMeasure`")); }
4012 } while(0);
4013 return base;
4014 }
4015 // -----------------------------------------------------------------------------------------------------------
4016 template <> size_t GenericFill<IfcDoorStyle>(const DB& db, const LIST& params, IfcDoorStyle* in)
4017 {
4018 size_t base = GenericFill(db,params,static_cast<IfcTypeProduct*>(in));
4019 // this data structure is not used yet, so there is no code generated to fill its members
4020 return base;
4021 }
4022 // -----------------------------------------------------------------------------------------------------------
4023 template <> size_t GenericFill<IfcDuctSilencerType>(const DB& db, const LIST& params, IfcDuctSilencerType* in)
4024 {
4025 size_t base = GenericFill(db,params,static_cast<IfcFlowTreatmentDeviceType*>(in));
4026 // this data structure is not used yet, so there is no code generated to fill its members
4027 return base;
4028 }
4029 // -----------------------------------------------------------------------------------------------------------
4030 template <> size_t GenericFill<IfcLightSourceGoniometric>(const DB& db, const LIST& params, IfcLightSourceGoniometric* in)
4031 {
4032 size_t base = GenericFill(db,params,static_cast<IfcLightSource*>(in));
4033 // this data structure is not used yet, so there is no code generated to fill its members
4034 return base;
4035 }
4036 // -----------------------------------------------------------------------------------------------------------
4037 template <> size_t GenericFill<IfcActuatorType>(const DB& db, const LIST& params, IfcActuatorType* in)
4038 {
4039 size_t base = GenericFill(db,params,static_cast<IfcDistributionControlElementType*>(in));
4040 // this data structure is not used yet, so there is no code generated to fill its members
4041 return base;
4042 }
4043 // -----------------------------------------------------------------------------------------------------------
4044 template <> size_t GenericFill<IfcSensorType>(const DB& db, const LIST& params, IfcSensorType* in)
4045 {
4046 size_t base = GenericFill(db,params,static_cast<IfcDistributionControlElementType*>(in));
4047 // this data structure is not used yet, so there is no code generated to fill its members
4048 return base;
4049 }
4050 // -----------------------------------------------------------------------------------------------------------
4051 template <> size_t GenericFill<IfcAirTerminalBoxType>(const DB& db, const LIST& params, IfcAirTerminalBoxType* in)
4052 {
4053 size_t base = GenericFill(db,params,static_cast<IfcFlowControllerType*>(in));
4054 // this data structure is not used yet, so there is no code generated to fill its members
4055 return base;
4056 }
4057 // -----------------------------------------------------------------------------------------------------------
4058 template <> size_t GenericFill<IfcAnnotationSurfaceOccurrence>(const DB& db, const LIST& params, IfcAnnotationSurfaceOccurrence* in)
4059 {
4060 size_t base = GenericFill(db,params,static_cast<IfcAnnotationOccurrence*>(in));
4061 // this data structure is not used yet, so there is no code generated to fill its members
4062 return base;
4063 }
4064 // -----------------------------------------------------------------------------------------------------------
4065 template <> size_t GenericFill<IfcZShapeProfileDef>(const DB& db, const LIST& params, IfcZShapeProfileDef* in)
4066 {
4067 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
4068 // this data structure is not used yet, so there is no code generated to fill its members
4069 return base;
4070 }
4071 // -----------------------------------------------------------------------------------------------------------
4072 template <> size_t GenericFill<IfcRationalBezierCurve>(const DB& db, const LIST& params, IfcRationalBezierCurve* in)
4073 {
4074 size_t base = GenericFill(db,params,static_cast<IfcBezierCurve*>(in));
4075 // this data structure is not used yet, so there is no code generated to fill its members
4076 return base;
4077 }
4078 // -----------------------------------------------------------------------------------------------------------
4079 template <> size_t GenericFill<IfcCartesianTransformationOperator2D>(const DB& db, const LIST& params, IfcCartesianTransformationOperator2D* in)
4080 {
4081 size_t base = GenericFill(db,params,static_cast<IfcCartesianTransformationOperator*>(in));
4082 // this data structure is not used yet, so there is no code generated to fill its members
4083 return base;
4084 }
4085 // -----------------------------------------------------------------------------------------------------------
4086 template <> size_t GenericFill<IfcCartesianTransformationOperator2DnonUniform>(const DB& db, const LIST& params, IfcCartesianTransformationOperator2DnonUniform* in)
4087 {
4088 size_t base = GenericFill(db,params,static_cast<IfcCartesianTransformationOperator2D*>(in));
4089 // this data structure is not used yet, so there is no code generated to fill its members
4090 return base;
4091 }
4092 // -----------------------------------------------------------------------------------------------------------
4093 template <> size_t GenericFill<IfcMove>(const DB& db, const LIST& params, IfcMove* in)
4094 {
4095 size_t base = GenericFill(db,params,static_cast<IfcTask*>(in));
4096 // this data structure is not used yet, so there is no code generated to fill its members
4097 return base;
4098 }
4099 // -----------------------------------------------------------------------------------------------------------
4100 template <> size_t GenericFill<IfcCableCarrierSegmentType>(const DB& db, const LIST& params, IfcCableCarrierSegmentType* in)
4101 {
4102 size_t base = GenericFill(db,params,static_cast<IfcFlowSegmentType*>(in));
4103 // this data structure is not used yet, so there is no code generated to fill its members
4104 return base;
4105 }
4106 // -----------------------------------------------------------------------------------------------------------
4107 template <> size_t GenericFill<IfcElectricalElement>(const DB& db, const LIST& params, IfcElectricalElement* in)
4108 {
4109 size_t base = GenericFill(db,params,static_cast<IfcElement*>(in));
4110 // this data structure is not used yet, so there is no code generated to fill its members
4111 return base;
4112 }
4113 // -----------------------------------------------------------------------------------------------------------
4114 template <> size_t GenericFill<IfcChillerType>(const DB& db, const LIST& params, IfcChillerType* in)
4115 {
4116 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
4117 // this data structure is not used yet, so there is no code generated to fill its members
4118 return base;
4119 }
4120 // -----------------------------------------------------------------------------------------------------------
4121 template <> size_t GenericFill<IfcReinforcingBar>(const DB& db, const LIST& params, IfcReinforcingBar* in)
4122 {
4123 size_t base = GenericFill(db,params,static_cast<IfcReinforcingElement*>(in));
4124 // this data structure is not used yet, so there is no code generated to fill its members
4125 return base;
4126 }
4127 // -----------------------------------------------------------------------------------------------------------
4128 template <> size_t GenericFill<IfcCShapeProfileDef>(const DB& db, const LIST& params, IfcCShapeProfileDef* in)
4129 {
4130 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
4131 // this data structure is not used yet, so there is no code generated to fill its members
4132 return base;
4133 }
4134 // -----------------------------------------------------------------------------------------------------------
4135 template <> size_t GenericFill<IfcPermit>(const DB& db, const LIST& params, IfcPermit* in)
4136 {
4137 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
4138 // this data structure is not used yet, so there is no code generated to fill its members
4139 return base;
4140 }
4141 // -----------------------------------------------------------------------------------------------------------
4142 template <> size_t GenericFill<IfcSlabType>(const DB& db, const LIST& params, IfcSlabType* in)
4143 {
4144 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
4145 // this data structure is not used yet, so there is no code generated to fill its members
4146 return base;
4147 }
4148 // -----------------------------------------------------------------------------------------------------------
4149 template <> size_t GenericFill<IfcLampType>(const DB& db, const LIST& params, IfcLampType* in)
4150 {
4151 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
4152 // this data structure is not used yet, so there is no code generated to fill its members
4153 return base;
4154 }
4155 // -----------------------------------------------------------------------------------------------------------
4156 template <> size_t GenericFill<IfcPlanarExtent>(const DB& db, const LIST& params, IfcPlanarExtent* in)
4157 {
4158 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
4159 // this data structure is not used yet, so there is no code generated to fill its members
4160 return base;
4161 }
4162 // -----------------------------------------------------------------------------------------------------------
4163 template <> size_t GenericFill<IfcAlarmType>(const DB& db, const LIST& params, IfcAlarmType* in)
4164 {
4165 size_t base = GenericFill(db,params,static_cast<IfcDistributionControlElementType*>(in));
4166 // this data structure is not used yet, so there is no code generated to fill its members
4167 return base;
4168 }
4169 // -----------------------------------------------------------------------------------------------------------
4170 template <> size_t GenericFill<IfcElectricFlowStorageDeviceType>(const DB& db, const LIST& params, IfcElectricFlowStorageDeviceType* in)
4171 {
4172 size_t base = GenericFill(db,params,static_cast<IfcFlowStorageDeviceType*>(in));
4173 // this data structure is not used yet, so there is no code generated to fill its members
4174 return base;
4175 }
4176 // -----------------------------------------------------------------------------------------------------------
4177 template <> size_t GenericFill<IfcEquipmentElement>(const DB& db, const LIST& params, IfcEquipmentElement* in)
4178 {
4179 size_t base = GenericFill(db,params,static_cast<IfcElement*>(in));
4180 // this data structure is not used yet, so there is no code generated to fill its members
4181 return base;
4182 }
4183 // -----------------------------------------------------------------------------------------------------------
4184 template <> size_t GenericFill<IfcLightFixtureType>(const DB& db, const LIST& params, IfcLightFixtureType* in)
4185 {
4186 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
4187 // this data structure is not used yet, so there is no code generated to fill its members
4188 return base;
4189 }
4190 // -----------------------------------------------------------------------------------------------------------
4191 template <> size_t GenericFill<IfcCurtainWall>(const DB& db, const LIST& params, IfcCurtainWall* in)
4192 {
4193 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
4194 // this data structure is not used yet, so there is no code generated to fill its members
4195 return base;
4196 }
4197 // -----------------------------------------------------------------------------------------------------------
4198 template <> size_t GenericFill<IfcSlab>(const DB& db, const LIST& params, IfcSlab* in)
4199 {
4200 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
4201 // this data structure is not used yet, so there is no code generated to fill its members
4202 return base;
4203 }
4204 // -----------------------------------------------------------------------------------------------------------
4205 template <> size_t GenericFill<IfcCurtainWallType>(const DB& db, const LIST& params, IfcCurtainWallType* in)
4206 {
4207 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
4208 // this data structure is not used yet, so there is no code generated to fill its members
4209 return base;
4210 }
4211 // -----------------------------------------------------------------------------------------------------------
4212 template <> size_t GenericFill<IfcOutletType>(const DB& db, const LIST& params, IfcOutletType* in)
4213 {
4214 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
4215 // this data structure is not used yet, so there is no code generated to fill its members
4216 return base;
4217 }
4218 // -----------------------------------------------------------------------------------------------------------
4219 template <> size_t GenericFill<IfcCompressorType>(const DB& db, const LIST& params, IfcCompressorType* in)
4220 {
4221 size_t base = GenericFill(db,params,static_cast<IfcFlowMovingDeviceType*>(in));
4222 // this data structure is not used yet, so there is no code generated to fill its members
4223 return base;
4224 }
4225 // -----------------------------------------------------------------------------------------------------------
4226 template <> size_t GenericFill<IfcCraneRailAShapeProfileDef>(const DB& db, const LIST& params, IfcCraneRailAShapeProfileDef* in)
4227 {
4228 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
4229 // this data structure is not used yet, so there is no code generated to fill its members
4230 return base;
4231 }
4232 // -----------------------------------------------------------------------------------------------------------
4233 template <> size_t GenericFill<IfcFlowSegment>(const DB& db, const LIST& params, IfcFlowSegment* in)
4234 {
4235 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElement*>(in));
4236 // this data structure is not used yet, so there is no code generated to fill its members
4237 return base;
4238 }
4239 // -----------------------------------------------------------------------------------------------------------
4240 template <> size_t GenericFill<IfcSectionedSpine>(const DB& db, const LIST& params, IfcSectionedSpine* in)
4241 {
4242 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
4243 // this data structure is not used yet, so there is no code generated to fill its members
4244 return base;
4245 }
4246 // -----------------------------------------------------------------------------------------------------------
4247 template <> size_t GenericFill<IfcElectricTimeControlType>(const DB& db, const LIST& params, IfcElectricTimeControlType* in)
4248 {
4249 size_t base = GenericFill(db,params,static_cast<IfcFlowControllerType*>(in));
4250 // this data structure is not used yet, so there is no code generated to fill its members
4251 return base;
4252 }
4253 // -----------------------------------------------------------------------------------------------------------
4254 template <> size_t GenericFill<IfcFaceSurface>(const DB& db, const LIST& params, IfcFaceSurface* in)
4255 {
4256 size_t base = GenericFill(db,params,static_cast<IfcFace*>(in));
4257 // this data structure is not used yet, so there is no code generated to fill its members
4258 return base;
4259 }
4260 // -----------------------------------------------------------------------------------------------------------
4261 template <> size_t GenericFill<IfcMotorConnectionType>(const DB& db, const LIST& params, IfcMotorConnectionType* in)
4262 {
4263 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
4264 // this data structure is not used yet, so there is no code generated to fill its members
4265 return base;
4266 }
4267 // -----------------------------------------------------------------------------------------------------------
4268 template <> size_t GenericFill<IfcFlowFitting>(const DB& db, const LIST& params, IfcFlowFitting* in)
4269 {
4270 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElement*>(in));
4271 // this data structure is not used yet, so there is no code generated to fill its members
4272 return base;
4273 }
4274 // -----------------------------------------------------------------------------------------------------------
4275 template <> size_t GenericFill<IfcPointOnCurve>(const DB& db, const LIST& params, IfcPointOnCurve* in)
4276 {
4277 size_t base = GenericFill(db,params,static_cast<IfcPoint*>(in));
4278 // this data structure is not used yet, so there is no code generated to fill its members
4279 return base;
4280 }
4281 // -----------------------------------------------------------------------------------------------------------
4282 template <> size_t GenericFill<IfcTransportElementType>(const DB& db, const LIST& params, IfcTransportElementType* in)
4283 {
4284 size_t base = GenericFill(db,params,static_cast<IfcElementType*>(in));
4285 // this data structure is not used yet, so there is no code generated to fill its members
4286 return base;
4287 }
4288 // -----------------------------------------------------------------------------------------------------------
4289 template <> size_t GenericFill<IfcCableSegmentType>(const DB& db, const LIST& params, IfcCableSegmentType* in)
4290 {
4291 size_t base = GenericFill(db,params,static_cast<IfcFlowSegmentType*>(in));
4292 // this data structure is not used yet, so there is no code generated to fill its members
4293 return base;
4294 }
4295 // -----------------------------------------------------------------------------------------------------------
4296 template <> size_t GenericFill<IfcAnnotationSurface>(const DB& db, const LIST& params, IfcAnnotationSurface* in)
4297 {
4298 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
4299 // this data structure is not used yet, so there is no code generated to fill its members
4300 return base;
4301 }
4302 // -----------------------------------------------------------------------------------------------------------
4303 template <> size_t GenericFill<IfcCompositeCurveSegment>(const DB& db, const LIST& params, IfcCompositeCurveSegment* in)
4304 {
4305 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
4306 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcCompositeCurveSegment"); } do { // convert the 'Transition' argument
4307 boost::shared_ptr<const DataType> arg = params[base++];
4308 try { GenericConvert( in->Transition, arg, db ); break; }
4309 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcCompositeCurveSegment to be a `IfcTransitionCode`")); }
4310 } while(0);
4311 do { // convert the 'SameSense' argument
4312 boost::shared_ptr<const DataType> arg = params[base++];
4313 try { GenericConvert( in->SameSense, arg, db ); break; }
4314 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcCompositeCurveSegment to be a `BOOLEAN`")); }
4315 } while(0);
4316 do { // convert the 'ParentCurve' argument
4317 boost::shared_ptr<const DataType> arg = params[base++];
4318 try { GenericConvert( in->ParentCurve, arg, db ); break; }
4319 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcCompositeCurveSegment to be a `IfcCurve`")); }
4320 } while(0);
4321 return base;
4322 }
4323 // -----------------------------------------------------------------------------------------------------------
4324 template <> size_t GenericFill<IfcServiceLife>(const DB& db, const LIST& params, IfcServiceLife* in)
4325 {
4326 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
4327 // this data structure is not used yet, so there is no code generated to fill its members
4328 return base;
4329 }
4330 // -----------------------------------------------------------------------------------------------------------
4331 template <> size_t GenericFill<IfcPlateType>(const DB& db, const LIST& params, IfcPlateType* in)
4332 {
4333 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
4334 // this data structure is not used yet, so there is no code generated to fill its members
4335 return base;
4336 }
4337 // -----------------------------------------------------------------------------------------------------------
4338 template <> size_t GenericFill<IfcVibrationIsolatorType>(const DB& db, const LIST& params, IfcVibrationIsolatorType* in)
4339 {
4340 size_t base = GenericFill(db,params,static_cast<IfcDiscreteAccessoryType*>(in));
4341 // this data structure is not used yet, so there is no code generated to fill its members
4342 return base;
4343 }
4344 // -----------------------------------------------------------------------------------------------------------
4345 template <> size_t GenericFill<IfcTrimmedCurve>(const DB& db, const LIST& params, IfcTrimmedCurve* in)
4346 {
4347 size_t base = GenericFill(db,params,static_cast<IfcBoundedCurve*>(in));
4348 if (params.GetSize() < 5) { throw STEP::TypeError("expected 5 arguments to IfcTrimmedCurve"); } do { // convert the 'BasisCurve' argument
4349 boost::shared_ptr<const DataType> arg = params[base++];
4350 try { GenericConvert( in->BasisCurve, arg, db ); break; }
4351 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcTrimmedCurve to be a `IfcCurve`")); }
4352 } while(0);
4353 do { // convert the 'Trim1' argument
4354 boost::shared_ptr<const DataType> arg = params[base++];
4355 try { GenericConvert( in->Trim1, arg, db ); break; }
4356 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcTrimmedCurve to be a `SET [1:2] OF IfcTrimmingSelect`")); }
4357 } while(0);
4358 do { // convert the 'Trim2' argument
4359 boost::shared_ptr<const DataType> arg = params[base++];
4360 try { GenericConvert( in->Trim2, arg, db ); break; }
4361 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcTrimmedCurve to be a `SET [1:2] OF IfcTrimmingSelect`")); }
4362 } while(0);
4363 do { // convert the 'SenseAgreement' argument
4364 boost::shared_ptr<const DataType> arg = params[base++];
4365 try { GenericConvert( in->SenseAgreement, arg, db ); break; }
4366 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcTrimmedCurve to be a `BOOLEAN`")); }
4367 } while(0);
4368 do { // convert the 'MasterRepresentation' argument
4369 boost::shared_ptr<const DataType> arg = params[base++];
4370 try { GenericConvert( in->MasterRepresentation, arg, db ); break; }
4371 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 4 to IfcTrimmedCurve to be a `IfcTrimmingPreference`")); }
4372 } while(0);
4373 return base;
4374 }
4375 // -----------------------------------------------------------------------------------------------------------
4376 template <> size_t GenericFill<IfcMappedItem>(const DB& db, const LIST& params, IfcMappedItem* in)
4377 {
4378 size_t base = GenericFill(db,params,static_cast<IfcRepresentationItem*>(in));
4379 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcMappedItem"); } do { // convert the 'MappingSource' argument
4380 boost::shared_ptr<const DataType> arg = params[base++];
4381 try { GenericConvert( in->MappingSource, arg, db ); break; }
4382 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcMappedItem to be a `IfcRepresentationMap`")); }
4383 } while(0);
4384 do { // convert the 'MappingTarget' argument
4385 boost::shared_ptr<const DataType> arg = params[base++];
4386 try { GenericConvert( in->MappingTarget, arg, db ); break; }
4387 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcMappedItem to be a `IfcCartesianTransformationOperator`")); }
4388 } while(0);
4389 return base;
4390 }
4391 // -----------------------------------------------------------------------------------------------------------
4392 template <> size_t GenericFill<IfcDirection>(const DB& db, const LIST& params, IfcDirection* in)
4393 {
4394 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
4395 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcDirection"); } do { // convert the 'DirectionRatios' argument
4396 boost::shared_ptr<const DataType> arg = params[base++];
4397 try { GenericConvert( in->DirectionRatios, arg, db ); break; }
4398 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcDirection to be a `LIST [2:3] OF REAL`")); }
4399 } while(0);
4400 return base;
4401 }
4402 // -----------------------------------------------------------------------------------------------------------
4403 template <> size_t GenericFill<IfcBlock>(const DB& db, const LIST& params, IfcBlock* in)
4404 {
4405 size_t base = GenericFill(db,params,static_cast<IfcCsgPrimitive3D*>(in));
4406 // this data structure is not used yet, so there is no code generated to fill its members
4407 return base;
4408 }
4409 // -----------------------------------------------------------------------------------------------------------
4410 template <> size_t GenericFill<IfcProjectOrderRecord>(const DB& db, const LIST& params, IfcProjectOrderRecord* in)
4411 {
4412 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
4413 // this data structure is not used yet, so there is no code generated to fill its members
4414 return base;
4415 }
4416 // -----------------------------------------------------------------------------------------------------------
4417 template <> size_t GenericFill<IfcFlowMeterType>(const DB& db, const LIST& params, IfcFlowMeterType* in)
4418 {
4419 size_t base = GenericFill(db,params,static_cast<IfcFlowControllerType*>(in));
4420 // this data structure is not used yet, so there is no code generated to fill its members
4421 return base;
4422 }
4423 // -----------------------------------------------------------------------------------------------------------
4424 template <> size_t GenericFill<IfcControllerType>(const DB& db, const LIST& params, IfcControllerType* in)
4425 {
4426 size_t base = GenericFill(db,params,static_cast<IfcDistributionControlElementType*>(in));
4427 // this data structure is not used yet, so there is no code generated to fill its members
4428 return base;
4429 }
4430 // -----------------------------------------------------------------------------------------------------------
4431 template <> size_t GenericFill<IfcBeam>(const DB& db, const LIST& params, IfcBeam* in)
4432 {
4433 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
4434 // this data structure is not used yet, so there is no code generated to fill its members
4435 return base;
4436 }
4437 // -----------------------------------------------------------------------------------------------------------
4438 template <> size_t GenericFill<IfcArbitraryOpenProfileDef>(const DB& db, const LIST& params, IfcArbitraryOpenProfileDef* in)
4439 {
4440 size_t base = GenericFill(db,params,static_cast<IfcProfileDef*>(in));
4441 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcArbitraryOpenProfileDef"); } do { // convert the 'Curve' argument
4442 boost::shared_ptr<const DataType> arg = params[base++];
4443 if (dynamic_cast<const ISDERIVED*>(&*arg)) { in->ObjectHelper<Assimp::IFC::IfcArbitraryOpenProfileDef,1>::aux_is_derived[0]=true; break; }
4444 try { GenericConvert( in->Curve, arg, db ); break; }
4445 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcArbitraryOpenProfileDef to be a `IfcBoundedCurve`")); }
4446 } while(0);
4447 return base;
4448 }
4449 // -----------------------------------------------------------------------------------------------------------
4450 template <> size_t GenericFill<IfcCenterLineProfileDef>(const DB& db, const LIST& params, IfcCenterLineProfileDef* in)
4451 {
4452 size_t base = GenericFill(db,params,static_cast<IfcArbitraryOpenProfileDef*>(in));
4453 // this data structure is not used yet, so there is no code generated to fill its members
4454 return base;
4455 }
4456 // -----------------------------------------------------------------------------------------------------------
4457 template <> size_t GenericFill<IfcTimeSeriesSchedule>(const DB& db, const LIST& params, IfcTimeSeriesSchedule* in)
4458 {
4459 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
4460 // this data structure is not used yet, so there is no code generated to fill its members
4461 return base;
4462 }
4463 // -----------------------------------------------------------------------------------------------------------
4464 template <> size_t GenericFill<IfcRoundedEdgeFeature>(const DB& db, const LIST& params, IfcRoundedEdgeFeature* in)
4465 {
4466 size_t base = GenericFill(db,params,static_cast<IfcEdgeFeature*>(in));
4467 // this data structure is not used yet, so there is no code generated to fill its members
4468 return base;
4469 }
4470 // -----------------------------------------------------------------------------------------------------------
4471 template <> size_t GenericFill<IfcIShapeProfileDef>(const DB& db, const LIST& params, IfcIShapeProfileDef* in)
4472 {
4473 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
4474 // this data structure is not used yet, so there is no code generated to fill its members
4475 return base;
4476 }
4477 // -----------------------------------------------------------------------------------------------------------
4478 template <> size_t GenericFill<IfcSpaceHeaterType>(const DB& db, const LIST& params, IfcSpaceHeaterType* in)
4479 {
4480 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
4481 // this data structure is not used yet, so there is no code generated to fill its members
4482 return base;
4483 }
4484 // -----------------------------------------------------------------------------------------------------------
4485 template <> size_t GenericFill<IfcFlowStorageDevice>(const DB& db, const LIST& params, IfcFlowStorageDevice* in)
4486 {
4487 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElement*>(in));
4488 // this data structure is not used yet, so there is no code generated to fill its members
4489 return base;
4490 }
4491 // -----------------------------------------------------------------------------------------------------------
4492 template <> size_t GenericFill<IfcRevolvedAreaSolid>(const DB& db, const LIST& params, IfcRevolvedAreaSolid* in)
4493 {
4494 size_t base = GenericFill(db,params,static_cast<IfcSweptAreaSolid*>(in));
4495 if (params.GetSize() < 4) { throw STEP::TypeError("expected 4 arguments to IfcRevolvedAreaSolid"); } do { // convert the 'Axis' argument
4496 boost::shared_ptr<const DataType> arg = params[base++];
4497 try { GenericConvert( in->Axis, arg, db ); break; }
4498 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcRevolvedAreaSolid to be a `IfcAxis1Placement`")); }
4499 } while(0);
4500 do { // convert the 'Angle' argument
4501 boost::shared_ptr<const DataType> arg = params[base++];
4502 try { GenericConvert( in->Angle, arg, db ); break; }
4503 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 3 to IfcRevolvedAreaSolid to be a `IfcPlaneAngleMeasure`")); }
4504 } while(0);
4505 return base;
4506 }
4507 // -----------------------------------------------------------------------------------------------------------
4508 template <> size_t GenericFill<IfcDoor>(const DB& db, const LIST& params, IfcDoor* in)
4509 {
4510 size_t base = GenericFill(db,params,static_cast<IfcBuildingElement*>(in));
4511 if (params.GetSize() < 10) { throw STEP::TypeError("expected 10 arguments to IfcDoor"); } do { // convert the 'OverallHeight' argument
4512 boost::shared_ptr<const DataType> arg = params[base++];
4513 if (dynamic_cast<const UNSET*>(&*arg)) break;
4514 try { GenericConvert( in->OverallHeight, arg, db ); break; }
4515 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 8 to IfcDoor to be a `IfcPositiveLengthMeasure`")); }
4516 } while(0);
4517 do { // convert the 'OverallWidth' argument
4518 boost::shared_ptr<const DataType> arg = params[base++];
4519 if (dynamic_cast<const UNSET*>(&*arg)) break;
4520 try { GenericConvert( in->OverallWidth, arg, db ); break; }
4521 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 9 to IfcDoor to be a `IfcPositiveLengthMeasure`")); }
4522 } while(0);
4523 return base;
4524 }
4525 // -----------------------------------------------------------------------------------------------------------
4526 template <> size_t GenericFill<IfcEllipse>(const DB& db, const LIST& params, IfcEllipse* in)
4527 {
4528 size_t base = GenericFill(db,params,static_cast<IfcConic*>(in));
4529 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcEllipse"); } do { // convert the 'SemiAxis1' argument
4530 boost::shared_ptr<const DataType> arg = params[base++];
4531 try { GenericConvert( in->SemiAxis1, arg, db ); break; }
4532 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcEllipse to be a `IfcPositiveLengthMeasure`")); }
4533 } while(0);
4534 do { // convert the 'SemiAxis2' argument
4535 boost::shared_ptr<const DataType> arg = params[base++];
4536 try { GenericConvert( in->SemiAxis2, arg, db ); break; }
4537 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 2 to IfcEllipse to be a `IfcPositiveLengthMeasure`")); }
4538 } while(0);
4539 return base;
4540 }
4541 // -----------------------------------------------------------------------------------------------------------
4542 template <> size_t GenericFill<IfcTubeBundleType>(const DB& db, const LIST& params, IfcTubeBundleType* in)
4543 {
4544 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
4545 // this data structure is not used yet, so there is no code generated to fill its members
4546 return base;
4547 }
4548 // -----------------------------------------------------------------------------------------------------------
4549 template <> size_t GenericFill<IfcAngularDimension>(const DB& db, const LIST& params, IfcAngularDimension* in)
4550 {
4551 size_t base = GenericFill(db,params,static_cast<IfcDimensionCurveDirectedCallout*>(in));
4552 // this data structure is not used yet, so there is no code generated to fill its members
4553 return base;
4554 }
4555 // -----------------------------------------------------------------------------------------------------------
4556 template <> size_t GenericFill<IfcFaceBasedSurfaceModel>(const DB& db, const LIST& params, IfcFaceBasedSurfaceModel* in)
4557 {
4558 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
4559 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcFaceBasedSurfaceModel"); } do { // convert the 'FbsmFaces' argument
4560 boost::shared_ptr<const DataType> arg = params[base++];
4561 try { GenericConvert( in->FbsmFaces, arg, db ); break; }
4562 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcFaceBasedSurfaceModel to be a `SET [1:?] OF IfcConnectedFaceSet`")); }
4563 } while(0);
4564 return base;
4565 }
4566 // -----------------------------------------------------------------------------------------------------------
4567 template <> size_t GenericFill<IfcCraneRailFShapeProfileDef>(const DB& db, const LIST& params, IfcCraneRailFShapeProfileDef* in)
4568 {
4569 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
4570 // this data structure is not used yet, so there is no code generated to fill its members
4571 return base;
4572 }
4573 // -----------------------------------------------------------------------------------------------------------
4574 template <> size_t GenericFill<IfcColumnType>(const DB& db, const LIST& params, IfcColumnType* in)
4575 {
4576 size_t base = GenericFill(db,params,static_cast<IfcBuildingElementType*>(in));
4577 // this data structure is not used yet, so there is no code generated to fill its members
4578 return base;
4579 }
4580 // -----------------------------------------------------------------------------------------------------------
4581 template <> size_t GenericFill<IfcTShapeProfileDef>(const DB& db, const LIST& params, IfcTShapeProfileDef* in)
4582 {
4583 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
4584 // this data structure is not used yet, so there is no code generated to fill its members
4585 return base;
4586 }
4587 // -----------------------------------------------------------------------------------------------------------
4588 template <> size_t GenericFill<IfcEnergyConversionDevice>(const DB& db, const LIST& params, IfcEnergyConversionDevice* in)
4589 {
4590 size_t base = GenericFill(db,params,static_cast<IfcDistributionFlowElement*>(in));
4591 // this data structure is not used yet, so there is no code generated to fill its members
4592 return base;
4593 }
4594 // -----------------------------------------------------------------------------------------------------------
4595 template <> size_t GenericFill<IfcWorkSchedule>(const DB& db, const LIST& params, IfcWorkSchedule* in)
4596 {
4597 size_t base = GenericFill(db,params,static_cast<IfcWorkControl*>(in));
4598 // this data structure is not used yet, so there is no code generated to fill its members
4599 return base;
4600 }
4601 // -----------------------------------------------------------------------------------------------------------
4602 template <> size_t GenericFill<IfcZone>(const DB& db, const LIST& params, IfcZone* in)
4603 {
4604 size_t base = GenericFill(db,params,static_cast<IfcGroup*>(in));
4605 // this data structure is not used yet, so there is no code generated to fill its members
4606 return base;
4607 }
4608 // -----------------------------------------------------------------------------------------------------------
4609 template <> size_t GenericFill<IfcTransportElement>(const DB& db, const LIST& params, IfcTransportElement* in)
4610 {
4611 size_t base = GenericFill(db,params,static_cast<IfcElement*>(in));
4612 // this data structure is not used yet, so there is no code generated to fill its members
4613 return base;
4614 }
4615 // -----------------------------------------------------------------------------------------------------------
4616 template <> size_t GenericFill<IfcGeometricRepresentationSubContext>(const DB& db, const LIST& params, IfcGeometricRepresentationSubContext* in)
4617 {
4618 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationContext*>(in));
4619 // this data structure is not used yet, so there is no code generated to fill its members
4620 return base;
4621 }
4622 // -----------------------------------------------------------------------------------------------------------
4623 template <> size_t GenericFill<IfcLShapeProfileDef>(const DB& db, const LIST& params, IfcLShapeProfileDef* in)
4624 {
4625 size_t base = GenericFill(db,params,static_cast<IfcParameterizedProfileDef*>(in));
4626 // this data structure is not used yet, so there is no code generated to fill its members
4627 return base;
4628 }
4629 // -----------------------------------------------------------------------------------------------------------
4630 template <> size_t GenericFill<IfcGeometricCurveSet>(const DB& db, const LIST& params, IfcGeometricCurveSet* in)
4631 {
4632 size_t base = GenericFill(db,params,static_cast<IfcGeometricSet*>(in));
4633 // this data structure is not used yet, so there is no code generated to fill its members
4634 return base;
4635 }
4636 // -----------------------------------------------------------------------------------------------------------
4637 template <> size_t GenericFill<IfcActor>(const DB& db, const LIST& params, IfcActor* in)
4638 {
4639 size_t base = GenericFill(db,params,static_cast<IfcObject*>(in));
4640 // this data structure is not used yet, so there is no code generated to fill its members
4641 return base;
4642 }
4643 // -----------------------------------------------------------------------------------------------------------
4644 template <> size_t GenericFill<IfcOccupant>(const DB& db, const LIST& params, IfcOccupant* in)
4645 {
4646 size_t base = GenericFill(db,params,static_cast<IfcActor*>(in));
4647 // this data structure is not used yet, so there is no code generated to fill its members
4648 return base;
4649 }
4650 // -----------------------------------------------------------------------------------------------------------
4651 template <> size_t GenericFill<IfcBooleanClippingResult>(const DB& db, const LIST& params, IfcBooleanClippingResult* in)
4652 {
4653 size_t base = GenericFill(db,params,static_cast<IfcBooleanResult*>(in));
4654 if (params.GetSize() < 3) { throw STEP::TypeError("expected 3 arguments to IfcBooleanClippingResult"); } return base;
4655 }
4656 // -----------------------------------------------------------------------------------------------------------
4657 template <> size_t GenericFill<IfcAnnotationFillArea>(const DB& db, const LIST& params, IfcAnnotationFillArea* in)
4658 {
4659 size_t base = GenericFill(db,params,static_cast<IfcGeometricRepresentationItem*>(in));
4660 // this data structure is not used yet, so there is no code generated to fill its members
4661 return base;
4662 }
4663 // -----------------------------------------------------------------------------------------------------------
4664 template <> size_t GenericFill<IfcLightSourceSpot>(const DB& db, const LIST& params, IfcLightSourceSpot* in)
4665 {
4666 size_t base = GenericFill(db,params,static_cast<IfcLightSourcePositional*>(in));
4667 // this data structure is not used yet, so there is no code generated to fill its members
4668 return base;
4669 }
4670 // -----------------------------------------------------------------------------------------------------------
4671 template <> size_t GenericFill<IfcFireSuppressionTerminalType>(const DB& db, const LIST& params, IfcFireSuppressionTerminalType* in)
4672 {
4673 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
4674 // this data structure is not used yet, so there is no code generated to fill its members
4675 return base;
4676 }
4677 // -----------------------------------------------------------------------------------------------------------
4678 template <> size_t GenericFill<IfcElectricGeneratorType>(const DB& db, const LIST& params, IfcElectricGeneratorType* in)
4679 {
4680 size_t base = GenericFill(db,params,static_cast<IfcEnergyConversionDeviceType*>(in));
4681 // this data structure is not used yet, so there is no code generated to fill its members
4682 return base;
4683 }
4684 // -----------------------------------------------------------------------------------------------------------
4685 template <> size_t GenericFill<IfcInventory>(const DB& db, const LIST& params, IfcInventory* in)
4686 {
4687 size_t base = GenericFill(db,params,static_cast<IfcGroup*>(in));
4688 // this data structure is not used yet, so there is no code generated to fill its members
4689 return base;
4690 }
4691 // -----------------------------------------------------------------------------------------------------------
4692 template <> size_t GenericFill<IfcPolyline>(const DB& db, const LIST& params, IfcPolyline* in)
4693 {
4694 size_t base = GenericFill(db,params,static_cast<IfcBoundedCurve*>(in));
4695 if (params.GetSize() < 1) { throw STEP::TypeError("expected 1 arguments to IfcPolyline"); } do { // convert the 'Points' argument
4696 boost::shared_ptr<const DataType> arg = params[base++];
4697 try { GenericConvert( in->Points, arg, db ); break; }
4698 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcPolyline to be a `LIST [2:?] OF IfcCartesianPoint`")); }
4699 } while(0);
4700 return base;
4701 }
4702 // -----------------------------------------------------------------------------------------------------------
4703 template <> size_t GenericFill<IfcBoxedHalfSpace>(const DB& db, const LIST& params, IfcBoxedHalfSpace* in)
4704 {
4705 size_t base = GenericFill(db,params,static_cast<IfcHalfSpaceSolid*>(in));
4706 // this data structure is not used yet, so there is no code generated to fill its members
4707 return base;
4708 }
4709 // -----------------------------------------------------------------------------------------------------------
4710 template <> size_t GenericFill<IfcAirTerminalType>(const DB& db, const LIST& params, IfcAirTerminalType* in)
4711 {
4712 size_t base = GenericFill(db,params,static_cast<IfcFlowTerminalType*>(in));
4713 // this data structure is not used yet, so there is no code generated to fill its members
4714 return base;
4715 }
4716 // -----------------------------------------------------------------------------------------------------------
4717 template <> size_t GenericFill<IfcDistributionPort>(const DB& db, const LIST& params, IfcDistributionPort* in)
4718 {
4719 size_t base = GenericFill(db,params,static_cast<IfcPort*>(in));
4720 // this data structure is not used yet, so there is no code generated to fill its members
4721 return base;
4722 }
4723 // -----------------------------------------------------------------------------------------------------------
4724 template <> size_t GenericFill<IfcCostItem>(const DB& db, const LIST& params, IfcCostItem* in)
4725 {
4726 size_t base = GenericFill(db,params,static_cast<IfcControl*>(in));
4727 // this data structure is not used yet, so there is no code generated to fill its members
4728 return base;
4729 }
4730 // -----------------------------------------------------------------------------------------------------------
4731 template <> size_t GenericFill<IfcStructuredDimensionCallout>(const DB& db, const LIST& params, IfcStructuredDimensionCallout* in)
4732 {
4733 size_t base = GenericFill(db,params,static_cast<IfcDraughtingCallout*>(in));
4734 // this data structure is not used yet, so there is no code generated to fill its members
4735 return base;
4736 }
4737 // -----------------------------------------------------------------------------------------------------------
4738 template <> size_t GenericFill<IfcStructuralResultGroup>(const DB& db, const LIST& params, IfcStructuralResultGroup* in)
4739 {
4740 size_t base = GenericFill(db,params,static_cast<IfcGroup*>(in));
4741 // this data structure is not used yet, so there is no code generated to fill its members
4742 return base;
4743 }
4744 // -----------------------------------------------------------------------------------------------------------
4745 template <> size_t GenericFill<IfcOrientedEdge>(const DB& db, const LIST& params, IfcOrientedEdge* in)
4746 {
4747 size_t base = GenericFill(db,params,static_cast<IfcEdge*>(in));
4748 // this data structure is not used yet, so there is no code generated to fill its members
4749 return base;
4750 }
4751 // -----------------------------------------------------------------------------------------------------------
4752 template <> size_t GenericFill<IfcCsgSolid>(const DB& db, const LIST& params, IfcCsgSolid* in)
4753 {
4754 size_t base = GenericFill(db,params,static_cast<IfcSolidModel*>(in));
4755 // this data structure is not used yet, so there is no code generated to fill its members
4756 return base;
4757 }
4758 // -----------------------------------------------------------------------------------------------------------
4759 template <> size_t GenericFill<IfcPlanarBox>(const DB& db, const LIST& params, IfcPlanarBox* in)
4760 {
4761 size_t base = GenericFill(db,params,static_cast<IfcPlanarExtent*>(in));
4762 // this data structure is not used yet, so there is no code generated to fill its members
4763 return base;
4764 }
4765 // -----------------------------------------------------------------------------------------------------------
4766 template <> size_t GenericFill<IfcMaterialDefinitionRepresentation>(const DB& db, const LIST& params, IfcMaterialDefinitionRepresentation* in)
4767 {
4768 size_t base = GenericFill(db,params,static_cast<IfcProductRepresentation*>(in));
4769 // this data structure is not used yet, so there is no code generated to fill its members
4770 return base;
4771 }
4772 // -----------------------------------------------------------------------------------------------------------
4773 template <> size_t GenericFill<IfcAsymmetricIShapeProfileDef>(const DB& db, const LIST& params, IfcAsymmetricIShapeProfileDef* in)
4774 {
4775 size_t base = GenericFill(db,params,static_cast<IfcIShapeProfileDef*>(in));
4776 // this data structure is not used yet, so there is no code generated to fill its members
4777 return base;
4778 }
4779 // -----------------------------------------------------------------------------------------------------------
4780 template <> size_t GenericFill<IfcRepresentationMap>(const DB& db, const LIST& params, IfcRepresentationMap* in)
4781 {
4782 size_t base = 0;
4783 if (params.GetSize() < 2) { throw STEP::TypeError("expected 2 arguments to IfcRepresentationMap"); } do { // convert the 'MappingOrigin' argument
4784 boost::shared_ptr<const DataType> arg = params[base++];
4785 try { GenericConvert( in->MappingOrigin, arg, db ); break; }
4786 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 0 to IfcRepresentationMap to be a `IfcAxis2Placement`")); }
4787 } while(0);
4788 do { // convert the 'MappedRepresentation' argument
4789 boost::shared_ptr<const DataType> arg = params[base++];
4790 try { GenericConvert( in->MappedRepresentation, arg, db ); break; }
4791 catch (const TypeError& t) { throw TypeError(t.what() + std::string(" - expected argument 1 to IfcRepresentationMap to be a `IfcRepresentation`")); }
4792 } while(0);
47935023 return base;
47945024 }
47955025
00 /*
1 Open Asset Import Library (assimp)
1 Open Asset Import Library (ASSIMP)
22 ----------------------------------------------------------------------
33
4 Copyright (c) 2006-2012, assimp team
4 Copyright (c) 2006-2010, ASSIMP Development Team
55 All rights reserved.
66
77 Redistribution and use of this software in source and binary forms,
1717 following disclaimer in the documentation and/or other
1818 materials provided with the distribution.
1919
20 * Neither the name of the assimp team, nor the names of its
20 * Neither the name of the ASSIMP team, nor the names of its
2121 contributors may be used to endorse or promote products
2222 derived from this software without specific prior
23 written permission of the assimp team.
23 written permission of the ASSIMP Development Team.
2424
2525 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2626 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
6060 // ******************************************************************************
6161
6262
63 // C++ wrapper type for IfcStairTypeEnum
64 typedef ENUMERATION IfcStairTypeEnum;
65 // C++ wrapper type for IfcSpaceTypeEnum
66 typedef ENUMERATION IfcSpaceTypeEnum;
67 // C++ wrapper type for IfcWallTypeEnum
68 typedef ENUMERATION IfcWallTypeEnum;
69 // C++ wrapper type for IfcMonthInYearNumber
70 typedef INTEGER IfcMonthInYearNumber;
71 // C++ wrapper type for IfcHeatFluxDensityMeasure
72 typedef REAL IfcHeatFluxDensityMeasure;
73 // C++ wrapper type for IfcKinematicViscosityMeasure
74 typedef REAL IfcKinematicViscosityMeasure;
75 // C++ wrapper type for IfcSequenceEnum
76 typedef ENUMERATION IfcSequenceEnum;
77 // C++ wrapper type for IfcAirToAirHeatRecoveryTypeEnum
78 typedef ENUMERATION IfcAirToAirHeatRecoveryTypeEnum;
79 // C++ wrapper type for IfcActorSelect
80 typedef SELECT IfcActorSelect;
81 // C++ wrapper type for IfcTransformerTypeEnum
82 typedef ENUMERATION IfcTransformerTypeEnum;
83 // C++ wrapper type for IfcUnitaryEquipmentTypeEnum
84 typedef ENUMERATION IfcUnitaryEquipmentTypeEnum;
85 // C++ wrapper type for IfcElectricFlowStorageDeviceTypeEnum
86 typedef ENUMERATION IfcElectricFlowStorageDeviceTypeEnum;
87 // C++ wrapper type for IfcEnergySequenceEnum
88 typedef ENUMERATION IfcEnergySequenceEnum;
89 // C++ wrapper type for IfcWorkControlTypeEnum
90 typedef ENUMERATION IfcWorkControlTypeEnum;
91 // C++ wrapper type for IfcCurvatureMeasure
92 typedef REAL IfcCurvatureMeasure;
93 // C++ wrapper type for IfcParameterValue
94 typedef REAL IfcParameterValue;
95 // C++ wrapper type for IfcAppliedValueSelect
96 typedef SELECT IfcAppliedValueSelect;
97 // C++ wrapper type for IfcWarpingConstantMeasure
98 typedef REAL IfcWarpingConstantMeasure;
99 // C++ wrapper type for IfcArithmeticOperatorEnum
100 typedef ENUMERATION IfcArithmeticOperatorEnum;
101 // C++ wrapper type for IfcLinearForceMeasure
102 typedef REAL IfcLinearForceMeasure;
103 // C++ wrapper type for IfcWindowPanelPositionEnum
104 typedef ENUMERATION IfcWindowPanelPositionEnum;
105 // C++ wrapper type for IfcFlowMeterTypeEnum
106 typedef ENUMERATION IfcFlowMeterTypeEnum;
107 // C++ wrapper type for IfcRampFlightTypeEnum
108 typedef ENUMERATION IfcRampFlightTypeEnum;
109 // C++ wrapper type for IfcSpecularHighlightSelect
110 typedef SELECT IfcSpecularHighlightSelect;
111 // C++ wrapper type for IfcActionTypeEnum
112 typedef ENUMERATION IfcActionTypeEnum;
113 // C++ wrapper type for IfcGeometricProjectionEnum
114 typedef ENUMERATION IfcGeometricProjectionEnum;
115 // C++ wrapper type for IfcTimeSeriesDataTypeEnum
116 typedef ENUMERATION IfcTimeSeriesDataTypeEnum;
117 // C++ wrapper type for IfcMagneticFluxMeasure
118 typedef REAL IfcMagneticFluxMeasure;
119 // C++ wrapper type for IfcObjectTypeEnum
120 typedef ENUMERATION IfcObjectTypeEnum;
121 // C++ wrapper type for IfcDataOriginEnum
122 typedef ENUMERATION IfcDataOriginEnum;
123 // C++ wrapper type for IfcMassDensityMeasure
124 typedef REAL IfcMassDensityMeasure;
125 // C++ wrapper type for IfcLightFixtureTypeEnum
126 typedef ENUMERATION IfcLightFixtureTypeEnum;
127 // C++ wrapper type for IfcServiceLifeTypeEnum
128 typedef ENUMERATION IfcServiceLifeTypeEnum;
129 // C++ wrapper type for IfcElectricVoltageMeasure
130 typedef REAL IfcElectricVoltageMeasure;
131 // C++ wrapper type for IfcHeatingValueMeasure
132 typedef REAL IfcHeatingValueMeasure;
133 // C++ wrapper type for IfcPresentableText
134 typedef STRING IfcPresentableText;
135 // C++ wrapper type for IfcAheadOrBehind
136 typedef ENUMERATION IfcAheadOrBehind;
137 // C++ wrapper type for IfcSimpleValue
138 typedef SELECT IfcSimpleValue;
139 // C++ wrapper type for IfcSensorTypeEnum
140 typedef ENUMERATION IfcSensorTypeEnum;
141 // C++ wrapper type for IfcDerivedUnitEnum
142 typedef ENUMERATION IfcDerivedUnitEnum;
143 // C++ wrapper type for IfcSizeSelect
144 typedef SELECT IfcSizeSelect;
145 // C++ wrapper type for IfcTransportElementTypeEnum
146 typedef ENUMERATION IfcTransportElementTypeEnum;
147 // C++ wrapper type for IfcInventoryTypeEnum
148 typedef ENUMERATION IfcInventoryTypeEnum;
149 // C++ wrapper type for IfcTextDecoration
150 typedef STRING IfcTextDecoration;
151 // C++ wrapper type for IfcDirectionSenseEnum
152 typedef ENUMERATION IfcDirectionSenseEnum;
153 // C++ wrapper type for IfcDuctFittingTypeEnum
154 typedef ENUMERATION IfcDuctFittingTypeEnum;
155 // C++ wrapper type for IfcDocumentStatusEnum
156 typedef ENUMERATION IfcDocumentStatusEnum;
157 // C++ wrapper type for IfcSlabTypeEnum
158 typedef ENUMERATION IfcSlabTypeEnum;
159 // C++ wrapper type for IfcDoorStyleConstructionEnum
160 typedef ENUMERATION IfcDoorStyleConstructionEnum;
161 // C++ wrapper type for IfcVolumeMeasure
162 typedef REAL IfcVolumeMeasure;
163 // C++ wrapper type for IfcInductanceMeasure
164 typedef REAL IfcInductanceMeasure;
165 // C++ wrapper type for IfcCurtainWallTypeEnum
166 typedef ENUMERATION IfcCurtainWallTypeEnum;
167 // C++ wrapper type for IfcSIUnitName
168 typedef ENUMERATION IfcSIUnitName;
169 // C++ wrapper type for IfcSpecularExponent
170 typedef REAL IfcSpecularExponent;
171 // C++ wrapper type for IfcSoundPressureMeasure
172 typedef REAL IfcSoundPressureMeasure;
173 // C++ wrapper type for IfcAnalysisTheoryTypeEnum
174 typedef ENUMERATION IfcAnalysisTheoryTypeEnum;
175 // C++ wrapper type for IfcGasTerminalTypeEnum
176 typedef ENUMERATION IfcGasTerminalTypeEnum;
177 // C++ wrapper type for IfcYearNumber
178 typedef INTEGER IfcYearNumber;
179 // C++ wrapper type for IfcModulusOfElasticityMeasure
180 typedef REAL IfcModulusOfElasticityMeasure;
181 // C++ wrapper type for IfcChangeActionEnum
182 typedef ENUMERATION IfcChangeActionEnum;
183 // C++ wrapper type for IfcDamperTypeEnum
184 typedef ENUMERATION IfcDamperTypeEnum;
185 // C++ wrapper type for IfcEvaporatorTypeEnum
186 typedef ENUMERATION IfcEvaporatorTypeEnum;
187 // C++ wrapper type for IfcIonConcentrationMeasure
188 typedef REAL IfcIonConcentrationMeasure;
189 // C++ wrapper type for IfcDuctSegmentTypeEnum
190 typedef ENUMERATION IfcDuctSegmentTypeEnum;
191 // C++ wrapper type for IfcProtectiveDeviceTypeEnum
192 typedef ENUMERATION IfcProtectiveDeviceTypeEnum;
193 // C++ wrapper type for IfcAbsorbedDoseMeasure
194 typedef REAL IfcAbsorbedDoseMeasure;
195 // C++ wrapper type for IfcMassPerLengthMeasure
196 typedef REAL IfcMassPerLengthMeasure;
197 // C++ wrapper type for IfcTextFontName
198 typedef STRING IfcTextFontName;
199 // C++ wrapper type for IfcOrientationSelect
200 typedef SELECT IfcOrientationSelect;
201 // C++ wrapper type for IfcIlluminanceMeasure
202 typedef REAL IfcIlluminanceMeasure;
203 // C++ wrapper type for IfcFireSuppressionTerminalTypeEnum
204 typedef ENUMERATION IfcFireSuppressionTerminalTypeEnum;
205 // C++ wrapper type for IfcFontStyle
206 typedef STRING IfcFontStyle;
207 // C++ wrapper type for IfcMomentOfInertiaMeasure
208 typedef REAL IfcMomentOfInertiaMeasure;
209 // C++ wrapper type for IfcModulusOfSubgradeReactionMeasure
210 typedef REAL IfcModulusOfSubgradeReactionMeasure;
211 // C++ wrapper type for IfcHumidifierTypeEnum
212 typedef ENUMERATION IfcHumidifierTypeEnum;
213 // C++ wrapper type for IfcPresentationStyleSelect
214 typedef SELECT IfcPresentationStyleSelect;
215 // C++ wrapper type for IfcThermalTransmittanceMeasure
216 typedef REAL IfcThermalTransmittanceMeasure;
217 // C++ wrapper type for IfcRibPlateDirectionEnum
218 typedef ENUMERATION IfcRibPlateDirectionEnum;
219 // C++ wrapper type for IfcClassificationNotationSelect
220 typedef SELECT IfcClassificationNotationSelect;
221 // C++ wrapper type for IfcMinuteInHour
222 typedef INTEGER IfcMinuteInHour;
223 // C++ wrapper type for IfcInternalOrExternalEnum
224 typedef ENUMERATION IfcInternalOrExternalEnum;
225 // C++ wrapper type for IfcRotationalFrequencyMeasure
226 typedef REAL IfcRotationalFrequencyMeasure;
227 // C++ wrapper type for IfcSanitaryTerminalTypeEnum
228 typedef ENUMERATION IfcSanitaryTerminalTypeEnum;
229 // C++ wrapper type for IfcSymbolStyleSelect
230 typedef SELECT IfcSymbolStyleSelect;
231 // C++ wrapper type for IfcElementCompositionEnum
232 typedef ENUMERATION IfcElementCompositionEnum;
233 // C++ wrapper type for IfcTextPath
234 typedef ENUMERATION IfcTextPath;
235 // C++ wrapper type for IfcPowerMeasure
236 typedef REAL IfcPowerMeasure;
237 // C++ wrapper type for IfcSurfaceStyleElementSelect
238 typedef SELECT IfcSurfaceStyleElementSelect;
239 // C++ wrapper type for IfcResourceConsumptionEnum
240 typedef ENUMERATION IfcResourceConsumptionEnum;
241 // C++ wrapper type for IfcElectricCapacitanceMeasure
242 typedef REAL IfcElectricCapacitanceMeasure;
243 // C++ wrapper type for IfcLayerSetDirectionEnum
244 typedef ENUMERATION IfcLayerSetDirectionEnum;
245 // C++ wrapper type for IfcRailingTypeEnum
246 typedef ENUMERATION IfcRailingTypeEnum;
247 // C++ wrapper type for IfcObjectiveEnum
248 typedef ENUMERATION IfcObjectiveEnum;
249 // C++ wrapper type for IfcDocumentSelect
250 typedef SELECT IfcDocumentSelect;
251 // C++ wrapper type for IfcModulusOfLinearSubgradeReactionMeasure
252 typedef REAL IfcModulusOfLinearSubgradeReactionMeasure;
253 // C++ wrapper type for IfcThermalAdmittanceMeasure
254 typedef REAL IfcThermalAdmittanceMeasure;
255 // C++ wrapper type for IfcTransitionCode
256 typedef ENUMERATION IfcTransitionCode;
257 // C++ wrapper type for IfcConnectionTypeEnum
258 typedef ENUMERATION IfcConnectionTypeEnum;
259 // C++ wrapper type for IfcMonetaryMeasure
260 typedef REAL IfcMonetaryMeasure;
261 // C++ wrapper type for IfcStackTerminalTypeEnum
262 typedef ENUMERATION IfcStackTerminalTypeEnum;
263 // C++ wrapper type for IfcColour
264 typedef SELECT IfcColour;
265 // C++ wrapper type for IfcText
266 typedef STRING IfcText;
267 // C++ wrapper type for IfcContextDependentMeasure
268 typedef REAL IfcContextDependentMeasure;
269 // C++ wrapper type for IfcThermalConductivityMeasure
270 typedef REAL IfcThermalConductivityMeasure;
271 // C++ wrapper type for IfcProjectedOrTrueLengthEnum
272 typedef ENUMERATION IfcProjectedOrTrueLengthEnum;
273 // C++ wrapper type for IfcPressureMeasure
274 typedef REAL IfcPressureMeasure;
275 // C++ wrapper type for IfcMoistureDiffusivityMeasure
276 typedef REAL IfcMoistureDiffusivityMeasure;
277 // C++ wrapper type for IfcBooleanOperator
278 typedef ENUMERATION IfcBooleanOperator;
279 // C++ wrapper type for IfcPropertySourceEnum
280 typedef ENUMERATION IfcPropertySourceEnum;
281 // C++ wrapper type for IfcTimeStamp
282 typedef INTEGER IfcTimeStamp;
283 // C++ wrapper type for IfcMaterialSelect
284 typedef SELECT IfcMaterialSelect;
285 // C++ wrapper type for IfcGloballyUniqueId
286 typedef STRING IfcGloballyUniqueId;
287 // C++ wrapper type for IfcReflectanceMethodEnum
288 typedef ENUMERATION IfcReflectanceMethodEnum;
289 // C++ wrapper type for IfcVaporPermeabilityMeasure
290 typedef REAL IfcVaporPermeabilityMeasure;
291 // C++ wrapper type for IfcTimeSeriesScheduleTypeEnum
292 typedef ENUMERATION IfcTimeSeriesScheduleTypeEnum;
293 // C++ wrapper type for IfcLinearMomentMeasure
294 typedef REAL IfcLinearMomentMeasure;
295 // C++ wrapper type for IfcGeometricSetSelect
296 typedef SELECT IfcGeometricSetSelect;
297 // C++ wrapper type for IfcSectionModulusMeasure
298 typedef REAL IfcSectionModulusMeasure;
299 // C++ wrapper type for IfcBSplineCurveForm
300 typedef ENUMERATION IfcBSplineCurveForm;
301 // C++ wrapper type for IfcDimensionExtentUsage
302 typedef ENUMERATION IfcDimensionExtentUsage;
303 // C++ wrapper type for IfcThermalExpansionCoefficientMeasure
304 typedef REAL IfcThermalExpansionCoefficientMeasure;
305 // C++ wrapper type for IfcHourInDay
306 typedef INTEGER IfcHourInDay;
307 // C++ wrapper type for IfcLinearVelocityMeasure
308 typedef REAL IfcLinearVelocityMeasure;
309 // C++ wrapper type for IfcTorqueMeasure
310 typedef REAL IfcTorqueMeasure;
311 // C++ wrapper type for IfcTemperatureGradientMeasure
312 typedef REAL IfcTemperatureGradientMeasure;
313 // C++ wrapper type for IfcFillStyleSelect
314 typedef SELECT IfcFillStyleSelect;
315 // C++ wrapper type for IfcElectricChargeMeasure
316 typedef REAL IfcElectricChargeMeasure;
317 // C++ wrapper type for IfcHeatExchangerTypeEnum
318 typedef ENUMERATION IfcHeatExchangerTypeEnum;
319 // C++ wrapper type for IfcElectricCurrentEnum
320 typedef ENUMERATION IfcElectricCurrentEnum;
321 // C++ wrapper type for IfcDaylightSavingHour
322 typedef INTEGER IfcDaylightSavingHour;
323 // C++ wrapper type for IfcShell
324 typedef SELECT IfcShell;
325 // C++ wrapper type for IfcDoseEquivalentMeasure
326 typedef REAL IfcDoseEquivalentMeasure;
327 // C++ wrapper type for IfcProjectOrderTypeEnum
328 typedef ENUMERATION IfcProjectOrderTypeEnum;
329 // C++ wrapper type for IfcDerivedMeasureValue
330 typedef SELECT IfcDerivedMeasureValue;
331 // C++ wrapper type for IfcLightDistributionCurveEnum
332 typedef ENUMERATION IfcLightDistributionCurveEnum;
333 // C++ wrapper type for IfcWarpingMomentMeasure
334 typedef REAL IfcWarpingMomentMeasure;
335 // C++ wrapper type for IfcMemberTypeEnum
336 typedef ENUMERATION IfcMemberTypeEnum;
63337 // C++ wrapper type for IfcSoundPowerMeasure
64338 typedef REAL IfcSoundPowerMeasure;
339 // C++ wrapper type for IfcTextAlignment
340 typedef STRING IfcTextAlignment;
341 // C++ wrapper type for IfcCurveOrEdgeCurve
342 typedef SELECT IfcCurveOrEdgeCurve;
343 // C++ wrapper type for IfcMassFlowRateMeasure
344 typedef REAL IfcMassFlowRateMeasure;
345 // C++ wrapper type for IfcIsothermalMoistureCapacityMeasure
346 typedef REAL IfcIsothermalMoistureCapacityMeasure;
347 // C++ wrapper type for IfcCsgSelect
348 typedef SELECT IfcCsgSelect;
349 // C++ wrapper type for IfcCoolingTowerTypeEnum
350 typedef ENUMERATION IfcCoolingTowerTypeEnum;
351 // C++ wrapper type for IfcMassMeasure
352 typedef REAL IfcMassMeasure;
353 // C++ wrapper type for IfcPileConstructionEnum
354 typedef ENUMERATION IfcPileConstructionEnum;
65355 // C++ wrapper type for IfcDoorStyleOperationEnum
66356 typedef ENUMERATION IfcDoorStyleOperationEnum;
67 // C++ wrapper type for IfcRotationalFrequencyMeasure
68 typedef REAL IfcRotationalFrequencyMeasure;
69 // C++ wrapper type for IfcCharacterStyleSelect
70 typedef SELECT IfcCharacterStyleSelect;
357 // C++ wrapper type for IfcFlowDirectionEnum
358 typedef ENUMERATION IfcFlowDirectionEnum;
359 // C++ wrapper type for IfcThermalLoadSourceEnum
360 typedef ENUMERATION IfcThermalLoadSourceEnum;
361 // C++ wrapper type for IfcLengthMeasure
362 typedef REAL IfcLengthMeasure;
363 // C++ wrapper type for IfcConstraintEnum
364 typedef ENUMERATION IfcConstraintEnum;
365 // C++ wrapper type for IfcAxis2Placement
366 typedef SELECT IfcAxis2Placement;
367 // C++ wrapper type for IfcLoadGroupTypeEnum
368 typedef ENUMERATION IfcLoadGroupTypeEnum;
369 // C++ wrapper type for IfcValue
370 typedef SELECT IfcValue;
371 // C++ wrapper type for IfcReinforcingBarSurfaceEnum
372 typedef ENUMERATION IfcReinforcingBarSurfaceEnum;
373 // C++ wrapper type for IfcProjectOrderRecordTypeEnum
374 typedef ENUMERATION IfcProjectOrderRecordTypeEnum;
375 // C++ wrapper type for IfcDateTimeSelect
376 typedef SELECT IfcDateTimeSelect;
377 // C++ wrapper type for IfcStructuralSurfaceTypeEnum
378 typedef ENUMERATION IfcStructuralSurfaceTypeEnum;
379 // C++ wrapper type for IfcPermeableCoveringOperationEnum
380 typedef ENUMERATION IfcPermeableCoveringOperationEnum;
381 // C++ wrapper type for IfcFontWeight
382 typedef STRING IfcFontWeight;
383 // C++ wrapper type for IfcPHMeasure
384 typedef REAL IfcPHMeasure;
385 // C++ wrapper type for IfcDescriptiveMeasure
386 typedef STRING IfcDescriptiveMeasure;
387 // C++ wrapper type for IfcCurveStyleFontSelect
388 typedef SELECT IfcCurveStyleFontSelect;
389 // C++ wrapper type for IfcUnit
390 typedef SELECT IfcUnit;
391 // C++ wrapper type for IfcHatchLineDistanceSelect
392 typedef SELECT IfcHatchLineDistanceSelect;
393 // C++ wrapper type for IfcTextStyleSelect
394 typedef SELECT IfcTextStyleSelect;
395 // C++ wrapper type for IfcMetricValueSelect
396 typedef SELECT IfcMetricValueSelect;
397 // C++ wrapper type for IfcVectorOrDirection
398 typedef SELECT IfcVectorOrDirection;
399 // C++ wrapper type for IfcAssemblyPlaceEnum
400 typedef ENUMERATION IfcAssemblyPlaceEnum;
401 // C++ wrapper type for IfcAirTerminalTypeEnum
402 typedef ENUMERATION IfcAirTerminalTypeEnum;
403 // C++ wrapper type for IfcCoveringTypeEnum
404 typedef ENUMERATION IfcCoveringTypeEnum;
405 // C++ wrapper type for IfcPlanarForceMeasure
406 typedef REAL IfcPlanarForceMeasure;
407 // C++ wrapper type for IfcValveTypeEnum
408 typedef ENUMERATION IfcValveTypeEnum;
409 // C++ wrapper type for IfcAlarmTypeEnum
410 typedef ENUMERATION IfcAlarmTypeEnum;
411 // C++ wrapper type for IfcDynamicViscosityMeasure
412 typedef REAL IfcDynamicViscosityMeasure;
413 // C++ wrapper type for IfcCurrencyEnum
414 typedef ENUMERATION IfcCurrencyEnum;
415 // C++ wrapper type for IfcModulusOfRotationalSubgradeReactionMeasure
416 typedef REAL IfcModulusOfRotationalSubgradeReactionMeasure;
417 // C++ wrapper type for IfcCableCarrierFittingTypeEnum
418 typedef ENUMERATION IfcCableCarrierFittingTypeEnum;
419 // C++ wrapper type for IfcBoolean
420 typedef BOOLEAN IfcBoolean;
421 // C++ wrapper type for IfcActionSourceTypeEnum
422 typedef ENUMERATION IfcActionSourceTypeEnum;
423 // C++ wrapper type for IfcStructuralActivityAssignmentSelect
424 typedef SELECT IfcStructuralActivityAssignmentSelect;
425 // C++ wrapper type for IfcDistributionChamberElementTypeEnum
426 typedef ENUMERATION IfcDistributionChamberElementTypeEnum;
427 // C++ wrapper type for IfcEvaporativeCoolerTypeEnum
428 typedef ENUMERATION IfcEvaporativeCoolerTypeEnum;
429 // C++ wrapper type for IfcMagneticFluxDensityMeasure
430 typedef REAL IfcMagneticFluxDensityMeasure;
431 // C++ wrapper type for IfcLightDistributionDataSourceSelect
432 typedef SELECT IfcLightDistributionDataSourceSelect;
433 // C++ wrapper type for IfcTubeBundleTypeEnum
434 typedef ENUMERATION IfcTubeBundleTypeEnum;
435 // C++ wrapper type for IfcAccelerationMeasure
436 typedef REAL IfcAccelerationMeasure;
437 // C++ wrapper type for IfcBoilerTypeEnum
438 typedef ENUMERATION IfcBoilerTypeEnum;
439 // C++ wrapper type for IfcRampTypeEnum
440 typedef ENUMERATION IfcRampTypeEnum;
441 // C++ wrapper type for IfcLuminousIntensityDistributionMeasure
442 typedef REAL IfcLuminousIntensityDistributionMeasure;
443 // C++ wrapper type for IfcTrimmingPreference
444 typedef ENUMERATION IfcTrimmingPreference;
445 // C++ wrapper type for IfcSpecificHeatCapacityMeasure
446 typedef REAL IfcSpecificHeatCapacityMeasure;
447 // C++ wrapper type for IfcAmountOfSubstanceMeasure
448 typedef REAL IfcAmountOfSubstanceMeasure;
449 // C++ wrapper type for IfcRoleEnum
450 typedef ENUMERATION IfcRoleEnum;
451 // C++ wrapper type for IfcDocumentConfidentialityEnum
452 typedef ENUMERATION IfcDocumentConfidentialityEnum;
453 // C++ wrapper type for IfcFrequencyMeasure
454 typedef REAL IfcFrequencyMeasure;
455 // C++ wrapper type for IfcSectionTypeEnum
456 typedef ENUMERATION IfcSectionTypeEnum;
457 // C++ wrapper type for IfcElementAssemblyTypeEnum
458 typedef ENUMERATION IfcElementAssemblyTypeEnum;
459 // C++ wrapper type for IfcFootingTypeEnum
460 typedef ENUMERATION IfcFootingTypeEnum;
461 // C++ wrapper type for IfcLayeredItem
462 typedef SELECT IfcLayeredItem;
463 // C++ wrapper type for IfcCableSegmentTypeEnum
464 typedef ENUMERATION IfcCableSegmentTypeEnum;
465 // C++ wrapper type for IfcDefinedSymbolSelect
466 typedef SELECT IfcDefinedSymbolSelect;
467 // C++ wrapper type for IfcBuildingElementProxyTypeEnum
468 typedef ENUMERATION IfcBuildingElementProxyTypeEnum;
469 // C++ wrapper type for IfcElectricGeneratorTypeEnum
470 typedef ENUMERATION IfcElectricGeneratorTypeEnum;
471 // C++ wrapper type for IfcRotationalStiffnessMeasure
472 typedef REAL IfcRotationalStiffnessMeasure;
473 // C++ wrapper type for IfcSpaceHeaterTypeEnum
474 typedef ENUMERATION IfcSpaceHeaterTypeEnum;
475 // C++ wrapper type for IfcAreaMeasure
476 typedef REAL IfcAreaMeasure;
477 // C++ wrapper type for IfcLabel
478 typedef STRING IfcLabel;
479 // C++ wrapper type for IfcCostScheduleTypeEnum
480 typedef ENUMERATION IfcCostScheduleTypeEnum;
481 // C++ wrapper type for IfcSwitchingDeviceTypeEnum
482 typedef ENUMERATION IfcSwitchingDeviceTypeEnum;
71483 // C++ wrapper type for IfcElectricTimeControlTypeEnum
72484 typedef ENUMERATION IfcElectricTimeControlTypeEnum;
73 // C++ wrapper type for IfcAirTerminalTypeEnum
74 typedef ENUMERATION IfcAirTerminalTypeEnum;
75 // C++ wrapper type for IfcProjectOrderTypeEnum
76 typedef ENUMERATION IfcProjectOrderTypeEnum;
77 // C++ wrapper type for IfcSequenceEnum
78 typedef ENUMERATION IfcSequenceEnum;
79 // C++ wrapper type for IfcSpecificHeatCapacityMeasure
80 typedef REAL IfcSpecificHeatCapacityMeasure;
81 // C++ wrapper type for IfcHeatingValueMeasure
82 typedef REAL IfcHeatingValueMeasure;
83 // C++ wrapper type for IfcRibPlateDirectionEnum
84 typedef ENUMERATION IfcRibPlateDirectionEnum;
85 // C++ wrapper type for IfcSensorTypeEnum
86 typedef ENUMERATION IfcSensorTypeEnum;
485 // C++ wrapper type for IfcFilterTypeEnum
486 typedef ENUMERATION IfcFilterTypeEnum;
487 // C++ wrapper type for IfcPositiveLengthMeasure
488 typedef REAL IfcPositiveLengthMeasure;
489 // C++ wrapper type for IfcNullStyle
490 typedef ENUMERATION IfcNullStyle;
491 // C++ wrapper type for IfcConditionCriterionSelect
492 typedef SELECT IfcConditionCriterionSelect;
493 // C++ wrapper type for IfcShearModulusMeasure
494 typedef REAL IfcShearModulusMeasure;
495 // C++ wrapper type for IfcNormalisedRatioMeasure
496 typedef REAL IfcNormalisedRatioMeasure;
497 // C++ wrapper type for IfcDoorPanelOperationEnum
498 typedef ENUMERATION IfcDoorPanelOperationEnum;
499 // C++ wrapper type for IfcPointOrVertexPoint
500 typedef SELECT IfcPointOrVertexPoint;
501 // C++ wrapper type for IfcRoofTypeEnum
502 typedef ENUMERATION IfcRoofTypeEnum;
503 // C++ wrapper type for IfcCountMeasure
504 typedef NUMBER IfcCountMeasure;
505 // C++ wrapper type for IfcElectricConductanceMeasure
506 typedef REAL IfcElectricConductanceMeasure;
507 // C++ wrapper type for IfcProcedureTypeEnum
508 typedef ENUMERATION IfcProcedureTypeEnum;
509 // C++ wrapper type for IfcFlowInstrumentTypeEnum
510 typedef ENUMERATION IfcFlowInstrumentTypeEnum;
511 // C++ wrapper type for IfcElectricMotorTypeEnum
512 typedef ENUMERATION IfcElectricMotorTypeEnum;
513 // C++ wrapper type for IfcSurfaceSide
514 typedef ENUMERATION IfcSurfaceSide;
515 // C++ wrapper type for IfcStructuralCurveTypeEnum
516 typedef ENUMERATION IfcStructuralCurveTypeEnum;
517 // C++ wrapper type for IfcCondenserTypeEnum
518 typedef ENUMERATION IfcCondenserTypeEnum;
519 // C++ wrapper type for IfcLinearStiffnessMeasure
520 typedef REAL IfcLinearStiffnessMeasure;
521 // C++ wrapper type for IfcUnitEnum
522 typedef ENUMERATION IfcUnitEnum;
523 // C++ wrapper type for IfcOccupantTypeEnum
524 typedef ENUMERATION IfcOccupantTypeEnum;
525 // C++ wrapper type for IfcThermalLoadTypeEnum
526 typedef ENUMERATION IfcThermalLoadTypeEnum;
527 // C++ wrapper type for IfcReinforcingBarRoleEnum
528 typedef ENUMERATION IfcReinforcingBarRoleEnum;
529 // C++ wrapper type for IfcBenchmarkEnum
530 typedef ENUMERATION IfcBenchmarkEnum;
531 // C++ wrapper type for IfcPositivePlaneAngleMeasure
532 typedef REAL IfcPositivePlaneAngleMeasure;
533 // C++ wrapper type for IfcTextTransformation
534 typedef STRING IfcTextTransformation;
535 // C++ wrapper type for IfcDraughtingCalloutElement
536 typedef SELECT IfcDraughtingCalloutElement;
537 // C++ wrapper type for IfcRatioMeasure
538 typedef REAL IfcRatioMeasure;
539 // C++ wrapper type for IfcSolidAngleMeasure
540 typedef REAL IfcSolidAngleMeasure;
541 // C++ wrapper type for IfcPipeSegmentTypeEnum
542 typedef ENUMERATION IfcPipeSegmentTypeEnum;
543 // C++ wrapper type for IfcCableCarrierSegmentTypeEnum
544 typedef ENUMERATION IfcCableCarrierSegmentTypeEnum;
545 // C++ wrapper type for IfcColourOrFactor
546 typedef SELECT IfcColourOrFactor;
547 // C++ wrapper type for IfcIdentifier
548 typedef STRING IfcIdentifier;
549 // C++ wrapper type for IfcTendonTypeEnum
550 typedef ENUMERATION IfcTendonTypeEnum;
551 // C++ wrapper type for IfcControllerTypeEnum
552 typedef ENUMERATION IfcControllerTypeEnum;
553 // C++ wrapper type for IfcRadioActivityMeasure
554 typedef REAL IfcRadioActivityMeasure;
555 // C++ wrapper type for IfcTimeMeasure
556 typedef REAL IfcTimeMeasure;
557 // C++ wrapper type for IfcPumpTypeEnum
558 typedef ENUMERATION IfcPumpTypeEnum;
87559 // C++ wrapper type for IfcElectricHeaterTypeEnum
88560 typedef ENUMERATION IfcElectricHeaterTypeEnum;
89 // C++ wrapper type for IfcObjectiveEnum
90 typedef ENUMERATION IfcObjectiveEnum;
91 // C++ wrapper type for IfcTextStyleSelect
92 typedef SELECT IfcTextStyleSelect;
93 // C++ wrapper type for IfcColumnTypeEnum
94 typedef ENUMERATION IfcColumnTypeEnum;
95 // C++ wrapper type for IfcGasTerminalTypeEnum
96 typedef ENUMERATION IfcGasTerminalTypeEnum;
97 // C++ wrapper type for IfcMassDensityMeasure
98 typedef REAL IfcMassDensityMeasure;
99 // C++ wrapper type for IfcSimpleValue
100 typedef SELECT IfcSimpleValue;
101 // C++ wrapper type for IfcElectricConductanceMeasure
102 typedef REAL IfcElectricConductanceMeasure;
103 // C++ wrapper type for IfcBuildingElementProxyTypeEnum
104 typedef ENUMERATION IfcBuildingElementProxyTypeEnum;
105 // C++ wrapper type for IfcJunctionBoxTypeEnum
106 typedef ENUMERATION IfcJunctionBoxTypeEnum;
107 // C++ wrapper type for IfcModulusOfElasticityMeasure
108 typedef REAL IfcModulusOfElasticityMeasure;
109 // C++ wrapper type for IfcActionSourceTypeEnum
110 typedef ENUMERATION IfcActionSourceTypeEnum;
111 // C++ wrapper type for IfcSIUnitName
112 typedef ENUMERATION IfcSIUnitName;
113 // C++ wrapper type for IfcRotationalMassMeasure
114 typedef REAL IfcRotationalMassMeasure;
115 // C++ wrapper type for IfcMemberTypeEnum
116 typedef ENUMERATION IfcMemberTypeEnum;
117 // C++ wrapper type for IfcTextDecoration
118 typedef STRING IfcTextDecoration;
119 // C++ wrapper type for IfcPositiveLengthMeasure
120 typedef REAL IfcPositiveLengthMeasure;
121 // C++ wrapper type for IfcAmountOfSubstanceMeasure
122 typedef REAL IfcAmountOfSubstanceMeasure;
123 // C++ wrapper type for IfcDoorStyleConstructionEnum
124 typedef ENUMERATION IfcDoorStyleConstructionEnum;
125 // C++ wrapper type for IfcAngularVelocityMeasure
126 typedef REAL IfcAngularVelocityMeasure;
127 // C++ wrapper type for IfcDirectionSenseEnum
128 typedef ENUMERATION IfcDirectionSenseEnum;
129 // C++ wrapper type for IfcNullStyle
130 typedef ENUMERATION IfcNullStyle;
131 // C++ wrapper type for IfcMonthInYearNumber
132 typedef INTEGER IfcMonthInYearNumber;
133 // C++ wrapper type for IfcRampFlightTypeEnum
134 typedef ENUMERATION IfcRampFlightTypeEnum;
135 // C++ wrapper type for IfcWindowStyleOperationEnum
136 typedef ENUMERATION IfcWindowStyleOperationEnum;
137 // C++ wrapper type for IfcCurvatureMeasure
138 typedef REAL IfcCurvatureMeasure;
139 // C++ wrapper type for IfcBooleanOperator
140 typedef ENUMERATION IfcBooleanOperator;
141 // C++ wrapper type for IfcDuctFittingTypeEnum
142 typedef ENUMERATION IfcDuctFittingTypeEnum;
143 // C++ wrapper type for IfcCurrencyEnum
144 typedef ENUMERATION IfcCurrencyEnum;
145 // C++ wrapper type for IfcObjectTypeEnum
146 typedef ENUMERATION IfcObjectTypeEnum;
147 // C++ wrapper type for IfcThermalLoadTypeEnum
148 typedef ENUMERATION IfcThermalLoadTypeEnum;
149 // C++ wrapper type for IfcIonConcentrationMeasure
150 typedef REAL IfcIonConcentrationMeasure;
151 // C++ wrapper type for IfcObjectReferenceSelect
152 typedef SELECT IfcObjectReferenceSelect;
153 // C++ wrapper type for IfcClassificationNotationSelect
154 typedef SELECT IfcClassificationNotationSelect;
155 // C++ wrapper type for IfcBSplineCurveForm
156 typedef ENUMERATION IfcBSplineCurveForm;
157 // C++ wrapper type for IfcElementCompositionEnum
158 typedef ENUMERATION IfcElementCompositionEnum;
159 // C++ wrapper type for IfcDraughtingCalloutElement
160 typedef SELECT IfcDraughtingCalloutElement;
161 // C++ wrapper type for IfcFillStyleSelect
162 typedef SELECT IfcFillStyleSelect;
163 // C++ wrapper type for IfcHeatFluxDensityMeasure
164 typedef REAL IfcHeatFluxDensityMeasure;
165 // C++ wrapper type for IfcGeometricProjectionEnum
166 typedef ENUMERATION IfcGeometricProjectionEnum;
167 // C++ wrapper type for IfcFontVariant
168 typedef STRING IfcFontVariant;
169 // C++ wrapper type for IfcThermalResistanceMeasure
170 typedef REAL IfcThermalResistanceMeasure;
171 // C++ wrapper type for IfcReflectanceMethodEnum
172 typedef ENUMERATION IfcReflectanceMethodEnum;
173 // C++ wrapper type for IfcSlabTypeEnum
174 typedef ENUMERATION IfcSlabTypeEnum;
175 // C++ wrapper type for IfcPositiveRatioMeasure
176 typedef REAL IfcPositiveRatioMeasure;
177 // C++ wrapper type for IfcInternalOrExternalEnum
178 typedef ENUMERATION IfcInternalOrExternalEnum;
179 // C++ wrapper type for IfcDimensionExtentUsage
180 typedef ENUMERATION IfcDimensionExtentUsage;
181 // C++ wrapper type for IfcPipeFittingTypeEnum
182 typedef ENUMERATION IfcPipeFittingTypeEnum;
183 // C++ wrapper type for IfcSanitaryTerminalTypeEnum
184 typedef ENUMERATION IfcSanitaryTerminalTypeEnum;
185 // C++ wrapper type for IfcMinuteInHour
186 typedef INTEGER IfcMinuteInHour;
187 // C++ wrapper type for IfcWallTypeEnum
188 typedef ENUMERATION IfcWallTypeEnum;
189 // C++ wrapper type for IfcMolecularWeightMeasure
190 typedef REAL IfcMolecularWeightMeasure;
191 // C++ wrapper type for IfcUnitaryEquipmentTypeEnum
192 typedef ENUMERATION IfcUnitaryEquipmentTypeEnum;
193 // C++ wrapper type for IfcProcedureTypeEnum
194 typedef ENUMERATION IfcProcedureTypeEnum;
195 // C++ wrapper type for IfcDistributionChamberElementTypeEnum
196 typedef ENUMERATION IfcDistributionChamberElementTypeEnum;
197 // C++ wrapper type for IfcTextPath
198 typedef ENUMERATION IfcTextPath;
199 // C++ wrapper type for IfcCostScheduleTypeEnum
200 typedef ENUMERATION IfcCostScheduleTypeEnum;
201 // C++ wrapper type for IfcShell
202 typedef SELECT IfcShell;
203 // C++ wrapper type for IfcLinearMomentMeasure
204 typedef REAL IfcLinearMomentMeasure;
205 // C++ wrapper type for IfcElectricCurrentMeasure
206 typedef REAL IfcElectricCurrentMeasure;
207 // C++ wrapper type for IfcDaylightSavingHour
208 typedef INTEGER IfcDaylightSavingHour;
209 // C++ wrapper type for IfcNormalisedRatioMeasure
210 typedef REAL IfcNormalisedRatioMeasure;
211 // C++ wrapper type for IfcFanTypeEnum
212 typedef ENUMERATION IfcFanTypeEnum;
213 // C++ wrapper type for IfcContextDependentMeasure
214 typedef REAL IfcContextDependentMeasure;
215 // C++ wrapper type for IfcAheadOrBehind
216 typedef ENUMERATION IfcAheadOrBehind;
217 // C++ wrapper type for IfcFontStyle
218 typedef STRING IfcFontStyle;
219 // C++ wrapper type for IfcCooledBeamTypeEnum
220 typedef ENUMERATION IfcCooledBeamTypeEnum;
221 // C++ wrapper type for IfcSurfaceStyleElementSelect
222 typedef SELECT IfcSurfaceStyleElementSelect;
223 // C++ wrapper type for IfcYearNumber
224 typedef INTEGER IfcYearNumber;
225 // C++ wrapper type for IfcLabel
226 typedef STRING IfcLabel;
227 // C++ wrapper type for IfcTimeStamp
228 typedef INTEGER IfcTimeStamp;
229 // C++ wrapper type for IfcFireSuppressionTerminalTypeEnum
230 typedef ENUMERATION IfcFireSuppressionTerminalTypeEnum;
231 // C++ wrapper type for IfcDocumentConfidentialityEnum
232 typedef ENUMERATION IfcDocumentConfidentialityEnum;
233 // C++ wrapper type for IfcColourOrFactor
234 typedef SELECT IfcColourOrFactor;
235 // C++ wrapper type for IfcAirTerminalBoxTypeEnum
236 typedef ENUMERATION IfcAirTerminalBoxTypeEnum;
237 // C++ wrapper type for IfcNumericMeasure
238 typedef NUMBER IfcNumericMeasure;
239 // C++ wrapper type for IfcDerivedUnitEnum
240 typedef ENUMERATION IfcDerivedUnitEnum;
241 // C++ wrapper type for IfcCurveOrEdgeCurve
242 typedef SELECT IfcCurveOrEdgeCurve;
243 // C++ wrapper type for IfcLightEmissionSourceEnum
244 typedef ENUMERATION IfcLightEmissionSourceEnum;
245 // C++ wrapper type for IfcKinematicViscosityMeasure
246 typedef REAL IfcKinematicViscosityMeasure;
247 // C++ wrapper type for IfcBoxAlignment
248 typedef STRING IfcBoxAlignment;
249 // C++ wrapper type for IfcDocumentSelect
250 typedef SELECT IfcDocumentSelect;
251 // C++ wrapper type for IfcCableCarrierFittingTypeEnum
252 typedef ENUMERATION IfcCableCarrierFittingTypeEnum;
253 // C++ wrapper type for IfcPumpTypeEnum
254 typedef ENUMERATION IfcPumpTypeEnum;
255 // C++ wrapper type for IfcHourInDay
256 typedef INTEGER IfcHourInDay;
257 // C++ wrapper type for IfcProjectOrderRecordTypeEnum
258 typedef ENUMERATION IfcProjectOrderRecordTypeEnum;
259 // C++ wrapper type for IfcWindowStyleConstructionEnum
260 typedef ENUMERATION IfcWindowStyleConstructionEnum;
261 // C++ wrapper type for IfcPresentationStyleSelect
262 typedef SELECT IfcPresentationStyleSelect;
263 // C++ wrapper type for IfcCableSegmentTypeEnum
264 typedef ENUMERATION IfcCableSegmentTypeEnum;
265 // C++ wrapper type for IfcWasteTerminalTypeEnum
266 typedef ENUMERATION IfcWasteTerminalTypeEnum;
267 // C++ wrapper type for IfcIsothermalMoistureCapacityMeasure
268 typedef REAL IfcIsothermalMoistureCapacityMeasure;
269 // C++ wrapper type for IfcIdentifier
270 typedef STRING IfcIdentifier;
271 // C++ wrapper type for IfcRadioActivityMeasure
272 typedef REAL IfcRadioActivityMeasure;
273 // C++ wrapper type for IfcSymbolStyleSelect
274 typedef SELECT IfcSymbolStyleSelect;
275 // C++ wrapper type for IfcRoofTypeEnum
276 typedef ENUMERATION IfcRoofTypeEnum;
277 // C++ wrapper type for IfcReal
278 typedef REAL IfcReal;
279 // C++ wrapper type for IfcRoleEnum
280 typedef ENUMERATION IfcRoleEnum;
281 // C++ wrapper type for IfcMeasureValue
282 typedef SELECT IfcMeasureValue;
283 // C++ wrapper type for IfcPileTypeEnum
284 typedef ENUMERATION IfcPileTypeEnum;
285 // C++ wrapper type for IfcElectricCurrentEnum
286 typedef ENUMERATION IfcElectricCurrentEnum;
287 // C++ wrapper type for IfcTextTransformation
288 typedef STRING IfcTextTransformation;
289 // C++ wrapper type for IfcFilterTypeEnum
290 typedef ENUMERATION IfcFilterTypeEnum;
291 // C++ wrapper type for IfcTransformerTypeEnum
292 typedef ENUMERATION IfcTransformerTypeEnum;
293 // C++ wrapper type for IfcSurfaceSide
294 typedef ENUMERATION IfcSurfaceSide;
295 // C++ wrapper type for IfcThermalTransmittanceMeasure
296 typedef REAL IfcThermalTransmittanceMeasure;
297 // C++ wrapper type for IfcTubeBundleTypeEnum
298 typedef ENUMERATION IfcTubeBundleTypeEnum;
299 // C++ wrapper type for IfcLightFixtureTypeEnum
300 typedef ENUMERATION IfcLightFixtureTypeEnum;
301 // C++ wrapper type for IfcInductanceMeasure
302 typedef REAL IfcInductanceMeasure;
303 // C++ wrapper type for IfcGlobalOrLocalEnum
304 typedef ENUMERATION IfcGlobalOrLocalEnum;
305 // C++ wrapper type for IfcOutletTypeEnum
306 typedef ENUMERATION IfcOutletTypeEnum;
307 // C++ wrapper type for IfcWorkControlTypeEnum
308 typedef ENUMERATION IfcWorkControlTypeEnum;
309 // C++ wrapper type for IfcWarpingMomentMeasure
310 typedef REAL IfcWarpingMomentMeasure;
311 // C++ wrapper type for IfcDynamicViscosityMeasure
312 typedef REAL IfcDynamicViscosityMeasure;
313 // C++ wrapper type for IfcEnergySequenceEnum
314 typedef ENUMERATION IfcEnergySequenceEnum;
315 // C++ wrapper type for IfcFillAreaStyleTileShapeSelect
316 typedef SELECT IfcFillAreaStyleTileShapeSelect;
317 // C++ wrapper type for IfcPointOrVertexPoint
318 typedef SELECT IfcPointOrVertexPoint;
319 // C++ wrapper type for IfcVibrationIsolatorTypeEnum
320 typedef ENUMERATION IfcVibrationIsolatorTypeEnum;
321 // C++ wrapper type for IfcTankTypeEnum
322 typedef ENUMERATION IfcTankTypeEnum;
323 // C++ wrapper type for IfcTimeSeriesDataTypeEnum
324 typedef ENUMERATION IfcTimeSeriesDataTypeEnum;
325 // C++ wrapper type for IfcSurfaceTextureEnum
326 typedef ENUMERATION IfcSurfaceTextureEnum;
327 // C++ wrapper type for IfcAddressTypeEnum
328 typedef ENUMERATION IfcAddressTypeEnum;
329 // C++ wrapper type for IfcChillerTypeEnum
330 typedef ENUMERATION IfcChillerTypeEnum;
331 // C++ wrapper type for IfcLightDistributionCurveEnum
332 typedef ENUMERATION IfcLightDistributionCurveEnum;
333 // C++ wrapper type for IfcReinforcingBarRoleEnum
334 typedef ENUMERATION IfcReinforcingBarRoleEnum;
335 // C++ wrapper type for IfcResourceConsumptionEnum
336 typedef ENUMERATION IfcResourceConsumptionEnum;
337 // C++ wrapper type for IfcCsgSelect
338 typedef SELECT IfcCsgSelect;
339 // C++ wrapper type for IfcModulusOfLinearSubgradeReactionMeasure
340 typedef REAL IfcModulusOfLinearSubgradeReactionMeasure;
341 // C++ wrapper type for IfcEvaporatorTypeEnum
342 typedef ENUMERATION IfcEvaporatorTypeEnum;
343 // C++ wrapper type for IfcTimeSeriesScheduleTypeEnum
344 typedef ENUMERATION IfcTimeSeriesScheduleTypeEnum;
345 // C++ wrapper type for IfcDayInMonthNumber
346 typedef INTEGER IfcDayInMonthNumber;
347 // C++ wrapper type for IfcElectricMotorTypeEnum
348 typedef ENUMERATION IfcElectricMotorTypeEnum;
349 // C++ wrapper type for IfcThermalConductivityMeasure
350 typedef REAL IfcThermalConductivityMeasure;
351 // C++ wrapper type for IfcEnergyMeasure
352 typedef REAL IfcEnergyMeasure;
353 // C++ wrapper type for IfcRotationalStiffnessMeasure
354 typedef REAL IfcRotationalStiffnessMeasure;
355 // C++ wrapper type for IfcDerivedMeasureValue
356 typedef SELECT IfcDerivedMeasureValue;
357 // C++ wrapper type for IfcDoorPanelOperationEnum
358 typedef ENUMERATION IfcDoorPanelOperationEnum;
359 // C++ wrapper type for IfcCurveStyleFontSelect
360 typedef SELECT IfcCurveStyleFontSelect;
361 // C++ wrapper type for IfcWindowPanelOperationEnum
362 typedef ENUMERATION IfcWindowPanelOperationEnum;
363 // C++ wrapper type for IfcDataOriginEnum
364 typedef ENUMERATION IfcDataOriginEnum;
365 // C++ wrapper type for IfcStairTypeEnum
366 typedef ENUMERATION IfcStairTypeEnum;
367 // C++ wrapper type for IfcRailingTypeEnum
368 typedef ENUMERATION IfcRailingTypeEnum;
369 // C++ wrapper type for IfcPowerMeasure
370 typedef REAL IfcPowerMeasure;
371 // C++ wrapper type for IfcStackTerminalTypeEnum
372 typedef ENUMERATION IfcStackTerminalTypeEnum;
373 // C++ wrapper type for IfcHatchLineDistanceSelect
374 typedef SELECT IfcHatchLineDistanceSelect;
375 // C++ wrapper type for IfcTrimmingSelect
376 typedef SELECT IfcTrimmingSelect;
377 // C++ wrapper type for IfcThermalExpansionCoefficientMeasure
378 typedef REAL IfcThermalExpansionCoefficientMeasure;
379 // C++ wrapper type for IfcLightDistributionDataSourceSelect
380 typedef SELECT IfcLightDistributionDataSourceSelect;
381 // C++ wrapper type for IfcTorqueMeasure
382 typedef REAL IfcTorqueMeasure;
383 // C++ wrapper type for IfcMassPerLengthMeasure
384 typedef REAL IfcMassPerLengthMeasure;
385 // C++ wrapper type for IfcValveTypeEnum
386 typedef ENUMERATION IfcValveTypeEnum;
387 // C++ wrapper type for IfcWindowPanelPositionEnum
388 typedef ENUMERATION IfcWindowPanelPositionEnum;
389 // C++ wrapper type for IfcSurfaceOrFaceSurface
390 typedef SELECT IfcSurfaceOrFaceSurface;
391 // C++ wrapper type for IfcPropertySourceEnum
392 typedef ENUMERATION IfcPropertySourceEnum;
393 // C++ wrapper type for IfcCableCarrierSegmentTypeEnum
394 typedef ENUMERATION IfcCableCarrierSegmentTypeEnum;
395 // C++ wrapper type for IfcCountMeasure
396 typedef NUMBER IfcCountMeasure;
397 // C++ wrapper type for IfcFontWeight
398 typedef STRING IfcFontWeight;
399 // C++ wrapper type for IfcPhysicalOrVirtualEnum
400 typedef ENUMERATION IfcPhysicalOrVirtualEnum;
401 // C++ wrapper type for IfcSpaceTypeEnum
402 typedef ENUMERATION IfcSpaceTypeEnum;
403 // C++ wrapper type for IfcVolumetricFlowRateMeasure
404 typedef REAL IfcVolumetricFlowRateMeasure;
405 // C++ wrapper type for IfcLuminousFluxMeasure
406 typedef REAL IfcLuminousFluxMeasure;
407 // C++ wrapper type for IfcEvaporativeCoolerTypeEnum
408 typedef ENUMERATION IfcEvaporativeCoolerTypeEnum;
409 // C++ wrapper type for IfcLayeredItem
410 typedef SELECT IfcLayeredItem;
411 // C++ wrapper type for IfcModulusOfSubgradeReactionMeasure
412 typedef REAL IfcModulusOfSubgradeReactionMeasure;
413 // C++ wrapper type for IfcHeatExchangerTypeEnum
414 typedef ENUMERATION IfcHeatExchangerTypeEnum;
415 // C++ wrapper type for IfcProtectiveDeviceTypeEnum
416 typedef ENUMERATION IfcProtectiveDeviceTypeEnum;
417 // C++ wrapper type for IfcDamperTypeEnum
418 typedef ENUMERATION IfcDamperTypeEnum;
419 // C++ wrapper type for IfcControllerTypeEnum
420 typedef ENUMERATION IfcControllerTypeEnum;
421 // C++ wrapper type for IfcMassFlowRateMeasure
422 typedef REAL IfcMassFlowRateMeasure;
423 // C++ wrapper type for IfcAssemblyPlaceEnum
424 typedef ENUMERATION IfcAssemblyPlaceEnum;
425 // C++ wrapper type for IfcAreaMeasure
426 typedef REAL IfcAreaMeasure;
427 // C++ wrapper type for IfcServiceLifeFactorTypeEnum
428 typedef ENUMERATION IfcServiceLifeFactorTypeEnum;
429 // C++ wrapper type for IfcVolumeMeasure
430 typedef REAL IfcVolumeMeasure;
431561 // C++ wrapper type for IfcBeamTypeEnum
432562 typedef ENUMERATION IfcBeamTypeEnum;
433563 // C++ wrapper type for IfcStateEnum
434564 typedef ENUMERATION IfcStateEnum;
435 // C++ wrapper type for IfcSpaceHeaterTypeEnum
436 typedef ENUMERATION IfcSpaceHeaterTypeEnum;
437 // C++ wrapper type for IfcSectionTypeEnum
438 typedef ENUMERATION IfcSectionTypeEnum;
439 // C++ wrapper type for IfcFootingTypeEnum
440 typedef ENUMERATION IfcFootingTypeEnum;
441 // C++ wrapper type for IfcMonetaryMeasure
442 typedef REAL IfcMonetaryMeasure;
443 // C++ wrapper type for IfcLoadGroupTypeEnum
444 typedef ENUMERATION IfcLoadGroupTypeEnum;
445 // C++ wrapper type for IfcElectricGeneratorTypeEnum
446 typedef ENUMERATION IfcElectricGeneratorTypeEnum;
447 // C++ wrapper type for IfcFlowMeterTypeEnum
448 typedef ENUMERATION IfcFlowMeterTypeEnum;
449 // C++ wrapper type for IfcMaterialSelect
450 typedef SELECT IfcMaterialSelect;
565 // C++ wrapper type for IfcSIPrefix
566 typedef ENUMERATION IfcSIPrefix;
567 // C++ wrapper type for IfcNumericMeasure
568 typedef NUMBER IfcNumericMeasure;
569 // C++ wrapper type for IfcOutletTypeEnum
570 typedef ENUMERATION IfcOutletTypeEnum;
571 // C++ wrapper type for IfcCompoundPlaneAngleMeasure
572 typedef ListOf< INTEGER, 3, 3 > IfcCompoundPlaneAngleMeasure;
573 // C++ wrapper type for IfcServiceLifeFactorTypeEnum
574 typedef ENUMERATION IfcServiceLifeFactorTypeEnum;
575 // C++ wrapper type for IfcLogicalOperatorEnum
576 typedef ENUMERATION IfcLogicalOperatorEnum;
577 // C++ wrapper type for IfcBooleanOperand
578 typedef SELECT IfcBooleanOperand;
579 // C++ wrapper type for IfcObjectReferenceSelect
580 typedef SELECT IfcObjectReferenceSelect;
581 // C++ wrapper type for IfcCooledBeamTypeEnum
582 typedef ENUMERATION IfcCooledBeamTypeEnum;
583 // C++ wrapper type for IfcDuctSilencerTypeEnum
584 typedef ENUMERATION IfcDuctSilencerTypeEnum;
585 // C++ wrapper type for IfcSectionalAreaIntegralMeasure
586 typedef REAL IfcSectionalAreaIntegralMeasure;
587 // C++ wrapper type for IfcFontVariant
588 typedef STRING IfcFontVariant;
589 // C++ wrapper type for IfcVolumetricFlowRateMeasure
590 typedef REAL IfcVolumetricFlowRateMeasure;
591 // C++ wrapper type for IfcPlateTypeEnum
592 typedef ENUMERATION IfcPlateTypeEnum;
593 // C++ wrapper type for IfcEnvironmentalImpactCategoryEnum
594 typedef ENUMERATION IfcEnvironmentalImpactCategoryEnum;
595 // C++ wrapper type for IfcVibrationIsolatorTypeEnum
596 typedef ENUMERATION IfcVibrationIsolatorTypeEnum;
597 // C++ wrapper type for IfcThermodynamicTemperatureMeasure
598 typedef REAL IfcThermodynamicTemperatureMeasure;
599 // C++ wrapper type for IfcRotationalMassMeasure
600 typedef REAL IfcRotationalMassMeasure;
601 // C++ wrapper type for IfcSecondInMinute
602 typedef REAL IfcSecondInMinute;
603 // C++ wrapper type for IfcDayInMonthNumber
604 typedef INTEGER IfcDayInMonthNumber;
605 // C++ wrapper type for IfcDimensionCount
606 typedef INTEGER IfcDimensionCount;
607 // C++ wrapper type for IfcWindowStyleOperationEnum
608 typedef ENUMERATION IfcWindowStyleOperationEnum;
609 // C++ wrapper type for IfcThermalResistanceMeasure
610 typedef REAL IfcThermalResistanceMeasure;
611 // C++ wrapper type for IfcMeasureValue
612 typedef SELECT IfcMeasureValue;
613 // C++ wrapper type for IfcWindowPanelOperationEnum
614 typedef ENUMERATION IfcWindowPanelOperationEnum;
615 // C++ wrapper type for IfcChillerTypeEnum
616 typedef ENUMERATION IfcChillerTypeEnum;
617 // C++ wrapper type for IfcPositiveRatioMeasure
618 typedef REAL IfcPositiveRatioMeasure;
619 // C++ wrapper type for IfcInteger
620 typedef INTEGER IfcInteger;
621 // C++ wrapper type for IfcLogical
622 typedef LOGICAL IfcLogical;
623 // C++ wrapper type for IfcJunctionBoxTypeEnum
624 typedef ENUMERATION IfcJunctionBoxTypeEnum;
625 // C++ wrapper type for IfcAddressTypeEnum
626 typedef ENUMERATION IfcAddressTypeEnum;
627 // C++ wrapper type for IfcWasteTerminalTypeEnum
628 typedef ENUMERATION IfcWasteTerminalTypeEnum;
629 // C++ wrapper type for IfcTrimmingSelect
630 typedef SELECT IfcTrimmingSelect;
631 // C++ wrapper type for IfcLightEmissionSourceEnum
632 typedef ENUMERATION IfcLightEmissionSourceEnum;
633 // C++ wrapper type for IfcSoundScaleEnum
634 typedef ENUMERATION IfcSoundScaleEnum;
635 // C++ wrapper type for IfcLuminousFluxMeasure
636 typedef REAL IfcLuminousFluxMeasure;
637 // C++ wrapper type for IfcElectricResistanceMeasure
638 typedef REAL IfcElectricResistanceMeasure;
639 // C++ wrapper type for IfcIntegerCountRateMeasure
640 typedef INTEGER IfcIntegerCountRateMeasure;
641 // C++ wrapper type for IfcPhysicalOrVirtualEnum
642 typedef ENUMERATION IfcPhysicalOrVirtualEnum;
643 // C++ wrapper type for IfcMolecularWeightMeasure
644 typedef REAL IfcMolecularWeightMeasure;
645 // C++ wrapper type for IfcProfileTypeEnum
646 typedef ENUMERATION IfcProfileTypeEnum;
647 // C++ wrapper type for IfcBoxAlignment
648 typedef STRING IfcBoxAlignment;
649 // C++ wrapper type for IfcGlobalOrLocalEnum
650 typedef ENUMERATION IfcGlobalOrLocalEnum;
651 // C++ wrapper type for IfcSpecularRoughness
652 typedef REAL IfcSpecularRoughness;
653 // C++ wrapper type for IfcLampTypeEnum
654 typedef ENUMERATION IfcLampTypeEnum;
655 // C++ wrapper type for IfcPileTypeEnum
656 typedef ENUMERATION IfcPileTypeEnum;
657 // C++ wrapper type for IfcElectricCurrentMeasure
658 typedef REAL IfcElectricCurrentMeasure;
659 // C++ wrapper type for IfcFanTypeEnum
660 typedef ENUMERATION IfcFanTypeEnum;
661 // C++ wrapper type for IfcSurfaceOrFaceSurface
662 typedef SELECT IfcSurfaceOrFaceSurface;
663 // C++ wrapper type for IfcPipeFittingTypeEnum
664 typedef ENUMERATION IfcPipeFittingTypeEnum;
665 // C++ wrapper type for IfcTankTypeEnum
666 typedef ENUMERATION IfcTankTypeEnum;
667 // C++ wrapper type for IfcCurveFontOrScaledCurveFontSelect
668 typedef SELECT IfcCurveFontOrScaledCurveFontSelect;
669 // C++ wrapper type for IfcWindowStyleConstructionEnum
670 typedef ENUMERATION IfcWindowStyleConstructionEnum;
671 // C++ wrapper type for IfcAirTerminalBoxTypeEnum
672 typedef ENUMERATION IfcAirTerminalBoxTypeEnum;
673 // C++ wrapper type for IfcStairFlightTypeEnum
674 typedef ENUMERATION IfcStairFlightTypeEnum;
675 // C++ wrapper type for IfcLuminousIntensityMeasure
676 typedef REAL IfcLuminousIntensityMeasure;
677 // C++ wrapper type for IfcMotorConnectionTypeEnum
678 typedef ENUMERATION IfcMotorConnectionTypeEnum;
679 // C++ wrapper type for IfcPlaneAngleMeasure
680 typedef REAL IfcPlaneAngleMeasure;
681 // C++ wrapper type for IfcActuatorTypeEnum
682 typedef ENUMERATION IfcActuatorTypeEnum;
683 // C++ wrapper type for IfcColumnTypeEnum
684 typedef ENUMERATION IfcColumnTypeEnum;
685 // C++ wrapper type for IfcTextFontSelect
686 typedef SELECT IfcTextFontSelect;
687 // C++ wrapper type for IfcDoorPanelPositionEnum
688 typedef ENUMERATION IfcDoorPanelPositionEnum;
689 // C++ wrapper type for IfcCoilTypeEnum
690 typedef ENUMERATION IfcCoilTypeEnum;
691 // C++ wrapper type for IfcAngularVelocityMeasure
692 typedef REAL IfcAngularVelocityMeasure;
451693 // C++ wrapper type for IfcAnalysisModelTypeEnum
452694 typedef ENUMERATION IfcAnalysisModelTypeEnum;
453 // C++ wrapper type for IfcTemperatureGradientMeasure
454 typedef REAL IfcTemperatureGradientMeasure;
455 // C++ wrapper type for IfcModulusOfRotationalSubgradeReactionMeasure
456 typedef REAL IfcModulusOfRotationalSubgradeReactionMeasure;
457 // C++ wrapper type for IfcColour
458 typedef SELECT IfcColour;
459 // C++ wrapper type for IfcCurtainWallTypeEnum
460 typedef ENUMERATION IfcCurtainWallTypeEnum;
461 // C++ wrapper type for IfcMetricValueSelect
462 typedef SELECT IfcMetricValueSelect;
463 // C++ wrapper type for IfcTextAlignment
464 typedef STRING IfcTextAlignment;
465 // C++ wrapper type for IfcDoorPanelPositionEnum
466 typedef ENUMERATION IfcDoorPanelPositionEnum;
467 // C++ wrapper type for IfcPlateTypeEnum
468 typedef ENUMERATION IfcPlateTypeEnum;
469 // C++ wrapper type for IfcSectionalAreaIntegralMeasure
470 typedef REAL IfcSectionalAreaIntegralMeasure;
471 // C++ wrapper type for IfcPresentableText
472 typedef STRING IfcPresentableText;
473 // C++ wrapper type for IfcVaporPermeabilityMeasure
474 typedef REAL IfcVaporPermeabilityMeasure;
475 // C++ wrapper type for IfcStructuralSurfaceTypeEnum
476 typedef ENUMERATION IfcStructuralSurfaceTypeEnum;
477 // C++ wrapper type for IfcLinearVelocityMeasure
478 typedef REAL IfcLinearVelocityMeasure;
479 // C++ wrapper type for IfcIntegerCountRateMeasure
480 typedef INTEGER IfcIntegerCountRateMeasure;
481 // C++ wrapper type for IfcAirToAirHeatRecoveryTypeEnum
482 typedef ENUMERATION IfcAirToAirHeatRecoveryTypeEnum;
483 // C++ wrapper type for IfcDocumentStatusEnum
484 typedef ENUMERATION IfcDocumentStatusEnum;
485 // C++ wrapper type for IfcLengthMeasure
486 typedef REAL IfcLengthMeasure;
487 // C++ wrapper type for IfcPlanarForceMeasure
488 typedef REAL IfcPlanarForceMeasure;
489 // C++ wrapper type for IfcBooleanOperand
490 typedef SELECT IfcBooleanOperand;
491 // C++ wrapper type for IfcInteger
492 typedef INTEGER IfcInteger;
493 // C++ wrapper type for IfcRampTypeEnum
494 typedef ENUMERATION IfcRampTypeEnum;
495 // C++ wrapper type for IfcActorSelect
496 typedef SELECT IfcActorSelect;
497 // C++ wrapper type for IfcElectricChargeMeasure
498 typedef REAL IfcElectricChargeMeasure;
499 // C++ wrapper type for IfcGeometricSetSelect
500 typedef SELECT IfcGeometricSetSelect;
501 // C++ wrapper type for IfcConnectionTypeEnum
502 typedef ENUMERATION IfcConnectionTypeEnum;
503 // C++ wrapper type for IfcValue
504 typedef SELECT IfcValue;
505 // C++ wrapper type for IfcCoolingTowerTypeEnum
506 typedef ENUMERATION IfcCoolingTowerTypeEnum;
507 // C++ wrapper type for IfcPlaneAngleMeasure
508 typedef REAL IfcPlaneAngleMeasure;
509 // C++ wrapper type for IfcSwitchingDeviceTypeEnum
510 typedef ENUMERATION IfcSwitchingDeviceTypeEnum;
511 // C++ wrapper type for IfcFlowDirectionEnum
512 typedef ENUMERATION IfcFlowDirectionEnum;
513 // C++ wrapper type for IfcThermalLoadSourceEnum
514 typedef ENUMERATION IfcThermalLoadSourceEnum;
515 // C++ wrapper type for IfcTextFontSelect
516 typedef SELECT IfcTextFontSelect;
517 // C++ wrapper type for IfcSpecularHighlightSelect
518 typedef SELECT IfcSpecularHighlightSelect;
519 // C++ wrapper type for IfcAnalysisTheoryTypeEnum
520 typedef ENUMERATION IfcAnalysisTheoryTypeEnum;
521 // C++ wrapper type for IfcTextFontName
522 typedef STRING IfcTextFontName;
523 // C++ wrapper type for IfcElectricVoltageMeasure
524 typedef REAL IfcElectricVoltageMeasure;
525 // C++ wrapper type for IfcTendonTypeEnum
526 typedef ENUMERATION IfcTendonTypeEnum;
527 // C++ wrapper type for IfcSoundPressureMeasure
528 typedef REAL IfcSoundPressureMeasure;
695 // C++ wrapper type for IfcLibrarySelect
696 typedef SELECT IfcLibrarySelect;
697 // C++ wrapper type for IfcForceMeasure
698 typedef REAL IfcForceMeasure;
699 // C++ wrapper type for IfcFillAreaStyleTileShapeSelect
700 typedef SELECT IfcFillAreaStyleTileShapeSelect;
701 // C++ wrapper type for IfcElectricApplianceTypeEnum
702 typedef ENUMERATION IfcElectricApplianceTypeEnum;
703 // C++ wrapper type for IfcSurfaceTextureEnum
704 typedef ENUMERATION IfcSurfaceTextureEnum;
705 // C++ wrapper type for IfcCharacterStyleSelect
706 typedef SELECT IfcCharacterStyleSelect;
707 // C++ wrapper type for IfcEnergyMeasure
708 typedef REAL IfcEnergyMeasure;
709 // C++ wrapper type for IfcReal
710 typedef REAL IfcReal;
711 // C++ wrapper type for IfcCompressorTypeEnum
712 typedef ENUMERATION IfcCompressorTypeEnum;
529713 // C++ wrapper type for IfcElectricDistributionPointFunctionEnum
530714 typedef ENUMERATION IfcElectricDistributionPointFunctionEnum;
531 // C++ wrapper type for IfcSpecularRoughness
532 typedef REAL IfcSpecularRoughness;
533 // C++ wrapper type for IfcActionTypeEnum
534 typedef ENUMERATION IfcActionTypeEnum;
535 // C++ wrapper type for IfcReinforcingBarSurfaceEnum
536 typedef ENUMERATION IfcReinforcingBarSurfaceEnum;
537 // C++ wrapper type for IfcHumidifierTypeEnum
538 typedef ENUMERATION IfcHumidifierTypeEnum;
539 // C++ wrapper type for IfcIlluminanceMeasure
540 typedef REAL IfcIlluminanceMeasure;
541 // C++ wrapper type for IfcLibrarySelect
542 typedef SELECT IfcLibrarySelect;
543 // C++ wrapper type for IfcText
544 typedef STRING IfcText;
545 // C++ wrapper type for IfcLayerSetDirectionEnum
546 typedef ENUMERATION IfcLayerSetDirectionEnum;
547 // C++ wrapper type for IfcBoilerTypeEnum
548 typedef ENUMERATION IfcBoilerTypeEnum;
549 // C++ wrapper type for IfcTimeMeasure
550 typedef REAL IfcTimeMeasure;
551 // C++ wrapper type for IfcAccelerationMeasure
552 typedef REAL IfcAccelerationMeasure;
553 // C++ wrapper type for IfcElectricFlowStorageDeviceTypeEnum
554 typedef ENUMERATION IfcElectricFlowStorageDeviceTypeEnum;
555 // C++ wrapper type for IfcLuminousIntensityMeasure
556 typedef REAL IfcLuminousIntensityMeasure;
557 // C++ wrapper type for IfcDefinedSymbolSelect
558 typedef SELECT IfcDefinedSymbolSelect;
559 // C++ wrapper type for IfcUnitEnum
560 typedef ENUMERATION IfcUnitEnum;
561 // C++ wrapper type for IfcInventoryTypeEnum
562 typedef ENUMERATION IfcInventoryTypeEnum;
563 // C++ wrapper type for IfcStructuralActivityAssignmentSelect
564 typedef SELECT IfcStructuralActivityAssignmentSelect;
565 // C++ wrapper type for IfcElementAssemblyTypeEnum
566 typedef ENUMERATION IfcElementAssemblyTypeEnum;
567 // C++ wrapper type for IfcServiceLifeTypeEnum
568 typedef ENUMERATION IfcServiceLifeTypeEnum;
569 // C++ wrapper type for IfcCoveringTypeEnum
570 typedef ENUMERATION IfcCoveringTypeEnum;
571 // C++ wrapper type for IfcStairFlightTypeEnum
572 typedef ENUMERATION IfcStairFlightTypeEnum;
573 // C++ wrapper type for IfcSIPrefix
574 typedef ENUMERATION IfcSIPrefix;
575 // C++ wrapper type for IfcElectricCapacitanceMeasure
576 typedef REAL IfcElectricCapacitanceMeasure;
577 // C++ wrapper type for IfcFlowInstrumentTypeEnum
578 typedef ENUMERATION IfcFlowInstrumentTypeEnum;
579 // C++ wrapper type for IfcThermodynamicTemperatureMeasure
580 typedef REAL IfcThermodynamicTemperatureMeasure;
581 // C++ wrapper type for IfcGloballyUniqueId
582 typedef STRING IfcGloballyUniqueId;
583 // C++ wrapper type for IfcLampTypeEnum
584 typedef ENUMERATION IfcLampTypeEnum;
585 // C++ wrapper type for IfcMagneticFluxMeasure
586 typedef REAL IfcMagneticFluxMeasure;
587 // C++ wrapper type for IfcSolidAngleMeasure
588 typedef REAL IfcSolidAngleMeasure;
589 // C++ wrapper type for IfcFrequencyMeasure
590 typedef REAL IfcFrequencyMeasure;
591 // C++ wrapper type for IfcTransportElementTypeEnum
592 typedef ENUMERATION IfcTransportElementTypeEnum;
593 // C++ wrapper type for IfcSoundScaleEnum
594 typedef ENUMERATION IfcSoundScaleEnum;
595 // C++ wrapper type for IfcPHMeasure
596 typedef REAL IfcPHMeasure;
597 // C++ wrapper type for IfcActuatorTypeEnum
598 typedef ENUMERATION IfcActuatorTypeEnum;
599 // C++ wrapper type for IfcPositivePlaneAngleMeasure
600 typedef REAL IfcPositivePlaneAngleMeasure;
601 // C++ wrapper type for IfcAppliedValueSelect
602 typedef SELECT IfcAppliedValueSelect;
603 // C++ wrapper type for IfcSecondInMinute
604 typedef REAL IfcSecondInMinute;
605 // C++ wrapper type for IfcDuctSegmentTypeEnum
606 typedef ENUMERATION IfcDuctSegmentTypeEnum;
607 // C++ wrapper type for IfcThermalAdmittanceMeasure
608 typedef REAL IfcThermalAdmittanceMeasure;
609 // C++ wrapper type for IfcSpecularExponent
610 typedef REAL IfcSpecularExponent;
611 // C++ wrapper type for IfcDateTimeSelect
612 typedef SELECT IfcDateTimeSelect;
613 // C++ wrapper type for IfcTransitionCode
614 typedef ENUMERATION IfcTransitionCode;
615 // C++ wrapper type for IfcDimensionCount
616 typedef INTEGER IfcDimensionCount;
617 // C++ wrapper type for IfcLinearStiffnessMeasure
618 typedef REAL IfcLinearStiffnessMeasure;
619 // C++ wrapper type for IfcCompoundPlaneAngleMeasure
620 typedef ListOf< INTEGER, 3, 3 > IfcCompoundPlaneAngleMeasure;
621 // C++ wrapper type for IfcElectricApplianceTypeEnum
622 typedef ENUMERATION IfcElectricApplianceTypeEnum;
623 // C++ wrapper type for IfcProfileTypeEnum
624 typedef ENUMERATION IfcProfileTypeEnum;
625 // C++ wrapper type for IfcCurveFontOrScaledCurveFontSelect
626 typedef SELECT IfcCurveFontOrScaledCurveFontSelect;
627 // C++ wrapper type for IfcProjectedOrTrueLengthEnum
628 typedef ENUMERATION IfcProjectedOrTrueLengthEnum;
629 // C++ wrapper type for IfcAbsorbedDoseMeasure
630 typedef REAL IfcAbsorbedDoseMeasure;
631 // C++ wrapper type for IfcParameterValue
632 typedef REAL IfcParameterValue;
633 // C++ wrapper type for IfcPileConstructionEnum
634 typedef ENUMERATION IfcPileConstructionEnum;
635 // C++ wrapper type for IfcMotorConnectionTypeEnum
636 typedef ENUMERATION IfcMotorConnectionTypeEnum;
637 // C++ wrapper type for IfcOccupantTypeEnum
638 typedef ENUMERATION IfcOccupantTypeEnum;
639 // C++ wrapper type for IfcUnit
640 typedef SELECT IfcUnit;
641 // C++ wrapper type for IfcLinearForceMeasure
642 typedef REAL IfcLinearForceMeasure;
643 // C++ wrapper type for IfcCondenserTypeEnum
644 typedef ENUMERATION IfcCondenserTypeEnum;
645 // C++ wrapper type for IfcDescriptiveMeasure
646 typedef STRING IfcDescriptiveMeasure;
647 // C++ wrapper type for IfcMomentOfInertiaMeasure
648 typedef REAL IfcMomentOfInertiaMeasure;
649 // C++ wrapper type for IfcDoseEquivalentMeasure
650 typedef REAL IfcDoseEquivalentMeasure;
651 // C++ wrapper type for IfcOrientationSelect
652 typedef SELECT IfcOrientationSelect;
653 // C++ wrapper type for IfcLogical
654 typedef LOGICAL IfcLogical;
655 // C++ wrapper type for IfcSizeSelect
656 typedef SELECT IfcSizeSelect;
657 // C++ wrapper type for IfcEnvironmentalImpactCategoryEnum
658 typedef ENUMERATION IfcEnvironmentalImpactCategoryEnum;
659 // C++ wrapper type for IfcLogicalOperatorEnum
660 typedef ENUMERATION IfcLogicalOperatorEnum;
661 // C++ wrapper type for IfcCompressorTypeEnum
662 typedef ENUMERATION IfcCompressorTypeEnum;
663 // C++ wrapper type for IfcBenchmarkEnum
664 typedef ENUMERATION IfcBenchmarkEnum;
665 // C++ wrapper type for IfcRatioMeasure
666 typedef REAL IfcRatioMeasure;
667 // C++ wrapper type for IfcVectorOrDirection
668 typedef SELECT IfcVectorOrDirection;
669 // C++ wrapper type for IfcConstraintEnum
670 typedef ENUMERATION IfcConstraintEnum;
671 // C++ wrapper type for IfcAlarmTypeEnum
672 typedef ENUMERATION IfcAlarmTypeEnum;
673 // C++ wrapper type for IfcLuminousIntensityDistributionMeasure
674 typedef REAL IfcLuminousIntensityDistributionMeasure;
675 // C++ wrapper type for IfcArithmeticOperatorEnum
676 typedef ENUMERATION IfcArithmeticOperatorEnum;
677 // C++ wrapper type for IfcAxis2Placement
678 typedef SELECT IfcAxis2Placement;
679 // C++ wrapper type for IfcForceMeasure
680 typedef REAL IfcForceMeasure;
681 // C++ wrapper type for IfcTrimmingPreference
682 typedef ENUMERATION IfcTrimmingPreference;
683 // C++ wrapper type for IfcElectricResistanceMeasure
684 typedef REAL IfcElectricResistanceMeasure;
685 // C++ wrapper type for IfcWarpingConstantMeasure
686 typedef REAL IfcWarpingConstantMeasure;
687 // C++ wrapper type for IfcPipeSegmentTypeEnum
688 typedef ENUMERATION IfcPipeSegmentTypeEnum;
689 // C++ wrapper type for IfcConditionCriterionSelect
690 typedef SELECT IfcConditionCriterionSelect;
691 // C++ wrapper type for IfcShearModulusMeasure
692 typedef REAL IfcShearModulusMeasure;
693 // C++ wrapper type for IfcPressureMeasure
694 typedef REAL IfcPressureMeasure;
695 // C++ wrapper type for IfcDuctSilencerTypeEnum
696 typedef ENUMERATION IfcDuctSilencerTypeEnum;
697 // C++ wrapper type for IfcBoolean
698 typedef BOOLEAN IfcBoolean;
699 // C++ wrapper type for IfcSectionModulusMeasure
700 typedef REAL IfcSectionModulusMeasure;
701 // C++ wrapper type for IfcChangeActionEnum
702 typedef ENUMERATION IfcChangeActionEnum;
703 // C++ wrapper type for IfcCoilTypeEnum
704 typedef ENUMERATION IfcCoilTypeEnum;
705 // C++ wrapper type for IfcMassMeasure
706 typedef REAL IfcMassMeasure;
707 // C++ wrapper type for IfcStructuralCurveTypeEnum
708 typedef ENUMERATION IfcStructuralCurveTypeEnum;
709 // C++ wrapper type for IfcPermeableCoveringOperationEnum
710 typedef ENUMERATION IfcPermeableCoveringOperationEnum;
711 // C++ wrapper type for IfcMagneticFluxDensityMeasure
712 typedef REAL IfcMagneticFluxDensityMeasure;
713 // C++ wrapper type for IfcMoistureDiffusivityMeasure
714 typedef REAL IfcMoistureDiffusivityMeasure;
715715
716716
717717 // ******************************************************************************
723723 struct IfcTypeObject;
724724 struct IfcTypeProduct;
725725 struct IfcElementType;
726 struct IfcFurnishingElementType;
727 struct IfcFurnitureType;
726 struct IfcDistributionElementType;
727 struct IfcDistributionFlowElementType;
728 struct IfcFlowControllerType;
729 struct IfcElectricTimeControlType;
730 struct IfcRepresentation;
731 struct IfcShapeModel;
732 struct IfcTopologyRepresentation;
733 struct IfcRelationship;
734 struct IfcRelConnects;
735 typedef NotImplemented IfcRelCoversSpaces; // (not currently used by Assimp)
736 struct IfcFlowFittingType;
737 struct IfcCableCarrierFittingType;
738 typedef NotImplemented IfcStructuralConnectionCondition; // (not currently used by Assimp)
739 typedef NotImplemented IfcSlippageConnectionCondition; // (not currently used by Assimp)
740 struct IfcEnergyConversionDeviceType;
741 struct IfcCoilType;
728742 struct IfcObject;
729 struct IfcProduct;
730 struct IfcGrid;
743 struct IfcControl;
744 struct IfcPerformanceHistory;
731745 struct IfcRepresentationItem;
732746 struct IfcGeometricRepresentationItem;
733 struct IfcOneDirectionRepeatFactor;
734 struct IfcTwoDirectionRepeatFactor;
747 struct IfcTextLiteral;
748 struct IfcTextLiteralWithExtent;
749 struct IfcProductRepresentation;
750 struct IfcProduct;
735751 struct IfcElement;
736 struct IfcElementComponent;
737 typedef NotImplemented IfcLocalTime; // (not currently used by Assimp)
738 struct IfcSpatialStructureElementType;
739 struct IfcControl;
740 struct IfcActionRequest;
741 typedef NotImplemented IfcTextureVertex; // (not currently used by Assimp)
742 typedef NotImplemented IfcPropertyDefinition; // (not currently used by Assimp)
743 typedef NotImplemented IfcPropertySetDefinition; // (not currently used by Assimp)
744 typedef NotImplemented IfcFluidFlowProperties; // (not currently used by Assimp)
745 typedef NotImplemented IfcDocumentInformation; // (not currently used by Assimp)
746 typedef NotImplemented IfcCalendarDate; // (not currently used by Assimp)
747 struct IfcDistributionElementType;
748 struct IfcDistributionFlowElementType;
749 struct IfcEnergyConversionDeviceType;
750 struct IfcCooledBeamType;
751 struct IfcCsgPrimitive3D;
752 struct IfcRectangularPyramid;
753 typedef NotImplemented IfcStructuralLoad; // (not currently used by Assimp)
754 typedef NotImplemented IfcStructuralLoadStatic; // (not currently used by Assimp)
755 typedef NotImplemented IfcStructuralLoadLinearForce; // (not currently used by Assimp)
752 struct IfcDistributionElement;
753 struct IfcDistributionFlowElement;
754 struct IfcCurve;
755 struct IfcBoundedCurve;
756 struct IfcCompositeCurve;
757 struct Ifc2DCompositeCurve;
758 typedef NotImplemented IfcBoundaryCondition; // (not currently used by Assimp)
759 typedef NotImplemented IfcBoundaryFaceCondition; // (not currently used by Assimp)
760 struct IfcCartesianTransformationOperator;
761 struct IfcCartesianTransformationOperator3D;
762 struct IfcProperty;
763 struct IfcSimpleProperty;
764 struct IfcPropertyEnumeratedValue;
765 typedef NotImplemented IfcPresentationLayerAssignment; // (not currently used by Assimp)
766 typedef NotImplemented IfcPresentationLayerWithStyle; // (not currently used by Assimp)
767 struct IfcBuildingElementType;
768 struct IfcStairFlightType;
756769 struct IfcSurface;
757 struct IfcBoundedSurface;
758 struct IfcRectangularTrimmedSurface;
759 typedef NotImplemented IfcPhysicalQuantity; // (not currently used by Assimp)
760 typedef NotImplemented IfcPhysicalSimpleQuantity; // (not currently used by Assimp)
761 typedef NotImplemented IfcQuantityVolume; // (not currently used by Assimp)
762 typedef NotImplemented IfcQuantityArea; // (not currently used by Assimp)
763 struct IfcGroup;
764 struct IfcRelationship;
765 typedef NotImplemented IfcRelAssigns; // (not currently used by Assimp)
766 typedef NotImplemented IfcRelAssignsToActor; // (not currently used by Assimp)
767 struct IfcHalfSpaceSolid;
768 struct IfcPolygonalBoundedHalfSpace;
769 typedef NotImplemented IfcEnergyProperties; // (not currently used by Assimp)
770 struct IfcAirToAirHeatRecoveryType;
771 struct IfcFlowFittingType;
772 struct IfcPipeFittingType;
773 struct IfcRepresentation;
774 struct IfcStyleModel;
775 struct IfcStyledRepresentation;
776 typedef NotImplemented IfcRelAssignsToControl; // (not currently used by Assimp)
777 typedef NotImplemented IfcRelAssignsToProjectOrder; // (not currently used by Assimp)
778 typedef NotImplemented IfcDimensionalExponents; // (not currently used by Assimp)
779 struct IfcBooleanResult;
780 typedef NotImplemented IfcSoundProperties; // (not currently used by Assimp)
781 struct IfcFeatureElement;
782 struct IfcFeatureElementSubtraction;
783 struct IfcOpeningElement;
784 struct IfcConditionCriterion;
785 struct IfcFlowTerminalType;
786 struct IfcFlowControllerType;
787 struct IfcSwitchingDeviceType;
788 struct IfcSystem;
789 struct IfcElectricalCircuit;
790 typedef NotImplemented IfcActorRole; // (not currently used by Assimp)
791 typedef NotImplemented IfcDateAndTime; // (not currently used by Assimp)
792 typedef NotImplemented IfcDraughtingCalloutRelationship; // (not currently used by Assimp)
793 typedef NotImplemented IfcDimensionCalloutRelationship; // (not currently used by Assimp)
794 typedef NotImplemented IfcDerivedUnitElement; // (not currently used by Assimp)
795 typedef NotImplemented IfcExternalReference; // (not currently used by Assimp)
796 typedef NotImplemented IfcClassificationReference; // (not currently used by Assimp)
797 struct IfcUnitaryEquipmentType;
798 typedef NotImplemented IfcProperty; // (not currently used by Assimp)
799 struct IfcPort;
800 typedef NotImplemented IfcAddress; // (not currently used by Assimp)
801 struct IfcPlacement;
802 typedef NotImplemented IfcPreDefinedItem; // (not currently used by Assimp)
803 typedef NotImplemented IfcPreDefinedColour; // (not currently used by Assimp)
804 typedef NotImplemented IfcDraughtingPreDefinedColour; // (not currently used by Assimp)
805 struct IfcProfileDef;
806 struct IfcArbitraryClosedProfileDef;
807 struct IfcCurve;
808 struct IfcConic;
809 struct IfcCircle;
810 typedef NotImplemented IfcAppliedValue; // (not currently used by Assimp)
811 typedef NotImplemented IfcEnvironmentalImpactValue; // (not currently used by Assimp)
812 typedef NotImplemented IfcSimpleProperty; // (not currently used by Assimp)
813 typedef NotImplemented IfcPropertySingleValue; // (not currently used by Assimp)
814770 struct IfcElementarySurface;
815771 struct IfcPlane;
816 typedef NotImplemented IfcPropertyBoundedValue; // (not currently used by Assimp)
817 struct IfcCostSchedule;
818 typedef NotImplemented IfcMonetaryUnit; // (not currently used by Assimp)
819 typedef NotImplemented IfcConnectionGeometry; // (not currently used by Assimp)
820 typedef NotImplemented IfcConnectionCurveGeometry; // (not currently used by Assimp)
821 struct IfcRightCircularCone;
822 struct IfcElementAssembly;
823 struct IfcBuildingElement;
824 struct IfcMember;
825 typedef NotImplemented IfcPropertyDependencyRelationship; // (not currently used by Assimp)
826 struct IfcBuildingElementProxy;
827 struct IfcStructuralActivity;
828 struct IfcStructuralAction;
829 struct IfcStructuralPlanarAction;
830 struct IfcTopologicalRepresentationItem;
831 struct IfcConnectedFaceSet;
832 struct IfcSweptSurface;
833 struct IfcSurfaceOfLinearExtrusion;
834 struct IfcArbitraryProfileDefWithVoids;
835 struct IfcProcess;
836 struct IfcProcedure;
837 typedef NotImplemented IfcCurveStyleFontPattern; // (not currently used by Assimp)
838 struct IfcVector;
839 struct IfcFaceBound;
840 struct IfcFaceOuterBound;
841 struct IfcFeatureElementAddition;
842 struct IfcNamedUnit;
843 struct IfcConversionBasedUnit;
844 typedef NotImplemented IfcStructuralLoadSingleForce; // (not currently used by Assimp)
845 struct IfcHeatExchangerType;
846 struct IfcPresentationStyleAssignment;
847 struct IfcFlowTreatmentDeviceType;
848 struct IfcFilterType;
849 struct IfcResource;
850 struct IfcEvaporativeCoolerType;
851 typedef NotImplemented IfcTextureCoordinate; // (not currently used by Assimp)
852 typedef NotImplemented IfcTextureCoordinateGenerator; // (not currently used by Assimp)
853 struct IfcOffsetCurve2D;
854 struct IfcEdge;
855 struct IfcSubedge;
856 struct IfcProxy;
857 struct IfcLine;
858 struct IfcColumn;
859 typedef NotImplemented IfcClassificationNotationFacet; // (not currently used by Assimp)
860 struct IfcObjectPlacement;
861 struct IfcGridPlacement;
862 struct IfcDistributionControlElementType;
863 typedef NotImplemented IfcStructuralLoadSingleForceWarping; // (not currently used by Assimp)
864 typedef NotImplemented IfcExternallyDefinedTextFont; // (not currently used by Assimp)
865 struct IfcRelConnects;
866 typedef NotImplemented IfcRelConnectsElements; // (not currently used by Assimp)
867 typedef NotImplemented IfcRelConnectsWithRealizingElements; // (not currently used by Assimp)
868 typedef NotImplemented IfcConstraintClassificationRelationship; // (not currently used by Assimp)
869 struct IfcAnnotation;
870 struct IfcPlate;
772 struct IfcBooleanResult;
773 struct IfcBooleanClippingResult;
871774 struct IfcSolidModel;
872775 struct IfcManifoldSolidBrep;
873 typedef NotImplemented IfcPreDefinedCurveFont; // (not currently used by Assimp)
874 typedef NotImplemented IfcBoundaryCondition; // (not currently used by Assimp)
875 typedef NotImplemented IfcBoundaryFaceCondition; // (not currently used by Assimp)
876 struct IfcFlowStorageDeviceType;
877 struct IfcStructuralItem;
878 struct IfcStructuralMember;
879 struct IfcStructuralCurveMember;
880 struct IfcStructuralConnection;
881 struct IfcStructuralSurfaceConnection;
882 struct IfcCoilType;
883 struct IfcDuctFittingType;
884 struct IfcStyledItem;
885 struct IfcAnnotationOccurrence;
886 struct IfcAnnotationCurveOccurrence;
887 struct IfcDimensionCurve;
888 struct IfcBoundedCurve;
889 struct IfcAxis1Placement;
890 typedef NotImplemented IfcLightIntensityDistribution; // (not currently used by Assimp)
891 typedef NotImplemented IfcPreDefinedSymbol; // (not currently used by Assimp)
892 struct IfcStructuralPointAction;
893 struct IfcSpatialStructureElement;
894 struct IfcSpace;
895 struct IfcContextDependentUnit;
896 typedef NotImplemented IfcVirtualGridIntersection; // (not currently used by Assimp)
897 typedef NotImplemented IfcRelAssociates; // (not currently used by Assimp)
898 typedef NotImplemented IfcRelAssociatesClassification; // (not currently used by Assimp)
899 struct IfcCoolingTowerType;
900 typedef NotImplemented IfcMaterialProperties; // (not currently used by Assimp)
901 typedef NotImplemented IfcGeneralMaterialProperties; // (not currently used by Assimp)
902 struct IfcFacetedBrepWithVoids;
903776 typedef NotImplemented IfcProfileProperties; // (not currently used by Assimp)
904777 typedef NotImplemented IfcGeneralProfileProperties; // (not currently used by Assimp)
905778 typedef NotImplemented IfcStructuralProfileProperties; // (not currently used by Assimp)
906 struct IfcValveType;
907 struct IfcSystemFurnitureElementType;
908 struct IfcDiscreteAccessory;
779 struct IfcFlowTerminalType;
780 struct IfcStackTerminalType;
781 struct IfcStructuralItem;
782 struct IfcStructuralConnection;
783 struct IfcStructuralCurveConnection;
784 struct IfcJunctionBoxType;
785 typedef NotImplemented IfcRelAssociates; // (not currently used by Assimp)
786 typedef NotImplemented IfcRelAssociatesConstraint; // (not currently used by Assimp)
787 struct IfcPropertyDefinition;
788 struct IfcPropertySetDefinition;
789 typedef NotImplemented IfcDoorPanelProperties; // (not currently used by Assimp)
790 typedef NotImplemented IfcConstraintRelationship; // (not currently used by Assimp)
791 typedef NotImplemented IfcSpaceThermalLoadProperties; // (not currently used by Assimp)
792 typedef NotImplemented IfcLibraryInformation; // (not currently used by Assimp)
793 struct IfcProcess;
794 struct IfcTask;
795 typedef NotImplemented IfcAppliedValue; // (not currently used by Assimp)
796 typedef NotImplemented IfcEnvironmentalImpactValue; // (not currently used by Assimp)
797 struct IfcRelFillsElement;
798 struct IfcProcedure;
799 typedef NotImplemented IfcStructuralLoad; // (not currently used by Assimp)
800 typedef NotImplemented IfcStructuralLoadStatic; // (not currently used by Assimp)
801 typedef NotImplemented IfcStructuralLoadSingleDisplacement; // (not currently used by Assimp)
802 struct IfcProxy;
803 typedef NotImplemented IfcCurveStyleFont; // (not currently used by Assimp)
804 struct IfcResource;
805 struct IfcConstructionResource;
806 struct IfcSubContractResource;
807 typedef NotImplemented IfcCalendarDate; // (not currently used by Assimp)
808 typedef NotImplemented IfcDocumentElectronicFormat; // (not currently used by Assimp)
809 struct IfcRelContainedInSpatialStructure;
810 typedef NotImplemented IfcMaterialProperties; // (not currently used by Assimp)
811 typedef NotImplemented IfcProductsOfCombustionProperties; // (not currently used by Assimp)
812 struct IfcTopologicalRepresentationItem;
813 struct IfcEdge;
814 struct IfcEdgeCurve;
815 struct IfcPlateType;
816 struct IfcObjectPlacement;
817 struct IfcGridPlacement;
818 struct IfcFireSuppressionTerminalType;
819 typedef NotImplemented IfcMechanicalMaterialProperties; // (not currently used by Assimp)
820 struct IfcFlowStorageDevice;
909821 typedef NotImplemented IfcPerson; // (not currently used by Assimp)
910 struct IfcBuildingElementType;
911 struct IfcRailingType;
912 struct IfcGasTerminalType;
913 typedef NotImplemented IfcTimeSeries; // (not currently used by Assimp)
914 typedef NotImplemented IfcIrregularTimeSeries; // (not currently used by Assimp)
915 struct IfcSpaceProgram;
916 struct IfcCovering;
917 typedef NotImplemented IfcShapeAspect; // (not currently used by Assimp)
822 struct IfcSweptSurface;
823 struct IfcSurfaceOfRevolution;
824 struct IfcOrientedEdge;
825 typedef NotImplemented IfcOwnerHistory; // (not currently used by Assimp)
826 typedef NotImplemented IfcRelAssigns; // (not currently used by Assimp)
827 typedef NotImplemented IfcRelAssignsToActor; // (not currently used by Assimp)
828 struct IfcDirection;
829 typedef NotImplemented IfcReinforcementBarProperties; // (not currently used by Assimp)
830 struct IfcProfileDef;
831 struct IfcParameterizedProfileDef;
832 struct IfcCShapeProfileDef;
833 struct IfcFeatureElement;
834 struct IfcFeatureElementSubtraction;
835 struct IfcEdgeFeature;
836 struct IfcChamferEdgeFeature;
837 struct IfcBuildingElement;
838 struct IfcColumn;
839 struct IfcPropertyReferenceValue;
840 typedef NotImplemented IfcMaterialClassificationRelationship; // (not currently used by Assimp)
841 struct IfcElectricMotorType;
842 struct IfcSpatialStructureElementType;
843 struct IfcSpaceType;
844 typedef NotImplemented IfcExternalReference; // (not currently used by Assimp)
845 typedef NotImplemented IfcExternallyDefinedHatchStyle; // (not currently used by Assimp)
846 struct IfcColumnType;
847 struct IfcCraneRailAShapeProfileDef;
848 struct IfcCondenserType;
849 typedef NotImplemented IfcRelConnectsElements; // (not currently used by Assimp)
850 typedef NotImplemented IfcRelConnectsWithRealizingElements; // (not currently used by Assimp)
851 struct IfcCircleProfileDef;
852 struct IfcCircleHollowProfileDef;
853 typedef NotImplemented IfcOrganizationRelationship; // (not currently used by Assimp)
854 struct IfcPlacement;
855 struct IfcAxis2Placement3D;
918856 struct IfcPresentationStyle;
919 typedef NotImplemented IfcClassificationItemRelationship; // (not currently used by Assimp)
920 struct IfcElectricHeaterType;
921 struct IfcBuildingStorey;
922 struct IfcVertex;
923 struct IfcVertexPoint;
857 typedef NotImplemented IfcCurveStyle; // (not currently used by Assimp)
858 struct IfcEquipmentElement;
859 struct IfcCompositeCurveSegment;
860 struct IfcRectangleProfileDef;
861 typedef NotImplemented IfcPhysicalQuantity; // (not currently used by Assimp)
862 typedef NotImplemented IfcPhysicalComplexQuantity; // (not currently used by Assimp)
863 typedef NotImplemented IfcRelAssociatesLibrary; // (not currently used by Assimp)
864 typedef NotImplemented IfcRelSequence; // (not currently used by Assimp)
865 struct IfcBuildingElementProxy;
866 struct IfcDistributionControlElementType;
924867 struct IfcFlowInstrumentType;
925 struct IfcParameterizedProfileDef;
926 struct IfcUShapeProfileDef;
927 struct IfcRamp;
928 typedef NotImplemented IfcFillAreaStyle; // (not currently used by Assimp)
929 struct IfcCompositeCurve;
930 typedef NotImplemented IfcRelServicesBuildings; // (not currently used by Assimp)
931 struct IfcStructuralCurveMemberVarying;
932 typedef NotImplemented IfcRelReferencedInSpatialStructure; // (not currently used by Assimp)
933 struct IfcRampFlightType;
934868 struct IfcDraughtingCallout;
935869 struct IfcDimensionCurveDirectedCallout;
870 struct IfcLinearDimension;
871 struct IfcElementAssembly;
872 typedef NotImplemented IfcDraughtingCalloutRelationship; // (not currently used by Assimp)
873 struct IfcCsgPrimitive3D;
874 struct IfcRightCircularCone;
875 typedef NotImplemented IfcExternallyDefinedSurfaceStyle; // (not currently used by Assimp)
876 struct IfcProjectOrder;
877 typedef NotImplemented IfcPropertyConstraintRelationship; // (not currently used by Assimp)
878 struct IfcLShapeProfileDef;
879 struct IfcAngularDimension;
880 typedef NotImplemented IfcTextStyleForDefinedFont; // (not currently used by Assimp)
881 struct IfcLocalPlacement;
882 struct IfcSweptAreaSolid;
883 struct IfcRevolvedAreaSolid;
884 struct IfcStructuralSurfaceConnection;
936885 struct IfcRadiusDimension;
937 struct IfcEdgeFeature;
938 struct IfcSweptAreaSolid;
939 struct IfcExtrudedAreaSolid;
940 typedef NotImplemented IfcQuantityCount; // (not currently used by Assimp)
941 struct IfcAnnotationTextOccurrence;
942 typedef NotImplemented IfcReferencesValueDocument; // (not currently used by Assimp)
886 struct IfcSweptDiskSolid;
887 struct IfcHalfSpaceSolid;
888 struct IfcPolygonalBoundedHalfSpace;
889 struct IfcTimeSeriesSchedule;
890 typedef NotImplemented IfcDimensionCalloutRelationship; // (not currently used by Assimp)
891 struct IfcCooledBeamType;
892 struct IfcProject;
893 typedef NotImplemented IfcApprovalRelationship; // (not currently used by Assimp)
894 struct IfcEvaporatorType;
895 struct IfcLaborResource;
896 typedef NotImplemented IfcStructuralLoadSingleDisplacementDistortion; // (not currently used by Assimp)
897 struct IfcPropertyBoundedValue;
898 struct IfcRampFlightType;
899 struct IfcMember;
900 typedef NotImplemented IfcStructuralLoadPlanarForce; // (not currently used by Assimp)
901 struct IfcTubeBundleType;
902 struct IfcValveType;
903 typedef NotImplemented IfcExternallyDefinedTextFont; // (not currently used by Assimp)
904 struct IfcTrimmedCurve;
905 struct IfcRelDefines;
906 struct IfcRelDefinesByProperties;
907 typedef NotImplemented IfcRelAssignsToControl; // (not currently used by Assimp)
908 struct IfcActor;
909 struct IfcOccupant;
910 struct IfcHumidifierType;
911 struct IfcArbitraryOpenProfileDef;
912 typedef NotImplemented IfcRelAssignsToProjectOrder; // (not currently used by Assimp)
913 struct IfcPermit;
914 struct IfcOffsetCurve3D;
915 struct IfcLightSource;
916 struct IfcLightSourcePositional;
917 typedef NotImplemented IfcSurfaceTexture; // (not currently used by Assimp)
918 typedef NotImplemented IfcBlobTexture; // (not currently used by Assimp)
919 struct IfcCompositeProfileDef;
920 typedef NotImplemented IfcDocumentInformation; // (not currently used by Assimp)
921 typedef NotImplemented IfcSurfaceStyleLighting; // (not currently used by Assimp)
922 typedef NotImplemented IfcPhysicalSimpleQuantity; // (not currently used by Assimp)
923 typedef NotImplemented IfcQuantityArea; // (not currently used by Assimp)
924 typedef NotImplemented IfcTimeSeries; // (not currently used by Assimp)
925 typedef NotImplemented IfcClassificationNotation; // (not currently used by Assimp)
926 struct IfcRamp;
927 typedef NotImplemented IfcPreDefinedItem; // (not currently used by Assimp)
928 typedef NotImplemented IfcPreDefinedCurveFont; // (not currently used by Assimp)
929 typedef NotImplemented IfcPreDefinedColour; // (not currently used by Assimp)
930 typedef NotImplemented IfcCurrencyRelationship; // (not currently used by Assimp)
931 struct IfcFlowMovingDevice;
932 struct IfcSpaceHeaterType;
933 struct IfcLampType;
934 struct IfcBuildingElementComponent;
935 struct IfcReinforcingElement;
936 struct IfcReinforcingBar;
937 struct IfcElectricHeaterType;
938 struct IfcTShapeProfileDef;
939 typedef NotImplemented IfcConstraint; // (not currently used by Assimp)
940 typedef NotImplemented IfcObjective; // (not currently used by Assimp)
941 struct IfcStructuralActivity;
942 struct IfcStructuralAction;
943 typedef NotImplemented IfcTextureCoordinate; // (not currently used by Assimp)
944 typedef NotImplemented IfcTextureMap; // (not currently used by Assimp)
945 typedef NotImplemented IfcMonetaryUnit; // (not currently used by Assimp)
946 typedef NotImplemented IfcQuantityTime; // (not currently used by Assimp)
947 typedef NotImplemented IfcTableRow; // (not currently used by Assimp)
948 typedef NotImplemented IfcLightDistributionData; // (not currently used by Assimp)
949 struct IfcDuctFittingType;
950 struct IfcCartesianTransformationOperator2D;
951 struct IfcCartesianTransformationOperator2DnonUniform;
952 typedef NotImplemented IfcClassificationNotationFacet; // (not currently used by Assimp)
953 typedef NotImplemented IfcRelAssociatesApproval; // (not currently used by Assimp)
954 typedef NotImplemented IfcDraughtingPreDefinedCurveFont; // (not currently used by Assimp)
955 typedef NotImplemented IfcStructuralLoadSingleForce; // (not currently used by Assimp)
956 typedef NotImplemented IfcStructuralLoadSingleForceWarping; // (not currently used by Assimp)
957 typedef NotImplemented IfcCurveStyleFontAndScaling; // (not currently used by Assimp)
958 struct IfcVirtualElement;
959 struct IfcRightCircularCylinder;
960 struct IfcOutletType;
961 struct IfcRelDecomposes;
962 typedef NotImplemented IfcRelNests; // (not currently used by Assimp)
963 struct IfcCovering;
964 typedef NotImplemented IfcExternallyDefinedSymbol; // (not currently used by Assimp)
965 typedef NotImplemented IfcIrregularTimeSeries; // (not currently used by Assimp)
966 struct IfcPolyline;
967 struct IfcPath;
968 struct IfcElementComponent;
969 struct IfcFastener;
970 struct IfcMappedItem;
971 typedef NotImplemented IfcMetric; // (not currently used by Assimp)
972 typedef NotImplemented IfcDocumentReference; // (not currently used by Assimp)
973 typedef NotImplemented IfcSectionProperties; // (not currently used by Assimp)
974 struct IfcRectangularPyramid;
975 typedef NotImplemented IfcRelReferencedInSpatialStructure; // (not currently used by Assimp)
976 struct IfcCrewResource;
977 struct IfcNamedUnit;
978 struct IfcContextDependentUnit;
979 struct IfcUnitaryEquipmentType;
980 struct IfcRoof;
981 typedef NotImplemented IfcRelAssignsTasks; // (not currently used by Assimp)
982 struct IfcStructuralMember;
983 typedef NotImplemented IfcRelConnectsPorts; // (not currently used by Assimp)
984 struct IfcStyleModel;
985 struct IfcStyledRepresentation;
986 struct IfcSpatialStructureElement;
987 struct IfcBuilding;
988 struct IfcConnectedFaceSet;
989 struct IfcOpenShell;
990 struct IfcFacetedBrep;
991 typedef NotImplemented IfcLocalTime; // (not currently used by Assimp)
992 typedef NotImplemented IfcMechanicalConcreteMaterialProperties; // (not currently used by Assimp)
993 struct IfcConic;
994 struct IfcCoveringType;
995 struct IfcRoundedRectangleProfileDef;
996 struct IfcAirTerminalType;
997 struct IfcFlowMovingDeviceType;
998 struct IfcCompressorType;
999 typedef NotImplemented IfcWindowPanelProperties; // (not currently used by Assimp)
1000 typedef NotImplemented IfcPreDefinedSymbol; // (not currently used by Assimp)
1001 typedef NotImplemented IfcPreDefinedTerminatorSymbol; // (not currently used by Assimp)
1002 struct IfcIShapeProfileDef;
1003 struct IfcAsymmetricIShapeProfileDef;
1004 struct IfcControllerType;
1005 struct IfcRailing;
1006 struct IfcGroup;
1007 struct IfcAsset;
1008 struct IfcMaterialDefinitionRepresentation;
1009 typedef NotImplemented IfcCurveStyleFontPattern; // (not currently used by Assimp)
1010 typedef NotImplemented IfcApprovalPropertyRelationship; // (not currently used by Assimp)
1011 struct IfcRailingType;
1012 struct IfcWall;
1013 typedef NotImplemented IfcClassificationItem; // (not currently used by Assimp)
1014 struct IfcStructuralPointConnection;
1015 typedef NotImplemented IfcConnectionGeometry; // (not currently used by Assimp)
1016 typedef NotImplemented IfcConnectionPointGeometry; // (not currently used by Assimp)
1017 typedef NotImplemented IfcTimeSeriesValue; // (not currently used by Assimp)
1018 struct IfcPropertyListValue;
1019 struct IfcFurnitureStandard;
1020 typedef NotImplemented IfcRelSchedulesCostItems; // (not currently used by Assimp)
1021 struct IfcElectricGeneratorType;
1022 struct IfcDoor;
1023 struct IfcStyledItem;
1024 struct IfcAnnotationOccurrence;
1025 struct IfcAnnotationSymbolOccurrence;
1026 struct IfcArbitraryClosedProfileDef;
1027 struct IfcArbitraryProfileDefWithVoids;
1028 struct IfcLine;
1029 typedef NotImplemented IfcMaterialLayerSet; // (not currently used by Assimp)
1030 struct IfcFlowSegmentType;
1031 struct IfcAirTerminalBoxType;
1032 typedef NotImplemented IfcRelConnectsStructuralMember; // (not currently used by Assimp)
1033 struct IfcPropertySingleValue;
1034 struct IfcAlarmType;
1035 struct IfcEllipseProfileDef;
9431036 struct IfcStair;
944 typedef NotImplemented IfcSymbolStyle; // (not currently used by Assimp)
945 struct IfcFillAreaStyleTileSymbolWithStyle;
946 struct IfcAnnotationSymbolOccurrence;
947 struct IfcTerminatorSymbol;
948 struct IfcDimensionCurveTerminator;
949 struct IfcRectangleProfileDef;
950 struct IfcRectangleHollowProfileDef;
951 typedef NotImplemented IfcRelAssociatesLibrary; // (not currently used by Assimp)
952 struct IfcLocalPlacement;
953 typedef NotImplemented IfcOpticalMaterialProperties; // (not currently used by Assimp)
954 typedef NotImplemented IfcServiceLifeFactor; // (not currently used by Assimp)
955 typedef NotImplemented IfcRelAssignsTasks; // (not currently used by Assimp)
956 struct IfcTask;
957 struct IfcAnnotationFillAreaOccurrence;
958 struct IfcFace;
959 struct IfcFlowSegmentType;
960 struct IfcDuctSegmentType;
961 typedef NotImplemented IfcPropertyEnumeration; // (not currently used by Assimp)
962 struct IfcConstructionResource;
963 struct IfcConstructionEquipmentResource;
964 struct IfcSanitaryTerminalType;
965 typedef NotImplemented IfcPreDefinedDimensionSymbol; // (not currently used by Assimp)
966 typedef NotImplemented IfcOrganization; // (not currently used by Assimp)
967 struct IfcCircleProfileDef;
968 struct IfcStructuralReaction;
969 struct IfcStructuralPointReaction;
970 struct IfcRailing;
971 struct IfcTextLiteral;
972 struct IfcCartesianTransformationOperator;
973 typedef NotImplemented IfcCostValue; // (not currently used by Assimp)
974 typedef NotImplemented IfcTextStyle; // (not currently used by Assimp)
975 struct IfcLinearDimension;
976 struct IfcDamperType;
977 struct IfcSIUnit;
978 typedef NotImplemented IfcSurfaceStyleLighting; // (not currently used by Assimp)
979 struct IfcMeasureWithUnit;
980 typedef NotImplemented IfcMaterialLayerSet; // (not currently used by Assimp)
981 struct IfcDistributionElement;
982 struct IfcDistributionControlElement;
983 struct IfcTransformerType;
984 struct IfcLaborResource;
985 struct IfcDerivedProfileDef;
986 typedef NotImplemented IfcRelConnectsStructuralMember; // (not currently used by Assimp)
987 typedef NotImplemented IfcRelConnectsWithEccentricity; // (not currently used by Assimp)
988 struct IfcFurnitureStandard;
989 struct IfcStairFlightType;
990 struct IfcWorkControl;
991 struct IfcWorkPlan;
992 typedef NotImplemented IfcRelDefines; // (not currently used by Assimp)
993 typedef NotImplemented IfcRelDefinesByProperties; // (not currently used by Assimp)
994 struct IfcCondition;
995 typedef NotImplemented IfcGridAxis; // (not currently used by Assimp)
996 struct IfcRelVoidsElement;
997 struct IfcWindow;
998 typedef NotImplemented IfcRelFlowControlElements; // (not currently used by Assimp)
999 typedef NotImplemented IfcRelConnectsPortToElement; // (not currently used by Assimp)
1000 struct IfcProtectiveDeviceType;
1001 struct IfcJunctionBoxType;
1002 struct IfcStructuralAnalysisModel;
1003 struct IfcAxis2Placement2D;
1004 struct IfcSpaceType;
1005 struct IfcEllipseProfileDef;
1006 struct IfcDistributionFlowElement;
1007 struct IfcFlowMovingDevice;
1008 struct IfcSurfaceStyleWithTextures;
1009 struct IfcGeometricSet;
1010 typedef NotImplemented IfcMechanicalMaterialProperties; // (not currently used by Assimp)
1011 typedef NotImplemented IfcMechanicalConcreteMaterialProperties; // (not currently used by Assimp)
1012 typedef NotImplemented IfcRibPlateProfileProperties; // (not currently used by Assimp)
1013 typedef NotImplemented IfcDocumentInformationRelationship; // (not currently used by Assimp)
1014 struct IfcProjectOrder;
1015 struct IfcBSplineCurve;
1016 struct IfcBezierCurve;
1017 struct IfcStructuralPointConnection;
1018 struct IfcFlowController;
1019 struct IfcElectricDistributionPoint;
1020 struct IfcSite;
1021 struct IfcOffsetCurve3D;
1022 typedef NotImplemented IfcPropertySet; // (not currently used by Assimp)
1023 typedef NotImplemented IfcConnectionSurfaceGeometry; // (not currently used by Assimp)
1024 struct IfcVirtualElement;
1025 struct IfcConstructionProductResource;
1026 typedef NotImplemented IfcWaterProperties; // (not currently used by Assimp)
1027 struct IfcSurfaceCurveSweptAreaSolid;
1028 typedef NotImplemented IfcPermeableCoveringProperties; // (not currently used by Assimp)
1029 struct IfcCartesianTransformationOperator3D;
1030 struct IfcCartesianTransformationOperator3DnonUniform;
1031 struct IfcCrewResource;
1032 struct IfcStructuralSurfaceMember;
1033 struct Ifc2DCompositeCurve;
1034 struct IfcRepresentationContext;
1035 struct IfcGeometricRepresentationContext;
1036 struct IfcFlowTreatmentDevice;
1037 typedef NotImplemented IfcTextStyleForDefinedFont; // (not currently used by Assimp)
1038 struct IfcRightCircularCylinder;
1039 struct IfcWasteTerminalType;
1040 typedef NotImplemented IfcSpaceThermalLoadProperties; // (not currently used by Assimp)
1041 typedef NotImplemented IfcConstraintRelationship; // (not currently used by Assimp)
1042 struct IfcBuildingElementComponent;
1043 struct IfcBuildingElementPart;
1044 struct IfcWall;
1045 struct IfcWallStandardCase;
1046 typedef NotImplemented IfcApprovalActorRelationship; // (not currently used by Assimp)
1047 struct IfcPath;
1048 struct IfcDefinedSymbol;
1049 struct IfcStructuralSurfaceMemberVarying;
1050 struct IfcPoint;
1051 struct IfcSurfaceOfRevolution;
1052 struct IfcFlowTerminal;
1053 struct IfcFurnishingElement;
1054 typedef NotImplemented IfcCurveStyleFont; // (not currently used by Assimp)
1055 struct IfcSurfaceStyleShading;
1056 struct IfcSurfaceStyleRendering;
1057 typedef NotImplemented IfcCoordinatedUniversalTimeOffset; // (not currently used by Assimp)
1058 typedef NotImplemented IfcStructuralLoadSingleDisplacement; // (not currently used by Assimp)
1059 struct IfcCircleHollowProfileDef;
1060 struct IfcFlowMovingDeviceType;
1061 struct IfcFanType;
1062 struct IfcStructuralPlanarActionVarying;
1063 struct IfcProductRepresentation;
1064 typedef NotImplemented IfcRelDefinesByType; // (not currently used by Assimp)
10651037 typedef NotImplemented IfcPreDefinedTextFont; // (not currently used by Assimp)
10661038 typedef NotImplemented IfcTextStyleFontModel; // (not currently used by Assimp)
1067 struct IfcStackTerminalType;
1068 typedef NotImplemented IfcApprovalPropertyRelationship; // (not currently used by Assimp)
1069 typedef NotImplemented IfcExternallyDefinedSymbol; // (not currently used by Assimp)
1070 struct IfcReinforcingElement;
1071 struct IfcReinforcingMesh;
1072 struct IfcOrderAction;
1073 typedef NotImplemented IfcRelCoversBldgElements; // (not currently used by Assimp)
1074 struct IfcLightSource;
1075 struct IfcLightSourceDirectional;
1076 struct IfcLoop;
1077 struct IfcVertexLoop;
1078 struct IfcChamferEdgeFeature;
1079 typedef NotImplemented IfcWindowPanelProperties; // (not currently used by Assimp)
1080 typedef NotImplemented IfcClassification; // (not currently used by Assimp)
1039 struct IfcSurfaceStyleShading;
1040 struct IfcPumpType;
1041 struct IfcDefinedSymbol;
1042 typedef NotImplemented IfcClassificationItemRelationship; // (not currently used by Assimp)
1043 typedef NotImplemented IfcGeneralMaterialProperties; // (not currently used by Assimp)
10811044 struct IfcElementComponentType;
10821045 struct IfcFastenerType;
10831046 struct IfcMechanicalFastenerType;
1047 typedef NotImplemented IfcPermeableCoveringProperties; // (not currently used by Assimp)
1048 struct IfcFlowFitting;
1049 typedef NotImplemented IfcApproval; // (not currently used by Assimp)
1050 typedef NotImplemented IfcShapeAspect; // (not currently used by Assimp)
1051 typedef NotImplemented IfcConstraintClassificationRelationship; // (not currently used by Assimp)
1052 struct IfcLightSourceDirectional;
1053 struct IfcSurfaceStyle;
1054 typedef NotImplemented IfcRelConnectsStructuralActivity; // (not currently used by Assimp)
1055 typedef NotImplemented IfcRelAssociatesProfileProperties; // (not currently used by Assimp)
1056 struct IfcAnnotationSurface;
1057 typedef NotImplemented IfcFuelProperties; // (not currently used by Assimp)
1058 struct IfcFlowController;
1059 typedef NotImplemented IfcFailureConnectionCondition; // (not currently used by Assimp)
1060 struct IfcBuildingStorey;
1061 struct IfcWorkControl;
1062 struct IfcWorkSchedule;
1063 typedef NotImplemented IfcTable; // (not currently used by Assimp)
1064 struct IfcDuctSegmentType;
1065 typedef NotImplemented IfcStructuralSteelProfileProperties; // (not currently used by Assimp)
1066 typedef NotImplemented IfcDraughtingPreDefinedTextFont; // (not currently used by Assimp)
1067 struct IfcFace;
1068 struct IfcStructuralSurfaceMember;
1069 struct IfcStructuralSurfaceMemberVarying;
1070 struct IfcFaceSurface;
1071 typedef NotImplemented IfcClassification; // (not currently used by Assimp)
1072 typedef NotImplemented IfcMaterialList; // (not currently used by Assimp)
1073 struct IfcCostSchedule;
1074 typedef NotImplemented IfcCoordinatedUniversalTimeOffset; // (not currently used by Assimp)
1075 struct IfcPlanarExtent;
1076 struct IfcPlanarBox;
1077 typedef NotImplemented IfcFillAreaStyle; // (not currently used by Assimp)
1078 typedef NotImplemented IfcSectionReinforcementProperties; // (not currently used by Assimp)
1079 struct IfcColourSpecification;
1080 struct IfcVector;
1081 struct IfcBeam;
1082 struct IfcColourRgb;
1083 struct IfcStructuralPlanarAction;
1084 struct IfcStructuralPlanarActionVarying;
1085 struct IfcSite;
1086 struct IfcDiscreteAccessoryType;
1087 struct IfcVibrationIsolatorType;
1088 struct IfcEvaporativeCoolerType;
1089 struct IfcDistributionChamberElementType;
1090 struct IfcFeatureElementAddition;
1091 typedef NotImplemented IfcRelAssignsToResource; // (not currently used by Assimp)
1092 struct IfcStructuredDimensionCallout;
1093 struct IfcCoolingTowerType;
1094 struct IfcCenterLineProfileDef;
1095 typedef NotImplemented IfcTextureVertex; // (not currently used by Assimp)
1096 typedef NotImplemented IfcOrganization; // (not currently used by Assimp)
1097 struct IfcWindowStyle;
1098 struct IfcLightSourceGoniometric;
1099 typedef NotImplemented IfcRibPlateProfileProperties; // (not currently used by Assimp)
1100 struct IfcTransformerType;
1101 struct IfcMemberType;
1102 struct IfcSurfaceOfLinearExtrusion;
1103 struct IfcMotorConnectionType;
1104 struct IfcFlowTreatmentDeviceType;
1105 struct IfcDuctSilencerType;
1106 typedef NotImplemented IfcWindowLiningProperties; // (not currently used by Assimp)
1107 struct IfcFurnishingElementType;
1108 struct IfcSystemFurnitureElementType;
1109 typedef NotImplemented IfcConnectionPointEccentricity; // (not currently used by Assimp)
1110 struct IfcWasteTerminalType;
1111 struct IfcBSplineCurve;
1112 struct IfcBezierCurve;
1113 typedef NotImplemented IfcDocumentInformationRelationship; // (not currently used by Assimp)
1114 struct IfcActuatorType;
1115 struct IfcDistributionControlElement;
1116 struct IfcAnnotation;
1117 typedef NotImplemented IfcRelAssociatesDocument; // (not currently used by Assimp)
1118 typedef NotImplemented IfcDoorLiningProperties; // (not currently used by Assimp)
1119 struct IfcShellBasedSurfaceModel;
1120 struct IfcActionRequest;
1121 struct IfcExtrudedAreaSolid;
1122 struct IfcSystem;
1123 struct IfcFillAreaStyleHatching;
1124 struct IfcRelVoidsElement;
1125 typedef NotImplemented IfcRelConnectsPathElements; // (not currently used by Assimp)
1126 typedef NotImplemented IfcRelSpaceBoundary; // (not currently used by Assimp)
1127 struct IfcSurfaceCurveSweptAreaSolid;
1128 struct IfcCartesianTransformationOperator3DnonUniform;
1129 typedef NotImplemented IfcRelInteractionRequirements; // (not currently used by Assimp)
1130 struct IfcCurtainWallType;
1131 typedef NotImplemented IfcQuantityLength; // (not currently used by Assimp)
1132 struct IfcEquipmentStandard;
1133 struct IfcFlowStorageDeviceType;
1134 typedef NotImplemented IfcVirtualGridIntersection; // (not currently used by Assimp)
1135 struct IfcDiameterDimension;
1136 struct IfcSwitchingDeviceType;
1137 typedef NotImplemented IfcAddress; // (not currently used by Assimp)
1138 typedef NotImplemented IfcTelecomAddress; // (not currently used by Assimp)
1139 struct IfcWindow;
1140 typedef NotImplemented IfcMechanicalSteelMaterialProperties; // (not currently used by Assimp)
1141 struct IfcFlowTreatmentDevice;
1142 typedef NotImplemented IfcRelServicesBuildings; // (not currently used by Assimp)
1143 struct IfcChillerType;
1144 typedef NotImplemented IfcRelAssignsToProduct; // (not currently used by Assimp)
1145 struct IfcRectangleHollowProfileDef;
1146 typedef NotImplemented IfcEnergyProperties; // (not currently used by Assimp)
1147 struct IfcBoxedHalfSpace;
1148 struct IfcAxis2Placement2D;
1149 struct IfcSpaceProgram;
1150 struct IfcPoint;
1151 struct IfcCartesianPoint;
1152 struct IfcBoundedSurface;
1153 struct IfcLoop;
1154 struct IfcPolyLoop;
1155 typedef NotImplemented IfcPreDefinedPointMarkerSymbol; // (not currently used by Assimp)
1156 struct IfcTerminatorSymbol;
1157 struct IfcDimensionCurveTerminator;
1158 typedef NotImplemented IfcRelProjectsElement; // (not currently used by Assimp)
1159 struct IfcTrapeziumProfileDef;
1160 struct IfcRepresentationContext;
1161 struct IfcGeometricRepresentationContext;
1162 typedef NotImplemented IfcTextStyleWithBoxCharacteristics; // (not currently used by Assimp)
1163 struct IfcCurveBoundedPlane;
1164 typedef NotImplemented IfcQuantityCount; // (not currently used by Assimp)
1165 typedef NotImplemented IfcTimeSeriesReferenceRelationship; // (not currently used by Assimp)
1166 typedef NotImplemented IfcStructuralLoadTemperature; // (not currently used by Assimp)
1167 struct IfcSIUnit;
1168 struct IfcStructuralReaction;
1169 struct IfcStructuralPointReaction;
1170 struct IfcAxis1Placement;
1171 typedef NotImplemented IfcReinforcementDefinitionProperties; // (not currently used by Assimp)
1172 struct IfcElectricApplianceType;
1173 struct IfcSensorType;
1174 struct IfcFurnishingElement;
1175 struct IfcProtectiveDeviceType;
1176 struct IfcZShapeProfileDef;
10841177 struct IfcScheduleTimeControl;
1085 struct IfcSurfaceStyle;
1086 typedef NotImplemented IfcReinforcementBarProperties; // (not currently used by Assimp)
1087 struct IfcOpenShell;
1088 typedef NotImplemented IfcLibraryReference; // (not currently used by Assimp)
1089 struct IfcSubContractResource;
1090 typedef NotImplemented IfcTimeSeriesReferenceRelationship; // (not currently used by Assimp)
1091 struct IfcSweptDiskSolid;
1092 struct IfcCompositeProfileDef;
1178 struct IfcRepresentationMap;
1179 struct IfcClosedShell;
1180 struct IfcBuildingElementPart;
1181 typedef NotImplemented IfcDraughtingPreDefinedColour; // (not currently used by Assimp)
1182 typedef NotImplemented IfcPostalAddress; // (not currently used by Assimp)
1183 struct IfcBlock;
1184 struct IfcLightFixtureType;
1185 struct IfcOpeningElement;
1186 struct IfcLightSourceSpot;
1187 struct IfcTendonAnchor;
1188 typedef NotImplemented IfcSurfaceStyleRefraction; // (not currently used by Assimp)
1189 struct IfcElectricFlowStorageDeviceType;
1190 typedef NotImplemented IfcFluidFlowProperties; // (not currently used by Assimp)
1191 struct IfcSphere;
1192 typedef NotImplemented IfcRelAssociatesAppliedValue; // (not currently used by Assimp)
1193 struct IfcDamperType;
1194 struct IfcProjectOrderRecord;
1195 typedef NotImplemented IfcDimensionalExponents; // (not currently used by Assimp)
1196 typedef NotImplemented IfcRelDefinesByType; // (not currently used by Assimp)
1197 struct IfcDistributionChamberElement;
1198 struct IfcMechanicalFastener;
1199 typedef NotImplemented IfcQuantityVolume; // (not currently used by Assimp)
1200 struct IfcRectangularTrimmedSurface;
1201 typedef NotImplemented IfcDateAndTime; // (not currently used by Assimp)
1202 struct IfcZone;
1203 struct IfcFanType;
1204 struct IfcGeometricSet;
1205 struct IfcFillAreaStyleTiles;
1206 typedef NotImplemented IfcPixelTexture; // (not currently used by Assimp)
1207 struct IfcCableSegmentType;
1208 struct IfcRelOverridesProperties;
1209 struct IfcMeasureWithUnit;
1210 struct IfcSlabType;
1211 struct IfcServiceLife;
1212 struct IfcFurnitureType;
1213 struct IfcCostItem;
1214 struct IfcReinforcingMesh;
1215 typedef NotImplemented IfcExtendedMaterialProperties; // (not currently used by Assimp)
1216 typedef NotImplemented IfcActorRole; // (not currently used by Assimp)
1217 struct IfcFacetedBrepWithVoids;
1218 typedef NotImplemented IfcConstraintAggregationRelationship; // (not currently used by Assimp)
1219 struct IfcGasTerminalType;
1220 typedef NotImplemented IfcRelConnectsWithEccentricity; // (not currently used by Assimp)
1221 struct IfcPile;
1222 struct IfcFillAreaStyleTileSymbolWithStyle;
10931223 typedef NotImplemented IfcElectricalBaseProperties; // (not currently used by Assimp)
1094 typedef NotImplemented IfcPreDefinedPointMarkerSymbol; // (not currently used by Assimp)
1095 struct IfcTankType;
1224 struct IfcConstructionMaterialResource;
1225 struct IfcAnnotationCurveOccurrence;
1226 struct IfcDimensionCurve;
1227 struct IfcGeometricCurveSet;
1228 struct IfcRelAggregates;
1229 struct IfcFaceBasedSurfaceModel;
1230 struct IfcEnergyConversionDevice;
1231 struct IfcRampFlight;
1232 typedef NotImplemented IfcPropertyEnumeration; // (not currently used by Assimp)
1233 struct IfcVertexLoop;
1234 struct IfcPlate;
1235 struct IfcUShapeProfileDef;
1236 typedef NotImplemented IfcHygroscopicMaterialProperties; // (not currently used by Assimp)
1237 struct IfcFaceBound;
1238 struct IfcFaceOuterBound;
1239 struct IfcOneDirectionRepeatFactor;
1240 struct IfcBoilerType;
1241 struct IfcConstructionEquipmentResource;
1242 struct IfcComplexProperty;
1243 struct IfcFooting;
1244 typedef NotImplemented IfcOpticalMaterialProperties; // (not currently used by Assimp)
1245 struct IfcConstructionProductResource;
1246 typedef NotImplemented IfcBoundaryEdgeCondition; // (not currently used by Assimp)
1247 struct IfcDerivedProfileDef;
1248 struct IfcPropertyTableValue;
1249 typedef NotImplemented IfcRelAssignsToGroup; // (not currently used by Assimp)
1250 struct IfcFlowMeterType;
1251 struct IfcDoorStyle;
1252 typedef NotImplemented IfcRelConnectsPortToElement; // (not currently used by Assimp)
1253 typedef NotImplemented IfcRelAssociatesClassification; // (not currently used by Assimp)
1254 struct IfcUnitAssignment;
1255 struct IfcFlowTerminal;
1256 struct IfcCraneRailFShapeProfileDef;
1257 struct IfcFlowSegment;
1258 struct IfcElementQuantity;
10961259 typedef NotImplemented IfcBoundaryNodeCondition; // (not currently used by Assimp)
10971260 typedef NotImplemented IfcBoundaryNodeConditionWarping; // (not currently used by Assimp)
1098 typedef NotImplemented IfcRelAssignsToGroup; // (not currently used by Assimp)
1099 typedef NotImplemented IfcPresentationLayerAssignment; // (not currently used by Assimp)
1100 struct IfcSphere;
1101 struct IfcPolyLoop;
1102 struct IfcCableCarrierFittingType;
1103 struct IfcHumidifierType;
1104 typedef NotImplemented IfcPropertyListValue; // (not currently used by Assimp)
1105 typedef NotImplemented IfcPropertyConstraintRelationship; // (not currently used by Assimp)
1106 struct IfcPerformanceHistory;
1107 struct IfcShapeModel;
1108 struct IfcTopologyRepresentation;
1109 struct IfcBuilding;
1110 struct IfcRoundedRectangleProfileDef;
1261 struct IfcCurtainWall;
1262 struct IfcDiscreteAccessory;
1263 struct IfcGrid;
1264 struct IfcSanitaryTerminalType;
1265 typedef NotImplemented IfcSoundProperties; // (not currently used by Assimp)
1266 struct IfcSubedge;
1267 typedef NotImplemented IfcTextStyleTextModel; // (not currently used by Assimp)
1268 struct IfcFilterType;
1269 typedef NotImplemented IfcSymbolStyle; // (not currently used by Assimp)
1270 struct IfcTendon;
1271 typedef NotImplemented IfcDimensionPair; // (not currently used by Assimp)
1272 struct IfcStructuralLoadGroup;
1273 struct IfcPresentationStyleAssignment;
1274 typedef NotImplemented IfcRegularTimeSeries; // (not currently used by Assimp)
1275 struct IfcStructuralCurveMember;
1276 struct IfcLightSourceAmbient;
1277 struct IfcCondition;
1278 struct IfcPort;
1279 struct IfcSpace;
1280 struct IfcHeatExchangerType;
1281 struct IfcTankType;
1282 struct IfcInventory;
1283 typedef NotImplemented IfcTextStyle; // (not currently used by Assimp)
1284 typedef NotImplemented IfcAppliedValueRelationship; // (not currently used by Assimp)
1285 typedef NotImplemented IfcSoundValue; // (not currently used by Assimp)
1286 struct IfcTransportElementType;
1287 struct IfcAirToAirHeatRecoveryType;
11111288 struct IfcStairFlight;
1112 typedef NotImplemented IfcSurfaceStyleRefraction; // (not currently used by Assimp)
1113 typedef NotImplemented IfcRelInteractionRequirements; // (not currently used by Assimp)
1114 typedef NotImplemented IfcConstraint; // (not currently used by Assimp)
1115 typedef NotImplemented IfcObjective; // (not currently used by Assimp)
1289 struct IfcElectricalElement;
1290 typedef NotImplemented IfcLightIntensityDistribution; // (not currently used by Assimp)
1291 typedef NotImplemented IfcClassificationReference; // (not currently used by Assimp)
1292 struct IfcSurfaceStyleWithTextures;
1293 struct IfcBoundingBox;
1294 typedef NotImplemented IfcApplication; // (not currently used by Assimp)
1295 struct IfcWallType;
1296 struct IfcMove;
1297 struct IfcCircle;
1298 struct IfcOffsetCurve2D;
1299 typedef NotImplemented IfcMaterialLayerSetUsage; // (not currently used by Assimp)
1300 struct IfcPointOnCurve;
1301 struct IfcStructuralResultGroup;
1302 struct IfcSectionedSpine;
1303 struct IfcSlab;
11161304 typedef NotImplemented IfcConnectionPortGeometry; // (not currently used by Assimp)
1117 struct IfcDistributionChamberElement;
1305 typedef NotImplemented IfcQuantityWeight; // (not currently used by Assimp)
1306 typedef NotImplemented IfcRelAssociatesMaterial; // (not currently used by Assimp)
1307 struct IfcVertex;
1308 struct IfcVertexPoint;
1309 typedef NotImplemented IfcReferencesValueDocument; // (not currently used by Assimp)
11181310 typedef NotImplemented IfcPersonAndOrganization; // (not currently used by Assimp)
1119 struct IfcShapeRepresentation;
1120 struct IfcRampFlight;
1121 struct IfcBeamType;
1122 struct IfcRelDecomposes;
1123 struct IfcRoof;
1124 struct IfcFooting;
1125 typedef NotImplemented IfcRelCoversSpaces; // (not currently used by Assimp)
1126 struct IfcLightSourceAmbient;
1127 typedef NotImplemented IfcTimeSeriesValue; // (not currently used by Assimp)
1128 struct IfcWindowStyle;
1129 typedef NotImplemented IfcPropertyReferenceValue; // (not currently used by Assimp)
1130 typedef NotImplemented IfcApproval; // (not currently used by Assimp)
1131 typedef NotImplemented IfcRelConnectsStructuralElement; // (not currently used by Assimp)
1132 struct IfcBuildingElementProxyType;
1133 typedef NotImplemented IfcRelAssociatesProfileProperties; // (not currently used by Assimp)
1134 struct IfcAxis2Placement3D;
1135 typedef NotImplemented IfcRelConnectsPorts; // (not currently used by Assimp)
1136 struct IfcEdgeCurve;
1137 struct IfcClosedShell;
1138 struct IfcTendonAnchor;
1139 struct IfcCondenserType;
1140 typedef NotImplemented IfcQuantityTime; // (not currently used by Assimp)
1141 typedef NotImplemented IfcSurfaceTexture; // (not currently used by Assimp)
1142 typedef NotImplemented IfcPixelTexture; // (not currently used by Assimp)
1143 typedef NotImplemented IfcStructuralConnectionCondition; // (not currently used by Assimp)
1144 typedef NotImplemented IfcFailureConnectionCondition; // (not currently used by Assimp)
1145 typedef NotImplemented IfcDocumentReference; // (not currently used by Assimp)
1146 typedef NotImplemented IfcMechanicalSteelMaterialProperties; // (not currently used by Assimp)
1147 struct IfcPipeSegmentType;
1148 struct IfcPointOnSurface;
1149 typedef NotImplemented IfcTable; // (not currently used by Assimp)
1150 typedef NotImplemented IfcLightDistributionData; // (not currently used by Assimp)
1151 typedef NotImplemented IfcPropertyTableValue; // (not currently used by Assimp)
1152 typedef NotImplemented IfcPresentationLayerWithStyle; // (not currently used by Assimp)
1153 struct IfcAsset;
1154 struct IfcLightSourcePositional;
1155 typedef NotImplemented IfcLibraryInformation; // (not currently used by Assimp)
1156 typedef NotImplemented IfcTextStyleTextModel; // (not currently used by Assimp)
1157 struct IfcProjectionCurve;
1158 struct IfcFillAreaStyleTiles;
1159 struct IfcRelFillsElement;
1160 struct IfcElectricMotorType;
1161 struct IfcTendon;
1162 struct IfcDistributionChamberElementType;
1163 struct IfcMemberType;
1311 typedef NotImplemented IfcRelFlowControlElements; // (not currently used by Assimp)
1312 typedef NotImplemented IfcRelAssignsToProcess; // (not currently used by Assimp)
11641313 struct IfcStructuralLinearAction;
11651314 struct IfcStructuralLinearActionVarying;
1315 struct IfcBuildingElementProxyType;
1316 struct IfcProjectionElement;
1317 typedef NotImplemented IfcDerivedUnit; // (not currently used by Assimp)
1318 typedef NotImplemented IfcApprovalActorRelationship; // (not currently used by Assimp)
1319 struct IfcConversionBasedUnit;
1320 typedef NotImplemented IfcMaterial; // (not currently used by Assimp)
1321 struct IfcGeometricRepresentationSubContext;
1322 struct IfcAnnotationSurfaceOccurrence;
1323 typedef NotImplemented IfcPreDefinedDimensionSymbol; // (not currently used by Assimp)
1324 struct IfcRoundedEdgeFeature;
1325 typedef NotImplemented IfcRelCoversBldgElements; // (not currently used by Assimp)
1326 struct IfcElectricDistributionPoint;
1327 struct IfcCableCarrierSegmentType;
1328 typedef NotImplemented IfcStructuralLoadLinearForce; // (not currently used by Assimp)
1329 typedef NotImplemented IfcGridAxis; // (not currently used by Assimp)
1330 typedef NotImplemented IfcIrregularTimeSeriesValue; // (not currently used by Assimp)
1331 struct IfcWallStandardCase;
1332 typedef NotImplemented IfcRelOccupiesSpaces; // (not currently used by Assimp)
1333 typedef NotImplemented IfcDerivedUnitElement; // (not currently used by Assimp)
1334 struct IfcCsgSolid;
1335 struct IfcBeamType;
1336 struct IfcAnnotationFillArea;
1337 typedef NotImplemented IfcRelaxation; // (not currently used by Assimp)
1338 struct IfcStructuralCurveMemberVarying;
1339 struct IfcPointOnSurface;
1340 typedef NotImplemented IfcPropertyDependencyRelationship; // (not currently used by Assimp)
1341 typedef NotImplemented IfcVertexBasedTextureMap; // (not currently used by Assimp)
1342 struct IfcOrderAction;
1343 typedef NotImplemented IfcLibraryReference; // (not currently used by Assimp)
1344 struct IfcEdgeLoop;
1345 struct IfcAnnotationFillAreaOccurrence;
1346 typedef NotImplemented IfcRelConnectsStructuralElement; // (not currently used by Assimp)
1347 struct IfcWorkPlan;
1348 struct IfcEllipse;
11661349 struct IfcProductDefinitionShape;
1167 struct IfcFastener;
1168 struct IfcMechanicalFastener;
1169 typedef NotImplemented IfcFuelProperties; // (not currently used by Assimp)
1170 struct IfcEvaporatorType;
1171 typedef NotImplemented IfcMaterialLayerSetUsage; // (not currently used by Assimp)
1172 struct IfcDiscreteAccessoryType;
1173 struct IfcStructuralCurveConnection;
1174 struct IfcProjectionElement;
1350 struct IfcProjectionCurve;
1351 struct IfcElectricalCircuit;
1352 struct IfcRationalBezierCurve;
1353 struct IfcStructuralPointAction;
1354 typedef NotImplemented IfcServiceLifeFactor; // (not currently used by Assimp)
1355 typedef NotImplemented IfcThermalMaterialProperties; // (not currently used by Assimp)
1356 typedef NotImplemented IfcTextureCoordinateGenerator; // (not currently used by Assimp)
1357 struct IfcPipeSegmentType;
1358 struct IfcTwoDirectionRepeatFactor;
1359 struct IfcShapeRepresentation;
1360 struct IfcPropertySet;
1361 struct IfcSurfaceStyleRendering;
1362 struct IfcDistributionPort;
11751363 typedef NotImplemented IfcImageTexture; // (not currently used by Assimp)
1176 struct IfcCoveringType;
1177 typedef NotImplemented IfcRelAssociatesAppliedValue; // (not currently used by Assimp)
1178 struct IfcPumpType;
1179 struct IfcPile;
1180 struct IfcUnitAssignment;
1181 struct IfcBoundingBox;
1182 struct IfcShellBasedSurfaceModel;
1183 struct IfcFacetedBrep;
1184 struct IfcTextLiteralWithExtent;
1185 typedef NotImplemented IfcApplication; // (not currently used by Assimp)
1186 typedef NotImplemented IfcExtendedMaterialProperties; // (not currently used by Assimp)
1187 struct IfcElectricApplianceType;
1188 typedef NotImplemented IfcRelOccupiesSpaces; // (not currently used by Assimp)
1189 struct IfcTrapeziumProfileDef;
1190 typedef NotImplemented IfcQuantityWeight; // (not currently used by Assimp)
1191 struct IfcRelContainedInSpatialStructure;
1192 struct IfcEdgeLoop;
1193 struct IfcProject;
1194 struct IfcCartesianPoint;
1195 typedef NotImplemented IfcMaterial; // (not currently used by Assimp)
1196 struct IfcCurveBoundedPlane;
1197 struct IfcWallType;
1198 struct IfcFillAreaStyleHatching;
1199 struct IfcEquipmentStandard;
1200 typedef NotImplemented IfcHygroscopicMaterialProperties; // (not currently used by Assimp)
1201 typedef NotImplemented IfcDoorPanelProperties; // (not currently used by Assimp)
1202 struct IfcDiameterDimension;
1203 struct IfcStructuralLoadGroup;
1204 typedef NotImplemented IfcTelecomAddress; // (not currently used by Assimp)
1205 struct IfcConstructionMaterialResource;
1206 typedef NotImplemented IfcBlobTexture; // (not currently used by Assimp)
1207 typedef NotImplemented IfcIrregularTimeSeriesValue; // (not currently used by Assimp)
1208 struct IfcRelAggregates;
1209 struct IfcBoilerType;
1210 typedef NotImplemented IfcRelProjectsElement; // (not currently used by Assimp)
1211 struct IfcColourSpecification;
1212 struct IfcColourRgb;
1213 typedef NotImplemented IfcRelConnectsStructuralActivity; // (not currently used by Assimp)
1214 struct IfcDoorStyle;
1215 typedef NotImplemented IfcStructuralLoadSingleDisplacementDistortion; // (not currently used by Assimp)
1216 typedef NotImplemented IfcRelAssignsToProcess; // (not currently used by Assimp)
1217 struct IfcDuctSilencerType;
1218 struct IfcLightSourceGoniometric;
1219 struct IfcActuatorType;
1220 struct IfcSensorType;
1221 struct IfcAirTerminalBoxType;
1222 struct IfcAnnotationSurfaceOccurrence;
1223 struct IfcZShapeProfileDef;
1224 typedef NotImplemented IfcClassificationNotation; // (not currently used by Assimp)
1225 struct IfcRationalBezierCurve;
1226 struct IfcCartesianTransformationOperator2D;
1227 struct IfcCartesianTransformationOperator2DnonUniform;
1228 struct IfcMove;
1229 typedef NotImplemented IfcBoundaryEdgeCondition; // (not currently used by Assimp)
1230 typedef NotImplemented IfcDoorLiningProperties; // (not currently used by Assimp)
1231 struct IfcCableCarrierSegmentType;
1232 typedef NotImplemented IfcPostalAddress; // (not currently used by Assimp)
1233 typedef NotImplemented IfcRelConnectsPathElements; // (not currently used by Assimp)
1234 struct IfcElectricalElement;
1235 typedef NotImplemented IfcOwnerHistory; // (not currently used by Assimp)
1236 typedef NotImplemented IfcStructuralLoadTemperature; // (not currently used by Assimp)
1237 typedef NotImplemented IfcTextStyleWithBoxCharacteristics; // (not currently used by Assimp)
1238 struct IfcChillerType;
1239 typedef NotImplemented IfcRelSchedulesCostItems; // (not currently used by Assimp)
1240 struct IfcReinforcingBar;
1241 typedef NotImplemented IfcCurrencyRelationship; // (not currently used by Assimp)
1242 typedef NotImplemented IfcSoundValue; // (not currently used by Assimp)
1243 struct IfcCShapeProfileDef;
1244 struct IfcPermit;
1245 struct IfcSlabType;
1246 typedef NotImplemented IfcSlippageConnectionCondition; // (not currently used by Assimp)
1247 struct IfcLampType;
1248 struct IfcPlanarExtent;
1249 struct IfcAlarmType;
1250 typedef NotImplemented IfcDocumentElectronicFormat; // (not currently used by Assimp)
1251 struct IfcElectricFlowStorageDeviceType;
1252 struct IfcEquipmentElement;
1253 struct IfcLightFixtureType;
1254 typedef NotImplemented IfcMetric; // (not currently used by Assimp)
1255 typedef NotImplemented IfcRelNests; // (not currently used by Assimp)
1256 struct IfcCurtainWall;
1257 typedef NotImplemented IfcRelAssociatesDocument; // (not currently used by Assimp)
1258 typedef NotImplemented IfcComplexProperty; // (not currently used by Assimp)
1259 typedef NotImplemented IfcVertexBasedTextureMap; // (not currently used by Assimp)
1260 struct IfcSlab;
1261 struct IfcCurtainWallType;
1262 struct IfcOutletType;
1263 struct IfcCompressorType;
1264 struct IfcCraneRailAShapeProfileDef;
1265 struct IfcFlowSegment;
1266 struct IfcSectionedSpine;
1267 typedef NotImplemented IfcTableRow; // (not currently used by Assimp)
1268 typedef NotImplemented IfcDraughtingPreDefinedTextFont; // (not currently used by Assimp)
1269 struct IfcElectricTimeControlType;
1270 struct IfcFaceSurface;
1271 typedef NotImplemented IfcMaterialList; // (not currently used by Assimp)
1272 struct IfcMotorConnectionType;
1273 struct IfcFlowFitting;
1274 struct IfcPointOnCurve;
1275 struct IfcTransportElementType;
1276 typedef NotImplemented IfcRegularTimeSeries; // (not currently used by Assimp)
1277 typedef NotImplemented IfcRelAssociatesConstraint; // (not currently used by Assimp)
1278 typedef NotImplemented IfcPropertyEnumeratedValue; // (not currently used by Assimp)
1279 typedef NotImplemented IfcStructuralSteelProfileProperties; // (not currently used by Assimp)
1280 struct IfcCableSegmentType;
1281 typedef NotImplemented IfcExternallyDefinedHatchStyle; // (not currently used by Assimp)
1282 struct IfcAnnotationSurface;
1283 struct IfcCompositeCurveSegment;
1284 struct IfcServiceLife;
1285 struct IfcPlateType;
1286 typedef NotImplemented IfcCurveStyle; // (not currently used by Assimp)
1287 typedef NotImplemented IfcSectionProperties; // (not currently used by Assimp)
1288 struct IfcVibrationIsolatorType;
1289 typedef NotImplemented IfcTextureMap; // (not currently used by Assimp)
1290 struct IfcTrimmedCurve;
1291 struct IfcMappedItem;
1364 struct IfcPipeFittingType;
1365 struct IfcTransportElement;
1366 struct IfcAnnotationTextOccurrence;
1367 typedef NotImplemented IfcConnectionSurfaceGeometry; // (not currently used by Assimp)
1368 struct IfcStructuralAnalysisModel;
1369 typedef NotImplemented IfcConnectionCurveGeometry; // (not currently used by Assimp)
1370 struct IfcConditionCriterion;
1371 typedef NotImplemented IfcWaterProperties; // (not currently used by Assimp)
12921372 typedef NotImplemented IfcMaterialLayer; // (not currently used by Assimp)
1293 struct IfcDirection;
1294 struct IfcBlock;
1295 struct IfcProjectOrderRecord;
1296 struct IfcFlowMeterType;
1297 struct IfcControllerType;
1298 struct IfcBeam;
1299 struct IfcArbitraryOpenProfileDef;
1300 struct IfcCenterLineProfileDef;
1301 typedef NotImplemented IfcStructuralLoadPlanarForce; // (not currently used by Assimp)
1302 struct IfcTimeSeriesSchedule;
1303 struct IfcRoundedEdgeFeature;
1304 typedef NotImplemented IfcWindowLiningProperties; // (not currently used by Assimp)
1305 typedef NotImplemented IfcRelOverridesProperties; // (not currently used by Assimp)
1306 typedef NotImplemented IfcApprovalRelationship; // (not currently used by Assimp)
1307 struct IfcIShapeProfileDef;
1308 struct IfcSpaceHeaterType;
1309 typedef NotImplemented IfcExternallyDefinedSurfaceStyle; // (not currently used by Assimp)
1310 typedef NotImplemented IfcDerivedUnit; // (not currently used by Assimp)
1311 struct IfcFlowStorageDevice;
1312 typedef NotImplemented IfcMaterialClassificationRelationship; // (not currently used by Assimp)
1313 typedef NotImplemented IfcClassificationItem; // (not currently used by Assimp)
1314 struct IfcRevolvedAreaSolid;
1315 typedef NotImplemented IfcConnectionPointGeometry; // (not currently used by Assimp)
1316 struct IfcDoor;
1317 struct IfcEllipse;
1318 struct IfcTubeBundleType;
1319 struct IfcAngularDimension;
1320 typedef NotImplemented IfcThermalMaterialProperties; // (not currently used by Assimp)
1321 struct IfcFaceBasedSurfaceModel;
1322 struct IfcCraneRailFShapeProfileDef;
1323 struct IfcColumnType;
1324 struct IfcTShapeProfileDef;
1325 struct IfcEnergyConversionDevice;
1326 typedef NotImplemented IfcConnectionPointEccentricity; // (not currently used by Assimp)
1327 typedef NotImplemented IfcReinforcementDefinitionProperties; // (not currently used by Assimp)
1328 typedef NotImplemented IfcCurveStyleFontAndScaling; // (not currently used by Assimp)
1329 struct IfcWorkSchedule;
1330 typedef NotImplemented IfcOrganizationRelationship; // (not currently used by Assimp)
1331 struct IfcZone;
1332 struct IfcTransportElement;
1333 typedef NotImplemented IfcDraughtingPreDefinedCurveFont; // (not currently used by Assimp)
1334 struct IfcGeometricRepresentationSubContext;
1335 struct IfcLShapeProfileDef;
1336 struct IfcGeometricCurveSet;
1337 struct IfcActor;
1338 struct IfcOccupant;
1339 typedef NotImplemented IfcPhysicalComplexQuantity; // (not currently used by Assimp)
1340 struct IfcBooleanClippingResult;
1341 typedef NotImplemented IfcPreDefinedTerminatorSymbol; // (not currently used by Assimp)
1342 struct IfcAnnotationFillArea;
1343 typedef NotImplemented IfcConstraintAggregationRelationship; // (not currently used by Assimp)
1344 typedef NotImplemented IfcRelAssociatesApproval; // (not currently used by Assimp)
1345 typedef NotImplemented IfcRelAssociatesMaterial; // (not currently used by Assimp)
1346 typedef NotImplemented IfcRelAssignsToProduct; // (not currently used by Assimp)
1347 typedef NotImplemented IfcAppliedValueRelationship; // (not currently used by Assimp)
1348 struct IfcLightSourceSpot;
1349 struct IfcFireSuppressionTerminalType;
1350 typedef NotImplemented IfcElementQuantity; // (not currently used by Assimp)
1351 typedef NotImplemented IfcDimensionPair; // (not currently used by Assimp)
1352 struct IfcElectricGeneratorType;
1353 typedef NotImplemented IfcRelSequence; // (not currently used by Assimp)
1354 struct IfcInventory;
1355 struct IfcPolyline;
1356 struct IfcBoxedHalfSpace;
1357 struct IfcAirTerminalType;
1358 typedef NotImplemented IfcSectionReinforcementProperties; // (not currently used by Assimp)
1359 struct IfcDistributionPort;
1360 struct IfcCostItem;
1361 struct IfcStructuredDimensionCallout;
1362 struct IfcStructuralResultGroup;
1363 typedef NotImplemented IfcRelSpaceBoundary; // (not currently used by Assimp)
1364 struct IfcOrientedEdge;
1365 typedef NotImplemented IfcRelAssignsToResource; // (not currently used by Assimp)
1366 struct IfcCsgSolid;
1367 typedef NotImplemented IfcProductsOfCombustionProperties; // (not currently used by Assimp)
1368 typedef NotImplemented IfcRelaxation; // (not currently used by Assimp)
1369 struct IfcPlanarBox;
1370 typedef NotImplemented IfcQuantityLength; // (not currently used by Assimp)
1371 struct IfcMaterialDefinitionRepresentation;
1372 struct IfcAsymmetricIShapeProfileDef;
1373 struct IfcRepresentationMap;
1373 typedef NotImplemented IfcCostValue; // (not currently used by Assimp)
13741374
13751375
13761376
13901390 // C++ wrapper for IfcTypeObject
13911391 struct IfcTypeObject : IfcObjectDefinition, ObjectHelper<IfcTypeObject,2> { IfcTypeObject() : Object("IfcTypeObject") {}
13921392 Maybe< IfcLabel::Out > ApplicableOccurrence;
1393 Maybe< ListOf< Lazy< NotImplemented >, 1, 0 > > HasPropertySets;
1393 Maybe< ListOf< Lazy< IfcPropertySetDefinition >, 1, 0 > > HasPropertySets;
13941394 };
13951395
13961396 // C++ wrapper for IfcTypeProduct
14041404 Maybe< IfcLabel::Out > ElementType;
14051405 };
14061406
1407 // C++ wrapper for IfcFurnishingElementType
1408 struct IfcFurnishingElementType : IfcElementType, ObjectHelper<IfcFurnishingElementType,0> { IfcFurnishingElementType() : Object("IfcFurnishingElementType") {}
1409
1410 };
1411
1412 // C++ wrapper for IfcFurnitureType
1413 struct IfcFurnitureType : IfcFurnishingElementType, ObjectHelper<IfcFurnitureType,1> { IfcFurnitureType() : Object("IfcFurnitureType") {}
1414 IfcAssemblyPlaceEnum::Out AssemblyPlace;
1415 };
1416
1417 // C++ wrapper for IfcObject
1418 struct IfcObject : IfcObjectDefinition, ObjectHelper<IfcObject,1> { IfcObject() : Object("IfcObject") {}
1419 Maybe< IfcLabel::Out > ObjectType;
1420 };
1421
1422 // C++ wrapper for IfcProduct
1423 struct IfcProduct : IfcObject, ObjectHelper<IfcProduct,2> { IfcProduct() : Object("IfcProduct") {}
1424 Maybe< Lazy< IfcObjectPlacement > > ObjectPlacement;
1425 Maybe< Lazy< IfcProductRepresentation > > Representation;
1426 };
1427
1428 // C++ wrapper for IfcGrid
1429 struct IfcGrid : IfcProduct, ObjectHelper<IfcGrid,3> { IfcGrid() : Object("IfcGrid") {}
1430 ListOf< Lazy< NotImplemented >, 1, 0 > UAxes;
1431 ListOf< Lazy< NotImplemented >, 1, 0 > VAxes;
1432 Maybe< ListOf< Lazy< NotImplemented >, 1, 0 > > WAxes;
1433 };
1434
1435 // C++ wrapper for IfcRepresentationItem
1436 struct IfcRepresentationItem : ObjectHelper<IfcRepresentationItem,0> { IfcRepresentationItem() : Object("IfcRepresentationItem") {}
1437
1438 };
1439
1440 // C++ wrapper for IfcGeometricRepresentationItem
1441 struct IfcGeometricRepresentationItem : IfcRepresentationItem, ObjectHelper<IfcGeometricRepresentationItem,0> { IfcGeometricRepresentationItem() : Object("IfcGeometricRepresentationItem") {}
1442
1443 };
1444
1445 // C++ wrapper for IfcOneDirectionRepeatFactor
1446 struct IfcOneDirectionRepeatFactor : IfcGeometricRepresentationItem, ObjectHelper<IfcOneDirectionRepeatFactor,1> { IfcOneDirectionRepeatFactor() : Object("IfcOneDirectionRepeatFactor") {}
1447 Lazy< IfcVector > RepeatFactor;
1448 };
1449
1450 // C++ wrapper for IfcTwoDirectionRepeatFactor
1451 struct IfcTwoDirectionRepeatFactor : IfcOneDirectionRepeatFactor, ObjectHelper<IfcTwoDirectionRepeatFactor,1> { IfcTwoDirectionRepeatFactor() : Object("IfcTwoDirectionRepeatFactor") {}
1452 Lazy< IfcVector > SecondRepeatFactor;
1453 };
1454
1455 // C++ wrapper for IfcElement
1456 struct IfcElement : IfcProduct, ObjectHelper<IfcElement,1> { IfcElement() : Object("IfcElement") {}
1457 Maybe< IfcIdentifier::Out > Tag;
1458 };
1459
1460 // C++ wrapper for IfcElementComponent
1461 struct IfcElementComponent : IfcElement, ObjectHelper<IfcElementComponent,0> { IfcElementComponent() : Object("IfcElementComponent") {}
1462
1463 };
1464
1465 // C++ wrapper for IfcSpatialStructureElementType
1466 struct IfcSpatialStructureElementType : IfcElementType, ObjectHelper<IfcSpatialStructureElementType,0> { IfcSpatialStructureElementType() : Object("IfcSpatialStructureElementType") {}
1467
1468 };
1469
1470 // C++ wrapper for IfcControl
1471 struct IfcControl : IfcObject, ObjectHelper<IfcControl,0> { IfcControl() : Object("IfcControl") {}
1472
1473 };
1474
1475 // C++ wrapper for IfcActionRequest
1476 struct IfcActionRequest : IfcControl, ObjectHelper<IfcActionRequest,1> { IfcActionRequest() : Object("IfcActionRequest") {}
1477 IfcIdentifier::Out RequestID;
1478 };
1479
14801407 // C++ wrapper for IfcDistributionElementType
14811408 struct IfcDistributionElementType : IfcElementType, ObjectHelper<IfcDistributionElementType,0> { IfcDistributionElementType() : Object("IfcDistributionElementType") {}
14821409
14871414
14881415 };
14891416
1490 // C++ wrapper for IfcEnergyConversionDeviceType
1491 struct IfcEnergyConversionDeviceType : IfcDistributionFlowElementType, ObjectHelper<IfcEnergyConversionDeviceType,0> { IfcEnergyConversionDeviceType() : Object("IfcEnergyConversionDeviceType") {}
1492
1493 };
1494
1495 // C++ wrapper for IfcCooledBeamType
1496 struct IfcCooledBeamType : IfcEnergyConversionDeviceType, ObjectHelper<IfcCooledBeamType,1> { IfcCooledBeamType() : Object("IfcCooledBeamType") {}
1497 IfcCooledBeamTypeEnum::Out PredefinedType;
1498 };
1499
1500 // C++ wrapper for IfcCsgPrimitive3D
1501 struct IfcCsgPrimitive3D : IfcGeometricRepresentationItem, ObjectHelper<IfcCsgPrimitive3D,1> { IfcCsgPrimitive3D() : Object("IfcCsgPrimitive3D") {}
1502 Lazy< IfcAxis2Placement3D > Position;
1503 };
1504
1505 // C++ wrapper for IfcRectangularPyramid
1506 struct IfcRectangularPyramid : IfcCsgPrimitive3D, ObjectHelper<IfcRectangularPyramid,3> { IfcRectangularPyramid() : Object("IfcRectangularPyramid") {}
1507 IfcPositiveLengthMeasure::Out XLength;
1508 IfcPositiveLengthMeasure::Out YLength;
1509 IfcPositiveLengthMeasure::Out Height;
1510 };
1511
1512 // C++ wrapper for IfcSurface
1513 struct IfcSurface : IfcGeometricRepresentationItem, ObjectHelper<IfcSurface,0> { IfcSurface() : Object("IfcSurface") {}
1514
1515 };
1516
1517 // C++ wrapper for IfcBoundedSurface
1518 struct IfcBoundedSurface : IfcSurface, ObjectHelper<IfcBoundedSurface,0> { IfcBoundedSurface() : Object("IfcBoundedSurface") {}
1519
1520 };
1521
1522 // C++ wrapper for IfcRectangularTrimmedSurface
1523 struct IfcRectangularTrimmedSurface : IfcBoundedSurface, ObjectHelper<IfcRectangularTrimmedSurface,7> { IfcRectangularTrimmedSurface() : Object("IfcRectangularTrimmedSurface") {}
1524 Lazy< IfcSurface > BasisSurface;
1525 IfcParameterValue::Out U1;
1526 IfcParameterValue::Out V1;
1527 IfcParameterValue::Out U2;
1528 IfcParameterValue::Out V2;
1529 BOOLEAN::Out Usense;
1530 BOOLEAN::Out Vsense;
1531 };
1532
1533 // C++ wrapper for IfcGroup
1534 struct IfcGroup : IfcObject, ObjectHelper<IfcGroup,0> { IfcGroup() : Object("IfcGroup") {}
1535
1536 };
1537
1538 // C++ wrapper for IfcRelationship
1539 struct IfcRelationship : IfcRoot, ObjectHelper<IfcRelationship,0> { IfcRelationship() : Object("IfcRelationship") {}
1540
1541 };
1542
1543 // C++ wrapper for IfcHalfSpaceSolid
1544 struct IfcHalfSpaceSolid : IfcGeometricRepresentationItem, ObjectHelper<IfcHalfSpaceSolid,2> { IfcHalfSpaceSolid() : Object("IfcHalfSpaceSolid") {}
1545 Lazy< IfcSurface > BaseSurface;
1546 BOOLEAN::Out AgreementFlag;
1547 };
1548
1549 // C++ wrapper for IfcPolygonalBoundedHalfSpace
1550 struct IfcPolygonalBoundedHalfSpace : IfcHalfSpaceSolid, ObjectHelper<IfcPolygonalBoundedHalfSpace,2> { IfcPolygonalBoundedHalfSpace() : Object("IfcPolygonalBoundedHalfSpace") {}
1551 Lazy< IfcAxis2Placement3D > Position;
1552 Lazy< IfcBoundedCurve > PolygonalBoundary;
1553 };
1554
1555 // C++ wrapper for IfcAirToAirHeatRecoveryType
1556 struct IfcAirToAirHeatRecoveryType : IfcEnergyConversionDeviceType, ObjectHelper<IfcAirToAirHeatRecoveryType,1> { IfcAirToAirHeatRecoveryType() : Object("IfcAirToAirHeatRecoveryType") {}
1557 IfcAirToAirHeatRecoveryTypeEnum::Out PredefinedType;
1558 };
1559
1560 // C++ wrapper for IfcFlowFittingType
1561 struct IfcFlowFittingType : IfcDistributionFlowElementType, ObjectHelper<IfcFlowFittingType,0> { IfcFlowFittingType() : Object("IfcFlowFittingType") {}
1562
1563 };
1564
1565 // C++ wrapper for IfcPipeFittingType
1566 struct IfcPipeFittingType : IfcFlowFittingType, ObjectHelper<IfcPipeFittingType,1> { IfcPipeFittingType() : Object("IfcPipeFittingType") {}
1567 IfcPipeFittingTypeEnum::Out PredefinedType;
1417 // C++ wrapper for IfcFlowControllerType
1418 struct IfcFlowControllerType : IfcDistributionFlowElementType, ObjectHelper<IfcFlowControllerType,0> { IfcFlowControllerType() : Object("IfcFlowControllerType") {}
1419
1420 };
1421
1422 // C++ wrapper for IfcElectricTimeControlType
1423 struct IfcElectricTimeControlType : IfcFlowControllerType, ObjectHelper<IfcElectricTimeControlType,1> { IfcElectricTimeControlType() : Object("IfcElectricTimeControlType") {}
1424 IfcElectricTimeControlTypeEnum::Out PredefinedType;
15681425 };
15691426
15701427 // C++ wrapper for IfcRepresentation
15751432 ListOf< Lazy< IfcRepresentationItem >, 1, 0 > Items;
15761433 };
15771434
1578 // C++ wrapper for IfcStyleModel
1579 struct IfcStyleModel : IfcRepresentation, ObjectHelper<IfcStyleModel,0> { IfcStyleModel() : Object("IfcStyleModel") {}
1580
1581 };
1582
1583 // C++ wrapper for IfcStyledRepresentation
1584 struct IfcStyledRepresentation : IfcStyleModel, ObjectHelper<IfcStyledRepresentation,0> { IfcStyledRepresentation() : Object("IfcStyledRepresentation") {}
1435 // C++ wrapper for IfcShapeModel
1436 struct IfcShapeModel : IfcRepresentation, ObjectHelper<IfcShapeModel,0> { IfcShapeModel() : Object("IfcShapeModel") {}
1437
1438 };
1439
1440 // C++ wrapper for IfcTopologyRepresentation
1441 struct IfcTopologyRepresentation : IfcShapeModel, ObjectHelper<IfcTopologyRepresentation,0> { IfcTopologyRepresentation() : Object("IfcTopologyRepresentation") {}
1442
1443 };
1444
1445 // C++ wrapper for IfcRelationship
1446 struct IfcRelationship : IfcRoot, ObjectHelper<IfcRelationship,0> { IfcRelationship() : Object("IfcRelationship") {}
1447
1448 };
1449
1450 // C++ wrapper for IfcRelConnects
1451 struct IfcRelConnects : IfcRelationship, ObjectHelper<IfcRelConnects,0> { IfcRelConnects() : Object("IfcRelConnects") {}
1452
1453 };
1454
1455 // C++ wrapper for IfcFlowFittingType
1456 struct IfcFlowFittingType : IfcDistributionFlowElementType, ObjectHelper<IfcFlowFittingType,0> { IfcFlowFittingType() : Object("IfcFlowFittingType") {}
1457
1458 };
1459
1460 // C++ wrapper for IfcCableCarrierFittingType
1461 struct IfcCableCarrierFittingType : IfcFlowFittingType, ObjectHelper<IfcCableCarrierFittingType,1> { IfcCableCarrierFittingType() : Object("IfcCableCarrierFittingType") {}
1462 IfcCableCarrierFittingTypeEnum::Out PredefinedType;
1463 };
1464
1465 // C++ wrapper for IfcEnergyConversionDeviceType
1466 struct IfcEnergyConversionDeviceType : IfcDistributionFlowElementType, ObjectHelper<IfcEnergyConversionDeviceType,0> { IfcEnergyConversionDeviceType() : Object("IfcEnergyConversionDeviceType") {}
1467
1468 };
1469
1470 // C++ wrapper for IfcCoilType
1471 struct IfcCoilType : IfcEnergyConversionDeviceType, ObjectHelper<IfcCoilType,1> { IfcCoilType() : Object("IfcCoilType") {}
1472 IfcCoilTypeEnum::Out PredefinedType;
1473 };
1474
1475 // C++ wrapper for IfcObject
1476 struct IfcObject : IfcObjectDefinition, ObjectHelper<IfcObject,1> { IfcObject() : Object("IfcObject") {}
1477 Maybe< IfcLabel::Out > ObjectType;
1478 };
1479
1480 // C++ wrapper for IfcControl
1481 struct IfcControl : IfcObject, ObjectHelper<IfcControl,0> { IfcControl() : Object("IfcControl") {}
1482
1483 };
1484
1485 // C++ wrapper for IfcPerformanceHistory
1486 struct IfcPerformanceHistory : IfcControl, ObjectHelper<IfcPerformanceHistory,1> { IfcPerformanceHistory() : Object("IfcPerformanceHistory") {}
1487 IfcLabel::Out LifeCyclePhase;
1488 };
1489
1490 // C++ wrapper for IfcRepresentationItem
1491 struct IfcRepresentationItem : ObjectHelper<IfcRepresentationItem,0> { IfcRepresentationItem() : Object("IfcRepresentationItem") {}
1492
1493 };
1494
1495 // C++ wrapper for IfcGeometricRepresentationItem
1496 struct IfcGeometricRepresentationItem : IfcRepresentationItem, ObjectHelper<IfcGeometricRepresentationItem,0> { IfcGeometricRepresentationItem() : Object("IfcGeometricRepresentationItem") {}
1497
1498 };
1499
1500 // C++ wrapper for IfcTextLiteral
1501 struct IfcTextLiteral : IfcGeometricRepresentationItem, ObjectHelper<IfcTextLiteral,3> { IfcTextLiteral() : Object("IfcTextLiteral") {}
1502 IfcPresentableText::Out Literal;
1503 IfcAxis2Placement::Out Placement;
1504 IfcTextPath::Out Path;
1505 };
1506
1507 // C++ wrapper for IfcTextLiteralWithExtent
1508 struct IfcTextLiteralWithExtent : IfcTextLiteral, ObjectHelper<IfcTextLiteralWithExtent,2> { IfcTextLiteralWithExtent() : Object("IfcTextLiteralWithExtent") {}
1509 Lazy< IfcPlanarExtent > Extent;
1510 IfcBoxAlignment::Out BoxAlignment;
1511 };
1512
1513 // C++ wrapper for IfcProductRepresentation
1514 struct IfcProductRepresentation : ObjectHelper<IfcProductRepresentation,3> { IfcProductRepresentation() : Object("IfcProductRepresentation") {}
1515 Maybe< IfcLabel::Out > Name;
1516 Maybe< IfcText::Out > Description;
1517 ListOf< Lazy< IfcRepresentation >, 1, 0 > Representations;
1518 };
1519
1520 // C++ wrapper for IfcProduct
1521 struct IfcProduct : IfcObject, ObjectHelper<IfcProduct,2> { IfcProduct() : Object("IfcProduct") {}
1522 Maybe< Lazy< IfcObjectPlacement > > ObjectPlacement;
1523 Maybe< Lazy< IfcProductRepresentation > > Representation;
1524 };
1525
1526 // C++ wrapper for IfcElement
1527 struct IfcElement : IfcProduct, ObjectHelper<IfcElement,1> { IfcElement() : Object("IfcElement") {}
1528 Maybe< IfcIdentifier::Out > Tag;
1529 };
1530
1531 // C++ wrapper for IfcDistributionElement
1532 struct IfcDistributionElement : IfcElement, ObjectHelper<IfcDistributionElement,0> { IfcDistributionElement() : Object("IfcDistributionElement") {}
1533
1534 };
1535
1536 // C++ wrapper for IfcDistributionFlowElement
1537 struct IfcDistributionFlowElement : IfcDistributionElement, ObjectHelper<IfcDistributionFlowElement,0> { IfcDistributionFlowElement() : Object("IfcDistributionFlowElement") {}
1538
1539 };
1540
1541 // C++ wrapper for IfcCurve
1542 struct IfcCurve : IfcGeometricRepresentationItem, ObjectHelper<IfcCurve,0> { IfcCurve() : Object("IfcCurve") {}
1543
1544 };
1545
1546 // C++ wrapper for IfcBoundedCurve
1547 struct IfcBoundedCurve : IfcCurve, ObjectHelper<IfcBoundedCurve,0> { IfcBoundedCurve() : Object("IfcBoundedCurve") {}
1548
1549 };
1550
1551 // C++ wrapper for IfcCompositeCurve
1552 struct IfcCompositeCurve : IfcBoundedCurve, ObjectHelper<IfcCompositeCurve,2> { IfcCompositeCurve() : Object("IfcCompositeCurve") {}
1553 ListOf< Lazy< IfcCompositeCurveSegment >, 1, 0 > Segments;
1554 LOGICAL::Out SelfIntersect;
1555 };
1556
1557 // C++ wrapper for Ifc2DCompositeCurve
1558 struct Ifc2DCompositeCurve : IfcCompositeCurve, ObjectHelper<Ifc2DCompositeCurve,0> { Ifc2DCompositeCurve() : Object("Ifc2DCompositeCurve") {}
1559
1560 };
1561
1562 // C++ wrapper for IfcCartesianTransformationOperator
1563 struct IfcCartesianTransformationOperator : IfcGeometricRepresentationItem, ObjectHelper<IfcCartesianTransformationOperator,4> { IfcCartesianTransformationOperator() : Object("IfcCartesianTransformationOperator") {}
1564 Maybe< Lazy< IfcDirection > > Axis1;
1565 Maybe< Lazy< IfcDirection > > Axis2;
1566 Lazy< IfcCartesianPoint > LocalOrigin;
1567 Maybe< REAL::Out > Scale;
1568 };
1569
1570 // C++ wrapper for IfcCartesianTransformationOperator3D
1571 struct IfcCartesianTransformationOperator3D : IfcCartesianTransformationOperator, ObjectHelper<IfcCartesianTransformationOperator3D,1> { IfcCartesianTransformationOperator3D() : Object("IfcCartesianTransformationOperator3D") {}
1572 Maybe< Lazy< IfcDirection > > Axis3;
1573 };
1574
1575 // C++ wrapper for IfcProperty
1576 struct IfcProperty : ObjectHelper<IfcProperty,2> { IfcProperty() : Object("IfcProperty") {}
1577 IfcIdentifier::Out Name;
1578 Maybe< IfcText::Out > Description;
1579 };
1580
1581 // C++ wrapper for IfcSimpleProperty
1582 struct IfcSimpleProperty : IfcProperty, ObjectHelper<IfcSimpleProperty,0> { IfcSimpleProperty() : Object("IfcSimpleProperty") {}
1583
1584 };
1585
1586 // C++ wrapper for IfcPropertyEnumeratedValue
1587 struct IfcPropertyEnumeratedValue : IfcSimpleProperty, ObjectHelper<IfcPropertyEnumeratedValue,2> { IfcPropertyEnumeratedValue() : Object("IfcPropertyEnumeratedValue") {}
1588 ListOf< IfcValue, 1, 0 >::Out EnumerationValues;
1589 Maybe< Lazy< NotImplemented > > EnumerationReference;
1590 };
1591
1592 // C++ wrapper for IfcBuildingElementType
1593 struct IfcBuildingElementType : IfcElementType, ObjectHelper<IfcBuildingElementType,0> { IfcBuildingElementType() : Object("IfcBuildingElementType") {}
1594
1595 };
1596
1597 // C++ wrapper for IfcStairFlightType
1598 struct IfcStairFlightType : IfcBuildingElementType, ObjectHelper<IfcStairFlightType,1> { IfcStairFlightType() : Object("IfcStairFlightType") {}
1599 IfcStairFlightTypeEnum::Out PredefinedType;
1600 };
1601
1602 // C++ wrapper for IfcSurface
1603 struct IfcSurface : IfcGeometricRepresentationItem, ObjectHelper<IfcSurface,0> { IfcSurface() : Object("IfcSurface") {}
1604
1605 };
1606
1607 // C++ wrapper for IfcElementarySurface
1608 struct IfcElementarySurface : IfcSurface, ObjectHelper<IfcElementarySurface,1> { IfcElementarySurface() : Object("IfcElementarySurface") {}
1609 Lazy< IfcAxis2Placement3D > Position;
1610 };
1611
1612 // C++ wrapper for IfcPlane
1613 struct IfcPlane : IfcElementarySurface, ObjectHelper<IfcPlane,0> { IfcPlane() : Object("IfcPlane") {}
15851614
15861615 };
15871616
15921621 IfcBooleanOperand::Out SecondOperand;
15931622 };
15941623
1595 // C++ wrapper for IfcFeatureElement
1596 struct IfcFeatureElement : IfcElement, ObjectHelper<IfcFeatureElement,0> { IfcFeatureElement() : Object("IfcFeatureElement") {}
1597
1598 };
1599
1600 // C++ wrapper for IfcFeatureElementSubtraction
1601 struct IfcFeatureElementSubtraction : IfcFeatureElement, ObjectHelper<IfcFeatureElementSubtraction,0> { IfcFeatureElementSubtraction() : Object("IfcFeatureElementSubtraction") {}
1602
1603 };
1604
1605 // C++ wrapper for IfcOpeningElement
1606 struct IfcOpeningElement : IfcFeatureElementSubtraction, ObjectHelper<IfcOpeningElement,0> { IfcOpeningElement() : Object("IfcOpeningElement") {}
1607
1608 };
1609
1610 // C++ wrapper for IfcConditionCriterion
1611 struct IfcConditionCriterion : IfcControl, ObjectHelper<IfcConditionCriterion,2> { IfcConditionCriterion() : Object("IfcConditionCriterion") {}
1612 IfcConditionCriterionSelect::Out Criterion;
1613 IfcDateTimeSelect::Out CriterionDateTime;
1614 };
1615
1616 // C++ wrapper for IfcFlowTerminalType
1617 struct IfcFlowTerminalType : IfcDistributionFlowElementType, ObjectHelper<IfcFlowTerminalType,0> { IfcFlowTerminalType() : Object("IfcFlowTerminalType") {}
1618
1619 };
1620
1621 // C++ wrapper for IfcFlowControllerType
1622 struct IfcFlowControllerType : IfcDistributionFlowElementType, ObjectHelper<IfcFlowControllerType,0> { IfcFlowControllerType() : Object("IfcFlowControllerType") {}
1623
1624 };
1625
1626 // C++ wrapper for IfcSwitchingDeviceType
1627 struct IfcSwitchingDeviceType : IfcFlowControllerType, ObjectHelper<IfcSwitchingDeviceType,1> { IfcSwitchingDeviceType() : Object("IfcSwitchingDeviceType") {}
1628 IfcSwitchingDeviceTypeEnum::Out PredefinedType;
1629 };
1630
1631 // C++ wrapper for IfcSystem
1632 struct IfcSystem : IfcGroup, ObjectHelper<IfcSystem,0> { IfcSystem() : Object("IfcSystem") {}
1633
1634 };
1635
1636 // C++ wrapper for IfcElectricalCircuit
1637 struct IfcElectricalCircuit : IfcSystem, ObjectHelper<IfcElectricalCircuit,0> { IfcElectricalCircuit() : Object("IfcElectricalCircuit") {}
1638
1639 };
1640
1641 // C++ wrapper for IfcUnitaryEquipmentType
1642 struct IfcUnitaryEquipmentType : IfcEnergyConversionDeviceType, ObjectHelper<IfcUnitaryEquipmentType,1> { IfcUnitaryEquipmentType() : Object("IfcUnitaryEquipmentType") {}
1643 IfcUnitaryEquipmentTypeEnum::Out PredefinedType;
1644 };
1645
1646 // C++ wrapper for IfcPort
1647 struct IfcPort : IfcProduct, ObjectHelper<IfcPort,0> { IfcPort() : Object("IfcPort") {}
1648
1649 };
1650
1651 // C++ wrapper for IfcPlacement
1652 struct IfcPlacement : IfcGeometricRepresentationItem, ObjectHelper<IfcPlacement,1> { IfcPlacement() : Object("IfcPlacement") {}
1653 Lazy< IfcCartesianPoint > Location;
1654 };
1655
1656 // C++ wrapper for IfcProfileDef
1657 struct IfcProfileDef : ObjectHelper<IfcProfileDef,2> { IfcProfileDef() : Object("IfcProfileDef") {}
1658 IfcProfileTypeEnum::Out ProfileType;
1659 Maybe< IfcLabel::Out > ProfileName;
1660 };
1661
1662 // C++ wrapper for IfcArbitraryClosedProfileDef
1663 struct IfcArbitraryClosedProfileDef : IfcProfileDef, ObjectHelper<IfcArbitraryClosedProfileDef,1> { IfcArbitraryClosedProfileDef() : Object("IfcArbitraryClosedProfileDef") {}
1664 Lazy< IfcCurve > OuterCurve;
1665 };
1666
1667 // C++ wrapper for IfcCurve
1668 struct IfcCurve : IfcGeometricRepresentationItem, ObjectHelper<IfcCurve,0> { IfcCurve() : Object("IfcCurve") {}
1669
1670 };
1671
1672 // C++ wrapper for IfcConic
1673 struct IfcConic : IfcCurve, ObjectHelper<IfcConic,1> { IfcConic() : Object("IfcConic") {}
1674 IfcAxis2Placement::Out Position;
1675 };
1676
1677 // C++ wrapper for IfcCircle
1678 struct IfcCircle : IfcConic, ObjectHelper<IfcCircle,1> { IfcCircle() : Object("IfcCircle") {}
1679 IfcPositiveLengthMeasure::Out Radius;
1680 };
1681
1682 // C++ wrapper for IfcElementarySurface
1683 struct IfcElementarySurface : IfcSurface, ObjectHelper<IfcElementarySurface,1> { IfcElementarySurface() : Object("IfcElementarySurface") {}
1684 Lazy< IfcAxis2Placement3D > Position;
1685 };
1686
1687 // C++ wrapper for IfcPlane
1688 struct IfcPlane : IfcElementarySurface, ObjectHelper<IfcPlane,0> { IfcPlane() : Object("IfcPlane") {}
1689
1690 };
1691
1692 // C++ wrapper for IfcCostSchedule
1693 struct IfcCostSchedule : IfcControl, ObjectHelper<IfcCostSchedule,8> { IfcCostSchedule() : Object("IfcCostSchedule") {}
1694 Maybe< IfcActorSelect::Out > SubmittedBy;
1695 Maybe< IfcActorSelect::Out > PreparedBy;
1696 Maybe< IfcDateTimeSelect::Out > SubmittedOn;
1697 Maybe< IfcLabel::Out > Status;
1698 Maybe< ListOf< IfcActorSelect, 1, 0 >::Out > TargetUsers;
1699 Maybe< IfcDateTimeSelect::Out > UpdateDate;
1700 IfcIdentifier::Out ID;
1701 IfcCostScheduleTypeEnum::Out PredefinedType;
1702 };
1703
1704 // C++ wrapper for IfcRightCircularCone
1705 struct IfcRightCircularCone : IfcCsgPrimitive3D, ObjectHelper<IfcRightCircularCone,2> { IfcRightCircularCone() : Object("IfcRightCircularCone") {}
1706 IfcPositiveLengthMeasure::Out Height;
1707 IfcPositiveLengthMeasure::Out BottomRadius;
1708 };
1709
1710 // C++ wrapper for IfcElementAssembly
1711 struct IfcElementAssembly : IfcElement, ObjectHelper<IfcElementAssembly,2> { IfcElementAssembly() : Object("IfcElementAssembly") {}
1712 Maybe< IfcAssemblyPlaceEnum::Out > AssemblyPlace;
1713 IfcElementAssemblyTypeEnum::Out PredefinedType;
1714 };
1715
1716 // C++ wrapper for IfcBuildingElement
1717 struct IfcBuildingElement : IfcElement, ObjectHelper<IfcBuildingElement,0> { IfcBuildingElement() : Object("IfcBuildingElement") {}
1718
1719 };
1720
1721 // C++ wrapper for IfcMember
1722 struct IfcMember : IfcBuildingElement, ObjectHelper<IfcMember,0> { IfcMember() : Object("IfcMember") {}
1723
1724 };
1725
1726 // C++ wrapper for IfcBuildingElementProxy
1727 struct IfcBuildingElementProxy : IfcBuildingElement, ObjectHelper<IfcBuildingElementProxy,1> { IfcBuildingElementProxy() : Object("IfcBuildingElementProxy") {}
1728 Maybe< IfcElementCompositionEnum::Out > CompositionType;
1729 };
1730
1731 // C++ wrapper for IfcStructuralActivity
1732 struct IfcStructuralActivity : IfcProduct, ObjectHelper<IfcStructuralActivity,2> { IfcStructuralActivity() : Object("IfcStructuralActivity") {}
1733 Lazy< NotImplemented > AppliedLoad;
1734 IfcGlobalOrLocalEnum::Out GlobalOrLocal;
1735 };
1736
1737 // C++ wrapper for IfcStructuralAction
1738 struct IfcStructuralAction : IfcStructuralActivity, ObjectHelper<IfcStructuralAction,2> { IfcStructuralAction() : Object("IfcStructuralAction") {}
1739 BOOLEAN::Out DestabilizingLoad;
1740 Maybe< Lazy< IfcStructuralReaction > > CausedBy;
1741 };
1742
1743 // C++ wrapper for IfcStructuralPlanarAction
1744 struct IfcStructuralPlanarAction : IfcStructuralAction, ObjectHelper<IfcStructuralPlanarAction,1> { IfcStructuralPlanarAction() : Object("IfcStructuralPlanarAction") {}
1745 IfcProjectedOrTrueLengthEnum::Out ProjectedOrTrue;
1746 };
1747
1748 // C++ wrapper for IfcTopologicalRepresentationItem
1749 struct IfcTopologicalRepresentationItem : IfcRepresentationItem, ObjectHelper<IfcTopologicalRepresentationItem,0> { IfcTopologicalRepresentationItem() : Object("IfcTopologicalRepresentationItem") {}
1750
1751 };
1752
1753 // C++ wrapper for IfcConnectedFaceSet
1754 struct IfcConnectedFaceSet : IfcTopologicalRepresentationItem, ObjectHelper<IfcConnectedFaceSet,1> { IfcConnectedFaceSet() : Object("IfcConnectedFaceSet") {}
1755 ListOf< Lazy< IfcFace >, 1, 0 > CfsFaces;
1756 };
1757
1758 // C++ wrapper for IfcSweptSurface
1759 struct IfcSweptSurface : IfcSurface, ObjectHelper<IfcSweptSurface,2> { IfcSweptSurface() : Object("IfcSweptSurface") {}
1760 Lazy< IfcProfileDef > SweptCurve;
1761 Lazy< IfcAxis2Placement3D > Position;
1762 };
1763
1764 // C++ wrapper for IfcSurfaceOfLinearExtrusion
1765 struct IfcSurfaceOfLinearExtrusion : IfcSweptSurface, ObjectHelper<IfcSurfaceOfLinearExtrusion,2> { IfcSurfaceOfLinearExtrusion() : Object("IfcSurfaceOfLinearExtrusion") {}
1766 Lazy< IfcDirection > ExtrudedDirection;
1767 IfcLengthMeasure::Out Depth;
1768 };
1769
1770 // C++ wrapper for IfcArbitraryProfileDefWithVoids
1771 struct IfcArbitraryProfileDefWithVoids : IfcArbitraryClosedProfileDef, ObjectHelper<IfcArbitraryProfileDefWithVoids,1> { IfcArbitraryProfileDefWithVoids() : Object("IfcArbitraryProfileDefWithVoids") {}
1772 ListOf< Lazy< IfcCurve >, 1, 0 > InnerCurves;
1773 };
1774
1775 // C++ wrapper for IfcProcess
1776 struct IfcProcess : IfcObject, ObjectHelper<IfcProcess,0> { IfcProcess() : Object("IfcProcess") {}
1777
1778 };
1779
1780 // C++ wrapper for IfcProcedure
1781 struct IfcProcedure : IfcProcess, ObjectHelper<IfcProcedure,3> { IfcProcedure() : Object("IfcProcedure") {}
1782 IfcIdentifier::Out ProcedureID;
1783 IfcProcedureTypeEnum::Out ProcedureType;
1784 Maybe< IfcLabel::Out > UserDefinedProcedureType;
1785 };
1786
1787 // C++ wrapper for IfcVector
1788 struct IfcVector : IfcGeometricRepresentationItem, ObjectHelper<IfcVector,2> { IfcVector() : Object("IfcVector") {}
1789 Lazy< IfcDirection > Orientation;
1790 IfcLengthMeasure::Out Magnitude;
1791 };
1792
1793 // C++ wrapper for IfcFaceBound
1794 struct IfcFaceBound : IfcTopologicalRepresentationItem, ObjectHelper<IfcFaceBound,2> { IfcFaceBound() : Object("IfcFaceBound") {}
1795 Lazy< IfcLoop > Bound;
1796 BOOLEAN::Out Orientation;
1797 };
1798
1799 // C++ wrapper for IfcFaceOuterBound
1800 struct IfcFaceOuterBound : IfcFaceBound, ObjectHelper<IfcFaceOuterBound,0> { IfcFaceOuterBound() : Object("IfcFaceOuterBound") {}
1801
1802 };
1803
1804 // C++ wrapper for IfcFeatureElementAddition
1805 struct IfcFeatureElementAddition : IfcFeatureElement, ObjectHelper<IfcFeatureElementAddition,0> { IfcFeatureElementAddition() : Object("IfcFeatureElementAddition") {}
1806
1807 };
1808
1809 // C++ wrapper for IfcNamedUnit
1810 struct IfcNamedUnit : ObjectHelper<IfcNamedUnit,2> { IfcNamedUnit() : Object("IfcNamedUnit") {}
1811 Lazy< NotImplemented > Dimensions;
1812 IfcUnitEnum::Out UnitType;
1813 };
1814
1815 // C++ wrapper for IfcConversionBasedUnit
1816 struct IfcConversionBasedUnit : IfcNamedUnit, ObjectHelper<IfcConversionBasedUnit,2> { IfcConversionBasedUnit() : Object("IfcConversionBasedUnit") {}
1817 IfcLabel::Out Name;
1818 Lazy< IfcMeasureWithUnit > ConversionFactor;
1819 };
1820
1821 // C++ wrapper for IfcHeatExchangerType
1822 struct IfcHeatExchangerType : IfcEnergyConversionDeviceType, ObjectHelper<IfcHeatExchangerType,1> { IfcHeatExchangerType() : Object("IfcHeatExchangerType") {}
1823 IfcHeatExchangerTypeEnum::Out PredefinedType;
1824 };
1825
1826 // C++ wrapper for IfcPresentationStyleAssignment
1827 struct IfcPresentationStyleAssignment : ObjectHelper<IfcPresentationStyleAssignment,1> { IfcPresentationStyleAssignment() : Object("IfcPresentationStyleAssignment") {}
1828 ListOf< IfcPresentationStyleSelect, 1, 0 >::Out Styles;
1829 };
1830
1831 // C++ wrapper for IfcFlowTreatmentDeviceType
1832 struct IfcFlowTreatmentDeviceType : IfcDistributionFlowElementType, ObjectHelper<IfcFlowTreatmentDeviceType,0> { IfcFlowTreatmentDeviceType() : Object("IfcFlowTreatmentDeviceType") {}
1833
1834 };
1835
1836 // C++ wrapper for IfcFilterType
1837 struct IfcFilterType : IfcFlowTreatmentDeviceType, ObjectHelper<IfcFilterType,1> { IfcFilterType() : Object("IfcFilterType") {}
1838 IfcFilterTypeEnum::Out PredefinedType;
1839 };
1840
1841 // C++ wrapper for IfcResource
1842 struct IfcResource : IfcObject, ObjectHelper<IfcResource,0> { IfcResource() : Object("IfcResource") {}
1843
1844 };
1845
1846 // C++ wrapper for IfcEvaporativeCoolerType
1847 struct IfcEvaporativeCoolerType : IfcEnergyConversionDeviceType, ObjectHelper<IfcEvaporativeCoolerType,1> { IfcEvaporativeCoolerType() : Object("IfcEvaporativeCoolerType") {}
1848 IfcEvaporativeCoolerTypeEnum::Out PredefinedType;
1849 };
1850
1851 // C++ wrapper for IfcOffsetCurve2D
1852 struct IfcOffsetCurve2D : IfcCurve, ObjectHelper<IfcOffsetCurve2D,3> { IfcOffsetCurve2D() : Object("IfcOffsetCurve2D") {}
1853 Lazy< IfcCurve > BasisCurve;
1854 IfcLengthMeasure::Out Distance;
1855 LOGICAL::Out SelfIntersect;
1856 };
1857
1858 // C++ wrapper for IfcEdge
1859 struct IfcEdge : IfcTopologicalRepresentationItem, ObjectHelper<IfcEdge,2> { IfcEdge() : Object("IfcEdge") {}
1860 Lazy< IfcVertex > EdgeStart;
1861 Lazy< IfcVertex > EdgeEnd;
1862 };
1863
1864 // C++ wrapper for IfcSubedge
1865 struct IfcSubedge : IfcEdge, ObjectHelper<IfcSubedge,1> { IfcSubedge() : Object("IfcSubedge") {}
1866 Lazy< IfcEdge > ParentEdge;
1867 };
1868
1869 // C++ wrapper for IfcProxy
1870 struct IfcProxy : IfcProduct, ObjectHelper<IfcProxy,2> { IfcProxy() : Object("IfcProxy") {}
1871 IfcObjectTypeEnum::Out ProxyType;
1872 Maybe< IfcLabel::Out > Tag;
1873 };
1874
1875 // C++ wrapper for IfcLine
1876 struct IfcLine : IfcCurve, ObjectHelper<IfcLine,2> { IfcLine() : Object("IfcLine") {}
1877 Lazy< IfcCartesianPoint > Pnt;
1878 Lazy< IfcVector > Dir;
1879 };
1880
1881 // C++ wrapper for IfcColumn
1882 struct IfcColumn : IfcBuildingElement, ObjectHelper<IfcColumn,0> { IfcColumn() : Object("IfcColumn") {}
1883
1884 };
1885
1886 // C++ wrapper for IfcObjectPlacement
1887 struct IfcObjectPlacement : ObjectHelper<IfcObjectPlacement,0> { IfcObjectPlacement() : Object("IfcObjectPlacement") {}
1888
1889 };
1890
1891 // C++ wrapper for IfcGridPlacement
1892 struct IfcGridPlacement : IfcObjectPlacement, ObjectHelper<IfcGridPlacement,2> { IfcGridPlacement() : Object("IfcGridPlacement") {}
1893 Lazy< NotImplemented > PlacementLocation;
1894 Maybe< Lazy< NotImplemented > > PlacementRefDirection;
1895 };
1896
1897 // C++ wrapper for IfcDistributionControlElementType
1898 struct IfcDistributionControlElementType : IfcDistributionElementType, ObjectHelper<IfcDistributionControlElementType,0> { IfcDistributionControlElementType() : Object("IfcDistributionControlElementType") {}
1899
1900 };
1901
1902 // C++ wrapper for IfcRelConnects
1903 struct IfcRelConnects : IfcRelationship, ObjectHelper<IfcRelConnects,0> { IfcRelConnects() : Object("IfcRelConnects") {}
1904
1905 };
1906
1907 // C++ wrapper for IfcAnnotation
1908 struct IfcAnnotation : IfcProduct, ObjectHelper<IfcAnnotation,0> { IfcAnnotation() : Object("IfcAnnotation") {}
1909
1910 };
1911
1912 // C++ wrapper for IfcPlate
1913 struct IfcPlate : IfcBuildingElement, ObjectHelper<IfcPlate,0> { IfcPlate() : Object("IfcPlate") {}
1624 // C++ wrapper for IfcBooleanClippingResult
1625 struct IfcBooleanClippingResult : IfcBooleanResult, ObjectHelper<IfcBooleanClippingResult,0> { IfcBooleanClippingResult() : Object("IfcBooleanClippingResult") {}
19141626
19151627 };
19161628
19241636 Lazy< IfcClosedShell > Outer;
19251637 };
19261638
1927 // C++ wrapper for IfcFlowStorageDeviceType
1928 struct IfcFlowStorageDeviceType : IfcDistributionFlowElementType, ObjectHelper<IfcFlowStorageDeviceType,0> { IfcFlowStorageDeviceType() : Object("IfcFlowStorageDeviceType") {}
1929
1639 // C++ wrapper for IfcFlowTerminalType
1640 struct IfcFlowTerminalType : IfcDistributionFlowElementType, ObjectHelper<IfcFlowTerminalType,0> { IfcFlowTerminalType() : Object("IfcFlowTerminalType") {}
1641
1642 };
1643
1644 // C++ wrapper for IfcStackTerminalType
1645 struct IfcStackTerminalType : IfcFlowTerminalType, ObjectHelper<IfcStackTerminalType,1> { IfcStackTerminalType() : Object("IfcStackTerminalType") {}
1646 IfcStackTerminalTypeEnum::Out PredefinedType;
19301647 };
19311648
19321649 // C++ wrapper for IfcStructuralItem
19331650 struct IfcStructuralItem : IfcProduct, ObjectHelper<IfcStructuralItem,0> { IfcStructuralItem() : Object("IfcStructuralItem") {}
19341651
1935 };
1936
1937 // C++ wrapper for IfcStructuralMember
1938 struct IfcStructuralMember : IfcStructuralItem, ObjectHelper<IfcStructuralMember,0> { IfcStructuralMember() : Object("IfcStructuralMember") {}
1939
1940 };
1941
1942 // C++ wrapper for IfcStructuralCurveMember
1943 struct IfcStructuralCurveMember : IfcStructuralMember, ObjectHelper<IfcStructuralCurveMember,1> { IfcStructuralCurveMember() : Object("IfcStructuralCurveMember") {}
1944 IfcStructuralCurveTypeEnum::Out PredefinedType;
19451652 };
19461653
19471654 // C++ wrapper for IfcStructuralConnection
19491656 Maybe< Lazy< NotImplemented > > AppliedCondition;
19501657 };
19511658
1952 // C++ wrapper for IfcStructuralSurfaceConnection
1953 struct IfcStructuralSurfaceConnection : IfcStructuralConnection, ObjectHelper<IfcStructuralSurfaceConnection,0> { IfcStructuralSurfaceConnection() : Object("IfcStructuralSurfaceConnection") {}
1954
1955 };
1956
1957 // C++ wrapper for IfcCoilType
1958 struct IfcCoilType : IfcEnergyConversionDeviceType, ObjectHelper<IfcCoilType,1> { IfcCoilType() : Object("IfcCoilType") {}
1959 IfcCoilTypeEnum::Out PredefinedType;
1960 };
1961
1962 // C++ wrapper for IfcDuctFittingType
1963 struct IfcDuctFittingType : IfcFlowFittingType, ObjectHelper<IfcDuctFittingType,1> { IfcDuctFittingType() : Object("IfcDuctFittingType") {}
1964 IfcDuctFittingTypeEnum::Out PredefinedType;
1965 };
1966
1967 // C++ wrapper for IfcStyledItem
1968 struct IfcStyledItem : IfcRepresentationItem, ObjectHelper<IfcStyledItem,3> { IfcStyledItem() : Object("IfcStyledItem") {}
1969 Maybe< Lazy< IfcRepresentationItem > > Item;
1970 ListOf< Lazy< IfcPresentationStyleAssignment >, 1, 0 > Styles;
1971 Maybe< IfcLabel::Out > Name;
1972 };
1973
1974 // C++ wrapper for IfcAnnotationOccurrence
1975 struct IfcAnnotationOccurrence : IfcStyledItem, ObjectHelper<IfcAnnotationOccurrence,0> { IfcAnnotationOccurrence() : Object("IfcAnnotationOccurrence") {}
1976
1977 };
1978
1979 // C++ wrapper for IfcAnnotationCurveOccurrence
1980 struct IfcAnnotationCurveOccurrence : IfcAnnotationOccurrence, ObjectHelper<IfcAnnotationCurveOccurrence,0> { IfcAnnotationCurveOccurrence() : Object("IfcAnnotationCurveOccurrence") {}
1981
1982 };
1983
1984 // C++ wrapper for IfcDimensionCurve
1985 struct IfcDimensionCurve : IfcAnnotationCurveOccurrence, ObjectHelper<IfcDimensionCurve,0> { IfcDimensionCurve() : Object("IfcDimensionCurve") {}
1986
1987 };
1988
1989 // C++ wrapper for IfcBoundedCurve
1990 struct IfcBoundedCurve : IfcCurve, ObjectHelper<IfcBoundedCurve,0> { IfcBoundedCurve() : Object("IfcBoundedCurve") {}
1991
1992 };
1993
1994 // C++ wrapper for IfcAxis1Placement
1995 struct IfcAxis1Placement : IfcPlacement, ObjectHelper<IfcAxis1Placement,1> { IfcAxis1Placement() : Object("IfcAxis1Placement") {}
1996 Maybe< Lazy< IfcDirection > > Axis;
1997 };
1998
1999 // C++ wrapper for IfcStructuralPointAction
2000 struct IfcStructuralPointAction : IfcStructuralAction, ObjectHelper<IfcStructuralPointAction,0> { IfcStructuralPointAction() : Object("IfcStructuralPointAction") {}
2001
2002 };
2003
2004 // C++ wrapper for IfcSpatialStructureElement
2005 struct IfcSpatialStructureElement : IfcProduct, ObjectHelper<IfcSpatialStructureElement,2> { IfcSpatialStructureElement() : Object("IfcSpatialStructureElement") {}
2006 Maybe< IfcLabel::Out > LongName;
2007 IfcElementCompositionEnum::Out CompositionType;
2008 };
2009
2010 // C++ wrapper for IfcSpace
2011 struct IfcSpace : IfcSpatialStructureElement, ObjectHelper<IfcSpace,2> { IfcSpace() : Object("IfcSpace") {}
2012 IfcInternalOrExternalEnum::Out InteriorOrExteriorSpace;
2013 Maybe< IfcLengthMeasure::Out > ElevationWithFlooring;
2014 };
2015
2016 // C++ wrapper for IfcContextDependentUnit
2017 struct IfcContextDependentUnit : IfcNamedUnit, ObjectHelper<IfcContextDependentUnit,1> { IfcContextDependentUnit() : Object("IfcContextDependentUnit") {}
2018 IfcLabel::Out Name;
2019 };
2020
2021 // C++ wrapper for IfcCoolingTowerType
2022 struct IfcCoolingTowerType : IfcEnergyConversionDeviceType, ObjectHelper<IfcCoolingTowerType,1> { IfcCoolingTowerType() : Object("IfcCoolingTowerType") {}
2023 IfcCoolingTowerTypeEnum::Out PredefinedType;
2024 };
2025
2026 // C++ wrapper for IfcFacetedBrepWithVoids
2027 struct IfcFacetedBrepWithVoids : IfcManifoldSolidBrep, ObjectHelper<IfcFacetedBrepWithVoids,1> { IfcFacetedBrepWithVoids() : Object("IfcFacetedBrepWithVoids") {}
2028 ListOf< Lazy< IfcClosedShell >, 1, 0 > Voids;
2029 };
2030
2031 // C++ wrapper for IfcValveType
2032 struct IfcValveType : IfcFlowControllerType, ObjectHelper<IfcValveType,1> { IfcValveType() : Object("IfcValveType") {}
2033 IfcValveTypeEnum::Out PredefinedType;
2034 };
2035
2036 // C++ wrapper for IfcSystemFurnitureElementType
2037 struct IfcSystemFurnitureElementType : IfcFurnishingElementType, ObjectHelper<IfcSystemFurnitureElementType,0> { IfcSystemFurnitureElementType() : Object("IfcSystemFurnitureElementType") {}
2038
2039 };
2040
2041 // C++ wrapper for IfcDiscreteAccessory
2042 struct IfcDiscreteAccessory : IfcElementComponent, ObjectHelper<IfcDiscreteAccessory,0> { IfcDiscreteAccessory() : Object("IfcDiscreteAccessory") {}
2043
2044 };
2045
2046 // C++ wrapper for IfcBuildingElementType
2047 struct IfcBuildingElementType : IfcElementType, ObjectHelper<IfcBuildingElementType,0> { IfcBuildingElementType() : Object("IfcBuildingElementType") {}
2048
2049 };
2050
2051 // C++ wrapper for IfcRailingType
2052 struct IfcRailingType : IfcBuildingElementType, ObjectHelper<IfcRailingType,1> { IfcRailingType() : Object("IfcRailingType") {}
2053 IfcRailingTypeEnum::Out PredefinedType;
2054 };
2055
2056 // C++ wrapper for IfcGasTerminalType
2057 struct IfcGasTerminalType : IfcFlowTerminalType, ObjectHelper<IfcGasTerminalType,1> { IfcGasTerminalType() : Object("IfcGasTerminalType") {}
2058 IfcGasTerminalTypeEnum::Out PredefinedType;
2059 };
2060
2061 // C++ wrapper for IfcSpaceProgram
2062 struct IfcSpaceProgram : IfcControl, ObjectHelper<IfcSpaceProgram,5> { IfcSpaceProgram() : Object("IfcSpaceProgram") {}
2063 IfcIdentifier::Out SpaceProgramIdentifier;
2064 Maybe< IfcAreaMeasure::Out > MaxRequiredArea;
2065 Maybe< IfcAreaMeasure::Out > MinRequiredArea;
2066 Maybe< Lazy< IfcSpatialStructureElement > > RequestedLocation;
2067 IfcAreaMeasure::Out StandardRequiredArea;
2068 };
2069
2070 // C++ wrapper for IfcCovering
2071 struct IfcCovering : IfcBuildingElement, ObjectHelper<IfcCovering,1> { IfcCovering() : Object("IfcCovering") {}
2072 Maybe< IfcCoveringTypeEnum::Out > PredefinedType;
2073 };
2074
2075 // C++ wrapper for IfcPresentationStyle
2076 struct IfcPresentationStyle : ObjectHelper<IfcPresentationStyle,1> { IfcPresentationStyle() : Object("IfcPresentationStyle") {}
2077 Maybe< IfcLabel::Out > Name;
2078 };
2079
2080 // C++ wrapper for IfcElectricHeaterType
2081 struct IfcElectricHeaterType : IfcFlowTerminalType, ObjectHelper<IfcElectricHeaterType,1> { IfcElectricHeaterType() : Object("IfcElectricHeaterType") {}
2082 IfcElectricHeaterTypeEnum::Out PredefinedType;
2083 };
2084
2085 // C++ wrapper for IfcBuildingStorey
2086 struct IfcBuildingStorey : IfcSpatialStructureElement, ObjectHelper<IfcBuildingStorey,1> { IfcBuildingStorey() : Object("IfcBuildingStorey") {}
2087 Maybe< IfcLengthMeasure::Out > Elevation;
2088 };
2089
2090 // C++ wrapper for IfcVertex
2091 struct IfcVertex : IfcTopologicalRepresentationItem, ObjectHelper<IfcVertex,0> { IfcVertex() : Object("IfcVertex") {}
2092
2093 };
2094
2095 // C++ wrapper for IfcVertexPoint
2096 struct IfcVertexPoint : IfcVertex, ObjectHelper<IfcVertexPoint,1> { IfcVertexPoint() : Object("IfcVertexPoint") {}
2097 Lazy< IfcPoint > VertexGeometry;
2098 };
2099
2100 // C++ wrapper for IfcFlowInstrumentType
2101 struct IfcFlowInstrumentType : IfcDistributionControlElementType, ObjectHelper<IfcFlowInstrumentType,1> { IfcFlowInstrumentType() : Object("IfcFlowInstrumentType") {}
2102 IfcFlowInstrumentTypeEnum::Out PredefinedType;
2103 };
2104
2105 // C++ wrapper for IfcParameterizedProfileDef
2106 struct IfcParameterizedProfileDef : IfcProfileDef, ObjectHelper<IfcParameterizedProfileDef,1> { IfcParameterizedProfileDef() : Object("IfcParameterizedProfileDef") {}
2107 Lazy< IfcAxis2Placement2D > Position;
2108 };
2109
2110 // C++ wrapper for IfcUShapeProfileDef
2111 struct IfcUShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcUShapeProfileDef,8> { IfcUShapeProfileDef() : Object("IfcUShapeProfileDef") {}
2112 IfcPositiveLengthMeasure::Out Depth;
2113 IfcPositiveLengthMeasure::Out FlangeWidth;
2114 IfcPositiveLengthMeasure::Out WebThickness;
2115 IfcPositiveLengthMeasure::Out FlangeThickness;
2116 Maybe< IfcPositiveLengthMeasure::Out > FilletRadius;
2117 Maybe< IfcPositiveLengthMeasure::Out > EdgeRadius;
2118 Maybe< IfcPlaneAngleMeasure::Out > FlangeSlope;
2119 Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInX;
2120 };
2121
2122 // C++ wrapper for IfcRamp
2123 struct IfcRamp : IfcBuildingElement, ObjectHelper<IfcRamp,1> { IfcRamp() : Object("IfcRamp") {}
2124 IfcRampTypeEnum::Out ShapeType;
2125 };
2126
2127 // C++ wrapper for IfcCompositeCurve
2128 struct IfcCompositeCurve : IfcBoundedCurve, ObjectHelper<IfcCompositeCurve,2> { IfcCompositeCurve() : Object("IfcCompositeCurve") {}
2129 ListOf< Lazy< IfcCompositeCurveSegment >, 1, 0 > Segments;
2130 LOGICAL::Out SelfIntersect;
2131 };
2132
2133 // C++ wrapper for IfcStructuralCurveMemberVarying
2134 struct IfcStructuralCurveMemberVarying : IfcStructuralCurveMember, ObjectHelper<IfcStructuralCurveMemberVarying,0> { IfcStructuralCurveMemberVarying() : Object("IfcStructuralCurveMemberVarying") {}
2135
2136 };
2137
2138 // C++ wrapper for IfcRampFlightType
2139 struct IfcRampFlightType : IfcBuildingElementType, ObjectHelper<IfcRampFlightType,1> { IfcRampFlightType() : Object("IfcRampFlightType") {}
2140 IfcRampFlightTypeEnum::Out PredefinedType;
2141 };
2142
2143 // C++ wrapper for IfcDraughtingCallout
2144 struct IfcDraughtingCallout : IfcGeometricRepresentationItem, ObjectHelper<IfcDraughtingCallout,1> { IfcDraughtingCallout() : Object("IfcDraughtingCallout") {}
2145 ListOf< IfcDraughtingCalloutElement, 1, 0 >::Out Contents;
2146 };
2147
2148 // C++ wrapper for IfcDimensionCurveDirectedCallout
2149 struct IfcDimensionCurveDirectedCallout : IfcDraughtingCallout, ObjectHelper<IfcDimensionCurveDirectedCallout,0> { IfcDimensionCurveDirectedCallout() : Object("IfcDimensionCurveDirectedCallout") {}
2150
2151 };
2152
2153 // C++ wrapper for IfcRadiusDimension
2154 struct IfcRadiusDimension : IfcDimensionCurveDirectedCallout, ObjectHelper<IfcRadiusDimension,0> { IfcRadiusDimension() : Object("IfcRadiusDimension") {}
2155
2156 };
2157
2158 // C++ wrapper for IfcEdgeFeature
2159 struct IfcEdgeFeature : IfcFeatureElementSubtraction, ObjectHelper<IfcEdgeFeature,1> { IfcEdgeFeature() : Object("IfcEdgeFeature") {}
2160 Maybe< IfcPositiveLengthMeasure::Out > FeatureLength;
2161 };
2162
2163 // C++ wrapper for IfcSweptAreaSolid
2164 struct IfcSweptAreaSolid : IfcSolidModel, ObjectHelper<IfcSweptAreaSolid,2> { IfcSweptAreaSolid() : Object("IfcSweptAreaSolid") {}
2165 Lazy< IfcProfileDef > SweptArea;
2166 Lazy< IfcAxis2Placement3D > Position;
2167 };
2168
2169 // C++ wrapper for IfcExtrudedAreaSolid
2170 struct IfcExtrudedAreaSolid : IfcSweptAreaSolid, ObjectHelper<IfcExtrudedAreaSolid,2> { IfcExtrudedAreaSolid() : Object("IfcExtrudedAreaSolid") {}
2171 Lazy< IfcDirection > ExtrudedDirection;
2172 IfcPositiveLengthMeasure::Out Depth;
2173 };
2174
2175 // C++ wrapper for IfcAnnotationTextOccurrence
2176 struct IfcAnnotationTextOccurrence : IfcAnnotationOccurrence, ObjectHelper<IfcAnnotationTextOccurrence,0> { IfcAnnotationTextOccurrence() : Object("IfcAnnotationTextOccurrence") {}
2177
2178 };
2179
2180 // C++ wrapper for IfcStair
2181 struct IfcStair : IfcBuildingElement, ObjectHelper<IfcStair,1> { IfcStair() : Object("IfcStair") {}
2182 IfcStairTypeEnum::Out ShapeType;
2183 };
2184
2185 // C++ wrapper for IfcFillAreaStyleTileSymbolWithStyle
2186 struct IfcFillAreaStyleTileSymbolWithStyle : IfcGeometricRepresentationItem, ObjectHelper<IfcFillAreaStyleTileSymbolWithStyle,1> { IfcFillAreaStyleTileSymbolWithStyle() : Object("IfcFillAreaStyleTileSymbolWithStyle") {}
2187 Lazy< IfcAnnotationSymbolOccurrence > Symbol;
2188 };
2189
2190 // C++ wrapper for IfcAnnotationSymbolOccurrence
2191 struct IfcAnnotationSymbolOccurrence : IfcAnnotationOccurrence, ObjectHelper<IfcAnnotationSymbolOccurrence,0> { IfcAnnotationSymbolOccurrence() : Object("IfcAnnotationSymbolOccurrence") {}
2192
2193 };
2194
2195 // C++ wrapper for IfcTerminatorSymbol
2196 struct IfcTerminatorSymbol : IfcAnnotationSymbolOccurrence, ObjectHelper<IfcTerminatorSymbol,1> { IfcTerminatorSymbol() : Object("IfcTerminatorSymbol") {}
2197 Lazy< IfcAnnotationCurveOccurrence > AnnotatedCurve;
2198 };
2199
2200 // C++ wrapper for IfcDimensionCurveTerminator
2201 struct IfcDimensionCurveTerminator : IfcTerminatorSymbol, ObjectHelper<IfcDimensionCurveTerminator,1> { IfcDimensionCurveTerminator() : Object("IfcDimensionCurveTerminator") {}
2202 IfcDimensionExtentUsage::Out Role;
2203 };
2204
2205 // C++ wrapper for IfcRectangleProfileDef
2206 struct IfcRectangleProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcRectangleProfileDef,2> { IfcRectangleProfileDef() : Object("IfcRectangleProfileDef") {}
2207 IfcPositiveLengthMeasure::Out XDim;
2208 IfcPositiveLengthMeasure::Out YDim;
2209 };
2210
2211 // C++ wrapper for IfcRectangleHollowProfileDef
2212 struct IfcRectangleHollowProfileDef : IfcRectangleProfileDef, ObjectHelper<IfcRectangleHollowProfileDef,3> { IfcRectangleHollowProfileDef() : Object("IfcRectangleHollowProfileDef") {}
2213 IfcPositiveLengthMeasure::Out WallThickness;
2214 Maybe< IfcPositiveLengthMeasure::Out > InnerFilletRadius;
2215 Maybe< IfcPositiveLengthMeasure::Out > OuterFilletRadius;
2216 };
2217
2218 // C++ wrapper for IfcLocalPlacement
2219 struct IfcLocalPlacement : IfcObjectPlacement, ObjectHelper<IfcLocalPlacement,2> { IfcLocalPlacement() : Object("IfcLocalPlacement") {}
2220 Maybe< Lazy< IfcObjectPlacement > > PlacementRelTo;
2221 IfcAxis2Placement::Out RelativePlacement;
1659 // C++ wrapper for IfcStructuralCurveConnection
1660 struct IfcStructuralCurveConnection : IfcStructuralConnection, ObjectHelper<IfcStructuralCurveConnection,0> { IfcStructuralCurveConnection() : Object("IfcStructuralCurveConnection") {}
1661
1662 };
1663
1664 // C++ wrapper for IfcJunctionBoxType
1665 struct IfcJunctionBoxType : IfcFlowFittingType, ObjectHelper<IfcJunctionBoxType,1> { IfcJunctionBoxType() : Object("IfcJunctionBoxType") {}
1666 IfcJunctionBoxTypeEnum::Out PredefinedType;
1667 };
1668
1669 // C++ wrapper for IfcPropertyDefinition
1670 struct IfcPropertyDefinition : IfcRoot, ObjectHelper<IfcPropertyDefinition,0> { IfcPropertyDefinition() : Object("IfcPropertyDefinition") {}
1671
1672 };
1673
1674 // C++ wrapper for IfcPropertySetDefinition
1675 struct IfcPropertySetDefinition : IfcPropertyDefinition, ObjectHelper<IfcPropertySetDefinition,0> { IfcPropertySetDefinition() : Object("IfcPropertySetDefinition") {}
1676
1677 };
1678
1679 // C++ wrapper for IfcProcess
1680 struct IfcProcess : IfcObject, ObjectHelper<IfcProcess,0> { IfcProcess() : Object("IfcProcess") {}
1681
22221682 };
22231683
22241684 // C++ wrapper for IfcTask
22301690 Maybe< INTEGER::Out > Priority;
22311691 };
22321692
2233 // C++ wrapper for IfcAnnotationFillAreaOccurrence
2234 struct IfcAnnotationFillAreaOccurrence : IfcAnnotationOccurrence, ObjectHelper<IfcAnnotationFillAreaOccurrence,2> { IfcAnnotationFillAreaOccurrence() : Object("IfcAnnotationFillAreaOccurrence") {}
2235 Maybe< Lazy< IfcPoint > > FillStyleTarget;
2236 Maybe< IfcGlobalOrLocalEnum::Out > GlobalOrLocal;
2237 };
2238
2239 // C++ wrapper for IfcFace
2240 struct IfcFace : IfcTopologicalRepresentationItem, ObjectHelper<IfcFace,1> { IfcFace() : Object("IfcFace") {}
2241 ListOf< Lazy< IfcFaceBound >, 1, 0 > Bounds;
2242 };
2243
2244 // C++ wrapper for IfcFlowSegmentType
2245 struct IfcFlowSegmentType : IfcDistributionFlowElementType, ObjectHelper<IfcFlowSegmentType,0> { IfcFlowSegmentType() : Object("IfcFlowSegmentType") {}
2246
2247 };
2248
2249 // C++ wrapper for IfcDuctSegmentType
2250 struct IfcDuctSegmentType : IfcFlowSegmentType, ObjectHelper<IfcDuctSegmentType,1> { IfcDuctSegmentType() : Object("IfcDuctSegmentType") {}
2251 IfcDuctSegmentTypeEnum::Out PredefinedType;
1693 // C++ wrapper for IfcRelFillsElement
1694 struct IfcRelFillsElement : IfcRelConnects, ObjectHelper<IfcRelFillsElement,2> { IfcRelFillsElement() : Object("IfcRelFillsElement") {}
1695 Lazy< IfcOpeningElement > RelatingOpeningElement;
1696 Lazy< IfcElement > RelatedBuildingElement;
1697 };
1698
1699 // C++ wrapper for IfcProcedure
1700 struct IfcProcedure : IfcProcess, ObjectHelper<IfcProcedure,3> { IfcProcedure() : Object("IfcProcedure") {}
1701 IfcIdentifier::Out ProcedureID;
1702 IfcProcedureTypeEnum::Out ProcedureType;
1703 Maybe< IfcLabel::Out > UserDefinedProcedureType;
1704 };
1705
1706 // C++ wrapper for IfcProxy
1707 struct IfcProxy : IfcProduct, ObjectHelper<IfcProxy,2> { IfcProxy() : Object("IfcProxy") {}
1708 IfcObjectTypeEnum::Out ProxyType;
1709 Maybe< IfcLabel::Out > Tag;
1710 };
1711
1712 // C++ wrapper for IfcResource
1713 struct IfcResource : IfcObject, ObjectHelper<IfcResource,0> { IfcResource() : Object("IfcResource") {}
1714
22521715 };
22531716
22541717 // C++ wrapper for IfcConstructionResource
22591722 Maybe< Lazy< IfcMeasureWithUnit > > BaseQuantity;
22601723 };
22611724
2262 // C++ wrapper for IfcConstructionEquipmentResource
2263 struct IfcConstructionEquipmentResource : IfcConstructionResource, ObjectHelper<IfcConstructionEquipmentResource,0> { IfcConstructionEquipmentResource() : Object("IfcConstructionEquipmentResource") {}
2264
2265 };
2266
2267 // C++ wrapper for IfcSanitaryTerminalType
2268 struct IfcSanitaryTerminalType : IfcFlowTerminalType, ObjectHelper<IfcSanitaryTerminalType,1> { IfcSanitaryTerminalType() : Object("IfcSanitaryTerminalType") {}
2269 IfcSanitaryTerminalTypeEnum::Out PredefinedType;
1725 // C++ wrapper for IfcSubContractResource
1726 struct IfcSubContractResource : IfcConstructionResource, ObjectHelper<IfcSubContractResource,2> { IfcSubContractResource() : Object("IfcSubContractResource") {}
1727 Maybe< IfcActorSelect::Out > SubContractor;
1728 Maybe< IfcText::Out > JobDescription;
1729 };
1730
1731 // C++ wrapper for IfcRelContainedInSpatialStructure
1732 struct IfcRelContainedInSpatialStructure : IfcRelConnects, ObjectHelper<IfcRelContainedInSpatialStructure,2> { IfcRelContainedInSpatialStructure() : Object("IfcRelContainedInSpatialStructure") {}
1733 ListOf< Lazy< IfcProduct >, 1, 0 > RelatedElements;
1734 Lazy< IfcSpatialStructureElement > RelatingStructure;
1735 };
1736
1737 // C++ wrapper for IfcTopologicalRepresentationItem
1738 struct IfcTopologicalRepresentationItem : IfcRepresentationItem, ObjectHelper<IfcTopologicalRepresentationItem,0> { IfcTopologicalRepresentationItem() : Object("IfcTopologicalRepresentationItem") {}
1739
1740 };
1741
1742 // C++ wrapper for IfcEdge
1743 struct IfcEdge : IfcTopologicalRepresentationItem, ObjectHelper<IfcEdge,2> { IfcEdge() : Object("IfcEdge") {}
1744 Lazy< IfcVertex > EdgeStart;
1745 Lazy< IfcVertex > EdgeEnd;
1746 };
1747
1748 // C++ wrapper for IfcEdgeCurve
1749 struct IfcEdgeCurve : IfcEdge, ObjectHelper<IfcEdgeCurve,2> { IfcEdgeCurve() : Object("IfcEdgeCurve") {}
1750 Lazy< IfcCurve > EdgeGeometry;
1751 BOOLEAN::Out SameSense;
1752 };
1753
1754 // C++ wrapper for IfcPlateType
1755 struct IfcPlateType : IfcBuildingElementType, ObjectHelper<IfcPlateType,1> { IfcPlateType() : Object("IfcPlateType") {}
1756 IfcPlateTypeEnum::Out PredefinedType;
1757 };
1758
1759 // C++ wrapper for IfcObjectPlacement
1760 struct IfcObjectPlacement : ObjectHelper<IfcObjectPlacement,0> { IfcObjectPlacement() : Object("IfcObjectPlacement") {}
1761
1762 };
1763
1764 // C++ wrapper for IfcGridPlacement
1765 struct IfcGridPlacement : IfcObjectPlacement, ObjectHelper<IfcGridPlacement,2> { IfcGridPlacement() : Object("IfcGridPlacement") {}
1766 Lazy< NotImplemented > PlacementLocation;
1767 Maybe< Lazy< NotImplemented > > PlacementRefDirection;
1768 };
1769
1770 // C++ wrapper for IfcFireSuppressionTerminalType
1771 struct IfcFireSuppressionTerminalType : IfcFlowTerminalType, ObjectHelper<IfcFireSuppressionTerminalType,1> { IfcFireSuppressionTerminalType() : Object("IfcFireSuppressionTerminalType") {}
1772 IfcFireSuppressionTerminalTypeEnum::Out PredefinedType;
1773 };
1774
1775 // C++ wrapper for IfcFlowStorageDevice
1776 struct IfcFlowStorageDevice : IfcDistributionFlowElement, ObjectHelper<IfcFlowStorageDevice,0> { IfcFlowStorageDevice() : Object("IfcFlowStorageDevice") {}
1777
1778 };
1779
1780 // C++ wrapper for IfcSweptSurface
1781 struct IfcSweptSurface : IfcSurface, ObjectHelper<IfcSweptSurface,2> { IfcSweptSurface() : Object("IfcSweptSurface") {}
1782 Lazy< IfcProfileDef > SweptCurve;
1783 Lazy< IfcAxis2Placement3D > Position;
1784 };
1785
1786 // C++ wrapper for IfcSurfaceOfRevolution
1787 struct IfcSurfaceOfRevolution : IfcSweptSurface, ObjectHelper<IfcSurfaceOfRevolution,1> { IfcSurfaceOfRevolution() : Object("IfcSurfaceOfRevolution") {}
1788 Lazy< IfcAxis1Placement > AxisPosition;
1789 };
1790
1791 // C++ wrapper for IfcOrientedEdge
1792 struct IfcOrientedEdge : IfcEdge, ObjectHelper<IfcOrientedEdge,2> { IfcOrientedEdge() : Object("IfcOrientedEdge") {}
1793 Lazy< IfcEdge > EdgeElement;
1794 BOOLEAN::Out Orientation;
1795 };
1796
1797 // C++ wrapper for IfcDirection
1798 struct IfcDirection : IfcGeometricRepresentationItem, ObjectHelper<IfcDirection,1> { IfcDirection() : Object("IfcDirection") {}
1799 ListOf< REAL, 2, 3 >::Out DirectionRatios;
1800 };
1801
1802 // C++ wrapper for IfcProfileDef
1803 struct IfcProfileDef : ObjectHelper<IfcProfileDef,2> { IfcProfileDef() : Object("IfcProfileDef") {}
1804 IfcProfileTypeEnum::Out ProfileType;
1805 Maybe< IfcLabel::Out > ProfileName;
1806 };
1807
1808 // C++ wrapper for IfcParameterizedProfileDef
1809 struct IfcParameterizedProfileDef : IfcProfileDef, ObjectHelper<IfcParameterizedProfileDef,1> { IfcParameterizedProfileDef() : Object("IfcParameterizedProfileDef") {}
1810 Lazy< IfcAxis2Placement2D > Position;
1811 };
1812
1813 // C++ wrapper for IfcCShapeProfileDef
1814 struct IfcCShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcCShapeProfileDef,6> { IfcCShapeProfileDef() : Object("IfcCShapeProfileDef") {}
1815 IfcPositiveLengthMeasure::Out Depth;
1816 IfcPositiveLengthMeasure::Out Width;
1817 IfcPositiveLengthMeasure::Out WallThickness;
1818 IfcPositiveLengthMeasure::Out Girth;
1819 Maybe< IfcPositiveLengthMeasure::Out > InternalFilletRadius;
1820 Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInX;
1821 };
1822
1823 // C++ wrapper for IfcFeatureElement
1824 struct IfcFeatureElement : IfcElement, ObjectHelper<IfcFeatureElement,0> { IfcFeatureElement() : Object("IfcFeatureElement") {}
1825
1826 };
1827
1828 // C++ wrapper for IfcFeatureElementSubtraction
1829 struct IfcFeatureElementSubtraction : IfcFeatureElement, ObjectHelper<IfcFeatureElementSubtraction,0> { IfcFeatureElementSubtraction() : Object("IfcFeatureElementSubtraction") {}
1830
1831 };
1832
1833 // C++ wrapper for IfcEdgeFeature
1834 struct IfcEdgeFeature : IfcFeatureElementSubtraction, ObjectHelper<IfcEdgeFeature,1> { IfcEdgeFeature() : Object("IfcEdgeFeature") {}
1835 Maybe< IfcPositiveLengthMeasure::Out > FeatureLength;
1836 };
1837
1838 // C++ wrapper for IfcChamferEdgeFeature
1839 struct IfcChamferEdgeFeature : IfcEdgeFeature, ObjectHelper<IfcChamferEdgeFeature,2> { IfcChamferEdgeFeature() : Object("IfcChamferEdgeFeature") {}
1840 Maybe< IfcPositiveLengthMeasure::Out > Width;
1841 Maybe< IfcPositiveLengthMeasure::Out > Height;
1842 };
1843
1844 // C++ wrapper for IfcBuildingElement
1845 struct IfcBuildingElement : IfcElement, ObjectHelper<IfcBuildingElement,0> { IfcBuildingElement() : Object("IfcBuildingElement") {}
1846
1847 };
1848
1849 // C++ wrapper for IfcColumn
1850 struct IfcColumn : IfcBuildingElement, ObjectHelper<IfcColumn,0> { IfcColumn() : Object("IfcColumn") {}
1851
1852 };
1853
1854 // C++ wrapper for IfcPropertyReferenceValue
1855 struct IfcPropertyReferenceValue : IfcSimpleProperty, ObjectHelper<IfcPropertyReferenceValue,2> { IfcPropertyReferenceValue() : Object("IfcPropertyReferenceValue") {}
1856 Maybe< IfcLabel::Out > UsageName;
1857 IfcObjectReferenceSelect::Out PropertyReference;
1858 };
1859
1860 // C++ wrapper for IfcElectricMotorType
1861 struct IfcElectricMotorType : IfcEnergyConversionDeviceType, ObjectHelper<IfcElectricMotorType,1> { IfcElectricMotorType() : Object("IfcElectricMotorType") {}
1862 IfcElectricMotorTypeEnum::Out PredefinedType;
1863 };
1864
1865 // C++ wrapper for IfcSpatialStructureElementType
1866 struct IfcSpatialStructureElementType : IfcElementType, ObjectHelper<IfcSpatialStructureElementType,0> { IfcSpatialStructureElementType() : Object("IfcSpatialStructureElementType") {}
1867
1868 };
1869
1870 // C++ wrapper for IfcSpaceType
1871 struct IfcSpaceType : IfcSpatialStructureElementType, ObjectHelper<IfcSpaceType,1> { IfcSpaceType() : Object("IfcSpaceType") {}
1872 IfcSpaceTypeEnum::Out PredefinedType;
1873 };
1874
1875 // C++ wrapper for IfcColumnType
1876 struct IfcColumnType : IfcBuildingElementType, ObjectHelper<IfcColumnType,1> { IfcColumnType() : Object("IfcColumnType") {}
1877 IfcColumnTypeEnum::Out PredefinedType;
1878 };
1879
1880 // C++ wrapper for IfcCraneRailAShapeProfileDef
1881 struct IfcCraneRailAShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcCraneRailAShapeProfileDef,12> { IfcCraneRailAShapeProfileDef() : Object("IfcCraneRailAShapeProfileDef") {}
1882 IfcPositiveLengthMeasure::Out OverallHeight;
1883 IfcPositiveLengthMeasure::Out BaseWidth2;
1884 Maybe< IfcPositiveLengthMeasure::Out > Radius;
1885 IfcPositiveLengthMeasure::Out HeadWidth;
1886 IfcPositiveLengthMeasure::Out HeadDepth2;
1887 IfcPositiveLengthMeasure::Out HeadDepth3;
1888 IfcPositiveLengthMeasure::Out WebThickness;
1889 IfcPositiveLengthMeasure::Out BaseWidth4;
1890 IfcPositiveLengthMeasure::Out BaseDepth1;
1891 IfcPositiveLengthMeasure::Out BaseDepth2;
1892 IfcPositiveLengthMeasure::Out BaseDepth3;
1893 Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY;
1894 };
1895
1896 // C++ wrapper for IfcCondenserType
1897 struct IfcCondenserType : IfcEnergyConversionDeviceType, ObjectHelper<IfcCondenserType,1> { IfcCondenserType() : Object("IfcCondenserType") {}
1898 IfcCondenserTypeEnum::Out PredefinedType;
22701899 };
22711900
22721901 // C++ wrapper for IfcCircleProfileDef
22741903 IfcPositiveLengthMeasure::Out Radius;
22751904 };
22761905
2277 // C++ wrapper for IfcStructuralReaction
2278 struct IfcStructuralReaction : IfcStructuralActivity, ObjectHelper<IfcStructuralReaction,0> { IfcStructuralReaction() : Object("IfcStructuralReaction") {}
2279
2280 };
2281
2282 // C++ wrapper for IfcStructuralPointReaction
2283 struct IfcStructuralPointReaction : IfcStructuralReaction, ObjectHelper<IfcStructuralPointReaction,0> { IfcStructuralPointReaction() : Object("IfcStructuralPointReaction") {}
2284
1906 // C++ wrapper for IfcCircleHollowProfileDef
1907 struct IfcCircleHollowProfileDef : IfcCircleProfileDef, ObjectHelper<IfcCircleHollowProfileDef,1> { IfcCircleHollowProfileDef() : Object("IfcCircleHollowProfileDef") {}
1908 IfcPositiveLengthMeasure::Out WallThickness;
1909 };
1910
1911 // C++ wrapper for IfcPlacement
1912 struct IfcPlacement : IfcGeometricRepresentationItem, ObjectHelper<IfcPlacement,1> { IfcPlacement() : Object("IfcPlacement") {}
1913 Lazy< IfcCartesianPoint > Location;
1914 };
1915
1916 // C++ wrapper for IfcAxis2Placement3D
1917 struct IfcAxis2Placement3D : IfcPlacement, ObjectHelper<IfcAxis2Placement3D,2> { IfcAxis2Placement3D() : Object("IfcAxis2Placement3D") {}
1918 Maybe< Lazy< IfcDirection > > Axis;
1919 Maybe< Lazy< IfcDirection > > RefDirection;
1920 };
1921
1922 // C++ wrapper for IfcPresentationStyle
1923 struct IfcPresentationStyle : ObjectHelper<IfcPresentationStyle,1> { IfcPresentationStyle() : Object("IfcPresentationStyle") {}
1924 Maybe< IfcLabel::Out > Name;
1925 };
1926
1927 // C++ wrapper for IfcEquipmentElement
1928 struct IfcEquipmentElement : IfcElement, ObjectHelper<IfcEquipmentElement,0> { IfcEquipmentElement() : Object("IfcEquipmentElement") {}
1929
1930 };
1931
1932 // C++ wrapper for IfcCompositeCurveSegment
1933 struct IfcCompositeCurveSegment : IfcGeometricRepresentationItem, ObjectHelper<IfcCompositeCurveSegment,3> { IfcCompositeCurveSegment() : Object("IfcCompositeCurveSegment") {}
1934 IfcTransitionCode::Out Transition;
1935 BOOLEAN::Out SameSense;
1936 Lazy< IfcCurve > ParentCurve;
1937 };
1938
1939 // C++ wrapper for IfcRectangleProfileDef
1940 struct IfcRectangleProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcRectangleProfileDef,2> { IfcRectangleProfileDef() : Object("IfcRectangleProfileDef") {}
1941 IfcPositiveLengthMeasure::Out XDim;
1942 IfcPositiveLengthMeasure::Out YDim;
1943 };
1944
1945 // C++ wrapper for IfcBuildingElementProxy
1946 struct IfcBuildingElementProxy : IfcBuildingElement, ObjectHelper<IfcBuildingElementProxy,1> { IfcBuildingElementProxy() : Object("IfcBuildingElementProxy") {}
1947 Maybe< IfcElementCompositionEnum::Out > CompositionType;
1948 };
1949
1950 // C++ wrapper for IfcDistributionControlElementType
1951 struct IfcDistributionControlElementType : IfcDistributionElementType, ObjectHelper<IfcDistributionControlElementType,0> { IfcDistributionControlElementType() : Object("IfcDistributionControlElementType") {}
1952
1953 };
1954
1955 // C++ wrapper for IfcFlowInstrumentType
1956 struct IfcFlowInstrumentType : IfcDistributionControlElementType, ObjectHelper<IfcFlowInstrumentType,1> { IfcFlowInstrumentType() : Object("IfcFlowInstrumentType") {}
1957 IfcFlowInstrumentTypeEnum::Out PredefinedType;
1958 };
1959
1960 // C++ wrapper for IfcDraughtingCallout
1961 struct IfcDraughtingCallout : IfcGeometricRepresentationItem, ObjectHelper<IfcDraughtingCallout,1> { IfcDraughtingCallout() : Object("IfcDraughtingCallout") {}
1962 ListOf< IfcDraughtingCalloutElement, 1, 0 >::Out Contents;
1963 };
1964
1965 // C++ wrapper for IfcDimensionCurveDirectedCallout
1966 struct IfcDimensionCurveDirectedCallout : IfcDraughtingCallout, ObjectHelper<IfcDimensionCurveDirectedCallout,0> { IfcDimensionCurveDirectedCallout() : Object("IfcDimensionCurveDirectedCallout") {}
1967
1968 };
1969
1970 // C++ wrapper for IfcLinearDimension
1971 struct IfcLinearDimension : IfcDimensionCurveDirectedCallout, ObjectHelper<IfcLinearDimension,0> { IfcLinearDimension() : Object("IfcLinearDimension") {}
1972
1973 };
1974
1975 // C++ wrapper for IfcElementAssembly
1976 struct IfcElementAssembly : IfcElement, ObjectHelper<IfcElementAssembly,2> { IfcElementAssembly() : Object("IfcElementAssembly") {}
1977 Maybe< IfcAssemblyPlaceEnum::Out > AssemblyPlace;
1978 IfcElementAssemblyTypeEnum::Out PredefinedType;
1979 };
1980
1981 // C++ wrapper for IfcCsgPrimitive3D
1982 struct IfcCsgPrimitive3D : IfcGeometricRepresentationItem, ObjectHelper<IfcCsgPrimitive3D,1> { IfcCsgPrimitive3D() : Object("IfcCsgPrimitive3D") {}
1983 Lazy< IfcAxis2Placement3D > Position;
1984 };
1985
1986 // C++ wrapper for IfcRightCircularCone
1987 struct IfcRightCircularCone : IfcCsgPrimitive3D, ObjectHelper<IfcRightCircularCone,2> { IfcRightCircularCone() : Object("IfcRightCircularCone") {}
1988 IfcPositiveLengthMeasure::Out Height;
1989 IfcPositiveLengthMeasure::Out BottomRadius;
1990 };
1991
1992 // C++ wrapper for IfcProjectOrder
1993 struct IfcProjectOrder : IfcControl, ObjectHelper<IfcProjectOrder,3> { IfcProjectOrder() : Object("IfcProjectOrder") {}
1994 IfcIdentifier::Out ID;
1995 IfcProjectOrderTypeEnum::Out PredefinedType;
1996 Maybe< IfcLabel::Out > Status;
1997 };
1998
1999 // C++ wrapper for IfcLShapeProfileDef
2000 struct IfcLShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcLShapeProfileDef,8> { IfcLShapeProfileDef() : Object("IfcLShapeProfileDef") {}
2001 IfcPositiveLengthMeasure::Out Depth;
2002 Maybe< IfcPositiveLengthMeasure::Out > Width;
2003 IfcPositiveLengthMeasure::Out Thickness;
2004 Maybe< IfcPositiveLengthMeasure::Out > FilletRadius;
2005 Maybe< IfcPositiveLengthMeasure::Out > EdgeRadius;
2006 Maybe< IfcPlaneAngleMeasure::Out > LegSlope;
2007 Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInX;
2008 Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY;
2009 };
2010
2011 // C++ wrapper for IfcAngularDimension
2012 struct IfcAngularDimension : IfcDimensionCurveDirectedCallout, ObjectHelper<IfcAngularDimension,0> { IfcAngularDimension() : Object("IfcAngularDimension") {}
2013
2014 };
2015
2016 // C++ wrapper for IfcLocalPlacement
2017 struct IfcLocalPlacement : IfcObjectPlacement, ObjectHelper<IfcLocalPlacement,2> { IfcLocalPlacement() : Object("IfcLocalPlacement") {}
2018 Maybe< Lazy< IfcObjectPlacement > > PlacementRelTo;
2019 IfcAxis2Placement::Out RelativePlacement;
2020 };
2021
2022 // C++ wrapper for IfcSweptAreaSolid
2023 struct IfcSweptAreaSolid : IfcSolidModel, ObjectHelper<IfcSweptAreaSolid,2> { IfcSweptAreaSolid() : Object("IfcSweptAreaSolid") {}
2024 Lazy< IfcProfileDef > SweptArea;
2025 Lazy< IfcAxis2Placement3D > Position;
2026 };
2027
2028 // C++ wrapper for IfcRevolvedAreaSolid
2029 struct IfcRevolvedAreaSolid : IfcSweptAreaSolid, ObjectHelper<IfcRevolvedAreaSolid,2> { IfcRevolvedAreaSolid() : Object("IfcRevolvedAreaSolid") {}
2030 Lazy< IfcAxis1Placement > Axis;
2031 IfcPlaneAngleMeasure::Out Angle;
2032 };
2033
2034 // C++ wrapper for IfcStructuralSurfaceConnection
2035 struct IfcStructuralSurfaceConnection : IfcStructuralConnection, ObjectHelper<IfcStructuralSurfaceConnection,0> { IfcStructuralSurfaceConnection() : Object("IfcStructuralSurfaceConnection") {}
2036
2037 };
2038
2039 // C++ wrapper for IfcRadiusDimension
2040 struct IfcRadiusDimension : IfcDimensionCurveDirectedCallout, ObjectHelper<IfcRadiusDimension,0> { IfcRadiusDimension() : Object("IfcRadiusDimension") {}
2041
2042 };
2043
2044 // C++ wrapper for IfcSweptDiskSolid
2045 struct IfcSweptDiskSolid : IfcSolidModel, ObjectHelper<IfcSweptDiskSolid,5> { IfcSweptDiskSolid() : Object("IfcSweptDiskSolid") {}
2046 Lazy< IfcCurve > Directrix;
2047 IfcPositiveLengthMeasure::Out Radius;
2048 Maybe< IfcPositiveLengthMeasure::Out > InnerRadius;
2049 IfcParameterValue::Out StartParam;
2050 IfcParameterValue::Out EndParam;
2051 };
2052
2053 // C++ wrapper for IfcHalfSpaceSolid
2054 struct IfcHalfSpaceSolid : IfcGeometricRepresentationItem, ObjectHelper<IfcHalfSpaceSolid,2> { IfcHalfSpaceSolid() : Object("IfcHalfSpaceSolid") {}
2055 Lazy< IfcSurface > BaseSurface;
2056 BOOLEAN::Out AgreementFlag;
2057 };
2058
2059 // C++ wrapper for IfcPolygonalBoundedHalfSpace
2060 struct IfcPolygonalBoundedHalfSpace : IfcHalfSpaceSolid, ObjectHelper<IfcPolygonalBoundedHalfSpace,2> { IfcPolygonalBoundedHalfSpace() : Object("IfcPolygonalBoundedHalfSpace") {}
2061 Lazy< IfcAxis2Placement3D > Position;
2062 Lazy< IfcBoundedCurve > PolygonalBoundary;
2063 };
2064
2065 // C++ wrapper for IfcTimeSeriesSchedule
2066 struct IfcTimeSeriesSchedule : IfcControl, ObjectHelper<IfcTimeSeriesSchedule,3> { IfcTimeSeriesSchedule() : Object("IfcTimeSeriesSchedule") {}
2067 Maybe< ListOf< IfcDateTimeSelect, 1, 0 >::Out > ApplicableDates;
2068 IfcTimeSeriesScheduleTypeEnum::Out TimeSeriesScheduleType;
2069 Lazy< NotImplemented > TimeSeries;
2070 };
2071
2072 // C++ wrapper for IfcCooledBeamType
2073 struct IfcCooledBeamType : IfcEnergyConversionDeviceType, ObjectHelper<IfcCooledBeamType,1> { IfcCooledBeamType() : Object("IfcCooledBeamType") {}
2074 IfcCooledBeamTypeEnum::Out PredefinedType;
2075 };
2076
2077 // C++ wrapper for IfcProject
2078 struct IfcProject : IfcObject, ObjectHelper<IfcProject,4> { IfcProject() : Object("IfcProject") {}
2079 Maybe< IfcLabel::Out > LongName;
2080 Maybe< IfcLabel::Out > Phase;
2081 ListOf< Lazy< IfcRepresentationContext >, 1, 0 > RepresentationContexts;
2082 Lazy< IfcUnitAssignment > UnitsInContext;
2083 };
2084
2085 // C++ wrapper for IfcEvaporatorType
2086 struct IfcEvaporatorType : IfcEnergyConversionDeviceType, ObjectHelper<IfcEvaporatorType,1> { IfcEvaporatorType() : Object("IfcEvaporatorType") {}
2087 IfcEvaporatorTypeEnum::Out PredefinedType;
2088 };
2089
2090 // C++ wrapper for IfcLaborResource
2091 struct IfcLaborResource : IfcConstructionResource, ObjectHelper<IfcLaborResource,1> { IfcLaborResource() : Object("IfcLaborResource") {}
2092 Maybe< IfcText::Out > SkillSet;
2093 };
2094
2095 // C++ wrapper for IfcPropertyBoundedValue
2096 struct IfcPropertyBoundedValue : IfcSimpleProperty, ObjectHelper<IfcPropertyBoundedValue,3> { IfcPropertyBoundedValue() : Object("IfcPropertyBoundedValue") {}
2097 Maybe< IfcValue::Out > UpperBoundValue;
2098 Maybe< IfcValue::Out > LowerBoundValue;
2099 Maybe< IfcUnit::Out > Unit;
2100 };
2101
2102 // C++ wrapper for IfcRampFlightType
2103 struct IfcRampFlightType : IfcBuildingElementType, ObjectHelper<IfcRampFlightType,1> { IfcRampFlightType() : Object("IfcRampFlightType") {}
2104 IfcRampFlightTypeEnum::Out PredefinedType;
2105 };
2106
2107 // C++ wrapper for IfcMember
2108 struct IfcMember : IfcBuildingElement, ObjectHelper<IfcMember,0> { IfcMember() : Object("IfcMember") {}
2109
2110 };
2111
2112 // C++ wrapper for IfcTubeBundleType
2113 struct IfcTubeBundleType : IfcEnergyConversionDeviceType, ObjectHelper<IfcTubeBundleType,1> { IfcTubeBundleType() : Object("IfcTubeBundleType") {}
2114 IfcTubeBundleTypeEnum::Out PredefinedType;
2115 };
2116
2117 // C++ wrapper for IfcValveType
2118 struct IfcValveType : IfcFlowControllerType, ObjectHelper<IfcValveType,1> { IfcValveType() : Object("IfcValveType") {}
2119 IfcValveTypeEnum::Out PredefinedType;
2120 };
2121
2122 // C++ wrapper for IfcTrimmedCurve
2123 struct IfcTrimmedCurve : IfcBoundedCurve, ObjectHelper<IfcTrimmedCurve,5> { IfcTrimmedCurve() : Object("IfcTrimmedCurve") {}
2124 Lazy< IfcCurve > BasisCurve;
2125 ListOf< IfcTrimmingSelect, 1, 2 >::Out Trim1;
2126 ListOf< IfcTrimmingSelect, 1, 2 >::Out Trim2;
2127 BOOLEAN::Out SenseAgreement;
2128 IfcTrimmingPreference::Out MasterRepresentation;
2129 };
2130
2131 // C++ wrapper for IfcRelDefines
2132 struct IfcRelDefines : IfcRelationship, ObjectHelper<IfcRelDefines,1> { IfcRelDefines() : Object("IfcRelDefines") {}
2133 ListOf< Lazy< IfcObject >, 1, 0 > RelatedObjects;
2134 };
2135
2136 // C++ wrapper for IfcRelDefinesByProperties
2137 struct IfcRelDefinesByProperties : IfcRelDefines, ObjectHelper<IfcRelDefinesByProperties,1> { IfcRelDefinesByProperties() : Object("IfcRelDefinesByProperties") {}
2138 Lazy< IfcPropertySetDefinition > RelatingPropertyDefinition;
2139 };
2140
2141 // C++ wrapper for IfcActor
2142 struct IfcActor : IfcObject, ObjectHelper<IfcActor,1> { IfcActor() : Object("IfcActor") {}
2143 IfcActorSelect::Out TheActor;
2144 };
2145
2146 // C++ wrapper for IfcOccupant
2147 struct IfcOccupant : IfcActor, ObjectHelper<IfcOccupant,1> { IfcOccupant() : Object("IfcOccupant") {}
2148 IfcOccupantTypeEnum::Out PredefinedType;
2149 };
2150
2151 // C++ wrapper for IfcHumidifierType
2152 struct IfcHumidifierType : IfcEnergyConversionDeviceType, ObjectHelper<IfcHumidifierType,1> { IfcHumidifierType() : Object("IfcHumidifierType") {}
2153 IfcHumidifierTypeEnum::Out PredefinedType;
2154 };
2155
2156 // C++ wrapper for IfcArbitraryOpenProfileDef
2157 struct IfcArbitraryOpenProfileDef : IfcProfileDef, ObjectHelper<IfcArbitraryOpenProfileDef,1> { IfcArbitraryOpenProfileDef() : Object("IfcArbitraryOpenProfileDef") {}
2158 Lazy< IfcBoundedCurve > Curve;
2159 };
2160
2161 // C++ wrapper for IfcPermit
2162 struct IfcPermit : IfcControl, ObjectHelper<IfcPermit,1> { IfcPermit() : Object("IfcPermit") {}
2163 IfcIdentifier::Out PermitID;
2164 };
2165
2166 // C++ wrapper for IfcOffsetCurve3D
2167 struct IfcOffsetCurve3D : IfcCurve, ObjectHelper<IfcOffsetCurve3D,4> { IfcOffsetCurve3D() : Object("IfcOffsetCurve3D") {}
2168 Lazy< IfcCurve > BasisCurve;
2169 IfcLengthMeasure::Out Distance;
2170 LOGICAL::Out SelfIntersect;
2171 Lazy< IfcDirection > RefDirection;
2172 };
2173
2174 // C++ wrapper for IfcLightSource
2175 struct IfcLightSource : IfcGeometricRepresentationItem, ObjectHelper<IfcLightSource,4> { IfcLightSource() : Object("IfcLightSource") {}
2176 Maybe< IfcLabel::Out > Name;
2177 Lazy< IfcColourRgb > LightColour;
2178 Maybe< IfcNormalisedRatioMeasure::Out > AmbientIntensity;
2179 Maybe< IfcNormalisedRatioMeasure::Out > Intensity;
2180 };
2181
2182 // C++ wrapper for IfcLightSourcePositional
2183 struct IfcLightSourcePositional : IfcLightSource, ObjectHelper<IfcLightSourcePositional,5> { IfcLightSourcePositional() : Object("IfcLightSourcePositional") {}
2184 Lazy< IfcCartesianPoint > Position;
2185 IfcPositiveLengthMeasure::Out Radius;
2186 IfcReal::Out ConstantAttenuation;
2187 IfcReal::Out DistanceAttenuation;
2188 IfcReal::Out QuadricAttenuation;
2189 };
2190
2191 // C++ wrapper for IfcCompositeProfileDef
2192 struct IfcCompositeProfileDef : IfcProfileDef, ObjectHelper<IfcCompositeProfileDef,2> { IfcCompositeProfileDef() : Object("IfcCompositeProfileDef") {}
2193 ListOf< Lazy< IfcProfileDef >, 2, 0 > Profiles;
2194 Maybe< IfcLabel::Out > Label;
2195 };
2196
2197 // C++ wrapper for IfcRamp
2198 struct IfcRamp : IfcBuildingElement, ObjectHelper<IfcRamp,1> { IfcRamp() : Object("IfcRamp") {}
2199 IfcRampTypeEnum::Out ShapeType;
2200 };
2201
2202 // C++ wrapper for IfcFlowMovingDevice
2203 struct IfcFlowMovingDevice : IfcDistributionFlowElement, ObjectHelper<IfcFlowMovingDevice,0> { IfcFlowMovingDevice() : Object("IfcFlowMovingDevice") {}
2204
2205 };
2206
2207 // C++ wrapper for IfcSpaceHeaterType
2208 struct IfcSpaceHeaterType : IfcEnergyConversionDeviceType, ObjectHelper<IfcSpaceHeaterType,1> { IfcSpaceHeaterType() : Object("IfcSpaceHeaterType") {}
2209 IfcSpaceHeaterTypeEnum::Out PredefinedType;
2210 };
2211
2212 // C++ wrapper for IfcLampType
2213 struct IfcLampType : IfcFlowTerminalType, ObjectHelper<IfcLampType,1> { IfcLampType() : Object("IfcLampType") {}
2214 IfcLampTypeEnum::Out PredefinedType;
2215 };
2216
2217 // C++ wrapper for IfcBuildingElementComponent
2218 struct IfcBuildingElementComponent : IfcBuildingElement, ObjectHelper<IfcBuildingElementComponent,0> { IfcBuildingElementComponent() : Object("IfcBuildingElementComponent") {}
2219
2220 };
2221
2222 // C++ wrapper for IfcReinforcingElement
2223 struct IfcReinforcingElement : IfcBuildingElementComponent, ObjectHelper<IfcReinforcingElement,1> { IfcReinforcingElement() : Object("IfcReinforcingElement") {}
2224 Maybe< IfcLabel::Out > SteelGrade;
2225 };
2226
2227 // C++ wrapper for IfcReinforcingBar
2228 struct IfcReinforcingBar : IfcReinforcingElement, ObjectHelper<IfcReinforcingBar,5> { IfcReinforcingBar() : Object("IfcReinforcingBar") {}
2229 IfcPositiveLengthMeasure::Out NominalDiameter;
2230 IfcAreaMeasure::Out CrossSectionArea;
2231 Maybe< IfcPositiveLengthMeasure::Out > BarLength;
2232 IfcReinforcingBarRoleEnum::Out BarRole;
2233 Maybe< IfcReinforcingBarSurfaceEnum::Out > BarSurface;
2234 };
2235
2236 // C++ wrapper for IfcElectricHeaterType
2237 struct IfcElectricHeaterType : IfcFlowTerminalType, ObjectHelper<IfcElectricHeaterType,1> { IfcElectricHeaterType() : Object("IfcElectricHeaterType") {}
2238 IfcElectricHeaterTypeEnum::Out PredefinedType;
2239 };
2240
2241 // C++ wrapper for IfcTShapeProfileDef
2242 struct IfcTShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcTShapeProfileDef,10> { IfcTShapeProfileDef() : Object("IfcTShapeProfileDef") {}
2243 IfcPositiveLengthMeasure::Out Depth;
2244 IfcPositiveLengthMeasure::Out FlangeWidth;
2245 IfcPositiveLengthMeasure::Out WebThickness;
2246 IfcPositiveLengthMeasure::Out FlangeThickness;
2247 Maybe< IfcPositiveLengthMeasure::Out > FilletRadius;
2248 Maybe< IfcPositiveLengthMeasure::Out > FlangeEdgeRadius;
2249 Maybe< IfcPositiveLengthMeasure::Out > WebEdgeRadius;
2250 Maybe< IfcPlaneAngleMeasure::Out > WebSlope;
2251 Maybe< IfcPlaneAngleMeasure::Out > FlangeSlope;
2252 Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY;
2253 };
2254
2255 // C++ wrapper for IfcStructuralActivity
2256 struct IfcStructuralActivity : IfcProduct, ObjectHelper<IfcStructuralActivity,2> { IfcStructuralActivity() : Object("IfcStructuralActivity") {}
2257 Lazy< NotImplemented > AppliedLoad;
2258 IfcGlobalOrLocalEnum::Out GlobalOrLocal;
2259 };
2260
2261 // C++ wrapper for IfcStructuralAction
2262 struct IfcStructuralAction : IfcStructuralActivity, ObjectHelper<IfcStructuralAction,2> { IfcStructuralAction() : Object("IfcStructuralAction") {}
2263 BOOLEAN::Out DestabilizingLoad;
2264 Maybe< Lazy< IfcStructuralReaction > > CausedBy;
2265 };
2266
2267 // C++ wrapper for IfcDuctFittingType
2268 struct IfcDuctFittingType : IfcFlowFittingType, ObjectHelper<IfcDuctFittingType,1> { IfcDuctFittingType() : Object("IfcDuctFittingType") {}
2269 IfcDuctFittingTypeEnum::Out PredefinedType;
2270 };
2271
2272 // C++ wrapper for IfcCartesianTransformationOperator2D
2273 struct IfcCartesianTransformationOperator2D : IfcCartesianTransformationOperator, ObjectHelper<IfcCartesianTransformationOperator2D,0> { IfcCartesianTransformationOperator2D() : Object("IfcCartesianTransformationOperator2D") {}
2274
2275 };
2276
2277 // C++ wrapper for IfcCartesianTransformationOperator2DnonUniform
2278 struct IfcCartesianTransformationOperator2DnonUniform : IfcCartesianTransformationOperator2D, ObjectHelper<IfcCartesianTransformationOperator2DnonUniform,1> { IfcCartesianTransformationOperator2DnonUniform() : Object("IfcCartesianTransformationOperator2DnonUniform") {}
2279 Maybe< REAL::Out > Scale2;
2280 };
2281
2282 // C++ wrapper for IfcVirtualElement
2283 struct IfcVirtualElement : IfcElement, ObjectHelper<IfcVirtualElement,0> { IfcVirtualElement() : Object("IfcVirtualElement") {}
2284
2285 };
2286
2287 // C++ wrapper for IfcRightCircularCylinder
2288 struct IfcRightCircularCylinder : IfcCsgPrimitive3D, ObjectHelper<IfcRightCircularCylinder,2> { IfcRightCircularCylinder() : Object("IfcRightCircularCylinder") {}
2289 IfcPositiveLengthMeasure::Out Height;
2290 IfcPositiveLengthMeasure::Out Radius;
2291 };
2292
2293 // C++ wrapper for IfcOutletType
2294 struct IfcOutletType : IfcFlowTerminalType, ObjectHelper<IfcOutletType,1> { IfcOutletType() : Object("IfcOutletType") {}
2295 IfcOutletTypeEnum::Out PredefinedType;
2296 };
2297
2298 // C++ wrapper for IfcRelDecomposes
2299 struct IfcRelDecomposes : IfcRelationship, ObjectHelper<IfcRelDecomposes,2> { IfcRelDecomposes() : Object("IfcRelDecomposes") {}
2300 Lazy< IfcObjectDefinition > RelatingObject;
2301 ListOf< Lazy< IfcObjectDefinition >, 1, 0 > RelatedObjects;
2302 };
2303
2304 // C++ wrapper for IfcCovering
2305 struct IfcCovering : IfcBuildingElement, ObjectHelper<IfcCovering,1> { IfcCovering() : Object("IfcCovering") {}
2306 Maybe< IfcCoveringTypeEnum::Out > PredefinedType;
2307 };
2308
2309 // C++ wrapper for IfcPolyline
2310 struct IfcPolyline : IfcBoundedCurve, ObjectHelper<IfcPolyline,1> { IfcPolyline() : Object("IfcPolyline") {}
2311 ListOf< Lazy< IfcCartesianPoint >, 2, 0 > Points;
2312 };
2313
2314 // C++ wrapper for IfcPath
2315 struct IfcPath : IfcTopologicalRepresentationItem, ObjectHelper<IfcPath,1> { IfcPath() : Object("IfcPath") {}
2316 ListOf< Lazy< IfcOrientedEdge >, 1, 0 > EdgeList;
2317 };
2318
2319 // C++ wrapper for IfcElementComponent
2320 struct IfcElementComponent : IfcElement, ObjectHelper<IfcElementComponent,0> { IfcElementComponent() : Object("IfcElementComponent") {}
2321
2322 };
2323
2324 // C++ wrapper for IfcFastener
2325 struct IfcFastener : IfcElementComponent, ObjectHelper<IfcFastener,0> { IfcFastener() : Object("IfcFastener") {}
2326
2327 };
2328
2329 // C++ wrapper for IfcMappedItem
2330 struct IfcMappedItem : IfcRepresentationItem, ObjectHelper<IfcMappedItem,2> { IfcMappedItem() : Object("IfcMappedItem") {}
2331 Lazy< IfcRepresentationMap > MappingSource;
2332 Lazy< IfcCartesianTransformationOperator > MappingTarget;
2333 };
2334
2335 // C++ wrapper for IfcRectangularPyramid
2336 struct IfcRectangularPyramid : IfcCsgPrimitive3D, ObjectHelper<IfcRectangularPyramid,3> { IfcRectangularPyramid() : Object("IfcRectangularPyramid") {}
2337 IfcPositiveLengthMeasure::Out XLength;
2338 IfcPositiveLengthMeasure::Out YLength;
2339 IfcPositiveLengthMeasure::Out Height;
2340 };
2341
2342 // C++ wrapper for IfcCrewResource
2343 struct IfcCrewResource : IfcConstructionResource, ObjectHelper<IfcCrewResource,0> { IfcCrewResource() : Object("IfcCrewResource") {}
2344
2345 };
2346
2347 // C++ wrapper for IfcNamedUnit
2348 struct IfcNamedUnit : ObjectHelper<IfcNamedUnit,2> { IfcNamedUnit() : Object("IfcNamedUnit") {}
2349 Lazy< NotImplemented > Dimensions;
2350 IfcUnitEnum::Out UnitType;
2351 };
2352
2353 // C++ wrapper for IfcContextDependentUnit
2354 struct IfcContextDependentUnit : IfcNamedUnit, ObjectHelper<IfcContextDependentUnit,1> { IfcContextDependentUnit() : Object("IfcContextDependentUnit") {}
2355 IfcLabel::Out Name;
2356 };
2357
2358 // C++ wrapper for IfcUnitaryEquipmentType
2359 struct IfcUnitaryEquipmentType : IfcEnergyConversionDeviceType, ObjectHelper<IfcUnitaryEquipmentType,1> { IfcUnitaryEquipmentType() : Object("IfcUnitaryEquipmentType") {}
2360 IfcUnitaryEquipmentTypeEnum::Out PredefinedType;
2361 };
2362
2363 // C++ wrapper for IfcRoof
2364 struct IfcRoof : IfcBuildingElement, ObjectHelper<IfcRoof,1> { IfcRoof() : Object("IfcRoof") {}
2365 IfcRoofTypeEnum::Out ShapeType;
2366 };
2367
2368 // C++ wrapper for IfcStructuralMember
2369 struct IfcStructuralMember : IfcStructuralItem, ObjectHelper<IfcStructuralMember,0> { IfcStructuralMember() : Object("IfcStructuralMember") {}
2370
2371 };
2372
2373 // C++ wrapper for IfcStyleModel
2374 struct IfcStyleModel : IfcRepresentation, ObjectHelper<IfcStyleModel,0> { IfcStyleModel() : Object("IfcStyleModel") {}
2375
2376 };
2377
2378 // C++ wrapper for IfcStyledRepresentation
2379 struct IfcStyledRepresentation : IfcStyleModel, ObjectHelper<IfcStyledRepresentation,0> { IfcStyledRepresentation() : Object("IfcStyledRepresentation") {}
2380
2381 };
2382
2383 // C++ wrapper for IfcSpatialStructureElement
2384 struct IfcSpatialStructureElement : IfcProduct, ObjectHelper<IfcSpatialStructureElement,2> { IfcSpatialStructureElement() : Object("IfcSpatialStructureElement") {}
2385 Maybe< IfcLabel::Out > LongName;
2386 IfcElementCompositionEnum::Out CompositionType;
2387 };
2388
2389 // C++ wrapper for IfcBuilding
2390 struct IfcBuilding : IfcSpatialStructureElement, ObjectHelper<IfcBuilding,3> { IfcBuilding() : Object("IfcBuilding") {}
2391 Maybe< IfcLengthMeasure::Out > ElevationOfRefHeight;
2392 Maybe< IfcLengthMeasure::Out > ElevationOfTerrain;
2393 Maybe< Lazy< NotImplemented > > BuildingAddress;
2394 };
2395
2396 // C++ wrapper for IfcConnectedFaceSet
2397 struct IfcConnectedFaceSet : IfcTopologicalRepresentationItem, ObjectHelper<IfcConnectedFaceSet,1> { IfcConnectedFaceSet() : Object("IfcConnectedFaceSet") {}
2398 ListOf< Lazy< IfcFace >, 1, 0 > CfsFaces;
2399 };
2400
2401 // C++ wrapper for IfcOpenShell
2402 struct IfcOpenShell : IfcConnectedFaceSet, ObjectHelper<IfcOpenShell,0> { IfcOpenShell() : Object("IfcOpenShell") {}
2403
2404 };
2405
2406 // C++ wrapper for IfcFacetedBrep
2407 struct IfcFacetedBrep : IfcManifoldSolidBrep, ObjectHelper<IfcFacetedBrep,0> { IfcFacetedBrep() : Object("IfcFacetedBrep") {}
2408
2409 };
2410
2411 // C++ wrapper for IfcConic
2412 struct IfcConic : IfcCurve, ObjectHelper<IfcConic,1> { IfcConic() : Object("IfcConic") {}
2413 IfcAxis2Placement::Out Position;
2414 };
2415
2416 // C++ wrapper for IfcCoveringType
2417 struct IfcCoveringType : IfcBuildingElementType, ObjectHelper<IfcCoveringType,1> { IfcCoveringType() : Object("IfcCoveringType") {}
2418 IfcCoveringTypeEnum::Out PredefinedType;
2419 };
2420
2421 // C++ wrapper for IfcRoundedRectangleProfileDef
2422 struct IfcRoundedRectangleProfileDef : IfcRectangleProfileDef, ObjectHelper<IfcRoundedRectangleProfileDef,1> { IfcRoundedRectangleProfileDef() : Object("IfcRoundedRectangleProfileDef") {}
2423 IfcPositiveLengthMeasure::Out RoundingRadius;
2424 };
2425
2426 // C++ wrapper for IfcAirTerminalType
2427 struct IfcAirTerminalType : IfcFlowTerminalType, ObjectHelper<IfcAirTerminalType,1> { IfcAirTerminalType() : Object("IfcAirTerminalType") {}
2428 IfcAirTerminalTypeEnum::Out PredefinedType;
2429 };
2430
2431 // C++ wrapper for IfcFlowMovingDeviceType
2432 struct IfcFlowMovingDeviceType : IfcDistributionFlowElementType, ObjectHelper<IfcFlowMovingDeviceType,0> { IfcFlowMovingDeviceType() : Object("IfcFlowMovingDeviceType") {}
2433
2434 };
2435
2436 // C++ wrapper for IfcCompressorType
2437 struct IfcCompressorType : IfcFlowMovingDeviceType, ObjectHelper<IfcCompressorType,1> { IfcCompressorType() : Object("IfcCompressorType") {}
2438 IfcCompressorTypeEnum::Out PredefinedType;
2439 };
2440
2441 // C++ wrapper for IfcIShapeProfileDef
2442 struct IfcIShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcIShapeProfileDef,5> { IfcIShapeProfileDef() : Object("IfcIShapeProfileDef") {}
2443 IfcPositiveLengthMeasure::Out OverallWidth;
2444 IfcPositiveLengthMeasure::Out OverallDepth;
2445 IfcPositiveLengthMeasure::Out WebThickness;
2446 IfcPositiveLengthMeasure::Out FlangeThickness;
2447 Maybe< IfcPositiveLengthMeasure::Out > FilletRadius;
2448 };
2449
2450 // C++ wrapper for IfcAsymmetricIShapeProfileDef
2451 struct IfcAsymmetricIShapeProfileDef : IfcIShapeProfileDef, ObjectHelper<IfcAsymmetricIShapeProfileDef,4> { IfcAsymmetricIShapeProfileDef() : Object("IfcAsymmetricIShapeProfileDef") {}
2452 IfcPositiveLengthMeasure::Out TopFlangeWidth;
2453 Maybe< IfcPositiveLengthMeasure::Out > TopFlangeThickness;
2454 Maybe< IfcPositiveLengthMeasure::Out > TopFlangeFilletRadius;
2455 Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY;
2456 };
2457
2458 // C++ wrapper for IfcControllerType
2459 struct IfcControllerType : IfcDistributionControlElementType, ObjectHelper<IfcControllerType,1> { IfcControllerType() : Object("IfcControllerType") {}
2460 IfcControllerTypeEnum::Out PredefinedType;
22852461 };
22862462
22872463 // C++ wrapper for IfcRailing
22892465 Maybe< IfcRailingTypeEnum::Out > PredefinedType;
22902466 };
22912467
2292 // C++ wrapper for IfcTextLiteral
2293 struct IfcTextLiteral : IfcGeometricRepresentationItem, ObjectHelper<IfcTextLiteral,3> { IfcTextLiteral() : Object("IfcTextLiteral") {}
2294 IfcPresentableText::Out Literal;
2295 IfcAxis2Placement::Out Placement;
2296 IfcTextPath::Out Path;
2297 };
2298
2299 // C++ wrapper for IfcCartesianTransformationOperator
2300 struct IfcCartesianTransformationOperator : IfcGeometricRepresentationItem, ObjectHelper<IfcCartesianTransformationOperator,4> { IfcCartesianTransformationOperator() : Object("IfcCartesianTransformationOperator") {}
2301 Maybe< Lazy< IfcDirection > > Axis1;
2302 Maybe< Lazy< IfcDirection > > Axis2;
2303 Lazy< IfcCartesianPoint > LocalOrigin;
2304 Maybe< REAL::Out > Scale;
2305 };
2306
2307 // C++ wrapper for IfcLinearDimension
2308 struct IfcLinearDimension : IfcDimensionCurveDirectedCallout, ObjectHelper<IfcLinearDimension,0> { IfcLinearDimension() : Object("IfcLinearDimension") {}
2309
2310 };
2311
2312 // C++ wrapper for IfcDamperType
2313 struct IfcDamperType : IfcFlowControllerType, ObjectHelper<IfcDamperType,1> { IfcDamperType() : Object("IfcDamperType") {}
2314 IfcDamperTypeEnum::Out PredefinedType;
2315 };
2316
2317 // C++ wrapper for IfcSIUnit
2318 struct IfcSIUnit : IfcNamedUnit, ObjectHelper<IfcSIUnit,2> { IfcSIUnit() : Object("IfcSIUnit") {}
2319 Maybe< IfcSIPrefix::Out > Prefix;
2320 IfcSIUnitName::Out Name;
2321 };
2322
2323 // C++ wrapper for IfcMeasureWithUnit
2324 struct IfcMeasureWithUnit : ObjectHelper<IfcMeasureWithUnit,2> { IfcMeasureWithUnit() : Object("IfcMeasureWithUnit") {}
2325 IfcValue::Out ValueComponent;
2326 IfcUnit::Out UnitComponent;
2327 };
2328
2329 // C++ wrapper for IfcDistributionElement
2330 struct IfcDistributionElement : IfcElement, ObjectHelper<IfcDistributionElement,0> { IfcDistributionElement() : Object("IfcDistributionElement") {}
2331
2332 };
2333
2334 // C++ wrapper for IfcDistributionControlElement
2335 struct IfcDistributionControlElement : IfcDistributionElement, ObjectHelper<IfcDistributionControlElement,1> { IfcDistributionControlElement() : Object("IfcDistributionControlElement") {}
2336 Maybe< IfcIdentifier::Out > ControlElementId;
2337 };
2338
2339 // C++ wrapper for IfcTransformerType
2340 struct IfcTransformerType : IfcEnergyConversionDeviceType, ObjectHelper<IfcTransformerType,1> { IfcTransformerType() : Object("IfcTransformerType") {}
2341 IfcTransformerTypeEnum::Out PredefinedType;
2342 };
2343
2344 // C++ wrapper for IfcLaborResource
2345 struct IfcLaborResource : IfcConstructionResource, ObjectHelper<IfcLaborResource,1> { IfcLaborResource() : Object("IfcLaborResource") {}
2346 Maybe< IfcText::Out > SkillSet;
2347 };
2348
2349 // C++ wrapper for IfcDerivedProfileDef
2350 struct IfcDerivedProfileDef : IfcProfileDef, ObjectHelper<IfcDerivedProfileDef,3> { IfcDerivedProfileDef() : Object("IfcDerivedProfileDef") {}
2351 Lazy< IfcProfileDef > ParentProfile;
2352 Lazy< IfcCartesianTransformationOperator2D > Operator;
2353 Maybe< IfcLabel::Out > Label;
2468 // C++ wrapper for IfcGroup
2469 struct IfcGroup : IfcObject, ObjectHelper<IfcGroup,0> { IfcGroup() : Object("IfcGroup") {}
2470
2471 };
2472
2473 // C++ wrapper for IfcAsset
2474 struct IfcAsset : IfcGroup, ObjectHelper<IfcAsset,9> { IfcAsset() : Object("IfcAsset") {}
2475 IfcIdentifier::Out AssetID;
2476 Lazy< NotImplemented > OriginalValue;
2477 Lazy< NotImplemented > CurrentValue;
2478 Lazy< NotImplemented > TotalReplacementCost;
2479 IfcActorSelect::Out Owner;
2480 IfcActorSelect::Out User;
2481 Lazy< NotImplemented > ResponsiblePerson;
2482 Lazy< NotImplemented > IncorporationDate;
2483 Lazy< NotImplemented > DepreciatedValue;
2484 };
2485
2486 // C++ wrapper for IfcMaterialDefinitionRepresentation
2487 struct IfcMaterialDefinitionRepresentation : IfcProductRepresentation, ObjectHelper<IfcMaterialDefinitionRepresentation,1> { IfcMaterialDefinitionRepresentation() : Object("IfcMaterialDefinitionRepresentation") {}
2488 Lazy< NotImplemented > RepresentedMaterial;
2489 };
2490
2491 // C++ wrapper for IfcRailingType
2492 struct IfcRailingType : IfcBuildingElementType, ObjectHelper<IfcRailingType,1> { IfcRailingType() : Object("IfcRailingType") {}
2493 IfcRailingTypeEnum::Out PredefinedType;
2494 };
2495
2496 // C++ wrapper for IfcWall
2497 struct IfcWall : IfcBuildingElement, ObjectHelper<IfcWall,0> { IfcWall() : Object("IfcWall") {}
2498
2499 };
2500
2501 // C++ wrapper for IfcStructuralPointConnection
2502 struct IfcStructuralPointConnection : IfcStructuralConnection, ObjectHelper<IfcStructuralPointConnection,0> { IfcStructuralPointConnection() : Object("IfcStructuralPointConnection") {}
2503
2504 };
2505
2506 // C++ wrapper for IfcPropertyListValue
2507 struct IfcPropertyListValue : IfcSimpleProperty, ObjectHelper<IfcPropertyListValue,2> { IfcPropertyListValue() : Object("IfcPropertyListValue") {}
2508 ListOf< IfcValue, 1, 0 >::Out ListValues;
2509 Maybe< IfcUnit::Out > Unit;
23542510 };
23552511
23562512 // C++ wrapper for IfcFurnitureStandard
23582514
23592515 };
23602516
2361 // C++ wrapper for IfcStairFlightType
2362 struct IfcStairFlightType : IfcBuildingElementType, ObjectHelper<IfcStairFlightType,1> { IfcStairFlightType() : Object("IfcStairFlightType") {}
2363 IfcStairFlightTypeEnum::Out PredefinedType;
2517 // C++ wrapper for IfcElectricGeneratorType
2518 struct IfcElectricGeneratorType : IfcEnergyConversionDeviceType, ObjectHelper<IfcElectricGeneratorType,1> { IfcElectricGeneratorType() : Object("IfcElectricGeneratorType") {}
2519 IfcElectricGeneratorTypeEnum::Out PredefinedType;
2520 };
2521
2522 // C++ wrapper for IfcDoor
2523 struct IfcDoor : IfcBuildingElement, ObjectHelper<IfcDoor,2> { IfcDoor() : Object("IfcDoor") {}
2524 Maybe< IfcPositiveLengthMeasure::Out > OverallHeight;
2525 Maybe< IfcPositiveLengthMeasure::Out > OverallWidth;
2526 };
2527
2528 // C++ wrapper for IfcStyledItem
2529 struct IfcStyledItem : IfcRepresentationItem, ObjectHelper<IfcStyledItem,3> { IfcStyledItem() : Object("IfcStyledItem") {}
2530 Maybe< Lazy< IfcRepresentationItem > > Item;
2531 ListOf< Lazy< IfcPresentationStyleAssignment >, 1, 0 > Styles;
2532 Maybe< IfcLabel::Out > Name;
2533 };
2534
2535 // C++ wrapper for IfcAnnotationOccurrence
2536 struct IfcAnnotationOccurrence : IfcStyledItem, ObjectHelper<IfcAnnotationOccurrence,0> { IfcAnnotationOccurrence() : Object("IfcAnnotationOccurrence") {}
2537
2538 };
2539
2540 // C++ wrapper for IfcAnnotationSymbolOccurrence
2541 struct IfcAnnotationSymbolOccurrence : IfcAnnotationOccurrence, ObjectHelper<IfcAnnotationSymbolOccurrence,0> { IfcAnnotationSymbolOccurrence() : Object("IfcAnnotationSymbolOccurrence") {}
2542
2543 };
2544
2545 // C++ wrapper for IfcArbitraryClosedProfileDef
2546 struct IfcArbitraryClosedProfileDef : IfcProfileDef, ObjectHelper<IfcArbitraryClosedProfileDef,1> { IfcArbitraryClosedProfileDef() : Object("IfcArbitraryClosedProfileDef") {}
2547 Lazy< IfcCurve > OuterCurve;
2548 };
2549
2550 // C++ wrapper for IfcArbitraryProfileDefWithVoids
2551 struct IfcArbitraryProfileDefWithVoids : IfcArbitraryClosedProfileDef, ObjectHelper<IfcArbitraryProfileDefWithVoids,1> { IfcArbitraryProfileDefWithVoids() : Object("IfcArbitraryProfileDefWithVoids") {}
2552 ListOf< Lazy< IfcCurve >, 1, 0 > InnerCurves;
2553 };
2554
2555 // C++ wrapper for IfcLine
2556 struct IfcLine : IfcCurve, ObjectHelper<IfcLine,2> { IfcLine() : Object("IfcLine") {}
2557 Lazy< IfcCartesianPoint > Pnt;
2558 Lazy< IfcVector > Dir;
2559 };
2560
2561 // C++ wrapper for IfcFlowSegmentType
2562 struct IfcFlowSegmentType : IfcDistributionFlowElementType, ObjectHelper<IfcFlowSegmentType,0> { IfcFlowSegmentType() : Object("IfcFlowSegmentType") {}
2563
2564 };
2565
2566 // C++ wrapper for IfcAirTerminalBoxType
2567 struct IfcAirTerminalBoxType : IfcFlowControllerType, ObjectHelper<IfcAirTerminalBoxType,1> { IfcAirTerminalBoxType() : Object("IfcAirTerminalBoxType") {}
2568 IfcAirTerminalBoxTypeEnum::Out PredefinedType;
2569 };
2570
2571 // C++ wrapper for IfcPropertySingleValue
2572 struct IfcPropertySingleValue : IfcSimpleProperty, ObjectHelper<IfcPropertySingleValue,2> { IfcPropertySingleValue() : Object("IfcPropertySingleValue") {}
2573 Maybe< IfcValue::Out > NominalValue;
2574 Maybe< IfcUnit::Out > Unit;
2575 };
2576
2577 // C++ wrapper for IfcAlarmType
2578 struct IfcAlarmType : IfcDistributionControlElementType, ObjectHelper<IfcAlarmType,1> { IfcAlarmType() : Object("IfcAlarmType") {}
2579 IfcAlarmTypeEnum::Out PredefinedType;
2580 };
2581
2582 // C++ wrapper for IfcEllipseProfileDef
2583 struct IfcEllipseProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcEllipseProfileDef,2> { IfcEllipseProfileDef() : Object("IfcEllipseProfileDef") {}
2584 IfcPositiveLengthMeasure::Out SemiAxis1;
2585 IfcPositiveLengthMeasure::Out SemiAxis2;
2586 };
2587
2588 // C++ wrapper for IfcStair
2589 struct IfcStair : IfcBuildingElement, ObjectHelper<IfcStair,1> { IfcStair() : Object("IfcStair") {}
2590 IfcStairTypeEnum::Out ShapeType;
2591 };
2592
2593 // C++ wrapper for IfcSurfaceStyleShading
2594 struct IfcSurfaceStyleShading : ObjectHelper<IfcSurfaceStyleShading,1> { IfcSurfaceStyleShading() : Object("IfcSurfaceStyleShading") {}
2595 Lazy< IfcColourRgb > SurfaceColour;
2596 };
2597
2598 // C++ wrapper for IfcPumpType
2599 struct IfcPumpType : IfcFlowMovingDeviceType, ObjectHelper<IfcPumpType,1> { IfcPumpType() : Object("IfcPumpType") {}
2600 IfcPumpTypeEnum::Out PredefinedType;
2601 };
2602
2603 // C++ wrapper for IfcDefinedSymbol
2604 struct IfcDefinedSymbol : IfcGeometricRepresentationItem, ObjectHelper<IfcDefinedSymbol,2> { IfcDefinedSymbol() : Object("IfcDefinedSymbol") {}
2605 IfcDefinedSymbolSelect::Out Definition;
2606 Lazy< IfcCartesianTransformationOperator2D > Target;
2607 };
2608
2609 // C++ wrapper for IfcElementComponentType
2610 struct IfcElementComponentType : IfcElementType, ObjectHelper<IfcElementComponentType,0> { IfcElementComponentType() : Object("IfcElementComponentType") {}
2611
2612 };
2613
2614 // C++ wrapper for IfcFastenerType
2615 struct IfcFastenerType : IfcElementComponentType, ObjectHelper<IfcFastenerType,0> { IfcFastenerType() : Object("IfcFastenerType") {}
2616
2617 };
2618
2619 // C++ wrapper for IfcMechanicalFastenerType
2620 struct IfcMechanicalFastenerType : IfcFastenerType, ObjectHelper<IfcMechanicalFastenerType,0> { IfcMechanicalFastenerType() : Object("IfcMechanicalFastenerType") {}
2621
2622 };
2623
2624 // C++ wrapper for IfcFlowFitting
2625 struct IfcFlowFitting : IfcDistributionFlowElement, ObjectHelper<IfcFlowFitting,0> { IfcFlowFitting() : Object("IfcFlowFitting") {}
2626
2627 };
2628
2629 // C++ wrapper for IfcLightSourceDirectional
2630 struct IfcLightSourceDirectional : IfcLightSource, ObjectHelper<IfcLightSourceDirectional,1> { IfcLightSourceDirectional() : Object("IfcLightSourceDirectional") {}
2631 Lazy< IfcDirection > Orientation;
2632 };
2633
2634 // C++ wrapper for IfcSurfaceStyle
2635 struct IfcSurfaceStyle : IfcPresentationStyle, ObjectHelper<IfcSurfaceStyle,2> { IfcSurfaceStyle() : Object("IfcSurfaceStyle") {}
2636 IfcSurfaceSide::Out Side;
2637 ListOf< IfcSurfaceStyleElementSelect, 1, 5 >::Out Styles;
2638 };
2639
2640 // C++ wrapper for IfcAnnotationSurface
2641 struct IfcAnnotationSurface : IfcGeometricRepresentationItem, ObjectHelper<IfcAnnotationSurface,2> { IfcAnnotationSurface() : Object("IfcAnnotationSurface") {}
2642 Lazy< IfcGeometricRepresentationItem > Item;
2643 Maybe< Lazy< NotImplemented > > TextureCoordinates;
2644 };
2645
2646 // C++ wrapper for IfcFlowController
2647 struct IfcFlowController : IfcDistributionFlowElement, ObjectHelper<IfcFlowController,0> { IfcFlowController() : Object("IfcFlowController") {}
2648
2649 };
2650
2651 // C++ wrapper for IfcBuildingStorey
2652 struct IfcBuildingStorey : IfcSpatialStructureElement, ObjectHelper<IfcBuildingStorey,1> { IfcBuildingStorey() : Object("IfcBuildingStorey") {}
2653 Maybe< IfcLengthMeasure::Out > Elevation;
23642654 };
23652655
23662656 // C++ wrapper for IfcWorkControl
23772667 Maybe< IfcLabel::Out > UserDefinedControlType;
23782668 };
23792669
2380 // C++ wrapper for IfcWorkPlan
2381 struct IfcWorkPlan : IfcWorkControl, ObjectHelper<IfcWorkPlan,0> { IfcWorkPlan() : Object("IfcWorkPlan") {}
2382
2383 };
2384
2385 // C++ wrapper for IfcCondition
2386 struct IfcCondition : IfcGroup, ObjectHelper<IfcCondition,0> { IfcCondition() : Object("IfcCondition") {}
2387
2388 };
2389
2390 // C++ wrapper for IfcRelVoidsElement
2391 struct IfcRelVoidsElement : IfcRelConnects, ObjectHelper<IfcRelVoidsElement,2> { IfcRelVoidsElement() : Object("IfcRelVoidsElement") {}
2392 Lazy< IfcElement > RelatingBuildingElement;
2393 Lazy< IfcFeatureElementSubtraction > RelatedOpeningElement;
2394 };
2395
2396 // C++ wrapper for IfcWindow
2397 struct IfcWindow : IfcBuildingElement, ObjectHelper<IfcWindow,2> { IfcWindow() : Object("IfcWindow") {}
2398 Maybe< IfcPositiveLengthMeasure::Out > OverallHeight;
2399 Maybe< IfcPositiveLengthMeasure::Out > OverallWidth;
2400 };
2401
2402 // C++ wrapper for IfcProtectiveDeviceType
2403 struct IfcProtectiveDeviceType : IfcFlowControllerType, ObjectHelper<IfcProtectiveDeviceType,1> { IfcProtectiveDeviceType() : Object("IfcProtectiveDeviceType") {}
2404 IfcProtectiveDeviceTypeEnum::Out PredefinedType;
2405 };
2406
2407 // C++ wrapper for IfcJunctionBoxType
2408 struct IfcJunctionBoxType : IfcFlowFittingType, ObjectHelper<IfcJunctionBoxType,1> { IfcJunctionBoxType() : Object("IfcJunctionBoxType") {}
2409 IfcJunctionBoxTypeEnum::Out PredefinedType;
2410 };
2411
2412 // C++ wrapper for IfcStructuralAnalysisModel
2413 struct IfcStructuralAnalysisModel : IfcSystem, ObjectHelper<IfcStructuralAnalysisModel,4> { IfcStructuralAnalysisModel() : Object("IfcStructuralAnalysisModel") {}
2414 IfcAnalysisModelTypeEnum::Out PredefinedType;
2415 Maybe< Lazy< IfcAxis2Placement3D > > OrientationOf2DPlane;
2416 Maybe< ListOf< Lazy< IfcStructuralLoadGroup >, 1, 0 > > LoadedBy;
2417 Maybe< ListOf< Lazy< IfcStructuralResultGroup >, 1, 0 > > HasResults;
2418 };
2419
2420 // C++ wrapper for IfcAxis2Placement2D
2421 struct IfcAxis2Placement2D : IfcPlacement, ObjectHelper<IfcAxis2Placement2D,1> { IfcAxis2Placement2D() : Object("IfcAxis2Placement2D") {}
2422 Maybe< Lazy< IfcDirection > > RefDirection;
2423 };
2424
2425 // C++ wrapper for IfcSpaceType
2426 struct IfcSpaceType : IfcSpatialStructureElementType, ObjectHelper<IfcSpaceType,1> { IfcSpaceType() : Object("IfcSpaceType") {}
2427 IfcSpaceTypeEnum::Out PredefinedType;
2428 };
2429
2430 // C++ wrapper for IfcEllipseProfileDef
2431 struct IfcEllipseProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcEllipseProfileDef,2> { IfcEllipseProfileDef() : Object("IfcEllipseProfileDef") {}
2432 IfcPositiveLengthMeasure::Out SemiAxis1;
2433 IfcPositiveLengthMeasure::Out SemiAxis2;
2434 };
2435
2436 // C++ wrapper for IfcDistributionFlowElement
2437 struct IfcDistributionFlowElement : IfcDistributionElement, ObjectHelper<IfcDistributionFlowElement,0> { IfcDistributionFlowElement() : Object("IfcDistributionFlowElement") {}
2438
2439 };
2440
2441 // C++ wrapper for IfcFlowMovingDevice
2442 struct IfcFlowMovingDevice : IfcDistributionFlowElement, ObjectHelper<IfcFlowMovingDevice,0> { IfcFlowMovingDevice() : Object("IfcFlowMovingDevice") {}
2443
2444 };
2445
2446 // C++ wrapper for IfcSurfaceStyleWithTextures
2447 struct IfcSurfaceStyleWithTextures : ObjectHelper<IfcSurfaceStyleWithTextures,1> { IfcSurfaceStyleWithTextures() : Object("IfcSurfaceStyleWithTextures") {}
2448 ListOf< Lazy< NotImplemented >, 1, 0 > Textures;
2449 };
2450
2451 // C++ wrapper for IfcGeometricSet
2452 struct IfcGeometricSet : IfcGeometricRepresentationItem, ObjectHelper<IfcGeometricSet,1> { IfcGeometricSet() : Object("IfcGeometricSet") {}
2453 ListOf< IfcGeometricSetSelect, 1, 0 >::Out Elements;
2454 };
2455
2456 // C++ wrapper for IfcProjectOrder
2457 struct IfcProjectOrder : IfcControl, ObjectHelper<IfcProjectOrder,3> { IfcProjectOrder() : Object("IfcProjectOrder") {}
2670 // C++ wrapper for IfcWorkSchedule
2671 struct IfcWorkSchedule : IfcWorkControl, ObjectHelper<IfcWorkSchedule,0> { IfcWorkSchedule() : Object("IfcWorkSchedule") {}
2672
2673 };
2674
2675 // C++ wrapper for IfcDuctSegmentType
2676 struct IfcDuctSegmentType : IfcFlowSegmentType, ObjectHelper<IfcDuctSegmentType,1> { IfcDuctSegmentType() : Object("IfcDuctSegmentType") {}
2677 IfcDuctSegmentTypeEnum::Out PredefinedType;
2678 };
2679
2680 // C++ wrapper for IfcFace
2681 struct IfcFace : IfcTopologicalRepresentationItem, ObjectHelper<IfcFace,1> { IfcFace() : Object("IfcFace") {}
2682 ListOf< Lazy< IfcFaceBound >, 1, 0 > Bounds;
2683 };
2684
2685 // C++ wrapper for IfcStructuralSurfaceMember
2686 struct IfcStructuralSurfaceMember : IfcStructuralMember, ObjectHelper<IfcStructuralSurfaceMember,2> { IfcStructuralSurfaceMember() : Object("IfcStructuralSurfaceMember") {}
2687 IfcStructuralSurfaceTypeEnum::Out PredefinedType;
2688 Maybe< IfcPositiveLengthMeasure::Out > Thickness;
2689 };
2690
2691 // C++ wrapper for IfcStructuralSurfaceMemberVarying
2692 struct IfcStructuralSurfaceMemberVarying : IfcStructuralSurfaceMember, ObjectHelper<IfcStructuralSurfaceMemberVarying,2> { IfcStructuralSurfaceMemberVarying() : Object("IfcStructuralSurfaceMemberVarying") {}
2693 ListOf< IfcPositiveLengthMeasure, 2, 0 >::Out SubsequentThickness;
2694 Lazy< NotImplemented > VaryingThicknessLocation;
2695 };
2696
2697 // C++ wrapper for IfcFaceSurface
2698 struct IfcFaceSurface : IfcFace, ObjectHelper<IfcFaceSurface,2> { IfcFaceSurface() : Object("IfcFaceSurface") {}
2699 Lazy< IfcSurface > FaceSurface;
2700 BOOLEAN::Out SameSense;
2701 };
2702
2703 // C++ wrapper for IfcCostSchedule
2704 struct IfcCostSchedule : IfcControl, ObjectHelper<IfcCostSchedule,8> { IfcCostSchedule() : Object("IfcCostSchedule") {}
2705 Maybe< IfcActorSelect::Out > SubmittedBy;
2706 Maybe< IfcActorSelect::Out > PreparedBy;
2707 Maybe< IfcDateTimeSelect::Out > SubmittedOn;
2708 Maybe< IfcLabel::Out > Status;
2709 Maybe< ListOf< IfcActorSelect, 1, 0 >::Out > TargetUsers;
2710 Maybe< IfcDateTimeSelect::Out > UpdateDate;
24582711 IfcIdentifier::Out ID;
2459 IfcProjectOrderTypeEnum::Out PredefinedType;
2460 Maybe< IfcLabel::Out > Status;
2712 IfcCostScheduleTypeEnum::Out PredefinedType;
2713 };
2714
2715 // C++ wrapper for IfcPlanarExtent
2716 struct IfcPlanarExtent : IfcGeometricRepresentationItem, ObjectHelper<IfcPlanarExtent,2> { IfcPlanarExtent() : Object("IfcPlanarExtent") {}
2717 IfcLengthMeasure::Out SizeInX;
2718 IfcLengthMeasure::Out SizeInY;
2719 };
2720
2721 // C++ wrapper for IfcPlanarBox
2722 struct IfcPlanarBox : IfcPlanarExtent, ObjectHelper<IfcPlanarBox,1> { IfcPlanarBox() : Object("IfcPlanarBox") {}
2723 IfcAxis2Placement::Out Placement;
2724 };
2725
2726 // C++ wrapper for IfcColourSpecification
2727 struct IfcColourSpecification : ObjectHelper<IfcColourSpecification,1> { IfcColourSpecification() : Object("IfcColourSpecification") {}
2728 Maybe< IfcLabel::Out > Name;
2729 };
2730
2731 // C++ wrapper for IfcVector
2732 struct IfcVector : IfcGeometricRepresentationItem, ObjectHelper<IfcVector,2> { IfcVector() : Object("IfcVector") {}
2733 Lazy< IfcDirection > Orientation;
2734 IfcLengthMeasure::Out Magnitude;
2735 };
2736
2737 // C++ wrapper for IfcBeam
2738 struct IfcBeam : IfcBuildingElement, ObjectHelper<IfcBeam,0> { IfcBeam() : Object("IfcBeam") {}
2739
2740 };
2741
2742 // C++ wrapper for IfcColourRgb
2743 struct IfcColourRgb : IfcColourSpecification, ObjectHelper<IfcColourRgb,3> { IfcColourRgb() : Object("IfcColourRgb") {}
2744 IfcNormalisedRatioMeasure::Out Red;
2745 IfcNormalisedRatioMeasure::Out Green;
2746 IfcNormalisedRatioMeasure::Out Blue;
2747 };
2748
2749 // C++ wrapper for IfcStructuralPlanarAction
2750 struct IfcStructuralPlanarAction : IfcStructuralAction, ObjectHelper<IfcStructuralPlanarAction,1> { IfcStructuralPlanarAction() : Object("IfcStructuralPlanarAction") {}
2751 IfcProjectedOrTrueLengthEnum::Out ProjectedOrTrue;
2752 };
2753
2754 // C++ wrapper for IfcStructuralPlanarActionVarying
2755 struct IfcStructuralPlanarActionVarying : IfcStructuralPlanarAction, ObjectHelper<IfcStructuralPlanarActionVarying,2> { IfcStructuralPlanarActionVarying() : Object("IfcStructuralPlanarActionVarying") {}
2756 Lazy< NotImplemented > VaryingAppliedLoadLocation;
2757 ListOf< Lazy< NotImplemented >, 2, 0 > SubsequentAppliedLoads;
2758 };
2759
2760 // C++ wrapper for IfcSite
2761 struct IfcSite : IfcSpatialStructureElement, ObjectHelper<IfcSite,5> { IfcSite() : Object("IfcSite") {}
2762 Maybe< IfcCompoundPlaneAngleMeasure::Out > RefLatitude;
2763 Maybe< IfcCompoundPlaneAngleMeasure::Out > RefLongitude;
2764 Maybe< IfcLengthMeasure::Out > RefElevation;
2765 Maybe< IfcLabel::Out > LandTitleNumber;
2766 Maybe< Lazy< NotImplemented > > SiteAddress;
2767 };
2768
2769 // C++ wrapper for IfcDiscreteAccessoryType
2770 struct IfcDiscreteAccessoryType : IfcElementComponentType, ObjectHelper<IfcDiscreteAccessoryType,0> { IfcDiscreteAccessoryType() : Object("IfcDiscreteAccessoryType") {}
2771
2772 };
2773
2774 // C++ wrapper for IfcVibrationIsolatorType
2775 struct IfcVibrationIsolatorType : IfcDiscreteAccessoryType, ObjectHelper<IfcVibrationIsolatorType,1> { IfcVibrationIsolatorType() : Object("IfcVibrationIsolatorType") {}
2776 IfcVibrationIsolatorTypeEnum::Out PredefinedType;
2777 };
2778
2779 // C++ wrapper for IfcEvaporativeCoolerType
2780 struct IfcEvaporativeCoolerType : IfcEnergyConversionDeviceType, ObjectHelper<IfcEvaporativeCoolerType,1> { IfcEvaporativeCoolerType() : Object("IfcEvaporativeCoolerType") {}
2781 IfcEvaporativeCoolerTypeEnum::Out PredefinedType;
2782 };
2783
2784 // C++ wrapper for IfcDistributionChamberElementType
2785 struct IfcDistributionChamberElementType : IfcDistributionFlowElementType, ObjectHelper<IfcDistributionChamberElementType,1> { IfcDistributionChamberElementType() : Object("IfcDistributionChamberElementType") {}
2786 IfcDistributionChamberElementTypeEnum::Out PredefinedType;
2787 };
2788
2789 // C++ wrapper for IfcFeatureElementAddition
2790 struct IfcFeatureElementAddition : IfcFeatureElement, ObjectHelper<IfcFeatureElementAddition,0> { IfcFeatureElementAddition() : Object("IfcFeatureElementAddition") {}
2791
2792 };
2793
2794 // C++ wrapper for IfcStructuredDimensionCallout
2795 struct IfcStructuredDimensionCallout : IfcDraughtingCallout, ObjectHelper<IfcStructuredDimensionCallout,0> { IfcStructuredDimensionCallout() : Object("IfcStructuredDimensionCallout") {}
2796
2797 };
2798
2799 // C++ wrapper for IfcCoolingTowerType
2800 struct IfcCoolingTowerType : IfcEnergyConversionDeviceType, ObjectHelper<IfcCoolingTowerType,1> { IfcCoolingTowerType() : Object("IfcCoolingTowerType") {}
2801 IfcCoolingTowerTypeEnum::Out PredefinedType;
2802 };
2803
2804 // C++ wrapper for IfcCenterLineProfileDef
2805 struct IfcCenterLineProfileDef : IfcArbitraryOpenProfileDef, ObjectHelper<IfcCenterLineProfileDef,1> { IfcCenterLineProfileDef() : Object("IfcCenterLineProfileDef") {}
2806 IfcPositiveLengthMeasure::Out Thickness;
2807 };
2808
2809 // C++ wrapper for IfcWindowStyle
2810 struct IfcWindowStyle : IfcTypeProduct, ObjectHelper<IfcWindowStyle,4> { IfcWindowStyle() : Object("IfcWindowStyle") {}
2811 IfcWindowStyleConstructionEnum::Out ConstructionType;
2812 IfcWindowStyleOperationEnum::Out OperationType;
2813 BOOLEAN::Out ParameterTakesPrecedence;
2814 BOOLEAN::Out Sizeable;
2815 };
2816
2817 // C++ wrapper for IfcLightSourceGoniometric
2818 struct IfcLightSourceGoniometric : IfcLightSource, ObjectHelper<IfcLightSourceGoniometric,6> { IfcLightSourceGoniometric() : Object("IfcLightSourceGoniometric") {}
2819 Lazy< IfcAxis2Placement3D > Position;
2820 Maybe< Lazy< IfcColourRgb > > ColourAppearance;
2821 IfcThermodynamicTemperatureMeasure::Out ColourTemperature;
2822 IfcLuminousFluxMeasure::Out LuminousFlux;
2823 IfcLightEmissionSourceEnum::Out LightEmissionSource;
2824 IfcLightDistributionDataSourceSelect::Out LightDistributionDataSource;
2825 };
2826
2827 // C++ wrapper for IfcTransformerType
2828 struct IfcTransformerType : IfcEnergyConversionDeviceType, ObjectHelper<IfcTransformerType,1> { IfcTransformerType() : Object("IfcTransformerType") {}
2829 IfcTransformerTypeEnum::Out PredefinedType;
2830 };
2831
2832 // C++ wrapper for IfcMemberType
2833 struct IfcMemberType : IfcBuildingElementType, ObjectHelper<IfcMemberType,1> { IfcMemberType() : Object("IfcMemberType") {}
2834 IfcMemberTypeEnum::Out PredefinedType;
2835 };
2836
2837 // C++ wrapper for IfcSurfaceOfLinearExtrusion
2838 struct IfcSurfaceOfLinearExtrusion : IfcSweptSurface, ObjectHelper<IfcSurfaceOfLinearExtrusion,2> { IfcSurfaceOfLinearExtrusion() : Object("IfcSurfaceOfLinearExtrusion") {}
2839 Lazy< IfcDirection > ExtrudedDirection;
2840 IfcLengthMeasure::Out Depth;
2841 };
2842
2843 // C++ wrapper for IfcMotorConnectionType
2844 struct IfcMotorConnectionType : IfcEnergyConversionDeviceType, ObjectHelper<IfcMotorConnectionType,1> { IfcMotorConnectionType() : Object("IfcMotorConnectionType") {}
2845 IfcMotorConnectionTypeEnum::Out PredefinedType;
2846 };
2847
2848 // C++ wrapper for IfcFlowTreatmentDeviceType
2849 struct IfcFlowTreatmentDeviceType : IfcDistributionFlowElementType, ObjectHelper<IfcFlowTreatmentDeviceType,0> { IfcFlowTreatmentDeviceType() : Object("IfcFlowTreatmentDeviceType") {}
2850
2851 };
2852
2853 // C++ wrapper for IfcDuctSilencerType
2854 struct IfcDuctSilencerType : IfcFlowTreatmentDeviceType, ObjectHelper<IfcDuctSilencerType,1> { IfcDuctSilencerType() : Object("IfcDuctSilencerType") {}
2855 IfcDuctSilencerTypeEnum::Out PredefinedType;
2856 };
2857
2858 // C++ wrapper for IfcFurnishingElementType
2859 struct IfcFurnishingElementType : IfcElementType, ObjectHelper<IfcFurnishingElementType,0> { IfcFurnishingElementType() : Object("IfcFurnishingElementType") {}
2860
2861 };
2862
2863 // C++ wrapper for IfcSystemFurnitureElementType
2864 struct IfcSystemFurnitureElementType : IfcFurnishingElementType, ObjectHelper<IfcSystemFurnitureElementType,0> { IfcSystemFurnitureElementType() : Object("IfcSystemFurnitureElementType") {}
2865
2866 };
2867
2868 // C++ wrapper for IfcWasteTerminalType
2869 struct IfcWasteTerminalType : IfcFlowTerminalType, ObjectHelper<IfcWasteTerminalType,1> { IfcWasteTerminalType() : Object("IfcWasteTerminalType") {}
2870 IfcWasteTerminalTypeEnum::Out PredefinedType;
24612871 };
24622872
24632873 // C++ wrapper for IfcBSplineCurve
24742884
24752885 };
24762886
2477 // C++ wrapper for IfcStructuralPointConnection
2478 struct IfcStructuralPointConnection : IfcStructuralConnection, ObjectHelper<IfcStructuralPointConnection,0> { IfcStructuralPointConnection() : Object("IfcStructuralPointConnection") {}
2479
2480 };
2481
2482 // C++ wrapper for IfcFlowController
2483 struct IfcFlowController : IfcDistributionFlowElement, ObjectHelper<IfcFlowController,0> { IfcFlowController() : Object("IfcFlowController") {}
2484
2485 };
2486
2487 // C++ wrapper for IfcElectricDistributionPoint
2488 struct IfcElectricDistributionPoint : IfcFlowController, ObjectHelper<IfcElectricDistributionPoint,2> { IfcElectricDistributionPoint() : Object("IfcElectricDistributionPoint") {}
2489 IfcElectricDistributionPointFunctionEnum::Out DistributionPointFunction;
2490 Maybe< IfcLabel::Out > UserDefinedFunction;
2491 };
2492
2493 // C++ wrapper for IfcSite
2494 struct IfcSite : IfcSpatialStructureElement, ObjectHelper<IfcSite,5> { IfcSite() : Object("IfcSite") {}
2495 Maybe< IfcCompoundPlaneAngleMeasure::Out > RefLatitude;
2496 Maybe< IfcCompoundPlaneAngleMeasure::Out > RefLongitude;
2497 Maybe< IfcLengthMeasure::Out > RefElevation;
2498 Maybe< IfcLabel::Out > LandTitleNumber;
2499 Maybe< Lazy< NotImplemented > > SiteAddress;
2500 };
2501
2502 // C++ wrapper for IfcOffsetCurve3D
2503 struct IfcOffsetCurve3D : IfcCurve, ObjectHelper<IfcOffsetCurve3D,4> { IfcOffsetCurve3D() : Object("IfcOffsetCurve3D") {}
2504 Lazy< IfcCurve > BasisCurve;
2505 IfcLengthMeasure::Out Distance;
2506 LOGICAL::Out SelfIntersect;
2507 Lazy< IfcDirection > RefDirection;
2508 };
2509
2510 // C++ wrapper for IfcVirtualElement
2511 struct IfcVirtualElement : IfcElement, ObjectHelper<IfcVirtualElement,0> { IfcVirtualElement() : Object("IfcVirtualElement") {}
2512
2513 };
2514
2515 // C++ wrapper for IfcConstructionProductResource
2516 struct IfcConstructionProductResource : IfcConstructionResource, ObjectHelper<IfcConstructionProductResource,0> { IfcConstructionProductResource() : Object("IfcConstructionProductResource") {}
2517
2887 // C++ wrapper for IfcActuatorType
2888 struct IfcActuatorType : IfcDistributionControlElementType, ObjectHelper<IfcActuatorType,1> { IfcActuatorType() : Object("IfcActuatorType") {}
2889 IfcActuatorTypeEnum::Out PredefinedType;
2890 };
2891
2892 // C++ wrapper for IfcDistributionControlElement
2893 struct IfcDistributionControlElement : IfcDistributionElement, ObjectHelper<IfcDistributionControlElement,1> { IfcDistributionControlElement() : Object("IfcDistributionControlElement") {}
2894 Maybe< IfcIdentifier::Out > ControlElementId;
2895 };
2896
2897 // C++ wrapper for IfcAnnotation
2898 struct IfcAnnotation : IfcProduct, ObjectHelper<IfcAnnotation,0> { IfcAnnotation() : Object("IfcAnnotation") {}
2899
2900 };
2901
2902 // C++ wrapper for IfcShellBasedSurfaceModel
2903 struct IfcShellBasedSurfaceModel : IfcGeometricRepresentationItem, ObjectHelper<IfcShellBasedSurfaceModel,1> { IfcShellBasedSurfaceModel() : Object("IfcShellBasedSurfaceModel") {}
2904 ListOf< IfcShell, 1, 0 >::Out SbsmBoundary;
2905 };
2906
2907 // C++ wrapper for IfcActionRequest
2908 struct IfcActionRequest : IfcControl, ObjectHelper<IfcActionRequest,1> { IfcActionRequest() : Object("IfcActionRequest") {}
2909 IfcIdentifier::Out RequestID;
2910 };
2911
2912 // C++ wrapper for IfcExtrudedAreaSolid
2913 struct IfcExtrudedAreaSolid : IfcSweptAreaSolid, ObjectHelper<IfcExtrudedAreaSolid,2> { IfcExtrudedAreaSolid() : Object("IfcExtrudedAreaSolid") {}
2914 Lazy< IfcDirection > ExtrudedDirection;
2915 IfcPositiveLengthMeasure::Out Depth;
2916 };
2917
2918 // C++ wrapper for IfcSystem
2919 struct IfcSystem : IfcGroup, ObjectHelper<IfcSystem,0> { IfcSystem() : Object("IfcSystem") {}
2920
2921 };
2922
2923 // C++ wrapper for IfcFillAreaStyleHatching
2924 struct IfcFillAreaStyleHatching : IfcGeometricRepresentationItem, ObjectHelper<IfcFillAreaStyleHatching,5> { IfcFillAreaStyleHatching() : Object("IfcFillAreaStyleHatching") {}
2925 Lazy< NotImplemented > HatchLineAppearance;
2926 IfcHatchLineDistanceSelect::Out StartOfNextHatchLine;
2927 Maybe< Lazy< IfcCartesianPoint > > PointOfReferenceHatchLine;
2928 Maybe< Lazy< IfcCartesianPoint > > PatternStart;
2929 IfcPlaneAngleMeasure::Out HatchLineAngle;
2930 };
2931
2932 // C++ wrapper for IfcRelVoidsElement
2933 struct IfcRelVoidsElement : IfcRelConnects, ObjectHelper<IfcRelVoidsElement,2> { IfcRelVoidsElement() : Object("IfcRelVoidsElement") {}
2934 Lazy< IfcElement > RelatingBuildingElement;
2935 Lazy< IfcFeatureElementSubtraction > RelatedOpeningElement;
25182936 };
25192937
25202938 // C++ wrapper for IfcSurfaceCurveSweptAreaSolid
25252943 Lazy< IfcSurface > ReferenceSurface;
25262944 };
25272945
2528 // C++ wrapper for IfcCartesianTransformationOperator3D
2529 struct IfcCartesianTransformationOperator3D : IfcCartesianTransformationOperator, ObjectHelper<IfcCartesianTransformationOperator3D,1> { IfcCartesianTransformationOperator3D() : Object("IfcCartesianTransformationOperator3D") {}
2530 Maybe< Lazy< IfcDirection > > Axis3;
2531 };
2532
25332946 // C++ wrapper for IfcCartesianTransformationOperator3DnonUniform
25342947 struct IfcCartesianTransformationOperator3DnonUniform : IfcCartesianTransformationOperator3D, ObjectHelper<IfcCartesianTransformationOperator3DnonUniform,2> { IfcCartesianTransformationOperator3DnonUniform() : Object("IfcCartesianTransformationOperator3DnonUniform") {}
25352948 Maybe< REAL::Out > Scale2;
25362949 Maybe< REAL::Out > Scale3;
25372950 };
25382951
2539 // C++ wrapper for IfcCrewResource
2540 struct IfcCrewResource : IfcConstructionResource, ObjectHelper<IfcCrewResource,0> { IfcCrewResource() : Object("IfcCrewResource") {}
2541
2542 };
2543
2544 // C++ wrapper for IfcStructuralSurfaceMember
2545 struct IfcStructuralSurfaceMember : IfcStructuralMember, ObjectHelper<IfcStructuralSurfaceMember,2> { IfcStructuralSurfaceMember() : Object("IfcStructuralSurfaceMember") {}
2546 IfcStructuralSurfaceTypeEnum::Out PredefinedType;
2547 Maybe< IfcPositiveLengthMeasure::Out > Thickness;
2548 };
2549
2550 // C++ wrapper for Ifc2DCompositeCurve
2551 struct Ifc2DCompositeCurve : IfcCompositeCurve, ObjectHelper<Ifc2DCompositeCurve,0> { Ifc2DCompositeCurve() : Object("Ifc2DCompositeCurve") {}
2552
2952 // C++ wrapper for IfcCurtainWallType
2953 struct IfcCurtainWallType : IfcBuildingElementType, ObjectHelper<IfcCurtainWallType,1> { IfcCurtainWallType() : Object("IfcCurtainWallType") {}
2954 IfcCurtainWallTypeEnum::Out PredefinedType;
2955 };
2956
2957 // C++ wrapper for IfcEquipmentStandard
2958 struct IfcEquipmentStandard : IfcControl, ObjectHelper<IfcEquipmentStandard,0> { IfcEquipmentStandard() : Object("IfcEquipmentStandard") {}
2959
2960 };
2961
2962 // C++ wrapper for IfcFlowStorageDeviceType
2963 struct IfcFlowStorageDeviceType : IfcDistributionFlowElementType, ObjectHelper<IfcFlowStorageDeviceType,0> { IfcFlowStorageDeviceType() : Object("IfcFlowStorageDeviceType") {}
2964
2965 };
2966
2967 // C++ wrapper for IfcDiameterDimension
2968 struct IfcDiameterDimension : IfcDimensionCurveDirectedCallout, ObjectHelper<IfcDiameterDimension,0> { IfcDiameterDimension() : Object("IfcDiameterDimension") {}
2969
2970 };
2971
2972 // C++ wrapper for IfcSwitchingDeviceType
2973 struct IfcSwitchingDeviceType : IfcFlowControllerType, ObjectHelper<IfcSwitchingDeviceType,1> { IfcSwitchingDeviceType() : Object("IfcSwitchingDeviceType") {}
2974 IfcSwitchingDeviceTypeEnum::Out PredefinedType;
2975 };
2976
2977 // C++ wrapper for IfcWindow
2978 struct IfcWindow : IfcBuildingElement, ObjectHelper<IfcWindow,2> { IfcWindow() : Object("IfcWindow") {}
2979 Maybe< IfcPositiveLengthMeasure::Out > OverallHeight;
2980 Maybe< IfcPositiveLengthMeasure::Out > OverallWidth;
2981 };
2982
2983 // C++ wrapper for IfcFlowTreatmentDevice
2984 struct IfcFlowTreatmentDevice : IfcDistributionFlowElement, ObjectHelper<IfcFlowTreatmentDevice,0> { IfcFlowTreatmentDevice() : Object("IfcFlowTreatmentDevice") {}
2985
2986 };
2987
2988 // C++ wrapper for IfcChillerType
2989 struct IfcChillerType : IfcEnergyConversionDeviceType, ObjectHelper<IfcChillerType,1> { IfcChillerType() : Object("IfcChillerType") {}
2990 IfcChillerTypeEnum::Out PredefinedType;
2991 };
2992
2993 // C++ wrapper for IfcRectangleHollowProfileDef
2994 struct IfcRectangleHollowProfileDef : IfcRectangleProfileDef, ObjectHelper<IfcRectangleHollowProfileDef,3> { IfcRectangleHollowProfileDef() : Object("IfcRectangleHollowProfileDef") {}
2995 IfcPositiveLengthMeasure::Out WallThickness;
2996 Maybe< IfcPositiveLengthMeasure::Out > InnerFilletRadius;
2997 Maybe< IfcPositiveLengthMeasure::Out > OuterFilletRadius;
2998 };
2999
3000 // C++ wrapper for IfcBoxedHalfSpace
3001 struct IfcBoxedHalfSpace : IfcHalfSpaceSolid, ObjectHelper<IfcBoxedHalfSpace,1> { IfcBoxedHalfSpace() : Object("IfcBoxedHalfSpace") {}
3002 Lazy< IfcBoundingBox > Enclosure;
3003 };
3004
3005 // C++ wrapper for IfcAxis2Placement2D
3006 struct IfcAxis2Placement2D : IfcPlacement, ObjectHelper<IfcAxis2Placement2D,1> { IfcAxis2Placement2D() : Object("IfcAxis2Placement2D") {}
3007 Maybe< Lazy< IfcDirection > > RefDirection;
3008 };
3009
3010 // C++ wrapper for IfcSpaceProgram
3011 struct IfcSpaceProgram : IfcControl, ObjectHelper<IfcSpaceProgram,5> { IfcSpaceProgram() : Object("IfcSpaceProgram") {}
3012 IfcIdentifier::Out SpaceProgramIdentifier;
3013 Maybe< IfcAreaMeasure::Out > MaxRequiredArea;
3014 Maybe< IfcAreaMeasure::Out > MinRequiredArea;
3015 Maybe< Lazy< IfcSpatialStructureElement > > RequestedLocation;
3016 IfcAreaMeasure::Out StandardRequiredArea;
3017 };
3018
3019 // C++ wrapper for IfcPoint
3020 struct IfcPoint : IfcGeometricRepresentationItem, ObjectHelper<IfcPoint,0> { IfcPoint() : Object("IfcPoint") {}
3021
3022 };
3023
3024 // C++ wrapper for IfcCartesianPoint
3025 struct IfcCartesianPoint : IfcPoint, ObjectHelper<IfcCartesianPoint,1> { IfcCartesianPoint() : Object("IfcCartesianPoint") {}
3026 ListOf< IfcLengthMeasure, 1, 3 >::Out Coordinates;
3027 };
3028
3029 // C++ wrapper for IfcBoundedSurface
3030 struct IfcBoundedSurface : IfcSurface, ObjectHelper<IfcBoundedSurface,0> { IfcBoundedSurface() : Object("IfcBoundedSurface") {}
3031
3032 };
3033
3034 // C++ wrapper for IfcLoop
3035 struct IfcLoop : IfcTopologicalRepresentationItem, ObjectHelper<IfcLoop,0> { IfcLoop() : Object("IfcLoop") {}
3036
3037 };
3038
3039 // C++ wrapper for IfcPolyLoop
3040 struct IfcPolyLoop : IfcLoop, ObjectHelper<IfcPolyLoop,1> { IfcPolyLoop() : Object("IfcPolyLoop") {}
3041 ListOf< Lazy< IfcCartesianPoint >, 3, 0 > Polygon;
3042 };
3043
3044 // C++ wrapper for IfcTerminatorSymbol
3045 struct IfcTerminatorSymbol : IfcAnnotationSymbolOccurrence, ObjectHelper<IfcTerminatorSymbol,1> { IfcTerminatorSymbol() : Object("IfcTerminatorSymbol") {}
3046 Lazy< IfcAnnotationCurveOccurrence > AnnotatedCurve;
3047 };
3048
3049 // C++ wrapper for IfcDimensionCurveTerminator
3050 struct IfcDimensionCurveTerminator : IfcTerminatorSymbol, ObjectHelper<IfcDimensionCurveTerminator,1> { IfcDimensionCurveTerminator() : Object("IfcDimensionCurveTerminator") {}
3051 IfcDimensionExtentUsage::Out Role;
3052 };
3053
3054 // C++ wrapper for IfcTrapeziumProfileDef
3055 struct IfcTrapeziumProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcTrapeziumProfileDef,4> { IfcTrapeziumProfileDef() : Object("IfcTrapeziumProfileDef") {}
3056 IfcPositiveLengthMeasure::Out BottomXDim;
3057 IfcPositiveLengthMeasure::Out TopXDim;
3058 IfcPositiveLengthMeasure::Out YDim;
3059 IfcLengthMeasure::Out TopXOffset;
25533060 };
25543061
25553062 // C++ wrapper for IfcRepresentationContext
25663073 Maybe< Lazy< IfcDirection > > TrueNorth;
25673074 };
25683075
2569 // C++ wrapper for IfcFlowTreatmentDevice
2570 struct IfcFlowTreatmentDevice : IfcDistributionFlowElement, ObjectHelper<IfcFlowTreatmentDevice,0> { IfcFlowTreatmentDevice() : Object("IfcFlowTreatmentDevice") {}
2571
2572 };
2573
2574 // C++ wrapper for IfcRightCircularCylinder
2575 struct IfcRightCircularCylinder : IfcCsgPrimitive3D, ObjectHelper<IfcRightCircularCylinder,2> { IfcRightCircularCylinder() : Object("IfcRightCircularCylinder") {}
2576 IfcPositiveLengthMeasure::Out Height;
2577 IfcPositiveLengthMeasure::Out Radius;
2578 };
2579
2580 // C++ wrapper for IfcWasteTerminalType
2581 struct IfcWasteTerminalType : IfcFlowTerminalType, ObjectHelper<IfcWasteTerminalType,1> { IfcWasteTerminalType() : Object("IfcWasteTerminalType") {}
2582 IfcWasteTerminalTypeEnum::Out PredefinedType;
2583 };
2584
2585 // C++ wrapper for IfcBuildingElementComponent
2586 struct IfcBuildingElementComponent : IfcBuildingElement, ObjectHelper<IfcBuildingElementComponent,0> { IfcBuildingElementComponent() : Object("IfcBuildingElementComponent") {}
2587
2588 };
2589
2590 // C++ wrapper for IfcBuildingElementPart
2591 struct IfcBuildingElementPart : IfcBuildingElementComponent, ObjectHelper<IfcBuildingElementPart,0> { IfcBuildingElementPart() : Object("IfcBuildingElementPart") {}
2592
2593 };
2594
2595 // C++ wrapper for IfcWall
2596 struct IfcWall : IfcBuildingElement, ObjectHelper<IfcWall,0> { IfcWall() : Object("IfcWall") {}
2597
2598 };
2599
2600 // C++ wrapper for IfcWallStandardCase
2601 struct IfcWallStandardCase : IfcWall, ObjectHelper<IfcWallStandardCase,0> { IfcWallStandardCase() : Object("IfcWallStandardCase") {}
2602
2603 };
2604
2605 // C++ wrapper for IfcPath
2606 struct IfcPath : IfcTopologicalRepresentationItem, ObjectHelper<IfcPath,1> { IfcPath() : Object("IfcPath") {}
2607 ListOf< Lazy< IfcOrientedEdge >, 1, 0 > EdgeList;
2608 };
2609
2610 // C++ wrapper for IfcDefinedSymbol
2611 struct IfcDefinedSymbol : IfcGeometricRepresentationItem, ObjectHelper<IfcDefinedSymbol,2> { IfcDefinedSymbol() : Object("IfcDefinedSymbol") {}
2612 IfcDefinedSymbolSelect::Out Definition;
2613 Lazy< IfcCartesianTransformationOperator2D > Target;
2614 };
2615
2616 // C++ wrapper for IfcStructuralSurfaceMemberVarying
2617 struct IfcStructuralSurfaceMemberVarying : IfcStructuralSurfaceMember, ObjectHelper<IfcStructuralSurfaceMemberVarying,2> { IfcStructuralSurfaceMemberVarying() : Object("IfcStructuralSurfaceMemberVarying") {}
2618 ListOf< IfcPositiveLengthMeasure, 2, 0 >::Out SubsequentThickness;
2619 Lazy< NotImplemented > VaryingThicknessLocation;
2620 };
2621
2622 // C++ wrapper for IfcPoint
2623 struct IfcPoint : IfcGeometricRepresentationItem, ObjectHelper<IfcPoint,0> { IfcPoint() : Object("IfcPoint") {}
2624
2625 };
2626
2627 // C++ wrapper for IfcSurfaceOfRevolution
2628 struct IfcSurfaceOfRevolution : IfcSweptSurface, ObjectHelper<IfcSurfaceOfRevolution,1> { IfcSurfaceOfRevolution() : Object("IfcSurfaceOfRevolution") {}
2629 Lazy< IfcAxis1Placement > AxisPosition;
2630 };
2631
2632 // C++ wrapper for IfcFlowTerminal
2633 struct IfcFlowTerminal : IfcDistributionFlowElement, ObjectHelper<IfcFlowTerminal,0> { IfcFlowTerminal() : Object("IfcFlowTerminal") {}
2634
3076 // C++ wrapper for IfcCurveBoundedPlane
3077 struct IfcCurveBoundedPlane : IfcBoundedSurface, ObjectHelper<IfcCurveBoundedPlane,3> { IfcCurveBoundedPlane() : Object("IfcCurveBoundedPlane") {}
3078 Lazy< IfcPlane > BasisSurface;
3079 Lazy< IfcCurve > OuterBoundary;
3080 ListOf< Lazy< IfcCurve >, 0, 0 > InnerBoundaries;
3081 };
3082
3083 // C++ wrapper for IfcSIUnit
3084 struct IfcSIUnit : IfcNamedUnit, ObjectHelper<IfcSIUnit,2> { IfcSIUnit() : Object("IfcSIUnit") {}
3085 Maybe< IfcSIPrefix::Out > Prefix;
3086 IfcSIUnitName::Out Name;
3087 };
3088
3089 // C++ wrapper for IfcStructuralReaction
3090 struct IfcStructuralReaction : IfcStructuralActivity, ObjectHelper<IfcStructuralReaction,0> { IfcStructuralReaction() : Object("IfcStructuralReaction") {}
3091
3092 };
3093
3094 // C++ wrapper for IfcStructuralPointReaction
3095 struct IfcStructuralPointReaction : IfcStructuralReaction, ObjectHelper<IfcStructuralPointReaction,0> { IfcStructuralPointReaction() : Object("IfcStructuralPointReaction") {}
3096
3097 };
3098
3099 // C++ wrapper for IfcAxis1Placement
3100 struct IfcAxis1Placement : IfcPlacement, ObjectHelper<IfcAxis1Placement,1> { IfcAxis1Placement() : Object("IfcAxis1Placement") {}
3101 Maybe< Lazy< IfcDirection > > Axis;
3102 };
3103
3104 // C++ wrapper for IfcElectricApplianceType
3105 struct IfcElectricApplianceType : IfcFlowTerminalType, ObjectHelper<IfcElectricApplianceType,1> { IfcElectricApplianceType() : Object("IfcElectricApplianceType") {}
3106 IfcElectricApplianceTypeEnum::Out PredefinedType;
3107 };
3108
3109 // C++ wrapper for IfcSensorType
3110 struct IfcSensorType : IfcDistributionControlElementType, ObjectHelper<IfcSensorType,1> { IfcSensorType() : Object("IfcSensorType") {}
3111 IfcSensorTypeEnum::Out PredefinedType;
26353112 };
26363113
26373114 // C++ wrapper for IfcFurnishingElement
26393116
26403117 };
26413118
2642 // C++ wrapper for IfcSurfaceStyleShading
2643 struct IfcSurfaceStyleShading : ObjectHelper<IfcSurfaceStyleShading,1> { IfcSurfaceStyleShading() : Object("IfcSurfaceStyleShading") {}
2644 Lazy< IfcColourRgb > SurfaceColour;
2645 };
2646
2647 // C++ wrapper for IfcSurfaceStyleRendering
2648 struct IfcSurfaceStyleRendering : IfcSurfaceStyleShading, ObjectHelper<IfcSurfaceStyleRendering,8> { IfcSurfaceStyleRendering() : Object("IfcSurfaceStyleRendering") {}
2649 Maybe< IfcNormalisedRatioMeasure::Out > Transparency;
2650 Maybe< IfcColourOrFactor::Out > DiffuseColour;
2651 Maybe< IfcColourOrFactor::Out > TransmissionColour;
2652 Maybe< IfcColourOrFactor::Out > DiffuseTransmissionColour;
2653 Maybe< IfcColourOrFactor::Out > ReflectionColour;
2654 Maybe< IfcColourOrFactor::Out > SpecularColour;
2655 Maybe< IfcSpecularHighlightSelect::Out > SpecularHighlight;
2656 IfcReflectanceMethodEnum::Out ReflectanceMethod;
2657 };
2658
2659 // C++ wrapper for IfcCircleHollowProfileDef
2660 struct IfcCircleHollowProfileDef : IfcCircleProfileDef, ObjectHelper<IfcCircleHollowProfileDef,1> { IfcCircleHollowProfileDef() : Object("IfcCircleHollowProfileDef") {}
2661 IfcPositiveLengthMeasure::Out WallThickness;
2662 };
2663
2664 // C++ wrapper for IfcFlowMovingDeviceType
2665 struct IfcFlowMovingDeviceType : IfcDistributionFlowElementType, ObjectHelper<IfcFlowMovingDeviceType,0> { IfcFlowMovingDeviceType() : Object("IfcFlowMovingDeviceType") {}
2666
2667 };
2668
2669 // C++ wrapper for IfcFanType
2670 struct IfcFanType : IfcFlowMovingDeviceType, ObjectHelper<IfcFanType,1> { IfcFanType() : Object("IfcFanType") {}
2671 IfcFanTypeEnum::Out PredefinedType;
2672 };
2673
2674 // C++ wrapper for IfcStructuralPlanarActionVarying
2675 struct IfcStructuralPlanarActionVarying : IfcStructuralPlanarAction, ObjectHelper<IfcStructuralPlanarActionVarying,2> { IfcStructuralPlanarActionVarying() : Object("IfcStructuralPlanarActionVarying") {}
2676 Lazy< NotImplemented > VaryingAppliedLoadLocation;
2677 ListOf< Lazy< NotImplemented >, 2, 0 > SubsequentAppliedLoads;
2678 };
2679
2680 // C++ wrapper for IfcProductRepresentation
2681 struct IfcProductRepresentation : ObjectHelper<IfcProductRepresentation,3> { IfcProductRepresentation() : Object("IfcProductRepresentation") {}
2682 Maybe< IfcLabel::Out > Name;
2683 Maybe< IfcText::Out > Description;
2684 ListOf< Lazy< IfcRepresentation >, 1, 0 > Representations;
2685 };
2686
2687 // C++ wrapper for IfcStackTerminalType
2688 struct IfcStackTerminalType : IfcFlowTerminalType, ObjectHelper<IfcStackTerminalType,1> { IfcStackTerminalType() : Object("IfcStackTerminalType") {}
2689 IfcStackTerminalTypeEnum::Out PredefinedType;
2690 };
2691
2692 // C++ wrapper for IfcReinforcingElement
2693 struct IfcReinforcingElement : IfcBuildingElementComponent, ObjectHelper<IfcReinforcingElement,1> { IfcReinforcingElement() : Object("IfcReinforcingElement") {}
2694 Maybe< IfcLabel::Out > SteelGrade;
2695 };
2696
2697 // C++ wrapper for IfcReinforcingMesh
2698 struct IfcReinforcingMesh : IfcReinforcingElement, ObjectHelper<IfcReinforcingMesh,8> { IfcReinforcingMesh() : Object("IfcReinforcingMesh") {}
2699 Maybe< IfcPositiveLengthMeasure::Out > MeshLength;
2700 Maybe< IfcPositiveLengthMeasure::Out > MeshWidth;
2701 IfcPositiveLengthMeasure::Out LongitudinalBarNominalDiameter;
2702 IfcPositiveLengthMeasure::Out TransverseBarNominalDiameter;
2703 IfcAreaMeasure::Out LongitudinalBarCrossSectionArea;
2704 IfcAreaMeasure::Out TransverseBarCrossSectionArea;
2705 IfcPositiveLengthMeasure::Out LongitudinalBarSpacing;
2706 IfcPositiveLengthMeasure::Out TransverseBarSpacing;
2707 };
2708
2709 // C++ wrapper for IfcOrderAction
2710 struct IfcOrderAction : IfcTask, ObjectHelper<IfcOrderAction,1> { IfcOrderAction() : Object("IfcOrderAction") {}
2711 IfcIdentifier::Out ActionID;
2712 };
2713
2714 // C++ wrapper for IfcLightSource
2715 struct IfcLightSource : IfcGeometricRepresentationItem, ObjectHelper<IfcLightSource,4> { IfcLightSource() : Object("IfcLightSource") {}
2716 Maybe< IfcLabel::Out > Name;
2717 Lazy< IfcColourRgb > LightColour;
2718 Maybe< IfcNormalisedRatioMeasure::Out > AmbientIntensity;
2719 Maybe< IfcNormalisedRatioMeasure::Out > Intensity;
2720 };
2721
2722 // C++ wrapper for IfcLightSourceDirectional
2723 struct IfcLightSourceDirectional : IfcLightSource, ObjectHelper<IfcLightSourceDirectional,1> { IfcLightSourceDirectional() : Object("IfcLightSourceDirectional") {}
2724 Lazy< IfcDirection > Orientation;
2725 };
2726
2727 // C++ wrapper for IfcLoop
2728 struct IfcLoop : IfcTopologicalRepresentationItem, ObjectHelper<IfcLoop,0> { IfcLoop() : Object("IfcLoop") {}
2729
2730 };
2731
2732 // C++ wrapper for IfcVertexLoop
2733 struct IfcVertexLoop : IfcLoop, ObjectHelper<IfcVertexLoop,1> { IfcVertexLoop() : Object("IfcVertexLoop") {}
2734 Lazy< IfcVertex > LoopVertex;
2735 };
2736
2737 // C++ wrapper for IfcChamferEdgeFeature
2738 struct IfcChamferEdgeFeature : IfcEdgeFeature, ObjectHelper<IfcChamferEdgeFeature,2> { IfcChamferEdgeFeature() : Object("IfcChamferEdgeFeature") {}
2739 Maybe< IfcPositiveLengthMeasure::Out > Width;
2740 Maybe< IfcPositiveLengthMeasure::Out > Height;
2741 };
2742
2743 // C++ wrapper for IfcElementComponentType
2744 struct IfcElementComponentType : IfcElementType, ObjectHelper<IfcElementComponentType,0> { IfcElementComponentType() : Object("IfcElementComponentType") {}
2745
2746 };
2747
2748 // C++ wrapper for IfcFastenerType
2749 struct IfcFastenerType : IfcElementComponentType, ObjectHelper<IfcFastenerType,0> { IfcFastenerType() : Object("IfcFastenerType") {}
2750
2751 };
2752
2753 // C++ wrapper for IfcMechanicalFastenerType
2754 struct IfcMechanicalFastenerType : IfcFastenerType, ObjectHelper<IfcMechanicalFastenerType,0> { IfcMechanicalFastenerType() : Object("IfcMechanicalFastenerType") {}
2755
3119 // C++ wrapper for IfcProtectiveDeviceType
3120 struct IfcProtectiveDeviceType : IfcFlowControllerType, ObjectHelper<IfcProtectiveDeviceType,1> { IfcProtectiveDeviceType() : Object("IfcProtectiveDeviceType") {}
3121 IfcProtectiveDeviceTypeEnum::Out PredefinedType;
3122 };
3123
3124 // C++ wrapper for IfcZShapeProfileDef
3125 struct IfcZShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcZShapeProfileDef,6> { IfcZShapeProfileDef() : Object("IfcZShapeProfileDef") {}
3126 IfcPositiveLengthMeasure::Out Depth;
3127 IfcPositiveLengthMeasure::Out FlangeWidth;
3128 IfcPositiveLengthMeasure::Out WebThickness;
3129 IfcPositiveLengthMeasure::Out FlangeThickness;
3130 Maybe< IfcPositiveLengthMeasure::Out > FilletRadius;
3131 Maybe< IfcPositiveLengthMeasure::Out > EdgeRadius;
27563132 };
27573133
27583134 // C++ wrapper for IfcScheduleTimeControl
27773153 Maybe< IfcPositiveRatioMeasure::Out > Completion;
27783154 };
27793155
2780 // C++ wrapper for IfcSurfaceStyle
2781 struct IfcSurfaceStyle : IfcPresentationStyle, ObjectHelper<IfcSurfaceStyle,2> { IfcSurfaceStyle() : Object("IfcSurfaceStyle") {}
2782 IfcSurfaceSide::Out Side;
2783 ListOf< IfcSurfaceStyleElementSelect, 1, 5 >::Out Styles;
2784 };
2785
2786 // C++ wrapper for IfcOpenShell
2787 struct IfcOpenShell : IfcConnectedFaceSet, ObjectHelper<IfcOpenShell,0> { IfcOpenShell() : Object("IfcOpenShell") {}
2788
2789 };
2790
2791 // C++ wrapper for IfcSubContractResource
2792 struct IfcSubContractResource : IfcConstructionResource, ObjectHelper<IfcSubContractResource,2> { IfcSubContractResource() : Object("IfcSubContractResource") {}
2793 Maybe< IfcActorSelect::Out > SubContractor;
2794 Maybe< IfcText::Out > JobDescription;
2795 };
2796
2797 // C++ wrapper for IfcSweptDiskSolid
2798 struct IfcSweptDiskSolid : IfcSolidModel, ObjectHelper<IfcSweptDiskSolid,5> { IfcSweptDiskSolid() : Object("IfcSweptDiskSolid") {}
2799 Lazy< IfcCurve > Directrix;
2800 IfcPositiveLengthMeasure::Out Radius;
2801 Maybe< IfcPositiveLengthMeasure::Out > InnerRadius;
2802 IfcParameterValue::Out StartParam;
2803 IfcParameterValue::Out EndParam;
2804 };
2805
2806 // C++ wrapper for IfcCompositeProfileDef
2807 struct IfcCompositeProfileDef : IfcProfileDef, ObjectHelper<IfcCompositeProfileDef,2> { IfcCompositeProfileDef() : Object("IfcCompositeProfileDef") {}
2808 ListOf< Lazy< IfcProfileDef >, 2, 0 > Profiles;
2809 Maybe< IfcLabel::Out > Label;
2810 };
2811
2812 // C++ wrapper for IfcTankType
2813 struct IfcTankType : IfcFlowStorageDeviceType, ObjectHelper<IfcTankType,1> { IfcTankType() : Object("IfcTankType") {}
2814 IfcTankTypeEnum::Out PredefinedType;
3156 // C++ wrapper for IfcRepresentationMap
3157 struct IfcRepresentationMap : ObjectHelper<IfcRepresentationMap,2> { IfcRepresentationMap() : Object("IfcRepresentationMap") {}
3158 IfcAxis2Placement::Out MappingOrigin;
3159 Lazy< IfcRepresentation > MappedRepresentation;
3160 };
3161
3162 // C++ wrapper for IfcClosedShell
3163 struct IfcClosedShell : IfcConnectedFaceSet, ObjectHelper<IfcClosedShell,0> { IfcClosedShell() : Object("IfcClosedShell") {}
3164
3165 };
3166
3167 // C++ wrapper for IfcBuildingElementPart
3168 struct IfcBuildingElementPart : IfcBuildingElementComponent, ObjectHelper<IfcBuildingElementPart,0> { IfcBuildingElementPart() : Object("IfcBuildingElementPart") {}
3169
3170 };
3171
3172 // C++ wrapper for IfcBlock
3173 struct IfcBlock : IfcCsgPrimitive3D, ObjectHelper<IfcBlock,3> { IfcBlock() : Object("IfcBlock") {}
3174 IfcPositiveLengthMeasure::Out XLength;
3175 IfcPositiveLengthMeasure::Out YLength;
3176 IfcPositiveLengthMeasure::Out ZLength;
3177 };
3178
3179 // C++ wrapper for IfcLightFixtureType
3180 struct IfcLightFixtureType : IfcFlowTerminalType, ObjectHelper<IfcLightFixtureType,1> { IfcLightFixtureType() : Object("IfcLightFixtureType") {}
3181 IfcLightFixtureTypeEnum::Out PredefinedType;
3182 };
3183
3184 // C++ wrapper for IfcOpeningElement
3185 struct IfcOpeningElement : IfcFeatureElementSubtraction, ObjectHelper<IfcOpeningElement,0> { IfcOpeningElement() : Object("IfcOpeningElement") {}
3186
3187 };
3188
3189 // C++ wrapper for IfcLightSourceSpot
3190 struct IfcLightSourceSpot : IfcLightSourcePositional, ObjectHelper<IfcLightSourceSpot,4> { IfcLightSourceSpot() : Object("IfcLightSourceSpot") {}
3191 Lazy< IfcDirection > Orientation;
3192 Maybe< IfcReal::Out > ConcentrationExponent;
3193 IfcPositivePlaneAngleMeasure::Out SpreadAngle;
3194 IfcPositivePlaneAngleMeasure::Out BeamWidthAngle;
3195 };
3196
3197 // C++ wrapper for IfcTendonAnchor
3198 struct IfcTendonAnchor : IfcReinforcingElement, ObjectHelper<IfcTendonAnchor,0> { IfcTendonAnchor() : Object("IfcTendonAnchor") {}
3199
3200 };
3201
3202 // C++ wrapper for IfcElectricFlowStorageDeviceType
3203 struct IfcElectricFlowStorageDeviceType : IfcFlowStorageDeviceType, ObjectHelper<IfcElectricFlowStorageDeviceType,1> { IfcElectricFlowStorageDeviceType() : Object("IfcElectricFlowStorageDeviceType") {}
3204 IfcElectricFlowStorageDeviceTypeEnum::Out PredefinedType;
28153205 };
28163206
28173207 // C++ wrapper for IfcSphere
28193209 IfcPositiveLengthMeasure::Out Radius;
28203210 };
28213211
2822 // C++ wrapper for IfcPolyLoop
2823 struct IfcPolyLoop : IfcLoop, ObjectHelper<IfcPolyLoop,1> { IfcPolyLoop() : Object("IfcPolyLoop") {}
2824 ListOf< Lazy< IfcCartesianPoint >, 3, 0 > Polygon;
2825 };
2826
2827 // C++ wrapper for IfcCableCarrierFittingType
2828 struct IfcCableCarrierFittingType : IfcFlowFittingType, ObjectHelper<IfcCableCarrierFittingType,1> { IfcCableCarrierFittingType() : Object("IfcCableCarrierFittingType") {}
2829 IfcCableCarrierFittingTypeEnum::Out PredefinedType;
2830 };
2831
2832 // C++ wrapper for IfcHumidifierType
2833 struct IfcHumidifierType : IfcEnergyConversionDeviceType, ObjectHelper<IfcHumidifierType,1> { IfcHumidifierType() : Object("IfcHumidifierType") {}
2834 IfcHumidifierTypeEnum::Out PredefinedType;
2835 };
2836
2837 // C++ wrapper for IfcPerformanceHistory
2838 struct IfcPerformanceHistory : IfcControl, ObjectHelper<IfcPerformanceHistory,1> { IfcPerformanceHistory() : Object("IfcPerformanceHistory") {}
2839 IfcLabel::Out LifeCyclePhase;
2840 };
2841
2842 // C++ wrapper for IfcShapeModel
2843 struct IfcShapeModel : IfcRepresentation, ObjectHelper<IfcShapeModel,0> { IfcShapeModel() : Object("IfcShapeModel") {}
2844
2845 };
2846
2847 // C++ wrapper for IfcTopologyRepresentation
2848 struct IfcTopologyRepresentation : IfcShapeModel, ObjectHelper<IfcTopologyRepresentation,0> { IfcTopologyRepresentation() : Object("IfcTopologyRepresentation") {}
2849
2850 };
2851
2852 // C++ wrapper for IfcBuilding
2853 struct IfcBuilding : IfcSpatialStructureElement, ObjectHelper<IfcBuilding,3> { IfcBuilding() : Object("IfcBuilding") {}
2854 Maybe< IfcLengthMeasure::Out > ElevationOfRefHeight;
2855 Maybe< IfcLengthMeasure::Out > ElevationOfTerrain;
2856 Maybe< Lazy< NotImplemented > > BuildingAddress;
2857 };
2858
2859 // C++ wrapper for IfcRoundedRectangleProfileDef
2860 struct IfcRoundedRectangleProfileDef : IfcRectangleProfileDef, ObjectHelper<IfcRoundedRectangleProfileDef,1> { IfcRoundedRectangleProfileDef() : Object("IfcRoundedRectangleProfileDef") {}
2861 IfcPositiveLengthMeasure::Out RoundingRadius;
2862 };
2863
2864 // C++ wrapper for IfcStairFlight
2865 struct IfcStairFlight : IfcBuildingElement, ObjectHelper<IfcStairFlight,4> { IfcStairFlight() : Object("IfcStairFlight") {}
2866 Maybe< INTEGER::Out > NumberOfRiser;
2867 Maybe< INTEGER::Out > NumberOfTreads;
2868 Maybe< IfcPositiveLengthMeasure::Out > RiserHeight;
2869 Maybe< IfcPositiveLengthMeasure::Out > TreadLength;
3212 // C++ wrapper for IfcDamperType
3213 struct IfcDamperType : IfcFlowControllerType, ObjectHelper<IfcDamperType,1> { IfcDamperType() : Object("IfcDamperType") {}
3214 IfcDamperTypeEnum::Out PredefinedType;
3215 };
3216
3217 // C++ wrapper for IfcProjectOrderRecord
3218 struct IfcProjectOrderRecord : IfcControl, ObjectHelper<IfcProjectOrderRecord,2> { IfcProjectOrderRecord() : Object("IfcProjectOrderRecord") {}
3219 ListOf< Lazy< NotImplemented >, 1, 0 > Records;
3220 IfcProjectOrderRecordTypeEnum::Out PredefinedType;
28703221 };
28713222
28723223 // C++ wrapper for IfcDistributionChamberElement
28743225
28753226 };
28763227
2877 // C++ wrapper for IfcShapeRepresentation
2878 struct IfcShapeRepresentation : IfcShapeModel, ObjectHelper<IfcShapeRepresentation,0> { IfcShapeRepresentation() : Object("IfcShapeRepresentation") {}
2879
2880 };
2881
2882 // C++ wrapper for IfcRampFlight
2883 struct IfcRampFlight : IfcBuildingElement, ObjectHelper<IfcRampFlight,0> { IfcRampFlight() : Object("IfcRampFlight") {}
2884
2885 };
2886
2887 // C++ wrapper for IfcBeamType
2888 struct IfcBeamType : IfcBuildingElementType, ObjectHelper<IfcBeamType,1> { IfcBeamType() : Object("IfcBeamType") {}
2889 IfcBeamTypeEnum::Out PredefinedType;
2890 };
2891
2892 // C++ wrapper for IfcRelDecomposes
2893 struct IfcRelDecomposes : IfcRelationship, ObjectHelper<IfcRelDecomposes,2> { IfcRelDecomposes() : Object("IfcRelDecomposes") {}
2894 Lazy< IfcObjectDefinition > RelatingObject;
2895 ListOf< Lazy< IfcObjectDefinition >, 1, 0 > RelatedObjects;
2896 };
2897
2898 // C++ wrapper for IfcRoof
2899 struct IfcRoof : IfcBuildingElement, ObjectHelper<IfcRoof,1> { IfcRoof() : Object("IfcRoof") {}
2900 IfcRoofTypeEnum::Out ShapeType;
2901 };
2902
2903 // C++ wrapper for IfcFooting
2904 struct IfcFooting : IfcBuildingElement, ObjectHelper<IfcFooting,1> { IfcFooting() : Object("IfcFooting") {}
2905 IfcFootingTypeEnum::Out PredefinedType;
2906 };
2907
2908 // C++ wrapper for IfcLightSourceAmbient
2909 struct IfcLightSourceAmbient : IfcLightSource, ObjectHelper<IfcLightSourceAmbient,0> { IfcLightSourceAmbient() : Object("IfcLightSourceAmbient") {}
2910
2911 };
2912
2913 // C++ wrapper for IfcWindowStyle
2914 struct IfcWindowStyle : IfcTypeProduct, ObjectHelper<IfcWindowStyle,4> { IfcWindowStyle() : Object("IfcWindowStyle") {}
2915 IfcWindowStyleConstructionEnum::Out ConstructionType;
2916 IfcWindowStyleOperationEnum::Out OperationType;
2917 BOOLEAN::Out ParameterTakesPrecedence;
2918 BOOLEAN::Out Sizeable;
2919 };
2920
2921 // C++ wrapper for IfcBuildingElementProxyType
2922 struct IfcBuildingElementProxyType : IfcBuildingElementType, ObjectHelper<IfcBuildingElementProxyType,1> { IfcBuildingElementProxyType() : Object("IfcBuildingElementProxyType") {}
2923 IfcBuildingElementProxyTypeEnum::Out PredefinedType;
2924 };
2925
2926 // C++ wrapper for IfcAxis2Placement3D
2927 struct IfcAxis2Placement3D : IfcPlacement, ObjectHelper<IfcAxis2Placement3D,2> { IfcAxis2Placement3D() : Object("IfcAxis2Placement3D") {}
2928 Maybe< Lazy< IfcDirection > > Axis;
2929 Maybe< Lazy< IfcDirection > > RefDirection;
2930 };
2931
2932 // C++ wrapper for IfcEdgeCurve
2933 struct IfcEdgeCurve : IfcEdge, ObjectHelper<IfcEdgeCurve,2> { IfcEdgeCurve() : Object("IfcEdgeCurve") {}
2934 Lazy< IfcCurve > EdgeGeometry;
2935 BOOLEAN::Out SameSense;
2936 };
2937
2938 // C++ wrapper for IfcClosedShell
2939 struct IfcClosedShell : IfcConnectedFaceSet, ObjectHelper<IfcClosedShell,0> { IfcClosedShell() : Object("IfcClosedShell") {}
2940
2941 };
2942
2943 // C++ wrapper for IfcTendonAnchor
2944 struct IfcTendonAnchor : IfcReinforcingElement, ObjectHelper<IfcTendonAnchor,0> { IfcTendonAnchor() : Object("IfcTendonAnchor") {}
2945
2946 };
2947
2948 // C++ wrapper for IfcCondenserType
2949 struct IfcCondenserType : IfcEnergyConversionDeviceType, ObjectHelper<IfcCondenserType,1> { IfcCondenserType() : Object("IfcCondenserType") {}
2950 IfcCondenserTypeEnum::Out PredefinedType;
2951 };
2952
2953 // C++ wrapper for IfcPipeSegmentType
2954 struct IfcPipeSegmentType : IfcFlowSegmentType, ObjectHelper<IfcPipeSegmentType,1> { IfcPipeSegmentType() : Object("IfcPipeSegmentType") {}
2955 IfcPipeSegmentTypeEnum::Out PredefinedType;
2956 };
2957
2958 // C++ wrapper for IfcPointOnSurface
2959 struct IfcPointOnSurface : IfcPoint, ObjectHelper<IfcPointOnSurface,3> { IfcPointOnSurface() : Object("IfcPointOnSurface") {}
3228 // C++ wrapper for IfcMechanicalFastener
3229 struct IfcMechanicalFastener : IfcFastener, ObjectHelper<IfcMechanicalFastener,2> { IfcMechanicalFastener() : Object("IfcMechanicalFastener") {}
3230 Maybe< IfcPositiveLengthMeasure::Out > NominalDiameter;
3231 Maybe< IfcPositiveLengthMeasure::Out > NominalLength;
3232 };
3233
3234 // C++ wrapper for IfcRectangularTrimmedSurface
3235 struct IfcRectangularTrimmedSurface : IfcBoundedSurface, ObjectHelper<IfcRectangularTrimmedSurface,7> { IfcRectangularTrimmedSurface() : Object("IfcRectangularTrimmedSurface") {}
29603236 Lazy< IfcSurface > BasisSurface;
2961 IfcParameterValue::Out PointParameterU;
2962 IfcParameterValue::Out PointParameterV;
2963 };
2964
2965 // C++ wrapper for IfcAsset
2966 struct IfcAsset : IfcGroup, ObjectHelper<IfcAsset,9> { IfcAsset() : Object("IfcAsset") {}
2967 IfcIdentifier::Out AssetID;
2968 Lazy< NotImplemented > OriginalValue;
2969 Lazy< NotImplemented > CurrentValue;
2970 Lazy< NotImplemented > TotalReplacementCost;
2971 IfcActorSelect::Out Owner;
2972 IfcActorSelect::Out User;
2973 Lazy< NotImplemented > ResponsiblePerson;
2974 Lazy< NotImplemented > IncorporationDate;
2975 Lazy< NotImplemented > DepreciatedValue;
2976 };
2977
2978 // C++ wrapper for IfcLightSourcePositional
2979 struct IfcLightSourcePositional : IfcLightSource, ObjectHelper<IfcLightSourcePositional,5> { IfcLightSourcePositional() : Object("IfcLightSourcePositional") {}
2980 Lazy< IfcCartesianPoint > Position;
2981 IfcPositiveLengthMeasure::Out Radius;
2982 IfcReal::Out ConstantAttenuation;
2983 IfcReal::Out DistanceAttenuation;
2984 IfcReal::Out QuadricAttenuation;
2985 };
2986
2987 // C++ wrapper for IfcProjectionCurve
2988 struct IfcProjectionCurve : IfcAnnotationCurveOccurrence, ObjectHelper<IfcProjectionCurve,0> { IfcProjectionCurve() : Object("IfcProjectionCurve") {}
2989
3237 IfcParameterValue::Out U1;
3238 IfcParameterValue::Out V1;
3239 IfcParameterValue::Out U2;
3240 IfcParameterValue::Out V2;
3241 BOOLEAN::Out Usense;
3242 BOOLEAN::Out Vsense;
3243 };
3244
3245 // C++ wrapper for IfcZone
3246 struct IfcZone : IfcGroup, ObjectHelper<IfcZone,0> { IfcZone() : Object("IfcZone") {}
3247
3248 };
3249
3250 // C++ wrapper for IfcFanType
3251 struct IfcFanType : IfcFlowMovingDeviceType, ObjectHelper<IfcFanType,1> { IfcFanType() : Object("IfcFanType") {}
3252 IfcFanTypeEnum::Out PredefinedType;
3253 };
3254
3255 // C++ wrapper for IfcGeometricSet
3256 struct IfcGeometricSet : IfcGeometricRepresentationItem, ObjectHelper<IfcGeometricSet,1> { IfcGeometricSet() : Object("IfcGeometricSet") {}
3257 ListOf< IfcGeometricSetSelect, 1, 0 >::Out Elements;
29903258 };
29913259
29923260 // C++ wrapper for IfcFillAreaStyleTiles
29963264 IfcPositiveRatioMeasure::Out TilingScale;
29973265 };
29983266
2999 // C++ wrapper for IfcRelFillsElement
3000 struct IfcRelFillsElement : IfcRelConnects, ObjectHelper<IfcRelFillsElement,2> { IfcRelFillsElement() : Object("IfcRelFillsElement") {}
3001 Lazy< IfcOpeningElement > RelatingOpeningElement;
3002 Lazy< IfcElement > RelatedBuildingElement;
3003 };
3004
3005 // C++ wrapper for IfcElectricMotorType
3006 struct IfcElectricMotorType : IfcEnergyConversionDeviceType, ObjectHelper<IfcElectricMotorType,1> { IfcElectricMotorType() : Object("IfcElectricMotorType") {}
3007 IfcElectricMotorTypeEnum::Out PredefinedType;
3008 };
3009
3010 // C++ wrapper for IfcTendon
3011 struct IfcTendon : IfcReinforcingElement, ObjectHelper<IfcTendon,8> { IfcTendon() : Object("IfcTendon") {}
3012 IfcTendonTypeEnum::Out PredefinedType;
3013 IfcPositiveLengthMeasure::Out NominalDiameter;
3014 IfcAreaMeasure::Out CrossSectionArea;
3015 Maybe< IfcForceMeasure::Out > TensionForce;
3016 Maybe< IfcPressureMeasure::Out > PreStress;
3017 Maybe< IfcNormalisedRatioMeasure::Out > FrictionCoefficient;
3018 Maybe< IfcPositiveLengthMeasure::Out > AnchorageSlip;
3019 Maybe< IfcPositiveLengthMeasure::Out > MinCurvatureRadius;
3020 };
3021
3022 // C++ wrapper for IfcDistributionChamberElementType
3023 struct IfcDistributionChamberElementType : IfcDistributionFlowElementType, ObjectHelper<IfcDistributionChamberElementType,1> { IfcDistributionChamberElementType() : Object("IfcDistributionChamberElementType") {}
3024 IfcDistributionChamberElementTypeEnum::Out PredefinedType;
3025 };
3026
3027 // C++ wrapper for IfcMemberType
3028 struct IfcMemberType : IfcBuildingElementType, ObjectHelper<IfcMemberType,1> { IfcMemberType() : Object("IfcMemberType") {}
3029 IfcMemberTypeEnum::Out PredefinedType;
3030 };
3031
3032 // C++ wrapper for IfcStructuralLinearAction
3033 struct IfcStructuralLinearAction : IfcStructuralAction, ObjectHelper<IfcStructuralLinearAction,1> { IfcStructuralLinearAction() : Object("IfcStructuralLinearAction") {}
3034 IfcProjectedOrTrueLengthEnum::Out ProjectedOrTrue;
3035 };
3036
3037 // C++ wrapper for IfcStructuralLinearActionVarying
3038 struct IfcStructuralLinearActionVarying : IfcStructuralLinearAction, ObjectHelper<IfcStructuralLinearActionVarying,2> { IfcStructuralLinearActionVarying() : Object("IfcStructuralLinearActionVarying") {}
3039 Lazy< NotImplemented > VaryingAppliedLoadLocation;
3040 ListOf< Lazy< NotImplemented >, 1, 0 > SubsequentAppliedLoads;
3041 };
3042
3043 // C++ wrapper for IfcProductDefinitionShape
3044 struct IfcProductDefinitionShape : IfcProductRepresentation, ObjectHelper<IfcProductDefinitionShape,0> { IfcProductDefinitionShape() : Object("IfcProductDefinitionShape") {}
3045
3046 };
3047
3048 // C++ wrapper for IfcFastener
3049 struct IfcFastener : IfcElementComponent, ObjectHelper<IfcFastener,0> { IfcFastener() : Object("IfcFastener") {}
3050
3051 };
3052
3053 // C++ wrapper for IfcMechanicalFastener
3054 struct IfcMechanicalFastener : IfcFastener, ObjectHelper<IfcMechanicalFastener,2> { IfcMechanicalFastener() : Object("IfcMechanicalFastener") {}
3055 Maybe< IfcPositiveLengthMeasure::Out > NominalDiameter;
3056 Maybe< IfcPositiveLengthMeasure::Out > NominalLength;
3057 };
3058
3059 // C++ wrapper for IfcEvaporatorType
3060 struct IfcEvaporatorType : IfcEnergyConversionDeviceType, ObjectHelper<IfcEvaporatorType,1> { IfcEvaporatorType() : Object("IfcEvaporatorType") {}
3061 IfcEvaporatorTypeEnum::Out PredefinedType;
3062 };
3063
3064 // C++ wrapper for IfcDiscreteAccessoryType
3065 struct IfcDiscreteAccessoryType : IfcElementComponentType, ObjectHelper<IfcDiscreteAccessoryType,0> { IfcDiscreteAccessoryType() : Object("IfcDiscreteAccessoryType") {}
3066
3067 };
3068
3069 // C++ wrapper for IfcStructuralCurveConnection
3070 struct IfcStructuralCurveConnection : IfcStructuralConnection, ObjectHelper<IfcStructuralCurveConnection,0> { IfcStructuralCurveConnection() : Object("IfcStructuralCurveConnection") {}
3071
3072 };
3073
3074 // C++ wrapper for IfcProjectionElement
3075 struct IfcProjectionElement : IfcFeatureElementAddition, ObjectHelper<IfcProjectionElement,0> { IfcProjectionElement() : Object("IfcProjectionElement") {}
3076
3077 };
3078
3079 // C++ wrapper for IfcCoveringType
3080 struct IfcCoveringType : IfcBuildingElementType, ObjectHelper<IfcCoveringType,1> { IfcCoveringType() : Object("IfcCoveringType") {}
3081 IfcCoveringTypeEnum::Out PredefinedType;
3082 };
3083
3084 // C++ wrapper for IfcPumpType
3085 struct IfcPumpType : IfcFlowMovingDeviceType, ObjectHelper<IfcPumpType,1> { IfcPumpType() : Object("IfcPumpType") {}
3086 IfcPumpTypeEnum::Out PredefinedType;
3267 // C++ wrapper for IfcCableSegmentType
3268 struct IfcCableSegmentType : IfcFlowSegmentType, ObjectHelper<IfcCableSegmentType,1> { IfcCableSegmentType() : Object("IfcCableSegmentType") {}
3269 IfcCableSegmentTypeEnum::Out PredefinedType;
3270 };
3271
3272 // C++ wrapper for IfcRelOverridesProperties
3273 struct IfcRelOverridesProperties : IfcRelDefinesByProperties, ObjectHelper<IfcRelOverridesProperties,1> { IfcRelOverridesProperties() : Object("IfcRelOverridesProperties") {}
3274 ListOf< Lazy< IfcProperty >, 1, 0 > OverridingProperties;
3275 };
3276
3277 // C++ wrapper for IfcMeasureWithUnit
3278 struct IfcMeasureWithUnit : ObjectHelper<IfcMeasureWithUnit,2> { IfcMeasureWithUnit() : Object("IfcMeasureWithUnit") {}
3279 IfcValue::Out ValueComponent;
3280 IfcUnit::Out UnitComponent;
3281 };
3282
3283 // C++ wrapper for IfcSlabType
3284 struct IfcSlabType : IfcBuildingElementType, ObjectHelper<IfcSlabType,1> { IfcSlabType() : Object("IfcSlabType") {}
3285 IfcSlabTypeEnum::Out PredefinedType;
3286 };
3287
3288 // C++ wrapper for IfcServiceLife
3289 struct IfcServiceLife : IfcControl, ObjectHelper<IfcServiceLife,2> { IfcServiceLife() : Object("IfcServiceLife") {}
3290 IfcServiceLifeTypeEnum::Out ServiceLifeType;
3291 IfcTimeMeasure::Out ServiceLifeDuration;
3292 };
3293
3294 // C++ wrapper for IfcFurnitureType
3295 struct IfcFurnitureType : IfcFurnishingElementType, ObjectHelper<IfcFurnitureType,1> { IfcFurnitureType() : Object("IfcFurnitureType") {}
3296 IfcAssemblyPlaceEnum::Out AssemblyPlace;
3297 };
3298
3299 // C++ wrapper for IfcCostItem
3300 struct IfcCostItem : IfcControl, ObjectHelper<IfcCostItem,0> { IfcCostItem() : Object("IfcCostItem") {}
3301
3302 };
3303
3304 // C++ wrapper for IfcReinforcingMesh
3305 struct IfcReinforcingMesh : IfcReinforcingElement, ObjectHelper<IfcReinforcingMesh,8> { IfcReinforcingMesh() : Object("IfcReinforcingMesh") {}
3306 Maybe< IfcPositiveLengthMeasure::Out > MeshLength;
3307 Maybe< IfcPositiveLengthMeasure::Out > MeshWidth;
3308 IfcPositiveLengthMeasure::Out LongitudinalBarNominalDiameter;
3309 IfcPositiveLengthMeasure::Out TransverseBarNominalDiameter;
3310 IfcAreaMeasure::Out LongitudinalBarCrossSectionArea;
3311 IfcAreaMeasure::Out TransverseBarCrossSectionArea;
3312 IfcPositiveLengthMeasure::Out LongitudinalBarSpacing;
3313 IfcPositiveLengthMeasure::Out TransverseBarSpacing;
3314 };
3315
3316 // C++ wrapper for IfcFacetedBrepWithVoids
3317 struct IfcFacetedBrepWithVoids : IfcManifoldSolidBrep, ObjectHelper<IfcFacetedBrepWithVoids,1> { IfcFacetedBrepWithVoids() : Object("IfcFacetedBrepWithVoids") {}
3318 ListOf< Lazy< IfcClosedShell >, 1, 0 > Voids;
3319 };
3320
3321 // C++ wrapper for IfcGasTerminalType
3322 struct IfcGasTerminalType : IfcFlowTerminalType, ObjectHelper<IfcGasTerminalType,1> { IfcGasTerminalType() : Object("IfcGasTerminalType") {}
3323 IfcGasTerminalTypeEnum::Out PredefinedType;
30873324 };
30883325
30893326 // C++ wrapper for IfcPile
30923329 Maybe< IfcPileConstructionEnum::Out > ConstructionType;
30933330 };
30943331
3095 // C++ wrapper for IfcUnitAssignment
3096 struct IfcUnitAssignment : ObjectHelper<IfcUnitAssignment,1> { IfcUnitAssignment() : Object("IfcUnitAssignment") {}
3097 ListOf< IfcUnit, 1, 0 >::Out Units;
3098 };
3099
3100 // C++ wrapper for IfcBoundingBox
3101 struct IfcBoundingBox : IfcGeometricRepresentationItem, ObjectHelper<IfcBoundingBox,4> { IfcBoundingBox() : Object("IfcBoundingBox") {}
3102 Lazy< IfcCartesianPoint > Corner;
3103 IfcPositiveLengthMeasure::Out XDim;
3104 IfcPositiveLengthMeasure::Out YDim;
3105 IfcPositiveLengthMeasure::Out ZDim;
3106 };
3107
3108 // C++ wrapper for IfcShellBasedSurfaceModel
3109 struct IfcShellBasedSurfaceModel : IfcGeometricRepresentationItem, ObjectHelper<IfcShellBasedSurfaceModel,1> { IfcShellBasedSurfaceModel() : Object("IfcShellBasedSurfaceModel") {}
3110 ListOf< IfcShell, 1, 0 >::Out SbsmBoundary;
3111 };
3112
3113 // C++ wrapper for IfcFacetedBrep
3114 struct IfcFacetedBrep : IfcManifoldSolidBrep, ObjectHelper<IfcFacetedBrep,0> { IfcFacetedBrep() : Object("IfcFacetedBrep") {}
3115
3116 };
3117
3118 // C++ wrapper for IfcTextLiteralWithExtent
3119 struct IfcTextLiteralWithExtent : IfcTextLiteral, ObjectHelper<IfcTextLiteralWithExtent,2> { IfcTextLiteralWithExtent() : Object("IfcTextLiteralWithExtent") {}
3120 Lazy< IfcPlanarExtent > Extent;
3121 IfcBoxAlignment::Out BoxAlignment;
3122 };
3123
3124 // C++ wrapper for IfcElectricApplianceType
3125 struct IfcElectricApplianceType : IfcFlowTerminalType, ObjectHelper<IfcElectricApplianceType,1> { IfcElectricApplianceType() : Object("IfcElectricApplianceType") {}
3126 IfcElectricApplianceTypeEnum::Out PredefinedType;
3127 };
3128
3129 // C++ wrapper for IfcTrapeziumProfileDef
3130 struct IfcTrapeziumProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcTrapeziumProfileDef,4> { IfcTrapeziumProfileDef() : Object("IfcTrapeziumProfileDef") {}
3131 IfcPositiveLengthMeasure::Out BottomXDim;
3132 IfcPositiveLengthMeasure::Out TopXDim;
3133 IfcPositiveLengthMeasure::Out YDim;
3134 IfcLengthMeasure::Out TopXOffset;
3135 };
3136
3137 // C++ wrapper for IfcRelContainedInSpatialStructure
3138 struct IfcRelContainedInSpatialStructure : IfcRelConnects, ObjectHelper<IfcRelContainedInSpatialStructure,2> { IfcRelContainedInSpatialStructure() : Object("IfcRelContainedInSpatialStructure") {}
3139 ListOf< Lazy< IfcProduct >, 1, 0 > RelatedElements;
3140 Lazy< IfcSpatialStructureElement > RelatingStructure;
3141 };
3142
3143 // C++ wrapper for IfcEdgeLoop
3144 struct IfcEdgeLoop : IfcLoop, ObjectHelper<IfcEdgeLoop,1> { IfcEdgeLoop() : Object("IfcEdgeLoop") {}
3145 ListOf< Lazy< IfcOrientedEdge >, 1, 0 > EdgeList;
3146 };
3147
3148 // C++ wrapper for IfcProject
3149 struct IfcProject : IfcObject, ObjectHelper<IfcProject,4> { IfcProject() : Object("IfcProject") {}
3150 Maybe< IfcLabel::Out > LongName;
3151 Maybe< IfcLabel::Out > Phase;
3152 ListOf< Lazy< IfcRepresentationContext >, 1, 0 > RepresentationContexts;
3153 Lazy< IfcUnitAssignment > UnitsInContext;
3154 };
3155
3156 // C++ wrapper for IfcCartesianPoint
3157 struct IfcCartesianPoint : IfcPoint, ObjectHelper<IfcCartesianPoint,1> { IfcCartesianPoint() : Object("IfcCartesianPoint") {}
3158 ListOf< IfcLengthMeasure, 1, 3 >::Out Coordinates;
3159 };
3160
3161 // C++ wrapper for IfcCurveBoundedPlane
3162 struct IfcCurveBoundedPlane : IfcBoundedSurface, ObjectHelper<IfcCurveBoundedPlane,3> { IfcCurveBoundedPlane() : Object("IfcCurveBoundedPlane") {}
3163 Lazy< IfcPlane > BasisSurface;
3164 Lazy< IfcCurve > OuterBoundary;
3165 ListOf< Lazy< IfcCurve >, 0, 0 > InnerBoundaries;
3166 };
3167
3168 // C++ wrapper for IfcWallType
3169 struct IfcWallType : IfcBuildingElementType, ObjectHelper<IfcWallType,1> { IfcWallType() : Object("IfcWallType") {}
3170 IfcWallTypeEnum::Out PredefinedType;
3171 };
3172
3173 // C++ wrapper for IfcFillAreaStyleHatching
3174 struct IfcFillAreaStyleHatching : IfcGeometricRepresentationItem, ObjectHelper<IfcFillAreaStyleHatching,5> { IfcFillAreaStyleHatching() : Object("IfcFillAreaStyleHatching") {}
3175 Lazy< NotImplemented > HatchLineAppearance;
3176 IfcHatchLineDistanceSelect::Out StartOfNextHatchLine;
3177 Maybe< Lazy< IfcCartesianPoint > > PointOfReferenceHatchLine;
3178 Maybe< Lazy< IfcCartesianPoint > > PatternStart;
3179 IfcPlaneAngleMeasure::Out HatchLineAngle;
3180 };
3181
3182 // C++ wrapper for IfcEquipmentStandard
3183 struct IfcEquipmentStandard : IfcControl, ObjectHelper<IfcEquipmentStandard,0> { IfcEquipmentStandard() : Object("IfcEquipmentStandard") {}
3184
3185 };
3186
3187 // C++ wrapper for IfcDiameterDimension
3188 struct IfcDiameterDimension : IfcDimensionCurveDirectedCallout, ObjectHelper<IfcDiameterDimension,0> { IfcDiameterDimension() : Object("IfcDiameterDimension") {}
3189
3190 };
3191
3192 // C++ wrapper for IfcStructuralLoadGroup
3193 struct IfcStructuralLoadGroup : IfcGroup, ObjectHelper<IfcStructuralLoadGroup,5> { IfcStructuralLoadGroup() : Object("IfcStructuralLoadGroup") {}
3194 IfcLoadGroupTypeEnum::Out PredefinedType;
3195 IfcActionTypeEnum::Out ActionType;
3196 IfcActionSourceTypeEnum::Out ActionSource;
3197 Maybe< IfcPositiveRatioMeasure::Out > Coefficient;
3198 Maybe< IfcLabel::Out > Purpose;
3332 // C++ wrapper for IfcFillAreaStyleTileSymbolWithStyle
3333 struct IfcFillAreaStyleTileSymbolWithStyle : IfcGeometricRepresentationItem, ObjectHelper<IfcFillAreaStyleTileSymbolWithStyle,1> { IfcFillAreaStyleTileSymbolWithStyle() : Object("IfcFillAreaStyleTileSymbolWithStyle") {}
3334 Lazy< IfcAnnotationSymbolOccurrence > Symbol;
31993335 };
32003336
32013337 // C++ wrapper for IfcConstructionMaterialResource
32043340 Maybe< IfcRatioMeasure::Out > UsageRatio;
32053341 };
32063342
3343 // C++ wrapper for IfcAnnotationCurveOccurrence
3344 struct IfcAnnotationCurveOccurrence : IfcAnnotationOccurrence, ObjectHelper<IfcAnnotationCurveOccurrence,0> { IfcAnnotationCurveOccurrence() : Object("IfcAnnotationCurveOccurrence") {}
3345
3346 };
3347
3348 // C++ wrapper for IfcDimensionCurve
3349 struct IfcDimensionCurve : IfcAnnotationCurveOccurrence, ObjectHelper<IfcDimensionCurve,0> { IfcDimensionCurve() : Object("IfcDimensionCurve") {}
3350
3351 };
3352
3353 // C++ wrapper for IfcGeometricCurveSet
3354 struct IfcGeometricCurveSet : IfcGeometricSet, ObjectHelper<IfcGeometricCurveSet,0> { IfcGeometricCurveSet() : Object("IfcGeometricCurveSet") {}
3355
3356 };
3357
32073358 // C++ wrapper for IfcRelAggregates
32083359 struct IfcRelAggregates : IfcRelDecomposes, ObjectHelper<IfcRelAggregates,0> { IfcRelAggregates() : Object("IfcRelAggregates") {}
32093360
3361 };
3362
3363 // C++ wrapper for IfcFaceBasedSurfaceModel
3364 struct IfcFaceBasedSurfaceModel : IfcGeometricRepresentationItem, ObjectHelper<IfcFaceBasedSurfaceModel,1> { IfcFaceBasedSurfaceModel() : Object("IfcFaceBasedSurfaceModel") {}
3365 ListOf< Lazy< IfcConnectedFaceSet >, 1, 0 > FbsmFaces;
3366 };
3367
3368 // C++ wrapper for IfcEnergyConversionDevice
3369 struct IfcEnergyConversionDevice : IfcDistributionFlowElement, ObjectHelper<IfcEnergyConversionDevice,0> { IfcEnergyConversionDevice() : Object("IfcEnergyConversionDevice") {}
3370
3371 };
3372
3373 // C++ wrapper for IfcRampFlight
3374 struct IfcRampFlight : IfcBuildingElement, ObjectHelper<IfcRampFlight,0> { IfcRampFlight() : Object("IfcRampFlight") {}
3375
3376 };
3377
3378 // C++ wrapper for IfcVertexLoop
3379 struct IfcVertexLoop : IfcLoop, ObjectHelper<IfcVertexLoop,1> { IfcVertexLoop() : Object("IfcVertexLoop") {}
3380 Lazy< IfcVertex > LoopVertex;
3381 };
3382
3383 // C++ wrapper for IfcPlate
3384 struct IfcPlate : IfcBuildingElement, ObjectHelper<IfcPlate,0> { IfcPlate() : Object("IfcPlate") {}
3385
3386 };
3387
3388 // C++ wrapper for IfcUShapeProfileDef
3389 struct IfcUShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcUShapeProfileDef,8> { IfcUShapeProfileDef() : Object("IfcUShapeProfileDef") {}
3390 IfcPositiveLengthMeasure::Out Depth;
3391 IfcPositiveLengthMeasure::Out FlangeWidth;
3392 IfcPositiveLengthMeasure::Out WebThickness;
3393 IfcPositiveLengthMeasure::Out FlangeThickness;
3394 Maybe< IfcPositiveLengthMeasure::Out > FilletRadius;
3395 Maybe< IfcPositiveLengthMeasure::Out > EdgeRadius;
3396 Maybe< IfcPlaneAngleMeasure::Out > FlangeSlope;
3397 Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInX;
3398 };
3399
3400 // C++ wrapper for IfcFaceBound
3401 struct IfcFaceBound : IfcTopologicalRepresentationItem, ObjectHelper<IfcFaceBound,2> { IfcFaceBound() : Object("IfcFaceBound") {}
3402 Lazy< IfcLoop > Bound;
3403 BOOLEAN::Out Orientation;
3404 };
3405
3406 // C++ wrapper for IfcFaceOuterBound
3407 struct IfcFaceOuterBound : IfcFaceBound, ObjectHelper<IfcFaceOuterBound,0> { IfcFaceOuterBound() : Object("IfcFaceOuterBound") {}
3408
3409 };
3410
3411 // C++ wrapper for IfcOneDirectionRepeatFactor
3412 struct IfcOneDirectionRepeatFactor : IfcGeometricRepresentationItem, ObjectHelper<IfcOneDirectionRepeatFactor,1> { IfcOneDirectionRepeatFactor() : Object("IfcOneDirectionRepeatFactor") {}
3413 Lazy< IfcVector > RepeatFactor;
32103414 };
32113415
32123416 // C++ wrapper for IfcBoilerType
32143418 IfcBoilerTypeEnum::Out PredefinedType;
32153419 };
32163420
3217 // C++ wrapper for IfcColourSpecification
3218 struct IfcColourSpecification : ObjectHelper<IfcColourSpecification,1> { IfcColourSpecification() : Object("IfcColourSpecification") {}
3219 Maybe< IfcLabel::Out > Name;
3220 };
3221
3222 // C++ wrapper for IfcColourRgb
3223 struct IfcColourRgb : IfcColourSpecification, ObjectHelper<IfcColourRgb,3> { IfcColourRgb() : Object("IfcColourRgb") {}
3224 IfcNormalisedRatioMeasure::Out Red;
3225 IfcNormalisedRatioMeasure::Out Green;
3226 IfcNormalisedRatioMeasure::Out Blue;
3421 // C++ wrapper for IfcConstructionEquipmentResource
3422 struct IfcConstructionEquipmentResource : IfcConstructionResource, ObjectHelper<IfcConstructionEquipmentResource,0> { IfcConstructionEquipmentResource() : Object("IfcConstructionEquipmentResource") {}
3423
3424 };
3425
3426 // C++ wrapper for IfcComplexProperty
3427 struct IfcComplexProperty : IfcProperty, ObjectHelper<IfcComplexProperty,2> { IfcComplexProperty() : Object("IfcComplexProperty") {}
3428 IfcIdentifier::Out UsageName;
3429 ListOf< Lazy< IfcProperty >, 1, 0 > HasProperties;
3430 };
3431
3432 // C++ wrapper for IfcFooting
3433 struct IfcFooting : IfcBuildingElement, ObjectHelper<IfcFooting,1> { IfcFooting() : Object("IfcFooting") {}
3434 IfcFootingTypeEnum::Out PredefinedType;
3435 };
3436
3437 // C++ wrapper for IfcConstructionProductResource
3438 struct IfcConstructionProductResource : IfcConstructionResource, ObjectHelper<IfcConstructionProductResource,0> { IfcConstructionProductResource() : Object("IfcConstructionProductResource") {}
3439
3440 };
3441
3442 // C++ wrapper for IfcDerivedProfileDef
3443 struct IfcDerivedProfileDef : IfcProfileDef, ObjectHelper<IfcDerivedProfileDef,3> { IfcDerivedProfileDef() : Object("IfcDerivedProfileDef") {}
3444 Lazy< IfcProfileDef > ParentProfile;
3445 Lazy< IfcCartesianTransformationOperator2D > Operator;
3446 Maybe< IfcLabel::Out > Label;
3447 };
3448
3449 // C++ wrapper for IfcPropertyTableValue
3450 struct IfcPropertyTableValue : IfcSimpleProperty, ObjectHelper<IfcPropertyTableValue,5> { IfcPropertyTableValue() : Object("IfcPropertyTableValue") {}
3451 ListOf< IfcValue, 1, 0 >::Out DefiningValues;
3452 ListOf< IfcValue, 1, 0 >::Out DefinedValues;
3453 Maybe< IfcText::Out > Expression;
3454 Maybe< IfcUnit::Out > DefiningUnit;
3455 Maybe< IfcUnit::Out > DefinedUnit;
3456 };
3457
3458 // C++ wrapper for IfcFlowMeterType
3459 struct IfcFlowMeterType : IfcFlowControllerType, ObjectHelper<IfcFlowMeterType,1> { IfcFlowMeterType() : Object("IfcFlowMeterType") {}
3460 IfcFlowMeterTypeEnum::Out PredefinedType;
32273461 };
32283462
32293463 // C++ wrapper for IfcDoorStyle
32343468 BOOLEAN::Out Sizeable;
32353469 };
32363470
3237 // C++ wrapper for IfcDuctSilencerType
3238 struct IfcDuctSilencerType : IfcFlowTreatmentDeviceType, ObjectHelper<IfcDuctSilencerType,1> { IfcDuctSilencerType() : Object("IfcDuctSilencerType") {}
3239 IfcDuctSilencerTypeEnum::Out PredefinedType;
3240 };
3241
3242 // C++ wrapper for IfcLightSourceGoniometric
3243 struct IfcLightSourceGoniometric : IfcLightSource, ObjectHelper<IfcLightSourceGoniometric,6> { IfcLightSourceGoniometric() : Object("IfcLightSourceGoniometric") {}
3244 Lazy< IfcAxis2Placement3D > Position;
3245 Maybe< Lazy< IfcColourRgb > > ColourAppearance;
3246 IfcThermodynamicTemperatureMeasure::Out ColourTemperature;
3247 IfcLuminousFluxMeasure::Out LuminousFlux;
3248 IfcLightEmissionSourceEnum::Out LightEmissionSource;
3249 IfcLightDistributionDataSourceSelect::Out LightDistributionDataSource;
3250 };
3251
3252 // C++ wrapper for IfcActuatorType
3253 struct IfcActuatorType : IfcDistributionControlElementType, ObjectHelper<IfcActuatorType,1> { IfcActuatorType() : Object("IfcActuatorType") {}
3254 IfcActuatorTypeEnum::Out PredefinedType;
3255 };
3256
3257 // C++ wrapper for IfcSensorType
3258 struct IfcSensorType : IfcDistributionControlElementType, ObjectHelper<IfcSensorType,1> { IfcSensorType() : Object("IfcSensorType") {}
3259 IfcSensorTypeEnum::Out PredefinedType;
3260 };
3261
3262 // C++ wrapper for IfcAirTerminalBoxType
3263 struct IfcAirTerminalBoxType : IfcFlowControllerType, ObjectHelper<IfcAirTerminalBoxType,1> { IfcAirTerminalBoxType() : Object("IfcAirTerminalBoxType") {}
3264 IfcAirTerminalBoxTypeEnum::Out PredefinedType;
3265 };
3266
3267 // C++ wrapper for IfcAnnotationSurfaceOccurrence
3268 struct IfcAnnotationSurfaceOccurrence : IfcAnnotationOccurrence, ObjectHelper<IfcAnnotationSurfaceOccurrence,0> { IfcAnnotationSurfaceOccurrence() : Object("IfcAnnotationSurfaceOccurrence") {}
3269
3270 };
3271
3272 // C++ wrapper for IfcZShapeProfileDef
3273 struct IfcZShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcZShapeProfileDef,6> { IfcZShapeProfileDef() : Object("IfcZShapeProfileDef") {}
3274 IfcPositiveLengthMeasure::Out Depth;
3275 IfcPositiveLengthMeasure::Out FlangeWidth;
3276 IfcPositiveLengthMeasure::Out WebThickness;
3277 IfcPositiveLengthMeasure::Out FlangeThickness;
3278 Maybe< IfcPositiveLengthMeasure::Out > FilletRadius;
3279 Maybe< IfcPositiveLengthMeasure::Out > EdgeRadius;
3280 };
3281
3282 // C++ wrapper for IfcRationalBezierCurve
3283 struct IfcRationalBezierCurve : IfcBezierCurve, ObjectHelper<IfcRationalBezierCurve,1> { IfcRationalBezierCurve() : Object("IfcRationalBezierCurve") {}
3284 ListOf< REAL, 2, 0 >::Out WeightsData;
3285 };
3286
3287 // C++ wrapper for IfcCartesianTransformationOperator2D
3288 struct IfcCartesianTransformationOperator2D : IfcCartesianTransformationOperator, ObjectHelper<IfcCartesianTransformationOperator2D,0> { IfcCartesianTransformationOperator2D() : Object("IfcCartesianTransformationOperator2D") {}
3289
3290 };
3291
3292 // C++ wrapper for IfcCartesianTransformationOperator2DnonUniform
3293 struct IfcCartesianTransformationOperator2DnonUniform : IfcCartesianTransformationOperator2D, ObjectHelper<IfcCartesianTransformationOperator2DnonUniform,1> { IfcCartesianTransformationOperator2DnonUniform() : Object("IfcCartesianTransformationOperator2DnonUniform") {}
3294 Maybe< REAL::Out > Scale2;
3295 };
3296
3297 // C++ wrapper for IfcMove
3298 struct IfcMove : IfcTask, ObjectHelper<IfcMove,3> { IfcMove() : Object("IfcMove") {}
3299 Lazy< IfcSpatialStructureElement > MoveFrom;
3300 Lazy< IfcSpatialStructureElement > MoveTo;
3301 Maybe< ListOf< IfcText, 1, 0 >::Out > PunchList;
3302 };
3303
3304 // C++ wrapper for IfcCableCarrierSegmentType
3305 struct IfcCableCarrierSegmentType : IfcFlowSegmentType, ObjectHelper<IfcCableCarrierSegmentType,1> { IfcCableCarrierSegmentType() : Object("IfcCableCarrierSegmentType") {}
3306 IfcCableCarrierSegmentTypeEnum::Out PredefinedType;
3307 };
3308
3309 // C++ wrapper for IfcElectricalElement
3310 struct IfcElectricalElement : IfcElement, ObjectHelper<IfcElectricalElement,0> { IfcElectricalElement() : Object("IfcElectricalElement") {}
3311
3312 };
3313
3314 // C++ wrapper for IfcChillerType
3315 struct IfcChillerType : IfcEnergyConversionDeviceType, ObjectHelper<IfcChillerType,1> { IfcChillerType() : Object("IfcChillerType") {}
3316 IfcChillerTypeEnum::Out PredefinedType;
3317 };
3318
3319 // C++ wrapper for IfcReinforcingBar
3320 struct IfcReinforcingBar : IfcReinforcingElement, ObjectHelper<IfcReinforcingBar,5> { IfcReinforcingBar() : Object("IfcReinforcingBar") {}
3321 IfcPositiveLengthMeasure::Out NominalDiameter;
3322 IfcAreaMeasure::Out CrossSectionArea;
3323 Maybe< IfcPositiveLengthMeasure::Out > BarLength;
3324 IfcReinforcingBarRoleEnum::Out BarRole;
3325 Maybe< IfcReinforcingBarSurfaceEnum::Out > BarSurface;
3326 };
3327
3328 // C++ wrapper for IfcCShapeProfileDef
3329 struct IfcCShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcCShapeProfileDef,6> { IfcCShapeProfileDef() : Object("IfcCShapeProfileDef") {}
3330 IfcPositiveLengthMeasure::Out Depth;
3331 IfcPositiveLengthMeasure::Out Width;
3332 IfcPositiveLengthMeasure::Out WallThickness;
3333 IfcPositiveLengthMeasure::Out Girth;
3334 Maybe< IfcPositiveLengthMeasure::Out > InternalFilletRadius;
3335 Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInX;
3336 };
3337
3338 // C++ wrapper for IfcPermit
3339 struct IfcPermit : IfcControl, ObjectHelper<IfcPermit,1> { IfcPermit() : Object("IfcPermit") {}
3340 IfcIdentifier::Out PermitID;
3341 };
3342
3343 // C++ wrapper for IfcSlabType
3344 struct IfcSlabType : IfcBuildingElementType, ObjectHelper<IfcSlabType,1> { IfcSlabType() : Object("IfcSlabType") {}
3345 IfcSlabTypeEnum::Out PredefinedType;
3346 };
3347
3348 // C++ wrapper for IfcLampType
3349 struct IfcLampType : IfcFlowTerminalType, ObjectHelper<IfcLampType,1> { IfcLampType() : Object("IfcLampType") {}
3350 IfcLampTypeEnum::Out PredefinedType;
3351 };
3352
3353 // C++ wrapper for IfcPlanarExtent
3354 struct IfcPlanarExtent : IfcGeometricRepresentationItem, ObjectHelper<IfcPlanarExtent,2> { IfcPlanarExtent() : Object("IfcPlanarExtent") {}
3355 IfcLengthMeasure::Out SizeInX;
3356 IfcLengthMeasure::Out SizeInY;
3357 };
3358
3359 // C++ wrapper for IfcAlarmType
3360 struct IfcAlarmType : IfcDistributionControlElementType, ObjectHelper<IfcAlarmType,1> { IfcAlarmType() : Object("IfcAlarmType") {}
3361 IfcAlarmTypeEnum::Out PredefinedType;
3362 };
3363
3364 // C++ wrapper for IfcElectricFlowStorageDeviceType
3365 struct IfcElectricFlowStorageDeviceType : IfcFlowStorageDeviceType, ObjectHelper<IfcElectricFlowStorageDeviceType,1> { IfcElectricFlowStorageDeviceType() : Object("IfcElectricFlowStorageDeviceType") {}
3366 IfcElectricFlowStorageDeviceTypeEnum::Out PredefinedType;
3367 };
3368
3369 // C++ wrapper for IfcEquipmentElement
3370 struct IfcEquipmentElement : IfcElement, ObjectHelper<IfcEquipmentElement,0> { IfcEquipmentElement() : Object("IfcEquipmentElement") {}
3371
3372 };
3373
3374 // C++ wrapper for IfcLightFixtureType
3375 struct IfcLightFixtureType : IfcFlowTerminalType, ObjectHelper<IfcLightFixtureType,1> { IfcLightFixtureType() : Object("IfcLightFixtureType") {}
3376 IfcLightFixtureTypeEnum::Out PredefinedType;
3377 };
3378
3379 // C++ wrapper for IfcCurtainWall
3380 struct IfcCurtainWall : IfcBuildingElement, ObjectHelper<IfcCurtainWall,0> { IfcCurtainWall() : Object("IfcCurtainWall") {}
3381
3382 };
3383
3384 // C++ wrapper for IfcSlab
3385 struct IfcSlab : IfcBuildingElement, ObjectHelper<IfcSlab,1> { IfcSlab() : Object("IfcSlab") {}
3386 Maybe< IfcSlabTypeEnum::Out > PredefinedType;
3387 };
3388
3389 // C++ wrapper for IfcCurtainWallType
3390 struct IfcCurtainWallType : IfcBuildingElementType, ObjectHelper<IfcCurtainWallType,1> { IfcCurtainWallType() : Object("IfcCurtainWallType") {}
3391 IfcCurtainWallTypeEnum::Out PredefinedType;
3392 };
3393
3394 // C++ wrapper for IfcOutletType
3395 struct IfcOutletType : IfcFlowTerminalType, ObjectHelper<IfcOutletType,1> { IfcOutletType() : Object("IfcOutletType") {}
3396 IfcOutletTypeEnum::Out PredefinedType;
3397 };
3398
3399 // C++ wrapper for IfcCompressorType
3400 struct IfcCompressorType : IfcFlowMovingDeviceType, ObjectHelper<IfcCompressorType,1> { IfcCompressorType() : Object("IfcCompressorType") {}
3401 IfcCompressorTypeEnum::Out PredefinedType;
3402 };
3403
3404 // C++ wrapper for IfcCraneRailAShapeProfileDef
3405 struct IfcCraneRailAShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcCraneRailAShapeProfileDef,12> { IfcCraneRailAShapeProfileDef() : Object("IfcCraneRailAShapeProfileDef") {}
3406 IfcPositiveLengthMeasure::Out OverallHeight;
3407 IfcPositiveLengthMeasure::Out BaseWidth2;
3408 Maybe< IfcPositiveLengthMeasure::Out > Radius;
3409 IfcPositiveLengthMeasure::Out HeadWidth;
3410 IfcPositiveLengthMeasure::Out HeadDepth2;
3411 IfcPositiveLengthMeasure::Out HeadDepth3;
3412 IfcPositiveLengthMeasure::Out WebThickness;
3413 IfcPositiveLengthMeasure::Out BaseWidth4;
3414 IfcPositiveLengthMeasure::Out BaseDepth1;
3415 IfcPositiveLengthMeasure::Out BaseDepth2;
3416 IfcPositiveLengthMeasure::Out BaseDepth3;
3417 Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY;
3418 };
3419
3420 // C++ wrapper for IfcFlowSegment
3421 struct IfcFlowSegment : IfcDistributionFlowElement, ObjectHelper<IfcFlowSegment,0> { IfcFlowSegment() : Object("IfcFlowSegment") {}
3422
3423 };
3424
3425 // C++ wrapper for IfcSectionedSpine
3426 struct IfcSectionedSpine : IfcGeometricRepresentationItem, ObjectHelper<IfcSectionedSpine,3> { IfcSectionedSpine() : Object("IfcSectionedSpine") {}
3427 Lazy< IfcCompositeCurve > SpineCurve;
3428 ListOf< Lazy< IfcProfileDef >, 2, 0 > CrossSections;
3429 ListOf< Lazy< IfcAxis2Placement3D >, 2, 0 > CrossSectionPositions;
3430 };
3431
3432 // C++ wrapper for IfcElectricTimeControlType
3433 struct IfcElectricTimeControlType : IfcFlowControllerType, ObjectHelper<IfcElectricTimeControlType,1> { IfcElectricTimeControlType() : Object("IfcElectricTimeControlType") {}
3434 IfcElectricTimeControlTypeEnum::Out PredefinedType;
3435 };
3436
3437 // C++ wrapper for IfcFaceSurface
3438 struct IfcFaceSurface : IfcFace, ObjectHelper<IfcFaceSurface,2> { IfcFaceSurface() : Object("IfcFaceSurface") {}
3439 Lazy< IfcSurface > FaceSurface;
3440 BOOLEAN::Out SameSense;
3441 };
3442
3443 // C++ wrapper for IfcMotorConnectionType
3444 struct IfcMotorConnectionType : IfcEnergyConversionDeviceType, ObjectHelper<IfcMotorConnectionType,1> { IfcMotorConnectionType() : Object("IfcMotorConnectionType") {}
3445 IfcMotorConnectionTypeEnum::Out PredefinedType;
3446 };
3447
3448 // C++ wrapper for IfcFlowFitting
3449 struct IfcFlowFitting : IfcDistributionFlowElement, ObjectHelper<IfcFlowFitting,0> { IfcFlowFitting() : Object("IfcFlowFitting") {}
3450
3451 };
3452
3453 // C++ wrapper for IfcPointOnCurve
3454 struct IfcPointOnCurve : IfcPoint, ObjectHelper<IfcPointOnCurve,2> { IfcPointOnCurve() : Object("IfcPointOnCurve") {}
3455 Lazy< IfcCurve > BasisCurve;
3456 IfcParameterValue::Out PointParameter;
3457 };
3458
3459 // C++ wrapper for IfcTransportElementType
3460 struct IfcTransportElementType : IfcElementType, ObjectHelper<IfcTransportElementType,1> { IfcTransportElementType() : Object("IfcTransportElementType") {}
3461 IfcTransportElementTypeEnum::Out PredefinedType;
3462 };
3463
3464 // C++ wrapper for IfcCableSegmentType
3465 struct IfcCableSegmentType : IfcFlowSegmentType, ObjectHelper<IfcCableSegmentType,1> { IfcCableSegmentType() : Object("IfcCableSegmentType") {}
3466 IfcCableSegmentTypeEnum::Out PredefinedType;
3467 };
3468
3469 // C++ wrapper for IfcAnnotationSurface
3470 struct IfcAnnotationSurface : IfcGeometricRepresentationItem, ObjectHelper<IfcAnnotationSurface,2> { IfcAnnotationSurface() : Object("IfcAnnotationSurface") {}
3471 Lazy< IfcGeometricRepresentationItem > Item;
3472 Maybe< Lazy< NotImplemented > > TextureCoordinates;
3473 };
3474
3475 // C++ wrapper for IfcCompositeCurveSegment
3476 struct IfcCompositeCurveSegment : IfcGeometricRepresentationItem, ObjectHelper<IfcCompositeCurveSegment,3> { IfcCompositeCurveSegment() : Object("IfcCompositeCurveSegment") {}
3477 IfcTransitionCode::Out Transition;
3478 BOOLEAN::Out SameSense;
3479 Lazy< IfcCurve > ParentCurve;
3480 };
3481
3482 // C++ wrapper for IfcServiceLife
3483 struct IfcServiceLife : IfcControl, ObjectHelper<IfcServiceLife,2> { IfcServiceLife() : Object("IfcServiceLife") {}
3484 IfcServiceLifeTypeEnum::Out ServiceLifeType;
3485 IfcTimeMeasure::Out ServiceLifeDuration;
3486 };
3487
3488 // C++ wrapper for IfcPlateType
3489 struct IfcPlateType : IfcBuildingElementType, ObjectHelper<IfcPlateType,1> { IfcPlateType() : Object("IfcPlateType") {}
3490 IfcPlateTypeEnum::Out PredefinedType;
3491 };
3492
3493 // C++ wrapper for IfcVibrationIsolatorType
3494 struct IfcVibrationIsolatorType : IfcDiscreteAccessoryType, ObjectHelper<IfcVibrationIsolatorType,1> { IfcVibrationIsolatorType() : Object("IfcVibrationIsolatorType") {}
3495 IfcVibrationIsolatorTypeEnum::Out PredefinedType;
3496 };
3497
3498 // C++ wrapper for IfcTrimmedCurve
3499 struct IfcTrimmedCurve : IfcBoundedCurve, ObjectHelper<IfcTrimmedCurve,5> { IfcTrimmedCurve() : Object("IfcTrimmedCurve") {}
3500 Lazy< IfcCurve > BasisCurve;
3501 ListOf< IfcTrimmingSelect, 1, 2 >::Out Trim1;
3502 ListOf< IfcTrimmingSelect, 1, 2 >::Out Trim2;
3503 BOOLEAN::Out SenseAgreement;
3504 IfcTrimmingPreference::Out MasterRepresentation;
3505 };
3506
3507 // C++ wrapper for IfcMappedItem
3508 struct IfcMappedItem : IfcRepresentationItem, ObjectHelper<IfcMappedItem,2> { IfcMappedItem() : Object("IfcMappedItem") {}
3509 Lazy< IfcRepresentationMap > MappingSource;
3510 Lazy< IfcCartesianTransformationOperator > MappingTarget;
3511 };
3512
3513 // C++ wrapper for IfcDirection
3514 struct IfcDirection : IfcGeometricRepresentationItem, ObjectHelper<IfcDirection,1> { IfcDirection() : Object("IfcDirection") {}
3515 ListOf< REAL, 2, 3 >::Out DirectionRatios;
3516 };
3517
3518 // C++ wrapper for IfcBlock
3519 struct IfcBlock : IfcCsgPrimitive3D, ObjectHelper<IfcBlock,3> { IfcBlock() : Object("IfcBlock") {}
3520 IfcPositiveLengthMeasure::Out XLength;
3521 IfcPositiveLengthMeasure::Out YLength;
3522 IfcPositiveLengthMeasure::Out ZLength;
3523 };
3524
3525 // C++ wrapper for IfcProjectOrderRecord
3526 struct IfcProjectOrderRecord : IfcControl, ObjectHelper<IfcProjectOrderRecord,2> { IfcProjectOrderRecord() : Object("IfcProjectOrderRecord") {}
3527 ListOf< Lazy< NotImplemented >, 1, 0 > Records;
3528 IfcProjectOrderRecordTypeEnum::Out PredefinedType;
3529 };
3530
3531 // C++ wrapper for IfcFlowMeterType
3532 struct IfcFlowMeterType : IfcFlowControllerType, ObjectHelper<IfcFlowMeterType,1> { IfcFlowMeterType() : Object("IfcFlowMeterType") {}
3533 IfcFlowMeterTypeEnum::Out PredefinedType;
3534 };
3535
3536 // C++ wrapper for IfcControllerType
3537 struct IfcControllerType : IfcDistributionControlElementType, ObjectHelper<IfcControllerType,1> { IfcControllerType() : Object("IfcControllerType") {}
3538 IfcControllerTypeEnum::Out PredefinedType;
3539 };
3540
3541 // C++ wrapper for IfcBeam
3542 struct IfcBeam : IfcBuildingElement, ObjectHelper<IfcBeam,0> { IfcBeam() : Object("IfcBeam") {}
3543
3544 };
3545
3546 // C++ wrapper for IfcArbitraryOpenProfileDef
3547 struct IfcArbitraryOpenProfileDef : IfcProfileDef, ObjectHelper<IfcArbitraryOpenProfileDef,1> { IfcArbitraryOpenProfileDef() : Object("IfcArbitraryOpenProfileDef") {}
3548 Lazy< IfcBoundedCurve > Curve;
3549 };
3550
3551 // C++ wrapper for IfcCenterLineProfileDef
3552 struct IfcCenterLineProfileDef : IfcArbitraryOpenProfileDef, ObjectHelper<IfcCenterLineProfileDef,1> { IfcCenterLineProfileDef() : Object("IfcCenterLineProfileDef") {}
3553 IfcPositiveLengthMeasure::Out Thickness;
3554 };
3555
3556 // C++ wrapper for IfcTimeSeriesSchedule
3557 struct IfcTimeSeriesSchedule : IfcControl, ObjectHelper<IfcTimeSeriesSchedule,3> { IfcTimeSeriesSchedule() : Object("IfcTimeSeriesSchedule") {}
3558 Maybe< ListOf< IfcDateTimeSelect, 1, 0 >::Out > ApplicableDates;
3559 IfcTimeSeriesScheduleTypeEnum::Out TimeSeriesScheduleType;
3560 Lazy< NotImplemented > TimeSeries;
3561 };
3562
3563 // C++ wrapper for IfcRoundedEdgeFeature
3564 struct IfcRoundedEdgeFeature : IfcEdgeFeature, ObjectHelper<IfcRoundedEdgeFeature,1> { IfcRoundedEdgeFeature() : Object("IfcRoundedEdgeFeature") {}
3565 Maybe< IfcPositiveLengthMeasure::Out > Radius;
3566 };
3567
3568 // C++ wrapper for IfcIShapeProfileDef
3569 struct IfcIShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcIShapeProfileDef,5> { IfcIShapeProfileDef() : Object("IfcIShapeProfileDef") {}
3570 IfcPositiveLengthMeasure::Out OverallWidth;
3571 IfcPositiveLengthMeasure::Out OverallDepth;
3572 IfcPositiveLengthMeasure::Out WebThickness;
3573 IfcPositiveLengthMeasure::Out FlangeThickness;
3574 Maybe< IfcPositiveLengthMeasure::Out > FilletRadius;
3575 };
3576
3577 // C++ wrapper for IfcSpaceHeaterType
3578 struct IfcSpaceHeaterType : IfcEnergyConversionDeviceType, ObjectHelper<IfcSpaceHeaterType,1> { IfcSpaceHeaterType() : Object("IfcSpaceHeaterType") {}
3579 IfcSpaceHeaterTypeEnum::Out PredefinedType;
3580 };
3581
3582 // C++ wrapper for IfcFlowStorageDevice
3583 struct IfcFlowStorageDevice : IfcDistributionFlowElement, ObjectHelper<IfcFlowStorageDevice,0> { IfcFlowStorageDevice() : Object("IfcFlowStorageDevice") {}
3584
3585 };
3586
3587 // C++ wrapper for IfcRevolvedAreaSolid
3588 struct IfcRevolvedAreaSolid : IfcSweptAreaSolid, ObjectHelper<IfcRevolvedAreaSolid,2> { IfcRevolvedAreaSolid() : Object("IfcRevolvedAreaSolid") {}
3589 Lazy< IfcAxis1Placement > Axis;
3590 IfcPlaneAngleMeasure::Out Angle;
3591 };
3592
3593 // C++ wrapper for IfcDoor
3594 struct IfcDoor : IfcBuildingElement, ObjectHelper<IfcDoor,2> { IfcDoor() : Object("IfcDoor") {}
3595 Maybe< IfcPositiveLengthMeasure::Out > OverallHeight;
3596 Maybe< IfcPositiveLengthMeasure::Out > OverallWidth;
3597 };
3598
3599 // C++ wrapper for IfcEllipse
3600 struct IfcEllipse : IfcConic, ObjectHelper<IfcEllipse,2> { IfcEllipse() : Object("IfcEllipse") {}
3601 IfcPositiveLengthMeasure::Out SemiAxis1;
3602 IfcPositiveLengthMeasure::Out SemiAxis2;
3603 };
3604
3605 // C++ wrapper for IfcTubeBundleType
3606 struct IfcTubeBundleType : IfcEnergyConversionDeviceType, ObjectHelper<IfcTubeBundleType,1> { IfcTubeBundleType() : Object("IfcTubeBundleType") {}
3607 IfcTubeBundleTypeEnum::Out PredefinedType;
3608 };
3609
3610 // C++ wrapper for IfcAngularDimension
3611 struct IfcAngularDimension : IfcDimensionCurveDirectedCallout, ObjectHelper<IfcAngularDimension,0> { IfcAngularDimension() : Object("IfcAngularDimension") {}
3612
3613 };
3614
3615 // C++ wrapper for IfcFaceBasedSurfaceModel
3616 struct IfcFaceBasedSurfaceModel : IfcGeometricRepresentationItem, ObjectHelper<IfcFaceBasedSurfaceModel,1> { IfcFaceBasedSurfaceModel() : Object("IfcFaceBasedSurfaceModel") {}
3617 ListOf< Lazy< IfcConnectedFaceSet >, 1, 0 > FbsmFaces;
3471 // C++ wrapper for IfcUnitAssignment
3472 struct IfcUnitAssignment : ObjectHelper<IfcUnitAssignment,1> { IfcUnitAssignment() : Object("IfcUnitAssignment") {}
3473 ListOf< IfcUnit, 1, 0 >::Out Units;
3474 };
3475
3476 // C++ wrapper for IfcFlowTerminal
3477 struct IfcFlowTerminal : IfcDistributionFlowElement, ObjectHelper<IfcFlowTerminal,0> { IfcFlowTerminal() : Object("IfcFlowTerminal") {}
3478
36183479 };
36193480
36203481 // C++ wrapper for IfcCraneRailFShapeProfileDef
36303491 Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY;
36313492 };
36323493
3633 // C++ wrapper for IfcColumnType
3634 struct IfcColumnType : IfcBuildingElementType, ObjectHelper<IfcColumnType,1> { IfcColumnType() : Object("IfcColumnType") {}
3635 IfcColumnTypeEnum::Out PredefinedType;
3636 };
3637
3638 // C++ wrapper for IfcTShapeProfileDef
3639 struct IfcTShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcTShapeProfileDef,10> { IfcTShapeProfileDef() : Object("IfcTShapeProfileDef") {}
3640 IfcPositiveLengthMeasure::Out Depth;
3641 IfcPositiveLengthMeasure::Out FlangeWidth;
3642 IfcPositiveLengthMeasure::Out WebThickness;
3643 IfcPositiveLengthMeasure::Out FlangeThickness;
3644 Maybe< IfcPositiveLengthMeasure::Out > FilletRadius;
3645 Maybe< IfcPositiveLengthMeasure::Out > FlangeEdgeRadius;
3646 Maybe< IfcPositiveLengthMeasure::Out > WebEdgeRadius;
3647 Maybe< IfcPlaneAngleMeasure::Out > WebSlope;
3648 Maybe< IfcPlaneAngleMeasure::Out > FlangeSlope;
3649 Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY;
3650 };
3651
3652 // C++ wrapper for IfcEnergyConversionDevice
3653 struct IfcEnergyConversionDevice : IfcDistributionFlowElement, ObjectHelper<IfcEnergyConversionDevice,0> { IfcEnergyConversionDevice() : Object("IfcEnergyConversionDevice") {}
3654
3655 };
3656
3657 // C++ wrapper for IfcWorkSchedule
3658 struct IfcWorkSchedule : IfcWorkControl, ObjectHelper<IfcWorkSchedule,0> { IfcWorkSchedule() : Object("IfcWorkSchedule") {}
3659
3660 };
3661
3662 // C++ wrapper for IfcZone
3663 struct IfcZone : IfcGroup, ObjectHelper<IfcZone,0> { IfcZone() : Object("IfcZone") {}
3664
3665 };
3666
3667 // C++ wrapper for IfcTransportElement
3668 struct IfcTransportElement : IfcElement, ObjectHelper<IfcTransportElement,3> { IfcTransportElement() : Object("IfcTransportElement") {}
3669 Maybe< IfcTransportElementTypeEnum::Out > OperationType;
3670 Maybe< IfcMassMeasure::Out > CapacityByWeight;
3671 Maybe< IfcCountMeasure::Out > CapacityByNumber;
3672 };
3673
3674 // C++ wrapper for IfcGeometricRepresentationSubContext
3675 struct IfcGeometricRepresentationSubContext : IfcGeometricRepresentationContext, ObjectHelper<IfcGeometricRepresentationSubContext,4> { IfcGeometricRepresentationSubContext() : Object("IfcGeometricRepresentationSubContext") {}
3676 Lazy< IfcGeometricRepresentationContext > ParentContext;
3677 Maybe< IfcPositiveRatioMeasure::Out > TargetScale;
3678 IfcGeometricProjectionEnum::Out TargetView;
3679 Maybe< IfcLabel::Out > UserDefinedTargetView;
3680 };
3681
3682 // C++ wrapper for IfcLShapeProfileDef
3683 struct IfcLShapeProfileDef : IfcParameterizedProfileDef, ObjectHelper<IfcLShapeProfileDef,8> { IfcLShapeProfileDef() : Object("IfcLShapeProfileDef") {}
3684 IfcPositiveLengthMeasure::Out Depth;
3685 Maybe< IfcPositiveLengthMeasure::Out > Width;
3686 IfcPositiveLengthMeasure::Out Thickness;
3687 Maybe< IfcPositiveLengthMeasure::Out > FilletRadius;
3688 Maybe< IfcPositiveLengthMeasure::Out > EdgeRadius;
3689 Maybe< IfcPlaneAngleMeasure::Out > LegSlope;
3690 Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInX;
3691 Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY;
3692 };
3693
3694 // C++ wrapper for IfcGeometricCurveSet
3695 struct IfcGeometricCurveSet : IfcGeometricSet, ObjectHelper<IfcGeometricCurveSet,0> { IfcGeometricCurveSet() : Object("IfcGeometricCurveSet") {}
3696
3697 };
3698
3699 // C++ wrapper for IfcActor
3700 struct IfcActor : IfcObject, ObjectHelper<IfcActor,1> { IfcActor() : Object("IfcActor") {}
3701 IfcActorSelect::Out TheActor;
3702 };
3703
3704 // C++ wrapper for IfcOccupant
3705 struct IfcOccupant : IfcActor, ObjectHelper<IfcOccupant,1> { IfcOccupant() : Object("IfcOccupant") {}
3706 IfcOccupantTypeEnum::Out PredefinedType;
3707 };
3708
3709 // C++ wrapper for IfcBooleanClippingResult
3710 struct IfcBooleanClippingResult : IfcBooleanResult, ObjectHelper<IfcBooleanClippingResult,0> { IfcBooleanClippingResult() : Object("IfcBooleanClippingResult") {}
3711
3712 };
3713
3714 // C++ wrapper for IfcAnnotationFillArea
3715 struct IfcAnnotationFillArea : IfcGeometricRepresentationItem, ObjectHelper<IfcAnnotationFillArea,2> { IfcAnnotationFillArea() : Object("IfcAnnotationFillArea") {}
3716 Lazy< IfcCurve > OuterBoundary;
3717 Maybe< ListOf< Lazy< IfcCurve >, 1, 0 > > InnerBoundaries;
3718 };
3719
3720 // C++ wrapper for IfcLightSourceSpot
3721 struct IfcLightSourceSpot : IfcLightSourcePositional, ObjectHelper<IfcLightSourceSpot,4> { IfcLightSourceSpot() : Object("IfcLightSourceSpot") {}
3722 Lazy< IfcDirection > Orientation;
3723 Maybe< IfcReal::Out > ConcentrationExponent;
3724 IfcPositivePlaneAngleMeasure::Out SpreadAngle;
3725 IfcPositivePlaneAngleMeasure::Out BeamWidthAngle;
3726 };
3727
3728 // C++ wrapper for IfcFireSuppressionTerminalType
3729 struct IfcFireSuppressionTerminalType : IfcFlowTerminalType, ObjectHelper<IfcFireSuppressionTerminalType,1> { IfcFireSuppressionTerminalType() : Object("IfcFireSuppressionTerminalType") {}
3730 IfcFireSuppressionTerminalTypeEnum::Out PredefinedType;
3731 };
3732
3733 // C++ wrapper for IfcElectricGeneratorType
3734 struct IfcElectricGeneratorType : IfcEnergyConversionDeviceType, ObjectHelper<IfcElectricGeneratorType,1> { IfcElectricGeneratorType() : Object("IfcElectricGeneratorType") {}
3735 IfcElectricGeneratorTypeEnum::Out PredefinedType;
3494 // C++ wrapper for IfcFlowSegment
3495 struct IfcFlowSegment : IfcDistributionFlowElement, ObjectHelper<IfcFlowSegment,0> { IfcFlowSegment() : Object("IfcFlowSegment") {}
3496
3497 };
3498
3499 // C++ wrapper for IfcElementQuantity
3500 struct IfcElementQuantity : IfcPropertySetDefinition, ObjectHelper<IfcElementQuantity,2> { IfcElementQuantity() : Object("IfcElementQuantity") {}
3501 Maybe< IfcLabel::Out > MethodOfMeasurement;
3502 ListOf< Lazy< NotImplemented >, 1, 0 > Quantities;
3503 };
3504
3505 // C++ wrapper for IfcCurtainWall
3506 struct IfcCurtainWall : IfcBuildingElement, ObjectHelper<IfcCurtainWall,0> { IfcCurtainWall() : Object("IfcCurtainWall") {}
3507
3508 };
3509
3510 // C++ wrapper for IfcDiscreteAccessory
3511 struct IfcDiscreteAccessory : IfcElementComponent, ObjectHelper<IfcDiscreteAccessory,0> { IfcDiscreteAccessory() : Object("IfcDiscreteAccessory") {}
3512
3513 };
3514
3515 // C++ wrapper for IfcGrid
3516 struct IfcGrid : IfcProduct, ObjectHelper<IfcGrid,3> { IfcGrid() : Object("IfcGrid") {}
3517 ListOf< Lazy< NotImplemented >, 1, 0 > UAxes;
3518 ListOf< Lazy< NotImplemented >, 1, 0 > VAxes;
3519 Maybe< ListOf< Lazy< NotImplemented >, 1, 0 > > WAxes;
3520 };
3521
3522 // C++ wrapper for IfcSanitaryTerminalType
3523 struct IfcSanitaryTerminalType : IfcFlowTerminalType, ObjectHelper<IfcSanitaryTerminalType,1> { IfcSanitaryTerminalType() : Object("IfcSanitaryTerminalType") {}
3524 IfcSanitaryTerminalTypeEnum::Out PredefinedType;
3525 };
3526
3527 // C++ wrapper for IfcSubedge
3528 struct IfcSubedge : IfcEdge, ObjectHelper<IfcSubedge,1> { IfcSubedge() : Object("IfcSubedge") {}
3529 Lazy< IfcEdge > ParentEdge;
3530 };
3531
3532 // C++ wrapper for IfcFilterType
3533 struct IfcFilterType : IfcFlowTreatmentDeviceType, ObjectHelper<IfcFilterType,1> { IfcFilterType() : Object("IfcFilterType") {}
3534 IfcFilterTypeEnum::Out PredefinedType;
3535 };
3536
3537 // C++ wrapper for IfcTendon
3538 struct IfcTendon : IfcReinforcingElement, ObjectHelper<IfcTendon,8> { IfcTendon() : Object("IfcTendon") {}
3539 IfcTendonTypeEnum::Out PredefinedType;
3540 IfcPositiveLengthMeasure::Out NominalDiameter;
3541 IfcAreaMeasure::Out CrossSectionArea;
3542 Maybe< IfcForceMeasure::Out > TensionForce;
3543 Maybe< IfcPressureMeasure::Out > PreStress;
3544 Maybe< IfcNormalisedRatioMeasure::Out > FrictionCoefficient;
3545 Maybe< IfcPositiveLengthMeasure::Out > AnchorageSlip;
3546 Maybe< IfcPositiveLengthMeasure::Out > MinCurvatureRadius;
3547 };
3548
3549 // C++ wrapper for IfcStructuralLoadGroup
3550 struct IfcStructuralLoadGroup : IfcGroup, ObjectHelper<IfcStructuralLoadGroup,5> { IfcStructuralLoadGroup() : Object("IfcStructuralLoadGroup") {}
3551 IfcLoadGroupTypeEnum::Out PredefinedType;
3552 IfcActionTypeEnum::Out ActionType;
3553 IfcActionSourceTypeEnum::Out ActionSource;
3554 Maybe< IfcPositiveRatioMeasure::Out > Coefficient;
3555 Maybe< IfcLabel::Out > Purpose;
3556 };
3557
3558 // C++ wrapper for IfcPresentationStyleAssignment
3559 struct IfcPresentationStyleAssignment : ObjectHelper<IfcPresentationStyleAssignment,1> { IfcPresentationStyleAssignment() : Object("IfcPresentationStyleAssignment") {}
3560 ListOf< IfcPresentationStyleSelect, 1, 0 >::Out Styles;
3561 };
3562
3563 // C++ wrapper for IfcStructuralCurveMember
3564 struct IfcStructuralCurveMember : IfcStructuralMember, ObjectHelper<IfcStructuralCurveMember,1> { IfcStructuralCurveMember() : Object("IfcStructuralCurveMember") {}
3565 IfcStructuralCurveTypeEnum::Out PredefinedType;
3566 };
3567
3568 // C++ wrapper for IfcLightSourceAmbient
3569 struct IfcLightSourceAmbient : IfcLightSource, ObjectHelper<IfcLightSourceAmbient,0> { IfcLightSourceAmbient() : Object("IfcLightSourceAmbient") {}
3570
3571 };
3572
3573 // C++ wrapper for IfcCondition
3574 struct IfcCondition : IfcGroup, ObjectHelper<IfcCondition,0> { IfcCondition() : Object("IfcCondition") {}
3575
3576 };
3577
3578 // C++ wrapper for IfcPort
3579 struct IfcPort : IfcProduct, ObjectHelper<IfcPort,0> { IfcPort() : Object("IfcPort") {}
3580
3581 };
3582
3583 // C++ wrapper for IfcSpace
3584 struct IfcSpace : IfcSpatialStructureElement, ObjectHelper<IfcSpace,2> { IfcSpace() : Object("IfcSpace") {}
3585 IfcInternalOrExternalEnum::Out InteriorOrExteriorSpace;
3586 Maybe< IfcLengthMeasure::Out > ElevationWithFlooring;
3587 };
3588
3589 // C++ wrapper for IfcHeatExchangerType
3590 struct IfcHeatExchangerType : IfcEnergyConversionDeviceType, ObjectHelper<IfcHeatExchangerType,1> { IfcHeatExchangerType() : Object("IfcHeatExchangerType") {}
3591 IfcHeatExchangerTypeEnum::Out PredefinedType;
3592 };
3593
3594 // C++ wrapper for IfcTankType
3595 struct IfcTankType : IfcFlowStorageDeviceType, ObjectHelper<IfcTankType,1> { IfcTankType() : Object("IfcTankType") {}
3596 IfcTankTypeEnum::Out PredefinedType;
37363597 };
37373598
37383599 // C++ wrapper for IfcInventory
37453606 Maybe< Lazy< NotImplemented > > OriginalValue;
37463607 };
37473608
3748 // C++ wrapper for IfcPolyline
3749 struct IfcPolyline : IfcBoundedCurve, ObjectHelper<IfcPolyline,1> { IfcPolyline() : Object("IfcPolyline") {}
3750 ListOf< Lazy< IfcCartesianPoint >, 2, 0 > Points;
3751 };
3752
3753 // C++ wrapper for IfcBoxedHalfSpace
3754 struct IfcBoxedHalfSpace : IfcHalfSpaceSolid, ObjectHelper<IfcBoxedHalfSpace,1> { IfcBoxedHalfSpace() : Object("IfcBoxedHalfSpace") {}
3755 Lazy< IfcBoundingBox > Enclosure;
3756 };
3757
3758 // C++ wrapper for IfcAirTerminalType
3759 struct IfcAirTerminalType : IfcFlowTerminalType, ObjectHelper<IfcAirTerminalType,1> { IfcAirTerminalType() : Object("IfcAirTerminalType") {}
3760 IfcAirTerminalTypeEnum::Out PredefinedType;
3761 };
3762
3763 // C++ wrapper for IfcDistributionPort
3764 struct IfcDistributionPort : IfcPort, ObjectHelper<IfcDistributionPort,1> { IfcDistributionPort() : Object("IfcDistributionPort") {}
3765 Maybe< IfcFlowDirectionEnum::Out > FlowDirection;
3766 };
3767
3768 // C++ wrapper for IfcCostItem
3769 struct IfcCostItem : IfcControl, ObjectHelper<IfcCostItem,0> { IfcCostItem() : Object("IfcCostItem") {}
3770
3771 };
3772
3773 // C++ wrapper for IfcStructuredDimensionCallout
3774 struct IfcStructuredDimensionCallout : IfcDraughtingCallout, ObjectHelper<IfcStructuredDimensionCallout,0> { IfcStructuredDimensionCallout() : Object("IfcStructuredDimensionCallout") {}
3775
3609 // C++ wrapper for IfcTransportElementType
3610 struct IfcTransportElementType : IfcElementType, ObjectHelper<IfcTransportElementType,1> { IfcTransportElementType() : Object("IfcTransportElementType") {}
3611 IfcTransportElementTypeEnum::Out PredefinedType;
3612 };
3613
3614 // C++ wrapper for IfcAirToAirHeatRecoveryType
3615 struct IfcAirToAirHeatRecoveryType : IfcEnergyConversionDeviceType, ObjectHelper<IfcAirToAirHeatRecoveryType,1> { IfcAirToAirHeatRecoveryType() : Object("IfcAirToAirHeatRecoveryType") {}
3616 IfcAirToAirHeatRecoveryTypeEnum::Out PredefinedType;
3617 };
3618
3619 // C++ wrapper for IfcStairFlight
3620 struct IfcStairFlight : IfcBuildingElement, ObjectHelper<IfcStairFlight,4> { IfcStairFlight() : Object("IfcStairFlight") {}
3621 Maybe< INTEGER::Out > NumberOfRiser;
3622 Maybe< INTEGER::Out > NumberOfTreads;
3623 Maybe< IfcPositiveLengthMeasure::Out > RiserHeight;
3624 Maybe< IfcPositiveLengthMeasure::Out > TreadLength;
3625 };
3626
3627 // C++ wrapper for IfcElectricalElement
3628 struct IfcElectricalElement : IfcElement, ObjectHelper<IfcElectricalElement,0> { IfcElectricalElement() : Object("IfcElectricalElement") {}
3629
3630 };
3631
3632 // C++ wrapper for IfcSurfaceStyleWithTextures
3633 struct IfcSurfaceStyleWithTextures : ObjectHelper<IfcSurfaceStyleWithTextures,1> { IfcSurfaceStyleWithTextures() : Object("IfcSurfaceStyleWithTextures") {}
3634 ListOf< Lazy< NotImplemented >, 1, 0 > Textures;
3635 };
3636
3637 // C++ wrapper for IfcBoundingBox
3638 struct IfcBoundingBox : IfcGeometricRepresentationItem, ObjectHelper<IfcBoundingBox,4> { IfcBoundingBox() : Object("IfcBoundingBox") {}
3639 Lazy< IfcCartesianPoint > Corner;
3640 IfcPositiveLengthMeasure::Out XDim;
3641 IfcPositiveLengthMeasure::Out YDim;
3642 IfcPositiveLengthMeasure::Out ZDim;
3643 };
3644
3645 // C++ wrapper for IfcWallType
3646 struct IfcWallType : IfcBuildingElementType, ObjectHelper<IfcWallType,1> { IfcWallType() : Object("IfcWallType") {}
3647 IfcWallTypeEnum::Out PredefinedType;
3648 };
3649
3650 // C++ wrapper for IfcMove
3651 struct IfcMove : IfcTask, ObjectHelper<IfcMove,3> { IfcMove() : Object("IfcMove") {}
3652 Lazy< IfcSpatialStructureElement > MoveFrom;
3653 Lazy< IfcSpatialStructureElement > MoveTo;
3654 Maybe< ListOf< IfcText, 1, 0 >::Out > PunchList;
3655 };
3656
3657 // C++ wrapper for IfcCircle
3658 struct IfcCircle : IfcConic, ObjectHelper<IfcCircle,1> { IfcCircle() : Object("IfcCircle") {}
3659 IfcPositiveLengthMeasure::Out Radius;
3660 };
3661
3662 // C++ wrapper for IfcOffsetCurve2D
3663 struct IfcOffsetCurve2D : IfcCurve, ObjectHelper<IfcOffsetCurve2D,3> { IfcOffsetCurve2D() : Object("IfcOffsetCurve2D") {}
3664 Lazy< IfcCurve > BasisCurve;
3665 IfcLengthMeasure::Out Distance;
3666 LOGICAL::Out SelfIntersect;
3667 };
3668
3669 // C++ wrapper for IfcPointOnCurve
3670 struct IfcPointOnCurve : IfcPoint, ObjectHelper<IfcPointOnCurve,2> { IfcPointOnCurve() : Object("IfcPointOnCurve") {}
3671 Lazy< IfcCurve > BasisCurve;
3672 IfcParameterValue::Out PointParameter;
37763673 };
37773674
37783675 // C++ wrapper for IfcStructuralResultGroup
37823679 BOOLEAN::Out IsLinear;
37833680 };
37843681
3785 // C++ wrapper for IfcOrientedEdge
3786 struct IfcOrientedEdge : IfcEdge, ObjectHelper<IfcOrientedEdge,2> { IfcOrientedEdge() : Object("IfcOrientedEdge") {}
3787 Lazy< IfcEdge > EdgeElement;
3788 BOOLEAN::Out Orientation;
3682 // C++ wrapper for IfcSectionedSpine
3683 struct IfcSectionedSpine : IfcGeometricRepresentationItem, ObjectHelper<IfcSectionedSpine,3> { IfcSectionedSpine() : Object("IfcSectionedSpine") {}
3684 Lazy< IfcCompositeCurve > SpineCurve;
3685 ListOf< Lazy< IfcProfileDef >, 2, 0 > CrossSections;
3686 ListOf< Lazy< IfcAxis2Placement3D >, 2, 0 > CrossSectionPositions;
3687 };
3688
3689 // C++ wrapper for IfcSlab
3690 struct IfcSlab : IfcBuildingElement, ObjectHelper<IfcSlab,1> { IfcSlab() : Object("IfcSlab") {}
3691 Maybe< IfcSlabTypeEnum::Out > PredefinedType;
3692 };
3693
3694 // C++ wrapper for IfcVertex
3695 struct IfcVertex : IfcTopologicalRepresentationItem, ObjectHelper<IfcVertex,0> { IfcVertex() : Object("IfcVertex") {}
3696
3697 };
3698
3699 // C++ wrapper for IfcVertexPoint
3700 struct IfcVertexPoint : IfcVertex, ObjectHelper<IfcVertexPoint,1> { IfcVertexPoint() : Object("IfcVertexPoint") {}
3701 Lazy< IfcPoint > VertexGeometry;
3702 };
3703
3704 // C++ wrapper for IfcStructuralLinearAction
3705 struct IfcStructuralLinearAction : IfcStructuralAction, ObjectHelper<IfcStructuralLinearAction,1> { IfcStructuralLinearAction() : Object("IfcStructuralLinearAction") {}
3706 IfcProjectedOrTrueLengthEnum::Out ProjectedOrTrue;
3707 };
3708
3709 // C++ wrapper for IfcStructuralLinearActionVarying
3710 struct IfcStructuralLinearActionVarying : IfcStructuralLinearAction, ObjectHelper<IfcStructuralLinearActionVarying,2> { IfcStructuralLinearActionVarying() : Object("IfcStructuralLinearActionVarying") {}
3711 Lazy< NotImplemented > VaryingAppliedLoadLocation;
3712 ListOf< Lazy< NotImplemented >, 1, 0 > SubsequentAppliedLoads;
3713 };
3714
3715 // C++ wrapper for IfcBuildingElementProxyType
3716 struct IfcBuildingElementProxyType : IfcBuildingElementType, ObjectHelper<IfcBuildingElementProxyType,1> { IfcBuildingElementProxyType() : Object("IfcBuildingElementProxyType") {}
3717 IfcBuildingElementProxyTypeEnum::Out PredefinedType;
3718 };
3719
3720 // C++ wrapper for IfcProjectionElement
3721 struct IfcProjectionElement : IfcFeatureElementAddition, ObjectHelper<IfcProjectionElement,0> { IfcProjectionElement() : Object("IfcProjectionElement") {}
3722
3723 };
3724
3725 // C++ wrapper for IfcConversionBasedUnit
3726 struct IfcConversionBasedUnit : IfcNamedUnit, ObjectHelper<IfcConversionBasedUnit,2> { IfcConversionBasedUnit() : Object("IfcConversionBasedUnit") {}
3727 IfcLabel::Out Name;
3728 Lazy< IfcMeasureWithUnit > ConversionFactor;
3729 };
3730
3731 // C++ wrapper for IfcGeometricRepresentationSubContext
3732 struct IfcGeometricRepresentationSubContext : IfcGeometricRepresentationContext, ObjectHelper<IfcGeometricRepresentationSubContext,4> { IfcGeometricRepresentationSubContext() : Object("IfcGeometricRepresentationSubContext") {}
3733 Lazy< IfcGeometricRepresentationContext > ParentContext;
3734 Maybe< IfcPositiveRatioMeasure::Out > TargetScale;
3735 IfcGeometricProjectionEnum::Out TargetView;
3736 Maybe< IfcLabel::Out > UserDefinedTargetView;
3737 };
3738
3739 // C++ wrapper for IfcAnnotationSurfaceOccurrence
3740 struct IfcAnnotationSurfaceOccurrence : IfcAnnotationOccurrence, ObjectHelper<IfcAnnotationSurfaceOccurrence,0> { IfcAnnotationSurfaceOccurrence() : Object("IfcAnnotationSurfaceOccurrence") {}
3741
3742 };
3743
3744 // C++ wrapper for IfcRoundedEdgeFeature
3745 struct IfcRoundedEdgeFeature : IfcEdgeFeature, ObjectHelper<IfcRoundedEdgeFeature,1> { IfcRoundedEdgeFeature() : Object("IfcRoundedEdgeFeature") {}
3746 Maybe< IfcPositiveLengthMeasure::Out > Radius;
3747 };
3748
3749 // C++ wrapper for IfcElectricDistributionPoint
3750 struct IfcElectricDistributionPoint : IfcFlowController, ObjectHelper<IfcElectricDistributionPoint,2> { IfcElectricDistributionPoint() : Object("IfcElectricDistributionPoint") {}
3751 IfcElectricDistributionPointFunctionEnum::Out DistributionPointFunction;
3752 Maybe< IfcLabel::Out > UserDefinedFunction;
3753 };
3754
3755 // C++ wrapper for IfcCableCarrierSegmentType
3756 struct IfcCableCarrierSegmentType : IfcFlowSegmentType, ObjectHelper<IfcCableCarrierSegmentType,1> { IfcCableCarrierSegmentType() : Object("IfcCableCarrierSegmentType") {}
3757 IfcCableCarrierSegmentTypeEnum::Out PredefinedType;
3758 };
3759
3760 // C++ wrapper for IfcWallStandardCase
3761 struct IfcWallStandardCase : IfcWall, ObjectHelper<IfcWallStandardCase,0> { IfcWallStandardCase() : Object("IfcWallStandardCase") {}
3762
37893763 };
37903764
37913765 // C++ wrapper for IfcCsgSolid
37933767 IfcCsgSelect::Out TreeRootExpression;
37943768 };
37953769
3796 // C++ wrapper for IfcPlanarBox
3797 struct IfcPlanarBox : IfcPlanarExtent, ObjectHelper<IfcPlanarBox,1> { IfcPlanarBox() : Object("IfcPlanarBox") {}
3798 IfcAxis2Placement::Out Placement;
3799 };
3800
3801 // C++ wrapper for IfcMaterialDefinitionRepresentation
3802 struct IfcMaterialDefinitionRepresentation : IfcProductRepresentation, ObjectHelper<IfcMaterialDefinitionRepresentation,1> { IfcMaterialDefinitionRepresentation() : Object("IfcMaterialDefinitionRepresentation") {}
3803 Lazy< NotImplemented > RepresentedMaterial;
3804 };
3805
3806 // C++ wrapper for IfcAsymmetricIShapeProfileDef
3807 struct IfcAsymmetricIShapeProfileDef : IfcIShapeProfileDef, ObjectHelper<IfcAsymmetricIShapeProfileDef,4> { IfcAsymmetricIShapeProfileDef() : Object("IfcAsymmetricIShapeProfileDef") {}
3808 IfcPositiveLengthMeasure::Out TopFlangeWidth;
3809 Maybe< IfcPositiveLengthMeasure::Out > TopFlangeThickness;
3810 Maybe< IfcPositiveLengthMeasure::Out > TopFlangeFilletRadius;
3811 Maybe< IfcPositiveLengthMeasure::Out > CentreOfGravityInY;
3812 };
3813
3814 // C++ wrapper for IfcRepresentationMap
3815 struct IfcRepresentationMap : ObjectHelper<IfcRepresentationMap,2> { IfcRepresentationMap() : Object("IfcRepresentationMap") {}
3816 IfcAxis2Placement::Out MappingOrigin;
3817 Lazy< IfcRepresentation > MappedRepresentation;
3770 // C++ wrapper for IfcBeamType
3771 struct IfcBeamType : IfcBuildingElementType, ObjectHelper<IfcBeamType,1> { IfcBeamType() : Object("IfcBeamType") {}
3772 IfcBeamTypeEnum::Out PredefinedType;
3773 };
3774
3775 // C++ wrapper for IfcAnnotationFillArea
3776 struct IfcAnnotationFillArea : IfcGeometricRepresentationItem, ObjectHelper<IfcAnnotationFillArea,2> { IfcAnnotationFillArea() : Object("IfcAnnotationFillArea") {}
3777 Lazy< IfcCurve > OuterBoundary;
3778 Maybe< ListOf< Lazy< IfcCurve >, 1, 0 > > InnerBoundaries;
3779 };
3780
3781 // C++ wrapper for IfcStructuralCurveMemberVarying
3782 struct IfcStructuralCurveMemberVarying : IfcStructuralCurveMember, ObjectHelper<IfcStructuralCurveMemberVarying,0> { IfcStructuralCurveMemberVarying() : Object("IfcStructuralCurveMemberVarying") {}
3783
3784 };
3785
3786 // C++ wrapper for IfcPointOnSurface
3787 struct IfcPointOnSurface : IfcPoint, ObjectHelper<IfcPointOnSurface,3> { IfcPointOnSurface() : Object("IfcPointOnSurface") {}
3788 Lazy< IfcSurface > BasisSurface;
3789 IfcParameterValue::Out PointParameterU;
3790 IfcParameterValue::Out PointParameterV;
3791 };
3792
3793 // C++ wrapper for IfcOrderAction
3794 struct IfcOrderAction : IfcTask, ObjectHelper<IfcOrderAction,1> { IfcOrderAction() : Object("IfcOrderAction") {}
3795 IfcIdentifier::Out ActionID;
3796 };
3797
3798 // C++ wrapper for IfcEdgeLoop
3799 struct IfcEdgeLoop : IfcLoop, ObjectHelper<IfcEdgeLoop,1> { IfcEdgeLoop() : Object("IfcEdgeLoop") {}
3800 ListOf< Lazy< IfcOrientedEdge >, 1, 0 > EdgeList;
3801 };
3802
3803 // C++ wrapper for IfcAnnotationFillAreaOccurrence
3804 struct IfcAnnotationFillAreaOccurrence : IfcAnnotationOccurrence, ObjectHelper<IfcAnnotationFillAreaOccurrence,2> { IfcAnnotationFillAreaOccurrence() : Object("IfcAnnotationFillAreaOccurrence") {}
3805 Maybe< Lazy< IfcPoint > > FillStyleTarget;
3806 Maybe< IfcGlobalOrLocalEnum::Out > GlobalOrLocal;
3807 };
3808
3809 // C++ wrapper for IfcWorkPlan
3810 struct IfcWorkPlan : IfcWorkControl, ObjectHelper<IfcWorkPlan,0> { IfcWorkPlan() : Object("IfcWorkPlan") {}
3811
3812 };
3813
3814 // C++ wrapper for IfcEllipse
3815 struct IfcEllipse : IfcConic, ObjectHelper<IfcEllipse,2> { IfcEllipse() : Object("IfcEllipse") {}
3816 IfcPositiveLengthMeasure::Out SemiAxis1;
3817 IfcPositiveLengthMeasure::Out SemiAxis2;
3818 };
3819
3820 // C++ wrapper for IfcProductDefinitionShape
3821 struct IfcProductDefinitionShape : IfcProductRepresentation, ObjectHelper<IfcProductDefinitionShape,0> { IfcProductDefinitionShape() : Object("IfcProductDefinitionShape") {}
3822
3823 };
3824
3825 // C++ wrapper for IfcProjectionCurve
3826 struct IfcProjectionCurve : IfcAnnotationCurveOccurrence, ObjectHelper<IfcProjectionCurve,0> { IfcProjectionCurve() : Object("IfcProjectionCurve") {}
3827
3828 };
3829
3830 // C++ wrapper for IfcElectricalCircuit
3831 struct IfcElectricalCircuit : IfcSystem, ObjectHelper<IfcElectricalCircuit,0> { IfcElectricalCircuit() : Object("IfcElectricalCircuit") {}
3832
3833 };
3834
3835 // C++ wrapper for IfcRationalBezierCurve
3836 struct IfcRationalBezierCurve : IfcBezierCurve, ObjectHelper<IfcRationalBezierCurve,1> { IfcRationalBezierCurve() : Object("IfcRationalBezierCurve") {}
3837 ListOf< REAL, 2, 0 >::Out WeightsData;
3838 };
3839
3840 // C++ wrapper for IfcStructuralPointAction
3841 struct IfcStructuralPointAction : IfcStructuralAction, ObjectHelper<IfcStructuralPointAction,0> { IfcStructuralPointAction() : Object("IfcStructuralPointAction") {}
3842
3843 };
3844
3845 // C++ wrapper for IfcPipeSegmentType
3846 struct IfcPipeSegmentType : IfcFlowSegmentType, ObjectHelper<IfcPipeSegmentType,1> { IfcPipeSegmentType() : Object("IfcPipeSegmentType") {}
3847 IfcPipeSegmentTypeEnum::Out PredefinedType;
3848 };
3849
3850 // C++ wrapper for IfcTwoDirectionRepeatFactor
3851 struct IfcTwoDirectionRepeatFactor : IfcOneDirectionRepeatFactor, ObjectHelper<IfcTwoDirectionRepeatFactor,1> { IfcTwoDirectionRepeatFactor() : Object("IfcTwoDirectionRepeatFactor") {}
3852 Lazy< IfcVector > SecondRepeatFactor;
3853 };
3854
3855 // C++ wrapper for IfcShapeRepresentation
3856 struct IfcShapeRepresentation : IfcShapeModel, ObjectHelper<IfcShapeRepresentation,0> { IfcShapeRepresentation() : Object("IfcShapeRepresentation") {}
3857
3858 };
3859
3860 // C++ wrapper for IfcPropertySet
3861 struct IfcPropertySet : IfcPropertySetDefinition, ObjectHelper<IfcPropertySet,1> { IfcPropertySet() : Object("IfcPropertySet") {}
3862 ListOf< Lazy< IfcProperty >, 1, 0 > HasProperties;
3863 };
3864
3865 // C++ wrapper for IfcSurfaceStyleRendering
3866 struct IfcSurfaceStyleRendering : IfcSurfaceStyleShading, ObjectHelper<IfcSurfaceStyleRendering,8> { IfcSurfaceStyleRendering() : Object("IfcSurfaceStyleRendering") {}
3867 Maybe< IfcNormalisedRatioMeasure::Out > Transparency;
3868 Maybe< IfcColourOrFactor::Out > DiffuseColour;
3869 Maybe< IfcColourOrFactor::Out > TransmissionColour;
3870 Maybe< IfcColourOrFactor::Out > DiffuseTransmissionColour;
3871 Maybe< IfcColourOrFactor::Out > ReflectionColour;
3872 Maybe< IfcColourOrFactor::Out > SpecularColour;
3873 Maybe< IfcSpecularHighlightSelect::Out > SpecularHighlight;
3874 IfcReflectanceMethodEnum::Out ReflectanceMethod;
3875 };
3876
3877 // C++ wrapper for IfcDistributionPort
3878 struct IfcDistributionPort : IfcPort, ObjectHelper<IfcDistributionPort,1> { IfcDistributionPort() : Object("IfcDistributionPort") {}
3879 Maybe< IfcFlowDirectionEnum::Out > FlowDirection;
3880 };
3881
3882 // C++ wrapper for IfcPipeFittingType
3883 struct IfcPipeFittingType : IfcFlowFittingType, ObjectHelper<IfcPipeFittingType,1> { IfcPipeFittingType() : Object("IfcPipeFittingType") {}
3884 IfcPipeFittingTypeEnum::Out PredefinedType;
3885 };
3886
3887 // C++ wrapper for IfcTransportElement
3888 struct IfcTransportElement : IfcElement, ObjectHelper<IfcTransportElement,3> { IfcTransportElement() : Object("IfcTransportElement") {}
3889 Maybe< IfcTransportElementTypeEnum::Out > OperationType;
3890 Maybe< IfcMassMeasure::Out > CapacityByWeight;
3891 Maybe< IfcCountMeasure::Out > CapacityByNumber;
3892 };
3893
3894 // C++ wrapper for IfcAnnotationTextOccurrence
3895 struct IfcAnnotationTextOccurrence : IfcAnnotationOccurrence, ObjectHelper<IfcAnnotationTextOccurrence,0> { IfcAnnotationTextOccurrence() : Object("IfcAnnotationTextOccurrence") {}
3896
3897 };
3898
3899 // C++ wrapper for IfcStructuralAnalysisModel
3900 struct IfcStructuralAnalysisModel : IfcSystem, ObjectHelper<IfcStructuralAnalysisModel,4> { IfcStructuralAnalysisModel() : Object("IfcStructuralAnalysisModel") {}
3901 IfcAnalysisModelTypeEnum::Out PredefinedType;
3902 Maybe< Lazy< IfcAxis2Placement3D > > OrientationOf2DPlane;
3903 Maybe< ListOf< Lazy< IfcStructuralLoadGroup >, 1, 0 > > LoadedBy;
3904 Maybe< ListOf< Lazy< IfcStructuralResultGroup >, 1, 0 > > HasResults;
3905 };
3906
3907 // C++ wrapper for IfcConditionCriterion
3908 struct IfcConditionCriterion : IfcControl, ObjectHelper<IfcConditionCriterion,2> { IfcConditionCriterion() : Object("IfcConditionCriterion") {}
3909 IfcConditionCriterionSelect::Out Criterion;
3910 IfcDateTimeSelect::Out CriterionDateTime;
38183911 };
38193912
38203913 void GetSchema(EXPRESS::ConversionSchema& out);
38333926 DECL_CONV_STUB(IfcTypeObject);
38343927 DECL_CONV_STUB(IfcTypeProduct);
38353928 DECL_CONV_STUB(IfcElementType);
3836 DECL_CONV_STUB(IfcFurnishingElementType);
3837 DECL_CONV_STUB(IfcFurnitureType);
3929 DECL_CONV_STUB(IfcDistributionElementType);
3930 DECL_CONV_STUB(IfcDistributionFlowElementType);
3931 DECL_CONV_STUB(IfcFlowControllerType);
3932 DECL_CONV_STUB(IfcElectricTimeControlType);
3933 DECL_CONV_STUB(IfcRepresentation);
3934 DECL_CONV_STUB(IfcShapeModel);
3935 DECL_CONV_STUB(IfcTopologyRepresentation);
3936 DECL_CONV_STUB(IfcRelationship);
3937 DECL_CONV_STUB(IfcRelConnects);
3938 DECL_CONV_STUB(IfcFlowFittingType);
3939 DECL_CONV_STUB(IfcCableCarrierFittingType);
3940 DECL_CONV_STUB(IfcEnergyConversionDeviceType);
3941 DECL_CONV_STUB(IfcCoilType);
38383942 DECL_CONV_STUB(IfcObject);
3839 DECL_CONV_STUB(IfcProduct);
3840 DECL_CONV_STUB(IfcGrid);
3943 DECL_CONV_STUB(IfcControl);
3944 DECL_CONV_STUB(IfcPerformanceHistory);
38413945 DECL_CONV_STUB(IfcRepresentationItem);
38423946 DECL_CONV_STUB(IfcGeometricRepresentationItem);
3843 DECL_CONV_STUB(IfcOneDirectionRepeatFactor);
3844 DECL_CONV_STUB(IfcTwoDirectionRepeatFactor);
3947 DECL_CONV_STUB(IfcTextLiteral);
3948 DECL_CONV_STUB(IfcTextLiteralWithExtent);
3949 DECL_CONV_STUB(IfcProductRepresentation);
3950 DECL_CONV_STUB(IfcProduct);
38453951 DECL_CONV_STUB(IfcElement);
3846 DECL_CONV_STUB(IfcElementComponent);
3952 DECL_CONV_STUB(IfcDistributionElement);
3953 DECL_CONV_STUB(IfcDistributionFlowElement);
3954 DECL_CONV_STUB(IfcCurve);
3955 DECL_CONV_STUB(IfcBoundedCurve);
3956 DECL_CONV_STUB(IfcCompositeCurve);
3957 DECL_CONV_STUB(Ifc2DCompositeCurve);
3958 DECL_CONV_STUB(IfcCartesianTransformationOperator);
3959 DECL_CONV_STUB(IfcCartesianTransformationOperator3D);
3960 DECL_CONV_STUB(IfcProperty);
3961 DECL_CONV_STUB(IfcSimpleProperty);
3962 DECL_CONV_STUB(IfcPropertyEnumeratedValue);
3963 DECL_CONV_STUB(IfcBuildingElementType);
3964 DECL_CONV_STUB(IfcStairFlightType);
3965 DECL_CONV_STUB(IfcSurface);
3966 DECL_CONV_STUB(IfcElementarySurface);
3967 DECL_CONV_STUB(IfcPlane);
3968 DECL_CONV_STUB(IfcBooleanResult);
3969 DECL_CONV_STUB(IfcBooleanClippingResult);
3970 DECL_CONV_STUB(IfcSolidModel);
3971 DECL_CONV_STUB(IfcManifoldSolidBrep);
3972 DECL_CONV_STUB(IfcFlowTerminalType);
3973 DECL_CONV_STUB(IfcStackTerminalType);
3974 DECL_CONV_STUB(IfcStructuralItem);
3975 DECL_CONV_STUB(IfcStructuralConnection);
3976 DECL_CONV_STUB(IfcStructuralCurveConnection);
3977 DECL_CONV_STUB(IfcJunctionBoxType);
3978 DECL_CONV_STUB(IfcPropertyDefinition);
3979 DECL_CONV_STUB(IfcPropertySetDefinition);
3980 DECL_CONV_STUB(IfcProcess);
3981 DECL_CONV_STUB(IfcTask);
3982 DECL_CONV_STUB(IfcRelFillsElement);
3983 DECL_CONV_STUB(IfcProcedure);
3984 DECL_CONV_STUB(IfcProxy);
3985 DECL_CONV_STUB(IfcResource);
3986 DECL_CONV_STUB(IfcConstructionResource);
3987 DECL_CONV_STUB(IfcSubContractResource);
3988 DECL_CONV_STUB(IfcRelContainedInSpatialStructure);
3989 DECL_CONV_STUB(IfcTopologicalRepresentationItem);
3990 DECL_CONV_STUB(IfcEdge);
3991 DECL_CONV_STUB(IfcEdgeCurve);
3992 DECL_CONV_STUB(IfcPlateType);
3993 DECL_CONV_STUB(IfcObjectPlacement);
3994 DECL_CONV_STUB(IfcGridPlacement);
3995 DECL_CONV_STUB(IfcFireSuppressionTerminalType);
3996 DECL_CONV_STUB(IfcFlowStorageDevice);
3997 DECL_CONV_STUB(IfcSweptSurface);
3998 DECL_CONV_STUB(IfcSurfaceOfRevolution);
3999 DECL_CONV_STUB(IfcOrientedEdge);
4000 DECL_CONV_STUB(IfcDirection);
4001 DECL_CONV_STUB(IfcProfileDef);
4002 DECL_CONV_STUB(IfcParameterizedProfileDef);
4003 DECL_CONV_STUB(IfcCShapeProfileDef);
4004 DECL_CONV_STUB(IfcFeatureElement);
4005 DECL_CONV_STUB(IfcFeatureElementSubtraction);
4006 DECL_CONV_STUB(IfcEdgeFeature);
4007 DECL_CONV_STUB(IfcChamferEdgeFeature);
4008 DECL_CONV_STUB(IfcBuildingElement);
4009 DECL_CONV_STUB(IfcColumn);
4010 DECL_CONV_STUB(IfcPropertyReferenceValue);
4011 DECL_CONV_STUB(IfcElectricMotorType);
38474012 DECL_CONV_STUB(IfcSpatialStructureElementType);
3848 DECL_CONV_STUB(IfcControl);
3849 DECL_CONV_STUB(IfcActionRequest);
3850 DECL_CONV_STUB(IfcDistributionElementType);
3851 DECL_CONV_STUB(IfcDistributionFlowElementType);
3852 DECL_CONV_STUB(IfcEnergyConversionDeviceType);
3853 DECL_CONV_STUB(IfcCooledBeamType);
4013 DECL_CONV_STUB(IfcSpaceType);
4014 DECL_CONV_STUB(IfcColumnType);
4015 DECL_CONV_STUB(IfcCraneRailAShapeProfileDef);
4016 DECL_CONV_STUB(IfcCondenserType);
4017 DECL_CONV_STUB(IfcCircleProfileDef);
4018 DECL_CONV_STUB(IfcCircleHollowProfileDef);
4019 DECL_CONV_STUB(IfcPlacement);
4020 DECL_CONV_STUB(IfcAxis2Placement3D);
4021 DECL_CONV_STUB(IfcPresentationStyle);
4022 DECL_CONV_STUB(IfcEquipmentElement);
4023 DECL_CONV_STUB(IfcCompositeCurveSegment);
4024 DECL_CONV_STUB(IfcRectangleProfileDef);
4025 DECL_CONV_STUB(IfcBuildingElementProxy);
4026 DECL_CONV_STUB(IfcDistributionControlElementType);
4027 DECL_CONV_STUB(IfcFlowInstrumentType);
4028 DECL_CONV_STUB(IfcDraughtingCallout);
4029 DECL_CONV_STUB(IfcDimensionCurveDirectedCallout);
4030 DECL_CONV_STUB(IfcLinearDimension);
4031 DECL_CONV_STUB(IfcElementAssembly);
38544032 DECL_CONV_STUB(IfcCsgPrimitive3D);
3855 DECL_CONV_STUB(IfcRectangularPyramid);
3856 DECL_CONV_STUB(IfcSurface);
3857 DECL_CONV_STUB(IfcBoundedSurface);
3858 DECL_CONV_STUB(IfcRectangularTrimmedSurface);
3859 DECL_CONV_STUB(IfcGroup);
3860 DECL_CONV_STUB(IfcRelationship);
4033 DECL_CONV_STUB(IfcRightCircularCone);
4034 DECL_CONV_STUB(IfcProjectOrder);
4035 DECL_CONV_STUB(IfcLShapeProfileDef);
4036 DECL_CONV_STUB(IfcAngularDimension);
4037 DECL_CONV_STUB(IfcLocalPlacement);
4038 DECL_CONV_STUB(IfcSweptAreaSolid);
4039 DECL_CONV_STUB(IfcRevolvedAreaSolid);
4040 DECL_CONV_STUB(IfcStructuralSurfaceConnection);
4041 DECL_CONV_STUB(IfcRadiusDimension);
4042 DECL_CONV_STUB(IfcSweptDiskSolid);
38614043 DECL_CONV_STUB(IfcHalfSpaceSolid);
38624044 DECL_CONV_STUB(IfcPolygonalBoundedHalfSpace);
3863 DECL_CONV_STUB(IfcAirToAirHeatRecoveryType);
3864 DECL_CONV_STUB(IfcFlowFittingType);
3865 DECL_CONV_STUB(IfcPipeFittingType);
3866 DECL_CONV_STUB(IfcRepresentation);
4045 DECL_CONV_STUB(IfcTimeSeriesSchedule);
4046 DECL_CONV_STUB(IfcCooledBeamType);
4047 DECL_CONV_STUB(IfcProject);
4048 DECL_CONV_STUB(IfcEvaporatorType);
4049 DECL_CONV_STUB(IfcLaborResource);
4050 DECL_CONV_STUB(IfcPropertyBoundedValue);
4051 DECL_CONV_STUB(IfcRampFlightType);
4052 DECL_CONV_STUB(IfcMember);
4053 DECL_CONV_STUB(IfcTubeBundleType);
4054 DECL_CONV_STUB(IfcValveType);
4055 DECL_CONV_STUB(IfcTrimmedCurve);
4056 DECL_CONV_STUB(IfcRelDefines);
4057 DECL_CONV_STUB(IfcRelDefinesByProperties);
4058 DECL_CONV_STUB(IfcActor);
4059 DECL_CONV_STUB(IfcOccupant);
4060 DECL_CONV_STUB(IfcHumidifierType);
4061 DECL_CONV_STUB(IfcArbitraryOpenProfileDef);
4062 DECL_CONV_STUB(IfcPermit);
4063 DECL_CONV_STUB(IfcOffsetCurve3D);
4064 DECL_CONV_STUB(IfcLightSource);
4065 DECL_CONV_STUB(IfcLightSourcePositional);
4066 DECL_CONV_STUB(IfcCompositeProfileDef);
4067 DECL_CONV_STUB(IfcRamp);
4068 DECL_CONV_STUB(IfcFlowMovingDevice);
4069 DECL_CONV_STUB(IfcSpaceHeaterType);
4070 DECL_CONV_STUB(IfcLampType);
4071 DECL_CONV_STUB(IfcBuildingElementComponent);
4072 DECL_CONV_STUB(IfcReinforcingElement);
4073 DECL_CONV_STUB(IfcReinforcingBar);
4074 DECL_CONV_STUB(IfcElectricHeaterType);
4075 DECL_CONV_STUB(IfcTShapeProfileDef);
4076 DECL_CONV_STUB(IfcStructuralActivity);
4077 DECL_CONV_STUB(IfcStructuralAction);
4078 DECL_CONV_STUB(IfcDuctFittingType);
4079 DECL_CONV_STUB(IfcCartesianTransformationOperator2D);
4080 DECL_CONV_STUB(IfcCartesianTransformationOperator2DnonUniform);
4081 DECL_CONV_STUB(IfcVirtualElement);
4082 DECL_CONV_STUB(IfcRightCircularCylinder);
4083 DECL_CONV_STUB(IfcOutletType);
4084 DECL_CONV_STUB(IfcRelDecomposes);
4085 DECL_CONV_STUB(IfcCovering);
4086 DECL_CONV_STUB(IfcPolyline);
4087 DECL_CONV_STUB(IfcPath);
4088 DECL_CONV_STUB(IfcElementComponent);
4089 DECL_CONV_STUB(IfcFastener);
4090 DECL_CONV_STUB(IfcMappedItem);
4091 DECL_CONV_STUB(IfcRectangularPyramid);
4092 DECL_CONV_STUB(IfcCrewResource);
4093 DECL_CONV_STUB(IfcNamedUnit);
4094 DECL_CONV_STUB(IfcContextDependentUnit);
4095 DECL_CONV_STUB(IfcUnitaryEquipmentType);
4096 DECL_CONV_STUB(IfcRoof);
4097 DECL_CONV_STUB(IfcStructuralMember);
38674098 DECL_CONV_STUB(IfcStyleModel);
38684099 DECL_CONV_STUB(IfcStyledRepresentation);
3869 DECL_CONV_STUB(IfcBooleanResult);
3870 DECL_CONV_STUB(IfcFeatureElement);
3871 DECL_CONV_STUB(IfcFeatureElementSubtraction);
3872 DECL_CONV_STUB(IfcOpeningElement);
3873 DECL_CONV_STUB(IfcConditionCriterion);
3874 DECL_CONV_STUB(IfcFlowTerminalType);
3875 DECL_CONV_STUB(IfcFlowControllerType);
3876 DECL_CONV_STUB(IfcSwitchingDeviceType);
3877 DECL_CONV_STUB(IfcSystem);
3878 DECL_CONV_STUB(IfcElectricalCircuit);
3879 DECL_CONV_STUB(IfcUnitaryEquipmentType);
3880 DECL_CONV_STUB(IfcPort);
3881 DECL_CONV_STUB(IfcPlacement);
3882 DECL_CONV_STUB(IfcProfileDef);
3883 DECL_CONV_STUB(IfcArbitraryClosedProfileDef);
3884 DECL_CONV_STUB(IfcCurve);
4100 DECL_CONV_STUB(IfcSpatialStructureElement);
4101 DECL_CONV_STUB(IfcBuilding);
4102 DECL_CONV_STUB(IfcConnectedFaceSet);
4103 DECL_CONV_STUB(IfcOpenShell);
4104 DECL_CONV_STUB(IfcFacetedBrep);
38854105 DECL_CONV_STUB(IfcConic);
3886 DECL_CONV_STUB(IfcCircle);
3887 DECL_CONV_STUB(IfcElementarySurface);
3888 DECL_CONV_STUB(IfcPlane);
3889 DECL_CONV_STUB(IfcCostSchedule);
3890 DECL_CONV_STUB(IfcRightCircularCone);
3891 DECL_CONV_STUB(IfcElementAssembly);
3892 DECL_CONV_STUB(IfcBuildingElement);
3893 DECL_CONV_STUB(IfcMember);
3894 DECL_CONV_STUB(IfcBuildingElementProxy);
3895 DECL_CONV_STUB(IfcStructuralActivity);
3896 DECL_CONV_STUB(IfcStructuralAction);
3897 DECL_CONV_STUB(IfcStructuralPlanarAction);
3898 DECL_CONV_STUB(IfcTopologicalRepresentationItem);
3899 DECL_CONV_STUB(IfcConnectedFaceSet);
3900 DECL_CONV_STUB(IfcSweptSurface);
3901 DECL_CONV_STUB(IfcSurfaceOfLinearExtrusion);
3902 DECL_CONV_STUB(IfcArbitraryProfileDefWithVoids);
3903 DECL_CONV_STUB(IfcProcess);
3904 DECL_CONV_STUB(IfcProcedure);
3905 DECL_CONV_STUB(IfcVector);
3906 DECL_CONV_STUB(IfcFaceBound);
3907 DECL_CONV_STUB(IfcFaceOuterBound);
3908 DECL_CONV_STUB(IfcFeatureElementAddition);
3909 DECL_CONV_STUB(IfcNamedUnit);
3910 DECL_CONV_STUB(IfcConversionBasedUnit);
3911 DECL_CONV_STUB(IfcHeatExchangerType);
3912 DECL_CONV_STUB(IfcPresentationStyleAssignment);
3913 DECL_CONV_STUB(IfcFlowTreatmentDeviceType);
3914 DECL_CONV_STUB(IfcFilterType);
3915 DECL_CONV_STUB(IfcResource);
3916 DECL_CONV_STUB(IfcEvaporativeCoolerType);
3917 DECL_CONV_STUB(IfcOffsetCurve2D);
3918 DECL_CONV_STUB(IfcEdge);
3919 DECL_CONV_STUB(IfcSubedge);
3920 DECL_CONV_STUB(IfcProxy);
3921 DECL_CONV_STUB(IfcLine);
3922 DECL_CONV_STUB(IfcColumn);
3923 DECL_CONV_STUB(IfcObjectPlacement);
3924 DECL_CONV_STUB(IfcGridPlacement);
3925 DECL_CONV_STUB(IfcDistributionControlElementType);
3926 DECL_CONV_STUB(IfcRelConnects);
3927 DECL_CONV_STUB(IfcAnnotation);
3928 DECL_CONV_STUB(IfcPlate);
3929 DECL_CONV_STUB(IfcSolidModel);
3930 DECL_CONV_STUB(IfcManifoldSolidBrep);
3931 DECL_CONV_STUB(IfcFlowStorageDeviceType);
3932 DECL_CONV_STUB(IfcStructuralItem);
3933 DECL_CONV_STUB(IfcStructuralMember);
3934 DECL_CONV_STUB(IfcStructuralCurveMember);
3935 DECL_CONV_STUB(IfcStructuralConnection);
3936 DECL_CONV_STUB(IfcStructuralSurfaceConnection);
3937 DECL_CONV_STUB(IfcCoilType);
3938 DECL_CONV_STUB(IfcDuctFittingType);
4106 DECL_CONV_STUB(IfcCoveringType);
4107 DECL_CONV_STUB(IfcRoundedRectangleProfileDef);
4108 DECL_CONV_STUB(IfcAirTerminalType);
4109 DECL_CONV_STUB(IfcFlowMovingDeviceType);
4110 DECL_CONV_STUB(IfcCompressorType);
4111 DECL_CONV_STUB(IfcIShapeProfileDef);
4112 DECL_CONV_STUB(IfcAsymmetricIShapeProfileDef);
4113 DECL_CONV_STUB(IfcControllerType);
4114 DECL_CONV_STUB(IfcRailing);
4115 DECL_CONV_STUB(IfcGroup);
4116 DECL_CONV_STUB(IfcAsset);
4117 DECL_CONV_STUB(IfcMaterialDefinitionRepresentation);
4118 DECL_CONV_STUB(IfcRailingType);
4119 DECL_CONV_STUB(IfcWall);
4120 DECL_CONV_STUB(IfcStructuralPointConnection);
4121 DECL_CONV_STUB(IfcPropertyListValue);
4122 DECL_CONV_STUB(IfcFurnitureStandard);
4123 DECL_CONV_STUB(IfcElectricGeneratorType);
4124 DECL_CONV_STUB(IfcDoor);
39394125 DECL_CONV_STUB(IfcStyledItem);
39404126 DECL_CONV_STUB(IfcAnnotationOccurrence);
3941 DECL_CONV_STUB(IfcAnnotationCurveOccurrence);
3942 DECL_CONV_STUB(IfcDimensionCurve);
3943 DECL_CONV_STUB(IfcBoundedCurve);
3944 DECL_CONV_STUB(IfcAxis1Placement);
3945 DECL_CONV_STUB(IfcStructuralPointAction);
3946 DECL_CONV_STUB(IfcSpatialStructureElement);
3947 DECL_CONV_STUB(IfcSpace);
3948 DECL_CONV_STUB(IfcContextDependentUnit);
3949 DECL_CONV_STUB(IfcCoolingTowerType);
3950 DECL_CONV_STUB(IfcFacetedBrepWithVoids);
3951 DECL_CONV_STUB(IfcValveType);
3952 DECL_CONV_STUB(IfcSystemFurnitureElementType);
3953 DECL_CONV_STUB(IfcDiscreteAccessory);
3954 DECL_CONV_STUB(IfcBuildingElementType);
3955 DECL_CONV_STUB(IfcRailingType);
3956 DECL_CONV_STUB(IfcGasTerminalType);
3957 DECL_CONV_STUB(IfcSpaceProgram);
3958 DECL_CONV_STUB(IfcCovering);
3959 DECL_CONV_STUB(IfcPresentationStyle);
3960 DECL_CONV_STUB(IfcElectricHeaterType);
3961 DECL_CONV_STUB(IfcBuildingStorey);
3962 DECL_CONV_STUB(IfcVertex);
3963 DECL_CONV_STUB(IfcVertexPoint);
3964 DECL_CONV_STUB(IfcFlowInstrumentType);
3965 DECL_CONV_STUB(IfcParameterizedProfileDef);
3966 DECL_CONV_STUB(IfcUShapeProfileDef);
3967 DECL_CONV_STUB(IfcRamp);
3968 DECL_CONV_STUB(IfcCompositeCurve);
3969 DECL_CONV_STUB(IfcStructuralCurveMemberVarying);
3970 DECL_CONV_STUB(IfcRampFlightType);
3971 DECL_CONV_STUB(IfcDraughtingCallout);
3972 DECL_CONV_STUB(IfcDimensionCurveDirectedCallout);
3973 DECL_CONV_STUB(IfcRadiusDimension);
3974 DECL_CONV_STUB(IfcEdgeFeature);
3975 DECL_CONV_STUB(IfcSweptAreaSolid);
3976 DECL_CONV_STUB(IfcExtrudedAreaSolid);
3977 DECL_CONV_STUB(IfcAnnotationTextOccurrence);
4127 DECL_CONV_STUB(IfcAnnotationSymbolOccurrence);
4128 DECL_CONV_STUB(IfcArbitraryClosedProfileDef);
4129 DECL_CONV_STUB(IfcArbitraryProfileDefWithVoids);
4130 DECL_CONV_STUB(IfcLine);
4131 DECL_CONV_STUB(IfcFlowSegmentType);
4132 DECL_CONV_STUB(IfcAirTerminalBoxType);
4133 DECL_CONV_STUB(IfcPropertySingleValue);
4134 DECL_CONV_STUB(IfcAlarmType);
4135 DECL_CONV_STUB(IfcEllipseProfileDef);
39784136 DECL_CONV_STUB(IfcStair);
3979 DECL_CONV_STUB(IfcFillAreaStyleTileSymbolWithStyle);
3980 DECL_CONV_STUB(IfcAnnotationSymbolOccurrence);
3981 DECL_CONV_STUB(IfcTerminatorSymbol);
3982 DECL_CONV_STUB(IfcDimensionCurveTerminator);
3983 DECL_CONV_STUB(IfcRectangleProfileDef);
3984 DECL_CONV_STUB(IfcRectangleHollowProfileDef);
3985 DECL_CONV_STUB(IfcLocalPlacement);
3986 DECL_CONV_STUB(IfcTask);
3987 DECL_CONV_STUB(IfcAnnotationFillAreaOccurrence);
3988 DECL_CONV_STUB(IfcFace);
3989 DECL_CONV_STUB(IfcFlowSegmentType);
3990 DECL_CONV_STUB(IfcDuctSegmentType);
3991 DECL_CONV_STUB(IfcConstructionResource);
3992 DECL_CONV_STUB(IfcConstructionEquipmentResource);
3993 DECL_CONV_STUB(IfcSanitaryTerminalType);
3994 DECL_CONV_STUB(IfcCircleProfileDef);
3995 DECL_CONV_STUB(IfcStructuralReaction);
3996 DECL_CONV_STUB(IfcStructuralPointReaction);
3997 DECL_CONV_STUB(IfcRailing);
3998 DECL_CONV_STUB(IfcTextLiteral);
3999 DECL_CONV_STUB(IfcCartesianTransformationOperator);
4000 DECL_CONV_STUB(IfcLinearDimension);
4001 DECL_CONV_STUB(IfcDamperType);
4002 DECL_CONV_STUB(IfcSIUnit);
4003 DECL_CONV_STUB(IfcMeasureWithUnit);
4004 DECL_CONV_STUB(IfcDistributionElement);
4005 DECL_CONV_STUB(IfcDistributionControlElement);
4006 DECL_CONV_STUB(IfcTransformerType);
4007 DECL_CONV_STUB(IfcLaborResource);
4008 DECL_CONV_STUB(IfcDerivedProfileDef);
4009 DECL_CONV_STUB(IfcFurnitureStandard);
4010 DECL_CONV_STUB(IfcStairFlightType);
4011 DECL_CONV_STUB(IfcWorkControl);
4012 DECL_CONV_STUB(IfcWorkPlan);
4013 DECL_CONV_STUB(IfcCondition);
4014 DECL_CONV_STUB(IfcRelVoidsElement);
4015 DECL_CONV_STUB(IfcWindow);
4016 DECL_CONV_STUB(IfcProtectiveDeviceType);
4017 DECL_CONV_STUB(IfcJunctionBoxType);
4018 DECL_CONV_STUB(IfcStructuralAnalysisModel);
4019 DECL_CONV_STUB(IfcAxis2Placement2D);
4020 DECL_CONV_STUB(IfcSpaceType);
4021 DECL_CONV_STUB(IfcEllipseProfileDef);
4022 DECL_CONV_STUB(IfcDistributionFlowElement);
4023 DECL_CONV_STUB(IfcFlowMovingDevice);
4024 DECL_CONV_STUB(IfcSurfaceStyleWithTextures);
4025 DECL_CONV_STUB(IfcGeometricSet);
4026 DECL_CONV_STUB(IfcProjectOrder);
4027 DECL_CONV_STUB(IfcBSplineCurve);
4028 DECL_CONV_STUB(IfcBezierCurve);
4029 DECL_CONV_STUB(IfcStructuralPointConnection);
4030 DECL_CONV_STUB(IfcFlowController);
4031 DECL_CONV_STUB(IfcElectricDistributionPoint);
4032 DECL_CONV_STUB(IfcSite);
4033 DECL_CONV_STUB(IfcOffsetCurve3D);
4034 DECL_CONV_STUB(IfcVirtualElement);
4035 DECL_CONV_STUB(IfcConstructionProductResource);
4036 DECL_CONV_STUB(IfcSurfaceCurveSweptAreaSolid);
4037 DECL_CONV_STUB(IfcCartesianTransformationOperator3D);
4038 DECL_CONV_STUB(IfcCartesianTransformationOperator3DnonUniform);
4039 DECL_CONV_STUB(IfcCrewResource);
4040 DECL_CONV_STUB(IfcStructuralSurfaceMember);
4041 DECL_CONV_STUB(Ifc2DCompositeCurve);
4042 DECL_CONV_STUB(IfcRepresentationContext);
4043 DECL_CONV_STUB(IfcGeometricRepresentationContext);
4044 DECL_CONV_STUB(IfcFlowTreatmentDevice);
4045 DECL_CONV_STUB(IfcRightCircularCylinder);
4046 DECL_CONV_STUB(IfcWasteTerminalType);
4047 DECL_CONV_STUB(IfcBuildingElementComponent);
4048 DECL_CONV_STUB(IfcBuildingElementPart);
4049 DECL_CONV_STUB(IfcWall);
4050 DECL_CONV_STUB(IfcWallStandardCase);
4051 DECL_CONV_STUB(IfcPath);
4137 DECL_CONV_STUB(IfcSurfaceStyleShading);
4138 DECL_CONV_STUB(IfcPumpType);
40524139 DECL_CONV_STUB(IfcDefinedSymbol);
4053 DECL_CONV_STUB(IfcStructuralSurfaceMemberVarying);
4054 DECL_CONV_STUB(IfcPoint);
4055 DECL_CONV_STUB(IfcSurfaceOfRevolution);
4056 DECL_CONV_STUB(IfcFlowTerminal);
4057 DECL_CONV_STUB(IfcFurnishingElement);
4058 DECL_CONV_STUB(IfcSurfaceStyleShading);
4059 DECL_CONV_STUB(IfcSurfaceStyleRendering);
4060 DECL_CONV_STUB(IfcCircleHollowProfileDef);
4061 DECL_CONV_STUB(IfcFlowMovingDeviceType);
4062 DECL_CONV_STUB(IfcFanType);
4063 DECL_CONV_STUB(IfcStructuralPlanarActionVarying);
4064 DECL_CONV_STUB(IfcProductRepresentation);
4065 DECL_CONV_STUB(IfcStackTerminalType);
4066 DECL_CONV_STUB(IfcReinforcingElement);
4067 DECL_CONV_STUB(IfcReinforcingMesh);
4068 DECL_CONV_STUB(IfcOrderAction);
4069 DECL_CONV_STUB(IfcLightSource);
4070 DECL_CONV_STUB(IfcLightSourceDirectional);
4071 DECL_CONV_STUB(IfcLoop);
4072 DECL_CONV_STUB(IfcVertexLoop);
4073 DECL_CONV_STUB(IfcChamferEdgeFeature);
40744140 DECL_CONV_STUB(IfcElementComponentType);
40754141 DECL_CONV_STUB(IfcFastenerType);
40764142 DECL_CONV_STUB(IfcMechanicalFastenerType);
4143 DECL_CONV_STUB(IfcFlowFitting);
4144 DECL_CONV_STUB(IfcLightSourceDirectional);
4145 DECL_CONV_STUB(IfcSurfaceStyle);
4146 DECL_CONV_STUB(IfcAnnotationSurface);
4147 DECL_CONV_STUB(IfcFlowController);
4148 DECL_CONV_STUB(IfcBuildingStorey);
4149 DECL_CONV_STUB(IfcWorkControl);
4150 DECL_CONV_STUB(IfcWorkSchedule);
4151 DECL_CONV_STUB(IfcDuctSegmentType);
4152 DECL_CONV_STUB(IfcFace);
4153 DECL_CONV_STUB(IfcStructuralSurfaceMember);
4154 DECL_CONV_STUB(IfcStructuralSurfaceMemberVarying);
4155 DECL_CONV_STUB(IfcFaceSurface);
4156 DECL_CONV_STUB(IfcCostSchedule);
4157 DECL_CONV_STUB(IfcPlanarExtent);
4158 DECL_CONV_STUB(IfcPlanarBox);
4159 DECL_CONV_STUB(IfcColourSpecification);
4160 DECL_CONV_STUB(IfcVector);
4161 DECL_CONV_STUB(IfcBeam);
4162 DECL_CONV_STUB(IfcColourRgb);
4163 DECL_CONV_STUB(IfcStructuralPlanarAction);
4164 DECL_CONV_STUB(IfcStructuralPlanarActionVarying);
4165 DECL_CONV_STUB(IfcSite);
4166 DECL_CONV_STUB(IfcDiscreteAccessoryType);
4167 DECL_CONV_STUB(IfcVibrationIsolatorType);
4168 DECL_CONV_STUB(IfcEvaporativeCoolerType);
4169 DECL_CONV_STUB(IfcDistributionChamberElementType);
4170 DECL_CONV_STUB(IfcFeatureElementAddition);
4171 DECL_CONV_STUB(IfcStructuredDimensionCallout);
4172 DECL_CONV_STUB(IfcCoolingTowerType);
4173 DECL_CONV_STUB(IfcCenterLineProfileDef);
4174 DECL_CONV_STUB(IfcWindowStyle);
4175 DECL_CONV_STUB(IfcLightSourceGoniometric);
4176 DECL_CONV_STUB(IfcTransformerType);
4177 DECL_CONV_STUB(IfcMemberType);
4178 DECL_CONV_STUB(IfcSurfaceOfLinearExtrusion);
4179 DECL_CONV_STUB(IfcMotorConnectionType);
4180 DECL_CONV_STUB(IfcFlowTreatmentDeviceType);
4181 DECL_CONV_STUB(IfcDuctSilencerType);
4182 DECL_CONV_STUB(IfcFurnishingElementType);
4183 DECL_CONV_STUB(IfcSystemFurnitureElementType);
4184 DECL_CONV_STUB(IfcWasteTerminalType);
4185 DECL_CONV_STUB(IfcBSplineCurve);
4186 DECL_CONV_STUB(IfcBezierCurve);
4187 DECL_CONV_STUB(IfcActuatorType);
4188 DECL_CONV_STUB(IfcDistributionControlElement);
4189 DECL_CONV_STUB(IfcAnnotation);
4190 DECL_CONV_STUB(IfcShellBasedSurfaceModel);
4191 DECL_CONV_STUB(IfcActionRequest);
4192 DECL_CONV_STUB(IfcExtrudedAreaSolid);
4193 DECL_CONV_STUB(IfcSystem);
4194 DECL_CONV_STUB(IfcFillAreaStyleHatching);
4195 DECL_CONV_STUB(IfcRelVoidsElement);
4196 DECL_CONV_STUB(IfcSurfaceCurveSweptAreaSolid);
4197 DECL_CONV_STUB(IfcCartesianTransformationOperator3DnonUniform);
4198 DECL_CONV_STUB(IfcCurtainWallType);
4199 DECL_CONV_STUB(IfcEquipmentStandard);
4200 DECL_CONV_STUB(IfcFlowStorageDeviceType);
4201 DECL_CONV_STUB(IfcDiameterDimension);
4202 DECL_CONV_STUB(IfcSwitchingDeviceType);
4203 DECL_CONV_STUB(IfcWindow);
4204 DECL_CONV_STUB(IfcFlowTreatmentDevice);
4205 DECL_CONV_STUB(IfcChillerType);
4206 DECL_CONV_STUB(IfcRectangleHollowProfileDef);
4207 DECL_CONV_STUB(IfcBoxedHalfSpace);
4208 DECL_CONV_STUB(IfcAxis2Placement2D);
4209 DECL_CONV_STUB(IfcSpaceProgram);
4210 DECL_CONV_STUB(IfcPoint);
4211 DECL_CONV_STUB(IfcCartesianPoint);
4212 DECL_CONV_STUB(IfcBoundedSurface);
4213 DECL_CONV_STUB(IfcLoop);
4214 DECL_CONV_STUB(IfcPolyLoop);
4215 DECL_CONV_STUB(IfcTerminatorSymbol);
4216 DECL_CONV_STUB(IfcDimensionCurveTerminator);
4217 DECL_CONV_STUB(IfcTrapeziumProfileDef);
4218 DECL_CONV_STUB(IfcRepresentationContext);
4219 DECL_CONV_STUB(IfcGeometricRepresentationContext);
4220 DECL_CONV_STUB(IfcCurveBoundedPlane);
4221 DECL_CONV_STUB(IfcSIUnit);
4222 DECL_CONV_STUB(IfcStructuralReaction);
4223 DECL_CONV_STUB(IfcStructuralPointReaction);
4224 DECL_CONV_STUB(IfcAxis1Placement);
4225 DECL_CONV_STUB(IfcElectricApplianceType);
4226 DECL_CONV_STUB(IfcSensorType);
4227 DECL_CONV_STUB(IfcFurnishingElement);
4228 DECL_CONV_STUB(IfcProtectiveDeviceType);
4229 DECL_CONV_STUB(IfcZShapeProfileDef);
40774230 DECL_CONV_STUB(IfcScheduleTimeControl);
4078 DECL_CONV_STUB(IfcSurfaceStyle);
4079 DECL_CONV_STUB(IfcOpenShell);
4080 DECL_CONV_STUB(IfcSubContractResource);
4081 DECL_CONV_STUB(IfcSweptDiskSolid);
4082 DECL_CONV_STUB(IfcCompositeProfileDef);
4231 DECL_CONV_STUB(IfcRepresentationMap);
4232 DECL_CONV_STUB(IfcClosedShell);
4233 DECL_CONV_STUB(IfcBuildingElementPart);
4234 DECL_CONV_STUB(IfcBlock);
4235 DECL_CONV_STUB(IfcLightFixtureType);
4236 DECL_CONV_STUB(IfcOpeningElement);
4237 DECL_CONV_STUB(IfcLightSourceSpot);
4238 DECL_CONV_STUB(IfcTendonAnchor);
4239 DECL_CONV_STUB(IfcElectricFlowStorageDeviceType);
4240 DECL_CONV_STUB(IfcSphere);
4241 DECL_CONV_STUB(IfcDamperType);
4242 DECL_CONV_STUB(IfcProjectOrderRecord);
4243 DECL_CONV_STUB(IfcDistributionChamberElement);
4244 DECL_CONV_STUB(IfcMechanicalFastener);
4245 DECL_CONV_STUB(IfcRectangularTrimmedSurface);
4246 DECL_CONV_STUB(IfcZone);
4247 DECL_CONV_STUB(IfcFanType);
4248 DECL_CONV_STUB(IfcGeometricSet);
4249 DECL_CONV_STUB(IfcFillAreaStyleTiles);
4250 DECL_CONV_STUB(IfcCableSegmentType);
4251 DECL_CONV_STUB(IfcRelOverridesProperties);
4252 DECL_CONV_STUB(IfcMeasureWithUnit);
4253 DECL_CONV_STUB(IfcSlabType);
4254 DECL_CONV_STUB(IfcServiceLife);
4255 DECL_CONV_STUB(IfcFurnitureType);
4256 DECL_CONV_STUB(IfcCostItem);
4257 DECL_CONV_STUB(IfcReinforcingMesh);
4258 DECL_CONV_STUB(IfcFacetedBrepWithVoids);
4259 DECL_CONV_STUB(IfcGasTerminalType);
4260 DECL_CONV_STUB(IfcPile);
4261 DECL_CONV_STUB(IfcFillAreaStyleTileSymbolWithStyle);
4262 DECL_CONV_STUB(IfcConstructionMaterialResource);
4263 DECL_CONV_STUB(IfcAnnotationCurveOccurrence);
4264 DECL_CONV_STUB(IfcDimensionCurve);
4265 DECL_CONV_STUB(IfcGeometricCurveSet);
4266 DECL_CONV_STUB(IfcRelAggregates);
4267 DECL_CONV_STUB(IfcFaceBasedSurfaceModel);
4268 DECL_CONV_STUB(IfcEnergyConversionDevice);
4269 DECL_CONV_STUB(IfcRampFlight);
4270 DECL_CONV_STUB(IfcVertexLoop);
4271 DECL_CONV_STUB(IfcPlate);
4272 DECL_CONV_STUB(IfcUShapeProfileDef);
4273 DECL_CONV_STUB(IfcFaceBound);
4274 DECL_CONV_STUB(IfcFaceOuterBound);
4275 DECL_CONV_STUB(IfcOneDirectionRepeatFactor);
4276 DECL_CONV_STUB(IfcBoilerType);
4277 DECL_CONV_STUB(IfcConstructionEquipmentResource);
4278 DECL_CONV_STUB(IfcComplexProperty);
4279 DECL_CONV_STUB(IfcFooting);
4280 DECL_CONV_STUB(IfcConstructionProductResource);
4281 DECL_CONV_STUB(IfcDerivedProfileDef);
4282 DECL_CONV_STUB(IfcPropertyTableValue);
4283 DECL_CONV_STUB(IfcFlowMeterType);
4284 DECL_CONV_STUB(IfcDoorStyle);
4285 DECL_CONV_STUB(IfcUnitAssignment);
4286 DECL_CONV_STUB(IfcFlowTerminal);
4287 DECL_CONV_STUB(IfcCraneRailFShapeProfileDef);
4288 DECL_CONV_STUB(IfcFlowSegment);
4289 DECL_CONV_STUB(IfcElementQuantity);
4290 DECL_CONV_STUB(IfcCurtainWall);
4291 DECL_CONV_STUB(IfcDiscreteAccessory);
4292 DECL_CONV_STUB(IfcGrid);
4293 DECL_CONV_STUB(IfcSanitaryTerminalType);
4294 DECL_CONV_STUB(IfcSubedge);
4295 DECL_CONV_STUB(IfcFilterType);
4296 DECL_CONV_STUB(IfcTendon);
4297 DECL_CONV_STUB(IfcStructuralLoadGroup);
4298 DECL_CONV_STUB(IfcPresentationStyleAssignment);
4299 DECL_CONV_STUB(IfcStructuralCurveMember);
4300 DECL_CONV_STUB(IfcLightSourceAmbient);
4301 DECL_CONV_STUB(IfcCondition);
4302 DECL_CONV_STUB(IfcPort);
4303 DECL_CONV_STUB(IfcSpace);
4304 DECL_CONV_STUB(IfcHeatExchangerType);
40834305 DECL_CONV_STUB(IfcTankType);
4084 DECL_CONV_STUB(IfcSphere);
4085 DECL_CONV_STUB(IfcPolyLoop);
4086 DECL_CONV_STUB(IfcCableCarrierFittingType);
4087 DECL_CONV_STUB(IfcHumidifierType);
4088 DECL_CONV_STUB(IfcPerformanceHistory);
4089 DECL_CONV_STUB(IfcShapeModel);
4090 DECL_CONV_STUB(IfcTopologyRepresentation);
4091 DECL_CONV_STUB(IfcBuilding);
4092 DECL_CONV_STUB(IfcRoundedRectangleProfileDef);
4306 DECL_CONV_STUB(IfcInventory);
4307 DECL_CONV_STUB(IfcTransportElementType);
4308 DECL_CONV_STUB(IfcAirToAirHeatRecoveryType);
40934309 DECL_CONV_STUB(IfcStairFlight);
4094 DECL_CONV_STUB(IfcDistributionChamberElement);
4095 DECL_CONV_STUB(IfcShapeRepresentation);
4096 DECL_CONV_STUB(IfcRampFlight);
4097 DECL_CONV_STUB(IfcBeamType);
4098 DECL_CONV_STUB(IfcRelDecomposes);
4099 DECL_CONV_STUB(IfcRoof);
4100 DECL_CONV_STUB(IfcFooting);
4101 DECL_CONV_STUB(IfcLightSourceAmbient);
4102 DECL_CONV_STUB(IfcWindowStyle);
4103 DECL_CONV_STUB(IfcBuildingElementProxyType);
4104 DECL_CONV_STUB(IfcAxis2Placement3D);
4105 DECL_CONV_STUB(IfcEdgeCurve);
4106 DECL_CONV_STUB(IfcClosedShell);
4107 DECL_CONV_STUB(IfcTendonAnchor);
4108 DECL_CONV_STUB(IfcCondenserType);
4109 DECL_CONV_STUB(IfcPipeSegmentType);
4110 DECL_CONV_STUB(IfcPointOnSurface);
4111 DECL_CONV_STUB(IfcAsset);
4112 DECL_CONV_STUB(IfcLightSourcePositional);
4113 DECL_CONV_STUB(IfcProjectionCurve);
4114 DECL_CONV_STUB(IfcFillAreaStyleTiles);
4115 DECL_CONV_STUB(IfcRelFillsElement);
4116 DECL_CONV_STUB(IfcElectricMotorType);
4117 DECL_CONV_STUB(IfcTendon);
4118 DECL_CONV_STUB(IfcDistributionChamberElementType);
4119 DECL_CONV_STUB(IfcMemberType);
4310 DECL_CONV_STUB(IfcElectricalElement);
4311 DECL_CONV_STUB(IfcSurfaceStyleWithTextures);
4312 DECL_CONV_STUB(IfcBoundingBox);
4313 DECL_CONV_STUB(IfcWallType);
4314 DECL_CONV_STUB(IfcMove);
4315 DECL_CONV_STUB(IfcCircle);
4316 DECL_CONV_STUB(IfcOffsetCurve2D);
4317 DECL_CONV_STUB(IfcPointOnCurve);
4318 DECL_CONV_STUB(IfcStructuralResultGroup);
4319 DECL_CONV_STUB(IfcSectionedSpine);
4320 DECL_CONV_STUB(IfcSlab);
4321 DECL_CONV_STUB(IfcVertex);
4322 DECL_CONV_STUB(IfcVertexPoint);
41204323 DECL_CONV_STUB(IfcStructuralLinearAction);
41214324 DECL_CONV_STUB(IfcStructuralLinearActionVarying);
4325 DECL_CONV_STUB(IfcBuildingElementProxyType);
4326 DECL_CONV_STUB(IfcProjectionElement);
4327 DECL_CONV_STUB(IfcConversionBasedUnit);
4328 DECL_CONV_STUB(IfcGeometricRepresentationSubContext);
4329 DECL_CONV_STUB(IfcAnnotationSurfaceOccurrence);
4330 DECL_CONV_STUB(IfcRoundedEdgeFeature);
4331 DECL_CONV_STUB(IfcElectricDistributionPoint);
4332 DECL_CONV_STUB(IfcCableCarrierSegmentType);
4333 DECL_CONV_STUB(IfcWallStandardCase);
4334 DECL_CONV_STUB(IfcCsgSolid);
4335 DECL_CONV_STUB(IfcBeamType);
4336 DECL_CONV_STUB(IfcAnnotationFillArea);
4337 DECL_CONV_STUB(IfcStructuralCurveMemberVarying);
4338 DECL_CONV_STUB(IfcPointOnSurface);
4339 DECL_CONV_STUB(IfcOrderAction);
4340 DECL_CONV_STUB(IfcEdgeLoop);
4341 DECL_CONV_STUB(IfcAnnotationFillAreaOccurrence);
4342 DECL_CONV_STUB(IfcWorkPlan);
4343 DECL_CONV_STUB(IfcEllipse);
41224344 DECL_CONV_STUB(IfcProductDefinitionShape);
4123 DECL_CONV_STUB(IfcFastener);
4124 DECL_CONV_STUB(IfcMechanicalFastener);
4125 DECL_CONV_STUB(IfcEvaporatorType);
4126 DECL_CONV_STUB(IfcDiscreteAccessoryType);
4127 DECL_CONV_STUB(IfcStructuralCurveConnection);
4128 DECL_CONV_STUB(IfcProjectionElement);
4129 DECL_CONV_STUB(IfcCoveringType);
4130 DECL_CONV_STUB(IfcPumpType);
4131 DECL_CONV_STUB(IfcPile);
4132 DECL_CONV_STUB(IfcUnitAssignment);
4133 DECL_CONV_STUB(IfcBoundingBox);
4134 DECL_CONV_STUB(IfcShellBasedSurfaceModel);
4135 DECL_CONV_STUB(IfcFacetedBrep);
4136 DECL_CONV_STUB(IfcTextLiteralWithExtent);
4137 DECL_CONV_STUB(IfcElectricApplianceType);
4138 DECL_CONV_STUB(IfcTrapeziumProfileDef);
4139 DECL_CONV_STUB(IfcRelContainedInSpatialStructure);
4140 DECL_CONV_STUB(IfcEdgeLoop);
4141 DECL_CONV_STUB(IfcProject);
4142 DECL_CONV_STUB(IfcCartesianPoint);
4143 DECL_CONV_STUB(IfcCurveBoundedPlane);
4144 DECL_CONV_STUB(IfcWallType);
4145 DECL_CONV_STUB(IfcFillAreaStyleHatching);
4146 DECL_CONV_STUB(IfcEquipmentStandard);
4147 DECL_CONV_STUB(IfcDiameterDimension);
4148 DECL_CONV_STUB(IfcStructuralLoadGroup);
4149 DECL_CONV_STUB(IfcConstructionMaterialResource);
4150 DECL_CONV_STUB(IfcRelAggregates);
4151 DECL_CONV_STUB(IfcBoilerType);
4152 DECL_CONV_STUB(IfcColourSpecification);
4153 DECL_CONV_STUB(IfcColourRgb);
4154 DECL_CONV_STUB(IfcDoorStyle);
4155 DECL_CONV_STUB(IfcDuctSilencerType);
4156 DECL_CONV_STUB(IfcLightSourceGoniometric);
4157 DECL_CONV_STUB(IfcActuatorType);
4158 DECL_CONV_STUB(IfcSensorType);
4159 DECL_CONV_STUB(IfcAirTerminalBoxType);
4160 DECL_CONV_STUB(IfcAnnotationSurfaceOccurrence);
4161 DECL_CONV_STUB(IfcZShapeProfileDef);
4345 DECL_CONV_STUB(IfcProjectionCurve);
4346 DECL_CONV_STUB(IfcElectricalCircuit);
41624347 DECL_CONV_STUB(IfcRationalBezierCurve);
4163 DECL_CONV_STUB(IfcCartesianTransformationOperator2D);
4164 DECL_CONV_STUB(IfcCartesianTransformationOperator2DnonUniform);
4165 DECL_CONV_STUB(IfcMove);
4166 DECL_CONV_STUB(IfcCableCarrierSegmentType);
4167 DECL_CONV_STUB(IfcElectricalElement);
4168 DECL_CONV_STUB(IfcChillerType);
4169 DECL_CONV_STUB(IfcReinforcingBar);
4170 DECL_CONV_STUB(IfcCShapeProfileDef);
4171 DECL_CONV_STUB(IfcPermit);
4172 DECL_CONV_STUB(IfcSlabType);
4173 DECL_CONV_STUB(IfcLampType);
4174 DECL_CONV_STUB(IfcPlanarExtent);
4175 DECL_CONV_STUB(IfcAlarmType);
4176 DECL_CONV_STUB(IfcElectricFlowStorageDeviceType);
4177 DECL_CONV_STUB(IfcEquipmentElement);
4178 DECL_CONV_STUB(IfcLightFixtureType);
4179 DECL_CONV_STUB(IfcCurtainWall);
4180 DECL_CONV_STUB(IfcSlab);
4181 DECL_CONV_STUB(IfcCurtainWallType);
4182 DECL_CONV_STUB(IfcOutletType);
4183 DECL_CONV_STUB(IfcCompressorType);
4184 DECL_CONV_STUB(IfcCraneRailAShapeProfileDef);
4185 DECL_CONV_STUB(IfcFlowSegment);
4186 DECL_CONV_STUB(IfcSectionedSpine);
4187 DECL_CONV_STUB(IfcElectricTimeControlType);
4188 DECL_CONV_STUB(IfcFaceSurface);
4189 DECL_CONV_STUB(IfcMotorConnectionType);
4190 DECL_CONV_STUB(IfcFlowFitting);
4191 DECL_CONV_STUB(IfcPointOnCurve);
4192 DECL_CONV_STUB(IfcTransportElementType);
4193 DECL_CONV_STUB(IfcCableSegmentType);
4194 DECL_CONV_STUB(IfcAnnotationSurface);
4195 DECL_CONV_STUB(IfcCompositeCurveSegment);
4196 DECL_CONV_STUB(IfcServiceLife);
4197 DECL_CONV_STUB(IfcPlateType);
4198 DECL_CONV_STUB(IfcVibrationIsolatorType);
4199 DECL_CONV_STUB(IfcTrimmedCurve);
4200 DECL_CONV_STUB(IfcMappedItem);
4201 DECL_CONV_STUB(IfcDirection);
4202 DECL_CONV_STUB(IfcBlock);
4203 DECL_CONV_STUB(IfcProjectOrderRecord);
4204 DECL_CONV_STUB(IfcFlowMeterType);
4205 DECL_CONV_STUB(IfcControllerType);
4206 DECL_CONV_STUB(IfcBeam);
4207 DECL_CONV_STUB(IfcArbitraryOpenProfileDef);
4208 DECL_CONV_STUB(IfcCenterLineProfileDef);
4209 DECL_CONV_STUB(IfcTimeSeriesSchedule);
4210 DECL_CONV_STUB(IfcRoundedEdgeFeature);
4211 DECL_CONV_STUB(IfcIShapeProfileDef);
4212 DECL_CONV_STUB(IfcSpaceHeaterType);
4213 DECL_CONV_STUB(IfcFlowStorageDevice);
4214 DECL_CONV_STUB(IfcRevolvedAreaSolid);
4215 DECL_CONV_STUB(IfcDoor);
4216 DECL_CONV_STUB(IfcEllipse);
4217 DECL_CONV_STUB(IfcTubeBundleType);
4218 DECL_CONV_STUB(IfcAngularDimension);
4219 DECL_CONV_STUB(IfcFaceBasedSurfaceModel);
4220 DECL_CONV_STUB(IfcCraneRailFShapeProfileDef);
4221 DECL_CONV_STUB(IfcColumnType);
4222 DECL_CONV_STUB(IfcTShapeProfileDef);
4223 DECL_CONV_STUB(IfcEnergyConversionDevice);
4224 DECL_CONV_STUB(IfcWorkSchedule);
4225 DECL_CONV_STUB(IfcZone);
4348 DECL_CONV_STUB(IfcStructuralPointAction);
4349 DECL_CONV_STUB(IfcPipeSegmentType);
4350 DECL_CONV_STUB(IfcTwoDirectionRepeatFactor);
4351 DECL_CONV_STUB(IfcShapeRepresentation);
4352 DECL_CONV_STUB(IfcPropertySet);
4353 DECL_CONV_STUB(IfcSurfaceStyleRendering);
4354 DECL_CONV_STUB(IfcDistributionPort);
4355 DECL_CONV_STUB(IfcPipeFittingType);
42264356 DECL_CONV_STUB(IfcTransportElement);
4227 DECL_CONV_STUB(IfcGeometricRepresentationSubContext);
4228 DECL_CONV_STUB(IfcLShapeProfileDef);
4229 DECL_CONV_STUB(IfcGeometricCurveSet);
4230 DECL_CONV_STUB(IfcActor);
4231 DECL_CONV_STUB(IfcOccupant);
4232 DECL_CONV_STUB(IfcBooleanClippingResult);
4233 DECL_CONV_STUB(IfcAnnotationFillArea);
4234 DECL_CONV_STUB(IfcLightSourceSpot);
4235 DECL_CONV_STUB(IfcFireSuppressionTerminalType);
4236 DECL_CONV_STUB(IfcElectricGeneratorType);
4237 DECL_CONV_STUB(IfcInventory);
4238 DECL_CONV_STUB(IfcPolyline);
4239 DECL_CONV_STUB(IfcBoxedHalfSpace);
4240 DECL_CONV_STUB(IfcAirTerminalType);
4241 DECL_CONV_STUB(IfcDistributionPort);
4242 DECL_CONV_STUB(IfcCostItem);
4243 DECL_CONV_STUB(IfcStructuredDimensionCallout);
4244 DECL_CONV_STUB(IfcStructuralResultGroup);
4245 DECL_CONV_STUB(IfcOrientedEdge);
4246 DECL_CONV_STUB(IfcCsgSolid);
4247 DECL_CONV_STUB(IfcPlanarBox);
4248 DECL_CONV_STUB(IfcMaterialDefinitionRepresentation);
4249 DECL_CONV_STUB(IfcAsymmetricIShapeProfileDef);
4250 DECL_CONV_STUB(IfcRepresentationMap);
4357 DECL_CONV_STUB(IfcAnnotationTextOccurrence);
4358 DECL_CONV_STUB(IfcStructuralAnalysisModel);
4359 DECL_CONV_STUB(IfcConditionCriterion);
42514360
42524361
42534362 #undef DECL_CONV_STUB
4444 #include "AssimpPCH.h"
4545
4646 #ifndef ASSIMP_BUILD_NO_IFC_IMPORTER
47
4748 #include "IFCUtil.h"
49 #include "PolyTools.h"
4850 #include "ProcessHelper.h"
4951
5052 namespace Assimp {
5557 {
5658 if(profileMesh) {
5759 profileMesh->Transform(mat);
60 }
61 if(profileMesh2D) {
62 profileMesh2D->Transform(mat);
5863 }
5964 extrusionDir *= IfcMatrix3(mat);
6065 }
124129 {
125130 verts.insert(verts.end(),other.verts.begin(),other.verts.end());
126131 vertcnt.insert(vertcnt.end(),other.vertcnt.begin(),other.vertcnt.end());
132 }
133
134 // ------------------------------------------------------------------------------------------------
135 void TempMesh::RemoveDegenerates()
136 {
137 // The strategy is simple: walk the mesh and compute normals using
138 // Newell's algorithm. The length of the normals gives the area
139 // of the polygons, which is close to zero for lines.
140
141 std::vector<IfcVector3> normals;
142 ComputePolygonNormals(normals, false);
143
144 bool drop = false;
145 size_t inor = 0;
146
147 std::vector<IfcVector3>::iterator vit = verts.begin();
148 for (std::vector<unsigned int>::iterator it = vertcnt.begin(); it != vertcnt.end(); ++inor) {
149 const unsigned int pcount = *it;
150
151 if (normals[inor].SquareLength() < 1e-5f) {
152 it = vertcnt.erase(it);
153 vit = verts.erase(vit, vit + pcount);
154
155 drop = true;
156 continue;
157 }
158
159 vit += pcount;
160 ++it;
161 }
162
163 if(drop) {
164 IFCImporter::LogDebug("removing degenerate faces");
165 }
166 }
167
168 // ------------------------------------------------------------------------------------------------
169 void TempMesh::ComputePolygonNormals(std::vector<IfcVector3>& normals,
170 bool normalize,
171 size_t ofs) const
172 {
173 size_t max_vcount = 0;
174 std::vector<unsigned int>::const_iterator begin = vertcnt.begin()+ofs, end = vertcnt.end(), iit;
175 for(iit = begin; iit != end; ++iit) {
176 max_vcount = std::max(max_vcount,static_cast<size_t>(*iit));
177 }
178
179 std::vector<IfcFloat> temp((max_vcount+2)*4);
180 normals.reserve( normals.size() + vertcnt.size()-ofs );
181
182 // `NewellNormal()` currently has a relatively strange interface and need to
183 // re-structure things a bit to meet them.
184 size_t vidx = std::accumulate(vertcnt.begin(),begin,0);
185 for(iit = begin; iit != end; vidx += *iit++) {
186 if (!*iit) {
187 normals.push_back(IfcVector3());
188 continue;
189 }
190 for(size_t vofs = 0, cnt = 0; vofs < *iit; ++vofs) {
191 const IfcVector3& v = verts[vidx+vofs];
192 temp[cnt++] = v.x;
193 temp[cnt++] = v.y;
194 temp[cnt++] = v.z;
195 #ifdef ASSIMP_BUILD_DEBUG
196 temp[cnt] = std::numeric_limits<IfcFloat>::quiet_NaN();
197 #endif
198 ++cnt;
199 }
200
201 normals.push_back(IfcVector3());
202 NewellNormal<4,4,4>(normals.back(),*iit,&temp[0],&temp[1],&temp[2]);
203 }
204
205 if(normalize) {
206 BOOST_FOREACH(IfcVector3& n, normals) {
207 n.Normalize();
208 }
209 }
210 }
211
212 // ------------------------------------------------------------------------------------------------
213 // Compute the normal of the last polygon in the given mesh
214 IfcVector3 TempMesh::ComputeLastPolygonNormal(bool normalize) const
215 {
216 size_t total = vertcnt.back(), vidx = verts.size() - total;
217 std::vector<IfcFloat> temp((total+2)*3);
218 for(size_t vofs = 0, cnt = 0; vofs < total; ++vofs) {
219 const IfcVector3& v = verts[vidx+vofs];
220 temp[cnt++] = v.x;
221 temp[cnt++] = v.y;
222 temp[cnt++] = v.z;
223 }
224 IfcVector3 nor;
225 NewellNormal<3,3,3>(nor,total,&temp[0],&temp[1],&temp[2]);
226 return normalize ? nor.Normalize() : nor;
227 }
228
229 // ------------------------------------------------------------------------------------------------
230 void TempMesh::FixupFaceOrientation()
231 {
232 const IfcVector3 vavg = Center();
233
234 std::vector<IfcVector3> normals;
235 ComputePolygonNormals(normals);
236
237 size_t c = 0, ofs = 0;
238 BOOST_FOREACH(unsigned int cnt, vertcnt) {
239 if (cnt>2){
240 const IfcVector3& thisvert = verts[c];
241 if (normals[ofs]*(thisvert-vavg) < 0) {
242 std::reverse(verts.begin()+c,verts.begin()+cnt+c);
243 }
244 }
245 c += cnt;
246 ++ofs;
247 }
127248 }
128249
129250 // ------------------------------------------------------------------------------------------------
188309 base += cnt;
189310 }
190311 if(drop) {
191 IFCImporter::LogDebug("removed duplicate vertices");
192 }
312 IFCImporter::LogDebug("removing duplicate vertices");
313 }
314 }
315
316 // ------------------------------------------------------------------------------------------------
317 void TempMesh::Swap(TempMesh& other)
318 {
319 vertcnt.swap(other.vertcnt);
320 verts.swap(other.verts);
193321 }
194322
195323 // ------------------------------------------------------------------------------------------------
441569 out = locm * out * s;
442570 }
443571
572
444573 } // ! IFC
445574 } // ! Assimp
446575
6060 typedef aiColor4t<IfcFloat> IfcColor4;
6161
6262
63 // helper for std::for_each to delete all heap-allocated items in a container
63 // ------------------------------------------------------------------------------------------------
64 // Helper for std::for_each to delete all heap-allocated items in a container
65 // ------------------------------------------------------------------------------------------------
6466 template<typename T>
6567 struct delete_fun
6668 {
6971 }
7072 };
7173
74
75
76 // ------------------------------------------------------------------------------------------------
77 // Helper used during mesh construction. Aids at creating aiMesh'es out of relatively few polygons.
78 // ------------------------------------------------------------------------------------------------
79 struct TempMesh
80 {
81 std::vector<IfcVector3> verts;
82 std::vector<unsigned int> vertcnt;
83
84 // utilities
85 aiMesh* ToMesh();
86 void Clear();
87 void Transform(const IfcMatrix4& mat);
88 IfcVector3 Center() const;
89 void Append(const TempMesh& other);
90
91 bool IsEmpty() const {
92 return verts.empty() && vertcnt.empty();
93 }
94
95 void RemoveAdjacentDuplicates();
96 void RemoveDegenerates();
97
98 void FixupFaceOrientation();
99 IfcVector3 ComputeLastPolygonNormal(bool normalize = true) const;
100 void ComputePolygonNormals(std::vector<IfcVector3>& normals,
101 bool normalize = true,
102 size_t ofs = 0) const;
103
104 void Swap(TempMesh& other);
105 };
106
107
72108 // ------------------------------------------------------------------------------------------------
73109 // Temporary representation of an opening in a wall or a floor
74110 // ------------------------------------------------------------------------------------------------
75 struct TempMesh;
76111 struct TempOpening
77112 {
78 const IFC::IfcExtrudedAreaSolid* solid;
113 const IFC::IfcSolidModel* solid;
79114 IfcVector3 extrusionDir;
115
80116 boost::shared_ptr<TempMesh> profileMesh;
117 boost::shared_ptr<TempMesh> profileMesh2D;
118
119 // list of points generated for this opening. This is used to
120 // create connections between two opposing holes created
121 // from a single opening instance (two because walls tend to
122 // have two sides). If !empty(), the other side of the wall
123 // has already been processed.
124 std::vector<IfcVector3> wallPoints;
81125
82126 // ------------------------------------------------------------------------------
83 TempOpening(const IFC::IfcExtrudedAreaSolid* solid,IfcVector3 extrusionDir,boost::shared_ptr<TempMesh> profileMesh)
127 TempOpening()
128 : solid()
129 , extrusionDir()
130 , profileMesh()
131 {
132 }
133
134 // ------------------------------------------------------------------------------
135 TempOpening(const IFC::IfcSolidModel* solid,IfcVector3 extrusionDir,
136 boost::shared_ptr<TempMesh> profileMesh,
137 boost::shared_ptr<TempMesh> profileMesh2D)
84138 : solid(solid)
85139 , extrusionDir(extrusionDir)
86140 , profileMesh(profileMesh)
141 , profileMesh2D(profileMesh2D)
87142 {
88143 }
89144
90145 // ------------------------------------------------------------------------------
91146 void Transform(const IfcMatrix4& mat); // defined later since TempMesh is not complete yet
147
148
149
150 // ------------------------------------------------------------------------------
151 // Helper to sort openings by distance from a given base point
152 struct DistanceSorter {
153
154 DistanceSorter(const IfcVector3& base) : base(base) {}
155
156 bool operator () (const TempOpening& a, const TempOpening& b) const {
157 return (a.profileMesh->Center()-base).SquareLength() < (b.profileMesh->Center()-base).SquareLength();
158 }
159
160 IfcVector3 base;
161 };
92162 };
93163
94164
99169 {
100170 ConversionData(const STEP::DB& db, const IFC::IfcProject& proj, aiScene* out,const IFCImporter::Settings& settings)
101171 : len_scale(1.0)
102 , angle_scale(1.0)
172 , angle_scale(-1.0)
103173 , db(db)
104174 , proj(proj)
105175 , out(out)
137207 // for later processing by a parent, which is a wall.
138208 std::vector<TempOpening>* apply_openings;
139209 std::vector<TempOpening>* collect_openings;
140 };
210
211 std::set<uint64_t> already_processed;
212 };
213
141214
142215 // ------------------------------------------------------------------------------------------------
143216 // Binary predicate to compare vectors with a given, quadratic epsilon.
154227
155228
156229 // ------------------------------------------------------------------------------------------------
157 // Helper used during mesh construction. Aids at creating aiMesh'es out of relatively few polygons.
158 // ------------------------------------------------------------------------------------------------
159 struct TempMesh
160 {
161 std::vector<IfcVector3> verts;
162 std::vector<unsigned int> vertcnt;
163
164 // utilities
165 aiMesh* ToMesh();
166 void Clear();
167 void Transform(const IfcMatrix4& mat);
168 IfcVector3 Center() const;
169 void Append(const TempMesh& other);
170 void RemoveAdjacentDuplicates();
171 };
172
173
230 // Ordering predicate to totally order R^2 vectors first by x and then by y
231 // ------------------------------------------------------------------------------------------------
232 struct XYSorter {
233
234 // sort first by X coordinates, then by Y coordinates
235 bool operator () (const IfcVector2&a, const IfcVector2& b) const {
236 if (a.x == b.x) {
237 return a.y < b.y;
238 }
239 return a.x < b.x;
240 }
241 };
174242
175243
176244
197265 unsigned int ProcessMaterials(const IFC::IfcRepresentationItem& item, ConversionData& conv);
198266
199267 // IFCGeometry.cpp
268 IfcMatrix3 DerivePlaneCoordinateSpace(const TempMesh& curmesh, bool& ok, IfcVector3& norOut);
200269 bool ProcessRepresentationItem(const IfcRepresentationItem& item, std::vector<unsigned int>& mesh_indices, ConversionData& conv);
201270 void AssignAddedMeshes(std::vector<unsigned int>& mesh_indices,aiNode* nd,ConversionData& /*conv*/);
271
272 void ProcessSweptAreaSolid(const IfcSweptAreaSolid& swept, TempMesh& meshout,
273 ConversionData& conv);
274
275 void ProcessExtrudedAreaSolid(const IfcExtrudedAreaSolid& solid, TempMesh& result,
276 ConversionData& conv, bool collect_openings);
277
278 // IFCBoolean.cpp
279
280 void ProcessBoolean(const IfcBooleanResult& boolean, TempMesh& result, ConversionData& conv);
281 void ProcessBooleanHalfSpaceDifference(const IfcHalfSpaceSolid* hs, TempMesh& result,
282 const TempMesh& first_operand,
283 ConversionData& conv);
284
285 void ProcessPolygonalBoundedBooleanHalfSpaceDifference(const IfcPolygonalBoundedHalfSpace* hs, TempMesh& result,
286 const TempMesh& first_operand,
287 ConversionData& conv);
288 void ProcessBooleanExtrudedAreaSolidDifference(const IfcExtrudedAreaSolid* as, TempMesh& result,
289 const TempMesh& first_operand,
290 ConversionData& conv);
291
292
293 // IFCOpenings.cpp
294
295 bool GenerateOpenings(std::vector<TempOpening>& openings,
296 const std::vector<IfcVector3>& nors,
297 TempMesh& curmesh,
298 bool check_intersection,
299 bool generate_connection_geometry,
300 const IfcVector3& wall_extrusion_axis = IfcVector3(0,1,0));
301
202302
203303
204304 // IFCCurve.cpp
264364 // and append the result to the mesh
265365 virtual void SampleDiscrete(TempMesh& out,IfcFloat start,IfcFloat end) const;
266366
267 #ifdef _DEBUG
367 #ifdef ASSIMP_BUILD_DEBUG
268368 // check if a particular parameter value lies within the well-defined range
269369 bool InRange(IfcFloat) const;
270370 #endif
303403 using Curve::SampleDiscrete;
304404 };
305405
306
307
406 // IfcProfile.cpp
407 bool ProcessCurve(const IfcCurve& curve, TempMesh& meshout, ConversionData& conv);
308408 }
309409 }
310410
4343 */
4444
4545 #include "AssimpPCH.h"
46
47 #ifndef ASSIMP_BUILD_NO_IRR_IMPORTER
4648
4749 #include "IRRLoader.h"
4850 #include "ParsingUtils.h"
14701472 */
14711473 return;
14721474 }
1475
1476 #endif // !! ASSIMP_BUILD_NO_IRR_IMPORTER
4242
4343 #include "AssimpPCH.h"
4444
45 #ifndef ASSIMP_BUILD_NO_IRRMESH_IMPORTER
46
4547 #include "IRRMeshLoader.h"
4648 #include "ParsingUtils.h"
4749 #include "fast_atof.h"
508510 delete reader;
509511 AI_DEBUG_INVALIDATE_PTR(reader);
510512 }
513
514 #endif // !! ASSIMP_BUILD_NO_IRRMESH_IMPORTER
4343 */
4444
4545 #include "AssimpPCH.h"
46
47 //This section should be excluded only if both the Irrlicht AND the Irrlicht Mesh importers were omitted.
48 #if !(defined(ASSIMP_BUILD_NO_IRR_IMPORTER) && defined(ASSIMP_BUILD_NO_IRRMESH_IMPORTER))
4649
4750 #include "IRRShared.h"
4851 #include "ParsingUtils.h"
493496 DefaultLogger::get()->error("IRRMESH: Unexpected end of file. Material is not complete");
494497 return mat;
495498 }
499
500 #endif // !(defined(ASSIMP_BUILD_NO_IRR_IMPORTER) && defined(ASSIMP_BUILD_NO_IRRMESH_IMPORTER))
196196 pimpl->mIntProperties = other.pimpl->mIntProperties;
197197 pimpl->mFloatProperties = other.pimpl->mFloatProperties;
198198 pimpl->mStringProperties = other.pimpl->mStringProperties;
199 pimpl->mMatrixProperties = other.pimpl->mMatrixProperties;
199200 }
200201
201202 // ------------------------------------------------------------------------------------------------
231232
232233 for(std::set<std::string>::const_iterator it = st.begin(); it != st.end(); ++it) {
233234
234 #ifdef _DEBUG
235 #ifdef ASSIMP_BUILD_DEBUG
235236 if (IsExtensionSupported(*it)) {
236237 DefaultLogger::get()->warn("The file extension " + *it + " is already in use");
237238 }
557558 << "<unknown compiler>"
558559 #endif
559560
560 #ifndef NDEBUG
561 #ifdef ASSIMP_BUILD_DEBUG
561562 << " debug"
562563 #endif
563564
748749 }
749750 }
750751 #endif // no validation
751 #ifdef _DEBUG
752 #ifdef ASSIMP_BUILD_DEBUG
752753 if (pimpl->bExtraVerbose)
753754 {
754 #ifndef ASSIMP_BUILD_NO_VALIDATEDS_PROCESS
755 #ifdef ASSIMP_BUILD_NO_VALIDATEDS_PROCESS
755756 DefaultLogger::get()->error("Verbose Import is not available due to build settings");
756757 #endif // no validation
757758 pFlags |= aiProcess_ValidateDataStructure;
782783 if( !pimpl->mScene) {
783784 break;
784785 }
785 #ifdef _DEBUG
786
787 #ifndef ASSIMP_BUILD_NO_VALIDATEDS_PROCESS
786 #ifdef ASSIMP_BUILD_DEBUG
787
788 #ifdef ASSIMP_BUILD_NO_VALIDATEDS_PROCESS
788789 continue;
789790 #endif // no validation
790791
937938 }
938939
939940 // ------------------------------------------------------------------------------------------------
941 // Set a configuration property
942 void Importer::SetPropertyMatrix(const char* szName, const aiMatrix4x4& value,
943 bool* bWasExisting /*= NULL*/)
944 {
945 ASSIMP_BEGIN_EXCEPTION_REGION();
946 SetGenericProperty<aiMatrix4x4>(pimpl->mMatrixProperties, szName,value,bWasExisting);
947 ASSIMP_END_EXCEPTION_REGION(void);
948 }
949
950 // ------------------------------------------------------------------------------------------------
940951 // Get a configuration property
941952 int Importer::GetPropertyInteger(const char* szName,
942953 int iErrorReturn /*= 0xffffffff*/) const
954965
955966 // ------------------------------------------------------------------------------------------------
956967 // Get a configuration property
957 const std::string& Importer::GetPropertyString(const char* szName,
968 const std::string Importer::GetPropertyString(const char* szName,
958969 const std::string& iErrorReturn /*= ""*/) const
959970 {
960971 return GetGenericProperty<std::string>(pimpl->mStringProperties,szName,iErrorReturn);
972 }
973
974 // ------------------------------------------------------------------------------------------------
975 // Get a configuration property
976 const aiMatrix4x4 Importer::GetPropertyMatrix(const char* szName,
977 const aiMatrix4x4& iErrorReturn /*= aiMatrix4x4()*/) const
978 {
979 return GetGenericProperty<aiMatrix4x4>(pimpl->mMatrixProperties,szName,iErrorReturn);
961980 }
962981
963982 // ------------------------------------------------------------------------------------------------
6262 // Data type to store the key hash
6363 typedef unsigned int KeyType;
6464
65 // typedefs for our three configuration maps.
65 // typedefs for our four configuration maps.
6666 // We don't need more, so there is no need for a generic solution
6767 typedef std::map<KeyType, int> IntPropertyMap;
6868 typedef std::map<KeyType, float> FloatPropertyMap;
6969 typedef std::map<KeyType, std::string> StringPropertyMap;
70 typedef std::map<KeyType, aiMatrix4x4> MatrixPropertyMap;
7071
7172 public:
7273
9899
99100 /** List of string properties */
100101 StringPropertyMap mStringProperties;
102
103 /** List of Matrix properties */
104 MatrixPropertyMap mMatrixProperties;
101105
102106 /** Used for testing - extra verbose mode causes the ValidateDataStructure-Step
103107 * to be executed before and after every single postprocess step */
134138 ImporterPimpl::IntPropertyMap ints;
135139 ImporterPimpl::FloatPropertyMap floats;
136140 ImporterPimpl::StringPropertyMap strings;
141 ImporterPimpl::MatrixPropertyMap matrices;
137142
138143 bool operator == (const PropertyMap& prop) const {
139144 // fixme: really isocpp? gcc complains
140 return ints == prop.ints && floats == prop.floats && strings == prop.strings;
145 return ints == prop.ints && floats == prop.floats && strings == prop.strings && matrices == prop.matrices;
141146 }
142147
143148 bool empty () const {
144 return ints.empty() && floats.empty() && strings.empty();
149 return ints.empty() && floats.empty() && strings.empty() && matrices.empty();
145150 }
146151 };
147152 //! @endcond
139139 # include "LWSLoader.h"
140140 #endif
141141 #ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER
142 # include "OgreImporter.hpp"
142 # include "OgreImporter.h"
143143 #endif
144144 #ifndef ASSIMP_BUILD_NO_MS3D_IMPORTER
145145 # include "MS3DLoader.h"
159159 #ifndef ASSIMP_BUILD_NO_IFC_IMPORTER
160160 # include "IFCLoader.h"
161161 #endif
162 #ifndef ASSIMP_BUILD_NO_M3_IMPORTER
163 # include "M3Importer.h"
164 #endif
165162 #ifndef ASSIMP_BUILD_NO_XGL_IMPORTER
166163 # include "XGLLoader.h"
164 #endif
165 #ifndef ASSIMP_BUILD_NO_FBX_IMPORTER
166 # include "FBXImporter.h"
167167 #endif
168168
169169 namespace Assimp {
284284 #if (!defined ASSIMP_BUILD_NO_IFC_IMPORTER)
285285 out.push_back( new IFCImporter() );
286286 #endif
287 #if ( !defined ASSIMP_BUILD_NO_M3_IMPORTER )
288 out.push_back( new M3::M3Importer() );
289 #endif
290287 #if ( !defined ASSIMP_BUILD_NO_XGL_IMPORTER )
291288 out.push_back( new XGLImporter() );
292289 #endif
290 #if ( !defined ASSIMP_BUILD_NO_FBX_IMPORTER )
291 out.push_back( new FBXImporter() );
292 #endif
293293 }
294294
295295 }
4747
4848 #include "AssimpPCH.h"
4949 #if (!defined ASSIMP_BUILD_NO_LWO_IMPORTER) && (!defined ASSIMP_BUILD_NO_LWS_IMPORTER)
50
51 #include <functional>
5052
5153 // internal headers
5254 #include "LWOFileData.h"
445447
446448 if ((*cur_x).time == (*cur_y).time && (*cur_x).time == (*cur_z).time ) {
447449
448 // we have a keyframe for all of them defined .. great,
449 // we don't need to fucking interpolate here ...
450 // we have a keyframe for all of them defined .. this means
451 // we don't need to interpolate here.
450452 fill.mTime = (*cur_x).time;
451453
452454 fill.mValue.x = (*cur_x).value;
293293 unsigned int vUVChannelIndices[AI_MAX_NUMBER_OF_TEXTURECOORDS];
294294 unsigned int vVColorIndices[AI_MAX_NUMBER_OF_COLOR_SETS];
295295
296 #if _DEBUG
296 #ifdef ASSIMP_BUILD_DEBUG
297297 for (unsigned int mui = 0; mui < AI_MAX_NUMBER_OF_TEXTURECOORDS;++mui ) {
298298 vUVChannelIndices[mui] = UINT_MAX;
299299 }
465465 aiFace* begin = mesh->mFaces, *const end = mesh->mFaces+mesh->mNumFaces;
466466 for (; begin != end; ++begin) {
467467 aiFace& face = *begin;
468
469 if(face.mNumIndices < 3) {
470 continue;
471 }
468472
469473 // LWO doc: "the normal is defined as the cross product of the first and last edges"
470474 aiVector3D* pV1 = mesh->mVertices + face.mIndices[0];
12911295 uint8_t* const next = mFileBuffer+head->length;
12921296 unsigned int iUnnamed = 0;
12931297
1298 if(!head->length) {
1299 mFileBuffer = next;
1300 continue;
1301 }
1302
12941303 switch (head->type)
12951304 {
12961305 // new layer
166166 // The older LWOB format does not use indirect references to clips.
167167 // The file name of a texture is directly specified in the tex chunk.
168168 if (mIsLWO2) {
169 // find the corresponding clip
170 ClipList::iterator clip = mClips.begin();
169 // find the corresponding clip (take the last one if multiple
170 // share the same index)
171 ClipList::iterator end = mClips.end(), candidate = end;
171172 temp = (*it).mClipIdx;
172 for (ClipList::iterator end = mClips.end(); clip != end; ++clip) {
173 if ((*clip).idx == temp)
174 break;
173 for (ClipList::iterator clip = mClips.begin(); clip != end; ++clip) {
174 if ((*clip).idx == temp) {
175 candidate = clip;
176 }
175177
176178 }
177 if (mClips.end() == clip) {
179 if (candidate == end) {
178180 DefaultLogger::get()->error("LWO2: Clip index is out of bounds");
179181 temp = 0;
180182
181 // fixme: appearently some LWO files shipping with Doom3 don't
183 // fixme: apparently some LWO files shipping with Doom3 don't
182184 // have clips at all ... check whether that's true or whether
183185 // it's a bug in the loader.
184186
187189 //continue;
188190 }
189191 else {
190 if (Clip::UNSUPPORTED == (*clip).type) {
192 if (Clip::UNSUPPORTED == (*candidate).type) {
191193 DefaultLogger::get()->error("LWO2: Clip type is not supported");
192194 continue;
193195 }
194 AdjustTexturePath((*clip).path);
195 s.Set((*clip).path);
196 AdjustTexturePath((*candidate).path);
197 s.Set((*candidate).path);
196198
197199 // Additional image settings
198200 int flags = 0;
199 if ((*clip).negate) {
201 if ((*candidate).negate) {
200202 flags |= aiTextureFlags_Invert;
201203 }
202204 pcMat->AddProperty(&flags,1,AI_MATKEY_TEXFLAGS(type,cur));
4343 */
4444
4545 #include "AssimpPCH.h"
46 #ifndef ASSIMP_BUILD_NO_LWS_IMPORTER
4647
4748 #include "LWSLoader.h"
4849 #include "ParsingUtils.h"
122123 // ------------------------------------------------------------------------------------------------
123124 // Constructor to be privately used by Importer
124125 LWSImporter::LWSImporter()
126 : noSkeletonMesh()
125127 {
126128 // nothing to do here
127129 }
176178 if (last < first) {
177179 std::swap(last,first);
178180 }
181
182 noSkeletonMesh = pImp->GetPropertyInteger(AI_CONFIG_IMPORT_NO_SKELETON_MESHES,0) != 0;
179183 }
180184
181185 // ------------------------------------------------------------------------------------------------
459463 std::string tmp;
460464 if (in.length() > 3 && in[1] == ':'&& in[2] != '\\' && in[2] != '/')
461465 {
462 tmp = in[0] + ":\\" + in.substr(2);
466 tmp = in[0] + (":\\" + in.substr(2));
463467 }
464468 else tmp = in;
465469
475479 // <folder>\Scenes\<hh>\<*>.lws
476480 // where <hh> is optional.
477481
478 std::string test = ".." + io->getOsSeparator() + tmp;
479 if (io->Exists(test))
482 std::string test = ".." + (io->getOsSeparator() + tmp);
483 if (io->Exists(test)) {
480484 return test;
481
482 test = ".." + io->getOsSeparator() + test;
485 }
486
487 test = ".." + (io->getOsSeparator() + test);
483488 if (io->Exists(test)) {
484489 return test;
485490 }
907912 if (!pScene->mNumMeshes || !pScene->mNumMaterials) {
908913 pScene->mFlags |= AI_SCENE_FLAGS_INCOMPLETE;
909914
910 if (pScene->mNumAnimations) {
915 if (pScene->mNumAnimations && !noSkeletonMesh) {
911916 // construct skeleton mesh
912917 SkeletonMeshBuilder builder(pScene);
913918 }
914919 }
915920
916921 }
922
923 #endif // !! ASSIMP_BUILD_NO_LWS_IMPORTER
232232 IOSystem* io;
233233
234234 double first,last,fps;
235
236 bool noSkeletonMesh;
235237 };
236238
237239 } // end of namespace Assimp
4444 #include "BaseProcess.h"
4545
4646 struct aiMesh;
47
4748 class LimitBoneWeightsTest;
4849
4950 namespace Assimp
6869 * The other weights on this bone are then renormalized to assure the sum weight
6970 * to be 1.
7071 */
71 class LimitBoneWeightsProcess : public BaseProcess
72 class ASSIMP_API LimitBoneWeightsProcess : public BaseProcess
7273 {
7374 public:
7475
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file LineSplitter.h
41 * @brief LineSplitter, a helper class to iterate through all lines
42 * of a file easily. Works with StreamReader.
43 */
44 #ifndef INCLUDED_LINE_SPLITTER_H
45 #define INCLUDED_LINE_SPLITTER_H
46
47 #include <stdexcept>
48
49 #include "StreamReader.h"
50 #include "ParsingUtils.h"
51
52 namespace Assimp {
53
54 // ------------------------------------------------------------------------------------------------
55 /** Usage:
56 @code
57 for(LineSplitter splitter(stream);splitter;++splitter) {
58
59 if (*splitter == "hi!") {
60 ...
61 }
62 else if (splitter->substr(0,5) == "hello") {
63 ...
64 // access the third token in the line (tokens are space-separated)
65 if (strtol(splitter[2]) > 5) { .. }
66 }
67
68 std::cout << "Current line is: " << splitter.get_index() << std::endl;
69 }
70 @endcode */
71 // ------------------------------------------------------------------------------------------------
72 class LineSplitter
73 {
74 public:
75
76 typedef size_t line_idx;
77
78 public:
79
80 // -----------------------------------------
81 /** construct from existing stream reader
82 note: trim is *always* assumed true if skyp_empty_lines==true
83 */
84 LineSplitter(StreamReaderLE& stream, bool skip_empty_lines = true, bool trim = true)
85 : stream(stream)
86 , swallow()
87 , skip_empty_lines(skip_empty_lines)
88 , trim(trim)
89 {
90 cur.reserve(1024);
91 operator++();
92
93 idx = 0;
94 }
95
96 public:
97
98 // -----------------------------------------
99 /** pseudo-iterator increment */
100 LineSplitter& operator++() {
101 if(swallow) {
102 swallow = false;
103 return *this;
104 }
105 if (!*this) {
106 throw std::logic_error("End of file, no more lines to be retrieved.");
107 }
108 char s;
109 cur.clear();
110 while(stream.GetRemainingSize() && (s = stream.GetI1(),1)) {
111 if (s == '\n' || s == '\r') {
112 if (skip_empty_lines) {
113 while (stream.GetRemainingSize() && ((s = stream.GetI1()) == ' ' || s == '\r' || s == '\n'));
114 if (stream.GetRemainingSize()) {
115 stream.IncPtr(-1);
116 }
117 }
118 else {
119 // skip both potential line terminators but don't read past this line.
120 if (stream.GetRemainingSize() && (s == '\r' && stream.GetI1() != '\n')) {
121 stream.IncPtr(-1);
122 }
123 if (trim) {
124 while (stream.GetRemainingSize() && ((s = stream.GetI1()) == ' ' || s == '\t'));
125 if (stream.GetRemainingSize()) {
126 stream.IncPtr(-1);
127 }
128 }
129 }
130 break;
131 }
132 cur += s;
133 }
134 ++idx;
135 return *this;
136 }
137
138 // -----------------------------------------
139 LineSplitter& operator++(int) {
140 return ++(*this);
141 }
142
143 // -----------------------------------------
144 /** get a pointer to the beginning of a particular token */
145 const char* operator[] (size_t idx) const {
146 const char* s = operator->()->c_str();
3147
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
148 SkipSpaces(&s);
149 for(size_t i = 0; i < idx; ++i) {
6150
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file LineSplitter.h
41 * @brief LineSplitter, a helper class to iterate through all lines
42 * of a file easily. Works with StreamReader.
43 */
44 #ifndef INCLUDED_LINE_SPLITTER_H
45 #define INCLUDED_LINE_SPLITTER_H
46
47 #include <stdexcept>
48
49 #include "StreamReader.h"
50 #include "ParsingUtils.h"
51
52 namespace Assimp {
53
54 // ------------------------------------------------------------------------------------------------
55 /** Usage:
56 @code
57 for(LineSplitter splitter(stream);splitter;++splitter) {
58
59 if (*splitter == "hi!") {
60 ...
61 }
62 else if (splitter->substr(0,5) == "hello") {
63 ...
64 // access the third token in the line (tokens are space-separated)
65 if (strtol(splitter[2]) > 5) { .. }
66 }
67
68 std::cout << "Current line is: " << splitter.get_index() << std::endl;
69 }
70 @endcode */
71 // ------------------------------------------------------------------------------------------------
72 class LineSplitter
73 {
74 public:
75
76 typedef size_t line_idx;
77
78 public:
79
80 // -----------------------------------------
81 /** construct from existing stream reader
82 note: trim is *always* assumed true if skyp_empty_lines==true
83 */
84 LineSplitter(StreamReaderLE& stream, bool skip_empty_lines = true, bool trim = true)
85 : stream(stream)
86 , swallow()
87 , skip_empty_lines(skip_empty_lines)
88 , trim(trim)
89 {
90 cur.reserve(1024);
91 operator++();
92
93 idx = 0;
94 }
95
96 public:
97
98 // -----------------------------------------
99 /** pseudo-iterator increment */
100 LineSplitter& operator++() {
101 if(swallow) {
102 swallow = false;
103 return *this;
104 }
105
106 if (!*this) {
107 throw std::logic_error("End of file, no more lines to be retrieved.");
108 }
109
110 char s;
111
112 cur.clear();
113 while(stream.GetRemainingSize() && (s = stream.GetI1(),1)) {
114 if (s == '\n' || s == '\r') {
115 if (skip_empty_lines) {
116 while (stream.GetRemainingSize() && ((s = stream.GetI1()) == ' ' || s == '\r' || s == '\n'));
117 if (stream.GetRemainingSize()) {
118 stream.IncPtr(-1);
119 }
120 }
121 else {
122 // skip both potential line terminators but don't read past this line.
123 if (stream.GetRemainingSize() && (s == '\r' && stream.GetI1() != '\n')) {
124 stream.IncPtr(-1);
125 }
126
127 if (trim) {
128 while (stream.GetRemainingSize() && ((s = stream.GetI1()) == ' ' || s == '\t'));
129 if (stream.GetRemainingSize()) {
130 stream.IncPtr(-1);
131 }
132 }
133 }
134
135 break;
136 }
137 cur += s;
138 }
139
140 ++idx;
141 return *this;
142 }
143
144 // -----------------------------------------
145 LineSplitter& operator++(int) {
146 return ++(*this);
147 }
148
149 // -----------------------------------------
150 /** get a pointer to the beginning of a particular token */
151 const char* operator[] (size_t idx) const {
152 const char* s = operator->()->c_str();
153
154 SkipSpaces(&s);
155 for(size_t i = 0; i < idx; ++i) {
156
157 for(;!IsSpace(*s); ++s) {
158 if(IsLineEnd(*s)) {
159 throw std::range_error("Token index out of range, EOL reached");
160 }
161 }
162 SkipSpaces(&s);
163 }
164 return s;
165 }
166
167 // -----------------------------------------
168 /** extract the start positions of N tokens from the current line*/
169 template <size_t N>
170 void get_tokens(const char* (&tokens)[N]) const {
171 const char* s = operator->()->c_str();
172
173 SkipSpaces(&s);
174 for(size_t i = 0; i < N; ++i) {
175 if(IsLineEnd(*s)) {
176 throw std::range_error("Token count out of range, EOL reached");
177 }
178 tokens[i] = s;
179
180 for(;*s && !IsSpace(*s); ++s);
181 SkipSpaces(&s);
182 }
183 }
184
185 // -----------------------------------------
186 /** member access */
187 const std::string* operator -> () const {
188 return &cur;
189 }
190
191 std::string operator* () const {
192 return cur;
193 }
194
195 // -----------------------------------------
196 /** boolean context */
197 operator bool() const {
198 return stream.GetRemainingSize()>0;
199 }
200
201 // -----------------------------------------
202 /** line indices are zero-based, empty lines are included */
203 operator line_idx() const {
204 return idx;
205 }
206
207 line_idx get_index() const {
208 return idx;
209 }
210
211 // -----------------------------------------
212 /** access the underlying stream object */
213 StreamReaderLE& get_stream() {
214 return stream;
215 }
216
217 // -----------------------------------------
218 /** !strcmp((*this)->substr(0,strlen(check)),check) */
219 bool match_start(const char* check) {
220 const size_t len = strlen(check);
221
222 return len <= cur.length() && std::equal(check,check+len,cur.begin());
223 }
224
225
226 // -----------------------------------------
227 /** swallow the next call to ++, return the previous value. */
228 void swallow_next_increment() {
229 swallow = true;
230 }
231
232 private:
233
234 line_idx idx;
235 std::string cur;
236 StreamReaderLE& stream;
237 bool swallow, skip_empty_lines, trim;
238 };
239
240 }
241 #endif // INCLUDED_LINE_SPLITTER_H
151 for(;!IsSpace(*s); ++s) {
152 if(IsLineEnd(*s)) {
153 throw std::range_error("Token index out of range, EOL reached");
154 }
155 }
156 SkipSpaces(&s);
157 }
158 return s;
159 }
160
161 // -----------------------------------------
162 /** extract the start positions of N tokens from the current line*/
163 template <size_t N>
164 void get_tokens(const char* (&tokens)[N]) const {
165 const char* s = operator->()->c_str();
166
167 SkipSpaces(&s);
168 for(size_t i = 0; i < N; ++i) {
169 if(IsLineEnd(*s)) {
170
171 throw std::range_error("Token count out of range, EOL reached");
172
173 }
174 tokens[i] = s;
175
176 for(;*s && !IsSpace(*s); ++s);
177 SkipSpaces(&s);
178 }
179 }
180
181 // -----------------------------------------
182 /** member access */
183 const std::string* operator -> () const {
184 return &cur;
185 }
186
187 std::string operator* () const {
188 return cur;
189 }
190
191 // -----------------------------------------
192 /** boolean context */
193 operator bool() const {
194 return stream.GetRemainingSize()>0;
195 }
196
197 // -----------------------------------------
198 /** line indices are zero-based, empty lines are included */
199 operator line_idx() const {
200 return idx;
201 }
202
203 line_idx get_index() const {
204 return idx;
205 }
206
207 // -----------------------------------------
208 /** access the underlying stream object */
209 StreamReaderLE& get_stream() {
210 return stream;
211 }
212
213 // -----------------------------------------
214 /** !strcmp((*this)->substr(0,strlen(check)),check) */
215 bool match_start(const char* check) {
216 const size_t len = strlen(check);
217
218 return len <= cur.length() && std::equal(check,check+len,cur.begin());
219 }
220
221
222 // -----------------------------------------
223 /** swallow the next call to ++, return the previous value. */
224 void swallow_next_increment() {
225 swallow = true;
226 }
227
228 private:
229
230 line_idx idx;
231 std::string cur;
232 StreamReaderLE& stream;
233 bool swallow, skip_empty_lines, trim;
234 };
235
236 }
237 #endif // INCLUDED_LINE_SPLITTER_H
8888 }
8989
9090 // https://sourceforge.net/tracker/?func=detail&atid=1067632&aid=3358562&group_id=226462
91 #if !defined(__GNUC__) || !defined(__APPLE__) || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)
91 #if !defined(__GNUC__) || !defined(__APPLE__) || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
9292
9393 // ------------------------------------------------------------------------------------------------
9494 static void LogWarn (const char* message) {
+0
-371
code/M3Importer.cpp less more
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 #include "AssimpPCH.h"
41 #ifndef ASSIMP_BUILD_NO_M3_IMPORTER
42
43 #include "M3Importer.h"
44 #include <sstream>
45
46 namespace Assimp {
47 namespace M3 {
48
49 static const aiImporterDesc desc = {
50 "StarCraft M3 Importer",
51 "",
52 "",
53 "",
54 aiImporterFlags_SupportBinaryFlavour,
55 0,
56 0,
57 0,
58 0,
59 "m3"
60 };
61
62 // ------------------------------------------------------------------------------------------------
63 // Constructor.
64 M3Importer::M3Importer() :
65 m_pHead( NULL ),
66 m_pRefs( NULL ),
67 m_Buffer()
68 {
69 // empty
70 }
71
72 // ------------------------------------------------------------------------------------------------
73 // Destructor.
74 M3Importer::~M3Importer()
75 {
76 m_pHead = NULL;
77 m_pRefs = NULL;
78 }
79
80 // ------------------------------------------------------------------------------------------------
81 // Check for readable file format.
82 bool M3Importer::CanRead( const std::string &rFile, IOSystem* /*pIOHandler*/, bool checkSig ) const
83 {
84 if ( !checkSig ) {
85 return SimpleExtensionCheck( rFile, "m3" );
86 }
87
88 return false;
89 }
90
91 // ------------------------------------------------------------------------------------------------
92 const aiImporterDesc* M3Importer::GetInfo () const
93 {
94 return &desc;
95 }
96
97 // ------------------------------------------------------------------------------------------------
98 void M3Importer::InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler )
99 {
100 ai_assert( !pFile.empty() );
101
102 const std::string mode = "rb";
103 boost::scoped_ptr<IOStream> file( pIOHandler->Open( pFile, mode ) );
104 if ( NULL == file.get() ) {
105 throw DeadlyImportError( "Failed to open file " + pFile + ".");
106 }
107
108 // Get the file-size and validate it, throwing an exception when it fails
109 const size_t filesize = file->FileSize();
110 if( filesize < 1 ) {
111 throw DeadlyImportError( "M3-file is too small.");
112 }
113
114 m_Buffer.resize( filesize );
115 size_t readsize = file->Read( &m_Buffer[ 0 ], sizeof( unsigned char ), filesize );
116 ai_assert( readsize == filesize );
117
118 m_pHead = reinterpret_cast<MD33*>( &m_Buffer[ 0 ] );
119 m_pRefs = reinterpret_cast<ReferenceEntry*>( &m_Buffer[ 0 ] + m_pHead->ofsRefs );
120
121 MODL20* pMODL20( NULL );
122 MODL23* pMODL23( NULL );
123
124 VertexExt* pVerts1( NULL );
125 Vertex* pVerts2( NULL );
126
127 DIV *pViews( NULL );
128 Region* regions( NULL );
129 uint16* faces( NULL );
130
131 uint32 nVertices = 0;
132
133 bool ok = true;
134 switch( m_pRefs[ m_pHead->MODL.ref ].type ) {
135 case 20:
136 pMODL20 = GetEntries<MODL20>( m_pHead->MODL );
137 if ( ( pMODL20->flags & 0x20000) != 0 ) { // Has vertices
138 if( (pMODL20->flags & 0x40000) != 0 ) { // Has extra 4 byte
139 pVerts1 = GetEntries<VertexExt>( pMODL20->vertexData );
140 nVertices = pMODL20->vertexData.nEntries/sizeof(VertexExt);
141 }
142 else {
143 pVerts2 = GetEntries<Vertex>( pMODL20->vertexData );
144 nVertices = pMODL20->vertexData.nEntries / sizeof( Vertex );
145 }
146 }
147 pViews = GetEntries<DIV>( pMODL20->views );
148 break;
149
150 case 23:
151 pMODL23 = GetEntries<MODL23>(m_pHead->MODL );
152 if( (pMODL23->flags & 0x20000) != 0 ) { // Has vertices
153 if( (pMODL23->flags & 0x40000) != 0 ) { // Has extra 4 byte
154 pVerts1 = GetEntries<VertexExt>( pMODL23->vertexData );
155 nVertices = pMODL23->vertexData.nEntries/sizeof( VertexExt );
156 }
157 else {
158 pVerts2 = GetEntries<Vertex>( pMODL23->vertexData );
159 nVertices = pMODL23->vertexData.nEntries/sizeof( Vertex );
160 }
161 }
162 pViews = GetEntries<DIV>( pMODL23->views );
163 break;
164
165 default:
166 ok = false;
167 break;
168 }
169
170 // Everything ok, if not throw an exception
171 if ( !ok ) {
172 throw DeadlyImportError( "Failed to open file " + pFile + ".");
173 }
174
175 // Get all region data
176 regions = GetEntries<Region>( pViews->regions );
177
178 // Get the face data
179 faces = GetEntries<uint16>( pViews->faces );
180
181 // Convert the vertices
182 std::vector<aiVector3D> vertices;
183 vertices.resize( nVertices );
184 unsigned int offset = 0;
185 for ( unsigned int i = 0; i < nVertices; i++ ) {
186 if ( pVerts1 ) {
187 vertices[ offset ].Set( pVerts1[ i ].pos.x, pVerts1[ i ].pos.y, pVerts1[ i ].pos.z );
188 ++offset;
189 }
190
191 if ( pVerts2 ) {
192 vertices[ offset ].Set( pVerts2[ i ].pos.x, pVerts2[ i ].pos.y, pVerts2[ i ].pos.z );
193 ++offset;
194 }
195 }
196
197 // Write the UV coordinates
198 offset = 0;
199 std::vector<aiVector3D> uvCoords;
200 uvCoords.resize( nVertices );
201 for( unsigned int i = 0; i < nVertices; ++i ) {
202 if( pVerts1 ) {
203 float u = (float) pVerts1[ i ].uv[ 0 ] / 2048;
204 float v = (float) pVerts1[ i ].uv[ 1 ] / 2048;
205 uvCoords[ offset ].Set( u, v, 0.0f );
206 ++offset;
207 }
208
209 if( pVerts2 ) {
210 float u = (float) pVerts2[ i ].uv[ 0 ] / 2048;
211 float v = (float) pVerts2[ i ].uv[ 1 ] / 2048;
212 uvCoords[ offset ].Set( u, v, 0.0f );
213 ++offset;
214 }
215 }
216
217 // Compute the normals
218 std::vector<aiVector3D> normals;
219 normals.resize( nVertices );
220 float w = 0.0f;
221 Vec3D norm;
222 offset = 0;
223 for( unsigned int i = 0; i < nVertices; i++ ) {
224 w = 0.0f;
225 if( pVerts1 ) {
226 norm.x = (float) 2*pVerts1[ i ].normal[ 0 ]/255.0f - 1;
227 norm.y = (float) 2*pVerts1[ i ].normal[ 1 ]/255.0f - 1;
228 norm.z = (float) 2*pVerts1[ i ].normal[ 2 ]/255.0f - 1;
229 w = (float) pVerts1[ i ].normal[ 3 ]/255.0f;
230 }
231
232 if( pVerts2 ) {
233 norm.x = (float) 2*pVerts2[ i ].normal[ 0 ]/255.0f - 1;
234 norm.y = (float) 2*pVerts2[ i ].normal[ 1 ]/255.0f - 1;
235 norm.z = (float) 2*pVerts2[ i ].normal[ 2 ]/255.0f - 1;
236 w = (float) pVerts2[ i ].normal[ 3 ] / 255.0f;
237 }
238
239 if ( w ) {
240 const float invW = 1.0f / w;
241 norm.x = norm.x * invW;
242 norm.y = norm.y * invW;
243 norm.z = norm.z * invW;
244 normals[ offset ].Set( norm.x, norm.y, norm.z );
245 ++offset;
246 }
247 }
248
249 // Convert the data into the assimp specific data structures
250 convertToAssimp( pFile, pScene, pViews, regions, faces, vertices, uvCoords, normals );
251 }
252
253 // ------------------------------------------------------------------------------------------------
254 //
255 void M3Importer::convertToAssimp( const std::string& pFile, aiScene* pScene, DIV *pViews,
256 Region *pRegions, uint16 *pFaces,
257 const std::vector<aiVector3D> &vertices,
258 const std::vector<aiVector3D> &uvCoords,
259 const std::vector<aiVector3D> &normals )
260 {
261 std::vector<aiMesh*> MeshArray;
262
263 // Create the root node
264 pScene->mRootNode = createNode( NULL );
265
266 // Set the name of the scene
267 pScene->mRootNode->mName.Set( pFile );
268
269 aiNode *pRootNode = pScene->mRootNode;
270 aiNode *pCurrentNode = NULL;
271
272 // Lets create the nodes
273 pRootNode->mNumChildren = pViews->regions.nEntries;
274 if ( pRootNode->mNumChildren > 0 ) {
275 pRootNode->mChildren = new aiNode*[ pRootNode->mNumChildren ];
276 }
277
278 for ( unsigned int i=0; i<pRootNode->mNumChildren; ++i ) {
279 //pRegions[ i ].
280 // Create a new node
281 pCurrentNode = createNode( pRootNode );
282 std::stringstream stream;
283 stream << "Node_" << i;
284 pCurrentNode->mName.Set( stream.str().c_str() );
285 pRootNode->mChildren[ i ] = pCurrentNode;
286
287 // Loop over the faces of the nodes
288 unsigned int numFaces = ( ( pRegions[ i ].ofsIndices + pRegions[ i ].nIndices ) - pRegions[ i ].ofsIndices ) / 3;
289 aiMesh *pMesh = new aiMesh;
290 MeshArray.push_back( pMesh );
291 pMesh->mPrimitiveTypes = aiPrimitiveType_TRIANGLE;
292
293 pMesh->mNumFaces = numFaces;
294 pMesh->mFaces = new aiFace[ pMesh->mNumFaces ];
295 aiFace *pCurrentFace = NULL;
296 unsigned int faceIdx = 0;
297 for ( unsigned int j = pRegions[ i ].ofsIndices; j < ( pRegions[ i ].ofsIndices + pRegions[ i ].nIndices ); j += 3 ) {
298 pCurrentFace = &( pMesh->mFaces[ faceIdx ] );
299 faceIdx++;
300 pCurrentFace->mNumIndices = 3;
301 pCurrentFace->mIndices = new unsigned int[ 3 ];
302 pCurrentFace->mIndices[ 0 ] = pFaces[ j ];
303 pCurrentFace->mIndices[ 1 ] = pFaces[ j+1 ];
304 pCurrentFace->mIndices[ 2 ] = pFaces[ j+2 ];
305 }
306 // Now we can create the vertex data itself
307 pCurrentNode->mNumMeshes = 1;
308 pCurrentNode->mMeshes = new unsigned int[ 1 ];
309 const unsigned int meshIdx = MeshArray.size() - 1;
310 pCurrentNode->mMeshes[ 0 ] = meshIdx;
311 createVertexData( pMesh, vertices, uvCoords, normals );
312 }
313
314 // Copy the meshes into the scene
315 pScene->mNumMeshes = MeshArray.size();
316 pScene->mMeshes = new aiMesh*[ MeshArray.size() ];
317 unsigned int pos = 0;
318 for ( std::vector<aiMesh*>::iterator it = MeshArray.begin(); it != MeshArray.end(); ++it ) {
319 pScene->mMeshes[ pos ] = *it;
320 ++pos;
321 }
322 }
323
324 // ------------------------------------------------------------------------------------------------
325 //
326 void M3Importer::createVertexData( aiMesh *pMesh, const std::vector<aiVector3D> &vertices,
327 const std::vector<aiVector3D> &uvCoords,
328 const std::vector<aiVector3D> &normals )
329 {
330 pMesh->mNumVertices = pMesh->mNumFaces * 3;
331 pMesh->mVertices = new aiVector3D[ pMesh->mNumVertices ];
332 pMesh->mNumUVComponents[ 0 ] = 2;
333 pMesh->mTextureCoords[ 0 ] = new aiVector3D[ pMesh->mNumVertices ];
334 pMesh->mNormals = new aiVector3D[ pMesh->mNumVertices ];
335 unsigned int pos = 0;
336 for ( unsigned int currentFace = 0; currentFace < pMesh->mNumFaces; currentFace++ ) {
337 aiFace *pFace = &( pMesh->mFaces[ currentFace ] );
338 for ( unsigned int currentIdx=0; currentIdx<pFace->mNumIndices; currentIdx++ ) {
339 const unsigned int idx = pFace->mIndices[ currentIdx ];
340 if ( vertices.size() > idx ) {
341 pMesh->mVertices[ pos ] = vertices[ idx ];
342 pMesh->mNormals[ pos ] = normals[ idx ];
343 pMesh->mTextureCoords[ 0 ]->x = uvCoords[ idx ].x;
344 pMesh->mTextureCoords[ 0 ]->y = uvCoords[ idx ].y;
345 pFace->mIndices[ currentIdx ] = pos;
346 pos++;
347 }
348 }
349 }
350 }
351
352 // ------------------------------------------------------------------------------------------------
353 //
354 aiNode *M3Importer::createNode( aiNode *pParent )
355 {
356 aiNode *pNode = new aiNode;
357 if ( pParent )
358 pNode->mParent = pParent;
359 else
360 pNode->mParent = NULL;
361
362 return pNode;
363 }
364
365 // ------------------------------------------------------------------------------------------------
366
367 } // Namespace M3
368 } // Namespace Assimp
369
370 #endif // ASSIMP_BUILD_NO_M3_IMPORTER
+0
-726
code/M3Importer.h less more
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39 #ifndef AI_M3LOADER_H_INCLUDED
40 #define AI_M3LOADER_H_INCLUDED
41
42 #include <vector>
43
44 namespace Assimp {
45
46 namespace M3 {
47
48 // ------------------------------------------------------------------------------------------------
49 // The following data definitions are from http://code.google.com/p/libm3/, many thanks for that
50 // help.
51 // ------------------------------------------------------------------------------------------------
52 typedef unsigned char uint8;
53 typedef char int8;
54 typedef unsigned short uint16;
55 typedef short int16;
56 typedef unsigned int uint32;
57 typedef int int32;
58
59 class Vec3D
60 {
61 public:
62 float x,y,z;
63
64 Vec3D(float x0 = 0.0f, float y0 = 0.0f, float z0 = 0.0f) : x(x0), y(y0), z(z0) {}
65
66 Vec3D(const Vec3D& v) : x(v.x), y(v.y), z(v.z) {}
67
68 void reset()
69 {
70 x = y = z = 0.0f;
71 }
72
73 Vec3D& operator= (const Vec3D &v)
74 {
75 x = v.x;
76 y = v.y;
77 z = v.z;
78 return *this;
79 }
80
81 Vec3D operator+ (const Vec3D &v) const
82 {
83 Vec3D r(x+v.x,y+v.y,z+v.z);
84 return r;
85 }
86
87 Vec3D operator- (const Vec3D &v) const
88 {
89 Vec3D r(x-v.x,y-v.y,z-v.z);
90 return r;
91 }
92
93 float operator* (const Vec3D &v) const
94 {
95 return x*v.x + y*v.y + z*v.z;
96 }
97
98 Vec3D operator* (float d) const
99 {
100 Vec3D r(x*d,y*d,z*d);
101 return r;
102 }
103
104 Vec3D operator/ (float d) const
105 {
106 Vec3D r(x/d,y/d,z/d);
107 return r;
108 }
109
110 friend Vec3D operator* (float d, const Vec3D& v)
111 {
112 return v * d;
113 }
114
115 // Cross Product
116 Vec3D operator% (const Vec3D &v) const
117 {
118 Vec3D r(y*v.z-z*v.y, z*v.x-x*v.z, x*v.y-y*v.x);
119 return r;
120 }
121
122 Vec3D& operator+= (const Vec3D &v)
123 {
124 x += v.x;
125 y += v.y;
126 z += v.z;
127 return *this;
128 }
129
130 Vec3D& operator-= (const Vec3D &v)
131 {
132 x -= v.x;
133 y -= v.y;
134 z -= v.z;
135 return *this;
136 }
137
138 Vec3D& operator*= (float d)
139 {
140 x *= d;
141 y *= d;
142 z *= d;
143 return *this;
144 }
145
146 float lengthSquared() const
147 {
148 return x*x+y*y+z*z;
149 }
150
151 float length() const
152 {
153 return sqrtf(x*x+y*y+z*z);
154 }
155
156 Vec3D& normalize()
157 {
158 this->operator*= (1.0f/length());
159 return *this;
160 }
161
162 Vec3D operator~ () const
163 {
164 Vec3D r(*this);
165 r.normalize();
166 return r;
167 }
168
169 operator float*()
170 {
171 return (float*)this;
172 }
173 };
174
175
176 class Vec2D
177 {
178 public:
179 float x,y;
180
181 Vec2D(float x0 = 0.0f, float y0 = 0.0f) : x(x0), y(y0) {}
182
183 Vec2D(const Vec2D& v) : x(v.x), y(v.y) {}
184
185 Vec2D& operator= (const Vec2D &v)
186 {
187 x = v.x;
188 y = v.y;
189 return *this;
190 }
191
192 Vec2D operator+ (const Vec2D &v) const
193 {
194 Vec2D r(x+v.x,y+v.y);
195 return r;
196 }
197
198 Vec2D operator- (const Vec2D &v) const
199 {
200 Vec2D r(x-v.x,y-v.y);
201 return r;
202 }
203
204 float operator* (const Vec2D &v) const
205 {
206 return x*v.x + y*v.y;
207 }
208
209 Vec2D operator* (float d) const
210 {
211 Vec2D r(x*d,y*d);
212 return r;
213 }
214
215 friend Vec2D operator* (float d, const Vec2D& v)
216 {
217 return v * d;
218 }
219
220 Vec2D& operator+= (const Vec2D &v)
221 {
222 x += v.x;
223 y += v.y;
224 return *this;
225 }
226
227 Vec2D& operator-= (const Vec2D &v)
228 {
229 x -= v.x;
230 y -= v.y;
231 return *this;
232 }
233
234 Vec2D& operator*= (float d)
235 {
236 x *= d;
237 y *= d;
238 return *this;
239 }
240
241 float lengthSquared() const
242 {
243 return x*x+y*y;
244 }
245
246 float length() const
247 {
248 return sqrtf(x*x+y*y);
249 }
250
251 Vec2D& normalize()
252 {
253 this->operator*= (1.0f/length());
254 return *this;
255 }
256
257 Vec2D operator~ () const
258 {
259 Vec2D r(*this);
260 r.normalize();
261 return r;
262 }
263
264 operator float*()
265 {
266 return (float*)this;
267 }
268 };
269
270 inline
271 void rotate(float x0, float y0, float *x, float *y, float angle)
272 {
273 float xa = *x - x0, ya = *y - y0;
274 *x = xa*cosf(angle) - ya*sinf(angle) + x0;
275 *y = xa*sinf(angle) + ya*cosf(angle) + y0;
276 }
277
278 struct Reference
279 {
280 uint32 nEntries; // Code 0x00
281 uint32 ref; // Code 0x04
282 };
283
284 struct ReferenceEntry
285 {
286 char id[ 4 ]; // Code 0x00
287 uint32 offset; // Code 0x04
288 uint32 nEntries; // Code 0x08
289 uint32 type; // Code 0x0C
290 };
291
292 struct MD33
293 {
294 char id[4]; // Code 0x00
295 uint32 ofsRefs; // Code 0x04
296 uint32 nRefs; // Code 0x08
297 Reference MODL; // Code 0x0C
298 };
299
300 enum ModelType
301 {
302 Type1 = 20,
303 Type2 = 23
304 };
305
306 enum VertexFormat
307 {
308 Vertex_Standard,
309 Vertex_Extended
310 };
311
312 struct MODL23
313 {
314 Reference name; // Code 0x00
315 uint32 version; // Code 0x08
316 Reference sequenceHeader; // Code 0x0C
317 Reference sequenceData; // Code 0x14
318 Reference sequenceLookup; // Code 0x1C
319 uint32 d2; // Code 0x24
320 uint32 d3; // Code 0x28
321 uint32 d4; // Code 0x2C
322 Reference STS; // Code 0x30
323 Reference bones; // Code 0x38
324 uint32 d5; // Code 0x40
325 uint32 flags; // Code 0x44
326 Reference vertexData; // Code 0x48
327 Reference views; // Code 0x50
328 Reference B; // Code 0x58
329
330 Vec3D extents[2]; // Code 0x60
331 float radius; // Code 0x78
332
333 uint32 d7; // Code 0x7C
334 uint32 d8; // Code 0x80
335 uint32 d9; // Code 0x84
336 uint32 d10; // Code 0x88
337 uint32 d11; // Code 0x8C
338 uint32 d12; // Code 0x90
339 uint32 d13; // Code 0x94
340 uint32 d14; // Code 0x98
341 uint32 d15; // Code 0x9C
342 uint32 d16; // Code 0xA0
343 uint32 d17; // Code 0xA4
344 uint32 d18; // Code 0xA8
345 uint32 d19; // Code 0xAC
346
347 Reference attachments; // Code 0xB0
348 Reference attachmentLookup; // Code 0xB8
349 Reference lights; // Code 0xC0
350 Reference SHBX; // Code 0xC8
351 Reference cameras; // Code 0xD0
352 Reference D; // Code 0xD8
353 Reference materialLookup; // Code 0xE0
354 Reference materials; // Code 0xE8
355 Reference DIS; // Code 0xF0
356 Reference CMP; // Code 0xF8
357
358 Reference TER; // Code 0x10
359 Reference VOL; // Code 0x10
360 uint32 d21; // Code 0x11
361 uint32 d22; // Code 0x11
362 Reference CREP; // Code 0x11
363 Reference PAR; // Code 0x12
364 Reference PARC; // Code 0x12
365 Reference RIB; // Code 0x13
366 Reference PROJ; // Code 0x13
367 Reference FOR; // Code 0x14
368 Reference WRP; // Code 0x14
369 uint32 d24; // Code 0x15
370 uint32 d25; // Code 0x15
371 Reference PHRB; // Code 0x15
372 uint32 d27; // Code 0x16
373 uint32 d28; // Code 0x16
374 uint32 d29; // Code 0x16
375 uint32 d30; // Code 0x16
376 uint32 d32; // Code 0x17
377 uint32 d33; // Code 0x17
378 Reference IKJT; // Code 0x17
379 uint32 d35; // Code 0x18
380 uint32 d36; // Code 0x18
381 Reference PATU; // Code 0x18
382 Reference TRGD; // Code 0x19
383 Reference IREF; // Code 0x19
384 Reference E; // Code 0x1A
385 float matrix[4][4]; // Code 0x1A
386 Vec3D extent[2]; // Code 0x1E
387 float rad; // Code 0x20
388 Reference SSGS; // Code 0x20
389 Reference ATVL; // Code 0x20
390 uint32 d61; // Code 0x21
391 Reference F; // uint16, Code6 0x21
392 Reference G; // uint16, Code 0x21
393 Reference BBSC; // Code 0x22
394 Reference TMD; // Code 0x22
395 uint32 d62; // Code 0x23
396 uint32 d63; // Code 0x23
397 uint32 d64; // Code 0x23
398 };
399
400 struct MODL20
401 {
402 Reference name; // Code 0x00
403 uint32 version; // Code 0x08
404 Reference sequenceHeader; // Code 0x0C
405 Reference sequenceData; // Code 0x14
406 Reference sequenceLookup; // Code 0x1C
407 uint32 d2; // Code 0x24
408 uint32 d3; // Code 0x28
409 uint32 d4; // Code 0x2C
410 Reference STS; // Code 0x30
411 Reference bones; // Code 0x38
412 uint32 d5; // Code 0x44
413 uint32 flags; // Code 0x44
414 Reference vertexData; // uint8, Code 0x48
415 Reference views; // Code 0x50
416 Reference B; // uint16, Code 0x58
417
418 Vec3D extents[2]; // Code 0x60
419 float radius; // Code 0x78
420
421 uint32 d7; // Code 0x7C
422 uint32 d8; // Code 0x80
423 uint32 d9; // Code 0x84
424 uint32 d10; // Code 0x88
425 uint32 d11; // Code 0x8C
426 uint32 d12; // Code 0x90
427 uint32 d13; // Code 0x94
428 uint32 d14; // Code 0x98
429 uint32 d15; // Code 0x9C
430 uint32 d16; // Code 0xA0
431 uint32 d17; // Code 0xA4
432 uint32 d18; // Code 0xA8
433 uint32 d19; // Code 0xAC
434
435 Reference attachments; // Code 0xB0
436 Reference attachmentLookup; // uint16, Code 0xB8
437 Reference lights; // Code 0xC0
438 Reference cameras; // Code 0xC8
439 Reference D; // uint16, Code 0xD0
440 Reference materialLookup; // Code 0xD8
441 Reference materials; // Code 0xE0
442 Reference DIS; // Code 0xE8
443 Reference CMP; // Code 0xF0
444 Reference TER; // Code 0xF8
445
446 uint32 d20; // Code 0x10
447 uint32 d21; // Code 0x10
448 uint32 d22; // Code 0x10
449 uint32 d23; // Code 0x10
450 Reference CREP; // Code 0x11
451 Reference PAR; // Code 0x11
452 Reference PARC; // Code 0x12
453 Reference RIB; // Code 0x12
454 Reference PROJ; // Code 0x13
455 Reference FOR; // Code 0x13
456 uint32 d25; // Code 0x14
457 uint32 d26; // Code 0x14
458 uint32 d27; // Code 0x14
459 uint32 d28; // Code 0x14
460 Reference PHRB; // Code 0x15
461 uint32 d30; // Code 0x15
462 uint32 d31; // Code 0x15
463 uint32 d32; // Code 0x16
464 uint32 d33; // Code 0x16
465 uint32 d34; // Code 0x16
466 uint32 d35; // Code 0x16
467 Reference IKJT; // Code 0x17
468 uint32 d36; // Code 0x17
469 uint32 d37; // Code 0x17
470 Reference PATU; // Code 0x18
471 Reference TRGD; // Code 0x18
472 Reference IREF; // Code 0x19
473 Reference E; // int32, Code 0x19
474
475 float matrix[4][4]; // Code 0x1A
476 Vec3D extent[2]; // Code 0x1E
477 float rad; // Code 0x1F
478
479 Reference SSGS; // Code 0x1F
480 uint32 d38; // Code 0x20
481 uint32 d39; // Code 0x20
482 Reference BBSC; // Code 0x20
483
484 uint32 d40; // Code 0x21
485 uint32 d41; // Code 0x21
486 uint32 d42; // Code 0x21
487 uint32 d43; // Code 0x22
488 uint32 d44; // Code 0x22
489 };
490
491 struct BONE
492 {
493 int32 d1; // Keybone?
494 Reference name;
495 uint32 flags;
496 int16 parent;
497 int16 s1;
498
499 float floats[ 34 ];
500 };
501
502 struct VertexExt // 36 byte
503 {
504 Vec3D pos;
505 uint8 boneWeight[ 4 ];
506 uint8 boneIndex[ 4 ];
507 uint8 normal[ 4 ]; //normal_x = (float)normal[0]/255.0f...
508 int16 uv[ 2 ];
509 uint32 d1;
510 uint8 tangent[ 4 ];
511 };
512
513 struct Vertex // 32 byte
514 {
515 Vec3D pos;
516 uint8 boneWeight[4];
517 uint8 boneIndex[4];
518 uint8 normal[4]; //normal_x = (float)normal[0]/255.0f...
519 int16 uv[2];
520 uint8 tangent[4];
521 };
522
523 struct MATM
524 {
525 uint32 d1;
526 uint32 d2; // Index into MAT-table?
527 };
528
529 struct MAT
530 {
531 Reference name;
532 int ukn1[ 8 ];
533 float x, y; //always 1.0f
534 Reference layers[13];
535 int ukn2[15];
536 };
537
538 struct LAYR
539 {
540 int unk;
541 Reference name;
542 float unk2[85];
543 };
544
545 struct DIV
546 {
547 Reference faces; // Code 0x00
548 Reference regions; // Code 0x08
549 Reference BAT; // Code 0x10
550 Reference MSEC; // Code 0x18
551 };
552
553 struct Region
554 {
555 uint32 unk;
556 uint16 ofsVertices;
557 uint16 nVertices;
558 uint32 ofsIndices;
559 uint32 nIndices; // reference into DIV.faces
560 uint8 unknown[12];
561 };
562
563 struct CAM
564 {
565 int32 d1; // Code 0x00
566 Reference name; // Code 0x04
567 uint16 flags1; // Code 0x0C
568 uint16 flags2; // Code 0x0E
569 };
570
571 struct EVNT
572 {
573 Reference name; // Code 0x00
574 int16 unk1[4]; // Code 0x08
575 float matrix[4][4]; // Code 0x10
576 int32 unk2[4]; // Code 0x50
577 };
578
579 struct ATT
580 {
581 int32 unk; // Code 0x00
582 Reference name; // Code 0x04
583 int32 bone; // Code 0x0C
584 };
585
586 struct PHSH
587 {
588 float m[ 4 ][ 4 ];
589 float f1;
590 float f2;
591 Reference refs[ 5 ];
592 float f3;
593 };
594
595 struct SEQS
596 {
597 int32 d1; // Code 0x00
598 int32 d2; // Code 0x04
599 Reference name; // Code 0x08
600 int32 d3; // Code 0x10
601 uint32 length; // Code 0x14
602 int32 d4; // Code 0x18
603 uint32 flags; // Code 0x1C
604 int32 unk[5]; // Code 0x20
605 Vec3D extents[2]; // Code 0x34
606 float radius; // Code 0x4C
607 int32 d5; // Code 0x50
608 int32 d6; // Code 0x54
609 };
610
611 struct STC
612 {
613 Reference name; // Code 0x00
614 uint16 s1; // Code 0x08
615 uint16 s2; // Code 0x0A
616 uint16 s3; // Code 0x0C
617 uint16 s4; // Code 0x0E
618 Reference unk2; // uint32 // Code 0x12
619 Reference unk3; // uint32 // Code 0x1A
620 uint32 d3; // Code 0x22
621 Reference evt; // Code 0x24
622 Reference unk4[11]; // Seems to be transformation data // Code 0x2C
623 Reference bnds; // Code 0x84
624 };
625
626 struct STS
627 {
628 Reference unk1; // uint32 // Code 0x00
629 int32 unk[3]; // Code 0x08
630 int16 s1; // Code 0x14
631 int16 s2; // Code 0x16
632 };
633
634 struct STG
635 {
636 Reference name; // Code 0x00
637 Reference stcID; // Code 0x08
638 };
639
640 struct SD
641 {
642 Reference timeline; // Code 0x00
643 uint32 flags; // Code 0x08
644 uint32 length; // Code 0x0C
645 Reference data; // Code 0x10
646 };
647
648 struct BNDS
649 {
650 Vec3D extents1[2]; // Code 0x00
651 float radius1; // Code 0x18
652 Vec3D extents2[2]; // Code 0x1C
653 float radius2; // Code 0x34
654 };
655
656 struct VEC2
657 {
658 float x, y;
659 };
660
661 struct VEC3
662 {
663 float x, y, z;
664 };
665
666 struct VEC4
667 {
668 float x, y, z, w;
669 };
670
671 struct QUAT
672 {
673 float x, y, z, w;
674 };
675
676 // ------------------------------------------------------------------------------------------------
677 /** Loader to import M3-models.
678 */
679 // ------------------------------------------------------------------------------------------------
680 class M3Importer : public BaseImporter
681 {
682 friend class Importer;
683
684 public:
685 /// @brief The default constructor.
686 M3Importer();
687
688 /// @brief The destructor.
689 ~M3Importer();
690
691 /// @brief Returns whether the class can handle the format of the given file.
692 /// @remark See BaseImporter::CanRead() for details.
693 bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig ) const;
694
695 private:
696 const aiImporterDesc* GetInfo () const;
697 void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler );
698 void convertToAssimp( const std::string& pFile, aiScene* pScene, DIV *pViews, Region *pRegions, uint16 *pFaces,
699 const std::vector<aiVector3D> &vertices, const std::vector<aiVector3D> &uvCoords, const std::vector<aiVector3D> &normals );
700 void createVertexData( aiMesh *pMesh, const std::vector<aiVector3D> &vertices, const std::vector<aiVector3D> &uvCoords,
701 const std::vector<aiVector3D> &normals );
702 aiNode *createNode( aiNode *pParent );
703 template<typename T>
704 T* GetEntries( Reference ref );
705
706 private:
707 MD33 *m_pHead;
708 ReferenceEntry *m_pRefs;
709 std::vector<unsigned char> m_Buffer;
710 };
711
712 // ------------------------------------------------------------------------------------------------
713 template<typename T>
714 inline
715 T* M3Importer::GetEntries( Reference ref )
716 {
717 return (T*) ( &m_Buffer[ 0 ] + m_pRefs[ ref.ref ].offset );
718 }
719
720 // ------------------------------------------------------------------------------------------------
721
722 } // Namespace M3
723 } // Namespace Assimp
724
725 #endif // AI_M3LOADER_H_INCLUDED
186186 ai_assert(fileSize);
187187
188188 // allocate storage and copy the contents of the file to a memory buffer
189 pScene = pScene;
190189 mBuffer = new char[fileSize+1];
191190 file->Read( (void*)mBuffer, 1, fileSize);
192191 iLineNumber = 1;
786786 }
787787
788788 // ------------------------------------------------------------------------------------------------
789 // What the fuck does this function do? Can't remember
790789 void MDLImporter::ParseSkinLump_3DGS_MDL7(
791790 const unsigned char* szCurrent,
792791 const unsigned char** szCurrentOut,
562562 }
563563
564564 // ... add dummy nodes under a single root, each holding a reference to one
565 // mesh. If we didn't do this, we'd loose the group name.
565 // mesh. If we didn't do this, we'd lose the group name.
566566 aiNode* rt = pScene->mRootNode = new aiNode("<MS3DRoot>");
567567
568568 #ifdef ASSIMP_BUILD_MS3D_ONE_NODE_PER_MESH
101101 }
102102
103103 // data is given in floats, simply copy it
104 unsigned int iWrite;
104 unsigned int iWrite = 0;
105105 if( aiPTI_Float == prop->mType || aiPTI_Buffer == prop->mType) {
106106 iWrite = prop->mDataLength / sizeof(float);
107107 if (pMax) {
174174 }
175175
176176 // data is given in ints, simply copy it
177 unsigned int iWrite;
177 unsigned int iWrite = 0;
178178 if( aiPTI_Integer == prop->mType || aiPTI_Buffer == prop->mType) {
179179 iWrite = prop->mDataLength / sizeof(int32_t);
180180 if (pMax) {
247247 }
248248
249249 // ------------------------------------------------------------------------------------------------
250 // Get a aiUVTransform (4 floats) from the material
251 aiReturn aiGetMaterialUVTransform(const aiMaterial* pMat,
252 const char* pKey,
253 unsigned int type,
254 unsigned int index,
255 aiUVTransform* pOut)
256 {
257 unsigned int iMax = 4;
258 return aiGetMaterialFloatArray(pMat,pKey,type,index,(float*)pOut,&iMax);
259 }
260
261 // ------------------------------------------------------------------------------------------------
250262 // Get a string from the material
251263 aiReturn aiGetMaterialString(const aiMaterial* pMat,
252264 const char* pKey,
5252 {
5353 //friend class MemoryIOSystem;
5454 public:
55 MemoryIOStream (const uint8_t* buff, size_t len)
56 : buffer (buff), length(len), pos((size_t)0) {
55 MemoryIOStream (const uint8_t* buff, size_t len, bool own = false)
56 : buffer (buff)
57 , length(len)
58 , pos((size_t)0)
59 , own(own)
60 {
5761 }
5862
5963 public:
64
6065 ~MemoryIOStream () {
66 if(own) {
67 delete[] buffer;
68 }
6169 }
6270
6371 // -------------------------------------------------------------------
123131 private:
124132 const uint8_t* buffer;
125133 size_t length,pos;
134 bool own;
126135 };
127136
128137 // ---------------------------------------------------------------------------
4343 */
4444
4545 #include "AssimpPCH.h"
46 #ifndef AI_BUILD_NO_NDO_IMPORTER
46 #ifndef ASSIMP_BUILD_NO_NDO_IMPORTER
4747 #include "NDOLoader.h"
4848
4949 using namespace Assimp;
5858 // we're still here - export successfully completed. Write both the main OBJ file and the material script
5959 {
6060 boost::scoped_ptr<IOStream> outfile (pIOSystem->Open(pFile,"wt"));
61 if(outfile == NULL) {
62 throw DeadlyExportError("could not open output .obj file: " + std::string(pFile));
63 }
6164 outfile->Write( exporter.mOutput.str().c_str(), static_cast<size_t>(exporter.mOutput.tellp()),1);
6265 }
6366 {
6467 boost::scoped_ptr<IOStream> outfile (pIOSystem->Open(exporter.GetMaterialLibFileName(),"wt"));
68 if(outfile == NULL) {
69 throw DeadlyExportError("could not open output .mtl file: " + std::string(exporter.GetMaterialLibFileName()));
70 }
6571 outfile->Write( exporter.mOutputMat.str().c_str(), static_cast<size_t>(exporter.mOutputMat.tellp()),1);
6672 }
6773 }
145151 if(AI_SUCCESS == mat->Get(AI_MATKEY_COLOR_SPECULAR,c)) {
146152 mOutputMat << "ks " << c.r << " " << c.g << " " << c.b << endl;
147153 }
154 if(AI_SUCCESS == mat->Get(AI_MATKEY_COLOR_EMISSIVE,c)) {
155 mOutputMat << "ke " << c.r << " " << c.g << " " << c.b << endl;
156 }
148157
149158 float o;
150159 if(AI_SUCCESS == mat->Get(AI_MATKEY_OPACITY,o)) {
192201 AddNode(pScene->mRootNode,mBase);
193202
194203 // write vertex positions
204 vpMap.getVectors(vp);
195205 mOutput << "# " << vp.size() << " vertex positions" << endl;
196206 BOOST_FOREACH(const aiVector3D& v, vp) {
197207 mOutput << "v " << v.x << " " << v.y << " " << v.z << endl;
199209 mOutput << endl;
200210
201211 // write uv coordinates
212 vtMap.getVectors(vt);
202213 mOutput << "# " << vt.size() << " UV coordinates" << endl;
203214 BOOST_FOREACH(const aiVector3D& v, vt) {
204215 mOutput << "vt " << v.x << " " << v.y << " " << v.z << endl;
206217 mOutput << endl;
207218
208219 // write vertex normals
220 vnMap.getVectors(vn);
209221 mOutput << "# " << vn.size() << " vertex normals" << endl;
210222 BOOST_FOREACH(const aiVector3D& v, vn) {
211223 mOutput << "vn " << v.x << " " << v.y << " " << v.z << endl;
245257 }
246258 }
247259
260
261
262
263
264 int ObjExporter::vecIndexMap::getIndex(const aiVector3D& vec)
265 {
266 vecIndexMap::dataType::iterator vertIt = vecMap.find(vec);
267 if(vertIt != vecMap.end()){// vertex already exists, so reference it
268 return vertIt->second;
269 }
270 vecMap[vec] = mNextIndex;
271 int ret = mNextIndex;
272 mNextIndex++;
273 return ret;
274 }
275
276 void ObjExporter::vecIndexMap::getVectors( std::vector<aiVector3D>& vecs )
277 {
278 vecs.resize(vecMap.size());
279 for(vecIndexMap::dataType::iterator it = vecMap.begin(); it != vecMap.end(); it++){
280 vecs[it->second-1] = it->first;
281 }
282 }
283
284
248285 // ------------------------------------------------------------------------------------------------
249286 void ObjExporter :: AddMesh(const aiString& name, const aiMesh* m, const aiMatrix4x4& mat)
250287 {
255292 mesh.matname = GetMaterialName(m->mMaterialIndex);
256293
257294 mesh.faces.resize(m->mNumFaces);
295
258296 for(unsigned int i = 0; i < m->mNumFaces; ++i) {
259297 const aiFace& f = m->mFaces[i];
260298
274312 for(unsigned int a = 0; a < f.mNumIndices; ++a) {
275313 const unsigned int idx = f.mIndices[a];
276314
277 // XXX need a way to check if this is an unique vertex or if we had it already,
278 // in which case we should instead reference the previous occurrence.
279 ai_assert(m->mVertices);
280 vp.push_back( mat * m->mVertices[idx] );
281 face.indices[a].vp = vp.size();
315 aiVector3D vert = mat * m->mVertices[idx];
316 face.indices[a].vp = vpMap.getIndex(vert);
282317
283318 if (m->mNormals) {
284 vn.push_back( m->mNormals[idx] );
285 }
286 face.indices[a].vn = vn.size();
319 face.indices[a].vn = vnMap.getIndex(m->mNormals[idx]);
320 }
321 else{
322 face.indices[a].vn = 0;
323 }
287324
288325 if (m->mTextureCoords[0]) {
289 vt.push_back( m->mTextureCoords[0][idx] );
290 }
291 face.indices[a].vt = vt.size();
326 face.indices[a].vt = vtMap.getIndex(m->mTextureCoords[0][idx]);
327 }
328 else{
329 face.indices[a].vt = 0;
330 }
292331 }
293332 }
294333 }
111111 const aiScene* const pScene;
112112
113113 std::vector<aiVector3D> vp, vn, vt;
114
115
116 struct aiVectorCompare
117 {
118 bool operator() (const aiVector3D& a, const aiVector3D& b) const
119 {
120 if(a.x < b.x) return true;
121 if(a.x > b.x) return false;
122 if(a.y < b.y) return true;
123 if(a.y > b.y) return false;
124 if(a.z < b.z) return true;
125 return false;
126 }
127 };
128
129 class vecIndexMap
130 {
131 int mNextIndex;
132 typedef std::map<aiVector3D, int, aiVectorCompare> dataType;
133 dataType vecMap;
134 public:
135
136 vecIndexMap():mNextIndex(1)
137 {}
138
139 int getIndex(const aiVector3D& vec);
140 void getVectors( std::vector<aiVector3D>& vecs );
141 };
142
143 vecIndexMap vpMap, vnMap, vtMap;
114144 std::vector<MeshInstance> meshes;
115145
116146 // this endl() doesn't flush() the stream
155155 aiString texture;
156156 aiString textureSpecular;
157157 aiString textureAmbient;
158 aiString textureEmissive;
158159 aiString textureBump;
160 aiString textureNormal;
159161 aiString textureSpecularity;
160162 aiString textureOpacity;
163 aiString textureDisp;
164 enum TextureType
165 {
166 TextureDiffuseType = 0,
167 TextureSpecularType,
168 TextureAmbientType,
169 TextureEmissiveType,
170 TextureBumpType,
171 TextureNormalType,
172 TextureSpecularityType,
173 TextureOpacityType,
174 TextureDispType,
175 TextureTypeCount
176 };
177 bool clamp[TextureTypeCount];
161178
162179 //! Ambient color
163180 aiColor3D ambient;
165182 aiColor3D diffuse;
166183 //! Specular color
167184 aiColor3D specular;
185 //! Emissive color
186 aiColor3D emissive;
168187 //! Alpha value
169188 float alpha;
170189 //! Shineness factor
183202 , ior (1.f)
184203 {
185204 // empty
205 for (size_t i = 0; i < TextureTypeCount; ++i)
206 {
207 clamp[i] = false;
208 }
186209 }
187210
188211 // Destructor
266289 //! Active group
267290 std::string m_strActiveGroup;
268291 //! Vector with generated texture coordinates
269 std::vector<aiVector2D> m_TextureCoord;
292 std::vector<aiVector3D> m_TextureCoord;
270293 //! Current mesh instance
271294 Mesh *m_pCurrentMesh;
272295 //! Vector with stored meshes
274297 //! Material map
275298 std::map<std::string, Material*> m_MaterialMap;
276299
277 //! \brief Default constructor
300 //! \brief The default class constructor
278301 Model() :
279302 m_ModelName(""),
280303 m_pCurrent(NULL),
281304 m_pCurrentMaterial(NULL),
282305 m_pDefaultMaterial(NULL),
306 m_pGroupFaceIDs(NULL),
283307 m_strActiveGroup(""),
284308 m_pCurrentMesh(NULL)
285309 {
286310 // empty
287311 }
288312
289 //! \brief Destructor
313 //! \brief The class destructor
290314 ~Model()
291315 {
292316 // Clear all stored object instances
309333 m_Groups.clear();
310334
311335 for ( std::map<std::string, Material*>::iterator it = m_MaterialMap.begin(); it != m_MaterialMap.end(); ++it ) {
312 // delete it->second;
336 delete it->second;
313337 }
314338 }
315339 };
5959 "obj"
6060 };
6161
62 static const unsigned int ObjMinSize = 16;
6263
6364 namespace Assimp {
6465
7980 // Destructor.
8081 ObjFileImporter::~ObjFileImporter()
8182 {
82 // Release root object instance
83 if (NULL != m_pRootObject)
84 {
85 delete m_pRootObject;
86 m_pRootObject = NULL;
87 }
83 delete m_pRootObject;
84 m_pRootObject = NULL;
8885 }
8986
9087 // ------------------------------------------------------------------------------------------------
117114 // Read file into memory
118115 const std::string mode = "rb";
119116 boost::scoped_ptr<IOStream> file( pIOHandler->Open( pFile, mode));
120 if (NULL == file.get())
121 throw DeadlyImportError( "Failed to open file " + pFile + ".");
117 if( !file.get() ) {
118 throw DeadlyImportError( "Failed to open file " + pFile + "." );
119 }
122120
123121 // Get the file-size and validate it, throwing an exception when fails
124122 size_t fileSize = file->FileSize();
125 if( fileSize < 16)
123 if( fileSize < ObjMinSize ) {
126124 throw DeadlyImportError( "OBJ-file is too small.");
125 }
127126
128127 // Allocate buffer and read file into it
129128 TextFileToBuffer(file.get(),m_Buffer);
139138 {
140139 strModelName = pFile;
141140 }
142
141
142 // process all '\'
143 std::vector<char> ::iterator iter = m_Buffer.begin();
144 while (iter != m_Buffer.end())
145 {
146 if (*iter == '\\')
147 {
148 // remove '\'
149 iter = m_Buffer.erase(iter);
150 // remove next character
151 while (*iter == '\r' || *iter == '\n')
152 iter = m_Buffer.erase(iter);
153 }
154 else
155 ++iter;
156 }
157
143158 // parse the file into a temporary representation
144159 ObjFileParser parser(m_Buffer, strModelName, pIOHandler);
145160
152167
153168 // ------------------------------------------------------------------------------------------------
154169 // Create the data from parsed obj-file
155 void ObjFileImporter::CreateDataFromImport(const ObjFile::Model* pModel, aiScene* pScene)
156 {
157 if (0L == pModel)
158 return;
170 void ObjFileImporter::CreateDataFromImport(const ObjFile::Model* pModel, aiScene* pScene) {
171 if( 0L == pModel ) {
172 return;
173 }
159174
160175 // Create the root node of the scene
161176 pScene->mRootNode = new aiNode;
166181 }
167182 else
168183 {
169 // This is an error, so break down the application
184 // This is a fatal error, so break down the application
170185 ai_assert(false);
171 }
186 }
172187
173188 // Create nodes for the whole scene
174189 std::vector<aiMesh*> MeshArray;
175190 for (size_t index = 0; index < pModel->m_Objects.size(); index++)
176191 {
177 createNodes(pModel, pModel->m_Objects[ index ], index, pScene->mRootNode, pScene, MeshArray);
192 createNodes(pModel, pModel->m_Objects[ index ], pScene->mRootNode, pScene, MeshArray);
178193 }
179194
180195 // Create mesh pointer buffer for this scene
194209 // ------------------------------------------------------------------------------------------------
195210 // Creates all nodes of the model
196211 aiNode *ObjFileImporter::createNodes(const ObjFile::Model* pModel, const ObjFile::Object* pObject,
197 unsigned int /*uiMeshIndex*/,
198212 aiNode *pParent, aiScene* pScene,
199213 std::vector<aiMesh*> &MeshArray )
200214 {
201215 ai_assert( NULL != pModel );
202 if ( NULL == pObject )
203 return NULL;
216 if( NULL == pObject ) {
217 return NULL;
218 }
204219
205220 // Store older mesh size to be able to computes mesh offsets for new mesh instances
206221 const size_t oldMeshSize = MeshArray.size();
209224 pNode->mName = pObject->m_strObjName;
210225
211226 // If we have a parent node, store it
212 if (pParent != NULL)
213 appendChildToParentNode(pParent, pNode);
227 if( pParent != NULL ) {
228 appendChildToParentNode( pParent, pNode );
229 }
214230
215231 for ( unsigned int i=0; i< pObject->m_Meshes.size(); i++ )
216232 {
264280 {
265281 // Checking preconditions
266282 ai_assert( NULL != pModel );
267 if (NULL == pData)
268 return;
283 if( NULL == pData ) {
284 return;
285 }
269286
270287 // Create faces
271288 ObjFile::Mesh *pObjMesh = pModel->m_Meshes[ uiMeshIndex ];
275292 for (size_t index = 0; index < pObjMesh->m_Faces.size(); index++)
276293 {
277294 ObjFile::Face* const inp = pObjMesh->m_Faces[ index ];
295
278296 if (inp->m_PrimitiveType == aiPrimitiveType_LINE) {
279297 pMesh->mNumFaces += inp->m_pVertices->size() - 1;
298 pMesh->mPrimitiveTypes |= aiPrimitiveType_LINE;
280299 }
281300 else if (inp->m_PrimitiveType == aiPrimitiveType_POINT) {
282301 pMesh->mNumFaces += inp->m_pVertices->size();
283 }
284 else {
302 pMesh->mPrimitiveTypes |= aiPrimitiveType_POINT;
303 } else {
285304 ++pMesh->mNumFaces;
305 if (inp->m_pVertices->size() > 3) {
306 pMesh->mPrimitiveTypes |= aiPrimitiveType_POLYGON;
307 }
308 else {
309 pMesh->mPrimitiveTypes |= aiPrimitiveType_TRIANGLE;
310 }
286311 }
287312 }
288313
383408 pMesh->mVertices[ newIndex ] = pModel->m_Vertices[ vertex ];
384409
385410 // Copy all normals
386 if ( !pSourceFace->m_pNormals->empty() && !pModel->m_Normals.empty())
411 if ( !pModel->m_Normals.empty() && vertexIndex < pSourceFace->m_pNormals->size())
387412 {
388413 const unsigned int normal = pSourceFace->m_pNormals->at( vertexIndex );
389414 if ( normal >= pModel->m_Normals.size() )
393418 }
394419
395420 // Copy all texture coordinates
396 if ( !pModel->m_TextureCoord.empty() )
397 {
398 if ( !pSourceFace->m_pTexturCoords->empty() )
399 {
400 const unsigned int tex = pSourceFace->m_pTexturCoords->at( vertexIndex );
401 ai_assert( tex < pModel->m_TextureCoord.size() );
402 for ( size_t i=0; i < pMesh->GetNumUVChannels(); i++ )
403 {
404 if ( tex >= pModel->m_TextureCoord.size() )
405 throw DeadlyImportError("OBJ: texture coord index out of range");
406
407 aiVector2D coord2d = pModel->m_TextureCoord[ tex ];
408 pMesh->mTextureCoords[ i ][ newIndex ] = aiVector3D( coord2d.x, coord2d.y, 0.0 );
409 }
410 }
421 if ( !pModel->m_TextureCoord.empty() && vertexIndex < pSourceFace->m_pTexturCoords->size())
422 {
423 const unsigned int tex = pSourceFace->m_pTexturCoords->at( vertexIndex );
424 ai_assert( tex < pModel->m_TextureCoord.size() );
425
426 if ( tex >= pModel->m_TextureCoord.size() )
427 throw DeadlyImportError("OBJ: texture coordinate index out of range");
428
429 const aiVector3D &coord3d = pModel->m_TextureCoord[ tex ];
430 pMesh->mTextureCoords[ 0 ][ newIndex ] = aiVector3D( coord3d.x, coord3d.y, coord3d.z );
411431 }
412432
413433 ai_assert( pMesh->mNumVertices > newIndex );
480500 }
481501
482502 // ------------------------------------------------------------------------------------------------
503 // Add clamp mode property to material if necessary
504 void ObjFileImporter::addTextureMappingModeProperty(aiMaterial* mat, aiTextureType type, int clampMode)
505 {
506 ai_assert( NULL != mat);
507 mat->AddProperty<int>(&clampMode, 1, AI_MATKEY_MAPPINGMODE_U(type, 0));
508 mat->AddProperty<int>(&clampMode, 1, AI_MATKEY_MAPPINGMODE_V(type, 0));
509 }
510
511 // ------------------------------------------------------------------------------------------------
483512 // Creates the material
484513 void ObjFileImporter::createMaterials(const ObjFile::Model* pModel, aiScene* pScene )
485514 {
536565 mat->AddProperty( &pCurrentMaterial->ambient, 1, AI_MATKEY_COLOR_AMBIENT );
537566 mat->AddProperty( &pCurrentMaterial->diffuse, 1, AI_MATKEY_COLOR_DIFFUSE );
538567 mat->AddProperty( &pCurrentMaterial->specular, 1, AI_MATKEY_COLOR_SPECULAR );
568 mat->AddProperty( &pCurrentMaterial->emissive, 1, AI_MATKEY_COLOR_EMISSIVE );
539569 mat->AddProperty( &pCurrentMaterial->shineness, 1, AI_MATKEY_SHININESS );
540570 mat->AddProperty( &pCurrentMaterial->alpha, 1, AI_MATKEY_OPACITY );
541571
543573 mat->AddProperty( &pCurrentMaterial->ior, 1, AI_MATKEY_REFRACTI );
544574
545575 // Adding textures
546 if ( 0 != pCurrentMaterial->texture.length )
576 if ( 0 != pCurrentMaterial->texture.length )
577 {
547578 mat->AddProperty( &pCurrentMaterial->texture, AI_MATKEY_TEXTURE_DIFFUSE(0));
579 if (pCurrentMaterial->clamp[ObjFile::Material::TextureDiffuseType])
580 {
581 addTextureMappingModeProperty(mat, aiTextureType_DIFFUSE);
582 }
583 }
548584
549585 if ( 0 != pCurrentMaterial->textureAmbient.length )
586 {
550587 mat->AddProperty( &pCurrentMaterial->textureAmbient, AI_MATKEY_TEXTURE_AMBIENT(0));
588 if (pCurrentMaterial->clamp[ObjFile::Material::TextureAmbientType])
589 {
590 addTextureMappingModeProperty(mat, aiTextureType_AMBIENT);
591 }
592 }
593
594 if ( 0 != pCurrentMaterial->textureEmissive.length )
595 mat->AddProperty( &pCurrentMaterial->textureEmissive, AI_MATKEY_TEXTURE_EMISSIVE(0));
551596
552597 if ( 0 != pCurrentMaterial->textureSpecular.length )
598 {
553599 mat->AddProperty( &pCurrentMaterial->textureSpecular, AI_MATKEY_TEXTURE_SPECULAR(0));
600 if (pCurrentMaterial->clamp[ObjFile::Material::TextureSpecularType])
601 {
602 addTextureMappingModeProperty(mat, aiTextureType_SPECULAR);
603 }
604 }
554605
555606 if ( 0 != pCurrentMaterial->textureBump.length )
607 {
556608 mat->AddProperty( &pCurrentMaterial->textureBump, AI_MATKEY_TEXTURE_HEIGHT(0));
609 if (pCurrentMaterial->clamp[ObjFile::Material::TextureBumpType])
610 {
611 addTextureMappingModeProperty(mat, aiTextureType_HEIGHT);
612 }
613 }
614
615 if ( 0 != pCurrentMaterial->textureNormal.length )
616 {
617 mat->AddProperty( &pCurrentMaterial->textureNormal, AI_MATKEY_TEXTURE_NORMALS(0));
618 if (pCurrentMaterial->clamp[ObjFile::Material::TextureNormalType])
619 {
620 addTextureMappingModeProperty(mat, aiTextureType_NORMALS);
621 }
622 }
623
624 if ( 0 != pCurrentMaterial->textureDisp.length )
625 {
626 mat->AddProperty( &pCurrentMaterial->textureDisp, AI_MATKEY_TEXTURE_DISPLACEMENT(0) );
627 if (pCurrentMaterial->clamp[ObjFile::Material::TextureDispType])
628 {
629 addTextureMappingModeProperty(mat, aiTextureType_DISPLACEMENT);
630 }
631 }
557632
558633 if ( 0 != pCurrentMaterial->textureOpacity.length )
634 {
559635 mat->AddProperty( &pCurrentMaterial->textureOpacity, AI_MATKEY_TEXTURE_OPACITY(0));
636 if (pCurrentMaterial->clamp[ObjFile::Material::TextureOpacityType])
637 {
638 addTextureMappingModeProperty(mat, aiTextureType_OPACITY);
639 }
640 }
560641
561642 if ( 0 != pCurrentMaterial->textureSpecularity.length )
643 {
562644 mat->AddProperty( &pCurrentMaterial->textureSpecularity, AI_MATKEY_TEXTURE_SHININESS(0));
645 if (pCurrentMaterial->clamp[ObjFile::Material::TextureSpecularityType])
646 {
647 addTextureMappingModeProperty(mat, aiTextureType_SHININESS);
648 }
649 }
563650
564651 // Store material property info in material array in scene
565652 pScene->mMaterials[ pScene->mNumMaterials ] = mat;
580667
581668 // Assign parent to child
582669 pChild->mParent = pParent;
583 size_t sNumChildren = 0;
584 (void)sNumChildren; // remove warning on release build
585670
586671 // If already children was assigned to the parent node, store them in a
587672 std::vector<aiNode*> temp;
588673 if (pParent->mChildren != NULL)
589674 {
590 sNumChildren = pParent->mNumChildren;
591 ai_assert( 0 != sNumChildren );
675 ai_assert( 0 != pParent->mNumChildren );
592676 for (size_t index = 0; index < pParent->mNumChildren; index++)
593677 {
594678 temp.push_back(pParent->mChildren [ index ] );
7676
7777 private:
7878
79 //! \brief Appends the supported extention.
79 //! \brief Appends the supported extension.
8080 const aiImporterDesc* GetInfo () const;
8181
8282 //! \brief File import implementation.
8686 void CreateDataFromImport(const ObjFile::Model* pModel, aiScene* pScene);
8787
8888 //! \brief Creates all nodes stored in imported content.
89 aiNode *createNodes(const ObjFile::Model* pModel, const ObjFile::Object* pData, unsigned int uiMeshIndex,
89 aiNode *createNodes(const ObjFile::Model* pModel, const ObjFile::Object* pData,
9090 aiNode *pParent, aiScene* pScene, std::vector<aiMesh*> &MeshArray);
9191
9292 //! \brief Creates topology data like faces and meshes for the geometry.
102102
103103 //! \brief Material creation.
104104 void createMaterials(const ObjFile::Model* pModel, aiScene* pScene);
105 void addTextureMappingModeProperty(aiMaterial* mat, aiTextureType type, int clampMode = 1);
105106
106 //! \brief Appends a child node to a parentnode and updates the datastructures.
107 //! \brief Appends a child node to a parent node and updates the data structures.
107108 void appendChildToParentNode(aiNode *pParent, aiNode *pChild);
108
109 //! \brief TODO!
110 void createAnimations();
111109
112110 private:
113111 //! Data buffer
114112 std::vector<char> m_Buffer;
115113 //! Pointer to root object instance
116114 ObjFile::Object *m_pRootObject;
117 //! Absolute pathname of model in filesystem
115 //! Absolute pathname of model in file system
118116 std::string m_strAbsPath;
119117 };
120118
4848
4949 namespace Assimp {
5050
51 // Material specific token
52 static const std::string DiffuseTexture = "map_kd";
53 static const std::string AmbientTexture = "map_ka";
54 static const std::string SpecularTexture = "map_ks";
55 static const std::string OpacityTexture = "map_d";
56 static const std::string BumpTexture1 = "map_bump";
57 static const std::string BumpTexture2 = "map_Bump";
58 static const std::string BumpTexture3 = "bump";
59 static const std::string NormalTexture = "map_Kn";
60 static const std::string DisplacementTexture = "disp";
61 static const std::string SpecularityTexture = "map_ns";
62
63 // texture option specific token
64 static const std::string BlendUOption = "-blendu";
65 static const std::string BlendVOption = "-blendv";
66 static const std::string BoostOption = "-boost";
67 static const std::string ModifyMapOption = "-mm";
68 static const std::string OffsetOption = "-o";
69 static const std::string ScaleOption = "-s";
70 static const std::string TurbulenceOption = "-t";
71 static const std::string ResolutionOption = "-texres";
72 static const std::string ClampOption = "-clamp";
73 static const std::string BumpOption = "-bm";
74 static const std::string ChannelOption = "-imfchan";
75 static const std::string TypeOption = "-type";
76
77
78
5179 // -------------------------------------------------------------------
5280 // Constructor
5381 ObjFileMtlImporter::ObjFileMtlImporter( std::vector<char> &buffer,
116144 {
117145 ++m_DataIt;
118146 getColorRGBA( &m_pModel->m_pCurrentMaterial->specular );
147 }
148 else if (*m_DataIt == 'e')
149 {
150 ++m_DataIt;
151 getColorRGBA( &m_pModel->m_pCurrentMaterial->emissive );
119152 }
120153 m_DataIt = skipLine<DataArrayIt>( m_DataIt, m_DataItEnd, m_uiLine );
121154 }
248281
249282 // -------------------------------------------------------------------
250283 // Gets a texture name from data.
251 void ObjFileMtlImporter::getTexture()
252 {
253 aiString *out = NULL;
254
255 // FIXME: just a quick'n'dirty hack, consider cleanup later
256
257 // Diffuse texture
258 if (!ASSIMP_strincmp(&(*m_DataIt),"map_kd",6))
284 void ObjFileMtlImporter::getTexture() {
285 aiString *out( NULL );
286 int clampIndex = -1;
287
288 const char *pPtr( &(*m_DataIt) );
289 if ( !ASSIMP_strincmp( pPtr, DiffuseTexture.c_str(), DiffuseTexture.size() ) ) {
290 // Diffuse texture
259291 out = & m_pModel->m_pCurrentMaterial->texture;
260
261 // Ambient texture
262 else if (!ASSIMP_strincmp(&(*m_DataIt),"map_ka",6))
292 clampIndex = ObjFile::Material::TextureDiffuseType;
293 } else if ( !ASSIMP_strincmp( pPtr,AmbientTexture.c_str(),AmbientTexture.size() ) ) {
294 // Ambient texture
263295 out = & m_pModel->m_pCurrentMaterial->textureAmbient;
264
265 // Specular texture
266 else if (!ASSIMP_strincmp(&(*m_DataIt),"map_ks",6))
296 clampIndex = ObjFile::Material::TextureAmbientType;
297 } else if (!ASSIMP_strincmp( pPtr, SpecularTexture.c_str(), SpecularTexture.size())) {
298 // Specular texture
267299 out = & m_pModel->m_pCurrentMaterial->textureSpecular;
268
269 // Opacity texture
270 else if (!ASSIMP_strincmp(&(*m_DataIt),"map_d",5))
300 clampIndex = ObjFile::Material::TextureSpecularType;
301 } else if ( !ASSIMP_strincmp( pPtr, OpacityTexture.c_str(), OpacityTexture.size() ) ) {
302 // Opacity texture
271303 out = & m_pModel->m_pCurrentMaterial->textureOpacity;
272
273 // Ambient texture
274 else if (!ASSIMP_strincmp(&(*m_DataIt),"map_ka",6))
304 clampIndex = ObjFile::Material::TextureOpacityType;
305 } else if (!ASSIMP_strincmp( pPtr,"map_ka",6)) {
306 // Ambient texture
275307 out = & m_pModel->m_pCurrentMaterial->textureAmbient;
276
277 // Bump texture
278 else if (!ASSIMP_strincmp(&(*m_DataIt),"map_bump",8) || !ASSIMP_strincmp(&(*m_DataIt),"bump",4))
308 clampIndex = ObjFile::Material::TextureAmbientType;
309 } else if (!ASSIMP_strincmp(&(*m_DataIt),"map_emissive",6)) {
310 // Emissive texture
311 out = & m_pModel->m_pCurrentMaterial->textureEmissive;
312 clampIndex = ObjFile::Material::TextureEmissiveType;
313 } else if ( !ASSIMP_strincmp( pPtr, BumpTexture1.c_str(), BumpTexture1.size() ) ||
314 !ASSIMP_strincmp( pPtr, BumpTexture2.c_str(), BumpTexture2.size() ) ||
315 !ASSIMP_strincmp( pPtr, BumpTexture3.c_str(), BumpTexture3.size() ) ) {
316 // Bump texture
279317 out = & m_pModel->m_pCurrentMaterial->textureBump;
280
281 // Specularity scaling (glossiness)
282 else if (!ASSIMP_strincmp(&(*m_DataIt),"map_ns",6))
318 clampIndex = ObjFile::Material::TextureBumpType;
319 } else if (!ASSIMP_strincmp( pPtr,NormalTexture.c_str(), NormalTexture.size())) {
320 // Normal map
321 out = & m_pModel->m_pCurrentMaterial->textureNormal;
322 clampIndex = ObjFile::Material::TextureNormalType;
323 } else if (!ASSIMP_strincmp( pPtr, DisplacementTexture.c_str(), DisplacementTexture.size() ) ) {
324 // Displacement texture
325 out = &m_pModel->m_pCurrentMaterial->textureDisp;
326 clampIndex = ObjFile::Material::TextureDispType;
327 } else if (!ASSIMP_strincmp( pPtr, SpecularityTexture.c_str(),SpecularityTexture.size() ) ) {
328 // Specularity scaling (glossiness)
283329 out = & m_pModel->m_pCurrentMaterial->textureSpecularity;
284
285 else
286 {
330 clampIndex = ObjFile::Material::TextureSpecularityType;
331 } else {
287332 DefaultLogger::get()->error("OBJ/MTL: Encountered unknown texture type");
288333 return;
289334 }
335
336 bool clamp = false;
337 getTextureOption(clamp);
338 m_pModel->m_pCurrentMaterial->clamp[clampIndex] = clamp;
290339
291340 std::string strTexture;
292341 m_DataIt = getName<DataArrayIt>( m_DataIt, m_DataItEnd, strTexture );
293342 out->Set( strTexture );
294343 }
295344
345 /* /////////////////////////////////////////////////////////////////////////////
346 * Texture Option
347 * /////////////////////////////////////////////////////////////////////////////
348 * According to http://en.wikipedia.org/wiki/Wavefront_.obj_file#Texture_options
349 * Texture map statement can contains various texture option, for example:
350 *
351 * map_Ka -o 1 1 1 some.png
352 * map_Kd -clamp on some.png
353 *
354 * So we need to parse and skip these options, and leave the last part which is
355 * the url of image, otherwise we will get a wrong url like "-clamp on some.png".
356 *
357 * Because aiMaterial supports clamp option, so we also want to return it
358 * /////////////////////////////////////////////////////////////////////////////
359 */
360 void ObjFileMtlImporter::getTextureOption(bool &clamp)
361 {
362 m_DataIt = getNextToken<DataArrayIt>(m_DataIt, m_DataItEnd);
363
364 //If there is any more texture option
365 while (!isEndOfBuffer(m_DataIt, m_DataItEnd) && *m_DataIt == '-')
366 {
367 const char *pPtr( &(*m_DataIt) );
368 //skip option key and value
369 int skipToken = 1;
370
371 if (!ASSIMP_strincmp(pPtr, ClampOption.c_str(), ClampOption.size()))
372 {
373 DataArrayIt it = getNextToken<DataArrayIt>(m_DataIt, m_DataItEnd);
374 char value[3];
375 CopyNextWord(it, m_DataItEnd, value, sizeof(value) / sizeof(*value));
376 if (!ASSIMP_strincmp(value, "on", 2))
377 {
378 clamp = true;
379 }
380
381 skipToken = 2;
382 }
383 else if ( !ASSIMP_strincmp(pPtr, BlendUOption.c_str(), BlendUOption.size())
384 || !ASSIMP_strincmp(pPtr, BlendVOption.c_str(), BlendVOption.size())
385 || !ASSIMP_strincmp(pPtr, BoostOption.c_str(), BoostOption.size())
386 || !ASSIMP_strincmp(pPtr, ResolutionOption.c_str(), ResolutionOption.size())
387 || !ASSIMP_strincmp(pPtr, BumpOption.c_str(), BumpOption.size())
388 || !ASSIMP_strincmp(pPtr, ChannelOption.c_str(), ChannelOption.size())
389 || !ASSIMP_strincmp(pPtr, TypeOption.c_str(), TypeOption.size()) )
390 {
391 skipToken = 2;
392 }
393 else if (!ASSIMP_strincmp(pPtr, ModifyMapOption.c_str(), ModifyMapOption.size()))
394 {
395 skipToken = 3;
396 }
397 else if ( !ASSIMP_strincmp(pPtr, OffsetOption.c_str(), OffsetOption.size())
398 || !ASSIMP_strincmp(pPtr, ScaleOption.c_str(), ScaleOption.size())
399 || !ASSIMP_strincmp(pPtr, TurbulenceOption.c_str(), TurbulenceOption.size())
400 )
401 {
402 skipToken = 4;
403 }
404
405 for (int i = 0; i < skipToken; ++i)
406 {
407 m_DataIt = getNextToken<DataArrayIt>(m_DataIt, m_DataItEnd);
408 }
409 }
410 }
411
296412 // -------------------------------------------------------------------
297413
298414 } // Namespace Assimp
9191 void createMaterial();
9292 /// Get texture name from loaded data.
9393 void getTexture();
94 void getTextureOption(bool &clamp);
9495
9596 private:
9697 //! Absolute pathname
4949 #include "../include/assimp/types.h"
5050 #include "DefaultIOSystem.h"
5151
52 namespace Assimp
53 {
54
55 // -------------------------------------------------------------------
52 namespace Assimp {
53
5654 const std::string ObjFileParser::DEFAULT_MATERIAL = AI_DEFAULT_MATERIAL_NAME;
5755
5856 // -------------------------------------------------------------------
7068 m_pModel = new ObjFile::Model();
7169 m_pModel->m_ModelName = strModelName;
7270
71 // create default material and store it
7372 m_pModel->m_pDefaultMaterial = new ObjFile::Material();
7473 m_pModel->m_pDefaultMaterial->MaterialName.Set( DEFAULT_MATERIAL );
75 m_pModel->m_MaterialLib.push_back( DEFAULT_MATERIAL );
74 m_pModel->m_MaterialLib.push_back( DEFAULT_MATERIAL );
7675 m_pModel->m_MaterialMap[ DEFAULT_MATERIAL ] = m_pModel->m_pDefaultMaterial;
7776
7877 // Start parsing the file
8382 // Destructor
8483 ObjFileParser::~ObjFileParser()
8584 {
86 /*delete m_pModel->m_pDefaultMaterial;
87 m_pModel->m_pDefaultMaterial = NULL;*/
88
8985 delete m_pModel;
9086 m_pModel = NULL;
9187 }
111107 case 'v': // Parse a vertex texture coordinate
112108 {
113109 ++m_DataIt;
114 if (*m_DataIt == ' ')
115 {
116 // Read in vertex definition
110 if (*m_DataIt == ' ' || *m_DataIt == '\t') {
111 // read in vertex definition
117112 getVector3(m_pModel->m_Vertices);
118 }
119 else if (*m_DataIt == 't')
120 {
121 // Read in texture coordinate (2D)
122 ++m_DataIt;
123 getVector2(m_pModel->m_TextureCoord);
124 }
125 else if (*m_DataIt == 'n')
126 {
113 } else if (*m_DataIt == 't') {
114 // read in texture coordinate ( 2D or 3D )
115 ++m_DataIt;
116 getVector( m_pModel->m_TextureCoord );
117 } else if (*m_DataIt == 'n') {
127118 // Read in normal vector definition
128119 ++m_DataIt;
129120 getVector3( m_pModel->m_Normals );
152143 }
153144 break;
154145
155 case 'm': // Parse a material library
156 {
157 getMaterialLib();
146 case 'm': // Parse a material library or merging group ('mg')
147 {
148 if (*(m_DataIt + 1) == 'g')
149 getGroupNumberAndResolution();
150 else
151 getMaterialLib();
158152 }
159153 break;
160154
199193 break;
200194 ++m_DataIt;
201195 }
196
197 ai_assert(index < length);
202198 pBuffer[index] = '\0';
203199 }
204200
206202 // Copy the next line into a temporary buffer
207203 void ObjFileParser::copyNextLine(char *pBuffer, size_t length)
208204 {
209 size_t index = 0;
210 while (m_DataIt != m_DataItEnd)
211 {
212 if (*m_DataIt == '\n' || *m_DataIt == '\r' || index == length-1)
213 break;
214
215 pBuffer[ index ] = *m_DataIt;
216 ++index;
217 ++m_DataIt;
218 }
205 size_t index = 0u;
206
207 // some OBJ files have line continuations using \ (such as in C++ et al)
208 bool continuation = false;
209 for (;m_DataIt != m_DataItEnd && index < length-1; ++m_DataIt)
210 {
211 const char c = *m_DataIt;
212 if (c == '\\') {
213 continuation = true;
214 continue;
215 }
216
217 if (c == '\n' || c == '\r') {
218 if(continuation) {
219 pBuffer[ index++ ] = ' ';
220 continue;
221 }
222 break;
223 }
224
225 continuation = false;
226 pBuffer[ index++ ] = c;
227 }
228 ai_assert(index < length);
219229 pBuffer[ index ] = '\0';
220230 }
221231
222232 // -------------------------------------------------------------------
233 void ObjFileParser::getVector( std::vector<aiVector3D> &point3d_array ) {
234 size_t numComponents( 0 );
235 DataArrayIt tmp( m_DataIt );
236 while( !IsLineEnd( *tmp ) ) {
237 if( *tmp == ' ' ) {
238 ++numComponents;
239 }
240 tmp++;
241 }
242 float x, y, z;
243 if( 2 == numComponents ) {
244 copyNextWord( m_buffer, BUFFERSIZE );
245 x = ( float ) fast_atof( m_buffer );
246
247 copyNextWord( m_buffer, BUFFERSIZE );
248 y = ( float ) fast_atof( m_buffer );
249 z = 0.0;
250 } else if( 3 == numComponents ) {
251 copyNextWord( m_buffer, BUFFERSIZE );
252 x = ( float ) fast_atof( m_buffer );
253
254 copyNextWord( m_buffer, BUFFERSIZE );
255 y = ( float ) fast_atof( m_buffer );
256
257 copyNextWord( m_buffer, BUFFERSIZE );
258 z = ( float ) fast_atof( m_buffer );
259 } else {
260 ai_assert( !"Invalid number of components" );
261 }
262 point3d_array.push_back( aiVector3D( x, y, z ) );
263 m_DataIt = skipLine<DataArrayIt>( m_DataIt, m_DataItEnd, m_uiLine );
264 }
265
266 // -------------------------------------------------------------------
223267 // Get values for a new 3D vector instance
224 void ObjFileParser::getVector3(std::vector<aiVector3D> &point3d_array)
225 {
268 void ObjFileParser::getVector3(std::vector<aiVector3D> &point3d_array) {
226269 float x, y, z;
227270 copyNextWord(m_buffer, BUFFERSIZE);
228271 x = (float) fast_atof(m_buffer);
230273 copyNextWord(m_buffer, BUFFERSIZE);
231274 y = (float) fast_atof(m_buffer);
232275
233 copyNextWord(m_buffer, BUFFERSIZE);
234 z = (float) fast_atof(m_buffer);
276 copyNextWord( m_buffer, BUFFERSIZE );
277 z = ( float ) fast_atof( m_buffer );
235278
236279 point3d_array.push_back( aiVector3D( x, y, z ) );
237 //skipLine();
238280 m_DataIt = skipLine<DataArrayIt>( m_DataIt, m_DataItEnd, m_uiLine );
239281 }
240282
241283 // -------------------------------------------------------------------
242284 // Get values for a new 2D vector instance
243 void ObjFileParser::getVector2( std::vector<aiVector2D> &point2d_array )
244 {
285 void ObjFileParser::getVector2( std::vector<aiVector2D> &point2d_array ) {
245286 float x, y;
246287 copyNextWord(m_buffer, BUFFERSIZE);
247288 x = (float) fast_atof(m_buffer);
273314 std::vector<unsigned int> *pNormalID = new std::vector<unsigned int>;
274315 bool hasNormal = false;
275316
317 const int vSize = m_pModel->m_Vertices.size();
318 const int vtSize = m_pModel->m_TextureCoord.size();
319 const int vnSize = m_pModel->m_Normals.size();
320
276321 const bool vt = (!m_pModel->m_TextureCoord.empty());
277322 const bool vn = (!m_pModel->m_Normals.empty());
278323 int iStep = 0, iPos = 0;
306351 {
307352 //OBJ USES 1 Base ARRAYS!!!!
308353 const int iVal = atoi( pPtr );
354
355 // increment iStep position based off of the sign and # of digits
309356 int tmp = iVal;
357 if (iVal < 0)
358 ++iStep;
310359 while ( ( tmp = tmp / 10 )!=0 )
311360 ++iStep;
312361
324373 else if ( 2 == iPos )
325374 {
326375 pNormalID->push_back( iVal-1 );
376 hasNormal = true;
377 }
378 else
379 {
380 reportErrorTokenInFace();
381 }
382 }
383 else if ( iVal < 0 )
384 {
385 // Store relatively index
386 if ( 0 == iPos )
387 {
388 pIndices->push_back( vSize + iVal );
389 }
390 else if ( 1 == iPos )
391 {
392 pTexID->push_back( vtSize + iVal );
393 }
394 else if ( 2 == iPos )
395 {
396 pNormalID->push_back( vnSize + iVal );
327397 hasNormal = true;
328398 }
329399 else
527597 // Getter for a group name.
528598 void ObjFileParser::getGroupName()
529599 {
530 // Get next word from data buffer
531 m_DataIt = getNextToken<DataArrayIt>(m_DataIt, m_DataItEnd);
532 m_DataIt = getNextWord<DataArrayIt>(m_DataIt, m_DataItEnd);
600 std::string strGroupName;
601
602 m_DataIt = getName<DataArrayIt>(m_DataIt, m_DataItEnd, strGroupName);
533603 if ( isEndOfBuffer( m_DataIt, m_DataItEnd ) )
534604 return;
535
536 // Store the group name in the group library
537 char *pStart = &(*m_DataIt);
538 while ( m_DataIt != m_DataItEnd && !isSeparator(*m_DataIt) )
539 m_DataIt++;
540 std::string strGroupName( pStart, &(*m_DataIt) );
541605
542606 // Change active group, if necessary
543607 if ( m_pModel->m_strActiveGroup != strGroupName )
574638 }
575639
576640 // -------------------------------------------------------------------
641 // Not supported
642 void ObjFileParser::getGroupNumberAndResolution()
643 {
644 // Not used
645
646 m_DataIt = skipLine<DataArrayIt>( m_DataIt, m_DataItEnd, m_uiLine );
647 }
648
649 // -------------------------------------------------------------------
577650 // Stores values for a new object instance, name will be used to
578651 // identify it.
579652 void ObjFileParser::getObjectName()
3636
3737 ----------------------------------------------------------------------
3838 */
39
40
4139 #ifndef OBJ_FILEPARSER_H_INC
4240 #define OBJ_FILEPARSER_H_INC
4341
7876 ObjFile::Model *GetModel() const;
7977
8078 private:
81 /// Parse the loadedfile
79 /// Parse the loaded file
8280 void parseFile();
8381 /// Method to copy the new delimited word in the current line.
8482 void copyNextWord(char *pBuffer, size_t length);
8583 /// Method to copy the new line.
8684 void copyNextLine(char *pBuffer, size_t length);
87 /// Stores the following 3d vector.
85 /// Stores the vector
86 void getVector( std::vector<aiVector3D> &point3d_array );
87 /// Stores the following 3d vector.
8888 void getVector3( std::vector<aiVector3D> &point3d_array );
8989 /// Stores the following 3d vector.
9090 void getVector2(std::vector<aiVector2D> &point2d_array);
91 /// Stores the following face.
91 /// Stores the following face.
9292 void getFace(aiPrimitiveType type);
93 void getMaterialDesc();
93 /// Reads the material description.
94 void getMaterialDesc();
9495 /// Gets a comment.
9596 void getComment();
9697 /// Gets a a material library.
9798 void getMaterialLib();
9899 /// Creates a new material.
99100 void getNewMaterial();
100 /// Gets the groupname from file.
101 /// Gets the group name from file.
101102 void getGroupName();
102103 /// Gets the group number from file.
103104 void getGroupNumber();
105 /// Gets the group number and resolution from file.
106 void getGroupNumberAndResolution();
104107 /// Returns the index of the material. Is -1 if not material was found.
105108 int getMaterialIndex( const std::string &strMaterialName );
106109 /// Parse object name
106106 return pBuffer;
107107 }
108108
109 /** @brief Returns ponter a next token
109 /** @brief Returns pointer a next token
110110 * @param pBuffer Pointer to data buffer
111111 * @param pEnd Pointer to end of buffer
112112 * @return Pointer to next token
156156 inline char_t getName( char_t it, char_t end, std::string &name )
157157 {
158158 name = "";
159 it = getNextToken<char_t>( it, end );
160159 if ( isEndOfBuffer( it, end ) )
161160 return end;
162161
171170 ++it;
172171
173172 // Get name
173 // if there is no name, and the previous char is a separator, come back to start
174 while (&(*it) < pStart) {
175 ++it;
176 }
174177 std::string strName( pStart, &(*it) );
175178 if ( strName.empty() )
176179 return it;
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 #include "OgreBinarySerializer.h"
41 #include "OgreXmlSerializer.h"
42 #include "OgreParsingUtils.h"
43
44 #include "TinyFormatter.h"
45
46 #ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER
47
48 // Define as 1 to get verbose logging.
49 #define OGRE_BINARY_SERIALIZER_DEBUG 0
50
51 namespace Assimp
52 {
53 namespace Ogre
54 {
55
56 const std::string MESH_VERSION_1_8 = "[MeshSerializer_v1.8]";
57 const std::string SKELETON_VERSION_1_8 = "[Serializer_v1.80]";
58 const std::string SKELETON_VERSION_1_1 = "[Serializer_v1.10]";
59
60 const unsigned short HEADER_CHUNK_ID = 0x1000;
61
62 const long MSTREAM_OVERHEAD_SIZE = sizeof(uint16_t) + sizeof(uint32_t);
63 const long MSTREAM_BONE_SIZE_WITHOUT_SCALE = MSTREAM_OVERHEAD_SIZE + sizeof(unsigned short) + (sizeof(float) * 7);
64 const long MSTREAM_KEYFRAME_SIZE_WITHOUT_SCALE = MSTREAM_OVERHEAD_SIZE + (sizeof(float) * 8);
65
66 template<>
67 inline bool OgreBinarySerializer::Read<bool>()
68 {
69 return (m_reader->GetU1() > 0);
70 }
71
72 template<>
73 inline char OgreBinarySerializer::Read<char>()
74 {
75 return static_cast<char>(m_reader->GetU1());
76 }
77
78 template<>
79 inline uint8_t OgreBinarySerializer::Read<uint8_t>()
80 {
81 return m_reader->GetU1();
82 }
83
84 template<>
85 inline uint16_t OgreBinarySerializer::Read<uint16_t>()
86 {
87 return m_reader->GetU2();
88 }
89
90 template<>
91 inline uint32_t OgreBinarySerializer::Read<uint32_t>()
92 {
93 return m_reader->GetU4();
94 }
95
96 template<>
97 inline float OgreBinarySerializer::Read<float>()
98 {
99 return m_reader->GetF4();
100 }
101
102 void OgreBinarySerializer::ReadBytes(char *dest, size_t numBytes)
103 {
104 ReadBytes(static_cast<void*>(dest), numBytes);
105 }
106
107 void OgreBinarySerializer::ReadBytes(uint8_t *dest, size_t numBytes)
108 {
109 ReadBytes(static_cast<void*>(dest), numBytes);
110 }
111
112 void OgreBinarySerializer::ReadBytes(void *dest, size_t numBytes)
113 {
114 m_reader->CopyAndAdvance(dest, numBytes);
115 }
116
117 uint8_t *OgreBinarySerializer::ReadBytes(size_t numBytes)
118 {
119 uint8_t *bytes = new uint8_t[numBytes];
120 ReadBytes(bytes, numBytes);
121 return bytes;
122 }
123
124 void OgreBinarySerializer::ReadVector(aiVector3D &vec)
125 {
126 m_reader->CopyAndAdvance(&vec.x, sizeof(float)*3);
127 }
128
129 void OgreBinarySerializer::ReadQuaternion(aiQuaternion &quat)
130 {
131 float temp[4];
132 m_reader->CopyAndAdvance(temp, sizeof(float)*4);
133 quat.x = temp[0];
134 quat.y = temp[1];
135 quat.z = temp[2];
136 quat.w = temp[3];
137 }
138
139 bool OgreBinarySerializer::AtEnd() const
140 {
141 return (m_reader->GetRemainingSize() == 0);
142 }
143
144 std::string OgreBinarySerializer::ReadString(size_t len)
145 {
146 std::string str;
147 str.resize(len);
148 ReadBytes(&str[0], len);
149 return str;
150 }
151
152 std::string OgreBinarySerializer::ReadLine()
153 {
154 std::string str;
155 while(!AtEnd())
156 {
157 char c = Read<char>();
158 if (c == '\n')
159 break;
160 str += c;
161 }
162 return str;
163 }
164
165 uint16_t OgreBinarySerializer::ReadHeader(bool readLen)
166 {
167 uint16_t id = Read<uint16_t>();
168 if (readLen)
169 m_currentLen = Read<uint32_t>();
170
171 #if (OGRE_BINARY_SERIALIZER_DEBUG == 1)
172 if (id != HEADER_CHUNK_ID)
173 {
174 DefaultLogger::get()->debug(Formatter::format() << (assetMode == AM_Mesh
175 ? MeshHeaderToString(static_cast<MeshChunkId>(id)) : SkeletonHeaderToString(static_cast<SkeletonChunkId>(id))));
176 }
177 #endif
178
179 return id;
180 }
181
182 void OgreBinarySerializer::RollbackHeader()
183 {
184 m_reader->IncPtr(-MSTREAM_OVERHEAD_SIZE);
185 }
186
187 void OgreBinarySerializer::SkipBytes(size_t numBytes)
188 {
189 #if (OGRE_BINARY_SERIALIZER_DEBUG == 1)
190 DefaultLogger::get()->debug(Formatter::format() << "Skipping " << numBytes << " bytes");
191 #endif
192
193 m_reader->IncPtr(numBytes);
194 }
195
196 // Mesh
197
198 Mesh *OgreBinarySerializer::ImportMesh(MemoryStreamReader *stream)
199 {
200 OgreBinarySerializer serializer(stream, OgreBinarySerializer::AM_Mesh);
201
202 uint16_t id = serializer.ReadHeader(false);
203 if (id != HEADER_CHUNK_ID) {
204 throw DeadlyExportError("Invalid Ogre Mesh file header.");
205 }
206
207 /// @todo Check what we can actually support.
208 std::string version = serializer.ReadLine();
209 if (version != MESH_VERSION_1_8)
210 {
211 throw DeadlyExportError(Formatter::format() << "Mesh version " << version << " not supported by this importer. Run OgreMeshUpgrader tool on the file and try again."
212 << " Supported versions: " << MESH_VERSION_1_8);
213 }
214
215 Mesh *mesh = new Mesh();
216 while (!serializer.AtEnd())
217 {
218 id = serializer.ReadHeader();
219 switch(id)
220 {
221 case M_MESH:
222 {
223 serializer.ReadMesh(mesh);
224 break;
225 }
226 }
227 }
228 return mesh;
229 }
230
231 void OgreBinarySerializer::ReadMesh(Mesh *mesh)
232 {
233 mesh->hasSkeletalAnimations = Read<bool>();
234
235 DefaultLogger::get()->debug("Reading Mesh");
236 DefaultLogger::get()->debug(Formatter::format() << " - Skeletal animations: " << (mesh->hasSkeletalAnimations ? "true" : "false"));
237
238 if (!AtEnd())
239 {
240 uint16_t id = ReadHeader();
241 while (!AtEnd() &&
242 (id == M_GEOMETRY ||
243 id == M_SUBMESH ||
244 id == M_MESH_SKELETON_LINK ||
245 id == M_MESH_BONE_ASSIGNMENT ||
246 id == M_MESH_LOD ||
247 id == M_MESH_BOUNDS ||
248 id == M_SUBMESH_NAME_TABLE ||
249 id == M_EDGE_LISTS ||
250 id == M_POSES ||
251 id == M_ANIMATIONS ||
252 id == M_TABLE_EXTREMES))
253 {
254 switch(id)
255 {
256 case M_GEOMETRY:
257 {
258 mesh->sharedVertexData = new VertexData();
259 ReadGeometry(mesh->sharedVertexData);
260 break;
261 }
262 case M_SUBMESH:
263 {
264 ReadSubMesh(mesh);
265 break;
266 }
267 case M_MESH_SKELETON_LINK:
268 {
269 ReadMeshSkeletonLink(mesh);
270 break;
271 }
272 case M_MESH_BONE_ASSIGNMENT:
273 {
274 ReadBoneAssignment(mesh->sharedVertexData);
275 break;
276 }
277 case M_MESH_LOD:
278 {
279 ReadMeshLodInfo(mesh);
280 break;
281 }
282 case M_MESH_BOUNDS:
283 {
284 ReadMeshBounds(mesh);
285 break;
286 }
287 case M_SUBMESH_NAME_TABLE:
288 {
289 ReadSubMeshNames(mesh);
290 break;
291 }
292 case M_EDGE_LISTS:
293 {
294 ReadEdgeList(mesh);
295 break;
296 }
297 case M_POSES:
298 {
299 ReadPoses(mesh);
300 break;
301 }
302 case M_ANIMATIONS:
303 {
304 ReadAnimations(mesh);
305 break;
306 }
307 case M_TABLE_EXTREMES:
308 {
309 ReadMeshExtremes(mesh);
310 break;
311 }
312 }
313
314 if (!AtEnd())
315 id = ReadHeader();
316 }
317 if (!AtEnd())
318 RollbackHeader();
319 }
320
321 NormalizeBoneWeights(mesh->sharedVertexData);
322 }
323
324 void OgreBinarySerializer::ReadMeshLodInfo(Mesh *mesh)
325 {
326 // Assimp does not acknowledge LOD levels as far as I can see it. This info is just skipped.
327 // @todo Put this stuff to scene/mesh custom properties. If manual mesh the app can use the information.
328 ReadLine(); // strategy name
329 uint16_t numLods = Read<uint16_t>();
330 bool manual = Read<bool>();
331
332 /// @note Main mesh is considered as LOD 0, start from index 1.
333 for (size_t i=1; i<numLods; ++i)
334 {
335 uint16_t id = ReadHeader();
336 if (id != M_MESH_LOD_USAGE) {
337 throw DeadlyImportError("M_MESH_LOD does not contain a M_MESH_LOD_USAGE for each LOD level");
338 }
339
340 m_reader->IncPtr(sizeof(float)); // user value
341
342 if (manual)
343 {
344 id = ReadHeader();
345 if (id != M_MESH_LOD_MANUAL) {
346 throw DeadlyImportError("Manual M_MESH_LOD_USAGE does not contain M_MESH_LOD_MANUAL");
347 }
348
349 ReadLine(); // manual mesh name (ref to another mesh)
350 }
351 else
352 {
353 for(size_t si=0, silen=mesh->NumSubMeshes(); si<silen; ++si)
354 {
355 id = ReadHeader();
356 if (id != M_MESH_LOD_GENERATED) {
357 throw DeadlyImportError("Generated M_MESH_LOD_USAGE does not contain M_MESH_LOD_GENERATED");
358 }
359
360 uint32_t indexCount = Read<uint32_t>();
361 bool is32bit = Read<bool>();
362
363 if (indexCount > 0)
364 {
365 uint32_t len = indexCount * (is32bit ? sizeof(uint32_t) : sizeof(uint16_t));
366 m_reader->IncPtr(len);
367 }
368 }
369 }
370 }
371 }
372
373 void OgreBinarySerializer::ReadMeshSkeletonLink(Mesh *mesh)
374 {
375 mesh->skeletonRef = ReadLine();
376 }
377
378 void OgreBinarySerializer::ReadMeshBounds(Mesh *mesh)
379 {
380 // Skip bounds, not compatible with Assimp.
381 // 2x float vec3 + 1x float sphere radius
382 SkipBytes(sizeof(float) * 7);
383 }
384
385 void OgreBinarySerializer::ReadMeshExtremes(Mesh *mesh)
386 {
387 // Skip extremes, not compatible with Assimp.
388 size_t numBytes = m_currentLen - MSTREAM_OVERHEAD_SIZE;
389 SkipBytes(numBytes);
390 }
391
392 void OgreBinarySerializer::ReadBoneAssignment(VertexData *dest)
393 {
394 if (!dest) {
395 throw DeadlyImportError("Cannot read bone assignments, vertex data is null.");
396 }
397
398 VertexBoneAssignment ba;
399 ba.vertexIndex = Read<uint32_t>();
400 ba.boneIndex = Read<uint16_t>();
401 ba.weight = Read<float>();
402
403 dest->boneAssignments.push_back(ba);
404 }
405
406 void OgreBinarySerializer::ReadSubMesh(Mesh *mesh)
407 {
408 uint16_t id = 0;
409
410 SubMesh *submesh = new SubMesh();
411 submesh->materialRef = ReadLine();
412 submesh->usesSharedVertexData = Read<bool>();
413
414 submesh->indexData->count = Read<uint32_t>();
415 submesh->indexData->faceCount = static_cast<uint32_t>(submesh->indexData->count / 3);
416 submesh->indexData->is32bit = Read<bool>();
417
418 DefaultLogger::get()->debug(Formatter::format() << "Reading SubMesh " << mesh->subMeshes.size());
419 DefaultLogger::get()->debug(Formatter::format() << " - Material: '" << submesh->materialRef << "'");
420 DefaultLogger::get()->debug(Formatter::format() << " - Uses shared geometry: " << (submesh->usesSharedVertexData ? "true" : "false"));
421
422 // Index buffer
423 if (submesh->indexData->count > 0)
424 {
425 uint32_t numBytes = submesh->indexData->count * (submesh->indexData->is32bit ? sizeof(uint32_t) : sizeof(uint16_t));
426 uint8_t *indexBuffer = ReadBytes(numBytes);
427 submesh->indexData->buffer = MemoryStreamPtr(new Assimp::MemoryIOStream(indexBuffer, numBytes, true));
428
429 DefaultLogger::get()->debug(Formatter::format() << " - " << submesh->indexData->faceCount
430 << " faces from " << submesh->indexData->count << (submesh->indexData->is32bit ? " 32bit" : " 16bit")
431 << " indexes of " << numBytes << " bytes");
432 }
433
434 // Vertex buffer if not referencing the shared geometry
435 if (!submesh->usesSharedVertexData)
436 {
437 id = ReadHeader();
438 if (id != M_GEOMETRY) {
439 throw DeadlyImportError("M_SUBMESH does not contain M_GEOMETRY, but shader geometry is set to false");
440 }
441
442 submesh->vertexData = new VertexData();
443 ReadGeometry(submesh->vertexData);
444 }
445
446 // Bone assignment, submesh operation and texture aliases
447 if (!AtEnd())
448 {
449 id = ReadHeader();
450 while (!AtEnd() &&
451 (id == M_SUBMESH_OPERATION ||
452 id == M_SUBMESH_BONE_ASSIGNMENT ||
453 id == M_SUBMESH_TEXTURE_ALIAS))
454 {
455 switch(id)
456 {
457 case M_SUBMESH_OPERATION:
458 {
459 ReadSubMeshOperation(submesh);
460 break;
461 }
462 case M_SUBMESH_BONE_ASSIGNMENT:
463 {
464 ReadBoneAssignment(submesh->vertexData);
465 break;
466 }
467 case M_SUBMESH_TEXTURE_ALIAS:
468 {
469 ReadSubMeshTextureAlias(submesh);
470 break;
471 }
472 }
473
474 if (!AtEnd())
475 id = ReadHeader();
476 }
477 if (!AtEnd())
478 RollbackHeader();
479 }
480
481 NormalizeBoneWeights(submesh->vertexData);
482
483 submesh->index = mesh->subMeshes.size();
484 mesh->subMeshes.push_back(submesh);
485 }
486
487 void OgreBinarySerializer::NormalizeBoneWeights(VertexData *vertexData) const
488 {
489 if (!vertexData || vertexData->boneAssignments.empty())
490 return;
491
492 std::set<uint32_t> influencedVertices;
493 for (VertexBoneAssignmentList::const_iterator baIter=vertexData->boneAssignments.begin(), baEnd=vertexData->boneAssignments.end(); baIter != baEnd; ++baIter) {
494 influencedVertices.insert(baIter->vertexIndex);
495 }
496
497 /** Normalize bone weights.
498 Some exporters wont care if the sum of all bone weights
499 for a single vertex equals 1 or not, so validate here. */
500 const float epsilon = 0.05f;
501 for(std::set<uint32_t>::const_iterator iter=influencedVertices.begin(), end=influencedVertices.end(); iter != end; ++iter)
502 {
503 const uint32_t vertexIndex = (*iter);
504
505 float sum = 0.0f;
506 for (VertexBoneAssignmentList::const_iterator baIter=vertexData->boneAssignments.begin(), baEnd=vertexData->boneAssignments.end(); baIter != baEnd; ++baIter)
507 {
508 if (baIter->vertexIndex == vertexIndex)
509 sum += baIter->weight;
510 }
511 if ((sum < (1.0f - epsilon)) || (sum > (1.0f + epsilon)))
512 {
513 for (VertexBoneAssignmentList::iterator baIter=vertexData->boneAssignments.begin(), baEnd=vertexData->boneAssignments.end(); baIter != baEnd; ++baIter)
514 {
515 if (baIter->vertexIndex == vertexIndex)
516 baIter->weight /= sum;
517 }
518 }
519 }
520 }
521
522 void OgreBinarySerializer::ReadSubMeshOperation(SubMesh *submesh)
523 {
524 submesh->operationType = static_cast<SubMesh::OperationType>(Read<uint16_t>());
525 }
526
527 void OgreBinarySerializer::ReadSubMeshTextureAlias(SubMesh *submesh)
528 {
529 submesh->textureAliasName = ReadLine();
530 submesh->textureAliasRef = ReadLine();
531 }
532
533 void OgreBinarySerializer::ReadSubMeshNames(Mesh *mesh)
534 {
535 uint16_t id = 0;
536 uint16_t submeshIndex = 0;
537
538 if (!AtEnd())
539 {
540 id = ReadHeader();
541 while (!AtEnd() && id == M_SUBMESH_NAME_TABLE_ELEMENT)
542 {
543 uint16_t submeshIndex = Read<uint16_t>();
544 SubMesh *submesh = mesh->GetSubMesh(submeshIndex);
545 if (!submesh) {
546 throw DeadlyImportError(Formatter::format() << "Ogre Mesh does not include submesh " << submeshIndex << " referenced in M_SUBMESH_NAME_TABLE_ELEMENT. Invalid mesh file.");
547 }
548
549 submesh->name = ReadLine();
550 DefaultLogger::get()->debug(Formatter::format() << " - SubMesh " << submesh->index << " name '" << submesh->name << "'");
551
552 if (!AtEnd())
553 id = ReadHeader();
554 }
555 if (!AtEnd())
556 RollbackHeader();
557 }
558 }
559
560 void OgreBinarySerializer::ReadGeometry(VertexData *dest)
561 {
562 dest->count = Read<uint32_t>();
563
564 DefaultLogger::get()->debug(Formatter::format() << " - Reading geometry of " << dest->count << " vertices");
565
566 if (!AtEnd())
567 {
568 uint16_t id = ReadHeader();
569 while (!AtEnd() &&
570 (id == M_GEOMETRY_VERTEX_DECLARATION ||
571 id == M_GEOMETRY_VERTEX_BUFFER))
572 {
573 switch(id)
574 {
575 case M_GEOMETRY_VERTEX_DECLARATION:
576 {
577 ReadGeometryVertexDeclaration(dest);
578 break;
579 }
580 case M_GEOMETRY_VERTEX_BUFFER:
581 {
582 ReadGeometryVertexBuffer(dest);
583 break;
584 }
585 }
586
587 if (!AtEnd())
588 id = ReadHeader();
589 }
590 if (!AtEnd())
591 RollbackHeader();
592 }
593 }
594
595 void OgreBinarySerializer::ReadGeometryVertexDeclaration(VertexData *dest)
596 {
597 if (!AtEnd())
598 {
599 uint16_t id = ReadHeader();
600 while (!AtEnd() && id == M_GEOMETRY_VERTEX_ELEMENT)
601 {
602 ReadGeometryVertexElement(dest);
603
604 if (!AtEnd())
605 id = ReadHeader();
606 }
607 if (!AtEnd())
608 RollbackHeader();
609 }
610 }
611
612 void OgreBinarySerializer::ReadGeometryVertexElement(VertexData *dest)
613 {
614 VertexElement element;
615 element.source = Read<uint16_t>();
616 element.type = static_cast<VertexElement::Type>(Read<uint16_t>());
617 element.semantic = static_cast<VertexElement::Semantic>(Read<uint16_t>());
618 element.offset = Read<uint16_t>();
619 element.index = Read<uint16_t>();
620
621 DefaultLogger::get()->debug(Formatter::format() << " - Vertex element " << element.SemanticToString() << " of type "
622 << element.TypeToString() << " index=" << element.index << " source=" << element.source);
623
624 dest->vertexElements.push_back(element);
625 }
626
627 void OgreBinarySerializer::ReadGeometryVertexBuffer(VertexData *dest)
628 {
629 uint16_t bindIndex = Read<uint16_t>();
630 uint16_t vertexSize = Read<uint16_t>();
631
632 uint16_t id = ReadHeader();
633 if (id != M_GEOMETRY_VERTEX_BUFFER_DATA)
634 throw DeadlyImportError("M_GEOMETRY_VERTEX_BUFFER_DATA not found in M_GEOMETRY_VERTEX_BUFFER");
635
636 if (dest->VertexSize(bindIndex) != vertexSize)
637 throw DeadlyImportError("Vertex buffer size does not agree with vertex declaration in M_GEOMETRY_VERTEX_BUFFER");
638
639 size_t numBytes = dest->count * vertexSize;
640 uint8_t *vertexBuffer = ReadBytes(numBytes);
641 dest->vertexBindings[bindIndex] = MemoryStreamPtr(new Assimp::MemoryIOStream(vertexBuffer, numBytes, true));
642
643 DefaultLogger::get()->debug(Formatter::format() << " - Read vertex buffer for source " << bindIndex << " of " << numBytes << " bytes");
644 }
645
646 void OgreBinarySerializer::ReadEdgeList(Mesh *mesh)
647 {
648 // Assimp does not acknowledge LOD levels as far as I can see it. This info is just skipped.
649
650 if (!AtEnd())
651 {
652 uint16_t id = ReadHeader();
653 while (!AtEnd() && id == M_EDGE_LIST_LOD)
654 {
655 m_reader->IncPtr(sizeof(uint16_t)); // lod index
656 bool manual = Read<bool>();
657
658 if (!manual)
659 {
660 m_reader->IncPtr(sizeof(uint8_t));
661 uint32_t numTriangles = Read<uint32_t>();
662 uint32_t numEdgeGroups = Read<uint32_t>();
663
664 size_t skipBytes = (sizeof(uint32_t) * 8 + sizeof(float) * 4) * numTriangles;
665 m_reader->IncPtr(skipBytes);
666
667 for (size_t i=0; i<numEdgeGroups; ++i)
668 {
669 uint16_t id = ReadHeader();
670 if (id != M_EDGE_GROUP)
671 throw DeadlyImportError("M_EDGE_GROUP not found in M_EDGE_LIST_LOD");
672
673 m_reader->IncPtr(sizeof(uint32_t) * 3);
674 uint32_t numEdges = Read<uint32_t>();
675 for (size_t j=0; j<numEdges; ++j)
676 {
677 m_reader->IncPtr(sizeof(uint32_t) * 6 + sizeof(uint8_t));
678 }
679 }
680 }
681
682 if (!AtEnd())
683 id = ReadHeader();
684 }
685 if (!AtEnd())
686 RollbackHeader();
687 }
688 }
689
690 void OgreBinarySerializer::ReadPoses(Mesh *mesh)
691 {
692 if (!AtEnd())
693 {
694 uint16_t id = ReadHeader();
695 while (!AtEnd() && id == M_POSE)
696 {
697 Pose *pose = new Pose();
698 pose->name = ReadLine();
699 pose->target = Read<uint16_t>();
700 pose->hasNormals = Read<bool>();
701
702 ReadPoseVertices(pose);
703
704 mesh->poses.push_back(pose);
705
706 if (!AtEnd())
707 id = ReadHeader();
708 }
709 if (!AtEnd())
710 RollbackHeader();
711 }
712 }
713
714 void OgreBinarySerializer::ReadPoseVertices(Pose *pose)
715 {
716 if (!AtEnd())
717 {
718 uint16_t id = ReadHeader();
719 while (!AtEnd() && id == M_POSE_VERTEX)
720 {
721 Pose::Vertex v;
722 v.index = Read<uint32_t>();
723 ReadVector(v.offset);
724 if (pose->hasNormals)
725 ReadVector(v.normal);
726
727 pose->vertices[v.index] = v;
728
729 if (!AtEnd())
730 id = ReadHeader();
731 }
732 if (!AtEnd())
733 RollbackHeader();
734 }
735 }
736
737 void OgreBinarySerializer::ReadAnimations(Mesh *mesh)
738 {
739 if (!AtEnd())
740 {
741 uint16_t id = ReadHeader();
742 while (!AtEnd() && id == M_ANIMATION)
743 {
744 Animation *anim = new Animation(mesh);
745 anim->name = ReadLine();
746 anim->length = Read<float>();
747
748 ReadAnimation(anim);
749
750 mesh->animations.push_back(anim);
751
752 if (!AtEnd())
753 id = ReadHeader();
754 }
755 if (!AtEnd())
756 RollbackHeader();
757 }
758 }
759
760 void OgreBinarySerializer::ReadAnimation(Animation *anim)
761 {
762 if (!AtEnd())
763 {
764 uint16_t id = ReadHeader();
765 if (id == M_ANIMATION_BASEINFO)
766 {
767 anim->baseName = ReadLine();
768 anim->baseTime = Read<float>();
769
770 // Advance to first track
771 id = ReadHeader();
772 }
773
774 while (!AtEnd() && id == M_ANIMATION_TRACK)
775 {
776 VertexAnimationTrack track;
777 track.type = static_cast<VertexAnimationTrack::Type>(Read<uint16_t>());
778 track.target = Read<uint16_t>();
779
780 ReadAnimationKeyFrames(anim, &track);
781
782 anim->tracks.push_back(track);
783
784 if (!AtEnd())
785 id = ReadHeader();
786 }
787 if (!AtEnd())
788 RollbackHeader();
789 }
790 }
791
792 void OgreBinarySerializer::ReadAnimationKeyFrames(Animation *anim, VertexAnimationTrack *track)
793 {
794 if (!AtEnd())
795 {
796 uint16_t id = ReadHeader();
797 while (!AtEnd() &&
798 (id == M_ANIMATION_MORPH_KEYFRAME ||
799 id == M_ANIMATION_POSE_KEYFRAME))
800 {
801 if (id == M_ANIMATION_MORPH_KEYFRAME)
802 {
803 MorphKeyFrame kf;
804 kf.timePos = Read<float>();
805 bool hasNormals = Read<bool>();
806
807 size_t vertexCount = anim->AssociatedVertexData(track)->count;
808 size_t vertexSize = sizeof(float) * (hasNormals ? 6 : 3);
809 size_t numBytes = vertexCount * vertexSize;
810
811 uint8_t *morphBuffer = ReadBytes(numBytes);
812 kf.buffer = MemoryStreamPtr(new Assimp::MemoryIOStream(morphBuffer, numBytes, true));
813
814 track->morphKeyFrames.push_back(kf);
815 }
816 else if (id == M_ANIMATION_POSE_KEYFRAME)
817 {
818 PoseKeyFrame kf;
819 kf.timePos = Read<float>();
820
821 if (!AtEnd())
822 {
823 id = ReadHeader();
824 while (!AtEnd() && id == M_ANIMATION_POSE_REF)
825 {
826 PoseRef pr;
827 pr.index = Read<uint16_t>();
828 pr.influence = Read<float>();
829 kf.references.push_back(pr);
830
831 if (!AtEnd())
832 id = ReadHeader();
833 }
834 if (!AtEnd())
835 RollbackHeader();
836 }
837
838 track->poseKeyFrames.push_back(kf);
839 }
840
841 if (!AtEnd())
842 id = ReadHeader();
843 }
844 if (!AtEnd())
845 RollbackHeader();
846 }
847 }
848
849 // Skeleton
850
851 bool OgreBinarySerializer::ImportSkeleton(Assimp::IOSystem *pIOHandler, Mesh *mesh)
852 {
853 if (!mesh || mesh->skeletonRef.empty())
854 return false;
855
856 // Highly unusual to see in read world cases but support
857 // binary mesh referencing a XML skeleton file.
858 if (EndsWith(mesh->skeletonRef, ".skeleton.xml", false))
859 {
860 OgreXmlSerializer::ImportSkeleton(pIOHandler, mesh);
861 return false;
862 }
863
864 MemoryStreamReaderPtr reader = OpenReader(pIOHandler, mesh->skeletonRef);
865
866 Skeleton *skeleton = new Skeleton();
867 OgreBinarySerializer serializer(reader.get(), OgreBinarySerializer::AM_Skeleton);
868 serializer.ReadSkeleton(skeleton);
869 mesh->skeleton = skeleton;
870 return true;
871 }
872
873 bool OgreBinarySerializer::ImportSkeleton(Assimp::IOSystem *pIOHandler, MeshXml *mesh)
874 {
875 if (!mesh || mesh->skeletonRef.empty())
876 return false;
877
878 MemoryStreamReaderPtr reader = OpenReader(pIOHandler, mesh->skeletonRef);
879 if (!reader.get())
880 return false;
881
882 Skeleton *skeleton = new Skeleton();
883 OgreBinarySerializer serializer(reader.get(), OgreBinarySerializer::AM_Skeleton);
884 serializer.ReadSkeleton(skeleton);
885 mesh->skeleton = skeleton;
886 return true;
887 }
888
889 MemoryStreamReaderPtr OgreBinarySerializer::OpenReader(Assimp::IOSystem *pIOHandler, const std::string &filename)
890 {
891 if (!EndsWith(filename, ".skeleton", false))
892 {
893 DefaultLogger::get()->error("Imported Mesh is referencing to unsupported '" + filename + "' skeleton file.");
894 return MemoryStreamReaderPtr();
895 }
896
897 if (!pIOHandler->Exists(filename))
898 {
899 DefaultLogger::get()->error("Failed to find skeleton file '" + filename + "' that is referenced by imported Mesh.");
900 return MemoryStreamReaderPtr();
901 }
902
903 IOStream *f = pIOHandler->Open(filename, "rb");
904 if (!f) {
905 throw DeadlyImportError("Failed to open skeleton file " + filename);
906 }
907
908 return MemoryStreamReaderPtr(new MemoryStreamReader(f));
909 }
910
911 void OgreBinarySerializer::ReadSkeleton(Skeleton *skeleton)
912 {
913 uint16_t id = ReadHeader(false);
914 if (id != HEADER_CHUNK_ID) {
915 throw DeadlyExportError("Invalid Ogre Skeleton file header.");
916 }
917
918 // This deserialization supports both versions of the skeleton spec
919 std::string version = ReadLine();
920 if (version != SKELETON_VERSION_1_8 && version != SKELETON_VERSION_1_1)
921 {
922 throw DeadlyExportError(Formatter::format() << "Skeleton version " << version << " not supported by this importer."
923 << " Supported versions: " << SKELETON_VERSION_1_8 << " and " << SKELETON_VERSION_1_1);
924 }
925
926 DefaultLogger::get()->debug("Reading Skeleton");
927
928 bool firstBone = true;
929 bool firstAnim = true;
930
931 while (!AtEnd())
932 {
933 id = ReadHeader();
934 switch(id)
935 {
936 case SKELETON_BLENDMODE:
937 {
938 skeleton->blendMode = static_cast<Skeleton::BlendMode>(Read<uint16_t>());
939 break;
940 }
941 case SKELETON_BONE:
942 {
943 if (firstBone)
944 {
945 DefaultLogger::get()->debug(" - Bones");
946 firstBone = false;
947 }
948
949 ReadBone(skeleton);
950 break;
951 }
952 case SKELETON_BONE_PARENT:
953 {
954 ReadBoneParent(skeleton);
955 break;
956 }
957 case SKELETON_ANIMATION:
958 {
959 if (firstAnim)
960 {
961 DefaultLogger::get()->debug(" - Animations");
962 firstAnim = false;
963 }
964
965 ReadSkeletonAnimation(skeleton);
966 break;
967 }
968 case SKELETON_ANIMATION_LINK:
969 {
970 ReadSkeletonAnimationLink(skeleton);
971 break;
972 }
973 }
974 }
975
976 // Calculate bone matrices for root bones. Recursively calculates their children.
977 for (size_t i=0, len=skeleton->bones.size(); i<len; ++i)
978 {
979 Bone *bone = skeleton->bones[i];
980 if (!bone->IsParented())
981 bone->CalculateWorldMatrixAndDefaultPose(skeleton);
982 }
983 }
984
985 void OgreBinarySerializer::ReadBone(Skeleton *skeleton)
986 {
987 Bone *bone = new Bone();
988 bone->name = ReadLine();
989 bone->id = Read<uint16_t>();
990
991 // Pos and rot
992 ReadVector(bone->position);
993 ReadQuaternion(bone->rotation);
994
995 // Scale (optional)
996 if (m_currentLen > MSTREAM_BONE_SIZE_WITHOUT_SCALE)
997 ReadVector(bone->scale);
998
999 // Bone indexes need to start from 0 and be contiguous
1000 if (bone->id != skeleton->bones.size()) {
1001 throw DeadlyImportError(Formatter::format() << "Ogre Skeleton bone indexes not contiguous. Error at bone index " << bone->id);
1002 }
1003
1004 DefaultLogger::get()->debug(Formatter::format() << " " << bone->id << " " << bone->name);
1005
1006 skeleton->bones.push_back(bone);
1007 }
1008
1009 void OgreBinarySerializer::ReadBoneParent(Skeleton *skeleton)
1010 {
1011 uint16_t childId = Read<uint16_t>();
1012 uint16_t parentId = Read<uint16_t>();
1013
1014 Bone *child = skeleton->BoneById(childId);
1015 Bone *parent = skeleton->BoneById(parentId);
1016
1017 if (child && parent)
1018 parent->AddChild(child);
1019 else
1020 throw DeadlyImportError(Formatter::format() << "Failed to find bones for parenting: Child id " << childId << " for parent id " << parentId);
1021 }
1022
1023 void OgreBinarySerializer::ReadSkeletonAnimation(Skeleton *skeleton)
1024 {
1025 Animation *anim = new Animation(skeleton);
1026 anim->name = ReadLine();
1027 anim->length = Read<float>();
1028
1029 if (!AtEnd())
1030 {
1031 uint16_t id = ReadHeader();
1032 if (id == SKELETON_ANIMATION_BASEINFO)
1033 {
1034 anim->baseName = ReadLine();
1035 anim->baseTime = Read<float>();
1036
1037 // Advance to first track
1038 id = ReadHeader();
1039 }
1040
1041 while (!AtEnd() && id == SKELETON_ANIMATION_TRACK)
1042 {
1043 ReadSkeletonAnimationTrack(skeleton, anim);
1044
1045 if (!AtEnd())
1046 id = ReadHeader();
1047 }
1048 if (!AtEnd())
1049 RollbackHeader();
1050 }
1051
1052 skeleton->animations.push_back(anim);
1053
1054 DefaultLogger::get()->debug(Formatter::format() << " " << anim->name << " (" << anim->length << " sec, " << anim->tracks.size() << " tracks)");
1055 }
1056
1057 void OgreBinarySerializer::ReadSkeletonAnimationTrack(Skeleton *skeleton, Animation *dest)
1058 {
1059 uint16_t boneId = Read<uint16_t>();
1060 Bone *bone = dest->parentSkeleton->BoneById(boneId);
1061 if (!bone) {
1062 throw DeadlyImportError(Formatter::format() << "Cannot read animation track, target bone " << boneId << " not in target Skeleton");
1063 }
1064
1065 VertexAnimationTrack track;
1066 track.type = VertexAnimationTrack::VAT_TRANSFORM;
1067 track.boneName = bone->name;
1068
1069 uint16_t id = ReadHeader();
1070 while (!AtEnd() && id == SKELETON_ANIMATION_TRACK_KEYFRAME)
1071 {
1072 ReadSkeletonAnimationKeyFrame(&track);
1073
1074 if (!AtEnd())
1075 id = ReadHeader();
1076 }
1077 if (!AtEnd())
1078 RollbackHeader();
1079
1080 dest->tracks.push_back(track);
1081 }
1082
1083 void OgreBinarySerializer::ReadSkeletonAnimationKeyFrame(VertexAnimationTrack *dest)
1084 {
1085 TransformKeyFrame keyframe;
1086 keyframe.timePos = Read<float>();
1087
1088 // Rot and pos
1089 ReadQuaternion(keyframe.rotation);
1090 ReadVector(keyframe.position);
1091
1092 // Scale (optional)
1093 if (m_currentLen > MSTREAM_KEYFRAME_SIZE_WITHOUT_SCALE)
1094 ReadVector(keyframe.scale);
1095
1096 dest->transformKeyFrames.push_back(keyframe);
1097 }
1098
1099 void OgreBinarySerializer::ReadSkeletonAnimationLink(Skeleton *skeleton)
1100 {
1101 // Skip bounds, not compatible with Assimp.
1102 ReadLine(); // skeleton name
1103 SkipBytes(sizeof(float) * 3); // scale
1104 }
1105
1106 } // Ogre
1107 } // Assimp
1108
1109 #endif // ASSIMP_BUILD_NO_OGRE_IMPORTER
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 #ifndef AI_OGREBINARYSERIALIZER_H_INC
41 #define AI_OGREBINARYSERIALIZER_H_INC
42
43 #ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER
44
45 #include "OgreStructs.h"
46
47 namespace Assimp
48 {
49 namespace Ogre
50 {
51
52 typedef Assimp::StreamReaderLE MemoryStreamReader;
53 typedef boost::shared_ptr<MemoryStreamReader> MemoryStreamReaderPtr;
54
55 class OgreBinarySerializer
56 {
57 public:
58 /// Imports mesh and returns the result.
59 /** @note Fatal unrecoverable errors will throw a DeadlyImportError. */
60 static Mesh *ImportMesh(MemoryStreamReader *reader);
61
62 /// Imports skeleton to @c mesh into Mesh::skeleton.
63 /** If mesh does not have a skeleton reference or the skeleton file
64 cannot be found it is not a fatal DeadlyImportError.
65 @return If skeleton import was successful. */
66 static bool ImportSkeleton(Assimp::IOSystem *pIOHandler, Mesh *mesh);
67 static bool ImportSkeleton(Assimp::IOSystem *pIOHandler, MeshXml *mesh);
68
69 private:
70 enum AssetMode
71 {
72 AM_Mesh,
73 AM_Skeleton
74 };
75
76 OgreBinarySerializer(MemoryStreamReader *reader, AssetMode mode) :
77 m_reader(reader),
78 m_currentLen(0),
79 assetMode(mode)
80 {
81 }
82
83 static MemoryStreamReaderPtr OpenReader(Assimp::IOSystem *pIOHandler, const std::string &filename);
84
85 // Header
86
87 uint16_t ReadHeader(bool readLen = true);
88 void RollbackHeader();
89
90 // Mesh
91
92 void ReadMesh(Mesh *mesh);
93 void ReadMeshLodInfo(Mesh *mesh);
94 void ReadMeshSkeletonLink(Mesh *mesh);
95 void ReadMeshBounds(Mesh *mesh);
96 void ReadMeshExtremes(Mesh *mesh);
97
98 void ReadSubMesh(Mesh *mesh);
99 void ReadSubMeshNames(Mesh *mesh);
100 void ReadSubMeshOperation(SubMesh *submesh);
101 void ReadSubMeshTextureAlias(SubMesh *submesh);
102
103 void ReadBoneAssignment(VertexData *dest);
104
105 void ReadGeometry(VertexData *dest);
106 void ReadGeometryVertexDeclaration(VertexData *dest);
107 void ReadGeometryVertexElement(VertexData *dest);
108 void ReadGeometryVertexBuffer(VertexData *dest);
109
110 void ReadEdgeList(Mesh *mesh);
111 void ReadPoses(Mesh *mesh);
112 void ReadPoseVertices(Pose *pose);
113
114 void ReadAnimations(Mesh *mesh);
115 void ReadAnimation(Animation *anim);
116 void ReadAnimationKeyFrames(Animation *anim, VertexAnimationTrack *track);
117
118 void NormalizeBoneWeights(VertexData *vertexData) const;
119
120 // Skeleton
121
122 void ReadSkeleton(Skeleton *skeleton);
123
124 void ReadBone(Skeleton *skeleton);
125 void ReadBoneParent(Skeleton *skeleton);
126
127 void ReadSkeletonAnimation(Skeleton *skeleton);
128 void ReadSkeletonAnimationTrack(Skeleton *skeleton, Animation *dest);
129 void ReadSkeletonAnimationKeyFrame(VertexAnimationTrack *dest);
130 void ReadSkeletonAnimationLink(Skeleton *skeleton);
131
132 // Reader utils
133 bool AtEnd() const;
134
135 template<typename T>
136 inline T Read();
137
138 void ReadBytes(char *dest, size_t numBytes);
139 void ReadBytes(uint8_t *dest, size_t numBytes);
140 void ReadBytes(void *dest, size_t numBytes);
141 uint8_t *ReadBytes(size_t numBytes);
142
143 void ReadVector(aiVector3D &vec);
144 void ReadQuaternion(aiQuaternion &quat);
145
146 std::string ReadString(size_t len);
147 std::string ReadLine();
148
149 void SkipBytes(size_t numBytes);
150
151 uint32_t m_currentLen;
152 MemoryStreamReader *m_reader;
153
154 AssetMode assetMode;
155 };
156
157 enum MeshChunkId
158 {
159 M_HEADER = 0x1000,
160 // char* version : Version number check
161 M_MESH = 0x3000,
162 // bool skeletallyAnimated // important flag which affects h/w buffer policies
163 // Optional M_GEOMETRY chunk
164 M_SUBMESH = 0x4000,
165 // char* materialName
166 // bool useSharedVertices
167 // unsigned int indexCount
168 // bool indexes32Bit
169 // unsigned int* faceVertexIndices (indexCount)
170 // OR
171 // unsigned short* faceVertexIndices (indexCount)
172 // M_GEOMETRY chunk (Optional: present only if useSharedVertices = false)
173 M_SUBMESH_OPERATION = 0x4010, // optional, trilist assumed if missing
174 // unsigned short operationType
175 M_SUBMESH_BONE_ASSIGNMENT = 0x4100,
176 // Optional bone weights (repeating section)
177 // unsigned int vertexIndex;
178 // unsigned short boneIndex;
179 // float weight;
180 // Optional chunk that matches a texture name to an alias
181 // a texture alias is sent to the submesh material to use this texture name
182 // instead of the one in the texture unit with a matching alias name
183 M_SUBMESH_TEXTURE_ALIAS = 0x4200, // Repeating section
184 // char* aliasName;
185 // char* textureName;
186
187 M_GEOMETRY = 0x5000, // NB this chunk is embedded within M_MESH and M_SUBMESH
188 // unsigned int vertexCount
189 M_GEOMETRY_VERTEX_DECLARATION = 0x5100,
190 M_GEOMETRY_VERTEX_ELEMENT = 0x5110, // Repeating section
191 // unsigned short source; // buffer bind source
192 // unsigned short type; // VertexElementType
193 // unsigned short semantic; // VertexElementSemantic
194 // unsigned short offset; // start offset in buffer in bytes
195 // unsigned short index; // index of the semantic (for colours and texture coords)
196 M_GEOMETRY_VERTEX_BUFFER = 0x5200, // Repeating section
197 // unsigned short bindIndex; // Index to bind this buffer to
198 // unsigned short vertexSize; // Per-vertex size, must agree with declaration at this index
199 M_GEOMETRY_VERTEX_BUFFER_DATA = 0x5210,
200 // raw buffer data
201 M_MESH_SKELETON_LINK = 0x6000,
202 // Optional link to skeleton
203 // char* skeletonName : name of .skeleton to use
204 M_MESH_BONE_ASSIGNMENT = 0x7000,
205 // Optional bone weights (repeating section)
206 // unsigned int vertexIndex;
207 // unsigned short boneIndex;
208 // float weight;
209 M_MESH_LOD = 0x8000,
210 // Optional LOD information
211 // string strategyName;
212 // unsigned short numLevels;
213 // bool manual; (true for manual alternate meshes, false for generated)
214 M_MESH_LOD_USAGE = 0x8100,
215 // Repeating section, ordered in increasing depth
216 // NB LOD 0 (full detail from 0 depth) is omitted
217 // LOD value - this is a distance, a pixel count etc, based on strategy
218 // float lodValue;
219 M_MESH_LOD_MANUAL = 0x8110,
220 // Required if M_MESH_LOD section manual = true
221 // String manualMeshName;
222 M_MESH_LOD_GENERATED = 0x8120,
223 // Required if M_MESH_LOD section manual = false
224 // Repeating section (1 per submesh)
225 // unsigned int indexCount;
226 // bool indexes32Bit
227 // unsigned short* faceIndexes; (indexCount)
228 // OR
229 // unsigned int* faceIndexes; (indexCount)
230 M_MESH_BOUNDS = 0x9000,
231 // float minx, miny, minz
232 // float maxx, maxy, maxz
233 // float radius
234
235 // Added By DrEvil
236 // optional chunk that contains a table of submesh indexes and the names of
237 // the sub-meshes.
238 M_SUBMESH_NAME_TABLE = 0xA000,
239 // Subchunks of the name table. Each chunk contains an index & string
240 M_SUBMESH_NAME_TABLE_ELEMENT = 0xA100,
241 // short index
242 // char* name
243 // Optional chunk which stores precomputed edge data
244 M_EDGE_LISTS = 0xB000,
245 // Each LOD has a separate edge list
246 M_EDGE_LIST_LOD = 0xB100,
247 // unsigned short lodIndex
248 // bool isManual // If manual, no edge data here, loaded from manual mesh
249 // bool isClosed
250 // unsigned long numTriangles
251 // unsigned long numEdgeGroups
252 // Triangle* triangleList
253 // unsigned long indexSet
254 // unsigned long vertexSet
255 // unsigned long vertIndex[3]
256 // unsigned long sharedVertIndex[3]
257 // float normal[4]
258
259 M_EDGE_GROUP = 0xB110,
260 // unsigned long vertexSet
261 // unsigned long triStart
262 // unsigned long triCount
263 // unsigned long numEdges
264 // Edge* edgeList
265 // unsigned long triIndex[2]
266 // unsigned long vertIndex[2]
267 // unsigned long sharedVertIndex[2]
268 // bool degenerate
269 // Optional poses section, referred to by pose keyframes
270 M_POSES = 0xC000,
271 M_POSE = 0xC100,
272 // char* name (may be blank)
273 // unsigned short target // 0 for shared geometry,
274 // 1+ for submesh index + 1
275 // bool includesNormals [1.8+]
276 M_POSE_VERTEX = 0xC111,
277 // unsigned long vertexIndex
278 // float xoffset, yoffset, zoffset
279 // float xnormal, ynormal, znormal (optional, 1.8+)
280 // Optional vertex animation chunk
281 M_ANIMATIONS = 0xD000,
282 M_ANIMATION = 0xD100,
283 // char* name
284 // float length
285 M_ANIMATION_BASEINFO = 0xD105,
286 // [Optional] base keyframe information (pose animation only)
287 // char* baseAnimationName (blank for self)
288 // float baseKeyFrameTime
289 M_ANIMATION_TRACK = 0xD110,
290 // unsigned short type // 1 == morph, 2 == pose
291 // unsigned short target // 0 for shared geometry,
292 // 1+ for submesh index + 1
293 M_ANIMATION_MORPH_KEYFRAME = 0xD111,
294 // float time
295 // bool includesNormals [1.8+]
296 // float x,y,z // repeat by number of vertices in original geometry
297 M_ANIMATION_POSE_KEYFRAME = 0xD112,
298 // float time
299 M_ANIMATION_POSE_REF = 0xD113, // repeat for number of referenced poses
300 // unsigned short poseIndex
301 // float influence
302 // Optional submesh extreme vertex list chink
303 M_TABLE_EXTREMES = 0xE000,
304 // unsigned short submesh_index;
305 // float extremes [n_extremes][3];
306 };
307
308 static std::string MeshHeaderToString(MeshChunkId id)
309 {
310 switch(id)
311 {
312 case M_HEADER: return "HEADER";
313 case M_MESH: return "MESH";
314 case M_SUBMESH: return "SUBMESH";
315 case M_SUBMESH_OPERATION: return "SUBMESH_OPERATION";
316 case M_SUBMESH_BONE_ASSIGNMENT: return "SUBMESH_BONE_ASSIGNMENT";
317 case M_SUBMESH_TEXTURE_ALIAS: return "SUBMESH_TEXTURE_ALIAS";
318 case M_GEOMETRY: return "GEOMETRY";
319 case M_GEOMETRY_VERTEX_DECLARATION: return "GEOMETRY_VERTEX_DECLARATION";
320 case M_GEOMETRY_VERTEX_ELEMENT: return "GEOMETRY_VERTEX_ELEMENT";
321 case M_GEOMETRY_VERTEX_BUFFER: return "GEOMETRY_VERTEX_BUFFER";
322 case M_GEOMETRY_VERTEX_BUFFER_DATA: return "GEOMETRY_VERTEX_BUFFER_DATA";
323 case M_MESH_SKELETON_LINK: return "MESH_SKELETON_LINK";
324 case M_MESH_BONE_ASSIGNMENT: return "MESH_BONE_ASSIGNMENT";
325 case M_MESH_LOD: return "MESH_LOD";
326 case M_MESH_LOD_USAGE: return "MESH_LOD_USAGE";
327 case M_MESH_LOD_MANUAL: return "MESH_LOD_MANUAL";
328 case M_MESH_LOD_GENERATED: return "MESH_LOD_GENERATED";
329 case M_MESH_BOUNDS: return "MESH_BOUNDS";
330 case M_SUBMESH_NAME_TABLE: return "SUBMESH_NAME_TABLE";
331 case M_SUBMESH_NAME_TABLE_ELEMENT: return "SUBMESH_NAME_TABLE_ELEMENT";
332 case M_EDGE_LISTS: return "EDGE_LISTS";
333 case M_EDGE_LIST_LOD: return "EDGE_LIST_LOD";
334 case M_EDGE_GROUP: return "EDGE_GROUP";
335 case M_POSES: return "POSES";
336 case M_POSE: return "POSE";
337 case M_POSE_VERTEX: return "POSE_VERTEX";
338 case M_ANIMATIONS: return "ANIMATIONS";
339 case M_ANIMATION: return "ANIMATION";
340 case M_ANIMATION_BASEINFO: return "ANIMATION_BASEINFO";
341 case M_ANIMATION_TRACK: return "ANIMATION_TRACK";
342 case M_ANIMATION_MORPH_KEYFRAME: return "ANIMATION_MORPH_KEYFRAME";
343 case M_ANIMATION_POSE_KEYFRAME: return "ANIMATION_POSE_KEYFRAME";
344 case M_ANIMATION_POSE_REF: return "ANIMATION_POSE_REF";
345 case M_TABLE_EXTREMES: return "TABLE_EXTREMES";
346 }
347 return "Unknown_MeshChunkId";
348 }
349
350 enum SkeletonChunkId
351 {
352 SKELETON_HEADER = 0x1000,
353 // char* version : Version number check
354 SKELETON_BLENDMODE = 0x1010, // optional
355 // unsigned short blendmode : SkeletonAnimationBlendMode
356 SKELETON_BONE = 0x2000,
357 // Repeating section defining each bone in the system.
358 // Bones are assigned indexes automatically based on their order of declaration
359 // starting with 0.
360 // char* name : name of the bone
361 // unsigned short handle : handle of the bone, should be contiguous & start at 0
362 // Vector3 position : position of this bone relative to parent
363 // Quaternion orientation : orientation of this bone relative to parent
364 // Vector3 scale : scale of this bone relative to parent
365 SKELETON_BONE_PARENT = 0x3000,
366 // Record of the parent of a single bone, used to build the node tree
367 // Repeating section, listed in Bone Index order, one per Bone
368 // unsigned short handle : child bone
369 // unsigned short parentHandle : parent bone
370 SKELETON_ANIMATION = 0x4000,
371 // A single animation for this skeleton
372 // char* name : Name of the animation
373 // float length : Length of the animation in seconds
374 SKELETON_ANIMATION_BASEINFO = 0x4010,
375 // [Optional] base keyframe information
376 // char* baseAnimationName (blank for self)
377 // float baseKeyFrameTime
378 SKELETON_ANIMATION_TRACK = 0x4100,
379 // A single animation track (relates to a single bone)
380 // Repeating section (within SKELETON_ANIMATION)
381 // unsigned short boneIndex : Index of bone to apply to
382 SKELETON_ANIMATION_TRACK_KEYFRAME = 0x4110,
383 // A single keyframe within the track
384 // Repeating section
385 // float time : The time position (seconds)
386 // Quaternion rotate : Rotation to apply at this keyframe
387 // Vector3 translate : Translation to apply at this keyframe
388 // Vector3 scale : Scale to apply at this keyframe
389 SKELETON_ANIMATION_LINK = 0x5000
390 // Link to another skeleton, to re-use its animations
391 // char* skeletonName : name of skeleton to get animations from
392 // float scale : scale to apply to trans/scale keys
393 };
394
395 static std::string SkeletonHeaderToString(SkeletonChunkId id)
396 {
397 switch(id)
398 {
399 case SKELETON_HEADER: return "HEADER";
400 case SKELETON_BLENDMODE: return "BLENDMODE";
401 case SKELETON_BONE: return "BONE";
402 case SKELETON_BONE_PARENT: return "BONE_PARENT";
403 case SKELETON_ANIMATION: return "ANIMATION";
404 case SKELETON_ANIMATION_BASEINFO: return "ANIMATION_BASEINFO";
405 case SKELETON_ANIMATION_TRACK: return "ANIMATION_TRACK";
406 case SKELETON_ANIMATION_TRACK_KEYFRAME: return "ANIMATION_TRACK_KEYFRAME";
407 case SKELETON_ANIMATION_LINK: return "ANIMATION_LINK";
408 }
409 return "Unknown_SkeletonChunkId";
410 }
411 } // Ogre
412 } // Assimp
413
414 #endif // ASSIMP_BUILD_NO_OGRE_IMPORTER
415 #endif // AI_OGREBINARYSERIALIZER_H_INC
3737 ----------------------------------------------------------------------
3838 */
3939
40 /** @file OgreImporter.cpp
41 * @brief Implementation of the Ogre XML (.mesh.xml) loader.
42 */
43 #include "AssimpPCH.h"
4440 #ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER
4541
46 #include <vector>
47 #include <sstream>
48 using namespace std;
42 #include "AssimpPCH.h"
4943
50 #include "OgreImporter.hpp"
51 #include "TinyFormatter.h"
52 #include "irrXMLWrapper.h"
44 #include "OgreImporter.h"
45 #include "OgreBinarySerializer.h"
46 #include "OgreXmlSerializer.h"
5347
5448 static const aiImporterDesc desc = {
55 "Ogre XML Mesh Importer",
49 "Ogre3D Mesh Importer",
5650 "",
5751 "",
5852 "",
59 aiImporterFlags_SupportTextFlavour,
53 aiImporterFlags_SupportTextFlavour | aiImporterFlags_SupportBinaryFlavour,
6054 0,
6155 0,
6256 0,
6357 0,
64 "mesh.xml"
58 "mesh mesh.xml"
6559 };
6660
6761 namespace Assimp
6963 namespace Ogre
7064 {
7165
72
73 bool OgreImporter::CanRead(const std::string &pFile, Assimp::IOSystem *pIOHandler, bool checkSig) const
74 {
75 if(!checkSig)//Check File Extension
76 {
77 std::string extension("mesh.xml");
78 int l=extension.length();
79 return pFile.substr(pFile.length()-l, l)==extension;
80 }
81 else//Check file Header
82 {
83 const char* tokens[] = {"<mesh>"};
84 return BaseImporter::SearchFileHeaderForToken(pIOHandler, pFile, tokens, 1);
85 }
86 }
87
88
89 void OgreImporter::InternReadFile(const std::string &pFile, aiScene *pScene, Assimp::IOSystem *pIOHandler)
90 {
91 m_CurrentFilename=pFile;
92 m_CurrentIOHandler=pIOHandler;
93 m_CurrentScene=pScene;
94
95 //Open the File:
96 boost::scoped_ptr<IOStream> file(pIOHandler->Open(pFile));
97 if( file.get() == NULL)
98 throw DeadlyImportError("Failed to open file "+pFile+".");
99
100 //Read the Mesh File:
101 boost::scoped_ptr<CIrrXML_IOStreamReader> mIOWrapper( new CIrrXML_IOStreamReader( file.get()));
102 XmlReader* MeshFile = irr::io::createIrrXMLReader(mIOWrapper.get());
103 if(!MeshFile)//parse the xml file
104 throw DeadlyImportError("Failed to create XML Reader for "+pFile);
105
106
107 DefaultLogger::get()->debug("Mesh File opened");
108
109 //Read root Node:
110 if(!(XmlRead(MeshFile) && string(MeshFile->getNodeName())=="mesh"))
111 {
112 throw DeadlyImportError("Root Node is not <mesh>! "+pFile+" "+MeshFile->getNodeName());
113 }
114
115 //eventually load shared geometry
116 XmlRead(MeshFile);//shared geometry is optional, so we need a reed for the next two if's
117 if(MeshFile->getNodeName()==string("sharedgeometry"))
118 {
119 unsigned int NumVertices=GetAttribute<int>(MeshFile, "vertexcount");;
120
121 XmlRead(MeshFile);
122 while(MeshFile->getNodeName()==string("vertexbuffer"))
123 {
124 ReadVertexBuffer(m_SharedGeometry, MeshFile, NumVertices);
125 }
126 }
127
128 //Go to the submeshs:
129 if(MeshFile->getNodeName()!=string("submeshes"))
130 {
131 throw DeadlyImportError("No <submeshes> node in <mesh> node! "+pFile);
132 }
133
134
135 //-------------------Read the submeshs and materials:-----------------------
136 std::list<boost::shared_ptr<SubMesh> > SubMeshes;
137 vector<aiMaterial*> Materials;
138 XmlRead(MeshFile);
139 while(MeshFile->getNodeName()==string("submesh"))
140 {
141 SubMesh* theSubMesh=new SubMesh();
142 theSubMesh->MaterialName=GetAttribute<string>(MeshFile, "material");
143 DefaultLogger::get()->debug("Loading Submehs with Material: "+theSubMesh->MaterialName);
144 ReadSubMesh(*theSubMesh, MeshFile);
145
146 //just a index in a array, we add a mesh in each loop cycle, so we get indicies like 0, 1, 2 ... n;
147 //so it is important to do this before pushing the mesh in the vector!
148 theSubMesh->MaterialIndex=SubMeshes.size();
149
150 SubMeshes.push_back(boost::shared_ptr<SubMesh>(theSubMesh));
151
152 //Load the Material:
153 aiMaterial* MeshMat=LoadMaterial(theSubMesh->MaterialName);
154
155 //Set the Material:
156 Materials.push_back(MeshMat);
157 }
158
159 if(SubMeshes.empty())
160 throw DeadlyImportError("no submesh loaded!");
161 if(SubMeshes.size()!=Materials.size())
162 throw DeadlyImportError("materialcount doesn't match mesh count!");
163
164 //____________________________________________________________
165
166
167 //----------------Load the skeleton: -------------------------------
168 vector<Bone> Bones;
169 vector<Animation> Animations;
170 if(MeshFile->getNodeName()==string("skeletonlink"))
171 {
172 string SkeletonFile=GetAttribute<string>(MeshFile, "name");
173 LoadSkeleton(SkeletonFile, Bones, Animations);
174 XmlRead(MeshFile);
175 }
176 else
177 {
178 DefaultLogger::get()->warn("No skeleton file will be loaded");
179 DefaultLogger::get()->warn(MeshFile->getNodeName());
180 }
181 //__________________________________________________________________
182
183
184 //now there might be boneassignments for the shared geometry:
185 if(MeshFile->getNodeName()==string("boneassignments"))
186 {
187 ReadBoneWeights(m_SharedGeometry, MeshFile);
188 }
189
190
191 //----------------- Process Meshs -----------------------
192 BOOST_FOREACH(boost::shared_ptr<SubMesh> theSubMesh, SubMeshes)
193 {
194 ProcessSubMesh(*theSubMesh, m_SharedGeometry);
195 }
196 //_______________________________________________________
197
198
199
200
201 //----------------- Now fill the Assimp scene ---------------------------
202
203 //put the aiMaterials in the scene:
204 m_CurrentScene->mMaterials=new aiMaterial*[Materials.size()];
205 m_CurrentScene->mNumMaterials=Materials.size();
206 for(unsigned int i=0; i<Materials.size(); ++i)
207 m_CurrentScene->mMaterials[i]=Materials[i];
208
209 //create the aiMehs...
210 vector<aiMesh*> aiMeshes;
211 BOOST_FOREACH(boost::shared_ptr<SubMesh> theSubMesh, SubMeshes)
212 {
213 aiMeshes.push_back(CreateAssimpSubMesh(*theSubMesh, Bones));
214 }
215 //... and put them in the scene:
216 m_CurrentScene->mNumMeshes=aiMeshes.size();
217 m_CurrentScene->mMeshes=new aiMesh*[aiMeshes.size()];
218 memcpy(m_CurrentScene->mMeshes, &(aiMeshes[0]), sizeof(aiMeshes[0])*aiMeshes.size());
219
220 //Create the root node
221 m_CurrentScene->mRootNode=new aiNode("root");
222
223 //link the meshs with the root node:
224 m_CurrentScene->mRootNode->mMeshes=new unsigned int[SubMeshes.size()];
225 m_CurrentScene->mRootNode->mNumMeshes=SubMeshes.size();
226 for(unsigned int i=0; i<SubMeshes.size(); ++i)
227 m_CurrentScene->mRootNode->mMeshes[i]=i;
228
229
230
231 CreateAssimpSkeleton(Bones, Animations);
232 PutAnimationsInScene(Bones, Animations);
233 //___________________________________________________________
234 }
235
236
237 const aiImporterDesc* OgreImporter::GetInfo () const
66 const aiImporterDesc* OgreImporter::GetInfo() const
23867 {
23968 return &desc;
24069 }
24170
242
24371 void OgreImporter::SetupProperties(const Importer* pImp)
24472 {
245 m_MaterialLibFilename=pImp->GetPropertyString(AI_CONFIG_IMPORT_OGRE_MATERIAL_FILE, "Scene.material");
246 m_TextureTypeFromFilename=pImp->GetPropertyBool(AI_CONFIG_IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME, false);
73 m_userDefinedMaterialLibFile = pImp->GetPropertyString(AI_CONFIG_IMPORT_OGRE_MATERIAL_FILE, "Scene.material");
74 m_detectTextureTypeFromFilename = pImp->GetPropertyBool(AI_CONFIG_IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME, false);
24775 }
24876
77 bool OgreImporter::CanRead(const std::string &pFile, Assimp::IOSystem *pIOHandler, bool checkSig) const
78 {
79 if (!checkSig) {
80 return EndsWith(pFile, ".mesh.xml", false) || EndsWith(pFile, ".mesh", false);
81 }
24982
250 }//namespace Ogre
251 }//namespace Assimp
83 if (EndsWith(pFile, ".mesh.xml", false))
84 {
85 const char* tokens[] = { "<mesh>" };
86 return SearchFileHeaderForToken(pIOHandler, pFile, tokens, 1);
87 }
88 else
89 {
90 /// @todo Read and validate first header chunk?
91 return EndsWith(pFile, ".mesh", false);
92 }
93 }
25294
253 #endif // !! ASSIMP_BUILD_NO_OGRE_IMPORTER
95 void OgreImporter::InternReadFile(const std::string &pFile, aiScene *pScene, Assimp::IOSystem *pIOHandler)
96 {
97 // Open source file
98 IOStream *f = pIOHandler->Open(pFile, "rb");
99 if (!f) {
100 throw DeadlyImportError("Failed to open file " + pFile);
101 }
102
103 // Binary .mesh import
104 if (EndsWith(pFile, ".mesh", false))
105 {
106 /// @note MemoryStreamReader takes ownership of f.
107 MemoryStreamReader reader(f);
108
109 // Import mesh
110 boost::scoped_ptr<Mesh> mesh(OgreBinarySerializer::ImportMesh(&reader));
111
112 // Import skeleton
113 OgreBinarySerializer::ImportSkeleton(pIOHandler, mesh.get());
114
115 // Import mesh referenced materials
116 ReadMaterials(pFile, pIOHandler, pScene, mesh.get());
117
118 // Convert to Assimp
119 mesh->ConvertToAssimpScene(pScene);
120 }
121 // XML .mesh.xml import
122 else
123 {
124 /// @note XmlReader does not take ownership of f, hence the scoped ptr.
125 boost::scoped_ptr<IOStream> scopedFile(f);
126 boost::scoped_ptr<CIrrXML_IOStreamReader> xmlStream(new CIrrXML_IOStreamReader(scopedFile.get()));
127 boost::scoped_ptr<XmlReader> reader(irr::io::createIrrXMLReader(xmlStream.get()));
128
129 // Import mesh
130 boost::scoped_ptr<MeshXml> mesh(OgreXmlSerializer::ImportMesh(reader.get()));
131
132 // Import skeleton
133 OgreXmlSerializer::ImportSkeleton(pIOHandler, mesh.get());
134
135 // Import mesh referenced materials
136 ReadMaterials(pFile, pIOHandler, pScene, mesh.get());
137
138 // Convert to Assimp
139 mesh->ConvertToAssimpScene(pScene);
140 }
141 }
142
143 } // Ogre
144 } // Assimp
145
146 #endif // ASSIMP_BUILD_NO_OGRE_IMPORTER
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 #ifndef AI_OGREIMPORTER_H_INC
41 #define AI_OGREIMPORTER_H_INC
42
43 #ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER
44
45 #include "BaseImporter.h"
46
47 #include "OgreStructs.h"
48 #include "OgreParsingUtils.h"
49
50 namespace Assimp
51 {
52 namespace Ogre
53 {
54
55 /** Importer for Ogre mesh, skeleton and material formats.
56 @todo Support vertex colors.
57 @todo Support poses/animations from the mesh file.
58 Currently only skeleton file animations are supported. */
59 class OgreImporter : public BaseImporter
60 {
61 public:
62 /// BaseImporter override.
63 virtual bool CanRead(const std::string &pFile, IOSystem *pIOHandler, bool checkSig) const;
64
65 /// BaseImporter override.
66 virtual void InternReadFile(const std::string &pFile, aiScene *pScene, IOSystem *pIOHandler);
67
68 /// BaseImporter override.
69 virtual const aiImporterDesc *GetInfo() const;
70
71 /// BaseImporter override.
72 virtual void SetupProperties(const Importer *pImp);
73
74 private:
75 /// Read materials referenced by the @c mesh to @c pScene.
76 void ReadMaterials(const std::string &pFile, Assimp::IOSystem *pIOHandler, aiScene *pScene, Mesh *mesh);
77 void ReadMaterials(const std::string &pFile, Assimp::IOSystem *pIOHandler, aiScene *pScene, MeshXml *mesh);
78 void AssignMaterials(aiScene *pScene, std::vector<aiMaterial*> &materials);
79
80 /// Reads material
81 aiMaterial* ReadMaterial(const std::string &pFile, Assimp::IOSystem *pIOHandler, const std::string MaterialName);
82
83 // These functions parse blocks from a material file from @c ss. Starting parsing from "{" and ending it to "}".
84 bool ReadTechnique(const std::string &techniqueName, std::stringstream &ss, aiMaterial *material);
85 bool ReadPass(const std::string &passName, std::stringstream &ss, aiMaterial *material);
86 bool ReadTextureUnit(const std::string &textureUnitName, std::stringstream &ss, aiMaterial *material);
87
88 std::string m_userDefinedMaterialLibFile;
89 bool m_detectTextureTypeFromFilename;
90
91 std::map<aiTextureType, unsigned int> m_textures;
92 };
93 } // Ogre
94 } // Assimp
95
96 #endif // ASSIMP_BUILD_NO_OGRE_IMPORTER
97 #endif // AI_OGREIMPORTER_H_INC
+0
-185
code/OgreImporter.hpp less more
0 #include "BaseImporter.h"
1
2 #include <vector>
3
4 #include "OgreXmlHelper.hpp"
5 #include "irrXMLWrapper.h"
6
7 /// Ogre Importer TODO
8 /* - Read Vertex Colors
9 - Read multiple TexCoords
10 */
11
12
13
14 namespace Assimp
15 {
16 namespace Ogre
17 {
18
19
20 //Forward declarations:
21 struct Face;
22 struct Weight;
23 struct Bone;
24 struct Animation;
25 struct Track;
26 struct Keyframe;
27
28 ///A submesh from Ogre
29 struct SubMesh
30 {
31 bool SharedData;
32
33 std::string Name;
34 std::string MaterialName;
35 std::vector<Face> FaceList;
36
37 std::vector<aiVector3D> Positions; bool HasPositions;
38 std::vector<aiVector3D> Normals; bool HasNormals;
39 std::vector<aiVector3D> Tangents; bool HasTangents;
40 std::vector<std::vector<aiVector3D> > Uvs;//arbitrary number of texcoords, they are nearly always 2d, but assimp has always 3d texcoords, n vectors(outer) with texcoords for each vertex(inner)
41
42 std::vector< std::vector<Weight> > Weights;//a list(inner) of bones for each vertex(outer)
43 int MaterialIndex;///< The Index in the Assimp Materialarray from the material witch is attached to this submesh
44 unsigned int BonesUsed;//the highest index of a bone from a bone weight, this is needed to create the assimp bone structur (converting from Vertex-Bones to Bone-Vertices)
45
46 SubMesh(): SharedData(false), HasPositions(false), HasNormals(false), HasTangents(false),
47 MaterialIndex(-1), BonesUsed(0) {}//initialize everything
48 };
49
50
51 ///The Main Ogre Importer Class
52 class OgreImporter : public BaseImporter
53 {
54 public:
55 virtual bool CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const;
56 virtual void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler);
57 virtual const aiImporterDesc* GetInfo () const;
58 virtual void SetupProperties(const Importer* pImp);
59 private:
60
61
62 //-------------------------------- OgreMesh.cpp -------------------------------
63 /// Helper Functions to read parts of the XML File
64 void ReadSubMesh(SubMesh& theSubMesh, XmlReader* Reader);//the submesh reference is the result value
65
66 /// Reads a single Vertexbuffer and writes its data in the Submesh
67 static void ReadVertexBuffer(SubMesh &theSubMesh, XmlReader *Reader, unsigned int NumVertices);
68
69 /// Reads bone weights are stores them into the given submesh
70 static void ReadBoneWeights(SubMesh &theSubMesh, XmlReader *Reader);
71
72 /// After Loading a SubMehs some work needs to be done (make all Vertexes unique, normalize weights)
73 static void ProcessSubMesh(SubMesh &theSubMesh, SubMesh &theSharedGeometry);
74
75 /// Uses the bone data to convert a SubMesh into a aiMesh which will be created and returned
76 aiMesh* CreateAssimpSubMesh(const SubMesh &theSubMesh, const std::vector<Bone>& Bones) const;
77
78
79 //-------------------------------- OgreSkeleton.cpp -------------------------------
80 /// Writes the results in Bones and Animations, Filename is not const, because its call-by-value and the function will change it!
81 void LoadSkeleton(std::string FileName, std::vector<Bone> &Bones, std::vector<Animation> &Animations) const;
82
83 /// Converts the animations in aiAnimations and puts them into the scene
84 void PutAnimationsInScene(const std::vector<Bone> &Bones, const std::vector<Animation> &Animations);
85
86 /// Creates the aiskeleton in current scene
87 void CreateAssimpSkeleton(const std::vector<Bone> &Bones, const std::vector<Animation> &Animations);
88
89 /// Recursivly creates a filled aiNode from a given root bone
90 static aiNode* CreateAiNodeFromBone(int BoneId, const std::vector<Bone> &Bones, aiNode* ParentNode);
91
92
93 //-------------------------------- OgreMaterial.cpp -------------------------------
94 aiMaterial* LoadMaterial(const std::string MaterialName) const;
95 void ReadTechnique(std::stringstream &ss, aiMaterial* NewMaterial) const;
96
97
98
99
100 //Now we don't have to give theses parameters to all functions
101 std::string m_CurrentFilename;
102 std::string m_MaterialLibFilename;
103 bool m_TextureTypeFromFilename;
104 IOSystem* m_CurrentIOHandler;
105 aiScene *m_CurrentScene;
106 SubMesh m_SharedGeometry;///< we will just use the vertexbuffers of the submesh
107 };
108
109 ///For the moment just triangles, no other polygon types!
110 struct Face
111 {
112 unsigned int VertexIndices[3];
113 };
114
115 struct BoneAssignment
116 {
117 unsigned int BoneId;//this is, what we get from ogre
118 std::string BoneName;//this is, what we need for assimp
119 };
120
121 ///for a vertex->bone structur
122 struct Weight
123 {
124 unsigned int BoneId;
125 float Value;
126 };
127
128
129 /// Helper Class to describe an ogre-bone for the skeleton:
130 /** All Id's are signed ints, because than we have -1 as a simple INVALID_ID Value (we start from 0 so 0 is a valid bone ID!*/
131 struct Bone
132 {
133 int Id;
134 int ParentId;
135 std::string Name;
136 aiVector3D Position;
137 float RotationAngle;
138 aiVector3D RotationAxis;
139 std::vector<int> Children;
140 aiMatrix4x4 BoneToWorldSpace;
141
142 ///ctor
143 Bone(): Id(-1), ParentId(-1), RotationAngle(0.0f) {}
144 ///this operator is needed to sort the bones after Id's
145 bool operator<(const Bone& rval) const
146 {return Id<rval.Id; }
147 ///this operator is needed to find a bone by its name in a vector<Bone>
148 bool operator==(const std::string& rval) const
149 {return Name==rval; }
150 bool operator==(const aiString& rval) const
151 {return Name==std::string(rval.data); }
152
153 // implemented in OgreSkeleton.cpp
154 void CalculateBoneToWorldSpaceMatrix(std::vector<Bone>& Bones);
155 };
156
157
158
159 ///Describes an Ogre Animation
160 struct Animation
161 {
162 std::string Name;
163 float Length;
164 std::vector<Track> Tracks;
165 };
166
167 ///a track (keyframes for one bone) from an animation
168 struct Track
169 {
170 std::string BoneName;
171 std::vector<Keyframe> Keyframes;
172 };
173
174 /// keyframe (bone transformation) from a track from a animation
175 struct Keyframe
176 {
177 float Time;
178 aiVector3D Position;
179 aiQuaternion Rotation;
180 aiVector3D Scaling;
181 };
182
183 }//namespace Ogre
184 }//namespace Assimp
3737 ----------------------------------------------------------------------
3838 */
3939
40 /**
41 This file contains material related code. This is
42 spilitted up from the main file OgreImporter.cpp
43 to make it shorter easier to maintain.
44 */
4540 #include "AssimpPCH.h"
4641
4742 #ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER
43
44 #include "OgreImporter.h"
45 #include "TinyFormatter.h"
46
47 #include "fast_atof.h"
4848
4949 #include <vector>
5050 #include <sstream>
51
5152 using namespace std;
5253
53 #include "OgreImporter.hpp"
54 #include "irrXMLWrapper.h"
55 #include "TinyFormatter.h"
56
5754 namespace Assimp
5855 {
5956 namespace Ogre
6057 {
6158
62
63
64 aiMaterial* OgreImporter::LoadMaterial(const std::string MaterialName) const
65 {
66 const aiScene* const m_CurrentScene=this->m_CurrentScene;//make sure, that we can access but not change the scene
67 (void)m_CurrentScene;
68
69 /*For bettetr understanding of the material parser, here is a material example file:
70
71 material Sarg
72 {
73 receive_shadows on
74 technique
75 {
76 pass
77 {
78 ambient 0.500000 0.500000 0.500000 1.000000
79 diffuse 0.640000 0.640000 0.640000 1.000000
80 specular 0.500000 0.500000 0.500000 1.000000 12.500000
81 emissive 0.000000 0.000000 0.000000 1.000000
82 texture_unit
83 {
84 texture SargTextur.tga
85 tex_address_mode wrap
86 filtering linear linear none
87 }
88 }
89 }
90 }
91
92 */
59 static const string partComment = "//";
60 static const string partBlockStart = "{";
61 static const string partBlockEnd = "}";
62
63 void OgreImporter::ReadMaterials(const std::string &pFile, Assimp::IOSystem *pIOHandler, aiScene *pScene, Mesh *mesh)
64 {
65 std::vector<aiMaterial*> materials;
66
67 // Create materials that can be found and parsed via the IOSystem.
68 for (size_t i=0, len=mesh->NumSubMeshes(); i<len; ++i)
69 {
70 SubMesh *submesh = mesh->GetSubMesh(i);
71 if (submesh && !submesh->materialRef.empty())
72 {
73 aiMaterial *material = ReadMaterial(pFile, pIOHandler, submesh->materialRef);
74 if (material)
75 {
76 submesh->materialIndex = materials.size();
77 materials.push_back(material);
78 }
79 }
80 }
81
82 AssignMaterials(pScene, materials);
83 }
84
85 void OgreImporter::ReadMaterials(const std::string &pFile, Assimp::IOSystem *pIOHandler, aiScene *pScene, MeshXml *mesh)
86 {
87 std::vector<aiMaterial*> materials;
88
89 // Create materials that can be found and parsed via the IOSystem.
90 for (size_t i=0, len=mesh->NumSubMeshes(); i<len; ++i)
91 {
92 SubMeshXml *submesh = mesh->GetSubMesh(i);
93 if (submesh && !submesh->materialRef.empty())
94 {
95 aiMaterial *material = ReadMaterial(pFile, pIOHandler, submesh->materialRef);
96 if (material)
97 {
98 submesh->materialIndex = materials.size();
99 materials.push_back(material);
100 }
101 }
102 }
103
104 AssignMaterials(pScene, materials);
105 }
106
107 void OgreImporter::AssignMaterials(aiScene *pScene, std::vector<aiMaterial*> &materials)
108 {
109 pScene->mNumMaterials = materials.size();
110 if (pScene->mNumMaterials > 0)
111 {
112 pScene->mMaterials = new aiMaterial*[pScene->mNumMaterials];
113 for(size_t i=0;i<pScene->mNumMaterials; ++i) {
114 pScene->mMaterials[i] = materials[i];
115 }
116 }
117 }
118
119 aiMaterial* OgreImporter::ReadMaterial(const std::string &pFile, Assimp::IOSystem *pIOHandler, const std::string materialName)
120 {
121 if (materialName.empty()) {
122 return 0;
123 }
124
125 // Full reference and examples of Ogre Material Script
126 // can be found from http://www.ogre3d.org/docs/manual/manual_14.html
93127
94128 /*and here is another one:
95129
114148 }
115149 */
116150
117 //Read the file into memory and put it in a stringstream
118151 stringstream ss;
119 {// after this block, the temporarly loaded data will be released
120
121 /*
122 We have 3 guesses for the Material filename:
123 - the Material Name
124 - the Name of the mesh file
125 - the DefaultMaterialLib (which you can set before importing)
126 */
152
153 // Scope for scopre_ptr auto release
154 {
155 /* There are three .material options in priority order:
156 1) File with the material name (materialName)
157 2) File with the mesh files base name (pFile)
158 3) Optional user defined material library file (m_userDefinedMaterialLibFile) */
159 std::vector<string> potentialFiles;
160 potentialFiles.push_back(materialName + ".material");
161 potentialFiles.push_back(pFile.substr(0, pFile.rfind(".mesh")) + ".material");
162 if (!m_userDefinedMaterialLibFile.empty())
163 potentialFiles.push_back(m_userDefinedMaterialLibFile);
127164
128 IOStream* MatFilePtr=m_CurrentIOHandler->Open(MaterialName+".material");
129 if(NULL==MatFilePtr)
130 {
131 //the filename typically ends with .mesh or .mesh.xml
132 const string MaterialFileName=m_CurrentFilename.substr(0, m_CurrentFilename.rfind(".mesh"))+".material";
133
134 MatFilePtr=m_CurrentIOHandler->Open(MaterialFileName);
135 if(NULL==MatFilePtr)
136 {
137 //try the default mat Library
138 if(NULL==MatFilePtr)
139 {
165 IOStream *materialFile = 0;
166 for(size_t i=0; i<potentialFiles.size(); ++i)
167 {
168 materialFile = pIOHandler->Open(potentialFiles[i]);
169 if (materialFile) {
170 break;
171 }
172 DefaultLogger::get()->debug(Formatter::format() << "Source file for material '" << materialName << "' " << potentialFiles[i] << " does not exist");
173 }
174 if (!materialFile)
175 {
176 DefaultLogger::get()->error(Formatter::format() << "Failed to find source file for material '" << materialName << "'");
177 return 0;
178 }
179
180 boost::scoped_ptr<IOStream> stream(materialFile);
181 if (stream->FileSize() == 0)
182 {
183 DefaultLogger::get()->warn(Formatter::format() << "Source file for material '" << materialName << "' is empty (size is 0 bytes)");
184 return 0;
185 }
186
187 // Read bytes
188 vector<char> data(stream->FileSize());
189 stream->Read(&data[0], stream->FileSize(), 1);
190
191 // Convert to UTF-8 and terminate the string for ss
192 BaseImporter::ConvertToUTF8(data);
193 data.push_back('\0');
194
195 ss << &data[0];
196 }
197
198 DefaultLogger::get()->debug("Reading material '" + materialName + "'");
199
200 aiMaterial *material = new aiMaterial();
201 m_textures.clear();
202
203 aiString ts(materialName);
204 material->AddProperty(&ts, AI_MATKEY_NAME);
205
206 // The stringstream will push words from a line until newline.
207 // It will also trim whitespace from line start and between words.
208 string linePart;
209 ss >> linePart;
210
211 const string partMaterial = "material";
212 const string partTechnique = "technique";
213
214 while(!ss.eof())
215 {
216 // Skip commented lines
217 if (linePart == partComment)
218 {
219 NextAfterNewLine(ss, linePart);
220 continue;
221 }
222 if (linePart != partMaterial)
223 {
224 ss >> linePart;
225 continue;
226 }
227
228 ss >> linePart;
229 if (linePart != materialName)
230 {
231 //DefaultLogger::get()->debug(Formatter::format() << "Found material '" << linePart << "' that does not match at index " << ss.tellg());
232 ss >> linePart;
233 continue;
234 }
235
236 NextAfterNewLine(ss, linePart);
237 if (linePart != partBlockStart)
238 {
239 DefaultLogger::get()->error(Formatter::format() << "Invalid material: block start missing near index " << ss.tellg());
240 return material;
241 }
242
243 DefaultLogger::get()->debug("material '" + materialName + "'");
244
245 while(linePart != partBlockEnd)
246 {
247 // Proceed to the first technique
248 ss >> linePart;
249
250 if (linePart == partTechnique)
251 {
252 string techniqueName = SkipLine(ss);
253 ReadTechnique(Trim(techniqueName), ss, material);
254 }
255
256 // Read informations from a custom material
257 /** @todo This "set $x y" does not seem to be a official Ogre material system feature.
258 Materials can inherit other materials and override texture units by using the (unique)
259 parent texture unit name in your cloned material.
260 This is not yet supported and below code is probably some hack from the original
261 author of this Ogre importer. Should be removed? */
262 if (linePart=="set")
263 {
264 ss >> linePart;
265 if (linePart=="$specular")//todo load this values:
266 {
267 }
268 else if (linePart=="$diffuse")
269 {
270 }
271 else if (linePart=="$ambient")
272 {
273 }
274 else if (linePart=="$colormap")
275 {
276 ss >> linePart;
277 aiString ts(linePart);
278 material->AddProperty(&ts, AI_MATKEY_TEXTURE(aiTextureType_DIFFUSE, 0));
279 }
280 else if (linePart=="$normalmap")
281 {
282 ss >> linePart;
283 aiString ts(linePart);
284 material->AddProperty(&ts, AI_MATKEY_TEXTURE(aiTextureType_NORMALS, 0));
285 }
286 else if (linePart=="$shininess_strength")
287 {
288 ss >> linePart;
289 float Shininess = fast_atof(linePart.c_str());
290 material->AddProperty(&Shininess, 1, AI_MATKEY_SHININESS_STRENGTH);
291 }
292 else if (linePart=="$shininess_exponent")
293 {
294 ss >> linePart;
295 float Shininess = fast_atof(linePart.c_str());
296 material->AddProperty(&Shininess, 1, AI_MATKEY_SHININESS);
297 }
298 //Properties from Venetica:
299 else if (linePart=="$diffuse_map")
300 {
301 ss >> linePart;
302 if (linePart[0] == '"')// "file" -> file
303 linePart = linePart.substr(1, linePart.size()-2);
304 aiString ts(linePart);
305 material->AddProperty(&ts, AI_MATKEY_TEXTURE(aiTextureType_DIFFUSE, 0));
306 }
307 else if (linePart=="$specular_map")
308 {
309 ss >> linePart;
310 if (linePart[0] == '"')// "file" -> file
311 linePart = linePart.substr(1, linePart.size()-2);
312 aiString ts(linePart);
313 material->AddProperty(&ts, AI_MATKEY_TEXTURE(aiTextureType_SHININESS, 0));
314 }
315 else if (linePart=="$normal_map")
316 {
317 ss >> linePart;
318 if (linePart[0]=='"')// "file" -> file
319 linePart = linePart.substr(1, linePart.size()-2);
320 aiString ts(linePart);
321 material->AddProperty(&ts, AI_MATKEY_TEXTURE(aiTextureType_NORMALS, 0));
322 }
323 else if (linePart=="$light_map")
324 {
325 ss >> linePart;
326 if (linePart[0]=='"') {
327 linePart = linePart.substr(1, linePart.size() - 2);
328 }
329 aiString ts(linePart);
330 material->AddProperty(&ts, AI_MATKEY_TEXTURE(aiTextureType_LIGHTMAP, 0));
331 }
332 }
333 }
334 ss >> linePart;
335 }
336
337 return material;
338 }
339
340 bool OgreImporter::ReadTechnique(const std::string &techniqueName, stringstream &ss, aiMaterial *material)
341 {
342 string linePart;
343 ss >> linePart;
344
345 if (linePart != partBlockStart)
346 {
347 DefaultLogger::get()->error(Formatter::format() << "Invalid material: Technique block start missing near index " << ss.tellg());
348 return false;
349 }
350
351 DefaultLogger::get()->debug(" technique '" + techniqueName + "'");
352
353 const string partPass = "pass";
354
355 while(linePart != partBlockEnd)
356 {
357 ss >> linePart;
358
359 // Skip commented lines
360 if (linePart == partComment)
361 {
362 SkipLine(ss);
363 continue;
364 }
365
366 /// @todo Techniques have other attributes than just passes.
367 if (linePart == partPass)
368 {
369 string passName = SkipLine(ss);
370 ReadPass(Trim(passName), ss, material);
371 }
372 }
373 return true;
374 }
375
376 bool OgreImporter::ReadPass(const std::string &passName, stringstream &ss, aiMaterial *material)
377 {
378 string linePart;
379 ss >> linePart;
380
381 if (linePart != partBlockStart)
382 {
383 DefaultLogger::get()->error(Formatter::format() << "Invalid material: Pass block start missing near index " << ss.tellg());
384 return false;
385 }
386
387 DefaultLogger::get()->debug(" pass '" + passName + "'");
388
389 const string partAmbient = "ambient";
390 const string partDiffuse = "diffuse";
391 const string partSpecular = "specular";
392 const string partEmissive = "emissive";
393 const string partTextureUnit = "texture_unit";
394
395 while(linePart != partBlockEnd)
396 {
397 ss >> linePart;
398
399 // Skip commented lines
400 if (linePart == partComment)
401 {
402 SkipLine(ss);
403 continue;
404 }
405
406 // Colors
407 /// @todo Support alpha via aiColor4D.
408 if (linePart == partAmbient || linePart == partDiffuse || linePart == partSpecular || linePart == partEmissive)
409 {
410 float r, g, b;
411 ss >> r >> g >> b;
412 const aiColor3D color(r, g, b);
413
414 DefaultLogger::get()->debug(Formatter::format() << " " << linePart << " " << r << " " << g << " " << b);
415
416 if (linePart == partAmbient)
417 {
418 material->AddProperty(&color, 1, AI_MATKEY_COLOR_AMBIENT);
419 }
420 else if (linePart == partDiffuse)
421 {
422 material->AddProperty(&color, 1, AI_MATKEY_COLOR_DIFFUSE);
423 }
424 else if (linePart == partSpecular)
425 {
426 material->AddProperty(&color, 1, AI_MATKEY_COLOR_SPECULAR);
427 }
428 else if (linePart == partEmissive)
429 {
430 material->AddProperty(&color, 1, AI_MATKEY_COLOR_EMISSIVE);
431 }
432 }
433 else if (linePart == partTextureUnit)
434 {
435 string textureUnitName = SkipLine(ss);
436 ReadTextureUnit(Trim(textureUnitName), ss, material);
437 }
438 }
439 return true;
440 }
441
442 bool OgreImporter::ReadTextureUnit(const std::string &textureUnitName, stringstream &ss, aiMaterial *material)
443 {
444 string linePart;
445 ss >> linePart;
446
447 if (linePart != partBlockStart)
448 {
449 DefaultLogger::get()->error(Formatter::format() << "Invalid material: Texture unit block start missing near index " << ss.tellg());
450 return false;
451 }
452
453 DefaultLogger::get()->debug(" texture_unit '" + textureUnitName + "'");
454
455 const string partTexture = "texture";
456 const string partTextCoordSet = "tex_coord_set";
457 const string partColorOp = "colour_op";
458
459 aiTextureType textureType = aiTextureType_NONE;
460 std::string textureRef;
461 int uvCoord = 0;
462
463 while(linePart != partBlockEnd)
464 {
465 ss >> linePart;
466
467 // Skip commented lines
468 if (linePart == partComment)
469 {
470 SkipLine(ss);
471 continue;
472 }
473
474 if (linePart == partTexture)
475 {
476 ss >> linePart;
477 textureRef = linePart;
478
479 // User defined Assimp config property to detect texture type from filename.
480 if (m_detectTextureTypeFromFilename)
481 {
482 size_t posSuffix = textureRef.find_last_of(".");
483 size_t posUnderscore = textureRef.find_last_of("_");
140484
141 MatFilePtr=m_CurrentIOHandler->Open(m_MaterialLibFilename);
142 if(NULL==MatFilePtr)
485 if (posSuffix != string::npos && posUnderscore != string::npos && posSuffix > posUnderscore)
486 {
487 string identifier = Ogre::ToLower(textureRef.substr(posUnderscore, posSuffix - posUnderscore));
488 DefaultLogger::get()->debug(Formatter::format() << "Detecting texture type from filename postfix '" << identifier << "'");
489
490 if (identifier == "_n" || identifier == "_nrm" || identifier == "_nrml" || identifier == "_normal" || identifier == "_normals" || identifier == "_normalmap")
143491 {
144 DefaultLogger::get()->error(m_MaterialLibFilename+" and "+MaterialFileName + " could not be opened, Material will not be loaded!");
145 return NULL;
492 textureType = aiTextureType_NORMALS;
146493 }
147 }
148 }
149 }
150 boost::scoped_ptr<IOStream> MaterialFile(MatFilePtr);
151 vector<char> FileData(MaterialFile->FileSize());
152 MaterialFile->Read(&FileData[0], MaterialFile->FileSize(), 1);
153 BaseImporter::ConvertToUTF8(FileData);
154
155 ss << &FileData[0];
156 }
157
158 //create the material
159 aiMaterial *NewMaterial=new aiMaterial();
160
161 aiString ts(MaterialName.c_str());
162 NewMaterial->AddProperty(&ts, AI_MATKEY_NAME);
163
164 string Line;
165 ss >> Line;
166 // unsigned int Level=0;//Hierarchielevels in the material file, like { } blocks into another
167 while(!ss.eof())
168 {
169 if(Line=="material")
170 {
171 ss >> Line;
172 if(Line==MaterialName)//Load the next material
173 {
174 string RestOfLine;
175 getline(ss, RestOfLine);//ignore the rest of the line
176 ss >> Line;
177
178 if(Line!="{")
179 {
180 DefaultLogger::get()->warn("empyt material!");
181 return NULL;
182 }
183
184 while(Line!="}")//read until the end of the material
185 {
186 //Proceed to the first technique
187 ss >> Line;
188 if(Line=="technique")
494 else if (identifier == "_s" || identifier == "_spec" || identifier == "_specular" || identifier == "_specularmap")
189495 {
190 ReadTechnique(ss, NewMaterial);
496 textureType = aiTextureType_SPECULAR;
191497 }
192
193 DefaultLogger::get()->info(Line);
194 //read informations from a custom material:
195 if(Line=="set")
498 else if (identifier == "_l" || identifier == "_light" || identifier == "_lightmap" || identifier == "_occ" || identifier == "_occlusion")
196499 {
197 ss >> Line;
198 if(Line=="$specular")//todo load this values:
199 {
200 }
201 if(Line=="$diffuse")
202 {
203 }
204 if(Line=="$ambient")
205 {
206 }
207 if(Line=="$colormap")
208 {
209 ss >> Line;
210 aiString ts(Line.c_str());
211 NewMaterial->AddProperty(&ts, AI_MATKEY_TEXTURE(aiTextureType_DIFFUSE, 0));
212 }
213 if(Line=="$normalmap")
214 {
215 ss >> Line;
216 aiString ts(Line.c_str());
217 NewMaterial->AddProperty(&ts, AI_MATKEY_TEXTURE(aiTextureType_NORMALS, 0));
218 }
219
220 if(Line=="$shininess_strength")
221 {
222 ss >> Line;
223 float Shininess=fast_atof(Line.c_str());
224 NewMaterial->AddProperty(&Shininess, 1, AI_MATKEY_SHININESS_STRENGTH);
225 }
226
227 if(Line=="$shininess_exponent")
228 {
229 ss >> Line;
230 float Shininess=fast_atof(Line.c_str());
231 NewMaterial->AddProperty(&Shininess, 1, AI_MATKEY_SHININESS);
232 }
233
234 //Properties from Venetica:
235 if(Line=="$diffuse_map")
236 {
237 ss >> Line;
238 if(Line[0]=='"')// "file" -> file
239 Line=Line.substr(1, Line.size()-2);
240 aiString ts(Line.c_str());
241 NewMaterial->AddProperty(&ts, AI_MATKEY_TEXTURE(aiTextureType_DIFFUSE, 0));
242 }
243 if(Line=="$specular_map")
244 {
245 ss >> Line;
246 if(Line[0]=='"')// "file" -> file
247 Line=Line.substr(1, Line.size()-2);
248 aiString ts(Line.c_str());
249 NewMaterial->AddProperty(&ts, AI_MATKEY_TEXTURE(aiTextureType_SHININESS, 0));
250 }
251 if(Line=="$normal_map")
252 {
253 ss >> Line;
254 if(Line[0]=='"')// "file" -> file
255 Line=Line.substr(1, Line.size()-2);
256 aiString ts(Line.c_str());
257 NewMaterial->AddProperty(&ts, AI_MATKEY_TEXTURE(aiTextureType_NORMALS, 0));
258 }
259 if(Line=="$light_map")
260 {
261 ss >> Line;
262 if(Line[0]=='"')// "file" -> file
263 Line=Line.substr(1, Line.size()-2);
264 aiString ts(Line.c_str());
265 NewMaterial->AddProperty(&ts, AI_MATKEY_TEXTURE(aiTextureType_LIGHTMAP, 0));
266 }
267 }
268 }//end of material
269 }
270 else {} //this is the wrong material, proceed the file until we reach the next material
271 }
272 ss >> Line;
273 }
274
275 return NewMaterial;
276 }
277
278 void OgreImporter::ReadTechnique(stringstream &ss, aiMaterial* NewMaterial) const
279 {
280 unsigned int CurrentDiffuseTextureId=0;
281 unsigned int CurrentSpecularTextureId=0;
282 unsigned int CurrentNormalTextureId=0;
283 unsigned int CurrentLightTextureId=0;
284
285
286 string RestOfLine;
287 getline(ss, RestOfLine);//ignore the rest of the line
288
289 string Line;
290 ss >> Line;
291 if(Line!="{")
292 {
293 DefaultLogger::get()->warn("empty technique!");
294 return;
295 }
296 while(Line!="}")//read until the end of the technique
297 {
298 ss >> Line;
299 if(Line=="pass")
300 {
301 getline(ss, RestOfLine);//ignore the rest of the line
302
303 ss >> Line;
304 if(Line!="{")
305 {
306 DefaultLogger::get()->warn("empty pass!");
307 return;
308 }
309 while(Line!="}")//read until the end of the pass
310 {
311 ss >> Line;
312 if(Line=="ambient")
313 {
314 float r,g,b;
315 ss >> r >> g >> b;
316 const aiColor3D Color(r,g,b);
317 NewMaterial->AddProperty(&Color, 1, AI_MATKEY_COLOR_AMBIENT);
318 }
319 else if(Line=="diffuse")
320 {
321 float r,g,b;
322 ss >> r >> g >> b;
323 const aiColor3D Color(r,g,b);
324 NewMaterial->AddProperty(&Color, 1, AI_MATKEY_COLOR_DIFFUSE);
325 }
326 else if(Line=="specular")
327 {
328 float r,g,b;
329 ss >> r >> g >> b;
330 const aiColor3D Color(r,g,b);
331 NewMaterial->AddProperty(&Color, 1, AI_MATKEY_COLOR_SPECULAR);
332 }
333 else if(Line=="emmisive")
334 {
335 float r,g,b;
336 ss >> r >> g >> b;
337 const aiColor3D Color(r,g,b);
338 NewMaterial->AddProperty(&Color, 1, AI_MATKEY_COLOR_EMISSIVE);
339 }
340 else if(Line=="texture_unit")
341 {
342 getline(ss, RestOfLine);//ignore the rest of the line
343
344 std::string TextureName;
345 int TextureType=-1;
346 int UvSet=0;
347
348 ss >> Line;
349 if(Line!="{")
350 throw DeadlyImportError("empty texture unit!");
351 while(Line!="}")//read until the end of the texture_unit
500 textureType = aiTextureType_LIGHTMAP;
501 }
502 else if (identifier == "_disp" || identifier == "_displacement")
352503 {
353 ss >> Line;
354 if(Line=="texture")
355 {
356 ss >> Line;
357 TextureName=Line;
358
359 if(m_TextureTypeFromFilename)
360 {
361 if(Line.find("_n.")!=string::npos)// Normalmap
362 {
363 TextureType=aiTextureType_NORMALS;
364 }
365 else if(Line.find("_s.")!=string::npos)// Specularmap
366 {
367 TextureType=aiTextureType_SPECULAR;
368 }
369 else if(Line.find("_l.")!=string::npos)// Lightmap
370 {
371 TextureType=aiTextureType_LIGHTMAP;
372 }
373 else// colormap
374 {
375 TextureType=aiTextureType_DIFFUSE;
376 }
377 }
378 else
379 {
380 TextureType=aiTextureType_DIFFUSE;
381 }
382 }
383 else if(Line=="tex_coord_set")
384 {
385 ss >> UvSet;
386 }
387 else if(Line=="colour_op")//TODO implement this
388 {
389 /*
390 ss >> Line;
391 if("replace"==Line)//I don't think, assimp has something for this...
392 {
393 }
394 else if("modulate"==Line)
395 {
396 //TODO: set value
397 //NewMaterial->AddProperty(aiTextureOp_Multiply)
398 }
399 */
400 }
401
402 }//end of texture unit
403 Line="";//clear the } that would end the outer loop
404
405 //give the texture to assimp:
406
407 aiString ts(TextureName.c_str());
408 switch(TextureType)
504 textureType = aiTextureType_DISPLACEMENT;
505 }
506 else
409507 {
410 case aiTextureType_DIFFUSE:
411 NewMaterial->AddProperty(&ts, AI_MATKEY_TEXTURE(aiTextureType_DIFFUSE, CurrentDiffuseTextureId));
412 NewMaterial->AddProperty(&UvSet, 1, AI_MATKEY_UVWSRC(0, CurrentDiffuseTextureId));
413 CurrentDiffuseTextureId++;
414 break;
415 case aiTextureType_NORMALS:
416 NewMaterial->AddProperty(&ts, AI_MATKEY_TEXTURE(aiTextureType_NORMALS, CurrentNormalTextureId));
417 NewMaterial->AddProperty(&UvSet, 1, AI_MATKEY_UVWSRC(0, CurrentNormalTextureId));
418 CurrentNormalTextureId++;
419 break;
420 case aiTextureType_SPECULAR:
421 NewMaterial->AddProperty(&ts, AI_MATKEY_TEXTURE(aiTextureType_SPECULAR, CurrentSpecularTextureId));
422 NewMaterial->AddProperty(&UvSet, 1, AI_MATKEY_UVWSRC(0, CurrentSpecularTextureId));
423 CurrentSpecularTextureId++;
424 break;
425 case aiTextureType_LIGHTMAP:
426 NewMaterial->AddProperty(&ts, AI_MATKEY_TEXTURE(aiTextureType_LIGHTMAP, CurrentLightTextureId));
427 NewMaterial->AddProperty(&UvSet, 1, AI_MATKEY_UVWSRC(0, CurrentLightTextureId));
428 CurrentLightTextureId++;
429 break;
430 default:
431 DefaultLogger::get()->warn("Invalid Texture Type!");
432 break;
508 textureType = aiTextureType_DIFFUSE;
433509 }
434510 }
435 }
436 Line="";//clear the } that would end the outer loop
437 }
438 }//end of technique
439 }
440
441
442 }//namespace Ogre
443 }//namespace Assimp
444
445 #endif // !! ASSIMP_BUILD_NO_OGRE_IMPORTER
511 else
512 {
513 textureType = aiTextureType_DIFFUSE;
514 }
515 }
516 // Detect from texture unit name. This cannot be too broad as
517 // authors might give names like "LightSaber" or "NormalNinja".
518 else
519 {
520 string unitNameLower = Ogre::ToLower(textureUnitName);
521 if (unitNameLower.find("normalmap") != string::npos)
522 {
523 textureType = aiTextureType_NORMALS;
524 }
525 else if (unitNameLower.find("specularmap") != string::npos)
526 {
527 textureType = aiTextureType_SPECULAR;
528 }
529 else if (unitNameLower.find("lightmap") != string::npos)
530 {
531 textureType = aiTextureType_LIGHTMAP;
532 }
533 else if (unitNameLower.find("displacementmap") != string::npos)
534 {
535 textureType = aiTextureType_DISPLACEMENT;
536 }
537 else
538 {
539 textureType = aiTextureType_DIFFUSE;
540 }
541 }
542 }
543 else if (linePart == partTextCoordSet)
544 {
545 ss >> uvCoord;
546 }
547 /// @todo Implement
548 else if(linePart == partColorOp)
549 {
550 /*
551 ss >> linePart;
552 if("replace"==linePart)//I don't think, assimp has something for this...
553 {
554 }
555 else if("modulate"==linePart)
556 {
557 //TODO: set value
558 //material->AddProperty(aiTextureOp_Multiply)
559 }
560 */
561 }
562 }
563
564 if (textureRef.empty())
565 {
566 DefaultLogger::get()->warn("Texture reference is empty, ignoring texture_unit.");
567 return false;
568 }
569 if (textureType == aiTextureType_NONE)
570 {
571 DefaultLogger::get()->warn("Failed to detect texture type for '" + textureRef + "', ignoring texture_unit.");
572 return false;
573 }
574
575 unsigned int textureTypeIndex = m_textures[textureType];
576 m_textures[textureType]++;
577
578 DefaultLogger::get()->debug(Formatter::format() << " texture '" << textureRef << "' type " << textureType
579 << " index " << textureTypeIndex << " UV " << uvCoord);
580
581 aiString assimpTextureRef(textureRef);
582 material->AddProperty(&assimpTextureRef, AI_MATKEY_TEXTURE(textureType, textureTypeIndex));
583 material->AddProperty(&uvCoord, 1, AI_MATKEY_UVWSRC(textureType, textureTypeIndex));
584
585 return true;
586 }
587
588 } // Ogre
589 } // Assimp
590
591 #endif // ASSIMP_BUILD_NO_OGRE_IMPORTER
+0
-517
code/OgreMesh.cpp less more
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 #include "AssimpPCH.h"
41
42 #ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER
43
44 #include "OgreImporter.hpp"
45 #include "TinyFormatter.h"
46
47 using namespace std;
48
49 namespace Assimp
50 {
51 namespace Ogre
52 {
53
54
55 void OgreImporter::ReadSubMesh(SubMesh &theSubMesh, XmlReader *Reader)
56 {
57 if(Reader->getAttributeValue("usesharedvertices"))
58 theSubMesh.SharedData=GetAttribute<bool>(Reader, "usesharedvertices");
59
60 XmlRead(Reader);
61 //TODO: maybe we have alsways just 1 faces and 1 geometry and always in this order. this loop will only work correct, when the order
62 //of faces and geometry changed, and not if we have more than one of one
63 while( Reader->getNodeName()==string("faces")
64 || Reader->getNodeName()==string("geometry")
65 || Reader->getNodeName()==string("boneassignments"))
66 {
67 if(string(Reader->getNodeName())=="faces")//Read the face list
68 {
69 //some info logging:
70 unsigned int NumFaces=GetAttribute<int>(Reader, "count");
71 ostringstream ss; ss <<"Submesh has " << NumFaces << " Faces.";
72 DefaultLogger::get()->debug(ss.str());
73
74 while(XmlRead(Reader) && Reader->getNodeName()==string("face"))
75 {
76 Face NewFace;
77 NewFace.VertexIndices[0]=GetAttribute<int>(Reader, "v1");
78 NewFace.VertexIndices[1]=GetAttribute<int>(Reader, "v2");
79 NewFace.VertexIndices[2]=GetAttribute<int>(Reader, "v3");
80 if(Reader->getAttributeValue("v4"))//this should be supported in the future
81 {
82 DefaultLogger::get()->warn("Submesh has quads, only traingles are supported!");
83 //throw DeadlyImportError("Submesh has quads, only traingles are supported!");
84 }
85 theSubMesh.FaceList.push_back(NewFace);
86 }
87
88 }//end of faces
89 else if(string(Reader->getNodeName())=="geometry")//Read the vertexdata
90 {
91 //some info logging:
92 unsigned int NumVertices=GetAttribute<int>(Reader, "vertexcount");
93 ostringstream ss; ss<<"VertexCount: " << NumVertices;
94 DefaultLogger::get()->debug(ss.str());
95
96 //General Informations about vertices
97 XmlRead(Reader);
98 while(Reader->getNodeName()==string("vertexbuffer"))
99 {
100 ReadVertexBuffer(theSubMesh, Reader, NumVertices);
101 }
102
103 //some error checking on the loaded data
104 if(!theSubMesh.HasPositions)
105 throw DeadlyImportError("No positions could be loaded!");
106
107 if(theSubMesh.HasNormals && theSubMesh.Normals.size() != NumVertices)
108 throw DeadlyImportError("Wrong Number of Normals loaded!");
109
110 if(theSubMesh.HasTangents && theSubMesh.Tangents.size() != NumVertices)
111 throw DeadlyImportError("Wrong Number of Tangents loaded!");
112
113 for(unsigned int i=0; i<theSubMesh.Uvs.size(); ++i)
114 {
115 if(theSubMesh.Uvs[i].size() != NumVertices)
116 throw DeadlyImportError("Wrong Number of Uvs loaded!");
117 }
118
119 }//end of "geometry
120
121
122 else if(Reader->getNodeName()==string("boneassignments"))
123 {
124 ReadBoneWeights(theSubMesh, Reader);
125 }
126 }
127 DefaultLogger::get()->debug((Formatter::format(),
128 "Positionen: ",theSubMesh.Positions.size(),
129 " Normale: ",theSubMesh.Normals.size(),
130 " TexCoords: ",theSubMesh.Uvs.size(),
131 " Tantents: ",theSubMesh.Tangents.size()
132 ));
133 DefaultLogger::get()->warn(Reader->getNodeName());
134 }
135
136
137 void OgreImporter::ReadVertexBuffer(SubMesh &theSubMesh, XmlReader *Reader, unsigned int NumVertices)
138 {
139 DefaultLogger::get()->debug("new Vertex Buffer");
140
141 bool ReadPositions=false;
142 bool ReadNormals=false;
143 bool ReadTangents=false;
144 unsigned int NumUvs=0;
145
146 //-------------------- check, what we need to read: --------------------------------
147 if(Reader->getAttributeValue("positions") && GetAttribute<bool>(Reader, "positions"))
148 {
149 ReadPositions=theSubMesh.HasPositions=true;
150 theSubMesh.Positions.reserve(NumVertices);
151 DefaultLogger::get()->debug("reading positions");
152 }
153 if(Reader->getAttributeValue("normals") && GetAttribute<bool>(Reader, "normals"))
154 {
155 ReadNormals=theSubMesh.HasNormals=true;
156 theSubMesh.Normals.reserve(NumVertices);
157 DefaultLogger::get()->debug("reading normals");
158 }
159 if(Reader->getAttributeValue("tangents") && GetAttribute<bool>(Reader, "tangents"))
160 {
161 ReadTangents=theSubMesh.HasTangents=true;
162 theSubMesh.Tangents.reserve(NumVertices);
163 DefaultLogger::get()->debug("reading tangents");
164 }
165
166 if(Reader->getAttributeValue("texture_coords"))
167 {
168 NumUvs=GetAttribute<unsigned int>(Reader, "texture_coords");
169 theSubMesh.Uvs.resize(NumUvs);
170 for(unsigned int i=0; i<theSubMesh.Uvs.size(); ++i) theSubMesh.Uvs[i].reserve(NumVertices);
171 DefaultLogger::get()->debug("reading texture coords");
172 }
173 //___________________________________________________________________
174
175
176 //check if we will load anything
177 if(!( ReadPositions || ReadNormals || ReadTangents || (NumUvs>0) ))
178 DefaultLogger::get()->warn("vertexbuffer seams to be empty!");
179
180
181 //read all the vertices:
182 XmlRead(Reader);
183
184 /*it might happen, that we have more than one attribute per vertex (they are not splitted to different buffers)
185 so the break condition is a bit tricky (well, IrrXML just sucks :( )*/
186 while(Reader->getNodeName()==string("vertex")
187 ||Reader->getNodeName()==string("position")
188 ||Reader->getNodeName()==string("normal")
189 ||Reader->getNodeName()==string("tangent")
190 ||Reader->getNodeName()==string("texcoord")
191 ||Reader->getNodeName()==string("colour_diffuse"))
192 {
193 if(Reader->getNodeName()==string("vertex"))
194 XmlRead(Reader);//Read an attribute tag
195
196 //Position
197 if(ReadPositions && Reader->getNodeName()==string("position"))
198 {
199 aiVector3D NewPos;
200 NewPos.x=GetAttribute<float>(Reader, "x");
201 NewPos.y=GetAttribute<float>(Reader, "y");
202 NewPos.z=GetAttribute<float>(Reader, "z");
203 theSubMesh.Positions.push_back(NewPos);
204 }
205
206 //Normal
207 else if(ReadNormals && Reader->getNodeName()==string("normal"))
208 {
209 aiVector3D NewNormal;
210 NewNormal.x=GetAttribute<float>(Reader, "x");
211 NewNormal.y=GetAttribute<float>(Reader, "y");
212 NewNormal.z=GetAttribute<float>(Reader, "z");
213 theSubMesh.Normals.push_back(NewNormal);
214 }
215
216 //Tangent
217 else if(ReadTangents && Reader->getNodeName()==string("tangent"))
218 {
219 aiVector3D NewTangent;
220 NewTangent.x=GetAttribute<float>(Reader, "x");
221 NewTangent.y=GetAttribute<float>(Reader, "y");
222 NewTangent.z=GetAttribute<float>(Reader, "z");
223 theSubMesh.Tangents.push_back(NewTangent);
224 }
225
226 //Uv:
227 else if(NumUvs>0 && Reader->getNodeName()==string("texcoord"))
228 {
229 for(unsigned int i=0; i<NumUvs; ++i)
230 {
231 if(Reader->getNodeName()!=string("texcoord"))
232 {
233 DefaultLogger::get()->warn(string("Not enough UVs in Vertex: ")+Reader->getNodeName());
234 }
235 aiVector3D NewUv;
236 NewUv.x=GetAttribute<float>(Reader, "u");
237 NewUv.y=GetAttribute<float>(Reader, "v")*(-1)+1;//flip the uv vertikal, blender exports them so!
238 theSubMesh.Uvs[i].push_back(NewUv);
239 XmlRead(Reader);
240 }
241 continue;//because we already read the next node...
242 }
243
244 //Color:
245 //TODO: actually save this data!
246 else if(Reader->getNodeName()==string("colour_diffuse"))
247 {
248 //do nothing, because we not yet support them
249 }
250
251 //Attribute could not be read
252 else
253 {
254 DefaultLogger::get()->warn(string("Attribute was not read: ")+Reader->getNodeName());
255 }
256
257 XmlRead(Reader);//Read the Vertex tag
258 }
259 }
260
261
262 void OgreImporter::ReadBoneWeights(SubMesh &theSubMesh, XmlReader *Reader)
263 {
264 theSubMesh.Weights.resize(theSubMesh.Positions.size());
265 while(XmlRead(Reader) && Reader->getNodeName()==string("vertexboneassignment"))
266 {
267 Weight NewWeight;
268 unsigned int VertexId=GetAttribute<int>(Reader, "vertexindex");
269 NewWeight.BoneId=GetAttribute<int>(Reader, "boneindex");
270 NewWeight.Value=GetAttribute<float>(Reader, "weight");
271 //calculate the number of bones used (this is the highest id +1 becuase bone ids start at 0)
272 theSubMesh.BonesUsed=max(theSubMesh.BonesUsed, NewWeight.BoneId+1);
273
274 theSubMesh.Weights[VertexId].push_back(NewWeight);
275 }
276 }
277
278
279
280 void OgreImporter::ProcessSubMesh(SubMesh &theSubMesh, SubMesh &theSharedGeometry)
281 {
282 //---------------Make all Vertexes unique: (this is required by assimp)-----------------------
283 vector<Face> UniqueFaceList(theSubMesh.FaceList.size());
284 unsigned int UniqueVertexCount=theSubMesh.FaceList.size()*3;//*3 because each face consists of 3 vertexes, because we only support triangles^^
285
286 vector<aiVector3D> UniquePositions(UniqueVertexCount);
287
288 vector<aiVector3D> UniqueNormals(UniqueVertexCount);
289
290 vector<aiVector3D> UniqueTangents(UniqueVertexCount);
291
292 vector< vector<Weight> > UniqueWeights(UniqueVertexCount);
293
294 vector< vector<aiVector3D> > UniqueUvs(theSubMesh.Uvs.size());
295 for(unsigned int i=0; i<UniqueUvs.size(); ++i) UniqueUvs[i].resize(UniqueVertexCount);
296
297
298
299 //Support for shared data:
300 /*We can use this loop to copy vertex informations from the shared data pool. In order to do so
301 we just use a reference to a submodel instead of our submodel itself*/
302
303 SubMesh& VertexSource= theSubMesh.SharedData ? theSharedGeometry : theSubMesh;
304 if(theSubMesh.SharedData)//copy vertexinformations to our mesh:
305 {
306 theSubMesh.HasPositions=theSharedGeometry.HasPositions;
307 theSubMesh.HasNormals=theSharedGeometry.HasNormals;
308 theSubMesh.HasTangents=theSharedGeometry.HasTangents;
309
310 theSubMesh.BonesUsed=theSharedGeometry.BonesUsed;
311
312 UniqueUvs.resize(theSharedGeometry.Uvs.size());
313 for(unsigned int i=0; i<UniqueUvs.size(); ++i) UniqueUvs[i].resize(UniqueVertexCount);
314 }
315
316 for(unsigned int i=0; i<theSubMesh.FaceList.size(); ++i)
317 {
318 //We precalculate the index vlaues her, because we need them in all vertex attributes
319 unsigned int Vertex1=theSubMesh.FaceList[i].VertexIndices[0];
320 unsigned int Vertex2=theSubMesh.FaceList[i].VertexIndices[1];
321 unsigned int Vertex3=theSubMesh.FaceList[i].VertexIndices[2];
322
323 UniquePositions[3*i+0]=VertexSource.Positions[Vertex1];
324 UniquePositions[3*i+1]=VertexSource.Positions[Vertex2];
325 UniquePositions[3*i+2]=VertexSource.Positions[Vertex3];
326
327 if(VertexSource.HasNormals)
328 {
329 UniqueNormals[3*i+0]=VertexSource.Normals[Vertex1];
330 UniqueNormals[3*i+1]=VertexSource.Normals[Vertex2];
331 UniqueNormals[3*i+2]=VertexSource.Normals[Vertex3];
332 }
333
334 if(VertexSource.HasTangents)
335 {
336 UniqueTangents[3*i+0]=VertexSource.Tangents[Vertex1];
337 UniqueTangents[3*i+1]=VertexSource.Tangents[Vertex2];
338 UniqueTangents[3*i+2]=VertexSource.Tangents[Vertex3];
339 }
340
341 if(UniqueUvs.size()>0)
342 {
343 for(unsigned int j=0; j<UniqueUvs.size(); ++j)
344 {
345 UniqueUvs[j][3*i+0]=VertexSource.Uvs[j][Vertex1];
346 UniqueUvs[j][3*i+1]=VertexSource.Uvs[j][Vertex2];
347 UniqueUvs[j][3*i+2]=VertexSource.Uvs[j][Vertex3];
348 }
349 }
350
351 if(VertexSource.Weights.size() > 0)
352 {
353 UniqueWeights[3*i+0]=VertexSource.Weights[Vertex1];
354 UniqueWeights[3*i+1]=VertexSource.Weights[Vertex2];
355 UniqueWeights[3*i+2]=VertexSource.Weights[Vertex3];
356 }
357
358 //The indexvalues a just continuous numbers (0, 1, 2, 3, 4, 5, 6...)
359 UniqueFaceList[i].VertexIndices[0]=3*i+0;
360 UniqueFaceList[i].VertexIndices[1]=3*i+1;
361 UniqueFaceList[i].VertexIndices[2]=3*i+2;
362 }
363 //_________________________________________________________________________________________
364
365 //now we have the unique datas, but want them in the SubMesh, so we swap all the containers:
366 //if we don't have one of them, we just swap empty containers, so everything is ok
367 theSubMesh.FaceList.swap(UniqueFaceList);
368 theSubMesh.Positions.swap(UniquePositions);
369 theSubMesh.Normals.swap(UniqueNormals);
370 theSubMesh.Tangents.swap(UniqueTangents);
371 theSubMesh.Uvs.swap(UniqueUvs);
372 theSubMesh.Weights.swap(UniqueWeights);
373
374
375
376 //------------- normalize weights -----------------------------
377 //The Blender exporter doesn't care about whether the sum of all boneweights for a single vertex equals 1 or not,
378 //so we have to make this sure:
379 for(unsigned int VertexId=0; VertexId<theSubMesh.Weights.size(); ++VertexId)//iterate over all vertices
380 {
381 float WeightSum=0.0f;
382 for(unsigned int BoneId=0; BoneId<theSubMesh.Weights[VertexId].size(); ++BoneId)//iterate over all bones
383 {
384 WeightSum+=theSubMesh.Weights[VertexId][BoneId].Value;
385 }
386
387 //check if the sum is too far away from 1
388 if(WeightSum<1.0f-0.05f || WeightSum>1.0f+0.05f)
389 {
390 //normalize all weights:
391 for(unsigned int BoneId=0; BoneId<theSubMesh.Weights[VertexId].size(); ++BoneId)//iterate over all bones
392 {
393 theSubMesh.Weights[VertexId][BoneId].Value/=WeightSum;
394 }
395 }
396 }
397 //_________________________________________________________
398 }
399
400
401
402
403 aiMesh* OgreImporter::CreateAssimpSubMesh(const SubMesh& theSubMesh, const vector<Bone>& Bones) const
404 {
405 const aiScene* const m_CurrentScene=this->m_CurrentScene;//make sure, that we can access but not change the scene
406 (void)m_CurrentScene;
407
408 aiMesh* NewAiMesh=new aiMesh();
409
410 //Positions
411 NewAiMesh->mVertices=new aiVector3D[theSubMesh.Positions.size()];
412 memcpy(NewAiMesh->mVertices, &theSubMesh.Positions[0], theSubMesh.Positions.size()*sizeof(aiVector3D));
413 NewAiMesh->mNumVertices=theSubMesh.Positions.size();
414
415 //Normals
416 if(theSubMesh.HasNormals)
417 {
418 NewAiMesh->mNormals=new aiVector3D[theSubMesh.Normals.size()];
419 memcpy(NewAiMesh->mNormals, &theSubMesh.Normals[0], theSubMesh.Normals.size()*sizeof(aiVector3D));
420 }
421
422
423 //until we have support for bitangents, no tangents will be written
424 /*
425 //Tangents
426 if(theSubMesh.HasTangents)
427 {
428 NewAiMesh->mTangents=new aiVector3D[theSubMesh.Tangents.size()];
429 memcpy(NewAiMesh->mTangents, &theSubMesh.Tangents[0], theSubMesh.Tangents.size()*sizeof(aiVector3D));
430 }
431 */
432
433 //Uvs
434 if(theSubMesh.Uvs.size()>0)
435 {
436 for(unsigned int i=0; i<theSubMesh.Uvs.size(); ++i)
437 {
438 NewAiMesh->mNumUVComponents[i]=2;
439 NewAiMesh->mTextureCoords[i]=new aiVector3D[theSubMesh.Uvs[i].size()];
440 memcpy(NewAiMesh->mTextureCoords[i], &(theSubMesh.Uvs[i][0]), theSubMesh.Uvs[i].size()*sizeof(aiVector3D));
441 }
442 }
443
444
445 //---------------------------------------- Bones --------------------------------------------
446
447 //Copy the weights in in Bone-Vertices Struktur
448 //(we have them in a Vertex-Bones Structur, this is much easier for making them unique, which is required by assimp
449 vector< vector<aiVertexWeight> > aiWeights(theSubMesh.BonesUsed);//now the outer list are the bones, and the inner vector the vertices
450 for(unsigned int VertexId=0; VertexId<theSubMesh.Weights.size(); ++VertexId)//iterate over all vertices
451 {
452 for(unsigned int BoneId=0; BoneId<theSubMesh.Weights[VertexId].size(); ++BoneId)//iterate over all bones
453 {
454 aiVertexWeight NewWeight;
455 NewWeight.mVertexId=VertexId;//the current Vertex, we can't use the Id form the submehs weights, because they are bone id's
456 NewWeight.mWeight=theSubMesh.Weights[VertexId][BoneId].Value;
457 aiWeights[theSubMesh.Weights[VertexId][BoneId].BoneId].push_back(NewWeight);
458 }
459 }
460
461
462
463 vector<aiBone*> aiBones;
464 aiBones.reserve(theSubMesh.BonesUsed);//the vector might be smaller, because there might be empty bones (bones that are not attached to any vertex)
465
466 //create all the bones and fill them with informations
467 for(unsigned int i=0; i<theSubMesh.BonesUsed; ++i)
468 {
469 if(aiWeights[i].size()>0)
470 {
471 aiBone* NewBone=new aiBone();
472 NewBone->mNumWeights=aiWeights[i].size();
473 NewBone->mWeights=new aiVertexWeight[aiWeights[i].size()];
474 memcpy(NewBone->mWeights, &(aiWeights[i][0]), sizeof(aiVertexWeight)*aiWeights[i].size());
475 NewBone->mName=Bones[i].Name;//The bone list should be sorted after its id's, this was done in LoadSkeleton
476 NewBone->mOffsetMatrix=Bones[i].BoneToWorldSpace;
477
478 aiBones.push_back(NewBone);
479 }
480 }
481 NewAiMesh->mNumBones=aiBones.size();
482
483 // mBones must be NULL if mNumBones is non 0 or the validation fails.
484 if (aiBones.size()) {
485 NewAiMesh->mBones=new aiBone* [aiBones.size()];
486 memcpy(NewAiMesh->mBones, &(aiBones[0]), aiBones.size()*sizeof(aiBone*));
487 }
488
489 //______________________________________________________________________________________________________
490
491
492
493 //Faces
494 NewAiMesh->mFaces=new aiFace[theSubMesh.FaceList.size()];
495 for(unsigned int i=0; i<theSubMesh.FaceList.size(); ++i)
496 {
497 NewAiMesh->mFaces[i].mNumIndices=3;
498 NewAiMesh->mFaces[i].mIndices=new unsigned int[3];
499
500 NewAiMesh->mFaces[i].mIndices[0]=theSubMesh.FaceList[i].VertexIndices[0];
501 NewAiMesh->mFaces[i].mIndices[1]=theSubMesh.FaceList[i].VertexIndices[1];
502 NewAiMesh->mFaces[i].mIndices[2]=theSubMesh.FaceList[i].VertexIndices[2];
503 }
504 NewAiMesh->mNumFaces=theSubMesh.FaceList.size();
505
506 //Link the material:
507 NewAiMesh->mMaterialIndex=theSubMesh.MaterialIndex;//the index is set by the function who called ReadSubMesh
508
509 return NewAiMesh;
510 }
511
512
513 }//namespace Ogre
514 }//namespace Assimp
515
516 #endif // !! ASSIMP_BUILD_NO_OGRE_IMPORTER
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 #ifndef AI_OGREPARSINGUTILS_H_INC
41 #define AI_OGREPARSINGUTILS_H_INC
42
43 #ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER
44
45 #include "ParsingUtils.h"
46 #include <functional>
47
48 namespace Assimp
49 {
50 namespace Ogre
51 {
52
53 /// Returns a lower cased copy of @s.
54 static inline std::string ToLower(std::string s)
55 {
56 std::transform(s.begin(), s.end(), s.begin(), ::tolower);
57 return s;
58 }
59
60 /// Returns if @c s ends with @c suffix. If @c caseSensitive is false, both strings will be lower cased before matching.
61 static inline bool EndsWith(const std::string &s, const std::string &suffix, bool caseSensitive = true)
62 {
63 if (s.empty() || suffix.empty())
64 {
65 return false;
66 }
67 else if (s.length() < suffix.length())
68 {
69 return false;
70 }
71
72 if (!caseSensitive) {
73 return EndsWith(ToLower(s), ToLower(suffix), true);
74 }
75
76 size_t len = suffix.length();
77 std::string sSuffix = s.substr(s.length()-len, len);
78 return (ASSIMP_stricmp(sSuffix, suffix) == 0);
79 }
80
81 // Below trim functions adapted from http://stackoverflow.com/questions/216823/whats-the-best-way-to-trim-stdstring
82
83 /// Trim from start
84 static inline std::string &TrimLeft(std::string &s, bool newlines = true)
85 {
86 if (!newlines)
87 {
88 s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun(Assimp::IsSpace<char>))));
89 }
90 else
91 {
92 s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun(Assimp::IsSpaceOrNewLine<char>))));
93 }
94 return s;
95 }
96
97 /// Trim from end
98 static inline std::string &TrimRight(std::string &s, bool newlines = true)
99 {
100 if (!newlines)
101 {
102 s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::ptr_fun(Assimp::IsSpace<char>))).base(),s.end());
103 }
104 else
105 {
106 s.erase(s.begin(), std::find_if(s.begin(), s.end(), std::not1(std::ptr_fun(Assimp::IsSpaceOrNewLine<char>))));
107 }
108 return s;
109 }
110
111 /// Trim from both ends
112 static inline std::string &Trim(std::string &s, bool newlines = true)
113 {
114 return TrimLeft(TrimRight(s, newlines), newlines);
115 }
116
117 /// Skips a line from current @ss position until a newline. Returns the skipped part.
118 static inline std::string SkipLine(std::stringstream &ss)
119 {
120 std::string skipped;
121 getline(ss, skipped);
122 return skipped;
123 }
124
125 /// Skips a line and reads next element from @c ss to @c nextElement.
126 /** @return Skipped line content until newline. */
127 static inline std::string NextAfterNewLine(std::stringstream &ss, std::string &nextElement)
128 {
129 std::string skipped = SkipLine(ss);
130 ss >> nextElement;
131 return skipped;
132 }
133
134 } // Ogre
135 } // Assimp
136
137 #endif // ASSIMP_BUILD_NO_OGRE_IMPORTER
138 #endif // AI_OGREPARSINGUTILS_H_INC
+0
-453
code/OgreSkeleton.cpp less more
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 #include "AssimpPCH.h"
41
42 #ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER
43
44 #include "OgreImporter.hpp"
45 #include "TinyFormatter.h"
46
47 using namespace std;
48
49 namespace Assimp
50 {
51 namespace Ogre
52 {
53
54
55
56 void OgreImporter::LoadSkeleton(std::string FileName, vector<Bone> &Bones, vector<Animation> &Animations) const
57 {
58 const aiScene* const m_CurrentScene=this->m_CurrentScene;//make sure, that we can access but not change the scene
59 (void)m_CurrentScene;
60
61
62 //most likely the skeleton file will only end with .skeleton
63 //But this is a xml reader, so we need: .skeleton.xml
64 FileName+=".xml";
65
66 DefaultLogger::get()->debug(string("Loading Skeleton: ")+FileName);
67
68 //Open the File:
69 boost::scoped_ptr<IOStream> File(m_CurrentIOHandler->Open(FileName));
70 if(NULL==File.get())
71 throw DeadlyImportError("Failed to open skeleton file "+FileName+".");
72
73 //Read the Mesh File:
74 boost::scoped_ptr<CIrrXML_IOStreamReader> mIOWrapper(new CIrrXML_IOStreamReader(File.get()));
75 XmlReader* SkeletonFile = irr::io::createIrrXMLReader(mIOWrapper.get());
76 if(!SkeletonFile)
77 throw DeadlyImportError(string("Failed to create XML Reader for ")+FileName);
78
79 //Quick note: Whoever read this should know this one thing: irrXml fucking sucks!!!
80
81 XmlRead(SkeletonFile);
82 if(string("skeleton")!=SkeletonFile->getNodeName())
83 throw DeadlyImportError("No <skeleton> node in SkeletonFile: "+FileName);
84
85
86
87 //------------------------------------load bones-----------------------------------------
88 XmlRead(SkeletonFile);
89 if(string("bones")!=SkeletonFile->getNodeName())
90 throw DeadlyImportError("No bones node in skeleton "+FileName);
91
92 XmlRead(SkeletonFile);
93
94 while(string("bone")==SkeletonFile->getNodeName())
95 {
96 //TODO: Maybe we can have bone ids for the errrors, but normaly, they should never appear, so what....
97
98 //read a new bone:
99 Bone NewBone;
100 NewBone.Id=GetAttribute<int>(SkeletonFile, "id");
101 NewBone.Name=GetAttribute<string>(SkeletonFile, "name");
102
103 //load the position:
104 XmlRead(SkeletonFile);
105 if(string("position")!=SkeletonFile->getNodeName())
106 throw DeadlyImportError("Position is not first node in Bone!");
107 NewBone.Position.x=GetAttribute<float>(SkeletonFile, "x");
108 NewBone.Position.y=GetAttribute<float>(SkeletonFile, "y");
109 NewBone.Position.z=GetAttribute<float>(SkeletonFile, "z");
110
111 //Rotation:
112 XmlRead(SkeletonFile);
113 if(string("rotation")!=SkeletonFile->getNodeName())
114 throw DeadlyImportError("Rotation is not the second node in Bone!");
115 NewBone.RotationAngle=GetAttribute<float>(SkeletonFile, "angle");
116 XmlRead(SkeletonFile);
117 if(string("axis")!=SkeletonFile->getNodeName())
118 throw DeadlyImportError("No axis specified for bone rotation!");
119 NewBone.RotationAxis.x=GetAttribute<float>(SkeletonFile, "x");
120 NewBone.RotationAxis.y=GetAttribute<float>(SkeletonFile, "y");
121 NewBone.RotationAxis.z=GetAttribute<float>(SkeletonFile, "z");
122
123 //append the newly loaded bone to the bone list
124 Bones.push_back(NewBone);
125
126 //Proceed to the next bone:
127 XmlRead(SkeletonFile);
128 }
129 //The bones in the file a not neccesarly ordered by there id's so we do it now:
130 std::sort(Bones.begin(), Bones.end());
131
132 //now the id of each bone should be equal to its position in the vector:
133 //so we do a simple check:
134 {
135 bool IdsOk=true;
136 for(int i=0; i<static_cast<signed int>(Bones.size()); ++i)//i is signed, because all Id's are also signed!
137 {
138 if(Bones[i].Id!=i)
139 IdsOk=false;
140 }
141 if(!IdsOk)
142 throw DeadlyImportError("Bone Ids are not valid!"+FileName);
143 }
144 DefaultLogger::get()->debug((Formatter::format(),"Number of bones: ",Bones.size()));
145 //________________________________________________________________________________
146
147
148
149
150
151
152 //----------------------------load bonehierarchy--------------------------------
153 if(string("bonehierarchy")!=SkeletonFile->getNodeName())
154 throw DeadlyImportError("no bonehierarchy node in "+FileName);
155
156 DefaultLogger::get()->debug("loading bonehierarchy...");
157 XmlRead(SkeletonFile);
158 while(string("boneparent")==SkeletonFile->getNodeName())
159 {
160 string Child, Parent;
161 Child=GetAttribute<string>(SkeletonFile, "bone");
162 Parent=GetAttribute<string>(SkeletonFile, "parent");
163
164 unsigned int ChildId, ParentId;
165 ChildId=find(Bones.begin(), Bones.end(), Child)->Id;
166 ParentId=find(Bones.begin(), Bones.end(), Parent)->Id;
167
168 Bones[ChildId].ParentId=ParentId;
169 Bones[ParentId].Children.push_back(ChildId);
170
171 XmlRead(SkeletonFile);//I once forget this line, which led to an endless loop, did i mentioned, that irrxml sucks??
172 }
173 //_____________________________________________________________________________
174
175
176 //--------- Calculate the WorldToBoneSpace Matrix recursivly for all bones: ------------------
177 BOOST_FOREACH(Bone &theBone, Bones)
178 {
179 if(-1==theBone.ParentId) //the bone is a root bone
180 {
181 theBone.CalculateBoneToWorldSpaceMatrix(Bones);
182 }
183 }
184 //_______________________________________________________________________
185
186
187 //---------------------------load animations-----------------------------
188 if(string("animations")==SkeletonFile->getNodeName())//animations are optional values
189 {
190 DefaultLogger::get()->debug("Loading Animations");
191 XmlRead(SkeletonFile);
192 while(string("animation")==SkeletonFile->getNodeName())
193 {
194 Animation NewAnimation;
195 NewAnimation.Name=GetAttribute<string>(SkeletonFile, "name");
196 NewAnimation.Length=GetAttribute<float>(SkeletonFile, "length");
197
198 //Load all Tracks
199 XmlRead(SkeletonFile);
200 if(string("tracks")!=SkeletonFile->getNodeName())
201 throw DeadlyImportError("no tracks node in animation");
202 XmlRead(SkeletonFile);
203 while(string("track")==SkeletonFile->getNodeName())
204 {
205 Track NewTrack;
206 NewTrack.BoneName=GetAttribute<string>(SkeletonFile, "bone");
207
208 //Load all keyframes;
209 XmlRead(SkeletonFile);
210 if(string("keyframes")!=SkeletonFile->getNodeName())
211 throw DeadlyImportError("no keyframes node!");
212 XmlRead(SkeletonFile);
213 while(string("keyframe")==SkeletonFile->getNodeName())
214 {
215 Keyframe NewKeyframe;
216 NewKeyframe.Time=GetAttribute<float>(SkeletonFile, "time");
217
218 //loop over the attributes:
219
220 while(true) //will quit, if a Node is not a animationkey
221 {
222 XmlRead(SkeletonFile);
223
224 //If any property doesn't show up, it will keep its initialization value
225
226 //Position:
227 if(string("translate")==SkeletonFile->getNodeName())
228 {
229 NewKeyframe.Position.x=GetAttribute<float>(SkeletonFile, "x");
230 NewKeyframe.Position.y=GetAttribute<float>(SkeletonFile, "y");
231 NewKeyframe.Position.z=GetAttribute<float>(SkeletonFile, "z");
232 }
233
234 //Rotation:
235 else if(string("rotate")==SkeletonFile->getNodeName())
236 {
237 float RotationAngle=GetAttribute<float>(SkeletonFile, "angle");
238 aiVector3D RotationAxis;
239 XmlRead(SkeletonFile);
240 if(string("axis")!=SkeletonFile->getNodeName())
241 throw DeadlyImportError("No axis for keyframe rotation!");
242 RotationAxis.x=GetAttribute<float>(SkeletonFile, "x");
243 RotationAxis.y=GetAttribute<float>(SkeletonFile, "y");
244 RotationAxis.z=GetAttribute<float>(SkeletonFile, "z");
245
246 if(0==RotationAxis.x && 0==RotationAxis.y && 0==RotationAxis.z)//we have an invalid rotation axis
247 {
248 RotationAxis.x=1.0f;
249 if(0!=RotationAngle)//if we don't rotate at all, the axis does not matter
250 {
251 DefaultLogger::get()->warn("Invalid Rotation Axis in Keyframe!");
252 }
253 }
254 NewKeyframe.Rotation=aiQuaternion(RotationAxis, RotationAngle);
255 }
256
257 //Scaling:
258 else if(string("scale")==SkeletonFile->getNodeName())
259 {
260 NewKeyframe.Scaling.x=GetAttribute<float>(SkeletonFile, "x");
261 NewKeyframe.Scaling.y=GetAttribute<float>(SkeletonFile, "y");
262 NewKeyframe.Scaling.z=GetAttribute<float>(SkeletonFile, "z");
263 }
264
265 //we suppose, that we read all attributes and this is a new keyframe or the end of the animation
266 else
267 break;
268 }
269
270 NewTrack.Keyframes.push_back(NewKeyframe);
271 }
272
273 NewAnimation.Tracks.push_back(NewTrack);
274 }
275
276 Animations.push_back(NewAnimation);
277 }
278 }
279 //_____________________________________________________________________________
280
281 }
282
283
284 void OgreImporter::CreateAssimpSkeleton(const std::vector<Bone> &Bones, const std::vector<Animation> &/*Animations*/)
285 {
286 if(!m_CurrentScene->mRootNode)
287 throw DeadlyImportError("No root node exists!!");
288 if(0!=m_CurrentScene->mRootNode->mNumChildren)
289 throw DeadlyImportError("Root Node already has childnodes!");
290
291
292 //Createt the assimp bone hierarchy
293 vector<aiNode*> RootBoneNodes;
294 BOOST_FOREACH(const Bone &theBone, Bones)
295 {
296 if(-1==theBone.ParentId) //the bone is a root bone
297 {
298 //which will recursily add all other nodes
299 RootBoneNodes.push_back(CreateAiNodeFromBone(theBone.Id, Bones, m_CurrentScene->mRootNode));
300 }
301 }
302
303 if(RootBoneNodes.size() > 0)
304 {
305 m_CurrentScene->mRootNode->mNumChildren=RootBoneNodes.size();
306 m_CurrentScene->mRootNode->mChildren=new aiNode*[RootBoneNodes.size()];
307 memcpy(m_CurrentScene->mRootNode->mChildren, &RootBoneNodes[0], sizeof(aiNode*)*RootBoneNodes.size());
308 }
309 }
310
311
312 void OgreImporter::PutAnimationsInScene(const std::vector<Bone> &Bones, const std::vector<Animation> &Animations)
313 {
314 //-----------------Create the Assimp Animations --------------------
315 if(Animations.size()>0)//Maybe the model had only a skeleton and no animations. (If it also has no skeleton, this function would'nt have been called
316 {
317 m_CurrentScene->mNumAnimations=Animations.size();
318 m_CurrentScene->mAnimations=new aiAnimation*[Animations.size()];
319 for(unsigned int i=0; i<Animations.size(); ++i)//create all animations
320 {
321 aiAnimation* NewAnimation=new aiAnimation();
322 NewAnimation->mName=Animations[i].Name;
323 NewAnimation->mDuration=Animations[i].Length;
324 NewAnimation->mTicksPerSecond=1.0f;
325
326 //Create all tracks in this animation
327 NewAnimation->mNumChannels=Animations[i].Tracks.size();
328 NewAnimation->mChannels=new aiNodeAnim*[Animations[i].Tracks.size()];
329 for(unsigned int j=0; j<Animations[i].Tracks.size(); ++j)
330 {
331 aiNodeAnim* NewNodeAnim=new aiNodeAnim();
332 NewNodeAnim->mNodeName=Animations[i].Tracks[j].BoneName;
333
334 //we need this, to acces the bones default pose, which we need to make keys absolute to the default bone pose
335 vector<Bone>::const_iterator CurBone=find(Bones.begin(), Bones.end(), NewNodeAnim->mNodeName);
336 aiMatrix4x4 t0, t1;
337 aiMatrix4x4 DefBonePose=aiMatrix4x4::Translation(CurBone->Position, t1)
338 * aiMatrix4x4::Rotation(CurBone->RotationAngle, CurBone->RotationAxis, t0);
339
340
341 //Create the keyframe arrays...
342 unsigned int KeyframeCount=Animations[i].Tracks[j].Keyframes.size();
343 NewNodeAnim->mNumPositionKeys=KeyframeCount;
344 NewNodeAnim->mNumRotationKeys=KeyframeCount;
345 NewNodeAnim->mNumScalingKeys =KeyframeCount;
346 NewNodeAnim->mPositionKeys=new aiVectorKey[KeyframeCount];
347 NewNodeAnim->mRotationKeys=new aiQuatKey[KeyframeCount];
348 NewNodeAnim->mScalingKeys =new aiVectorKey[KeyframeCount];
349
350 //...and fill them
351 for(unsigned int k=0; k<KeyframeCount; ++k)
352 {
353 aiMatrix4x4 t2, t3;
354
355 //Create a matrix to transfrom a vector from the bones default pose to the bone bones in this animation key
356 aiMatrix4x4 PoseToKey=
357 aiMatrix4x4::Translation(Animations[i].Tracks[j].Keyframes[k].Position, t3) //pos
358 * aiMatrix4x4(Animations[i].Tracks[j].Keyframes[k].Rotation.GetMatrix()) //rot
359 * aiMatrix4x4::Scaling(Animations[i].Tracks[j].Keyframes[k].Scaling, t2); //scale
360
361
362 //calculate the complete transformation from world space to bone space
363 aiMatrix4x4 CompleteTransform=DefBonePose * PoseToKey;
364
365 aiVector3D Pos;
366 aiQuaternion Rot;
367 aiVector3D Scale;
368
369 CompleteTransform.Decompose(Scale, Rot, Pos);
370
371 double Time=Animations[i].Tracks[j].Keyframes[k].Time;
372
373 NewNodeAnim->mPositionKeys[k].mTime=Time;
374 NewNodeAnim->mPositionKeys[k].mValue=Pos;
375
376 NewNodeAnim->mRotationKeys[k].mTime=Time;
377 NewNodeAnim->mRotationKeys[k].mValue=Rot;
378
379 NewNodeAnim->mScalingKeys[k].mTime=Time;
380 NewNodeAnim->mScalingKeys[k].mValue=Scale;
381 }
382
383 NewAnimation->mChannels[j]=NewNodeAnim;
384 }
385
386 m_CurrentScene->mAnimations[i]=NewAnimation;
387 }
388 }
389 //TODO: Auf nicht vorhandene Animationskeys achten!
390 //#pragma warning (s.o.)
391 //__________________________________________________________________
392 }
393
394
395 aiNode* OgreImporter::CreateAiNodeFromBone(int BoneId, const std::vector<Bone> &Bones, aiNode* ParentNode)
396 {
397 //----Create the node for this bone and set its values-----
398 aiNode* NewNode=new aiNode(Bones[BoneId].Name);
399 NewNode->mParent=ParentNode;
400
401 aiMatrix4x4 t0,t1;
402 NewNode->mTransformation=
403 aiMatrix4x4::Translation(Bones[BoneId].Position, t0)
404 *aiMatrix4x4::Rotation(Bones[BoneId].RotationAngle, Bones[BoneId].RotationAxis, t1)
405 ;
406 //__________________________________________________________
407
408
409 //---------- recursivly create all children Nodes: ----------
410 NewNode->mNumChildren=Bones[BoneId].Children.size();
411 NewNode->mChildren=new aiNode*[Bones[BoneId].Children.size()];
412 for(unsigned int i=0; i<Bones[BoneId].Children.size(); ++i)
413 {
414 NewNode->mChildren[i]=CreateAiNodeFromBone(Bones[BoneId].Children[i], Bones, NewNode);
415 }
416 //____________________________________________________
417
418
419 return NewNode;
420 }
421
422
423 void Bone::CalculateBoneToWorldSpaceMatrix(vector<Bone> &Bones)
424 {
425 //Calculate the matrix for this bone:
426
427 aiMatrix4x4 t0,t1;
428 aiMatrix4x4 Transf= aiMatrix4x4::Rotation(-RotationAngle, RotationAxis, t1)
429 * aiMatrix4x4::Translation(-Position, t0);
430
431 if(-1==ParentId)
432 {
433 BoneToWorldSpace=Transf;
434 }
435 else
436 {
437 BoneToWorldSpace=Transf*Bones[ParentId].BoneToWorldSpace;
438 }
439
440
441 //and recursivly for all children:
442 BOOST_FOREACH(int theChildren, Children)
443 {
444 Bones[theChildren].CalculateBoneToWorldSpaceMatrix(Bones);
445 }
446 }
447
448
449 }//namespace Ogre
450 }//namespace Assimp
451
452 #endif // !! ASSIMP_BUILD_NO_OGRE_IMPORTER
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 #ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER
41
42 #include "OgreStructs.h"
43 #include "TinyFormatter.h"
44
45 namespace Assimp
46 {
47 namespace Ogre
48 {
49
50 // VertexElement
51
52 VertexElement::VertexElement() :
53 index(0),
54 source(0),
55 offset(0),
56 type(VET_FLOAT1),
57 semantic(VES_POSITION)
58 {
59 }
60
61 size_t VertexElement::Size() const
62 {
63 return TypeSize(type);
64 }
65
66 size_t VertexElement::ComponentCount() const
67 {
68 return ComponentCount(type);
69 }
70
71 size_t VertexElement::ComponentCount(Type type)
72 {
73 switch(type)
74 {
75 case VET_COLOUR:
76 case VET_COLOUR_ABGR:
77 case VET_COLOUR_ARGB:
78 case VET_FLOAT1:
79 case VET_DOUBLE1:
80 case VET_SHORT1:
81 case VET_USHORT1:
82 case VET_INT1:
83 case VET_UINT1:
84 return 1;
85 case VET_FLOAT2:
86 case VET_DOUBLE2:
87 case VET_SHORT2:
88 case VET_USHORT2:
89 case VET_INT2:
90 case VET_UINT2:
91 return 2;
92 case VET_FLOAT3:
93 case VET_DOUBLE3:
94 case VET_SHORT3:
95 case VET_USHORT3:
96 case VET_INT3:
97 case VET_UINT3:
98 return 3;
99 case VET_FLOAT4:
100 case VET_DOUBLE4:
101 case VET_SHORT4:
102 case VET_USHORT4:
103 case VET_INT4:
104 case VET_UINT4:
105 case VET_UBYTE4:
106 return 4;
107 }
108 return 0;
109 }
110
111 size_t VertexElement::TypeSize(Type type)
112 {
113 switch(type)
114 {
115 case VET_COLOUR:
116 case VET_COLOUR_ABGR:
117 case VET_COLOUR_ARGB:
118 return sizeof(unsigned int);
119 case VET_FLOAT1:
120 return sizeof(float);
121 case VET_FLOAT2:
122 return sizeof(float)*2;
123 case VET_FLOAT3:
124 return sizeof(float)*3;
125 case VET_FLOAT4:
126 return sizeof(float)*4;
127 case VET_DOUBLE1:
128 return sizeof(double);
129 case VET_DOUBLE2:
130 return sizeof(double)*2;
131 case VET_DOUBLE3:
132 return sizeof(double)*3;
133 case VET_DOUBLE4:
134 return sizeof(double)*4;
135 case VET_SHORT1:
136 return sizeof(short);
137 case VET_SHORT2:
138 return sizeof(short)*2;
139 case VET_SHORT3:
140 return sizeof(short)*3;
141 case VET_SHORT4:
142 return sizeof(short)*4;
143 case VET_USHORT1:
144 return sizeof(unsigned short);
145 case VET_USHORT2:
146 return sizeof(unsigned short)*2;
147 case VET_USHORT3:
148 return sizeof(unsigned short)*3;
149 case VET_USHORT4:
150 return sizeof(unsigned short)*4;
151 case VET_INT1:
152 return sizeof(int);
153 case VET_INT2:
154 return sizeof(int)*2;
155 case VET_INT3:
156 return sizeof(int)*3;
157 case VET_INT4:
158 return sizeof(int)*4;
159 case VET_UINT1:
160 return sizeof(unsigned int);
161 case VET_UINT2:
162 return sizeof(unsigned int)*2;
163 case VET_UINT3:
164 return sizeof(unsigned int)*3;
165 case VET_UINT4:
166 return sizeof(unsigned int)*4;
167 case VET_UBYTE4:
168 return sizeof(unsigned char)*4;
169 }
170 return 0;
171 }
172
173 std::string VertexElement::TypeToString()
174 {
175 return TypeToString(type);
176 }
177
178 std::string VertexElement::TypeToString(Type type)
179 {
180 switch(type)
181 {
182 case VET_COLOUR: return "COLOUR";
183 case VET_COLOUR_ABGR: return "COLOUR_ABGR";
184 case VET_COLOUR_ARGB: return "COLOUR_ARGB";
185 case VET_FLOAT1: return "FLOAT1";
186 case VET_FLOAT2: return "FLOAT2";
187 case VET_FLOAT3: return "FLOAT3";
188 case VET_FLOAT4: return "FLOAT4";
189 case VET_DOUBLE1: return "DOUBLE1";
190 case VET_DOUBLE2: return "DOUBLE2";
191 case VET_DOUBLE3: return "DOUBLE3";
192 case VET_DOUBLE4: return "DOUBLE4";
193 case VET_SHORT1: return "SHORT1";
194 case VET_SHORT2: return "SHORT2";
195 case VET_SHORT3: return "SHORT3";
196 case VET_SHORT4: return "SHORT4";
197 case VET_USHORT1: return "USHORT1";
198 case VET_USHORT2: return "USHORT2";
199 case VET_USHORT3: return "USHORT3";
200 case VET_USHORT4: return "USHORT4";
201 case VET_INT1: return "INT1";
202 case VET_INT2: return "INT2";
203 case VET_INT3: return "INT3";
204 case VET_INT4: return "INT4";
205 case VET_UINT1: return "UINT1";
206 case VET_UINT2: return "UINT2";
207 case VET_UINT3: return "UINT3";
208 case VET_UINT4: return "UINT4";
209 case VET_UBYTE4: return "UBYTE4";
210 }
211 return "Uknown_VertexElement::Type";
212 }
213
214 std::string VertexElement::SemanticToString()
215 {
216 return SemanticToString(semantic);
217 }
218
219 std::string VertexElement::SemanticToString(Semantic semantic)
220 {
221 switch(semantic)
222 {
223 case VES_POSITION: return "POSITION";
224 case VES_BLEND_WEIGHTS: return "BLEND_WEIGHTS";
225 case VES_BLEND_INDICES: return "BLEND_INDICES";
226 case VES_NORMAL: return "NORMAL";
227 case VES_DIFFUSE: return "DIFFUSE";
228 case VES_SPECULAR: return "SPECULAR";
229 case VES_TEXTURE_COORDINATES: return "TEXTURE_COORDINATES";
230 case VES_BINORMAL: return "BINORMAL";
231 case VES_TANGENT: return "TANGENT";
232 }
233 return "Uknown_VertexElement::Semantic";
234 }
235
236 // IVertexData
237
238 IVertexData::IVertexData() :
239 count(0)
240 {
241 }
242
243 bool IVertexData::HasBoneAssignments() const
244 {
245 return !boneAssignments.empty();
246 }
247
248 void IVertexData::AddVertexMapping(uint32_t oldIndex, uint32_t newIndex)
249 {
250 BoneAssignmentsForVertex(oldIndex, newIndex, boneAssignmentsMap[newIndex]);
251 vertexIndexMapping[oldIndex].push_back(newIndex);
252 }
253
254 void IVertexData::BoneAssignmentsForVertex(uint32_t currentIndex, uint32_t newIndex, VertexBoneAssignmentList &dest) const
255 {
256 for (VertexBoneAssignmentList::const_iterator iter=boneAssignments.begin(), end=boneAssignments.end();
257 iter!=end; ++iter)
258 {
259 if (iter->vertexIndex == currentIndex)
260 {
261 VertexBoneAssignment a = (*iter);
262 a.vertexIndex = newIndex;
263 dest.push_back(a);
264 }
265 }
266 }
267
268 AssimpVertexBoneWeightList IVertexData::AssimpBoneWeights(size_t vertices)
269 {
270 AssimpVertexBoneWeightList weights;
271 for(size_t vi=0; vi<vertices; ++vi)
272 {
273 VertexBoneAssignmentList &vertexWeights = boneAssignmentsMap[vi];
274 for (VertexBoneAssignmentList::const_iterator iter=vertexWeights.begin(), end=vertexWeights.end();
275 iter!=end; ++iter)
276 {
277 std::vector<aiVertexWeight> &boneWeights = weights[iter->boneIndex];
278 boneWeights.push_back(aiVertexWeight(vi, iter->weight));
279 }
280 }
281 return weights;
282 }
283
284 std::set<uint16_t> IVertexData::ReferencedBonesByWeights() const
285 {
286 std::set<uint16_t> referenced;
287 for (VertexBoneAssignmentList::const_iterator iter=boneAssignments.begin(), end=boneAssignments.end();
288 iter!=end; ++iter)
289 {
290 referenced.insert(iter->boneIndex);
291 }
292 return referenced;
293 }
294
295 // VertexData
296
297 VertexData::VertexData()
298 {
299 }
300
301 VertexData::~VertexData()
302 {
303 Reset();
304 }
305
306 void VertexData::Reset()
307 {
308 // Releases shared ptr memory streams.
309 vertexBindings.clear();
310 vertexElements.clear();
311 }
312
313 uint32_t VertexData::VertexSize(uint16_t source) const
314 {
315 uint32_t size = 0;
316 for(VertexElementList::const_iterator iter=vertexElements.begin(), end=vertexElements.end(); iter != end; ++iter)
317 {
318 if (iter->source == source)
319 size += iter->Size();
320 }
321 return size;
322 }
323
324 MemoryStream *VertexData::VertexBuffer(uint16_t source)
325 {
326 if (vertexBindings.find(source) != vertexBindings.end())
327 return vertexBindings[source].get();
328 return 0;
329 }
330
331 VertexElement *VertexData::GetVertexElement(VertexElement::Semantic semantic, uint16_t index)
332 {
333 for(VertexElementList::iterator iter=vertexElements.begin(), end=vertexElements.end(); iter != end; ++iter)
334 {
335 VertexElement &element = (*iter);
336 if (element.semantic == semantic && element.index == index)
337 return &element;
338 }
339 return 0;
340 }
341
342 // VertexDataXml
343
344 VertexDataXml::VertexDataXml()
345 {
346 }
347
348 bool VertexDataXml::HasPositions() const
349 {
350 return !positions.empty();
351 }
352
353 bool VertexDataXml::HasNormals() const
354 {
355 return !normals.empty();
356 }
357
358 bool VertexDataXml::HasTangents() const
359 {
360 return !tangents.empty();
361 }
362
363 bool VertexDataXml::HasUvs() const
364 {
365 return !uvs.empty();
366 }
367
368 size_t VertexDataXml::NumUvs() const
369 {
370 return uvs.size();
371 }
372
373 // IndexData
374
375 IndexData::IndexData() :
376 count(0),
377 faceCount(0),
378 is32bit(false)
379 {
380 }
381
382 IndexData::~IndexData()
383 {
384 Reset();
385 }
386
387 void IndexData::Reset()
388 {
389 // Release shared ptr memory stream.
390 buffer.reset();
391 }
392
393 size_t IndexData::IndexSize() const
394 {
395 return (is32bit ? sizeof(uint32_t) : sizeof(uint16_t));
396 }
397
398 size_t IndexData::FaceSize() const
399 {
400 return IndexSize() * 3;
401 }
402
403 // Mesh
404
405 Mesh::Mesh() :
406 sharedVertexData(0),
407 skeleton(0),
408 hasSkeletalAnimations(false)
409 {
410 }
411
412 Mesh::~Mesh()
413 {
414 Reset();
415 }
416
417 void Mesh::Reset()
418 {
419 OGRE_SAFE_DELETE(skeleton)
420 OGRE_SAFE_DELETE(sharedVertexData)
421
422 for(size_t i=0, len=subMeshes.size(); i<len; ++i) {
423 OGRE_SAFE_DELETE(subMeshes[i])
424 }
425 subMeshes.clear();
426 for(size_t i=0, len=animations.size(); i<len; ++i) {
427 OGRE_SAFE_DELETE(animations[i])
428 }
429 animations.clear();
430 for(size_t i=0, len=poses.size(); i<len; ++i) {
431 OGRE_SAFE_DELETE(poses[i])
432 }
433 poses.clear();
434 }
435
436 size_t Mesh::NumSubMeshes() const
437 {
438 return subMeshes.size();
439 }
440
441 SubMesh *Mesh::GetSubMesh(uint16_t index) const
442 {
443 for(size_t i=0; i<subMeshes.size(); ++i)
444 if (subMeshes[i]->index == index)
445 return subMeshes[i];
446 return 0;
447 }
448
449 void Mesh::ConvertToAssimpScene(aiScene* dest)
450 {
451 // Setup
452 dest->mNumMeshes = NumSubMeshes();
453 dest->mMeshes = new aiMesh*[dest->mNumMeshes];
454
455 // Create root node
456 dest->mRootNode = new aiNode();
457 dest->mRootNode->mNumMeshes = dest->mNumMeshes;
458 dest->mRootNode->mMeshes = new unsigned int[dest->mRootNode->mNumMeshes];
459
460 // Export meshes
461 for(size_t i=0; i<dest->mNumMeshes; ++i)
462 {
463 dest->mMeshes[i] = subMeshes[i]->ConvertToAssimpMesh(this);
464 dest->mRootNode->mMeshes[i] = i;
465 }
466
467 // Export skeleton
468 if (skeleton)
469 {
470 // Bones
471 if (!skeleton->bones.empty())
472 {
473 BoneList rootBones = skeleton->RootBones();
474 dest->mRootNode->mNumChildren = rootBones.size();
475 dest->mRootNode->mChildren = new aiNode*[dest->mRootNode->mNumChildren];
476
477 for(size_t i=0, len=rootBones.size(); i<len; ++i)
478 {
479 dest->mRootNode->mChildren[i] = rootBones[i]->ConvertToAssimpNode(skeleton, dest->mRootNode);
480 }
481 }
482
483 // Animations
484 if (!skeleton->animations.empty())
485 {
486 dest->mNumAnimations = skeleton->animations.size();
487 dest->mAnimations = new aiAnimation*[dest->mNumAnimations];
488
489 for(size_t i=0, len=skeleton->animations.size(); i<len; ++i)
490 {
491 dest->mAnimations[i] = skeleton->animations[i]->ConvertToAssimpAnimation();
492 }
493 }
494 }
495 }
496
497 // ISubMesh
498
499 ISubMesh::ISubMesh() :
500 index(0),
501 materialIndex(-1),
502 usesSharedVertexData(false),
503 operationType(OT_POINT_LIST)
504 {
505 }
506
507 // SubMesh
508
509 SubMesh::SubMesh() :
510 vertexData(0),
511 indexData(new IndexData())
512 {
513 }
514
515 SubMesh::~SubMesh()
516 {
517 Reset();
518 }
519
520 void SubMesh::Reset()
521 {
522 OGRE_SAFE_DELETE(vertexData)
523 OGRE_SAFE_DELETE(indexData)
524 }
525
526 aiMesh *SubMesh::ConvertToAssimpMesh(Mesh *parent)
527 {
528 if (operationType != OT_TRIANGLE_LIST) {
529 throw DeadlyImportError(Formatter::format() << "Only mesh operation type OT_TRIANGLE_LIST is supported. Found " << operationType);
530 }
531
532 aiMesh *dest = new aiMesh();
533 dest->mPrimitiveTypes = aiPrimitiveType_TRIANGLE;
534
535 if (!name.empty())
536 dest->mName = name;
537
538 // Material index
539 if (materialIndex != -1)
540 dest->mMaterialIndex = materialIndex;
541
542 // Pick source vertex data from shader geometry or from internal geometry.
543 VertexData *src = (!usesSharedVertexData ? vertexData : parent->sharedVertexData);
544
545 VertexElement *positionsElement = src->GetVertexElement(VertexElement::VES_POSITION);
546 VertexElement *normalsElement = src->GetVertexElement(VertexElement::VES_NORMAL);
547 VertexElement *uv1Element = src->GetVertexElement(VertexElement::VES_TEXTURE_COORDINATES, 0);
548 VertexElement *uv2Element = src->GetVertexElement(VertexElement::VES_TEXTURE_COORDINATES, 1);
549
550 // Sanity checks
551 if (!positionsElement) {
552 throw DeadlyImportError("Failed to import Ogre VertexElement::VES_POSITION. Mesh does not have vertex positions!");
553 } else if (positionsElement->type != VertexElement::VET_FLOAT3) {
554 throw DeadlyImportError("Ogre Mesh position vertex element type != VertexElement::VET_FLOAT3. This is not supported.");
555 } else if (normalsElement && normalsElement->type != VertexElement::VET_FLOAT3) {
556 throw DeadlyImportError("Ogre Mesh normal vertex element type != VertexElement::VET_FLOAT3. This is not supported.");
557 }
558
559 // Faces
560 dest->mNumFaces = indexData->faceCount;
561 dest->mFaces = new aiFace[dest->mNumFaces];
562
563 // Assimp required unique vertices, we need to convert from Ogres shared indexing.
564 size_t uniqueVertexCount = dest->mNumFaces * 3;
565 dest->mNumVertices = uniqueVertexCount;
566 dest->mVertices = new aiVector3D[dest->mNumVertices];
567
568 // Source streams
569 MemoryStream *positions = src->VertexBuffer(positionsElement->source);
570 MemoryStream *normals = (normalsElement ? src->VertexBuffer(normalsElement->source) : 0);
571 MemoryStream *uv1 = (uv1Element ? src->VertexBuffer(uv1Element->source) : 0);
572 MemoryStream *uv2 = (uv2Element ? src->VertexBuffer(uv2Element->source) : 0);
573
574 // Element size
575 const size_t sizePosition = positionsElement->Size();
576 const size_t sizeNormal = (normalsElement ? normalsElement->Size() : 0);
577 const size_t sizeUv1 = (uv1Element ? uv1Element->Size() : 0);
578 const size_t sizeUv2 = (uv2Element ? uv2Element->Size() : 0);
579
580 // Vertex width
581 const size_t vWidthPosition = src->VertexSize(positionsElement->source);
582 const size_t vWidthNormal = (normalsElement ? src->VertexSize(normalsElement->source) : 0);
583 const size_t vWidthUv1 = (uv1Element ? src->VertexSize(uv1Element->source) : 0);
584 const size_t vWidthUv2 = (uv2Element ? src->VertexSize(uv2Element->source) : 0);
585
586 bool boneAssignments = src->HasBoneAssignments();
587
588 // Prepare normals
589 if (normals)
590 dest->mNormals = new aiVector3D[dest->mNumVertices];
591
592 // Prepare UVs, ignoring incompatible UVs.
593 if (uv1)
594 {
595 if (uv1Element->type == VertexElement::VET_FLOAT2 || uv1Element->type == VertexElement::VET_FLOAT3)
596 {
597 dest->mNumUVComponents[0] = uv1Element->ComponentCount();
598 dest->mTextureCoords[0] = new aiVector3D[dest->mNumVertices];
599 }
600 else
601 {
602 DefaultLogger::get()->warn(Formatter::format() << "Ogre imported UV0 type " << uv1Element->TypeToString() << " is not compatible with Assimp. Ignoring UV.");
603 uv1 = 0;
604 }
605 }
606 if (uv2)
607 {
608 if (uv2Element->type == VertexElement::VET_FLOAT2 || uv2Element->type == VertexElement::VET_FLOAT3)
609 {
610 dest->mNumUVComponents[1] = uv2Element->ComponentCount();
611 dest->mTextureCoords[1] = new aiVector3D[dest->mNumVertices];
612 }
613 else
614 {
615 DefaultLogger::get()->warn(Formatter::format() << "Ogre imported UV0 type " << uv2Element->TypeToString() << " is not compatible with Assimp. Ignoring UV.");
616 uv2 = 0;
617 }
618 }
619
620 aiVector3D *uv1Dest = (uv1 ? dest->mTextureCoords[0] : 0);
621 aiVector3D *uv2Dest = (uv2 ? dest->mTextureCoords[1] : 0);
622
623 MemoryStream *faces = indexData->buffer.get();
624 for (size_t fi=0, isize=indexData->IndexSize(), fsize=indexData->FaceSize();
625 fi<dest->mNumFaces; ++fi)
626 {
627 // Source Ogre face
628 aiFace ogreFace;
629 ogreFace.mNumIndices = 3;
630 ogreFace.mIndices = new unsigned int[3];
631
632 faces->Seek(fi * fsize, aiOrigin_SET);
633 if (indexData->is32bit)
634 {
635 faces->Read(&ogreFace.mIndices[0], isize, 3);
636 }
637 else
638 {
639 uint16_t iout = 0;
640 for (size_t ii=0; ii<3; ++ii)
641 {
642 faces->Read(&iout, isize, 1);
643 ogreFace.mIndices[ii] = static_cast<unsigned int>(iout);
644 }
645 }
646
647 // Destination Assimp face
648 aiFace &face = dest->mFaces[fi];
649 face.mNumIndices = 3;
650 face.mIndices = new unsigned int[3];
651
652 const size_t pos = fi * 3;
653 for (size_t v=0; v<3; ++v)
654 {
655 const size_t newIndex = pos + v;
656
657 // Write face index
658 face.mIndices[v] = newIndex;
659
660 // Ogres vertex index to ref into the source buffers.
661 const size_t ogreVertexIndex = ogreFace.mIndices[v];
662 src->AddVertexMapping(ogreVertexIndex, newIndex);
663
664 // Position
665 positions->Seek((vWidthPosition * ogreVertexIndex) + positionsElement->offset, aiOrigin_SET);
666 positions->Read(&dest->mVertices[newIndex], sizePosition, 1);
667
668 // Normal
669 if (normals)
670 {
671 normals->Seek((vWidthNormal * ogreVertexIndex) + normalsElement->offset, aiOrigin_SET);
672 normals->Read(&dest->mNormals[newIndex], sizeNormal, 1);
673 }
674 // UV0
675 if (uv1 && uv1Dest)
676 {
677 uv1->Seek((vWidthUv1 * ogreVertexIndex) + uv1Element->offset, aiOrigin_SET);
678 uv1->Read(&uv1Dest[newIndex], sizeUv1, 1);
679 uv1Dest[newIndex].y = (uv1Dest[newIndex].y * -1) + 1; // Flip UV from Ogre to Assimp form
680 }
681 // UV1
682 if (uv2 && uv2Dest)
683 {
684 uv2->Seek((vWidthUv2 * ogreVertexIndex) + uv2Element->offset, aiOrigin_SET);
685 uv2->Read(&uv2Dest[newIndex], sizeUv2, 1);
686 uv2Dest[newIndex].y = (uv2Dest[newIndex].y * -1) + 1; // Flip UV from Ogre to Assimp form
687 }
688 }
689 }
690
691 // Bones and bone weights
692 if (parent->skeleton && boneAssignments)
693 {
694 AssimpVertexBoneWeightList weights = src->AssimpBoneWeights(dest->mNumVertices);
695 std::set<uint16_t> referencedBones = src->ReferencedBonesByWeights();
696
697 dest->mNumBones = referencedBones.size();
698 dest->mBones = new aiBone*[dest->mNumBones];
699
700 size_t assimpBoneIndex = 0;
701 for(std::set<uint16_t>::const_iterator rbIter=referencedBones.begin(), rbEnd=referencedBones.end(); rbIter != rbEnd; ++rbIter, ++assimpBoneIndex)
702 {
703 Bone *bone = parent->skeleton->BoneById((*rbIter));
704 dest->mBones[assimpBoneIndex] = bone->ConvertToAssimpBone(parent->skeleton, weights[bone->id]);
705 }
706 }
707
708 return dest;
709 }
710
711 // MeshXml
712
713 MeshXml::MeshXml() :
714 sharedVertexData(0),
715 skeleton(0)
716 {
717 }
718
719 MeshXml::~MeshXml()
720 {
721 Reset();
722 }
723
724 void MeshXml::Reset()
725 {
726 OGRE_SAFE_DELETE(skeleton)
727 OGRE_SAFE_DELETE(sharedVertexData)
728
729 for(size_t i=0, len=subMeshes.size(); i<len; ++i) {
730 OGRE_SAFE_DELETE(subMeshes[i])
731 }
732 subMeshes.clear();
733 }
734
735 size_t MeshXml::NumSubMeshes() const
736 {
737 return subMeshes.size();
738 }
739
740 SubMeshXml *MeshXml::GetSubMesh(uint16_t index) const
741 {
742 for(size_t i=0; i<subMeshes.size(); ++i)
743 if (subMeshes[i]->index == index)
744 return subMeshes[i];
745 return 0;
746 }
747
748 void MeshXml::ConvertToAssimpScene(aiScene* dest)
749 {
750 // Setup
751 dest->mNumMeshes = NumSubMeshes();
752 dest->mMeshes = new aiMesh*[dest->mNumMeshes];
753
754 // Create root node
755 dest->mRootNode = new aiNode();
756 dest->mRootNode->mNumMeshes = dest->mNumMeshes;
757 dest->mRootNode->mMeshes = new unsigned int[dest->mRootNode->mNumMeshes];
758
759 // Export meshes
760 for(size_t i=0; i<dest->mNumMeshes; ++i)
761 {
762 dest->mMeshes[i] = subMeshes[i]->ConvertToAssimpMesh(this);
763 dest->mRootNode->mMeshes[i] = i;
764 }
765
766 // Export skeleton
767 if (skeleton)
768 {
769 // Bones
770 if (!skeleton->bones.empty())
771 {
772 BoneList rootBones = skeleton->RootBones();
773 dest->mRootNode->mNumChildren = rootBones.size();
774 dest->mRootNode->mChildren = new aiNode*[dest->mRootNode->mNumChildren];
775
776 for(size_t i=0, len=rootBones.size(); i<len; ++i)
777 {
778 dest->mRootNode->mChildren[i] = rootBones[i]->ConvertToAssimpNode(skeleton, dest->mRootNode);
779 }
780 }
781
782 // Animations
783 if (!skeleton->animations.empty())
784 {
785 dest->mNumAnimations = skeleton->animations.size();
786 dest->mAnimations = new aiAnimation*[dest->mNumAnimations];
787
788 for(size_t i=0, len=skeleton->animations.size(); i<len; ++i)
789 {
790 dest->mAnimations[i] = skeleton->animations[i]->ConvertToAssimpAnimation();
791 }
792 }
793 }
794 }
795
796 // SubMeshXml
797
798 SubMeshXml::SubMeshXml() :
799 vertexData(0),
800 indexData(new IndexDataXml())
801 {
802 }
803
804 SubMeshXml::~SubMeshXml()
805 {
806 Reset();
807 }
808
809 void SubMeshXml::Reset()
810 {
811 OGRE_SAFE_DELETE(indexData)
812 OGRE_SAFE_DELETE(vertexData)
813 }
814
815 aiMesh *SubMeshXml::ConvertToAssimpMesh(MeshXml *parent)
816 {
817 aiMesh *dest = new aiMesh();
818 dest->mPrimitiveTypes = aiPrimitiveType_TRIANGLE;
819
820 if (!name.empty())
821 dest->mName = name;
822
823 // Material index
824 if (materialIndex != -1)
825 dest->mMaterialIndex = materialIndex;
826
827 // Faces
828 dest->mNumFaces = indexData->faceCount;
829 dest->mFaces = new aiFace[dest->mNumFaces];
830
831 // Assimp required unique vertices, we need to convert from Ogres shared indexing.
832 size_t uniqueVertexCount = dest->mNumFaces * 3;
833 dest->mNumVertices = uniqueVertexCount;
834 dest->mVertices = new aiVector3D[dest->mNumVertices];
835
836 VertexDataXml *src = (!usesSharedVertexData ? vertexData : parent->sharedVertexData);
837 bool boneAssignments = src->HasBoneAssignments();
838 bool normals = src->HasNormals();
839 size_t uvs = src->NumUvs();
840
841 // Prepare normals
842 if (normals)
843 dest->mNormals = new aiVector3D[dest->mNumVertices];
844
845 // Prepare UVs
846 for(size_t uvi=0; uvi<uvs; ++uvi)
847 {
848 dest->mNumUVComponents[uvi] = 2;
849 dest->mTextureCoords[uvi] = new aiVector3D[dest->mNumVertices];
850 }
851
852 for (size_t fi=0; fi<dest->mNumFaces; ++fi)
853 {
854 // Source Ogre face
855 aiFace &ogreFace = indexData->faces[fi];
856
857 // Destination Assimp face
858 aiFace &face = dest->mFaces[fi];
859 face.mNumIndices = 3;
860 face.mIndices = new unsigned int[3];
861
862 const size_t pos = fi * 3;
863 for (size_t v=0; v<3; ++v)
864 {
865 const size_t newIndex = pos + v;
866
867 // Write face index
868 face.mIndices[v] = newIndex;
869
870 // Ogres vertex index to ref into the source buffers.
871 const size_t ogreVertexIndex = ogreFace.mIndices[v];
872 src->AddVertexMapping(ogreVertexIndex, newIndex);
873
874 // Position
875 dest->mVertices[newIndex] = src->positions[ogreVertexIndex];
876
877 // Normal
878 if (normals)
879 dest->mNormals[newIndex] = src->normals[ogreVertexIndex];
880
881 // UVs
882 for(size_t uvi=0; uvi<uvs; ++uvi)
883 {
884 aiVector3D *uvDest = dest->mTextureCoords[uvi];
885 std::vector<aiVector3D> &uvSrc = src->uvs[uvi];
886 uvDest[newIndex] = uvSrc[ogreVertexIndex];
887 }
888 }
889 }
890
891 // Bones and bone weights
892 if (parent->skeleton && boneAssignments)
893 {
894 AssimpVertexBoneWeightList weights = src->AssimpBoneWeights(dest->mNumVertices);
895 std::set<uint16_t> referencedBones = src->ReferencedBonesByWeights();
896
897 dest->mNumBones = referencedBones.size();
898 dest->mBones = new aiBone*[dest->mNumBones];
899
900 size_t assimpBoneIndex = 0;
901 for(std::set<uint16_t>::const_iterator rbIter=referencedBones.begin(), rbEnd=referencedBones.end(); rbIter != rbEnd; ++rbIter, ++assimpBoneIndex)
902 {
903 Bone *bone = parent->skeleton->BoneById((*rbIter));
904 dest->mBones[assimpBoneIndex] = bone->ConvertToAssimpBone(parent->skeleton, weights[bone->id]);
905 }
906 }
907
908 return dest;
909 }
910
911 // Animation
912
913 Animation::Animation(Skeleton *parent) :
914 parentSkeleton(parent),
915 parentMesh(0),
916 length(0.0f),
917 baseTime(-1.0f)
918 {
919 }
920
921 Animation::Animation(Mesh *parent) :
922 parentMesh(parent),
923 parentSkeleton(0),
924 length(0.0f),
925 baseTime(-1.0f)
926 {
927 }
928
929 VertexData *Animation::AssociatedVertexData(VertexAnimationTrack *track) const
930 {
931 if (!parentMesh)
932 return 0;
933
934 bool sharedGeom = (track->target == 0);
935 if (sharedGeom)
936 return parentMesh->sharedVertexData;
937 else
938 return parentMesh->GetSubMesh(track->target-1)->vertexData;
939 }
940
941 aiAnimation *Animation::ConvertToAssimpAnimation()
942 {
943 aiAnimation *anim = new aiAnimation();
944 anim->mName = name;
945 anim->mDuration = static_cast<double>(length);
946 anim->mTicksPerSecond = 1.0;
947
948 // Tracks
949 if (!tracks.empty())
950 {
951 anim->mNumChannels = tracks.size();
952 anim->mChannels = new aiNodeAnim*[anim->mNumChannels];
953
954 for(size_t i=0, len=tracks.size(); i<len; ++i)
955 {
956 anim->mChannels[i] = tracks[i].ConvertToAssimpAnimationNode(parentSkeleton);
957 }
958 }
959 return anim;
960 }
961
962 // Skeleton
963
964 Skeleton::Skeleton() :
965 blendMode(ANIMBLEND_AVERAGE)
966 {
967 }
968
969 Skeleton::~Skeleton()
970 {
971 Reset();
972 }
973
974 void Skeleton::Reset()
975 {
976 for(size_t i=0, len=bones.size(); i<len; ++i) {
977 OGRE_SAFE_DELETE(bones[i])
978 }
979 bones.clear();
980 for(size_t i=0, len=animations.size(); i<len; ++i) {
981 OGRE_SAFE_DELETE(animations[i])
982 }
983 animations.clear();
984 }
985
986 BoneList Skeleton::RootBones() const
987 {
988 BoneList rootBones;
989 for(BoneList::const_iterator iter = bones.begin(); iter != bones.end(); ++iter)
990 {
991 if (!(*iter)->IsParented())
992 rootBones.push_back((*iter));
993 }
994 return rootBones;
995 }
996
997 size_t Skeleton::NumRootBones() const
998 {
999 size_t num = 0;
1000 for(BoneList::const_iterator iter = bones.begin(); iter != bones.end(); ++iter)
1001 {
1002 if (!(*iter)->IsParented())
1003 num++;
1004 }
1005 return num;
1006 }
1007
1008 Bone *Skeleton::BoneByName(const std::string &name) const
1009 {
1010 for(BoneList::const_iterator iter = bones.begin(); iter != bones.end(); ++iter)
1011 {
1012 if ((*iter)->name == name)
1013 return (*iter);
1014 }
1015 return 0;
1016 }
1017
1018 Bone *Skeleton::BoneById(uint16_t id) const
1019 {
1020 for(BoneList::const_iterator iter = bones.begin(); iter != bones.end(); ++iter)
1021 {
1022 if ((*iter)->id == id)
1023 return (*iter);
1024 }
1025 return 0;
1026 }
1027
1028 // Bone
1029
1030 Bone::Bone() :
1031 id(0),
1032 parent(0),
1033 parentId(-1),
1034 scale(1.0f, 1.0f, 1.0f)
1035 {
1036 }
1037
1038 bool Bone::IsParented() const
1039 {
1040 return (parentId != -1 && parent != 0);
1041 }
1042
1043 uint16_t Bone::ParentId() const
1044 {
1045 return static_cast<uint16_t>(parentId);
1046 }
1047
1048 void Bone::AddChild(Bone *bone)
1049 {
1050 if (!bone)
1051 return;
1052 if (bone->IsParented())
1053 throw DeadlyImportError("Attaching child Bone that is already parented: " + bone->name);
1054
1055 bone->parent = this;
1056 bone->parentId = id;
1057 children.push_back(bone->id);
1058 }
1059
1060 void Bone::CalculateWorldMatrixAndDefaultPose(Skeleton *skeleton)
1061 {
1062 if (!IsParented())
1063 worldMatrix = aiMatrix4x4(scale, rotation, position).Inverse();
1064 else
1065 worldMatrix = aiMatrix4x4(scale, rotation, position).Inverse() * parent->worldMatrix;
1066
1067 defaultPose = aiMatrix4x4(scale, rotation, position);
1068
1069 // Recursively for all children now that the parent matrix has been calculated.
1070 for (size_t i=0, len=children.size(); i<len; ++i)
1071 {
1072 Bone *child = skeleton->BoneById(children[i]);
1073 if (!child) {
1074 throw DeadlyImportError(Formatter::format() << "CalculateWorldMatrixAndDefaultPose: Failed to find child bone " << children[i] << " for parent " << id << " " << name);
1075 }
1076 child->CalculateWorldMatrixAndDefaultPose(skeleton);
1077 }
1078 }
1079
1080 aiNode *Bone::ConvertToAssimpNode(Skeleton *skeleton, aiNode *parentNode)
1081 {
1082 // Bone node
1083 aiNode* node = new aiNode(name);
1084 node->mParent = parentNode;
1085 node->mTransformation = defaultPose;
1086
1087 // Children
1088 if (!children.empty())
1089 {
1090 node->mNumChildren = children.size();
1091 node->mChildren = new aiNode*[node->mNumChildren];
1092
1093 for(size_t i=0, len=children.size(); i<len; ++i)
1094 {
1095 Bone *child = skeleton->BoneById(children[i]);
1096 if (!child) {
1097 throw DeadlyImportError(Formatter::format() << "ConvertToAssimpNode: Failed to find child bone " << children[i] << " for parent " << id << " " << name);
1098 }
1099 node->mChildren[i] = child->ConvertToAssimpNode(skeleton, node);
1100 }
1101 }
1102 return node;
1103 }
1104
1105 aiBone *Bone::ConvertToAssimpBone(Skeleton *parent, const std::vector<aiVertexWeight> &boneWeights)
1106 {
1107 aiBone *bone = new aiBone();
1108 bone->mName = name;
1109 bone->mOffsetMatrix = worldMatrix;
1110
1111 if (!boneWeights.empty())
1112 {
1113 bone->mNumWeights = boneWeights.size();
1114 bone->mWeights = new aiVertexWeight[boneWeights.size()];
1115 memcpy(bone->mWeights, &boneWeights[0], boneWeights.size() * sizeof(aiVertexWeight));
1116 }
1117
1118 return bone;
1119 }
1120
1121 // VertexAnimationTrack
1122
1123 VertexAnimationTrack::VertexAnimationTrack() :
1124 target(0),
1125 type(VAT_NONE)
1126 {
1127 }
1128
1129 aiNodeAnim *VertexAnimationTrack::ConvertToAssimpAnimationNode(Skeleton *skeleton)
1130 {
1131 if (boneName.empty() || type != VAT_TRANSFORM) {
1132 throw DeadlyImportError("VertexAnimationTrack::ConvertToAssimpAnimationNode: Cannot convert track that has no target bone name or is not type of VAT_TRANSFORM");
1133 }
1134
1135 aiNodeAnim *nodeAnim = new aiNodeAnim();
1136 nodeAnim->mNodeName = boneName;
1137
1138 Bone *bone = skeleton->BoneByName(boneName);
1139 if (!bone) {
1140 throw DeadlyImportError("VertexAnimationTrack::ConvertToAssimpAnimationNode: Failed to find bone " + boneName + " from parent Skeleton");
1141 }
1142
1143 // Keyframes
1144 size_t numKeyframes = transformKeyFrames.size();
1145
1146 nodeAnim->mPositionKeys = new aiVectorKey[numKeyframes];
1147 nodeAnim->mRotationKeys = new aiQuatKey[numKeyframes];
1148 nodeAnim->mScalingKeys = new aiVectorKey[numKeyframes];
1149 nodeAnim->mNumPositionKeys = numKeyframes;
1150 nodeAnim->mNumRotationKeys = numKeyframes;
1151 nodeAnim->mNumScalingKeys = numKeyframes;
1152
1153 for(size_t kfi=0; kfi<numKeyframes; ++kfi)
1154 {
1155 TransformKeyFrame &kfSource = transformKeyFrames[kfi];
1156
1157 // Calculate the complete transformation from world space to bone space
1158 aiVector3D pos; aiQuaternion rot; aiVector3D scale;
1159
1160 aiMatrix4x4 finalTransform = bone->defaultPose * kfSource.Transform();
1161 finalTransform.Decompose(scale, rot, pos);
1162
1163 double t = static_cast<double>(kfSource.timePos);
1164 nodeAnim->mPositionKeys[kfi].mTime = t;
1165 nodeAnim->mRotationKeys[kfi].mTime = t;
1166 nodeAnim->mScalingKeys[kfi].mTime = t;
1167
1168 nodeAnim->mPositionKeys[kfi].mValue = pos;
1169 nodeAnim->mRotationKeys[kfi].mValue = rot;
1170 nodeAnim->mScalingKeys[kfi].mValue = scale;
1171 }
1172
1173 return nodeAnim;
1174 }
1175
1176 // TransformKeyFrame
1177
1178 TransformKeyFrame::TransformKeyFrame() :
1179 timePos(0.0f),
1180 scale(1.0f, 1.0f, 1.0f)
1181 {
1182 }
1183
1184 aiMatrix4x4 TransformKeyFrame::Transform()
1185 {
1186 return aiMatrix4x4(scale, rotation, position);
1187 }
1188
1189 } // Ogre
1190 } // Assimp
1191
1192 #endif // ASSIMP_BUILD_NO_OGRE_IMPORTER
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 #ifndef AI_OGRESTRUCTS_H_INC
41 #define AI_OGRESTRUCTS_H_INC
42
43 #ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER
44
45 #include "AssimpPCH.h"
46 #include "MemoryIOWrapper.h"
47
48 /** @note Parts of this implementation, for example enums, deserialization constants and logic
49 has been copied directly with minor modifications from the MIT licensed Ogre3D code base.
50 See more from https://bitbucket.org/sinbad/ogre. */
51
52 namespace Assimp
53 {
54 namespace Ogre
55 {
56
57 // Forward decl
58 class Mesh;
59 class MeshXml;
60 class SubMesh;
61 class SubMeshXml;
62 class Skeleton;
63
64 #define OGRE_SAFE_DELETE(p) delete p; p=0;
65
66 // Typedefs
67 typedef Assimp::MemoryIOStream MemoryStream;
68 typedef boost::shared_ptr<MemoryStream> MemoryStreamPtr;
69 typedef std::map<uint16_t, MemoryStreamPtr> VertexBufferBindings;
70
71 // Ogre Vertex Element
72 class VertexElement
73 {
74 public:
75 /// Vertex element semantics, used to identify the meaning of vertex buffer contents
76 enum Semantic {
77 /// Position, 3 reals per vertex
78 VES_POSITION = 1,
79 /// Blending weights
80 VES_BLEND_WEIGHTS = 2,
81 /// Blending indices
82 VES_BLEND_INDICES = 3,
83 /// Normal, 3 reals per vertex
84 VES_NORMAL = 4,
85 /// Diffuse colours
86 VES_DIFFUSE = 5,
87 /// Specular colours
88 VES_SPECULAR = 6,
89 /// Texture coordinates
90 VES_TEXTURE_COORDINATES = 7,
91 /// Binormal (Y axis if normal is Z)
92 VES_BINORMAL = 8,
93 /// Tangent (X axis if normal is Z)
94 VES_TANGENT = 9,
95 /// The number of VertexElementSemantic elements (note - the first value VES_POSITION is 1)
96 VES_COUNT = 9
97 };
98
99 /// Vertex element type, used to identify the base types of the vertex contents
100 enum Type
101 {
102 VET_FLOAT1 = 0,
103 VET_FLOAT2 = 1,
104 VET_FLOAT3 = 2,
105 VET_FLOAT4 = 3,
106 /// alias to more specific colour type - use the current rendersystem's colour packing
107 VET_COLOUR = 4,
108 VET_SHORT1 = 5,
109 VET_SHORT2 = 6,
110 VET_SHORT3 = 7,
111 VET_SHORT4 = 8,
112 VET_UBYTE4 = 9,
113 /// D3D style compact colour
114 VET_COLOUR_ARGB = 10,
115 /// GL style compact colour
116 VET_COLOUR_ABGR = 11,
117 VET_DOUBLE1 = 12,
118 VET_DOUBLE2 = 13,
119 VET_DOUBLE3 = 14,
120 VET_DOUBLE4 = 15,
121 VET_USHORT1 = 16,
122 VET_USHORT2 = 17,
123 VET_USHORT3 = 18,
124 VET_USHORT4 = 19,
125 VET_INT1 = 20,
126 VET_INT2 = 21,
127 VET_INT3 = 22,
128 VET_INT4 = 23,
129 VET_UINT1 = 24,
130 VET_UINT2 = 25,
131 VET_UINT3 = 26,
132 VET_UINT4 = 27
133 };
134
135 VertexElement();
136
137 /// Size of the vertex element in bytes.
138 size_t Size() const;
139
140 /// Count of components in this element, eg. VET_FLOAT3 return 3.
141 size_t ComponentCount() const;
142
143 /// Type as string.
144 std::string TypeToString();
145
146 /// Semantic as string.
147 std::string SemanticToString();
148
149 static size_t TypeSize(Type type);
150 static size_t ComponentCount(Type type);
151 static std::string TypeToString(Type type);
152 static std::string SemanticToString(Semantic semantic);
153
154 uint16_t index;
155 uint16_t source;
156 uint16_t offset;
157 Type type;
158 Semantic semantic;
159 };
160 typedef std::vector<VertexElement> VertexElementList;
161
162 /// Ogre Vertex Bone Assignment
163 struct VertexBoneAssignment
164 {
165 uint32_t vertexIndex;
166 uint16_t boneIndex;
167 float weight;
168 };
169 typedef std::vector<VertexBoneAssignment> VertexBoneAssignmentList;
170 typedef std::map<uint32_t, VertexBoneAssignmentList > VertexBoneAssignmentsMap;
171 typedef std::map<uint16_t, std::vector<aiVertexWeight> > AssimpVertexBoneWeightList;
172
173 // Ogre Vertex Data interface, inherited by the binary and XML implementations.
174 class IVertexData
175 {
176 public:
177 IVertexData();
178
179 /// Returns if bone assignments are available.
180 bool HasBoneAssignments() const;
181
182 /// Add vertex mapping from old to new index.
183 void AddVertexMapping(uint32_t oldIndex, uint32_t newIndex);
184
185 /// Returns re-mapped bone assignments.
186 /** @note Uses mappings added via AddVertexMapping. */
187 AssimpVertexBoneWeightList AssimpBoneWeights(size_t vertices);
188
189 /// Returns a set of bone indexes that are referenced by bone assignments (weights).
190 std::set<uint16_t> ReferencedBonesByWeights() const;
191
192 /// Vertex count.
193 uint32_t count;
194
195 /// Bone assignments.
196 VertexBoneAssignmentList boneAssignments;
197
198 private:
199 void BoneAssignmentsForVertex(uint32_t currentIndex, uint32_t newIndex, VertexBoneAssignmentList &dest) const;
200
201 std::map<uint32_t, std::vector<uint32_t> > vertexIndexMapping;
202 VertexBoneAssignmentsMap boneAssignmentsMap;
203 };
204
205 // Ogre Vertex Data
206 class VertexData : public IVertexData
207 {
208 public:
209 VertexData();
210 ~VertexData();
211
212 /// Releases all memory that this data structure owns.
213 void Reset();
214
215 /// Get vertex size for @c source.
216 uint32_t VertexSize(uint16_t source) const;
217
218 /// Get vertex buffer for @c source.
219 MemoryStream *VertexBuffer(uint16_t source);
220
221 /// Get vertex element for @c semantic for @c index.
222 VertexElement *GetVertexElement(VertexElement::Semantic semantic, uint16_t index = 0);
223
224 /// Vertex elements.
225 VertexElementList vertexElements;
226
227 /// Vertex buffers mapped to bind index.
228 VertexBufferBindings vertexBindings;
229 };
230
231 // Ogre Index Data
232 class IndexData
233 {
234 public:
235 IndexData();
236 ~IndexData();
237
238 /// Releases all memory that this data structure owns.
239 void Reset();
240
241 /// Index size in bytes.
242 size_t IndexSize() const;
243
244 /// Face size in bytes.
245 size_t FaceSize() const;
246
247 /// Index count.
248 uint32_t count;
249
250 /// Face count.
251 uint32_t faceCount;
252
253 /// If has 32-bit indexes.
254 bool is32bit;
255
256 /// Index buffer.
257 MemoryStreamPtr buffer;
258 };
259
260 /// Ogre Pose
261 class Pose
262 {
263 public:
264 struct Vertex
265 {
266 uint32_t index;
267 aiVector3D offset;
268 aiVector3D normal;
269 };
270 typedef std::map<uint32_t, Vertex> PoseVertexMap;
271
272 Pose() : target(0), hasNormals(false) {}
273
274 /// Name.
275 std::string name;
276
277 /// Target.
278 uint16_t target;
279
280 /// Does vertices map have normals.
281 bool hasNormals;
282
283 /// Vertex offset and normals.
284 PoseVertexMap vertices;
285 };
286 typedef std::vector<Pose*> PoseList;
287
288 /// Ogre Pose Key Frame Ref
289 struct PoseRef
290 {
291 uint16_t index;
292 float influence;
293 };
294 typedef std::vector<PoseRef> PoseRefList;
295
296 /// Ogre Pose Key Frame
297 struct PoseKeyFrame
298 {
299 /// Time position in the animation.
300 float timePos;
301
302 PoseRefList references;
303 };
304 typedef std::vector<PoseKeyFrame> PoseKeyFrameList;
305
306 /// Ogre Morph Key Frame
307 struct MorphKeyFrame
308 {
309 /// Time position in the animation.
310 float timePos;
311
312 MemoryStreamPtr buffer;
313 };
314 typedef std::vector<MorphKeyFrame> MorphKeyFrameList;
315
316 /// Ogre animation key frame
317 struct TransformKeyFrame
318 {
319 TransformKeyFrame();
320
321 aiMatrix4x4 Transform();
322
323 float timePos;
324
325 aiQuaternion rotation;
326 aiVector3D position;
327 aiVector3D scale;
328 };
329 typedef std::vector<TransformKeyFrame> TransformKeyFrameList;
330
331 /// Ogre Animation Track
332 struct VertexAnimationTrack
333 {
334 enum Type
335 {
336 /// No animation
337 VAT_NONE = 0,
338 /// Morph animation is made up of many interpolated snapshot keyframes
339 VAT_MORPH = 1,
340 /// Pose animation is made up of a single delta pose keyframe
341 VAT_POSE = 2,
342 /// Keyframe that has its on pos, rot and scale for a time position
343 VAT_TRANSFORM = 3
344 };
345
346 VertexAnimationTrack();
347
348 /// Convert to Assimp node animation.
349 aiNodeAnim *ConvertToAssimpAnimationNode(Skeleton *skeleton);
350
351 // Animation type.
352 Type type;
353
354 /// Vertex data target.
355 /** 0 == shared geometry
356 >0 == submesh index + 1 */
357 uint16_t target;
358
359 /// Only valid for VAT_TRANSFORM.
360 std::string boneName;
361
362 /// Only one of these will contain key frames, depending on the type enum.
363 PoseKeyFrameList poseKeyFrames;
364 MorphKeyFrameList morphKeyFrames;
365 TransformKeyFrameList transformKeyFrames;
366 };
367 typedef std::vector<VertexAnimationTrack> VertexAnimationTrackList;
368
369 /// Ogre Animation
370 class Animation
371 {
372 public:
373 Animation(Skeleton *parent);
374 Animation(Mesh *parent);
375
376 /// Returns the associated vertex data for a track in this animation.
377 /** @note Only valid to call when parent Mesh is set. */
378 VertexData *AssociatedVertexData(VertexAnimationTrack *track) const;
379
380 /// Convert to Assimp animation.
381 aiAnimation *ConvertToAssimpAnimation();
382
383 /// Parent mesh.
384 /** @note Set only when animation is read from a mesh. */
385 Mesh *parentMesh;
386
387 /// Parent skeleton.
388 /** @note Set only when animation is read from a skeleton. */
389 Skeleton *parentSkeleton;
390
391 /// Animation name.
392 std::string name;
393
394 /// Base animation name.
395 std::string baseName;
396
397 /// Length in seconds.
398 float length;
399
400 /// Base animation key time.
401 float baseTime;
402
403 /// Animation tracks.
404 VertexAnimationTrackList tracks;
405 };
406 typedef std::vector<Animation*> AnimationList;
407
408 /// Ogre Bone
409 class Bone
410 {
411 public:
412 Bone();
413
414 /// Returns if this bone is parented.
415 bool IsParented() const;
416
417 /// Parent index as uint16_t. Internally int32_t as -1 means unparented.
418 uint16_t ParentId() const;
419
420 /// Add child bone.
421 void AddChild(Bone *bone);
422
423 /// Calculates the world matrix for bone and its children.
424 void CalculateWorldMatrixAndDefaultPose(Skeleton *skeleton);
425
426 /// Convert to Assimp node (animation nodes).
427 aiNode *ConvertToAssimpNode(Skeleton *parent, aiNode *parentNode = 0);
428
429 /// Convert to Assimp bone (mesh bones).
430 aiBone *ConvertToAssimpBone(Skeleton *parent, const std::vector<aiVertexWeight> &boneWeights);
431
432 uint16_t id;
433 std::string name;
434
435 Bone *parent;
436 int32_t parentId;
437 std::vector<uint16_t> children;
438
439 aiVector3D position;
440 aiQuaternion rotation;
441 aiVector3D scale;
442
443 aiMatrix4x4 worldMatrix;
444 aiMatrix4x4 defaultPose;
445 };
446 typedef std::vector<Bone*> BoneList;
447
448 /// Ogre Skeleton
449 class Skeleton
450 {
451 public:
452 enum BlendMode
453 {
454 /// Animations are applied by calculating a weighted average of all animations
455 ANIMBLEND_AVERAGE = 0,
456 /// Animations are applied by calculating a weighted cumulative total
457 ANIMBLEND_CUMULATIVE = 1
458 };
459
460 Skeleton();
461 ~Skeleton();
462
463 /// Releases all memory that this data structure owns.
464 void Reset();
465
466 /// Returns unparented root bones.
467 BoneList RootBones() const;
468
469 /// Returns number of unparented root bones.
470 size_t NumRootBones() const;
471
472 /// Get bone by name.
473 Bone *BoneByName(const std::string &name) const;
474
475 /// Get bone by id.
476 Bone *BoneById(uint16_t id) const;
477
478 BoneList bones;
479 AnimationList animations;
480
481 /// @todo Take blend mode into account, but where?
482 BlendMode blendMode;
483 };
484
485 /// Ogre Sub Mesh interface, inherited by the binary and XML implementations.
486 class ISubMesh
487 {
488 public:
489 /// @note Full list of Ogre types, not all of them are supported and exposed to Assimp.
490 enum OperationType
491 {
492 /// A list of points, 1 vertex per point
493 OT_POINT_LIST = 1,
494 /// A list of lines, 2 vertices per line
495 OT_LINE_LIST = 2,
496 /// A strip of connected lines, 1 vertex per line plus 1 start vertex
497 OT_LINE_STRIP = 3,
498 /// A list of triangles, 3 vertices per triangle
499 OT_TRIANGLE_LIST = 4,
500 /// A strip of triangles, 3 vertices for the first triangle, and 1 per triangle after that
501 OT_TRIANGLE_STRIP = 5,
502 /// A fan of triangles, 3 vertices for the first triangle, and 1 per triangle after that
503 OT_TRIANGLE_FAN = 6
504 };
505
506 ISubMesh();
507
508 /// SubMesh index.
509 unsigned int index;
510
511 /// SubMesh name.
512 std::string name;
513
514 /// Material used by this submesh.
515 std::string materialRef;
516
517 /// Texture alias information.
518 std::string textureAliasName;
519 std::string textureAliasRef;
520
521 /// Assimp scene material index used by this submesh.
522 /** -1 if no material or material could not be imported. */
523 int materialIndex;
524
525 /// If submesh uses shared geometry from parent mesh.
526 bool usesSharedVertexData;
527
528 /// Operation type.
529 OperationType operationType;
530 };
531
532 /// Ogre SubMesh
533 class SubMesh : public ISubMesh
534 {
535 public:
536 SubMesh();
537 ~SubMesh();
538
539 /// Releases all memory that this data structure owns.
540 /** @note Vertex and index data contains shared ptrs
541 that are freed automatically. In practice the ref count
542 should be 0 after this reset. */
543 void Reset();
544
545 /// Covert to Assimp mesh.
546 aiMesh *ConvertToAssimpMesh(Mesh *parent);
547
548 /// Vertex data.
549 VertexData *vertexData;
550
551 /// Index data.
552 IndexData *indexData;
553 };
554 typedef std::vector<SubMesh*> SubMeshList;
555
556 /// Ogre Mesh
557 class Mesh
558 {
559 public:
560 Mesh();
561 ~Mesh();
562
563 /// Releases all memory that this data structure owns.
564 void Reset();
565
566 /// Returns number of subMeshes.
567 size_t NumSubMeshes() const;
568
569 /// Returns submesh for @c index.
570 SubMesh *GetSubMesh(uint16_t index) const;
571
572 /// Convert mesh to Assimp scene.
573 void ConvertToAssimpScene(aiScene* dest);
574
575 /// Mesh has skeletal animations.
576 bool hasSkeletalAnimations;
577
578 /// Skeleton reference.
579 std::string skeletonRef;
580
581 /// Skeleton.
582 Skeleton *skeleton;
583
584 /// Vertex data
585 VertexData *sharedVertexData;
586
587 /// Sub meshes.
588 SubMeshList subMeshes;
589
590 /// Animations
591 AnimationList animations;
592
593 /// Poses
594 PoseList poses;
595 };
596
597 /// Ogre XML Vertex Data
598 class VertexDataXml : public IVertexData
599 {
600 public:
601 VertexDataXml();
602
603 bool HasPositions() const;
604 bool HasNormals() const;
605 bool HasTangents() const;
606 bool HasUvs() const;
607 size_t NumUvs() const;
608
609 std::vector<aiVector3D> positions;
610 std::vector<aiVector3D> normals;
611 std::vector<aiVector3D> tangents;
612 std::vector<std::vector<aiVector3D> > uvs;
613 };
614
615 /// Ogre XML Index Data
616 class IndexDataXml
617 {
618 public:
619 IndexDataXml() : faceCount(0) {}
620
621 /// Face count.
622 uint32_t faceCount;
623
624 std::vector<aiFace> faces;
625 };
626
627 /// Ogre XML SubMesh
628 class SubMeshXml : public ISubMesh
629 {
630 public:
631 SubMeshXml();
632 ~SubMeshXml();
633
634 /// Releases all memory that this data structure owns.
635 void Reset();
636
637 aiMesh *ConvertToAssimpMesh(MeshXml *parent);
638
639 IndexDataXml *indexData;
640 VertexDataXml *vertexData;
641 };
642 typedef std::vector<SubMeshXml*> SubMeshXmlList;
643
644 /// Ogre XML Mesh
645 class MeshXml
646 {
647 public:
648 MeshXml();
649 ~MeshXml();
650
651 /// Releases all memory that this data structure owns.
652 void Reset();
653
654 /// Returns number of subMeshes.
655 size_t NumSubMeshes() const;
656
657 /// Returns submesh for @c index.
658 SubMeshXml *GetSubMesh(uint16_t index) const;
659
660 /// Convert mesh to Assimp scene.
661 void ConvertToAssimpScene(aiScene* dest);
662
663 /// Skeleton reference.
664 std::string skeletonRef;
665
666 /// Skeleton.
667 Skeleton *skeleton;
668
669 /// Vertex data
670 VertexDataXml *sharedVertexData;
671
672 /// Sub meshes.
673 SubMeshXmlList subMeshes;
674 };
675
676 } // Ogre
677 } // Assimp
678
679 #endif // ASSIMP_BUILD_NO_OGRE_IMPORTER
680 #endif // AI_OGRESTRUCTS_H_INC
+0
-88
code/OgreXmlHelper.hpp less more
0
1 #include "irrXMLWrapper.h"
2 #include "fast_atof.h"
3
4 namespace Assimp
5 {
6 namespace Ogre
7 {
8
9 typedef irr::io::IrrXMLReader XmlReader;
10
11
12 //------------Helper Funktion to Get a Attribute Save---------------
13 template<typename t> inline t GetAttribute(XmlReader* Reader, std::string Name);
14
15 /*
16 {
17 BOOST_STATIC_ASSERT(false);
18 return t();
19 }
20 */
21
22 template<> inline int GetAttribute<int>(XmlReader* Reader, std::string Name)
23 {
24 const char* Value=Reader->getAttributeValue(Name.c_str());
25 if(Value)
26 return atoi(Value);
27 else
28 throw DeadlyImportError(std::string("Attribute "+Name+" does not exist in "+Reader->getNodeName()).c_str());
29 }
30
31 template<> inline unsigned int GetAttribute<unsigned int>(XmlReader* Reader, std::string Name)
32 {
33 const char* Value=Reader->getAttributeValue(Name.c_str());
34 if(Value)
35 return static_cast<unsigned int>(atoi(Value));//yes, ugly, but pfff
36 else
37 throw DeadlyImportError(std::string("Attribute "+Name+" does not exist in "+Reader->getNodeName()).c_str());
38 }
39
40 template<> inline float GetAttribute<float>(XmlReader* Reader, std::string Name)
41 {
42 const char* Value=Reader->getAttributeValue(Name.c_str());
43 if(Value)
44 return fast_atof(Value);
45 else
46 throw DeadlyImportError(std::string("Attribute "+Name+" does not exist in "+Reader->getNodeName()).c_str());
47 }
48
49 template<> inline std::string GetAttribute<std::string>(XmlReader* Reader, std::string Name)
50 {
51 const char* Value=Reader->getAttributeValue(Name.c_str());
52 if(Value)
53 return std::string(Value);
54 else
55 throw DeadlyImportError(std::string("Attribute "+Name+" does not exist in "+Reader->getNodeName()).c_str());
56 }
57
58 template<> inline bool GetAttribute<bool>(XmlReader* Reader, std::string Name)
59 {
60 const char* Value=Reader->getAttributeValue(Name.c_str());
61 if(Value)
62 {
63 if(Value==std::string("true"))
64 return true;
65 else if(Value==std::string("false"))
66 return false;
67 else
68 throw DeadlyImportError(std::string("Bool value has invalid value: "+Name+" / "+Value+" / "+Reader->getNodeName()));
69 }
70 else
71 throw DeadlyImportError(std::string("Attribute "+Name+" does not exist in "+Reader->getNodeName()).c_str());
72 }
73 //__________________________________________________________________
74
75 inline bool XmlRead(XmlReader* Reader)
76 {
77 do
78 {
79 if(!Reader->read())
80 return false;
81 }
82 while(Reader->getNodeType()!=irr::io::EXN_ELEMENT);
83 return true;
84 }
85
86 }//namespace Ogre
87 }//namespace Assimp
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 #include "OgreXmlSerializer.h"
41 #include "OgreBinarySerializer.h"
42 #include "OgreParsingUtils.h"
43
44 #include "TinyFormatter.h"
45
46 #ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER
47
48 // Define as 1 to get verbose logging.
49 #define OGRE_XML_SERIALIZER_DEBUG 0
50
51 namespace Assimp
52 {
53 namespace Ogre
54 {
55
56 void ThrowAttibuteError(const XmlReader* reader, const std::string &name, const std::string &error = "")
57 {
58 if (!error.empty())
59 {
60 throw DeadlyImportError(error + " in node '" + std::string(reader->getNodeName()) + "' and attribute '" + name + "'");
61 }
62 else
63 {
64 throw DeadlyImportError("Attribute '" + name + "' does not exist in node '" + std::string(reader->getNodeName()) + "'");
65 }
66 }
67
68 template<>
69 int32_t OgreXmlSerializer::ReadAttribute<int32_t>(const std::string &name) const
70 {
71 if (HasAttribute(name.c_str()))
72 {
73 return static_cast<int32_t>(m_reader->getAttributeValueAsInt(name.c_str()));
74 }
75 else
76 {
77 ThrowAttibuteError(m_reader, name);
78 return 0;
79 }
80 }
81
82 template<>
83 uint32_t OgreXmlSerializer::ReadAttribute<uint32_t>(const std::string &name) const
84 {
85 if (HasAttribute(name.c_str()))
86 {
87 /** @note This is hackish. But we are never expecting unsigned values that go outside the
88 int32_t range. Just monitor for negative numbers and kill the import. */
89 int32_t temp = ReadAttribute<int32_t>(name);
90 if (temp >= 0)
91 {
92 return static_cast<uint32_t>(temp);
93 }
94 else
95 {
96 ThrowAttibuteError(m_reader, name, "Found a negative number value where expecting a uint32_t value");
97 }
98 }
99 else
100 {
101 ThrowAttibuteError(m_reader, name);
102 }
103 return 0;
104 }
105
106 template<>
107 uint16_t OgreXmlSerializer::ReadAttribute<uint16_t>(const std::string &name) const
108 {
109 if (HasAttribute(name.c_str()))
110 {
111 return static_cast<uint16_t>(ReadAttribute<uint32_t>(name));
112 }
113 else
114 {
115 ThrowAttibuteError(m_reader, name);
116 }
117 return 0;
118 }
119
120 template<>
121 float OgreXmlSerializer::ReadAttribute<float>(const std::string &name) const
122 {
123 if (HasAttribute(name.c_str()))
124 {
125 return m_reader->getAttributeValueAsFloat(name.c_str());
126 }
127 else
128 {
129 ThrowAttibuteError(m_reader, name);
130 return 0;
131 }
132 }
133
134 template<>
135 std::string OgreXmlSerializer::ReadAttribute<std::string>(const std::string &name) const
136 {
137 const char* value = m_reader->getAttributeValue(name.c_str());
138 if (value)
139 {
140 return std::string(value);
141 }
142 else
143 {
144 ThrowAttibuteError(m_reader, name);
145 return "";
146 }
147 }
148
149 template<>
150 bool OgreXmlSerializer::ReadAttribute<bool>(const std::string &name) const
151 {
152 std::string value = Ogre::ToLower(ReadAttribute<std::string>(name));
153 if (ASSIMP_stricmp(value, "true") == 0)
154 {
155 return true;
156 }
157 else if (ASSIMP_stricmp(value, "false") == 0)
158 {
159 return false;
160 }
161 else
162 {
163 ThrowAttibuteError(m_reader, name, "Boolean value is expected to be 'true' or 'false', encountered '" + value + "'");
164 return false;
165 }
166 }
167
168 bool OgreXmlSerializer::HasAttribute(const std::string &name) const
169 {
170 return (m_reader->getAttributeValue(name.c_str()) != 0);
171 }
172
173 std::string &OgreXmlSerializer::NextNode()
174 {
175 do
176 {
177 if (!m_reader->read())
178 {
179 m_currentNodeName = "";
180 return m_currentNodeName;
181 }
182 }
183 while(m_reader->getNodeType() != irr::io::EXN_ELEMENT);
184
185 CurrentNodeName(true);
186 #if (OGRE_XML_SERIALIZER_DEBUG == 1)
187 DefaultLogger::get()->debug("<" + m_currentNodeName + ">");
188 #endif
189 return m_currentNodeName;
190 }
191
192 bool OgreXmlSerializer::CurrentNodeNameEquals(const std::string &name) const
193 {
194 return (ASSIMP_stricmp(m_currentNodeName, name) == 0);
195 }
196
197 std::string OgreXmlSerializer::CurrentNodeName(bool forceRead)
198 {
199 if (forceRead)
200 m_currentNodeName = std::string(m_reader->getNodeName());
201 return m_currentNodeName;
202 }
203
204 std::string &OgreXmlSerializer::SkipCurrentNode()
205 {
206 #if (OGRE_XML_SERIALIZER_DEBUG == 1)
207 DefaultLogger::get()->debug("Skipping node <" + m_currentNodeName + ">");
208 #endif
209
210 for(;;)
211 {
212 if (!m_reader->read())
213 {
214 m_currentNodeName = "";
215 return m_currentNodeName;
216 }
217 if (m_reader->getNodeType() != irr::io::EXN_ELEMENT_END)
218 continue;
219 else if (std::string(m_reader->getNodeName()) == m_currentNodeName)
220 break;
221 }
222 return NextNode();
223 }
224
225 // Mesh XML constants
226
227 // <mesh>
228 const std::string nnMesh = "mesh";
229 const std::string nnSharedGeometry = "sharedgeometry";
230 const std::string nnSubMeshes = "submeshes";
231 const std::string nnSubMesh = "submesh";
232 const std::string nnSubMeshNames = "submeshnames";
233 const std::string nnSkeletonLink = "skeletonlink";
234 const std::string nnLOD = "levelofdetail";
235 const std::string nnExtremes = "extremes";
236 const std::string nnPoses = "poses";
237 const std::string nnAnimations = "animations";
238
239 // <submesh>
240 const std::string nnFaces = "faces";
241 const std::string nnFace = "face";
242 const std::string nnGeometry = "geometry";
243 const std::string nnTextures = "textures";
244
245 // <mesh/submesh>
246 const std::string nnBoneAssignments = "boneassignments";
247
248 // <sharedgeometry/geometry>
249 const std::string nnVertexBuffer = "vertexbuffer";
250
251 // <vertexbuffer>
252 const std::string nnVertex = "vertex";
253 const std::string nnPosition = "position";
254 const std::string nnNormal = "normal";
255 const std::string nnTangent = "tangent";
256 const std::string nnBinormal = "binormal";
257 const std::string nnTexCoord = "texcoord";
258 const std::string nnColorDiffuse = "colour_diffuse";
259 const std::string nnColorSpecular = "colour_specular";
260
261 // <boneassignments>
262 const std::string nnVertexBoneAssignment = "vertexboneassignment";
263
264 // Skeleton XML constants
265
266 // <skeleton>
267 const std::string nnSkeleton = "skeleton";
268 const std::string nnBones = "bones";
269 const std::string nnBoneHierarchy = "bonehierarchy";
270 const std::string nnAnimationLinks = "animationlinks";
271
272 // <bones>
273 const std::string nnBone = "bone";
274 const std::string nnRotation = "rotation";
275 const std::string nnAxis = "axis";
276 const std::string nnScale = "scale";
277
278 // <bonehierarchy>
279 const std::string nnBoneParent = "boneparent";
280
281 // <animations>
282 const std::string nnAnimation = "animation";
283 const std::string nnTracks = "tracks";
284
285 // <tracks>
286 const std::string nnTrack = "track";
287 const std::string nnKeyFrames = "keyframes";
288 const std::string nnKeyFrame = "keyframe";
289 const std::string nnTranslate = "translate";
290 const std::string nnRotate = "rotate";
291
292 // Common XML constants
293
294 const std::string anX = "x";
295 const std::string anY = "y";
296 const std::string anZ = "z";
297
298 // Mesh
299
300 MeshXml *OgreXmlSerializer::ImportMesh(XmlReader *reader)
301 {
302 OgreXmlSerializer serializer(reader);
303
304 MeshXml *mesh = new MeshXml();
305 serializer.ReadMesh(mesh);
306 return mesh;
307 }
308
309 void OgreXmlSerializer::ReadMesh(MeshXml *mesh)
310 {
311 if (NextNode() != nnMesh) {
312 throw DeadlyImportError("Root node is <" + m_currentNodeName + "> expecting <mesh>");
313 }
314
315 DefaultLogger::get()->debug("Reading Mesh");
316
317 NextNode();
318
319 // Root level nodes
320 while(m_currentNodeName == nnSharedGeometry ||
321 m_currentNodeName == nnSubMeshes ||
322 m_currentNodeName == nnSkeletonLink ||
323 m_currentNodeName == nnBoneAssignments ||
324 m_currentNodeName == nnLOD ||
325 m_currentNodeName == nnSubMeshNames ||
326 m_currentNodeName == nnExtremes ||
327 m_currentNodeName == nnPoses ||
328 m_currentNodeName == nnAnimations)
329 {
330 if (m_currentNodeName == nnSharedGeometry)
331 {
332 mesh->sharedVertexData = new VertexDataXml();
333 ReadGeometry(mesh->sharedVertexData);
334 }
335 else if (m_currentNodeName == nnSubMeshes)
336 {
337 NextNode();
338 while(m_currentNodeName == nnSubMesh) {
339 ReadSubMesh(mesh);
340 }
341 }
342 else if (m_currentNodeName == nnBoneAssignments)
343 {
344 ReadBoneAssignments(mesh->sharedVertexData);
345 }
346 else if (m_currentNodeName == nnSkeletonLink)
347 {
348 mesh->skeletonRef = ReadAttribute<std::string>("name");
349 DefaultLogger::get()->debug("Read skeleton link " + mesh->skeletonRef);
350 NextNode();
351 }
352 // Assimp incompatible/ignored nodes
353 else
354 SkipCurrentNode();
355 }
356 }
357
358 void OgreXmlSerializer::ReadGeometry(VertexDataXml *dest)
359 {
360 dest->count = ReadAttribute<uint32_t>("vertexcount");
361 DefaultLogger::get()->debug(Formatter::format() << " - Reading geometry of " << dest->count << " vertices");
362
363 NextNode();
364 while(m_currentNodeName == nnVertexBuffer) {
365 ReadGeometryVertexBuffer(dest);
366 }
367 }
368
369 void OgreXmlSerializer::ReadGeometryVertexBuffer(VertexDataXml *dest)
370 {
371 bool positions = (HasAttribute("positions") && ReadAttribute<bool>("positions"));
372 bool normals = (HasAttribute("normals") && ReadAttribute<bool>("normals"));
373 bool tangents = (HasAttribute("tangents") && ReadAttribute<bool>("tangents"));
374 uint32_t uvs = (HasAttribute("texture_coords") ? ReadAttribute<uint32_t>("texture_coords") : 0);
375
376 // Not having positions is a error only if a previous vertex buffer did not have them.
377 if (!positions && !dest->HasPositions()) {
378 throw DeadlyImportError("Vertex buffer does not contain positions!");
379 }
380
381 if (positions)
382 {
383 DefaultLogger::get()->debug(" - Contains positions");
384 dest->positions.reserve(dest->count);
385 }
386 if (normals)
387 {
388 DefaultLogger::get()->debug(" - Contains normals");
389 dest->normals.reserve(dest->count);
390 }
391 if (tangents)
392 {
393 DefaultLogger::get()->debug(" - Contains tangents");
394 dest->tangents.reserve(dest->count);
395 }
396 if (uvs > 0)
397 {
398 DefaultLogger::get()->debug(Formatter::format() << " - Contains " << uvs << " texture coords");
399 dest->uvs.resize(uvs);
400 for(size_t i=0, len=dest->uvs.size(); i<len; ++i) {
401 dest->uvs[i].reserve(dest->count);
402 }
403 }
404
405 bool warnBinormal = true;
406 bool warnColorDiffuse = true;
407 bool warnColorSpecular = true;
408
409 NextNode();
410
411 while(m_currentNodeName == nnVertex ||
412 m_currentNodeName == nnPosition ||
413 m_currentNodeName == nnNormal ||
414 m_currentNodeName == nnTangent ||
415 m_currentNodeName == nnBinormal ||
416 m_currentNodeName == nnTexCoord ||
417 m_currentNodeName == nnColorDiffuse ||
418 m_currentNodeName == nnColorSpecular)
419 {
420 if (m_currentNodeName == nnVertex) {
421 NextNode();
422 }
423
424 /// @todo Implement nnBinormal, nnColorDiffuse and nnColorSpecular
425
426 if (positions && m_currentNodeName == nnPosition)
427 {
428 aiVector3D pos;
429 pos.x = ReadAttribute<float>(anX);
430 pos.y = ReadAttribute<float>(anY);
431 pos.z = ReadAttribute<float>(anZ);
432 dest->positions.push_back(pos);
433 }
434 else if (normals && m_currentNodeName == nnNormal)
435 {
436 aiVector3D normal;
437 normal.x = ReadAttribute<float>(anX);
438 normal.y = ReadAttribute<float>(anY);
439 normal.z = ReadAttribute<float>(anZ);
440 dest->normals.push_back(normal);
441 }
442 else if (tangents && m_currentNodeName == nnTangent)
443 {
444 aiVector3D tangent;
445 tangent.x = ReadAttribute<float>(anX);
446 tangent.y = ReadAttribute<float>(anY);
447 tangent.z = ReadAttribute<float>(anZ);
448 dest->tangents.push_back(tangent);
449 }
450 else if (uvs > 0 && m_currentNodeName == nnTexCoord)
451 {
452 for(size_t i=0, len=dest->uvs.size(); i<len; ++i)
453 {
454 if (m_currentNodeName != nnTexCoord) {
455 throw DeadlyImportError("Vertex buffer declared more UVs than can be found in a vertex");
456 }
457
458 aiVector3D uv;
459 uv.x = ReadAttribute<float>("u");
460 uv.y = (ReadAttribute<float>("v") * -1) + 1; // Flip UV from Ogre to Assimp form
461 dest->uvs[i].push_back(uv);
462
463 NextNode();
464 }
465 // Continue main loop as above already read next node
466 continue;
467 }
468 else
469 {
470 /// @todo Remove this stuff once implemented. We only want to log warnings once per element.
471 bool warn = true;
472 if (m_currentNodeName == nnBinormal)
473 {
474 if (warnBinormal)
475 {
476 warnBinormal = false;
477 }
478 else
479 {
480 warn = false;
481 }
482 }
483 else if (m_currentNodeName == nnColorDiffuse)
484 {
485 if (warnColorDiffuse)
486 {
487 warnColorDiffuse = false;
488 }
489 else
490 {
491 warn = false;
492 }
493 }
494 else if (m_currentNodeName == nnColorSpecular)
495 {
496 if (warnColorSpecular)
497 {
498 warnColorSpecular = false;
499 }
500 else
501 {
502 warn = false;
503 }
504 }
505 if (warn) {
506 DefaultLogger::get()->warn("Vertex buffer attribute read not implemented for element: " + m_currentNodeName);
507 }
508 }
509
510 // Advance
511 NextNode();
512 }
513
514 // Sanity checks
515 if (dest->positions.size() != dest->count) {
516 throw DeadlyImportError(Formatter::format() << "Read only " << dest->positions.size() << " positions when should have read " << dest->count);
517 }
518 if (normals && dest->normals.size() != dest->count) {
519 throw DeadlyImportError(Formatter::format() << "Read only " << dest->normals.size() << " normals when should have read " << dest->count);
520 }
521 if (tangents && dest->tangents.size() != dest->count) {
522 throw DeadlyImportError(Formatter::format() << "Read only " << dest->tangents.size() << " tangents when should have read " << dest->count);
523 }
524 for(unsigned int i=0; i<dest->uvs.size(); ++i)
525 {
526 if (dest->uvs[i].size() != dest->count) {
527 throw DeadlyImportError(Formatter::format() << "Read only " << dest->uvs[i].size()
528 << " uvs for uv index " << i << " when should have read " << dest->count);
529 }
530 }
531 }
532
533 void OgreXmlSerializer::ReadSubMesh(MeshXml *mesh)
534 {
535 static const std::string anMaterial = "material";
536 static const std::string anUseSharedVertices = "usesharedvertices";
537 static const std::string anCount = "count";
538 static const std::string anV1 = "v1";
539 static const std::string anV2 = "v2";
540 static const std::string anV3 = "v3";
541 static const std::string anV4 = "v4";
542
543 SubMeshXml* submesh = new SubMeshXml();
544
545 if (HasAttribute(anMaterial)) {
546 submesh->materialRef = ReadAttribute<std::string>(anMaterial);
547 }
548 if (HasAttribute(anUseSharedVertices)) {
549 submesh->usesSharedVertexData = ReadAttribute<bool>(anUseSharedVertices);
550 }
551
552 DefaultLogger::get()->debug(Formatter::format() << "Reading SubMesh " << mesh->subMeshes.size());
553 DefaultLogger::get()->debug(Formatter::format() << " - Material: '" << submesh->materialRef << "'");
554 DefaultLogger::get()->debug(Formatter::format() << " - Uses shared geometry: " << (submesh->usesSharedVertexData ? "true" : "false"));
555
556 // TODO: maybe we have always just 1 faces and 1 geometry and always in this order. this loop will only work correct, when the order
557 // of faces and geometry changed, and not if we have more than one of one
558 /// @todo Fix above comment with better read logic below
559
560 bool quadWarned = false;
561
562 NextNode();
563 while(m_currentNodeName == nnFaces ||
564 m_currentNodeName == nnGeometry ||
565 m_currentNodeName == nnTextures ||
566 m_currentNodeName == nnBoneAssignments)
567 {
568 if (m_currentNodeName == nnFaces)
569 {
570 submesh->indexData->faceCount = ReadAttribute<uint32_t>(anCount);
571 submesh->indexData->faces.reserve(submesh->indexData->faceCount);
572
573 NextNode();
574 while(m_currentNodeName == nnFace)
575 {
576 aiFace face;
577 face.mNumIndices = 3;
578 face.mIndices = new unsigned int[3];
579 face.mIndices[0] = ReadAttribute<uint32_t>(anV1);
580 face.mIndices[1] = ReadAttribute<uint32_t>(anV2);
581 face.mIndices[2] = ReadAttribute<uint32_t>(anV3);
582
583 /// @todo Support quads if Ogre even supports them in XML (I'm not sure but I doubt it)
584 if (!quadWarned && HasAttribute(anV4)) {
585 DefaultLogger::get()->warn("Submesh <face> has quads with <v4>, only triangles are supported at the moment!");
586 quadWarned = true;
587 }
588
589 submesh->indexData->faces.push_back(face);
590
591 // Advance
592 NextNode();
593 }
594
595 if (submesh->indexData->faces.size() == submesh->indexData->faceCount)
596 {
597 DefaultLogger::get()->debug(Formatter::format() << " - Faces " << submesh->indexData->faceCount);
598 }
599 else
600 {
601 throw DeadlyImportError(Formatter::format() << "Read only " << submesh->indexData->faces.size() << " faces when should have read " << submesh->indexData->faceCount);
602 }
603 }
604 else if (m_currentNodeName == nnGeometry)
605 {
606 if (submesh->usesSharedVertexData) {
607 throw DeadlyImportError("Found <geometry> in <submesh> when use shared geometry is true. Invalid mesh file.");
608 }
609
610 submesh->vertexData = new VertexDataXml();
611 ReadGeometry(submesh->vertexData);
612 }
613 else if (m_currentNodeName == nnBoneAssignments)
614 {
615 ReadBoneAssignments(submesh->vertexData);
616 }
617 // Assimp incompatible/ignored nodes
618 else
619 SkipCurrentNode();
620 }
621
622 submesh->index = mesh->subMeshes.size();
623 mesh->subMeshes.push_back(submesh);
624 }
625
626 void OgreXmlSerializer::ReadBoneAssignments(VertexDataXml *dest)
627 {
628 if (!dest) {
629 throw DeadlyImportError("Cannot read bone assignments, vertex data is null.");
630 }
631
632 static const std::string anVertexIndex = "vertexindex";
633 static const std::string anBoneIndex = "boneindex";
634 static const std::string anWeight = "weight";
635
636 std::set<uint32_t> influencedVertices;
637
638 NextNode();
639 while(m_currentNodeName == nnVertexBoneAssignment)
640 {
641 VertexBoneAssignment ba;
642 ba.vertexIndex = ReadAttribute<uint32_t>(anVertexIndex);
643 ba.boneIndex = ReadAttribute<uint16_t>(anBoneIndex);
644 ba.weight = ReadAttribute<float>(anWeight);
645
646 dest->boneAssignments.push_back(ba);
647 influencedVertices.insert(ba.vertexIndex);
648
649 NextNode();
650 }
651
652 /** Normalize bone weights.
653 Some exporters wont care if the sum of all bone weights
654 for a single vertex equals 1 or not, so validate here. */
655 const float epsilon = 0.05f;
656 for(std::set<uint32_t>::const_iterator iter=influencedVertices.begin(), end=influencedVertices.end(); iter != end; ++iter)
657 {
658 const uint32_t vertexIndex = (*iter);
659
660 float sum = 0.0f;
661 for (VertexBoneAssignmentList::const_iterator baIter=dest->boneAssignments.begin(), baEnd=dest->boneAssignments.end(); baIter != baEnd; ++baIter)
662 {
663 if (baIter->vertexIndex == vertexIndex)
664 sum += baIter->weight;
665 }
666 if ((sum < (1.0f - epsilon)) || (sum > (1.0f + epsilon)))
667 {
668 for (VertexBoneAssignmentList::iterator baIter=dest->boneAssignments.begin(), baEnd=dest->boneAssignments.end(); baIter != baEnd; ++baIter)
669 {
670 if (baIter->vertexIndex == vertexIndex)
671 baIter->weight /= sum;
672 }
673 }
674 }
675
676 DefaultLogger::get()->debug(Formatter::format() << " - " << dest->boneAssignments.size() << " bone assignments");
677 }
678
679 // Skeleton
680
681 bool OgreXmlSerializer::ImportSkeleton(Assimp::IOSystem *pIOHandler, MeshXml *mesh)
682 {
683 if (!mesh || mesh->skeletonRef.empty())
684 return false;
685
686 // Highly unusual to see in read world cases but support
687 // XML mesh referencing a binary skeleton file.
688 if (EndsWith(mesh->skeletonRef, ".skeleton", false))
689 {
690 if (OgreBinarySerializer::ImportSkeleton(pIOHandler, mesh))
691 return true;
692
693 /** Last fallback if .skeleton failed to be read. Try reading from
694 .skeleton.xml even if the XML file referenced a binary skeleton.
695 @note This logic was in the previous version and I don't want to break
696 old code that might depends on it. */
697 mesh->skeletonRef = mesh->skeletonRef + ".xml";
698 }
699
700 XmlReaderPtr reader = OpenReader(pIOHandler, mesh->skeletonRef);
701 if (!reader.get())
702 return false;
703
704 Skeleton *skeleton = new Skeleton();
705 OgreXmlSerializer serializer(reader.get());
706 serializer.ReadSkeleton(skeleton);
707 mesh->skeleton = skeleton;
708 return true;
709 }
710
711 bool OgreXmlSerializer::ImportSkeleton(Assimp::IOSystem *pIOHandler, Mesh *mesh)
712 {
713 if (!mesh || mesh->skeletonRef.empty())
714 return false;
715
716 XmlReaderPtr reader = OpenReader(pIOHandler, mesh->skeletonRef);
717 if (!reader.get())
718 return false;
719
720 Skeleton *skeleton = new Skeleton();
721 OgreXmlSerializer serializer(reader.get());
722 serializer.ReadSkeleton(skeleton);
723 mesh->skeleton = skeleton;
724 return true;
725 }
726
727 XmlReaderPtr OgreXmlSerializer::OpenReader(Assimp::IOSystem *pIOHandler, const std::string &filename)
728 {
729 if (!EndsWith(filename, ".skeleton.xml", false))
730 {
731 DefaultLogger::get()->error("Imported Mesh is referencing to unsupported '" + filename + "' skeleton file.");
732 return XmlReaderPtr();
733 }
734
735 if (!pIOHandler->Exists(filename))
736 {
737 DefaultLogger::get()->error("Failed to find skeleton file '" + filename + "' that is referenced by imported Mesh.");
738 return XmlReaderPtr();
739 }
740
741 boost::scoped_ptr<IOStream> file(pIOHandler->Open(filename));
742 if (!file.get()) {
743 throw DeadlyImportError("Failed to open skeleton file " + filename);
744 }
745
746 boost::scoped_ptr<CIrrXML_IOStreamReader> stream(new CIrrXML_IOStreamReader(file.get()));
747 XmlReaderPtr reader = XmlReaderPtr(irr::io::createIrrXMLReader(stream.get()));
748 if (!reader.get()) {
749 throw DeadlyImportError("Failed to create XML reader for skeleton file " + filename);
750 }
751 return reader;
752 }
753
754 void OgreXmlSerializer::ReadSkeleton(Skeleton *skeleton)
755 {
756 if (NextNode() != nnSkeleton) {
757 throw DeadlyImportError("Root node is <" + m_currentNodeName + "> expecting <skeleton>");
758 }
759
760 DefaultLogger::get()->debug("Reading Skeleton");
761
762 // Optional blend mode from root node
763 if (HasAttribute("blendmode")) {
764 skeleton->blendMode = (ToLower(ReadAttribute<std::string>("blendmode")) == "cumulative"
765 ? Skeleton::ANIMBLEND_CUMULATIVE : Skeleton::ANIMBLEND_AVERAGE);
766 }
767
768 NextNode();
769
770 // Root level nodes
771 while(m_currentNodeName == nnBones ||
772 m_currentNodeName == nnBoneHierarchy ||
773 m_currentNodeName == nnAnimations ||
774 m_currentNodeName == nnAnimationLinks)
775 {
776 if (m_currentNodeName == nnBones)
777 ReadBones(skeleton);
778 else if (m_currentNodeName == nnBoneHierarchy)
779 ReadBoneHierarchy(skeleton);
780 else if (m_currentNodeName == nnAnimations)
781 ReadAnimations(skeleton);
782 else
783 SkipCurrentNode();
784 }
785 }
786
787 void OgreXmlSerializer::ReadAnimations(Skeleton *skeleton)
788 {
789 if (skeleton->bones.empty()) {
790 throw DeadlyImportError("Cannot read <animations> for a Skeleton without bones");
791 }
792
793 DefaultLogger::get()->debug(" - Animations");
794
795 NextNode();
796 while(m_currentNodeName == nnAnimation)
797 {
798 Animation *anim = new Animation(skeleton);
799 anim->name = ReadAttribute<std::string>("name");
800 anim->length = ReadAttribute<float>("length");
801
802 if (NextNode() != nnTracks) {
803 throw DeadlyImportError(Formatter::format() << "No <tracks> found in <animation> " << anim->name);
804 }
805
806 ReadAnimationTracks(anim);
807 skeleton->animations.push_back(anim);
808
809 DefaultLogger::get()->debug(Formatter::format() << " " << anim->name << " (" << anim->length << " sec, " << anim->tracks.size() << " tracks)");
810 }
811 }
812
813 void OgreXmlSerializer::ReadAnimationTracks(Animation *dest)
814 {
815 NextNode();
816 while(m_currentNodeName == nnTrack)
817 {
818 VertexAnimationTrack track;
819 track.type = VertexAnimationTrack::VAT_TRANSFORM;
820 track.boneName = ReadAttribute<std::string>("bone");
821
822 if (NextNode() != nnKeyFrames) {
823 throw DeadlyImportError(Formatter::format() << "No <keyframes> found in <track> " << dest->name);
824 }
825
826 ReadAnimationKeyFrames(dest, &track);
827
828 dest->tracks.push_back(track);
829 }
830 }
831
832 void OgreXmlSerializer::ReadAnimationKeyFrames(Animation *anim, VertexAnimationTrack *dest)
833 {
834 const aiVector3D zeroVec(0.f, 0.f, 0.f);
835
836 NextNode();
837 while(m_currentNodeName == nnKeyFrame)
838 {
839 TransformKeyFrame keyframe;
840 keyframe.timePos = ReadAttribute<float>("time");
841
842 NextNode();
843 while(m_currentNodeName == nnTranslate || m_currentNodeName == nnRotate || m_currentNodeName == nnScale)
844 {
845 if (m_currentNodeName == nnTranslate)
846 {
847 keyframe.position.x = ReadAttribute<float>(anX);
848 keyframe.position.y = ReadAttribute<float>(anY);
849 keyframe.position.z = ReadAttribute<float>(anZ);
850 }
851 else if (m_currentNodeName == nnRotate)
852 {
853 float angle = ReadAttribute<float>("angle");
854
855 if (NextNode() != nnAxis) {
856 throw DeadlyImportError("No axis specified for keyframe rotation in animation " + anim->name);
857 }
858
859 aiVector3D axis;
860 axis.x = ReadAttribute<float>(anX);
861 axis.y = ReadAttribute<float>(anY);
862 axis.z = ReadAttribute<float>(anZ);
863 if (axis.Equal(zeroVec))
864 {
865 axis.x = 1.0f;
866 if (angle != 0) {
867 DefaultLogger::get()->warn("Found invalid a key frame with a zero rotation axis in animation: " + anim->name);
868 }
869 }
870 keyframe.rotation = aiQuaternion(axis, angle);
871 }
872 else if (m_currentNodeName == nnScale)
873 {
874 keyframe.scale.x = ReadAttribute<float>(anX);
875 keyframe.scale.y = ReadAttribute<float>(anY);
876 keyframe.scale.z = ReadAttribute<float>(anZ);
877 }
878
879 NextNode();
880 }
881
882 dest->transformKeyFrames.push_back(keyframe);
883 }
884 }
885
886 void OgreXmlSerializer::ReadBoneHierarchy(Skeleton *skeleton)
887 {
888 if (skeleton->bones.empty()) {
889 throw DeadlyImportError("Cannot read <bonehierarchy> for a Skeleton without bones");
890 }
891
892 while(NextNode() == nnBoneParent)
893 {
894 const std::string name = ReadAttribute<std::string>("bone");
895 const std::string parentName = ReadAttribute<std::string>("parent");
896
897 Bone *bone = skeleton->BoneByName(name);
898 Bone *parent = skeleton->BoneByName(parentName);
899
900 if (bone && parent)
901 parent->AddChild(bone);
902 else
903 throw DeadlyImportError("Failed to find bones for parenting: Child " + name + " for parent " + parentName);
904 }
905
906 // Calculate bone matrices for root bones. Recursively calculates their children.
907 for (size_t i=0, len=skeleton->bones.size(); i<len; ++i)
908 {
909 Bone *bone = skeleton->bones[i];
910 if (!bone->IsParented())
911 bone->CalculateWorldMatrixAndDefaultPose(skeleton);
912 }
913 }
914
915 bool BoneCompare(Bone *a, Bone *b)
916 {
917 return (a->id < b->id);
918 }
919
920 void OgreXmlSerializer::ReadBones(Skeleton *skeleton)
921 {
922 DefaultLogger::get()->debug(" - Bones");
923
924 NextNode();
925 while(m_currentNodeName == nnBone)
926 {
927 Bone *bone = new Bone();
928 bone->id = ReadAttribute<uint16_t>("id");
929 bone->name = ReadAttribute<std::string>("name");
930
931 NextNode();
932 while(m_currentNodeName == nnPosition ||
933 m_currentNodeName == nnRotation ||
934 m_currentNodeName == nnScale)
935 {
936 if (m_currentNodeName == nnPosition)
937 {
938 bone->position.x = ReadAttribute<float>(anX);
939 bone->position.y = ReadAttribute<float>(anY);
940 bone->position.z = ReadAttribute<float>(anZ);
941 }
942 else if (m_currentNodeName == nnRotation)
943 {
944 float angle = ReadAttribute<float>("angle");
945
946 if (NextNode() != nnAxis) {
947 throw DeadlyImportError(Formatter::format() << "No axis specified for bone rotation in bone " << bone->id);
948 }
949
950 aiVector3D axis;
951 axis.x = ReadAttribute<float>(anX);
952 axis.y = ReadAttribute<float>(anY);
953 axis.z = ReadAttribute<float>(anZ);
954
955 bone->rotation = aiQuaternion(axis, angle);
956 }
957 else if (m_currentNodeName == nnScale)
958 {
959 /// @todo Implement taking scale into account in matrix/pose calculations!
960 if (HasAttribute("factor"))
961 {
962 float factor = ReadAttribute<float>("factor");
963 bone->scale.Set(factor, factor, factor);
964 }
965 else
966 {
967 if (HasAttribute(anX))
968 bone->scale.x = ReadAttribute<float>(anX);
969 if (HasAttribute(anY))
970 bone->scale.y = ReadAttribute<float>(anY);
971 if (HasAttribute(anZ))
972 bone->scale.z = ReadAttribute<float>(anZ);
973 }
974 }
975
976 NextNode();
977 }
978
979 skeleton->bones.push_back(bone);
980 }
981
982 // Order bones by Id
983 std::sort(skeleton->bones.begin(), skeleton->bones.end(), BoneCompare);
984
985 // Validate that bone indexes are not skipped.
986 /** @note Left this from original authors code, but not sure if this is strictly necessary
987 as per the Ogre skeleton spec. It might be more that other (later) code in this imported does not break. */
988 for (size_t i=0, len=skeleton->bones.size(); i<len; ++i)
989 {
990 Bone *b = skeleton->bones[i];
991 DefaultLogger::get()->debug(Formatter::format() << " " << b->id << " " << b->name);
992
993 if (b->id != static_cast<uint16_t>(i)) {
994 throw DeadlyImportError(Formatter::format() << "Bone ids are not in sequence starting from 0. Missing index " << i);
995 }
996 }
997 }
998
999 } // Ogre
1000 } // Assimp
1001
1002 #endif // ASSIMP_BUILD_NO_OGRE_IMPORTER
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 #ifndef AI_OGREXMLSERIALIZER_H_INC
41 #define AI_OGREXMLSERIALIZER_H_INC
42
43 #ifndef ASSIMP_BUILD_NO_OGRE_IMPORTER
44
45 #include "OgreStructs.h"
46 #include "irrXMLWrapper.h"
47
48 namespace Assimp
49 {
50 namespace Ogre
51 {
52
53 typedef irr::io::IrrXMLReader XmlReader;
54 typedef boost::shared_ptr<XmlReader> XmlReaderPtr;
55
56 class OgreXmlSerializer
57 {
58 public:
59 /// Imports mesh and returns the result.
60 /** @note Fatal unrecoverable errors will throw a DeadlyImportError. */
61 static MeshXml *ImportMesh(XmlReader *reader);
62
63 /// Imports skeleton to @c mesh.
64 /** If mesh does not have a skeleton reference or the skeleton file
65 cannot be found it is not a fatal DeadlyImportError.
66 @return If skeleton import was successful. */
67 static bool ImportSkeleton(Assimp::IOSystem *pIOHandler, MeshXml *mesh);
68 static bool ImportSkeleton(Assimp::IOSystem *pIOHandler, Mesh *mesh);
69
70 private:
71 OgreXmlSerializer(XmlReader *reader) :
72 m_reader(reader)
73 {
74 }
75
76 static XmlReaderPtr OpenReader(Assimp::IOSystem *pIOHandler, const std::string &filename);
77
78 // Mesh
79 void ReadMesh(MeshXml *mesh);
80 void ReadSubMesh(MeshXml *mesh);
81
82 void ReadGeometry(VertexDataXml *dest);
83 void ReadGeometryVertexBuffer(VertexDataXml *dest);
84
85 void ReadBoneAssignments(VertexDataXml *dest);
86
87 // Skeleton
88 void ReadSkeleton(Skeleton *skeleton);
89
90 void ReadBones(Skeleton *skeleton);
91 void ReadBoneHierarchy(Skeleton *skeleton);
92
93 void ReadAnimations(Skeleton *skeleton);
94 void ReadAnimationTracks(Animation *dest);
95 void ReadAnimationKeyFrames(Animation *anim, VertexAnimationTrack *dest);
96
97 template<typename T>
98 T ReadAttribute(const std::string &name) const;
99 bool HasAttribute(const std::string &name) const;
100
101 std::string &NextNode();
102 std::string &SkipCurrentNode();
103
104 bool CurrentNodeNameEquals(const std::string &name) const;
105 std::string CurrentNodeName(bool forceRead = false);
106
107 XmlReader *m_reader;
108 std::string m_currentNodeName;
109 };
110
111 } // Ogre
112 } // Assimp
113
114 #endif // ASSIMP_BUILD_NO_OGRE_IMPORTER
115 #endif // AI_OGREXMLSERIALIZER_H_INC
7373 // That's a serious design flaw, consider redesign.
7474 if( 0 != (pFlags & aiProcess_OptimizeMeshes) ) {
7575 pts = (0 != (pFlags & aiProcess_SortByPType));
76 max_verts = (0 != (pFlags & aiProcess_SplitLargeMeshes)) ? 0xdeadbeef : 0;
76 max_verts = (0 != (pFlags & aiProcess_SplitLargeMeshes)) ? 0xdeadbeef : max_verts;
7777 return true;
7878 }
7979 return false;
114114 }
115115 // ---------------------------------------------------------------------------------
116116 template <class char_t>
117 inline bool SkipLine( const char_t* in, const char_t** out)
117 AI_FORCE_INLINE bool SkipLine( const char_t* in, const char_t** out)
118118 {
119119 while (*in != (char_t)'\r' && *in != (char_t)'\n' && *in != (char_t)'\0')in++;
120120
125125 }
126126 // ---------------------------------------------------------------------------------
127127 template <class char_t>
128 inline bool SkipLine( const char_t** inout)
128 AI_FORCE_INLINE bool SkipLine( const char_t** inout)
129129 {
130130 return SkipLine<char_t>(*inout,inout);
131131 }
132132 // ---------------------------------------------------------------------------------
133133 template <class char_t>
134 inline bool SkipSpacesAndLineEnd( const char_t* in, const char_t** out)
134 AI_FORCE_INLINE bool SkipSpacesAndLineEnd( const char_t* in, const char_t** out)
135135 {
136136 while (*in == (char_t)' ' || *in == (char_t)'\t' ||
137137 *in == (char_t)'\r' || *in == (char_t)'\n')in++;
140140 }
141141 // ---------------------------------------------------------------------------------
142142 template <class char_t>
143 inline bool SkipSpacesAndLineEnd( const char_t** inout)
143 AI_FORCE_INLINE bool SkipSpacesAndLineEnd( const char_t** inout)
144144 {
145145 return SkipSpacesAndLineEnd<char_t>(*inout,inout);
146146 }
147147 // ---------------------------------------------------------------------------------
148148 template <class char_t>
149 inline bool GetNextLine(const char_t*& buffer, char_t out[4096])
149 AI_FORCE_INLINE bool GetNextLine(const char_t*& buffer, char_t out[4096])
150150 {
151151 if ((char_t)'\0' == *buffer)return false;
152152
5656
5757 // we're still here - export successfully completed. Write the file.
5858 boost::scoped_ptr<IOStream> outfile (pIOSystem->Open(pFile,"wt"));
59 if(outfile == NULL) {
60 throw DeadlyExportError("could not open output .ply file: " + std::string(pFile));
61 }
62
5963 outfile->Write( exporter.mOutput.str().c_str(), static_cast<size_t>(exporter.mOutput.tellp()),1);
6064 }
6165
98102
99103 mOutput << "ply" << endl;
100104 mOutput << "format ascii 1.0" << endl;
101 mOutput << "Created by Open Asset Import Library - http://assimp.sf.net (v"
105 mOutput << "comment Created by Open Asset Import Library - http://assimp.sf.net (v"
102106 << aiGetVersionMajor() << '.' << aiGetVersionMinor() << '.'
103107 << aiGetVersionRevision() << ")" << endl;
104108
154158 }
155159
156160 mOutput << "element face " << faces << endl;
157 mOutput << "property list uint uint vertex_indices" << endl;
161 mOutput << "property list uint uint vertex_index" << endl;
158162 mOutput << "end_header" << endl;
159163
160164 for (unsigned int i = 0; i < pScene->mNumMeshes; ++i) {
426426 }
427427
428428 // ------------------------------------------------------------------------------------------------
429 bool PLY::DOM::ParseHeader (const char* pCur,const char** pCurOut)
429 bool PLY::DOM::ParseHeader (const char* pCur,const char** pCurOut,bool isBinary)
430430 {
431431 ai_assert(NULL != pCur && NULL != pCurOut);
432432 DefaultLogger::get()->debug("PLY::DOM::ParseHeader() begin");
457457 SkipLine(&pCur);
458458 }
459459 }
460 SkipSpacesAndLineEnd(pCur,&pCur);
460 if(!isBinary)
461 { // it would occur an error, if binary data start with values as space or line end.
462 SkipSpacesAndLineEnd(pCur,&pCur);
463 }
461464 *pCurOut = pCur;
462465
463466 DefaultLogger::get()->debug("PLY::DOM::ParseHeader() succeeded");
526529
527530 DefaultLogger::get()->debug("PLY::DOM::ParseInstanceBinary() begin");
528531
529 if(!p_pcOut->ParseHeader(pCur,&pCur))
532 if(!p_pcOut->ParseHeader(pCur,&pCur,true))
530533 {
531534 DefaultLogger::get()->debug("PLY::DOM::ParseInstanceBinary() failure");
532535 return false;
549552 DefaultLogger::get()->debug("PLY::DOM::ParseInstance() begin");
550553
551554
552 if(!p_pcOut->ParseHeader(pCur,&pCur))
555 if(!p_pcOut->ParseHeader(pCur,&pCur,false))
553556 {
554557 DefaultLogger::get()->debug("PLY::DOM::ParseInstance() failure");
555558 return false;
433433
434434 // -------------------------------------------------------------------
435435 //! Handle the file header and read all element descriptions
436 bool ParseHeader (const char* pCur,const char** pCurOut);
436 bool ParseHeader (const char* pCur,const char** pCurOut, bool p_bBE);
437437
438438 // -------------------------------------------------------------------
439439 //! Read in all element instance lists
4646 */
4747
4848 #include "AssimpPCH.h"
49 #include "ProcessHelper.h"
4950
5051 #ifndef ASSIMP_BUILD_NO_CALCTANGENTS_PROCESS
5152 # include "CalcTangentsProcess.h"
131132 // validated - as RegisterPPStep() does - all dependencies must be given.
132133 // ----------------------------------------------------------------------------
133134 out.reserve(25);
135 #if (!defined ASSIMP_BUILD_NO_MAKELEFTHANDED_PROCESS)
136 out.push_back( new MakeLeftHandedProcess());
137 #endif
138 #if (!defined ASSIMP_BUILD_NO_FLIPUVS_PROCESS)
139 out.push_back( new FlipUVsProcess());
140 #endif
141 #if (!defined ASSIMP_BUILD_NO_FLIPWINDINGORDER_PROCESS)
142 out.push_back( new FlipWindingOrderProcess());
143 #endif
134144 #if (!defined ASSIMP_BUILD_NO_REMOVEVC_PROCESS)
135145 out.push_back( new RemoveVCProcess());
136146 #endif
143153 #if (!defined ASSIMP_BUILD_NO_OPTIMIZEGRAPH_PROCESS)
144154 out.push_back( new OptimizeGraphProcess());
145155 #endif
156 #if (!defined ASSIMP_BUILD_NO_FINDDEGENERATES_PROCESS)
157 out.push_back( new FindDegeneratesProcess());
158 #endif
159 #ifndef ASSIMP_BUILD_NO_GENUVCOORDS_PROCESS
160 out.push_back( new ComputeUVMappingProcess());
161 #endif
162 #ifndef ASSIMP_BUILD_NO_TRANSFORMTEXCOORDS_PROCESS
163 out.push_back( new TextureTransformStep());
164 #endif
165 #if (!defined ASSIMP_BUILD_NO_PRETRANSFORMVERTICES_PROCESS)
166 out.push_back( new PretransformVertices());
167 #endif
168 #if (!defined ASSIMP_BUILD_NO_TRIANGULATE_PROCESS)
169 out.push_back( new TriangulateProcess());
170 #endif
171 #if (!defined ASSIMP_BUILD_NO_SORTBYPTYPE_PROCESS)
172 out.push_back( new SortByPTypeProcess());
173 #endif
174 #if (!defined ASSIMP_BUILD_NO_FINDINVALIDDATA_PROCESS)
175 out.push_back( new FindInvalidDataProcess());
176 #endif
146177 #if (!defined ASSIMP_BUILD_NO_OPTIMIZEMESHES_PROCESS)
147178 out.push_back( new OptimizeMeshesProcess());
148 #endif
149 #if (!defined ASSIMP_BUILD_NO_FINDDEGENERATES_PROCESS)
150 out.push_back( new FindDegeneratesProcess());
151 #endif
152 #ifndef ASSIMP_BUILD_NO_GENUVCOORDS_PROCESS
153 out.push_back( new ComputeUVMappingProcess());
154 #endif
155 #ifndef ASSIMP_BUILD_NO_TRANSFORMTEXCOORDS_PROCESS
156 out.push_back( new TextureTransformStep());
157 #endif
158 #if (!defined ASSIMP_BUILD_NO_PRETRANSFORMVERTICES_PROCESS)
159 out.push_back( new PretransformVertices());
160 #endif
161 #if (!defined ASSIMP_BUILD_NO_TRIANGULATE_PROCESS)
162 out.push_back( new TriangulateProcess());
163 #endif
164 #if (!defined ASSIMP_BUILD_NO_SORTBYPTYPE_PROCESS)
165 out.push_back( new SortByPTypeProcess());
166 #endif
167 #if (!defined ASSIMP_BUILD_NO_FINDINVALIDDATA_PROCESS)
168 out.push_back( new FindInvalidDataProcess());
169179 #endif
170180 #if (!defined ASSIMP_BUILD_NO_FIXINFACINGNORMALS_PROCESS)
171181 out.push_back( new FixInfacingNormalsProcess());
205215 #if (!defined ASSIMP_BUILD_NO_SPLITLARGEMESHES_PROCESS)
206216 out.push_back( new SplitLargeMeshesProcess_Vertex());
207217 #endif
208 #if (!defined ASSIMP_BUILD_NO_MAKELEFTHANDED_PROCESS)
209 out.push_back( new MakeLeftHandedProcess());
210 #endif
211 #if (!defined ASSIMP_BUILD_NO_FLIPUVS_PROCESS)
212 out.push_back( new FlipUVsProcess());
213 #endif
214 #if (!defined ASSIMP_BUILD_NO_FLIPWINDINGORDER_PROCESS)
215 out.push_back( new FlipWindingOrderProcess());
216 #endif
217 #if (!defined ASSIMP_BUILD_DEBONE_PROCESS)
218 #if (!defined ASSIMP_BUILD_NO_DEBONE_PROCESS)
218219 out.push_back( new DeboneProcess());
219220 #endif
220221 #if (!defined ASSIMP_BUILD_NO_LIMITBONEWEIGHTS_PROCESS)
5656 // ------------------------------------------------------------------------------------------------
5757 // Constructor to be privately used by Importer
5858 PretransformVertices::PretransformVertices()
59 : configKeepHierarchy (false)
59 : configKeepHierarchy (false), configNormalize(false), configTransform(false), configTransformation()
6060 {
6161 }
6262
7878 // Setup import configuration
7979 void PretransformVertices::SetupProperties(const Importer* pImp)
8080 {
81 // Get the current value of AI_CONFIG_PP_PTV_KEEP_HIERARCHY and AI_CONFIG_PP_PTV_NORMALIZE
81 // Get the current value of AI_CONFIG_PP_PTV_KEEP_HIERARCHY, AI_CONFIG_PP_PTV_NORMALIZE,
82 // AI_CONFIG_PP_PTV_ADD_ROOT_TRANSFORMATION and AI_CONFIG_PP_PTV_ROOT_TRANSFORMATION
8283 configKeepHierarchy = (0 != pImp->GetPropertyInteger(AI_CONFIG_PP_PTV_KEEP_HIERARCHY,0));
8384 configNormalize = (0 != pImp->GetPropertyInteger(AI_CONFIG_PP_PTV_NORMALIZE,0));
85 configTransform = (0 != pImp->GetPropertyInteger(AI_CONFIG_PP_PTV_ADD_ROOT_TRANSFORMATION,0));
86
87 configTransformation = pImp->GetPropertyMatrix(AI_CONFIG_PP_PTV_ROOT_TRANSFORMATION, aiMatrix4x4());
8488 }
8589
8690 // ------------------------------------------------------------------------------------------------
390394 ntz->mBones = reinterpret_cast<aiBone**> (&node->mTransformation);
391395
392396 out.push_back(ntz);
397
398 node->mMeshes[i] = numIn + out.size() - 1;
393399 }
394400 }
395401 }
435441 const unsigned int iOldMeshes = pScene->mNumMeshes;
436442 const unsigned int iOldAnimationChannels = pScene->mNumAnimations;
437443 const unsigned int iOldNodes = CountNodes(pScene->mRootNode);
444
445 if(configTransform) {
446 pScene->mRootNode->mTransformation = configTransformation;
447 }
438448
439449 // first compute absolute transformation matrices for all nodes
440450 ComputeAbsoluteTransform(pScene->mRootNode);
5151 namespace Assimp {
5252
5353 // ---------------------------------------------------------------------------
54 /** The PretransformVertices pretransforms all vertices in the nodegraph
54 /** The PretransformVertices pre-transforms all vertices in the node tree
5555 * and removes the whole graph. The output is a list of meshes, one for
5656 * each material.
5757 */
58 class PretransformVertices : public BaseProcess
58 class ASSIMP_API PretransformVertices : public BaseProcess
5959 {
6060 public:
6161
151151
152152
153153 //! Configuration option: keep scene hierarchy as long as possible
154 bool configKeepHierarchy, configNormalize;
155
154 bool configKeepHierarchy;
155 bool configNormalize;
156 bool configTransform;
157 aiMatrix4x4 configTransformation;
156158 };
157159
158160 } // end of namespace Assimp
4141
4242 #include <vector>
4343
44 namespace Assimp
45 {
46 namespace Q3BSP
47 {
44 namespace Assimp {
45 namespace Q3BSP {
4846
4947 static const unsigned int CE_BSP_LIGHTMAPWIDTH = 128;
5048 static const unsigned int CE_BSP_LIGHTMAPHEIGHT = 128;
5351 static const int VERION_Q3LEVEL = 46; ///< Supported version.
5452
5553 /// Geometric type enumeration
56 enum Q3BSPGeoType
57 {
54 enum Q3BSPGeoType {
5855 Polygon = 1,
5956 Patch,
6057 TriangleMesh,
6259 };
6360
6461 /// Integer vector.
65 struct ceVec3i
66 {
62 struct ceVec3i {
6763 int x, y, z;
6864 ceVec3i(): x( 0 ), y( 0 ), z( 0 ) { /* empty */ }
6965 ceVec3i( int iX, int iY=0, int iZ=0) : x( iX ), y( iY ), z( iZ ) { /* empty */ }
7066 };
7167
72 /// Fileheader
73 struct sQ3BSPHeader
74 {
75 char strID[ 4 ]; //!< Should be "IBSP"
76 int iVersion; //!< 46 for standard levels
77 };
78
79 /// Descripes an entry.
68 /// the file header
69 struct sQ3BSPHeader {
70 char strID[ 4 ]; ///< Should be "IBSP"
71 int iVersion; ///< 46 for standard levels
72 };
73
74 /// Describes an entry.
8075 struct sQ3BSPLump
8176 {
82 int iOffset; ///< Offset from startpointer of file
83 int iSize; ///< Size fo part
77 int iOffset; ///< Offset from start pointer of file
78 int iSize; ///< Size of part
8479 };
8580
8681 struct vec2f
107102 struct sQ3BSPFace
108103 {
109104 int iTextureID; ///< Index in texture array
110 int iEffect; ///< Index in effectarray (-1 = no effect)
105 int iEffect; ///< Index in effect array (-1 = no effect)
111106 int iType; ///< 1=Polygon, 2=Patch, 3=Mesh, 4=Billboard
112107 int iVertexIndex; ///< Start index of polygon
113108 int iNumOfVerts; ///< Number of vertices
114109 int iFaceVertexIndex; ///< Index of first mesh vertex
115 int iNumOfFaceVerts; ///< Anzahl der Meshvertices
116 int iLightmapID; ///< Index to the lightmap array
117 int iLMapCorner[ 2 ]; ///< Die Ecke der Lightmap in der Textur
118 int iLMapSize[ 2 ]; ///< Size of the lightmap stored on the texture
119 vec3f vLMapPos; ///< 3D-Ursprung der Lightmap
120 vec3f vLMapVecs[ 2 ]; ///< 3D-s-t-Vektoren
121 vec3f vNormal; ///< Polygonnormale
110 int iNumOfFaceVerts; ///< number of mesh vertices
111 int iLightmapID; ///< Index to the light-map array
112 int iLMapCorner[ 2 ]; ///< edge of the light-map in texture
113 int iLMapSize[ 2 ]; ///< Size of the light-map stored on the texture
114 vec3f vLMapPos; ///< 3D origin of the light-map
115 vec3f vLMapVecs[ 2 ]; ///< 3D-s-t-vectors
116 vec3f vNormal; ///< Polygon normals
122117 int patchWidth, patchHeight; ///< bezier patch
123118 };
124119
125120 /// A quake3 texture name.
126 struct sQ3BSPTexture
127 {
128 char strName[ 64 ]; ///< Name of the texture without extention
121 struct sQ3BSPTexture {
122 char strName[ 64 ]; ///< Name of the texture without extension
129123 int iFlags; ///< Not used
130124 int iContents; ///< Not used
131125 };
132126
133 /// A lightmap of the level, size 128 x 128, RGB components.
134 struct sQ3BSPLightmap
135 {
127 /// A light-map of the level, size 128 x 128, RGB components.
128 struct sQ3BSPLightmap {
136129 unsigned char bLMapData[ CE_BSP_LIGHTMAPSIZE ];
137 sQ3BSPLightmap()
138 {
139 memset(bLMapData, 0, CE_BSP_LIGHTMAPSIZE );
130 sQ3BSPLightmap() {
131 ::memset(bLMapData, 0, CE_BSP_LIGHTMAPSIZE );
140132 }
141133 };
142134
143 struct SubPatch
144 {
135 struct SubPatch {
145136 std::vector<size_t> indices;
146137 int lightmapID;
147138 };
148139
149 enum eLumps
150 {
140 enum eLumps {
151141 kEntities = 0,
152142 kTextures,
153143 kPlanes,
168158 kMaxLumps
169159 };
170160
171 struct Q3BSPModel
172 {
161 struct Q3BSPModel {
173162 std::vector<unsigned char> m_Data;
174163 std::vector<sQ3BSPLump*> m_Lumps;
175164 std::vector<sQ3BSPVertex*> m_Vertices;
194183 // empty
195184 }
196185
197 ~Q3BSPModel()
198 {
199 for ( unsigned int i=0; i<m_Lumps.size(); i++ )
200 if ( NULL != m_Lumps[i] )
201 delete m_Lumps[i];
202
203 for ( unsigned int i=0; i<m_Vertices.size(); i++ )
204 if ( NULL != m_Vertices[ i ] )
205 delete m_Vertices[ i ];
206 for ( unsigned int i=0; i<m_Faces.size(); i++ )
207 if ( NULL != m_Faces[ i ] )
208 delete m_Faces[ i ];
209 for ( unsigned int i=0; i<m_Textures.size(); i++ )
210 if ( NULL != m_Textures[ i ] )
211 delete m_Textures[ i ];
212 for ( unsigned int i=0; i<m_Lightmaps.size(); i++ )
213 if ( NULL != m_Lightmaps[ i ] )
214 delete m_Lightmaps[ i ];
186 ~Q3BSPModel() {
187 for ( unsigned int i=0; i<m_Lumps.size(); i++ ) {
188 delete m_Lumps[ i ];
189 }
190 for ( unsigned int i=0; i<m_Vertices.size(); i++ ) {
191 delete m_Vertices[ i ];
192 }
193 for ( unsigned int i=0; i<m_Faces.size(); i++ ) {
194 delete m_Faces[ i ];
195 }
196 for ( unsigned int i=0; i<m_Textures.size(); i++ ) {
197 delete m_Textures[ i ];
198 }
199 for ( unsigned int i=0; i<m_Lightmaps.size(); i++ ) {
200 delete m_Lightmaps[ i ];
201 }
215202
216203 m_Lumps.clear();
217204 m_Vertices.clear();
7070 "pk3"
7171 };
7272
73 namespace Assimp
74 {
75
73 namespace Assimp {
74
75 static void getSupportedExtensions(std::vector<std::string> &supportedExtensions) {
76 supportedExtensions.push_back( ".jpg" );
77 supportedExtensions.push_back( ".png" );
78 supportedExtensions.push_back( ".tga" );
79 }
80
7681 using namespace Q3BSP;
7782
7883 // ------------------------------------------------------------------------------------------------
8590 }
8691
8792 // ------------------------------------------------------------------------------------------------
88 // Local function to extract the texture ids from a material keyname.
93 // Local function to extract the texture ids from a material key-name.
8994 static void extractIds( const std::string &rKey, int &rId1, int &rId2 )
9095 {
9196 rId1 = -1;
145150
146151 // ------------------------------------------------------------------------------------------------
147152 // Destructor.
148 Q3BSPFileImporter::~Q3BSPFileImporter()
149 {
150 // For lint
153 Q3BSPFileImporter::~Q3BSPFileImporter() {
151154 m_pCurrentMesh = NULL;
152155 m_pCurrentFace = NULL;
153156
154157 // Clear face-to-material map
155 for ( FaceMap::iterator it = m_MaterialLookupMap.begin(); it != m_MaterialLookupMap.end();
156 ++it )
157 {
158 const std::string matName = (*it).first;
159 if ( matName.empty() )
160 {
161 continue;
162 }
163
164 std::vector<Q3BSP::sQ3BSPFace*> *pCurFaceArray = (*it).second;
165 delete pCurFaceArray;
158 for ( FaceMap::iterator it = m_MaterialLookupMap.begin(); it != m_MaterialLookupMap.end(); ++it ) {
159 const std::string &matName = it->first;
160 if ( !matName.empty() ) {
161 delete it->second;
162 }
166163 }
167164 m_MaterialLookupMap.clear();
168165 }
187184
188185 // ------------------------------------------------------------------------------------------------
189186 // Import method.
190 void Q3BSPFileImporter::InternReadFile(const std::string &rFile, aiScene* pScene, IOSystem* /*pIOHandler*/)
191 {
192 Q3BSPZipArchive Archive( rFile );
187 void Q3BSPFileImporter::InternReadFile(const std::string &rFile, aiScene* pScene, IOSystem* pIOHandler)
188 {
189 Q3BSPZipArchive Archive( pIOHandler, rFile );
193190 if ( !Archive.isOpen() )
194191 {
195192 throw DeadlyImportError( "Failed to open file " + rFile + "." );
565562 }
566563
567564 // ------------------------------------------------------------------------------------------------
568 // Counts the number of triangles in a Q3-facearray.
565 // Counts the number of triangles in a Q3-face-array.
569566 size_t Q3BSPFileImporter::countTriangles( const std::vector<Q3BSP::sQ3BSPFace*> &rArray ) const
570567 {
571568 size_t numTriangles = 0;
616613 // Returns the next face.
617614 aiFace *Q3BSPFileImporter::getNextFace( aiMesh *pMesh, unsigned int &rFaceIdx )
618615 {
619 aiFace *pFace = NULL;
620 if ( rFaceIdx < pMesh->mNumFaces )
621 {
616 aiFace *pFace( NULL );
617 if ( rFaceIdx < pMesh->mNumFaces ) {
622618 pFace = &pMesh->mFaces[ rFaceIdx ];
623619 rFaceIdx++;
624620 }
625 else
626 {
627 pFace = NULL;
628 }
629621
630622 return pFace;
631623 }
633625 // ------------------------------------------------------------------------------------------------
634626 // Imports a texture file.
635627 bool Q3BSPFileImporter::importTextureFromArchive( const Q3BSP::Q3BSPModel *pModel,
636 Q3BSP::Q3BSPZipArchive *pArchive, aiScene* /*pScene*/,
637 aiMaterial *pMatHelper, int textureId )
638 {
639 std::vector<std::string> supportedExtensions;
640 supportedExtensions.push_back( ".jpg" );
641 supportedExtensions.push_back( ".png" );
642 if ( NULL == pArchive || NULL == pArchive || NULL == pMatHelper )
643 {
628 Q3BSP::Q3BSPZipArchive *pArchive, aiScene*,
629 aiMaterial *pMatHelper, int textureId ) {
630 if ( NULL == pArchive || NULL == pArchive || NULL == pMatHelper ) {
644631 return false;
645632 }
646633
647 if ( textureId < 0 || textureId >= static_cast<int>( pModel->m_Textures.size() ) )
648 {
634 if ( textureId < 0 || textureId >= static_cast<int>( pModel->m_Textures.size() ) ) {
649635 return false;
650636 }
651637
652638 bool res = true;
653639 sQ3BSPTexture *pTexture = pModel->m_Textures[ textureId ];
654 if ( NULL == pTexture )
655 return false;
656
640 if ( !pTexture ) {
641 return false;
642 }
643
644 std::vector<std::string> supportedExtensions;
645 supportedExtensions.push_back( ".jpg" );
646 supportedExtensions.push_back( ".png" );
647 supportedExtensions.push_back( ".tga" );
657648 std::string textureName, ext;
658 if ( expandFile( pArchive, pTexture->strName, supportedExtensions, textureName, ext ) )
659 {
649 if ( expandFile( pArchive, pTexture->strName, supportedExtensions, textureName, ext ) ) {
660650 IOStream *pTextureStream = pArchive->Open( textureName.c_str() );
661 if ( NULL != pTextureStream )
662 {
651 if ( !pTextureStream ) {
663652 size_t texSize = pTextureStream->FileSize();
664653 aiTexture *pTexture = new aiTexture;
665654 pTexture->mHeight = 0;
669658 (void)readSize;
670659 ai_assert( readSize == pTexture->mWidth );
671660 pTexture->pcData = reinterpret_cast<aiTexel*>( pData );
672 pTexture->achFormatHint[ 0 ] = ext[ 0 ];
673 pTexture->achFormatHint[ 1 ] = ext[ 1 ];
674 pTexture->achFormatHint[ 2 ] = ext[ 2 ];
675 pTexture->achFormatHint[ 2 ] = '\0';
661 pTexture->achFormatHint[ 0 ] = ext[ 1 ];
662 pTexture->achFormatHint[ 1 ] = ext[ 2 ];
663 pTexture->achFormatHint[ 2 ] = ext[ 3 ];
664 pTexture->achFormatHint[ 3 ] = '\0';
676665 res = true;
677666
678667 aiString name;
683672
684673 pMatHelper->AddProperty( &name, AI_MATKEY_TEXTURE_DIFFUSE( 0 ) );
685674 mTextures.push_back( pTexture );
686 }
687 else
688 {
675 } else {
689676 // If it doesn't exist in the archive, it is probably just a reference to an external file.
690677 // We'll leave it up to the user to figure out which extension the file has.
691678 aiString name;
3737 ----------------------------------------------------------------------
3838 */
3939 #include "AssimpPCH.h"
40
41 #ifndef ASSIMP_BUILD_NO_Q3BSP_IMPORTER
42
4043 #include "Q3BSPFileParser.h"
4144 #include "DefaultIOSystem.h"
4245 #include "Q3BSPFileData.h"
272275 // ------------------------------------------------------------------------------------------------
273276
274277 } // Namespace Assimp
278
279 #endif // ASSIMP_BUILD_NO_Q3BSP_IMPORTER
3838 */
3939
4040 #include "AssimpPCH.h"
41
42 #ifndef ASSIMP_BUILD_NO_Q3BSP_IMPORTER
43
4144 #include "Q3BSPZipArchive.h"
4245 #include <algorithm>
4346 #include <cassert>
4447
45 namespace Assimp
46 {
47 namespace Q3BSP
48 {
48 namespace Assimp {
49 namespace Q3BSP {
50
51 voidpf IOSystem2Unzip::open(voidpf opaque, const char* filename, int mode) {
52 IOSystem* io_system = (IOSystem*) opaque;
53
54 const char* mode_fopen = NULL;
55 if((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) {
56 mode_fopen = "rb";
57 } else {
58 if(mode & ZLIB_FILEFUNC_MODE_EXISTING) {
59 mode_fopen = "r+b";
60 } else {
61 if(mode & ZLIB_FILEFUNC_MODE_CREATE) {
62 mode_fopen = "wb";
63 }
64 }
65 }
66
67 return (voidpf) io_system->Open(filename, mode_fopen);
68 }
69
70 uLong IOSystem2Unzip::read(voidpf opaque, voidpf stream, void* buf, uLong size) {
71 IOStream* io_stream = (IOStream*) stream;
72
73 return io_stream->Read(buf, 1, size);
74 }
75
76 uLong IOSystem2Unzip::write(voidpf opaque, voidpf stream, const void* buf, uLong size) {
77 IOStream* io_stream = (IOStream*) stream;
78
79 return io_stream->Write(buf, 1, size);
80 }
81
82 long IOSystem2Unzip::tell(voidpf opaque, voidpf stream) {
83 IOStream* io_stream = (IOStream*) stream;
84
85 return io_stream->Tell();
86 }
87
88 long IOSystem2Unzip::seek(voidpf opaque, voidpf stream, uLong offset, int origin) {
89 IOStream* io_stream = (IOStream*) stream;
90
91 aiOrigin assimp_origin;
92 switch (origin) {
93 default:
94 case ZLIB_FILEFUNC_SEEK_CUR:
95 assimp_origin = aiOrigin_CUR;
96 break;
97 case ZLIB_FILEFUNC_SEEK_END:
98 assimp_origin = aiOrigin_END;
99 break;
100 case ZLIB_FILEFUNC_SEEK_SET:
101 assimp_origin = aiOrigin_SET;
102 break;
103 }
104
105 return (io_stream->Seek(offset, assimp_origin) == aiReturn_SUCCESS ? 0 : -1);
106 }
107
108 int IOSystem2Unzip::close(voidpf opaque, voidpf stream) {
109 IOSystem* io_system = (IOSystem*) opaque;
110 IOStream* io_stream = (IOStream*) stream;
111
112 io_system->Close(io_stream);
113
114 return 0;
115 }
116
117 int IOSystem2Unzip::testerror(voidpf opaque, voidpf stream) {
118 return 0;
119 }
120
121 zlib_filefunc_def IOSystem2Unzip::get(IOSystem* pIOHandler) {
122 zlib_filefunc_def mapping;
123
124 mapping.zopen_file = open;
125 mapping.zread_file = read;
126 mapping.zwrite_file = write;
127 mapping.ztell_file = tell;
128 mapping.zseek_file = seek;
129 mapping.zclose_file = close;
130 mapping.zerror_file = testerror;
131 mapping.opaque = (voidpf) pIOHandler;
132
133 return mapping;
134 }
135
136 // ------------------------------------------------------------------------------------------------
137 ZipFile::ZipFile(size_t size) : m_Size(size) {
138 ai_assert(m_Size != 0);
139
140 m_Buffer = std::malloc(m_Size);
141 }
142
143 ZipFile::~ZipFile() {
144 std::free(m_Buffer);
145 m_Buffer = NULL;
146 }
147
148 size_t ZipFile::Read(void* pvBuffer, size_t pSize, size_t pCount) {
149 const size_t size = pSize * pCount;
150 assert(size <= m_Size);
151
152 std::memcpy(pvBuffer, m_Buffer, size);
153
154 return size;
155 }
156
157 size_t ZipFile::Write(const void* /*pvBuffer*/, size_t /*pSize*/, size_t /*pCount*/) {
158 return 0;
159 }
160
161 size_t ZipFile::FileSize() const {
162 return m_Size;
163 }
164
165 aiReturn ZipFile::Seek(size_t /*pOffset*/, aiOrigin /*pOrigin*/) {
166 return aiReturn_FAILURE;
167 }
168
169 size_t ZipFile::Tell() const {
170 return 0;
171 }
172
173 void ZipFile::Flush() {
174 // empty
175 }
49176
50177 // ------------------------------------------------------------------------------------------------
51178 // Constructor.
52 Q3BSPZipArchive::Q3BSPZipArchive( const std::string& rFile ) :
53 m_ZipFileHandle( NULL ),
54 m_FileList(),
55 m_bDirty( true )
56 {
57 if ( !rFile.empty() )
58 {
59 m_ZipFileHandle = unzOpen( rFile.c_str() );
60 if ( NULL != m_ZipFileHandle )
61 {
179 Q3BSPZipArchive::Q3BSPZipArchive(IOSystem* pIOHandler, const std::string& rFile) : m_ZipFileHandle(NULL), m_ArchiveMap() {
180 if (! rFile.empty()) {
181 zlib_filefunc_def mapping = IOSystem2Unzip::get(pIOHandler);
182
183 m_ZipFileHandle = unzOpen2(rFile.c_str(), &mapping);
184
185 if(m_ZipFileHandle != NULL) {
62186 mapArchive();
63187 }
64188 }
66190
67191 // ------------------------------------------------------------------------------------------------
68192 // Destructor.
69 Q3BSPZipArchive::~Q3BSPZipArchive()
70 {
71 if ( NULL != m_ZipFileHandle )
72 {
73 unzClose( m_ZipFileHandle );
74 }
75 m_ZipFileHandle = NULL;
76 m_FileList.clear();
193 Q3BSPZipArchive::~Q3BSPZipArchive() {
194 for( std::map<std::string, ZipFile*>::iterator it(m_ArchiveMap.begin()), end(m_ArchiveMap.end()); it != end; ++it ) {
195 delete it->second;
196 }
197 m_ArchiveMap.clear();
198
199 if(m_ZipFileHandle != NULL) {
200 unzClose(m_ZipFileHandle);
201 m_ZipFileHandle = NULL;
202 }
77203 }
78204
79205 // ------------------------------------------------------------------------------------------------
80206 // Returns true, if the archive is already open.
81 bool Q3BSPZipArchive::isOpen() const
82 {
83 return ( NULL != m_ZipFileHandle );
207 bool Q3BSPZipArchive::isOpen() const {
208 return (m_ZipFileHandle != NULL);
84209 }
85210
86211 // ------------------------------------------------------------------------------------------------
87212 // Returns true, if the filename is part of the archive.
88 bool Q3BSPZipArchive::Exists( const char* pFile ) const
89 {
90 ai_assert( NULL != pFile );
91 if ( NULL == pFile )
92 {
93 return false;
94 }
95
96 std::string rFile( pFile );
97 std::vector<std::string>::const_iterator it = std::find( m_FileList.begin(), m_FileList.end(), rFile );
98 if ( m_FileList.end() == it )
99 {
100 return false;
101 }
102
103 return true;
213 bool Q3BSPZipArchive::Exists(const char* pFile) const {
214 ai_assert(pFile != NULL);
215
216 bool exist = false;
217
218 if (pFile != NULL) {
219 std::string rFile(pFile);
220 std::map<std::string, ZipFile*>::const_iterator it = m_ArchiveMap.find(rFile);
221
222 if(it != m_ArchiveMap.end()) {
223 exist = true;
224 }
225 }
226
227 return exist;
104228 }
105229
106230 // ------------------------------------------------------------------------------------------------
107231 // Returns the separator delimiter.
108 char Q3BSPZipArchive::getOsSeparator() const
109 {
232 char Q3BSPZipArchive::getOsSeparator() const {
233 #ifndef _WIN32
110234 return '/';
235 #else
236 return '\\';
237 #endif
111238 }
112239
113240 // ------------------------------------------------------------------------------------------------
114241 // Opens a file, which is part of the archive.
115 IOStream *Q3BSPZipArchive::Open( const char* pFile, const char* /*pMode*/ )
116 {
117 ai_assert( NULL != pFile );
118
119 std::string rItem( pFile );
120 std::vector<std::string>::iterator it = std::find( m_FileList.begin(), m_FileList.end(), rItem );
121 if ( m_FileList.end() == it )
122 return NULL;
123
124 ZipFile *pZipFile = new ZipFile( *it, m_ZipFileHandle );
125 m_ArchiveMap[ rItem ] = pZipFile;
126
127 return pZipFile;
242 IOStream *Q3BSPZipArchive::Open(const char* pFile, const char* /*pMode*/) {
243 ai_assert(pFile != NULL);
244
245 IOStream* result = NULL;
246
247 std::map<std::string, ZipFile*>::iterator it = m_ArchiveMap.find(pFile);
248
249 if(it != m_ArchiveMap.end()) {
250 result = (IOStream*) it->second;
251 }
252
253 return result;
128254 }
129255
130256 // ------------------------------------------------------------------------------------------------
131257 // Close a filestream.
132 void Q3BSPZipArchive::Close( IOStream *pFile )
133 {
134 ai_assert( NULL != pFile );
135
136 std::map<std::string, IOStream*>::iterator it;
137 for ( it = m_ArchiveMap.begin(); it != m_ArchiveMap.end(); ++it )
138 {
139 if ( (*it).second == pFile )
140 {
141 ZipFile *pZipFile = reinterpret_cast<ZipFile*>( (*it).second );
142 delete pZipFile;
143 m_ArchiveMap.erase( it );
144 break;
258 void Q3BSPZipArchive::Close(IOStream *pFile) {
259 ai_assert(pFile != NULL);
260
261 // We don't do anything in case the file would be opened again in the future
262 }
263 // ------------------------------------------------------------------------------------------------
264 // Returns the file-list of the archive.
265 void Q3BSPZipArchive::getFileList(std::vector<std::string> &rFileList) {
266 rFileList.clear();
267
268 for(std::map<std::string, ZipFile*>::iterator it(m_ArchiveMap.begin()), end(m_ArchiveMap.end()); it != end; ++it) {
269 rFileList.push_back(it->first);
270 }
271 }
272
273 // ------------------------------------------------------------------------------------------------
274 // Maps the archive content.
275 bool Q3BSPZipArchive::mapArchive() {
276 bool success = false;
277
278 if(m_ZipFileHandle != NULL) {
279 if(m_ArchiveMap.empty()) {
280 // At first ensure file is already open
281 if(unzGoToFirstFile(m_ZipFileHandle) == UNZ_OK) {
282 // Loop over all files
283 do {
284 char filename[FileNameSize];
285 unz_file_info fileInfo;
286
287 if(unzGetCurrentFileInfo(m_ZipFileHandle, &fileInfo, filename, FileNameSize, NULL, 0, NULL, 0) == UNZ_OK) {
288 // The file has EXACTLY the size of uncompressed_size. In C
289 // you need to mark the last character with '\0', so add
290 // another character
291 if(unzOpenCurrentFile(m_ZipFileHandle) == UNZ_OK) {
292 std::pair<std::map<std::string, ZipFile*>::iterator, bool> result = m_ArchiveMap.insert(std::make_pair(filename, new ZipFile(fileInfo.uncompressed_size)));
293
294 if(unzReadCurrentFile(m_ZipFileHandle, result.first->second->m_Buffer, fileInfo.uncompressed_size) == (long int) fileInfo.uncompressed_size) {
295 if(unzCloseCurrentFile(m_ZipFileHandle) == UNZ_OK) {
296 // Nothing to do anymore...
297 }
298 }
299 }
300 }
301 } while(unzGoToNextFile(m_ZipFileHandle) != UNZ_END_OF_LIST_OF_FILE);
302 }
145303 }
146 }
147 }
148 // ------------------------------------------------------------------------------------------------
149 // Returns the file-list of the archive.
150 void Q3BSPZipArchive::getFileList( std::vector<std::string> &rFileList )
151 {
152 rFileList = m_FileList;
153 }
154
155 // ------------------------------------------------------------------------------------------------
156 // Maps the archive content.
157 bool Q3BSPZipArchive::mapArchive()
158 {
159 if ( NULL == m_ZipFileHandle )
160 return false;
161
162 if ( !m_bDirty )
163 return true;
164
165 if ( !m_FileList.empty() )
166 m_FileList.resize( 0 );
167
168 // At first ensure file is already open
169 if ( UNZ_OK == unzGoToFirstFile( m_ZipFileHandle ) )
170 {
171 char filename[ FileNameSize ];
172 unzGetCurrentFileInfo( m_ZipFileHandle, NULL, filename, FileNameSize, NULL, 0, NULL, 0 );
173 m_FileList.push_back( filename );
174 unzCloseCurrentFile( m_ZipFileHandle );
175
176 // Loop over all files
177 while ( unzGoToNextFile( m_ZipFileHandle ) != UNZ_END_OF_LIST_OF_FILE )
178 {
179 char filename[ FileNameSize ];
180 unzGetCurrentFileInfo( m_ZipFileHandle, NULL, filename, FileNameSize, NULL, 0, NULL, 0 );
181 m_FileList.push_back( filename );
182 unzCloseCurrentFile( m_ZipFileHandle );
183 }
184 }
185
186 std::sort( m_FileList.begin(), m_FileList.end() );
187 m_bDirty = false;
188
189 return true;
304
305 success = true;
306 }
307
308 return success;
190309 }
191310
192311 // ------------------------------------------------------------------------------------------------
193312
194313 } // Namespace Q3BSP
195314 } // Namespace Assimp
315
316 #endif // ASSIMP_BUILD_NO_Q3BSP_IMPORTER
4747 #include <map>
4848 #include <cassert>
4949
50 namespace Assimp
51 {
52 namespace Q3BSP
53 {
50 namespace Assimp {
51 namespace Q3BSP {
52
53 // ------------------------------------------------------------------------------------------------
54 /// \class IOSystem2Unzip
55 /// \ingroup Assimp::Q3BSP
56 ///
57 /// \brief
58 // ------------------------------------------------------------------------------------------------
59 class IOSystem2Unzip {
60
61 public:
62
63 static voidpf open(voidpf opaque, const char* filename, int mode);
64
65 static uLong read(voidpf opaque, voidpf stream, void* buf, uLong size);
66
67 static uLong write(voidpf opaque, voidpf stream, const void* buf, uLong size);
68
69 static long tell(voidpf opaque, voidpf stream);
70
71 static long seek(voidpf opaque, voidpf stream, uLong offset, int origin);
72
73 static int close(voidpf opaque, voidpf stream);
74
75 static int testerror(voidpf opaque, voidpf stream);
76
77 static zlib_filefunc_def get(IOSystem* pIOHandler);
78 };
5479
5580 // ------------------------------------------------------------------------------------------------
5681 /// \class ZipFile
5883 ///
5984 /// \brief
6085 // ------------------------------------------------------------------------------------------------
61 class ZipFile : public IOStream
62 {
63 public:
64 ZipFile( const std::string &rFileName, unzFile zipFile ) :
65 m_Name( rFileName ),
66 m_zipFile( zipFile )
67 {
68 ai_assert( NULL != m_zipFile );
69 }
86 class ZipFile : public IOStream {
87
88 friend class Q3BSPZipArchive;
89
90 public:
91
92 ZipFile(size_t size);
7093
71 ~ZipFile()
72 {
73 m_zipFile = NULL;
74 }
94 ~ZipFile();
7595
76 size_t Read(void* pvBuffer, size_t pSize, size_t pCount )
77 {
78 size_t bytes_read = 0;
79 if ( NULL == m_zipFile )
80 return bytes_read;
81
82 // search file and place file pointer there
83 if ( unzLocateFile( m_zipFile, m_Name.c_str(), 0 ) == UNZ_OK )
84 {
85 // get file size, etc.
86 unz_file_info fileInfo;
87 unzGetCurrentFileInfo( m_zipFile, &fileInfo, 0, 0, 0, 0, 0, 0 );
88 const size_t size = pSize * pCount;
89 assert( size <= fileInfo.uncompressed_size );
90
91 // The file has EXACTLY the size of uncompressed_size. In C
92 // you need to mark the last character with '\0', so add
93 // another character
94 unzOpenCurrentFile( m_zipFile );
95 const int ret = unzReadCurrentFile( m_zipFile, pvBuffer, fileInfo.uncompressed_size);
96 size_t filesize = fileInfo.uncompressed_size;
97 if ( ret < 0 || size_t(ret) != filesize )
98 {
99 return 0;
100 }
101 bytes_read = ret;
102 unzCloseCurrentFile( m_zipFile );
103 }
104 return bytes_read;
105 }
96 size_t Read(void* pvBuffer, size_t pSize, size_t pCount );
10697
107 size_t Write(const void* /*pvBuffer*/, size_t /*pSize*/, size_t /*pCount*/)
108 {
109 return 0;
110 }
98 size_t Write(const void* /*pvBuffer*/, size_t /*pSize*/, size_t /*pCount*/);
11199
112 size_t FileSize() const
113 {
114 if ( NULL == m_zipFile )
115 return 0;
116 if ( unzLocateFile( m_zipFile, m_Name.c_str(), 0 ) == UNZ_OK )
117 {
118 unz_file_info fileInfo;
119 unzGetCurrentFileInfo( m_zipFile, &fileInfo, 0, 0, 0, 0, 0, 0 );
120 return fileInfo.uncompressed_size;
121 }
122 return 0;
123 }
100 size_t FileSize() const;
124101
125 aiReturn Seek(size_t /*pOffset*/, aiOrigin /*pOrigin*/)
126 {
127 return aiReturn_FAILURE;
128 }
102 aiReturn Seek(size_t /*pOffset*/, aiOrigin /*pOrigin*/);
129103
130 size_t Tell() const
131 {
132 return 0;
133 }
104 size_t Tell() const;
134105
135 void Flush()
136 {
137 // empty
138 }
106 void Flush();
139107
140 private:
141 std::string m_Name;
142 unzFile m_zipFile;
108 private:
109
110 void* m_Buffer;
111
112 size_t m_Size;
143113 };
144114
145115 // ------------------------------------------------------------------------------------------------
149119 /// \brief IMplements a zip archive like the WinZip archives. Will be also used to import data
150120 /// from a P3K archive ( Quake level format ).
151121 // ------------------------------------------------------------------------------------------------
152 class Q3BSPZipArchive : public Assimp::IOSystem
153 {
154 public:
155 static const unsigned int FileNameSize = 256;
122 class Q3BSPZipArchive : public Assimp::IOSystem {
156123
157 public:
158 Q3BSPZipArchive( const std::string & rFile );
159 ~Q3BSPZipArchive();
160 bool Exists( const char* pFile) const;
161 char getOsSeparator() const;
162 IOStream* Open(const char* pFile, const char* pMode = "rb");
163 void Close( IOStream* pFile);
164 bool isOpen() const;
165 void getFileList( std::vector<std::string> &rFileList );
124 public:
166125
167 private:
168 bool mapArchive();
126 static const unsigned int FileNameSize = 256;
169127
170 private:
171 unzFile m_ZipFileHandle;
172 std::map<std::string, IOStream*> m_ArchiveMap;
173 std::vector<std::string> m_FileList;
174 bool m_bDirty;
128 public:
129
130 Q3BSPZipArchive(IOSystem* pIOHandler, const std::string & rFile);
131
132 ~Q3BSPZipArchive();
133
134 bool Exists(const char* pFile) const;
135
136 char getOsSeparator() const;
137
138 IOStream* Open(const char* pFile, const char* pMode = "rb");
139
140 void Close(IOStream* pFile);
141
142 bool isOpen() const;
143
144 void getFileList(std::vector<std::string> &rFileList);
145
146 private:
147
148 bool mapArchive();
149
150 private:
151
152 unzFile m_ZipFileHandle;
153
154 std::map<std::string, ZipFile*> m_ArchiveMap;
155
175156 };
176157
177158 // ------------------------------------------------------------------------------------------------
378378 light->mColorSpecular = light->mColorDiffuse;
379379
380380
381 // We don't need the rest, but we need to know where
382 // this fucking chunk ends.
381 // We don't need the rest, but we need to know where this chunk ends.
383382 unsigned int temp = (unsigned int)(stream.GetI4() * stream.GetI4());
384383
385384 // skip the background file name
5454 * to those in C or C++ so this code has been moved to a separate
5555 * module.
5656 */
57 class CommentRemover
57 class ASSIMP_API CommentRemover
5858 {
5959 // class cannot be instanced
6060 CommentRemover() {}
8585 {
8686 DefaultLogger::get()->debug("RemoveRedundantMatsProcess begin");
8787
88 unsigned int iCnt = 0, unreferenced = 0;
88 unsigned int redundantRemoved = 0, unreferencedRemoved = 0;
8989 if (pScene->mNumMaterials)
9090 {
9191 // Find out which materials are referenced by meshes
124124 }
125125 }
126126
127
128127 // TODO: reimplement this algorithm to work in-place
129
130128 unsigned int* aiMappingTable = new unsigned int[pScene->mNumMaterials];
131129 unsigned int iNewNum = 0;
132130
138136 aiHashes = new uint32_t[pScene->mNumMaterials];
139137 for (unsigned int i = 0; i < pScene->mNumMaterials;++i)
140138 {
141 // if the material is not referenced ... remove it
142 if (!abReferenced[i]) {
143 ++unreferenced;
139 // No mesh is referencing this material, remove it.
140 if (!abReferenced[i]) {
141 ++unreferencedRemoved;
142 delete pScene->mMaterials[i];
144143 continue;
145144 }
146145
146 // Check all previously mapped materials for a matching hash.
147 // On a match we can delete this material and just make it ref to the same index.
147148 uint32_t me = aiHashes[i] = ComputeMaterialHash(pScene->mMaterials[i]);
148149 for (unsigned int a = 0; a < i;++a)
149150 {
150151 if (abReferenced[a] && me == aiHashes[a]) {
151 ++iCnt;
152 ++redundantRemoved;
152153 me = 0;
153154 aiMappingTable[i] = aiMappingTable[a];
154155 delete pScene->mMaterials[i];
155156 break;
156157 }
157158 }
159 // This is a new material that is referenced, add to the map.
158160 if (me) {
159161 aiMappingTable[i] = iNewNum++;
160162 }
161163 }
162 if (iCnt) {
163 // build an output material list
164 // If the new material count differs from the original,
165 // we need to rebuild the material list and remap mesh material indexes.
166 if (iNewNum != pScene->mNumMaterials) {
164167 aiMaterial** ppcMaterials = new aiMaterial*[iNewNum];
165168 ::memset(ppcMaterials,0,sizeof(void*)*iNewNum);
166169 for (unsigned int p = 0; p < pScene->mNumMaterials;++p)
167170 {
168171 // if the material is not referenced ... remove it
169 if (!abReferenced[p])
172 if (!abReferenced[p]) {
170173 continue;
174 }
171175
172176 // generate new names for all modified materials
173177 const unsigned int idx = aiMappingTable[p];
177181 sz.length = ::sprintf(sz.data,"JoinedMaterial_#%i",p);
178182 ((aiMaterial*)ppcMaterials[idx])->AddProperty(&sz,AI_MATKEY_NAME);
179183 }
180 else ppcMaterials[idx] = pScene->mMaterials[p];
184 else
185 ppcMaterials[idx] = pScene->mMaterials[p];
181186 }
182187 // update all material indices
183 for (unsigned int p = 0; p < pScene->mNumMeshes;++p) {
188 for (unsigned int p = 0; p < pScene->mNumMeshes;++p) {
184189 aiMesh* mesh = pScene->mMeshes[p];
185190 mesh->mMaterialIndex = aiMappingTable[mesh->mMaterialIndex];
186191 }
193198 delete[] aiHashes;
194199 delete[] aiMappingTable;
195200 }
196 if (!iCnt)DefaultLogger::get()->debug("RemoveRedundantMatsProcess finished ");
201 if (redundantRemoved == 0 && unreferencedRemoved == 0)
202 {
203 DefaultLogger::get()->debug("RemoveRedundantMatsProcess finished ");
204 }
197205 else
198206 {
199207 char szBuffer[128]; // should be sufficiently large
200 ::sprintf(szBuffer,"RemoveRedundantMatsProcess finished. %i redundant and %i unused materials",
201 iCnt,unreferenced);
208 ::sprintf(szBuffer,"RemoveRedundantMatsProcess finished. Removed %i redundant and %i unused materials.",
209 redundantRemoved,unreferencedRemoved);
202210 DefaultLogger::get()->info(szBuffer);
203211 }
204212 }
5050 namespace Assimp {
5151
5252 // ---------------------------------------------------------------------------
53 /** RemoveRedundantMatsProcess: Postprocessing steo to remove redundant
53 /** RemoveRedundantMatsProcess: Post-processing step to remove redundant
5454 * materials from the imported scene.
5555 */
56 class RemoveRedundantMatsProcess : public BaseProcess
56 class ASSIMP_API RemoveRedundantMatsProcess : public BaseProcess
5757 {
5858 public:
59 /// The default class constructor.
60 RemoveRedundantMatsProcess();
5961
60 RemoveRedundantMatsProcess();
62 /// The class destructor.
6163 ~RemoveRedundantMatsProcess();
6264
6365 public:
4545 #include "../include/assimp/mesh.h"
4646
4747 class RemoveVCProcessTest;
48 namespace Assimp {
48
49 namespace Assimp {
4950
5051 // ---------------------------------------------------------------------------
5152 /** RemoveVCProcess: Class to exclude specific parts of the data structure
5253 * from further processing by removing them,
5354 */
54 class RemoveVCProcess : public BaseProcess
55 class ASSIMP_API RemoveVCProcess : public BaseProcess
5556 {
5657 public:
58 /// The default class constructor.
59 RemoveVCProcess();
5760
58 RemoveVCProcess();
61 /// The class destructor.
5962 ~RemoveVCProcess();
6063
6164 public:
8487 // -------------------------------------------------------------------
8588 /** Manually setup the configuration flags for the step
8689 *
87 * @param Bitwise combintion of the #aiComponent enumerated values.
90 * @param Bitwise combination of the #aiComponent enumerated values.
8891 */
8992 void SetDeleteFlags(unsigned int f)
9093 {
112115 aiScene* mScene;
113116 };
114117
118 // ---------------------------------------------------------------------------
119
115120 } // end of namespace Assimp
116121
117122 #endif // !!AI_REMOVEVCPROCESS_H_INCLUDED
683683 const char* szCurrent = mBuffer;
684684
685685 // read line per line ...
686 while (true)
686 for ( ;; )
687687 {
688688 if(!SkipSpacesAndLineEnd(szCurrent,&szCurrent)) break;
689689
749749 void SMDImporter::ParseNodesSection(const char* szCurrent,
750750 const char** szCurrentOut)
751751 {
752 while (true)
752 for ( ;; )
753753 {
754754 // "end\n" - Ends the nodes section
755755 if (0 == ASSIMP_strincmp(szCurrent,"end",3) &&
771771 {
772772 // Parse a triangle, parse another triangle, parse the next triangle ...
773773 // and so on until we reach a token that looks quite similar to "end"
774 while (true)
774 for ( ;; )
775775 {
776776 if(!SkipSpacesAndLineEnd(szCurrent,&szCurrent)) break;
777777
789789 const char** szCurrentOut)
790790 {
791791 unsigned int iCurIndex = 0;
792 while (true)
792 for ( ;; )
793793 {
794794 if(!SkipSpacesAndLineEnd(szCurrent,&szCurrent)) break;
795795
832832 const char** szCurrentOut)
833833 {
834834 int iTime = 0;
835 while (true)
835 for ( ;; )
836836 {
837837 if(!SkipSpacesAndLineEnd(szCurrent,&szCurrent)) break;
838838
886886 else ++szCurrent;
887887
888888 const char* szEnd = szCurrent;
889 while (true)
889 for ( ;; )
890890 {
891891 if (bQuota && '\"' == *szEnd)
892892 {
194194 // conversion support.
195195 template <typename T>
196196 const T& ResolveSelect(const DB& db) const {
197 return Couple<T>(db).MustGetObject(To<EXPRESS::ENTITY>())->To<T>();
197 return Couple<T>(db).MustGetObject(To<EXPRESS::ENTITY>())->template To<T>();
198198 }
199199
200200 template <typename T>
201201 const T* ResolveSelectPtr(const DB& db) const {
202202 const EXPRESS::ENTITY* e = ToPtr<EXPRESS::ENTITY>();
203 return e?Couple<T>(db).MustGetObject(*e)->ToPtr<T>():(const T*)0;
203 return e?Couple<T>(db).MustGetObject(*e)->template ToPtr<T>():(const T*)0;
204204 }
205205
206206 public:
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 /** @file STEPFileEncoding.cpp
41 * @brief STEP character handling, string unescaping
42 */
43 #include "AssimpPCH.h"
44 #include "STEPFileEncoding.h"
45 #include "fast_atof.h"
46
47 #include "../contrib/ConvertUTF/ConvertUTF.h"
48
49 using namespace Assimp;
50
51 // roman1 to utf16 table
52 static const UTF16 mac_codetable[] = {
53 // 0x20 unassig./nonprint. slots
54 0x0020 ,
55 0x0021 ,
56 0x0022 ,
57 0x0023 ,
58 0x0024 ,
59 0x0025 ,
60 0x0026 ,
61 0x0027 ,
62 0x0028 ,
63 0x0029 ,
64 0x002A ,
65 0x002B ,
66 0x002C ,
67 0x002D ,
68 0x002E ,
69 0x002F ,
70 0x0030 ,
71 0x0031 ,
72 0x0032 ,
73 0x0033 ,
74 0x0034 ,
75 0x0035 ,
76 0x0036 ,
77 0x0037 ,
78 0x0038 ,
79 0x0039 ,
80 0x003A ,
81 0x003B ,
82 0x003C ,
83 0x003D ,
84 0x003E ,
85 0x003F ,
86 0x0040 ,
87 0x0041 ,
88 0x0042 ,
89 0x0043 ,
90 0x0044 ,
91 0x0045 ,
92 0x0046 ,
93 0x0047 ,
94 0x0048 ,
95 0x0049 ,
96 0x004A ,
97 0x004B ,
98 0x004C ,
99 0x004D ,
100 0x004E ,
101 0x004F ,
102 0x0050 ,
103 0x0051 ,
104 0x0052 ,
105 0x0053 ,
106 0x0054 ,
107 0x0055 ,
108 0x0056 ,
109 0x0057 ,
110 0x0058 ,
111 0x0059 ,
112 0x005A ,
113 0x005B ,
114 0x005C ,
115 0x005D ,
116 0x005E ,
117 0x005F ,
118 0x0060 ,
119 0x0061 ,
120 0x0062 ,
121 0x0063 ,
122 0x0064 ,
123 0x0065 ,
124 0x0066 ,
125 0x0067 ,
126 0x0068 ,
127 0x0069 ,
128 0x006A ,
129 0x006B ,
130 0x006C ,
131 0x006D ,
132 0x006E ,
133 0x006F ,
134 0x0070 ,
135 0x0071 ,
136 0x0072 ,
137 0x0073 ,
138 0x0074 ,
139 0x0075 ,
140 0x0076 ,
141 0x0077 ,
142 0x0078 ,
143 0x0079 ,
144 0x007A ,
145 0x007B ,
146 0x007C ,
147 0x007D ,
148 0x007E ,
149 0x0000 , // unassig.
150 0x00C4 ,
151 0x00C5 ,
152 0x00C7 ,
153 0x00C9 ,
154 0x00D1 ,
155 0x00D6 ,
156 0x00DC ,
157 0x00E1 ,
158 0x00E0 ,
159 0x00E2 ,
160 0x00E4 ,
161 0x00E3 ,
162 0x00E5 ,
163 0x00E7 ,
164 0x00E9 ,
165 0x00E8 ,
166 0x00EA ,
167 0x00EB ,
168 0x00ED ,
169 0x00EC ,
170 0x00EE ,
171 0x00EF ,
172 0x00F1 ,
173 0x00F3 ,
174 0x00F2 ,
175 0x00F4 ,
176 0x00F6 ,
177 0x00F5 ,
178 0x00FA ,
179 0x00F9 ,
180 0x00FB ,
181 0x00FC ,
182 0x2020 ,
183 0x00B0 ,
184 0x00A2 ,
185 0x00A3 ,
186 0x00A7 ,
187 0x2022 ,
188 0x00B6 ,
189 0x00DF ,
190 0x00AE ,
191 0x00A9 ,
192 0x2122 ,
193 0x00B4 ,
194 0x00A8 ,
195 0x2260 ,
196 0x00C6 ,
197 0x00D8 ,
198 0x221E ,
199 0x00B1 ,
200 0x2264 ,
201 0x2265 ,
202 0x00A5 ,
203 0x00B5 ,
204 0x2202 ,
205 0x2211 ,
206 0x220F ,
207 0x03C0 ,
208 0x222B ,
209 0x00AA ,
210 0x00BA ,
211 0x03A9 ,
212 0x00E6 ,
213 0x00F8 ,
214 0x00BF ,
215 0x00A1 ,
216 0x00AC ,
217 0x221A ,
218 0x0192 ,
219 0x2248 ,
220 0x2206 ,
221 0x00AB ,
222 0x00BB ,
223 0x2026 ,
224 0x00A0 ,
225 0x00C0 ,
226 0x00C3 ,
227 0x00D5 ,
228 0x0152 ,
229 0x0153 ,
230 0x2013 ,
231 0x2014 ,
232 0x201C ,
233 0x201D ,
234 0x2018 ,
235 0x2019 ,
236 0x00F7 ,
237 0x25CA ,
238 0x00FF ,
239 0x0178 ,
240 0x2044 ,
241 0x20AC ,
242 0x2039 ,
243 0x203A ,
244 0xFB01 ,
245 0xFB02 ,
246 0x2021 ,
247 0x00B7 ,
248 0x201A ,
249 0x201E ,
250 0x2030 ,
251 0x00C2 ,
252 0x00CA ,
253 0x00C1 ,
254 0x00CB ,
255 0x00C8 ,
256 0x00CD ,
257 0x00CE ,
258 0x00CF ,
259 0x00CC ,
260 0x00D3 ,
261 0x00D4 ,
262 0xF8FF ,
263 0x00D2 ,
264 0x00DA ,
265 0x00DB ,
266 0x00D9 ,
267 0x0131 ,
268 0x02C6 ,
269 0x02DC ,
270 0x00AF ,
271 0x02D8 ,
272 0x02D9 ,
273 0x02DA ,
274 0x00B8 ,
275 0x02DD ,
276 0x02DB ,
277 0x02C7
278 };
279
280 // ------------------------------------------------------------------------------------------------
281 bool STEP::StringToUTF8(std::string& s)
282 {
283 // very basic handling for escaped string sequences
284 // http://doc.spatial.com/index.php?title=InterOp:Connect/STEP&redirect=no
285
286 for (size_t i = 0; i < s.size(); ) {
287 if (s[i] == '\\') {
288 // \S\X - cp1252 (X is the character remapped to [0,127])
289 if (i+3 < s.size() && s[i+1] == 'S' && s[i+2] == '\\') {
290 // http://stackoverflow.com/questions/5586214/how-to-convert-char-from-iso-8859-1-to-utf-8-in-c-multiplatformly
291 ai_assert((uint8_t)s[i+3] < 0x80);
292 const uint8_t ch = s[i+3] + 0x80;
293
294 s[i] = 0xc0 | (ch & 0xc0) >> 6;
295 s[i+1] = 0x80 | (ch & 0x3f);
296
297 s.erase(i + 2,2);
298 ++i;
299 }
300 // \X\xx - mac/roman (xx is a hex sequence)
301 else if (i+4 < s.size() && s[i+1] == 'X' && s[i+2] == '\\') {
302
303 const uint8_t macval = HexOctetToDecimal(s.c_str() + i + 3);
304 if(macval < 0x20) {
305 return false;
306 }
307
308 ai_assert(sizeof(mac_codetable) / sizeof(mac_codetable[0]) == 0x100-0x20);
309
310 const UTF32 unival = mac_codetable[macval - 0x20], *univalp = &unival;
311
312 UTF8 temp[5], *tempp = temp;
313 ai_assert(sizeof(UTF8) == 1);
314
315 if(ConvertUTF32toUTF8(&univalp, univalp+1, &tempp, tempp+sizeof(temp), lenientConversion) != conversionOK) {
316 return false;
317 }
318
319 const size_t outcount = static_cast<size_t>(tempp-temp);
320
321 s.erase(i,5);
322 s.insert(i, reinterpret_cast<char*>(temp), outcount);
323 i += outcount;
324 }
325 // \Xn\ .. \X0\ - various unicode encodings (n=2: utf16; n=4: utf32)
326 else if (i+3 < s.size() && s[i+1] == 'X' && s[i+2] >= '0' && s[i+2] <= '9') {
327 switch(s[i+2]) {
328 // utf16
329 case '2':
330 // utf32
331 case '4':
332 if (s[i+3] == '\\') {
333 const size_t basei = i+4;
334 size_t j = basei, jend = s.size()-4;
335
336 for (; j < jend; ++j) {
337 if (s[j] == '\\' && s[j] == 'X' && s[j] == '0' && s[j] == '\\') {
338 break;
339 }
340 }
341 if (j == jend) {
342 return false;
343 }
344
345 if (j == basei) {
346 s.erase(i,8);
347 continue;
348 }
349
350 if (s[i+2] == '2') {
351 if (((j - basei) % 4) != 0) {
352 return false;
353 }
354
355 const size_t count = (j-basei)/4;
356 boost::scoped_array<UTF16> src(new UTF16[count]);
357
358 const char* cur = s.c_str() + basei;
359 for (size_t k = 0; k < count; ++k, cur += 4) {
360 src[k] = (static_cast<UTF16>(HexOctetToDecimal(cur)) << 8u) |
361 static_cast<UTF16>(HexOctetToDecimal(cur+2));
362 }
363
364 const size_t dcount = count * 3; // this is enough to hold all possible outputs
365 boost::scoped_array<UTF8> dest(new UTF8[dcount]);
366
367 const UTF16* srct = src.get();
368 UTF8* destt = dest.get();
369 if(ConvertUTF16toUTF8(&srct, srct+count, &destt, destt+dcount, lenientConversion) != conversionOK) {
370 return false;
371 }
372
373 const size_t outcount = static_cast<size_t>(destt-dest.get());
374
375 s.erase(i,(j+4-i));
376
377 ai_assert(sizeof(UTF8) == 1);
378 s.insert(i, reinterpret_cast<char*>(dest.get()), outcount);
379
380 i += outcount;
381 continue;
382 }
383 else if (s[i+2] == '4') {
384 if (((j - basei) % 8) != 0) {
385 return false;
386 }
387
388 const size_t count = (j-basei)/8;
389 boost::scoped_array<UTF32> src(new UTF32[count]);
390
391 const char* cur = s.c_str() + basei;
392 for (size_t k = 0; k < count; ++k, cur += 8) {
393 src[k] = (static_cast<UTF32>(HexOctetToDecimal(cur )) << 24u) |
394 (static_cast<UTF32>(HexOctetToDecimal(cur+2)) << 16u) |
395 (static_cast<UTF32>(HexOctetToDecimal(cur+4)) << 8u) |
396 (static_cast<UTF32>(HexOctetToDecimal(cur+6)));
397 }
398
399 const size_t dcount = count * 5; // this is enough to hold all possible outputs
400 boost::scoped_array<UTF8> dest(new UTF8[dcount]);
401
402 const UTF32* srct = src.get();
403 UTF8* destt = dest.get();
404 if(ConvertUTF32toUTF8(&srct, srct+count, &destt, destt+dcount, lenientConversion) != conversionOK) {
405 return false;
406 }
407
408 const size_t outcount = static_cast<size_t>(destt-dest.get());
409
410 s.erase(i,(j+4-i));
411
412 ai_assert(sizeof(UTF8) == 1);
413 s.insert(i, reinterpret_cast<char*>(dest.get()), outcount);
414
415 i += outcount;
416 continue;
417 }
418 }
419
420 break;
421
422 // TODO: other encoding patterns?
423
424 default:
425 return false;
426 }
427 }
428 }
429 ++i;
430 }
431 return true;
432 }
0 /*
1 Open Asset Import Library (assimp)
2 ----------------------------------------------------------------------
3
4 Copyright (c) 2006-2012, assimp team
5 All rights reserved.
6
7 Redistribution and use of this software in source and binary forms,
8 with or without modification, are permitted provided that the
9 following conditions are met:
10
11 * Redistributions of source code must retain the above
12 copyright notice, this list of conditions and the
13 following disclaimer.
14
15 * Redistributions in binary form must reproduce the above
16 copyright notice, this list of conditions and the
17 following disclaimer in the documentation and/or other
18 materials provided with the distribution.
19
20 * Neither the name of the assimp team, nor the names of its
21 contributors may be used to endorse or promote products
22 derived from this software without specific prior
23 written permission of the assimp team.
24
25 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36
37 ----------------------------------------------------------------------
38 */
39
40 #ifndef INCLUDED_AI_STEPFILEENCODING_H
41 #define INCLUDED_AI_STEPFILEENCODING_H
42
43 #include <string>
44
45 namespace Assimp {
46 namespace STEP {
47
48
49 // --------------------------------------------------------------------------
50 // Convert an ASCII STEP identifier with possibly escaped character
51 // sequences using foreign encodings to plain UTF8.
52 //
53 // Return false if an error occurs, s may or may not be modified in
54 // this case and could still contain escape sequences (even partly
55 // escaped ones).
56 bool StringToUTF8(std::string& s);
57
58
59 } // ! STEP
60 } // ! Assimp
61
62 #endif
4343 */
4444 #include "AssimpPCH.h"
4545 #include "STEPFileReader.h"
46 #include "STEPFileEncoding.h"
4647 #include "TinyFormatter.h"
4748 #include "fast_atof.h"
49
4850
4951 using namespace Assimp;
5052 namespace EXPRESS = STEP::EXPRESS;
159161 }
160162
161163
164 namespace {
165
166 // ------------------------------------------------------------------------------------------------
167 // check whether the given line contains an entity definition (i.e. starts with "#<number>=")
168 bool IsEntityDef(const std::string& snext)
169 {
170 if (snext[0] == '#') {
171 // it is only a new entity if it has a '=' after the
172 // entity ID.
173 for(std::string::const_iterator it = snext.begin()+1; it != snext.end(); ++it) {
174 if (*it == '=') {
175 return true;
176 }
177 if ((*it < '0' || *it > '9') && *it != ' ') {
178 break;
179 }
180 }
181 }
182 return false;
183 }
184
185 }
186
187
162188 // ------------------------------------------------------------------------------------------------
163189 void STEP::ReadFile(DB& db,const EXPRESS::ConversionSchema& scheme,
164190 const char* const* types_to_track, size_t len,
170196
171197 const DB::ObjectMap& map = db.GetObjects();
172198 LineSplitter& splitter = db.GetSplitter();
173 for(; splitter; ++splitter) {
174 const std::string& s = *splitter;
199
200 while (splitter) {
201 bool has_next = false;
202 std::string s = *splitter;
175203 if (s == "ENDSEC;") {
176204 break;
177205 }
206 s.erase(std::remove(s.begin(), s.end(), ' '), s.end());
178207
179208 // want one-based line numbers for human readers, so +1
180209 const uint64_t line = splitter.get_index()+1;
181
182210 // LineSplitter already ignores empty lines
183211 ai_assert(s.length());
184212 if (s[0] != '#') {
185213 DefaultLogger::get()->warn(AddLineNumber("expected token \'#\'",line));
214 ++splitter;
186215 continue;
187216 }
188
189217 // ---
190218 // extract id, entity class name and argument string,
191219 // but don't create the actual object yet.
192220 // ---
193
194221 const std::string::size_type n0 = s.find_first_of('=');
195222 if (n0 == std::string::npos) {
196223 DefaultLogger::get()->warn(AddLineNumber("expected token \'=\'",line));
224 ++splitter;
197225 continue;
198226 }
199227
200228 const uint64_t id = strtoul10_64(s.substr(1,n0-1).c_str());
201229 if (!id) {
202230 DefaultLogger::get()->warn(AddLineNumber("expected positive, numeric entity id",line));
231 ++splitter;
203232 continue;
204233 }
205
206 const std::string::size_type n1 = s.find_first_of('(',n0);
234 std::string::size_type n1 = s.find_first_of('(',n0);
207235 if (n1 == std::string::npos) {
208 DefaultLogger::get()->warn(AddLineNumber("expected token \'(\'",line));
209 continue;
210 }
211
212 const std::string::size_type n2 = s.find_last_of(')');
213 if (n2 == std::string::npos || n2 < n1) {
214 DefaultLogger::get()->warn(AddLineNumber("expected token \')\'",line));
215 continue;
236 has_next = true;
237 bool ok = false;
238 for( ++splitter; splitter; ++splitter) {
239 const std::string& snext = *splitter;
240 if (snext.empty()) {
241 continue;
242 }
243
244 // the next line doesn't start an entity, so maybe it is
245 // just a continuation for this line, keep going
246 if (!IsEntityDef(snext)) {
247 s.append(snext);
248 n1 = s.find_first_of('(',n0);
249 ok = (n1 != std::string::npos);
250 }
251 else {
252 break;
253 }
254 }
255
256 if(!ok) {
257 DefaultLogger::get()->warn(AddLineNumber("expected token \'(\'",line));
258 continue;
259 }
260 }
261
262 std::string::size_type n2 = s.find_last_of(')');
263 if (n2 == std::string::npos || n2 < n1 || n2 == s.length() - 1 || s[n2 + 1] != ';') {
264
265 has_next = true;
266 bool ok = false;
267 for( ++splitter; splitter; ++splitter) {
268 const std::string& snext = *splitter;
269 if (snext.empty()) {
270 continue;
271 }
272 // the next line doesn't start an entity, so maybe it is
273 // just a continuation for this line, keep going
274 if (!IsEntityDef(snext)) {
275 s.append(snext);
276 n2 = s.find_last_of(')');
277 ok = !(n2 == std::string::npos || n2 < n1 || n2 == s.length() - 1 || s[n2 + 1] != ';');
278 }
279 else {
280 break;
281 }
282 }
283 if(!ok) {
284 DefaultLogger::get()->warn(AddLineNumber("expected token \')\'",line));
285 continue;
286 }
216287 }
217288
218289 if (map.find(id) != map.end()) {
221292
222293 std::string::size_type ns = n0;
223294 do ++ns; while( IsSpace(s.at(ns)));
224
225295 std::string::size_type ne = n1;
226296 do --ne; while( IsSpace(s.at(ne)));
227
228297 std::string type = s.substr(ns,ne-ns+1);
229298 std::transform( type.begin(), type.end(), type.begin(), &Assimp::ToLower<char> );
230
231299 const char* sz = scheme.GetStaticStringForToken(type);
232300 if(sz) {
233
234301 const std::string::size_type len = n2-n1+1;
235302 char* const copysz = new char[len+1];
236303 std::copy(s.c_str()+n1,s.c_str()+n2+1,copysz);
237304 copysz[len] = '\0';
238
239305 db.InternInsert(new LazyObject(db,id,line,sz,copysz));
306 }
307 if(!has_next) {
308 ++splitter;
240309 }
241310 }
242311
244313 DefaultLogger::get()->warn("STEP: ignoring unexpected EOF");
245314 }
246315
247 if ( !DefaultLogger::isNullLogger() ){
316 if ( !DefaultLogger::isNullLogger()){
248317 DefaultLogger::get()->debug((Formatter::format(),"STEP: got ",map.size()," object records with ",
249318 db.GetRefs().size()," inverse index entries"));
250319 }
251320 }
252321
253
254322 // ------------------------------------------------------------------------------------------------
255323 boost::shared_ptr<const EXPRESS::DataType> EXPRESS::DataType::Parse(const char*& inout,uint64_t line, const EXPRESS::ConversionSchema* schema /*= NULL*/)
256324 {
257325 const char* cur = inout;
258326 SkipSpaces(&cur);
259
260327 if (*cur == ',' || IsSpaceOrNewLine(*cur)) {
261328 throw STEP::SyntaxError("unexpected token, expected parameter",line);
262329 }
338405
339406 inout = cur + 1;
340407
341 return boost::make_shared<EXPRESS::STRING>(std::string(start, static_cast<size_t>(cur - start)));
408 // assimp is supposed to output UTF8 strings, so we have to deal
409 // with foreign encodings.
410 std::string stemp = std::string(start, static_cast<size_t>(cur - start));
411 if(!StringToUTF8(stemp)) {
412 // TODO: route this to a correct logger with line numbers etc., better error messages
413 DefaultLogger::get()->error("an error occurred reading escape sequences in ASCII text");
414 }
415
416 return boost::make_shared<EXPRESS::STRING>(stemp);
342417 }
343418 else if (*cur == '\"' ) {
344419 throw STEP::SyntaxError("binary data not supported yet",line);
435510 --skip_depth;
436511 }
437512
438 if (skip_depth == 1 && *a=='#') {
513 if (skip_depth >= 1 && *a=='#') {
439514 const char* tmp;
440515 const int64_t num = static_cast<int64_t>( strtoul10_64(a+1,&tmp) );
441516 db.MarkRef(num,id);
4646 namespace STEP {
4747
4848 // ### Parsing a STEP file is a twofold procedure ###
49
5049 // --------------------------------------------------------------------------
5150 // 1) read file header and return to caller, who checks if the
5251 // file is of a supported schema ..
5352 DB* ReadFileHeader(boost::shared_ptr<IOStream> stream);
54
5553 // --------------------------------------------------------------------------
5654 // 2) read the actual file contents using a user-supplied set of
5755 // conversion functions to interpret the data.
5957 template <size_t N, size_t N2> inline void ReadFile(DB& db,const EXPRESS::ConversionSchema& scheme, const char* const (&arr)[N], const char* const (&arr2)[N2]) {
6058 return ReadFile(db,scheme,arr,N,arr2,N2);
6159 }
62
63
6460 } // ! STEP
6561 } // ! Assimp
6662
5656
5757 // we're still here - export successfully completed. Write the file.
5858 boost::scoped_ptr<IOStream> outfile (pIOSystem->Open(pFile,"wt"));
59 if(outfile == NULL) {
60 throw DeadlyExportError("could not open output .stl file: " + std::string(pFile));
61 }
62
63 outfile->Write( exporter.mOutput.str().c_str(), static_cast<size_t>(exporter.mOutput.tellp()),1);
64 }
65 void ExportSceneSTLBinary(const char* pFile,IOSystem* pIOSystem, const aiScene* pScene)
66 {
67 // invoke the exporter
68 STLExporter exporter(pFile, pScene, true);
69
70 // we're still here - export successfully completed. Write the file.
71 boost::scoped_ptr<IOStream> outfile (pIOSystem->Open(pFile,"wt"));
72 if(outfile == NULL) {
73 throw DeadlyExportError("could not open output .stl file: " + std::string(pFile));
74 }
75
5976 outfile->Write( exporter.mOutput.str().c_str(), static_cast<size_t>(exporter.mOutput.tellp()),1);
6077 }
6178
6380
6481
6582 // ------------------------------------------------------------------------------------------------
66 STLExporter :: STLExporter(const char* _filename, const aiScene* pScene)
83 STLExporter :: STLExporter(const char* _filename, const aiScene* pScene, bool binary)
6784 : filename(_filename)
6885 , pScene(pScene)
6986 , endl("\n")
7188 // make sure that all formatting happens using the standard, C locale and not the user's current locale
7289 const std::locale& l = std::locale("C");
7390 mOutput.imbue(l);
74
75 const std::string& name = "AssimpScene";
91 if (binary) {
92 char buf[80] = {0} ;
93 buf[0] = 'A'; buf[1] = 's'; buf[2] = 's'; buf[3] = 'i'; buf[4] = 'm'; buf[5] = 'p';
94 buf[6] = 'S'; buf[7] = 'c'; buf[8] = 'e'; buf[9] = 'n'; buf[10] = 'e';
95 mOutput.write(buf, 80);
96 unsigned int meshnum = 0;
97 for(unsigned int i = 0; i < pScene->mNumMeshes; ++i) {
98 for (unsigned int j = 0; j < pScene->mMeshes[i]->mNumFaces; ++j) {
99 meshnum++;
100 }
101 }
102 AI_SWAP4(meshnum);
103 mOutput.write((char *)&meshnum, 4);
104 for(unsigned int i = 0; i < pScene->mNumMeshes; ++i) {
105 WriteMeshBinary(pScene->mMeshes[i]);
106 }
107 } else {
108 const std::string& name = "AssimpScene";
76109
77 mOutput << "solid " << name << endl;
78 for(unsigned int i = 0; i < pScene->mNumMeshes; ++i) {
79 WriteMesh(pScene->mMeshes[i]);
110 mOutput << "solid " << name << endl;
111 for(unsigned int i = 0; i < pScene->mNumMeshes; ++i) {
112 WriteMesh(pScene->mMeshes[i]);
113 }
114 mOutput << "endsolid " << name << endl;
80115 }
81 mOutput << "endsolid " << name << endl;
82116 }
83117
84118 // ------------------------------------------------------------------------------------------------
108142 }
109143 }
110144
145 void STLExporter :: WriteMeshBinary(const aiMesh* m)
146 {
147 for (unsigned int i = 0; i < m->mNumFaces; ++i) {
148 const aiFace& f = m->mFaces[i];
149 // we need per-face normals. We specified aiProcess_GenNormals as pre-requisite for this exporter,
150 // but nonetheless we have to expect per-vertex normals.
151 aiVector3D nor;
152 if (m->mNormals) {
153 for(unsigned int a = 0; a < f.mNumIndices; ++a) {
154 nor += m->mNormals[f.mIndices[a]];
155 }
156 nor.Normalize();
157 }
158 float nx = nor.x, ny = nor.y, nz = nor.z;
159 AI_SWAP4(nx); AI_SWAP4(ny); AI_SWAP4(nz);
160 mOutput.write((char *)&nx, 4); mOutput.write((char *)&ny, 4); mOutput.write((char *)&nz, 4);
161 for(unsigned int a = 0; a < f.mNumIndices; ++a) {
162 const aiVector3D& v = m->mVertices[f.mIndices[a]];
163 float vx = v.x, vy = v.y, vz = v.z;
164 AI_SWAP4(vx); AI_SWAP4(vy); AI_SWAP4(vz);
165 mOutput.write((char *)&vx, 4); mOutput.write((char *)&vy, 4); mOutput.write((char *)&vz, 4);
166 }
167 char dummy[2] = {0};
168 mOutput.write(dummy, 2);
169 }
170 }
171
111172 #endif
5858 {
5959 public:
6060 /// Constructor for a specific scene to export
61 STLExporter(const char* filename, const aiScene* pScene);
61 STLExporter(const char* filename, const aiScene* pScene, bool binary = false);
6262
6363 public:
6464
6868 private:
6969
7070 void WriteMesh(const aiMesh* m);
71 void WriteMeshBinary(const aiMesh* m);
7172
7273 private:
7374
5050
5151 using namespace Assimp;
5252
53 namespace {
5354 static const aiImporterDesc desc = {
5455 "Stereolithography (STL) Importer",
5556 "",
6364 "stl"
6465 };
6566
67 // A valid binary STL buffer should consist of the following elements, in order:
68 // 1) 80 byte header
69 // 2) 4 byte face count
70 // 3) 50 bytes per face
71 bool IsBinarySTL(const char* buffer, unsigned int fileSize) {
72 if (fileSize < 84)
73 return false;
74
75 const uint32_t faceCount = *reinterpret_cast<const uint32_t*>(buffer + 80);
76 const uint32_t expectedBinaryFileSize = faceCount * 50 + 84;
77
78 return expectedBinaryFileSize == fileSize;
79 }
80
81 // An ascii STL buffer will begin with "solid NAME", where NAME is optional.
82 // Note: The "solid NAME" check is necessary, but not sufficient, to determine
83 // if the buffer is ASCII; a binary header could also begin with "solid NAME".
84 bool IsAsciiSTL(const char* buffer, unsigned int fileSize) {
85 if (IsBinarySTL(buffer, fileSize))
86 return false;
87
88 const char* bufferEnd = buffer + fileSize;
89
90 if (!SkipSpaces(&buffer))
91 return false;
92
93 if (buffer + 5 >= bufferEnd)
94 return false;
95
96 return strncmp(buffer, "solid", 5) == 0;
97 }
98 } // namespace
99
66100 // ------------------------------------------------------------------------------------------------
67101 // Constructor to be privately used by Importer
68102 STLImporter::STLImporter()
118152 this->pScene = pScene;
119153 this->mBuffer = &mBuffer2[0];
120154
121 // the default vertex color is white
122 clrColorDefault.r = clrColorDefault.g = clrColorDefault.b = clrColorDefault.a = 1.0f;
155 // the default vertex color is light gray.
156 clrColorDefault.r = clrColorDefault.g = clrColorDefault.b = clrColorDefault.a = 0.6f;
123157
124158 // allocate one mesh
125159 pScene->mNumMeshes = 1;
135169
136170 bool bMatClr = false;
137171
138 // check whether the file starts with 'solid' -
139 // in this case we can simply assume it IS a text file. finished.
140 if (!::strncmp(mBuffer,"solid",5)) {
172 if (IsBinarySTL(mBuffer, fileSize)) {
173 bMatClr = LoadBinaryFile();
174 } else if (IsAsciiSTL(mBuffer, fileSize)) {
141175 LoadASCIIFile();
142 }
143 else bMatClr = LoadBinaryFile();
176 } else {
177 throw DeadlyImportError( "Failed to determine STL storage representation for " + pFile + ".");
178 }
144179
145180 // now copy faces
146181 pMesh->mFaces = new aiFace[pMesh->mNumFaces];
153188 }
154189 }
155190
156 // create a single default material - everything white, as we have vertex colors
191 // create a single default material, using a light gray diffuse color for consistency with
192 // other geometric types (e.g., PLY).
157193 aiMaterial* pcMat = new aiMaterial();
158194 aiString s;
159195 s.Set(AI_DEFAULT_MATERIAL_NAME);
160196 pcMat->AddProperty(&s, AI_MATKEY_NAME);
161197
162 aiColor4D clrDiffuse(1.0f,1.0f,1.0f,1.0f);
198 aiColor4D clrDiffuse(0.6f,0.6f,0.6f,1.0f);
163199 if (bMatClr) {
164200 clrDiffuse = clrColorDefault;
165201 }
178214 {
179215 aiMesh* pMesh = pScene->mMeshes[0];
180216
181 const char* sz = mBuffer + 5; // skip the "solid"
217 const char* sz = mBuffer;
218 SkipSpaces(&sz);
219 ai_assert(!IsLineEnd(sz));
220
221 sz += 5; // skip the "solid"
182222 SkipSpaces(&sz);
183223 const char* szMe = sz;
184224 while (!::IsSpaceOrNewLine(*sz)) {
202242 pMesh->mNormals = new aiVector3D[pMesh->mNumVertices];
203243
204244 unsigned int curFace = 0, curVertex = 3;
205 while (true)
245 for ( ;; )
206246 {
207247 // go to the next token
208248 if(!SkipSpacesAndLineEnd(&sz))
381421
382422 DefaultLogger::get()->info("STL: Mesh has vertex colors");
383423 }
384 aiColor4D* clr = &pMesh->mColors[0][pMesh->mNumFaces*3];
424 aiColor4D* clr = &pMesh->mColors[0][i*3];
385425 clr->a = 1.0f;
386 if (bIsMaterialise) // fuck, this is reversed
426 if (bIsMaterialise) // this is reversed
387427 {
388428 clr->r = (color & 0x31u) / 31.0f;
389429 clr->g = ((color & (0x31u<<5))>>5u) / 31.0f;
880880 }
881881
882882 // ------------------------------------------------------------------------------------------------
883 void SceneCombiner::MergeMaterials(aiMaterial** dest,
884 std::vector<aiMaterial*>::const_iterator begin,
885 std::vector<aiMaterial*>::const_iterator end)
886 {
887 ai_assert(NULL != dest);
888
889 if (begin == end) {
890 *dest = NULL; // no materials ...
891 return;
892 }
893
894 // Allocate the output material
895 aiMaterial* out = *dest = new aiMaterial();
896
897 // Get the maximal number of properties
898 unsigned int size = 0;
899 for (std::vector<aiMaterial*>::const_iterator it = begin; it != end; ++it) {
900 size += (*it)->mNumProperties;
901 }
902
903 out->Clear();
904 delete[] out->mProperties;
905
906 out->mNumAllocated = size;
907 out->mNumProperties = 0;
908 out->mProperties = new aiMaterialProperty*[out->mNumAllocated];
909
910 for (std::vector<aiMaterial*>::const_iterator it = begin; it != end; ++it) {
911 for(unsigned int i = 0; i < (*it)->mNumProperties; ++i) {
912 aiMaterialProperty* sprop = (*it)->mProperties[i];
913
914 // Test if we already have a matching property
915 const aiMaterialProperty* prop_exist;
916 if(aiGetMaterialProperty(out, sprop->mKey.C_Str(), sprop->mType, sprop->mIndex, &prop_exist) != AI_SUCCESS) {
917 // If not, we add it to the new material
918 aiMaterialProperty* prop = out->mProperties[out->mNumProperties] = new aiMaterialProperty();
919
920 prop->mDataLength = sprop->mDataLength;
921 prop->mData = new char[prop->mDataLength];
922 ::memcpy(prop->mData, sprop->mData, prop->mDataLength);
923
924 prop->mIndex = sprop->mIndex;
925 prop->mSemantic = sprop->mSemantic;
926 prop->mKey = sprop->mKey;
927 prop->mType = sprop->mType;
928
929 out->mNumProperties++;
930 }
931 }
932 }
933 }
934
935 // ------------------------------------------------------------------------------------------------
883936 template <typename Type>
884937 inline void CopyPtrArray (Type**& dest, const Type* const * src, unsigned int num)
885938 {
10111064 ai_assert(NULL != _dest && NULL != src);
10121065
10131066 aiMaterial* dest = (aiMaterial*) ( *_dest = new aiMaterial() );
1067
1068 dest->Clear();
1069 delete[] dest->mProperties;
1070
10141071 dest->mNumAllocated = src->mNumAllocated;
10151072 dest->mNumProperties = src->mNumProperties;
10161073 dest->mProperties = new aiMaterialProperty* [dest->mNumAllocated];
247247 static void MergeBones(aiMesh* out,std::vector<aiMesh*>::const_iterator it,
248248 std::vector<aiMesh*>::const_iterator end);
249249
250 // -------------------------------------------------------------------
251 /** Merges two or more materials
252 *
253 * The materials should be complementary as much as possible. In case
254 * of a property present in different materials, the first occurence
255 * is used.
256 *
257 * @param dest Destination material. Must be empty.
258 * @param begin First material to be processed
259 * @param end Points to the material after the last material to be processed
260 */
261 static void MergeMaterials(aiMaterial** dest,
262 std::vector<aiMaterial*>::const_iterator begin,
263 std::vector<aiMaterial*>::const_iterator end);
250264
251265 // -------------------------------------------------------------------
252266 /** Builds a list of uniquely named bones in a mesh list
7171 aiColor3D clr(0.6f,0.6f,0.6f);
7272 helper->AddProperty(&clr,1,AI_MATKEY_COLOR_DIFFUSE);
7373
74 // setup the default name to make this material identifyable
74 // setup the default name to make this material identifiable
7575 name.Set(AI_DEFAULT_MATERIAL_NAME);
7676 helper->AddProperty(&name,AI_MATKEY_NAME);
7777
5353 * importer, such as aiMesh::mPrimitiveTypes.
5454 */
5555 // ----------------------------------------------------------------------------------
56 class ScenePreprocessor
56 class ASSIMP_API ScenePreprocessor
5757 {
5858 // Make ourselves a friend of the corresponding test unit.
5959 friend class ::ScenePreprocessorTest;
5252 ScenePrivateData()
5353 : mOrigImporter()
5454 , mPPStepsApplied()
55 , mIsCopy()
5556 {}
5657
5758 // Importer that originally loaded the scene though the C-API
6061
6162 // List of postprocessing steps already applied to the scene.
6263 unsigned int mPPStepsApplied;
64
65 // true if the scene is a copy made with aiCopyScene()
66 // or the corresponding C++ API. This means that user code
67 // may have made modifications to it, so mPPStepsApplied
68 // and mOrigImporter are no longer safe to rely on and only
69 // serve informative purposes.
70 bool mIsCopy;
6371 };
6472
6573 // Access private data stored in the scene
5151 {
5252 // let the rest uninitialized for performance - in release builds.
5353 // in debug builds set all indices to a common magic value
54 #ifdef _DEBUG
54 #ifdef ASSIMP_BUILD_DEBUG
5555 this->mIndices[0] = 0xffffffff;
5656 this->mIndices[1] = 0xffffffff;
5757 this->mIndices[2] = 0xffffffff;
150150 std::vector<unsigned int>::iterator meshIdx = replaceMeshIndex.begin();
151151 for (unsigned int i = 0; i < pScene->mNumMeshes;++i)
152152 {
153 aiMesh* mesh = pScene->mMeshes[i];
153 aiMesh* const mesh = pScene->mMeshes[i];
154154 ai_assert(0 != mesh->mPrimitiveTypes);
155155
156156 // if there's just one primitive type in the mesh there's nothing to do for us
366366
367367 // delete the input mesh
368368 delete mesh;
369
370 // avoid invalid pointer
371 pScene->mMeshes[i] = NULL;
369372 }
370373
371374 if (outMeshes.empty())
5454 * A mesh with 5 lines, 3 points and 145 triangles would be split in 3
5555 * submeshes.
5656 */
57 class SortByPTypeProcess : public BaseProcess
57 class ASSIMP_API SortByPTypeProcess : public BaseProcess
5858 {
5959 public:
6060
328328 ++t;
329329 }
330330
331 #ifdef _DEBUG
331 #ifdef ASSIMP_BUILD_DEBUG
332332
333333 // debug invariant: mPositions[i].mIndex values must range from 0 to mPositions.size()-1
334334 for (size_t i = 0; i < fill.size(); ++i) {
7575 #endif
7676
7777 // ---------------------------------------------------------------------------
78 /** Postprocessing filter to split large meshes into submeshes
78 /** Post-processing filter to split large meshes into sub-meshes
7979 *
8080 * Applied BEFORE the JoinVertices-Step occurs.
8181 * Returns NON-UNIQUE vertices, splits by triangle number.
8282 */
83 class SplitLargeMeshesProcess_Triangle : public BaseProcess
83 class ASSIMP_API SplitLargeMeshesProcess_Triangle : public BaseProcess
8484 {
8585 friend class SplitLargeMeshesProcess_Vertex;
8686
143143
144144
145145 // ---------------------------------------------------------------------------
146 /** Postprocessing filter to split large meshes into submeshes
146 /** Post-processing filter to split large meshes into sub-meshes
147147 *
148148 * Applied AFTER the JoinVertices-Step occurs.
149149 * Returns UNIQUE vertices, splits by vertex number.
150150 */
151 class SplitLargeMeshesProcess_Vertex : public BaseProcess
151 class ASSIMP_API SplitLargeMeshesProcess_Vertex : public BaseProcess
152152 {
153153 public:
154154
192192
193193 // ---------------------------------------------------------------------
194194 /** Increase the file pointer (relative seeking) */
195 void IncPtr(int plus) {
195 void IncPtr(size_t plus) {
196196 current += plus;
197197 if (current > limit) {
198198 throw DeadlyImportError("End of file or read limit was reached");
8686 // print all future zeroes from now
8787 mustPrint = true;
8888
89 *out++ = '0'+digit;
89 *out++ = '0'+static_cast<char>(digit);
9090
9191 ++written;
9292 number -= digit*cur;
382382 }
383383
384384 // check the other way round for consistency
385 #ifdef _DEBUG
385 #ifdef ASSIMP_BUILD_DEBUG
386386
387387 for (size_t t = 0; t < ofsadjvec.size()-1; ++t) {
388388 for (unsigned int m = 0; m < cntadjfac[t]; ++m) {
529529
530530 ai_assert(adj[o]-moffsets[nidx].first < mp->mNumFaces);
531531 const aiFace& f = mp->mFaces[adj[o]-moffsets[nidx].first];
532 # ifdef _DEBUG
532 # ifdef ASSIMP_BUILD_DEBUG
533533 bool haveit = false;
534534 # endif
535535
552552 // fixme: replace with mod face.mNumIndices?
553553 R += c0.midpoint+c1.midpoint;
554554
555 # ifdef _DEBUG
555 # ifdef ASSIMP_BUILD_DEBUG
556556 haveit = true;
557557 # endif
558558 break;
8989 underlying << sin;
9090 }
9191
92
93 // The problem described here:
94 // https://sourceforge.net/tracker/?func=detail&atid=1067632&aid=3358562&group_id=226462
95 // can also cause trouble here. Apparently, older gcc versions sometimes copy temporaries
96 // being bound to const ref& function parameters. Copying streams is not permitted, though.
97 // This workaround avoids this by manually specifying a copy ctor.
98 #if !defined(__GNUC__) || !defined(__APPLE__) || __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)
99 basic_formatter(const basic_formatter& other) {
100 underlying << (string)other;
101 }
102 #endif
103
104
92105 public:
93106
94107 operator string () const {
187187 FILE* fout = fopen(POLY_OUTPUT_FILE,"a");
188188 #endif
189189
190 const aiVector3D* verts = pMesh->mVertices;
191
190192 // use boost::scoped_array to avoid slow std::vector<bool> specialiations
191193 boost::scoped_array<bool> done(new bool[max_out]);
192194 for( unsigned int a = 0; a < pMesh->mNumFaces; a++) {
215217
216218 face.mIndices = NULL;
217219 continue;
218 } /* does not handle concave quads
220 }
219221 // optimized code for quadrilaterals
220222 else if ( face.mNumIndices == 4) {
223
224 // quads can have at maximum one concave vertex. Determine
225 // this vertex (if it exists) and start tri-fanning from
226 // it.
227 unsigned int start_vertex = 0;
228 for (unsigned int i = 0; i < 4; ++i) {
229 const aiVector3D& v0 = verts[face.mIndices[(i+3) % 4]];
230 const aiVector3D& v1 = verts[face.mIndices[(i+2) % 4]];
231 const aiVector3D& v2 = verts[face.mIndices[(i+1) % 4]];
232
233 const aiVector3D& v = verts[face.mIndices[i]];
234
235 aiVector3D left = (v0-v);
236 aiVector3D diag = (v1-v);
237 aiVector3D right = (v2-v);
238
239 left.Normalize();
240 diag.Normalize();
241 right.Normalize();
242
243 const float angle = acos(left*diag) + acos(right*diag);
244 if (angle > AI_MATH_PI_F) {
245 // this is the concave point
246 start_vertex = i;
247 break;
248 }
249 }
250
251 const unsigned int temp[] = {face.mIndices[0], face.mIndices[1], face.mIndices[2], face.mIndices[3]};
252
221253 aiFace& nface = *curOut++;
222254 nface.mNumIndices = 3;
223255 nface.mIndices = face.mIndices;
224256
257 nface.mIndices[0] = temp[start_vertex];
258 nface.mIndices[1] = temp[(start_vertex + 1) % 4];
259 nface.mIndices[2] = temp[(start_vertex + 2) % 4];
260
225261 aiFace& sface = *curOut++;
226262 sface.mNumIndices = 3;
227263 sface.mIndices = new unsigned int[3];
228264
229 sface.mIndices[0] = face.mIndices[0];
230 sface.mIndices[1] = face.mIndices[2];
231 sface.mIndices[2] = face.mIndices[3];
232
265 sface.mIndices[0] = temp[start_vertex];
266 sface.mIndices[1] = temp[(start_vertex + 2) % 4];
267 sface.mIndices[2] = temp[(start_vertex + 3) % 4];
268
269 // prevent double deletion of the indices field
233270 face.mIndices = NULL;
234271 continue;
235 } */
272 }
236273 else
237274 {
238275 // A polygon with more than 3 vertices can be either concave or convex.
245282 // We project it onto a plane to get a 2d triangle.
246283
247284 // Collect all vertices of of the polygon.
248 const aiVector3D* verts = pMesh->mVertices;
249285 for (tmp = 0; tmp < max; ++tmp) {
250286 temp_verts3d[tmp] = verts[idx[tmp]];
251287 }
4848 struct aiMesh;
4949
5050 class TriangulateProcessTest;
51 namespace Assimp
52 {
51
52 namespace Assimp {
5353
5454 // ---------------------------------------------------------------------------
5555 /** The TriangulateProcess splits up all faces with more than three indices
5656 * into triangles. You usually want this to happen because the graphics cards
5757 * need their data as triangles.
5858 */
59 class TriangulateProcess : public BaseProcess
59 class ASSIMP_API TriangulateProcess : public BaseProcess
6060 {
6161 public:
6262
8585 ai_assert(iLen > 0);
8686
8787 va_end(args);
88 #ifdef _DEBUG
88 #ifdef ASSIMP_BUILD_DEBUG
8989 ai_assert( false );
9090 #endif
9191 throw DeadlyImportError("Validation failed: " + std::string(szBuffer,iLen));
8181 /** Report a validation error. This will throw an exception,
8282 * control won't return.
8383 * @param msg Format string for sprintf().*/
84 AI_WONT_RETURN void ReportError(const char* msg,...);
84 AI_WONT_RETURN void ReportError(const char* msg,...) AI_WONT_RETURN_SUFFIX;
8585
8686
8787 // -------------------------------------------------------------------
4747 #ifndef AI_VERTEX_H_INC
4848 #define AI_VERTEX_H_INC
4949
50 #include <functional>
5051
5152 namespace Assimp {
5253
5555 * @note Although it is called #VertexTriangleAdjacency, the current version does also
5656 * support arbitrary polygons. */
5757 // --------------------------------------------------------------------------------------------
58 class VertexTriangleAdjacency
58 class ASSIMP_API VertexTriangleAdjacency
5959 {
6060 public:
6161
8484 aiColor3D mEmissive;
8585 std::vector<TexEntry> mTextures;
8686
87 Material() { mIsReference = false; }
87 size_t sceneIndex; ///< the index under which it was stored in the scene's material list
88
89 Material() { mIsReference = false; sceneIndex = SIZE_MAX; }
8890 };
8991
9092 /** Helper structure to represent a bone weight */
5151 using namespace Assimp;
5252
5353 static const aiImporterDesc desc = {
54 "Collada Importer",
54 "Direct3D XFile Importer",
5555 "",
5656 "",
5757 "",
109109 if( fileSize < 16)
110110 throw DeadlyImportError( "XFile is too small.");
111111
112 // need to clear members - this method might be called multiple
113 // times on a single XFileImporter instance.
114 mImportedMats.clear();
115
116112 // in the hope that binary files will never start with a BOM ...
117113 mBuffer.resize( fileSize + 1);
118114 file->Read( &mBuffer.front(), 1, fileSize);
131127
132128 // ------------------------------------------------------------------------------------------------
133129 // Constructs the return data structure out of the imported data.
134 void XFileImporter::CreateDataRepresentationFromImport( aiScene* pScene, const XFile::Scene* pData)
130 void XFileImporter::CreateDataRepresentationFromImport( aiScene* pScene, XFile::Scene* pData)
135131 {
136132 // Read the global materials first so that meshes referring to them can find them later
137133 ConvertMaterials( pScene, pData->mGlobalMaterials);
232228 std::vector<aiMesh*> meshes;
233229 for( unsigned int a = 0; a < pMeshes.size(); a++)
234230 {
235 const XFile::Mesh* sourceMesh = pMeshes[a];
236 // first convert its materials so that we can find them when searching by name afterwards
231 XFile::Mesh* sourceMesh = pMeshes[a];
232 // first convert its materials so that we can find them with their index afterwards
237233 ConvertMaterials( pScene, sourceMesh->mMaterials);
238234
239235 unsigned int numMaterials = std::max( (unsigned int)sourceMesh->mMaterials.size(), 1u);
271267 aiMesh* mesh = new aiMesh;
272268 meshes.push_back( mesh);
273269
274 // find the material by name in the scene's material list. Either own material
275 // or referenced material, it should already be found there
270 // find the material in the scene's material list. Either own material
271 // or referenced material, it should already have a valid index
276272 if( sourceMesh->mFaceMaterials.size() > 0)
277273 {
278 std::map<std::string, unsigned int>::const_iterator matIt = mImportedMats.find( sourceMesh->mMaterials[b].mName);
279 if( matIt == mImportedMats.end())
280 mesh->mMaterialIndex = 0;
281 else
282 mesh->mMaterialIndex = matIt->second;
274 mesh->mMaterialIndex = sourceMesh->mMaterials[b].sceneIndex;
283275 } else
284276 {
285277 mesh->mMaterialIndex = 0;
553545
554546 // ------------------------------------------------------------------------------------------------
555547 // Converts all materials in the given array and stores them in the scene's material list.
556 void XFileImporter::ConvertMaterials( aiScene* pScene, const std::vector<XFile::Material>& pMaterials)
548 void XFileImporter::ConvertMaterials( aiScene* pScene, std::vector<XFile::Material>& pMaterials)
557549 {
558550 // count the non-referrer materials in the array
559 unsigned int numMaterials = 0;
551 unsigned int numNewMaterials = 0;
560552 for( unsigned int a = 0; a < pMaterials.size(); a++)
561553 if( !pMaterials[a].mIsReference)
562 numMaterials++;
563
564 if( numMaterials == 0)
565 return;
554 numNewMaterials++;
566555
567556 // resize the scene's material list to offer enough space for the new materials
568 aiMaterial** prevMats = pScene->mMaterials;
569 pScene->mMaterials = new aiMaterial*[pScene->mNumMaterials + numMaterials];
570 if( prevMats)
571 {
572 memcpy( pScene->mMaterials, prevMats, pScene->mNumMaterials * sizeof( aiMaterial*));
573 delete [] prevMats;
574 }
557 if( numNewMaterials > 0 )
558 {
559 aiMaterial** prevMats = pScene->mMaterials;
560 pScene->mMaterials = new aiMaterial*[pScene->mNumMaterials + numNewMaterials];
561 if( prevMats)
562 {
563 memcpy( pScene->mMaterials, prevMats, pScene->mNumMaterials * sizeof( aiMaterial*));
564 delete [] prevMats;
565 }
566 }
575567
576568 // convert all the materials given in the array
577569 for( unsigned int a = 0; a < pMaterials.size(); a++)
578570 {
579 const XFile::Material& oldMat = pMaterials[a];
571 XFile::Material& oldMat = pMaterials[a];
580572 if( oldMat.mIsReference)
581 continue;
573 {
574 // find the material it refers to by name, and store its index
575 for( size_t a = 0; a < pScene->mNumMaterials; ++a )
576 {
577 aiString name;
578 pScene->mMaterials[a]->Get( AI_MATKEY_NAME, name);
579 if( strcmp( name.C_Str(), oldMat.mName.data()) == 0 )
580 {
581 oldMat.sceneIndex = a;
582 break;
583 }
584 }
585
586 if( oldMat.sceneIndex == SIZE_MAX )
587 {
588 DefaultLogger::get()->warn( boost::str( boost::format( "Could not resolve global material reference \"%s\"") % oldMat.mName));
589 oldMat.sceneIndex = 0;
590 }
591
592 continue;
593 }
582594
583595 aiMaterial* mat = new aiMaterial;
584596 aiString name;
593605
594606 mat->AddProperty<int>( &shadeMode, 1, AI_MATKEY_SHADING_MODEL);
595607 // material colours
596 // FIX: Setup this as ambient not as emissive color
597 mat->AddProperty( &oldMat.mEmissive, 1, AI_MATKEY_COLOR_AMBIENT);
608 // Unclear: there's no ambient colour, but emissive. What to put for ambient?
609 // Probably nothing at all, let the user select a suitable default.
610 mat->AddProperty( &oldMat.mEmissive, 1, AI_MATKEY_COLOR_EMISSIVE);
598611 mat->AddProperty( &oldMat.mDiffuse, 1, AI_MATKEY_COLOR_DIFFUSE);
599612 mat->AddProperty( &oldMat.mSpecular, 1, AI_MATKEY_COLOR_SPECULAR);
600613 mat->AddProperty( &oldMat.mSpecularExponent, 1, AI_MATKEY_SHININESS);
676689 }
677690
678691 pScene->mMaterials[pScene->mNumMaterials] = mat;
679 mImportedMats[oldMat.mName] = pScene->mNumMaterials;
692 oldMat.sceneIndex = pScene->mNumMaterials;
680693 pScene->mNumMaterials++;
681694 }
682695 }
9898 * @param pData The imported data in the internal temporary
9999 * representation.
100100 */
101 void CreateDataRepresentationFromImport( aiScene* pScene,
102 const XFile::Scene* pData);
101 void CreateDataRepresentationFromImport( aiScene* pScene, XFile::Scene* pData);
103102
104103 // -------------------------------------------------------------------
105104 /** Recursively creates scene nodes from the imported hierarchy.
138137 * @param pScene The scene to hold the converted materials.
139138 * @param pMaterials The material array to convert.
140139 */
141 void ConvertMaterials( aiScene* pScene,
142 const std::vector<XFile::Material>& pMaterials);
140 void ConvertMaterials( aiScene* pScene, std::vector<XFile::Material>& pMaterials);
143141
144142 protected:
145143 /** Buffer to hold the loaded file */
146144 std::vector<char> mBuffer;
147
148 /** Imported materials: index in the scene's material list by name */
149 std::map<std::string, unsigned int> mImportedMats;
150145 };
151146
152147 } // end of namespace Assimp
134134 if( mBinaryFloatSize != 32 && mBinaryFloatSize != 64)
135135 ThrowException( boost::str( boost::format( "Unknown float size %1% specified in xfile header.")
136136 % mBinaryFloatSize));
137
138 // The x format specifies size in bits, but we work in bytes
139 mBinaryFloatSize /= 8;
137140
138141 P += 16;
139142
459462 Face& face = pMesh->mPosFaces[a];
460463 for( unsigned int b = 0; b < numIndices; b++)
461464 face.mIndices.push_back( ReadInt());
462 CheckForSeparator();
465 TestForSeparator();
463466 }
464467
465468 // here, other data objects may follow
582585 for( unsigned int b = 0; b < numIndices; b++)
583586 face.mIndices.push_back( ReadInt());
584587
585 CheckForSeparator();
588 TestForSeparator();
586589 }
587590
588591 CheckForClosingBrace();
7373 ~XFileParser();
7474
7575 /** Returns the temporary representation of the imported data */
76 const XFile::Scene* GetImportedData() const { return mScene; }
76 XFile::Scene* GetImportedData() const { return mScene; }
7777
7878 protected:
7979 void ParseFile();
143143 protected:
144144 unsigned int mMajorVersion, mMinorVersion; ///< version numbers
145145 bool mIsBinaryFormat; ///< true if the file is in binary, false if it's in text form
146 unsigned int mBinaryFloatSize; ///< float size, either 32 or 64 bits
146 unsigned int mBinaryFloatSize; ///< float size in bytes, either 4 or 8
147147 // counter for number arrays in binary format
148148 unsigned int mBinaryNumCount;
149149
7676 void* free;
7777 };
7878
79 namespace Assimp { // this has to be in here because LogFunctions is in ::Assimp
7980 template<> const std::string LogFunctions<XGLImporter>::log_prefix = "XGL: ";
81
82 }
8083
8184 static const aiImporterDesc desc = {
8285 "XGL Importer",
393396 // XXX
394397 }
395398 else if (s == "meshref") {
396 const int id = ReadIndexFromText();
399 const unsigned int id = static_cast<unsigned int>( ReadIndexFromText() );
397400
398401 std::multimap<unsigned int, aiMesh*>::iterator it = scope.meshes.find(id), end = scope.meshes.end();
399402 if (it == end) {
1515 #define __FAST_A_TO_F_H_INCLUDED__
1616
1717 #include <math.h>
18 #include <limits.h>
1819
1920 namespace Assimp
2021 {
2122
22 const float fast_atof_table[16] = { // we write [16] here instead of [] to work around a swig bug
23 0.f,
24 0.1f,
25 0.01f,
26 0.001f,
27 0.0001f,
28 0.00001f,
29 0.000001f,
30 0.0000001f,
31 0.00000001f,
32 0.000000001f,
33 0.0000000001f,
34 0.00000000001f,
35 0.000000000001f,
36 0.0000000000001f,
37 0.00000000000001f,
38 0.000000000000001f
23 const double fast_atof_table[16] = { // we write [16] here instead of [] to work around a swig bug
24 0.0,
25 0.1,
26 0.01,
27 0.001,
28 0.0001,
29 0.00001,
30 0.000001,
31 0.0000001,
32 0.00000001,
33 0.000000001,
34 0.0000000001,
35 0.00000000001,
36 0.000000000001,
37 0.0000000000001,
38 0.00000000000001,
39 0.000000000000001
3940 };
4041
4142
177178 unsigned int cur = 0;
178179 uint64_t value = 0;
179180
181 if ( *in < '0' || *in > '9' )
182 throw std::invalid_argument(std::string("The string \"") + in + "\" cannot be converted into a value.");
183
180184 bool running = true;
181185 while ( running )
182186 {
186190 const uint64_t new_value = ( value * 10 ) + ( *in - '0' );
187191
188192 if (new_value < value) /* numeric overflow, we rely on you */
189 return value;
193 throw std::overflow_error(std::string("Converting the string \"") + in + "\" into a value resulted in overflow.");
190194
191195 value = new_value;
192196
222226 // If you find any bugs, please send them to me, niko (at) irrlicht3d.org.
223227 // ------------------------------------------------------------------------------------
224228 template <typename Real>
225 inline const char* fast_atoreal_move( const char* c, Real& out)
229 inline const char* fast_atoreal_move( const char* c, Real& out, bool check_comma = true)
226230 {
227231 Real f;
228232
232236 }
233237
234238 f = static_cast<Real>( strtoul10_64 ( c, &c) );
235 if (*c == '.' || (c[0] == ',' && c[1] >= '0' && c[1] <= '9')) // allow for commas, too
239 if (*c == '.' || (check_comma && c[0] == ',' && c[1] >= '0' && c[1] <= '9')) // allow for commas, too
236240 {
237241 ++c;
238242
268272 if (einv) {
269273 exp = -exp;
270274 }
271 f *= pow(static_cast<Real>(10.0f), exp);
275 f *= pow(static_cast<Real>(10.0), exp);
272276 }
273277
274278 if (inv) {
8080 // Map the buffer into memory and convert it to UTF8. IrrXML provides its
8181 // own conversion, which is merely a cast from uintNN_t to uint8_t. Thus,
8282 // it is not suitable for our purposes and we have to do it BEFORE IrrXML
83 // gets the buffer. Sadly, this forces as to map the whole file into
83 // gets the buffer. Sadly, this forces us to map the whole file into
8484 // memory.
8585
8686 data.resize(stream->FileSize());
8787 stream->Read(&data[0],data.size(),1);
88
89 // Remove null characters from the input sequence otherwise the parsing will utterly fail
90 unsigned int size = 0;
91 unsigned int size_max = data.size();
92 for(unsigned int i = 0; i < size_max; i++) {
93 if(data[i] != '\0') {
94 data[size++] = data[i];
95 }
96 }
97 data.resize(size);
8898
8999 BaseImporter::ConvertToUTF8(data);
90100 }
+0
-729
code/pstdint.h less more
0 /* A portable stdint.h
1 ****************************************************************************
2 * BSD License:
3 ****************************************************************************
4 *
5 * Copyright (c) 2005-2007 Paul Hsieh
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 * 3. The name of the author may not be used to endorse or promote products
18 * derived from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 *
31 ****************************************************************************
32 *
33 * Version 0.1.10
34 *
35 * The ANSI C standard committee, for the C99 standard, specified the
36 * inclusion of a new standard include file called stdint.h. This is
37 * a very useful and long desired include file which contains several
38 * very precise definitions for integer scalar types that is
39 * critically important for making portable several classes of
40 * applications including cryptography, hashing, variable length
41 * integer libraries and so on. But for most developers its likely
42 * useful just for programming sanity.
43 *
44 * The problem is that most compiler vendors have decided not to
45 * implement the C99 standard, and the next C++ language standard
46 * (which has a lot more mindshare these days) will be a long time in
47 * coming and its unknown whether or not it will include stdint.h or
48 * how much adoption it will have. Either way, it will be a long time
49 * before all compilers come with a stdint.h and it also does nothing
50 * for the extremely large number of compilers available today which
51 * do not include this file, or anything comparable to it.
52 *
53 * So that's what this file is all about. Its an attempt to build a
54 * single universal include file that works on as many platforms as
55 * possible to deliver what stdint.h is supposed to. A few things
56 * that should be noted about this file:
57 *
58 * 1) It is not guaranteed to be portable and/or present an identical
59 * interface on all platforms. The extreme variability of the
60 * ANSI C standard makes this an impossibility right from the
61 * very get go. Its really only meant to be useful for the vast
62 * majority of platforms that possess the capability of
63 * implementing usefully and precisely defined, standard sized
64 * integer scalars. Systems which are not intrinsically 2s
65 * complement may produce invalid constants.
66 *
67 * 2) There is an unavoidable use of non-reserved symbols.
68 *
69 * 3) Other standard include files are invoked.
70 *
71 * 4) This file may come in conflict with future platforms that do
72 * include stdint.h. The hope is that one or the other can be
73 * used with no real difference.
74 *
75 * 5) In the current verison, if your platform can't represent
76 * int32_t, int16_t and int8_t, it just dumps out with a compiler
77 * error.
78 *
79 * 6) 64 bit integers may or may not be defined. Test for their
80 * presence with the test: #ifdef INT64_MAX or #ifdef UINT64_MAX.
81 * Note that this is different from the C99 specification which
82 * requires the existence of 64 bit support in the compiler. If
83 * this is not defined for your platform, yet it is capable of
84 * dealing with 64 bits then it is because this file has not yet
85 * been extended to cover all of your system's capabilities.
86 *
87 * 7) (u)intptr_t may or may not be defined. Test for its presence
88 * with the test: #ifdef PTRDIFF_MAX. If this is not defined
89 * for your platform, then it is because this file has not yet
90 * been extended to cover all of your system's capabilities, not
91 * because its optional.
92 *
93 * 8) The following might not been defined even if your platform is
94 * capable of defining it:
95 *
96 * WCHAR_MIN
97 * WCHAR_MAX
98 * (u)int64_t
99 * PTRDIFF_MIN
100 * PTRDIFF_MAX
101 * (u)intptr_t
102 *
103 * 9) The following have not been defined:
104 *
105 * WINT_MIN
106 * WINT_MAX
107 *
108 * 10) The criteria for defining (u)int_least(*)_t isn't clear,
109 * except for systems which don't have a type that precisely
110 * defined 8, 16, or 32 bit types (which this include file does
111 * not support anyways). Default definitions have been given.
112 *
113 * 11) The criteria for defining (u)int_fast(*)_t isn't something I
114 * would trust to any particular compiler vendor or the ANSI C
115 * committee. It is well known that "compatible systems" are
116 * commonly created that have very different performance
117 * characteristics from the systems they are compatible with,
118 * especially those whose vendors make both the compiler and the
119 * system. Default definitions have been given, but its strongly
120 * recommended that users never use these definitions for any
121 * reason (they do *NOT* deliver any serious guarantee of
122 * improved performance -- not in this file, nor any vendor's
123 * stdint.h).
124 *
125 * 12) The following macros:
126 *
127 * PRINTF_INTMAX_MODIFIER
128 * PRINTF_INT64_MODIFIER
129 * PRINTF_INT32_MODIFIER
130 * PRINTF_INT16_MODIFIER
131 * PRINTF_LEAST64_MODIFIER
132 * PRINTF_LEAST32_MODIFIER
133 * PRINTF_LEAST16_MODIFIER
134 * PRINTF_INTPTR_MODIFIER
135 *
136 * are strings which have been defined as the modifiers required
137 * for the "d", "u" and "x" printf formats to correctly output
138 * (u)intmax_t, (u)int64_t, (u)int32_t, (u)int16_t, (u)least64_t,
139 * (u)least32_t, (u)least16_t and (u)intptr_t types respectively.
140 * PRINTF_INTPTR_MODIFIER is not defined for some systems which
141 * provide their own stdint.h. PRINTF_INT64_MODIFIER is not
142 * defined if INT64_MAX is not defined. These are an extension
143 * beyond what C99 specifies must be in stdint.h.
144 *
145 * In addition, the following macros are defined:
146 *
147 * PRINTF_INTMAX_HEX_WIDTH
148 * PRINTF_INT64_HEX_WIDTH
149 * PRINTF_INT32_HEX_WIDTH
150 * PRINTF_INT16_HEX_WIDTH
151 * PRINTF_INT8_HEX_WIDTH
152 * PRINTF_INTMAX_DEC_WIDTH
153 * PRINTF_INT64_DEC_WIDTH
154 * PRINTF_INT32_DEC_WIDTH
155 * PRINTF_INT16_DEC_WIDTH
156 * PRINTF_INT8_DEC_WIDTH
157 *
158 * Which specifies the maximum number of characters required to
159 * print the number of that type in either hexadecimal or decimal.
160 * These are an extension beyond what C99 specifies must be in
161 * stdint.h.
162 *
163 * Compilers tested (all with 0 warnings at their highest respective
164 * settings): Borland Turbo C 2.0, WATCOM C/C++ 11.0 (16 bits and 32
165 * bits), Microsoft Visual C++ 6.0 (32 bit), Microsoft Visual Studio
166 * .net (VC7), Intel C++ 4.0, GNU gcc v3.3.3
167 *
168 * This file should be considered a work in progress. Suggestions for
169 * improvements, especially those which increase coverage are strongly
170 * encouraged.
171 *
172 * Acknowledgements
173 *
174 * The following people have made significant contributions to the
175 * development and testing of this file:
176 *
177 * Chris Howie
178 * John Steele Scott
179 * Dave Thorup
180 *
181 */
182
183 #include <stddef.h>
184 #include <limits.h>
185 #include <signal.h>
186
187 /*
188 * For gcc with _STDINT_H, fill in the PRINTF_INT*_MODIFIER macros, and
189 * do nothing else. On the Mac OS X version of gcc this is _STDINT_H_.
190 */
191
192 #if ((defined(__STDC__) && __STDC__ && __STDC_VERSION__ >= 199901L) || (defined (__WATCOMC__) && (defined (_STDINT_H_INCLUDED) || __WATCOMC__ >= 1250)) || (defined(__GNUC__) && (defined(_STDINT_H) || defined(_STDINT_H_)))) && !defined (_PSTDINT_H_INCLUDED) && !defined(_STDINT)
193 #include <stdint.h>
194 #define _PSTDINT_H_INCLUDED
195 # ifndef PRINTF_INT64_MODIFIER
196 # define PRINTF_INT64_MODIFIER "ll"
197 # endif
198 # ifndef PRINTF_INT32_MODIFIER
199 # define PRINTF_INT32_MODIFIER "l"
200 # endif
201 # ifndef PRINTF_INT16_MODIFIER
202 # define PRINTF_INT16_MODIFIER "h"
203 # endif
204 # ifndef PRINTF_INTMAX_MODIFIER
205 # define PRINTF_INTMAX_MODIFIER PRINTF_INT64_MODIFIER
206 # endif
207 # ifndef PRINTF_INT64_HEX_WIDTH
208 # define PRINTF_INT64_HEX_WIDTH "16"
209 # endif
210 # ifndef PRINTF_INT32_HEX_WIDTH
211 # define PRINTF_INT32_HEX_WIDTH "8"
212 # endif
213 # ifndef PRINTF_INT16_HEX_WIDTH
214 # define PRINTF_INT16_HEX_WIDTH "4"
215 # endif
216 # ifndef PRINTF_INT8_HEX_WIDTH
217 # define PRINTF_INT8_HEX_WIDTH "2"
218 # endif
219 # ifndef PRINTF_INT64_DEC_WIDTH
220 # define PRINTF_INT64_DEC_WIDTH "20"
221 # endif
222 # ifndef PRINTF_INT32_DEC_WIDTH
223 # define PRINTF_INT32_DEC_WIDTH "10"
224 # endif
225 # ifndef PRINTF_INT16_DEC_WIDTH
226 # define PRINTF_INT16_DEC_WIDTH "5"
227 # endif
228 # ifndef PRINTF_INT8_DEC_WIDTH
229 # define PRINTF_INT8_DEC_WIDTH "3"
230 # endif
231 # ifndef PRINTF_INTMAX_HEX_WIDTH
232 # define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT64_HEX_WIDTH
233 # endif
234 # ifndef PRINTF_INTMAX_DEC_WIDTH
235 # define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT64_DEC_WIDTH
236 # endif
237
238 /*
239 * Something really weird is going on with Open Watcom. Just pull some of
240 * these duplicated definitions from Open Watcom's stdint.h file for now.
241 */
242
243 # if defined (__WATCOMC__) && __WATCOMC__ >= 1250
244 # if !defined (INT64_C)
245 # define INT64_C(x) (x + (INT64_MAX - INT64_MAX))
246 # endif
247 # if !defined (UINT64_C)
248 # define UINT64_C(x) (x + (UINT64_MAX - UINT64_MAX))
249 # endif
250 # if !defined (INT32_C)
251 # define INT32_C(x) (x + (INT32_MAX - INT32_MAX))
252 # endif
253 # if !defined (UINT32_C)
254 # define UINT32_C(x) (x + (UINT32_MAX - UINT32_MAX))
255 # endif
256 # if !defined (INT16_C)
257 # define INT16_C(x) (x)
258 # endif
259 # if !defined (UINT16_C)
260 # define UINT16_C(x) (x)
261 # endif
262 # if !defined (INT8_C)
263 # define INT8_C(x) (x)
264 # endif
265 # if !defined (UINT8_C)
266 # define UINT8_C(x) (x)
267 # endif
268 # if !defined (UINT64_MAX)
269 # define UINT64_MAX 18446744073709551615ULL
270 # endif
271 # if !defined (INT64_MAX)
272 # define INT64_MAX 9223372036854775807LL
273 # endif
274 # if !defined (UINT32_MAX)
275 # define UINT32_MAX 4294967295UL
276 # endif
277 # if !defined (INT32_MAX)
278 # define INT32_MAX 2147483647L
279 # endif
280 # if !defined (INTMAX_MAX)
281 # define INTMAX_MAX INT64_MAX
282 # endif
283 # if !defined (INTMAX_MIN)
284 # define INTMAX_MIN INT64_MIN
285 # endif
286 # endif
287 #endif
288
289 #ifndef _PSTDINT_H_INCLUDED
290 #define _PSTDINT_H_INCLUDED
291
292 #ifndef SIZE_MAX
293 # define SIZE_MAX (~(size_t)0)
294 #endif
295
296 /*
297 * Deduce the type assignments from limits.h under the assumption that
298 * integer sizes in bits are powers of 2, and follow the ANSI
299 * definitions.
300 */
301
302 #ifndef UINT8_MAX
303 # define UINT8_MAX 0xff
304 #endif
305 #ifndef uint8_t
306 # if (UCHAR_MAX == UINT8_MAX) || defined (S_SPLINT_S)
307 typedef unsigned char uint8_t;
308 # define UINT8_C(v) ((uint8_t) v)
309 # else
310 # error "Platform not supported"
311 # endif
312 #endif
313
314 #ifndef INT8_MAX
315 # define INT8_MAX 0x7f
316 #endif
317 #ifndef INT8_MIN
318 # define INT8_MIN INT8_C(0x80)
319 #endif
320 #ifndef int8_t
321 # if (SCHAR_MAX == INT8_MAX) || defined (S_SPLINT_S)
322 typedef signed char int8_t;
323 # define INT8_C(v) ((int8_t) v)
324 # else
325 # error "Platform not supported"
326 # endif
327 #endif
328
329 #ifndef UINT16_MAX
330 # define UINT16_MAX 0xffff
331 #endif
332 #ifndef uint16_t
333 #if (UINT_MAX == UINT16_MAX) || defined (S_SPLINT_S)
334 typedef unsigned int uint16_t;
335 # ifndef PRINTF_INT16_MODIFIER
336 # define PRINTF_INT16_MODIFIER ""
337 # endif
338 # define UINT16_C(v) ((uint16_t) (v))
339 #elif (USHRT_MAX == UINT16_MAX)
340 typedef unsigned short uint16_t;
341 # define UINT16_C(v) ((uint16_t) (v))
342 # ifndef PRINTF_INT16_MODIFIER
343 # define PRINTF_INT16_MODIFIER "h"
344 # endif
345 #else
346 #error "Platform not supported"
347 #endif
348 #endif
349
350 #ifndef INT16_MAX
351 # define INT16_MAX 0x7fff
352 #endif
353 #ifndef INT16_MIN
354 # define INT16_MIN INT16_C(0x8000)
355 #endif
356 #ifndef int16_t
357 #if (INT_MAX == INT16_MAX) || defined (S_SPLINT_S)
358 typedef signed int int16_t;
359 # define INT16_C(v) ((int16_t) (v))
360 # ifndef PRINTF_INT16_MODIFIER
361 # define PRINTF_INT16_MODIFIER ""
362 # endif
363 #elif (SHRT_MAX == INT16_MAX)
364 typedef signed short int16_t;
365 # define INT16_C(v) ((int16_t) (v))
366 # ifndef PRINTF_INT16_MODIFIER
367 # define PRINTF_INT16_MODIFIER "h"
368 # endif
369 #else
370 #error "Platform not supported"
371 #endif
372 #endif
373
374 #ifndef UINT32_MAX
375 # define UINT32_MAX (0xffffffffUL)
376 #endif
377 #ifndef uint32_t
378 #if (ULONG_MAX == UINT32_MAX) || defined (S_SPLINT_S)
379 typedef unsigned long uint32_t;
380 # define UINT32_C(v) v ## UL
381 # ifndef PRINTF_INT32_MODIFIER
382 # define PRINTF_INT32_MODIFIER "l"
383 # endif
384 #elif (UINT_MAX == UINT32_MAX)
385 typedef unsigned int uint32_t;
386 # ifndef PRINTF_INT32_MODIFIER
387 # define PRINTF_INT32_MODIFIER ""
388 # endif
389 # define UINT32_C(v) v ## U
390 #elif (USHRT_MAX == UINT32_MAX)
391 typedef unsigned short uint32_t;
392 # define UINT32_C(v) ((unsigned short) (v))
393 # ifndef PRINTF_INT32_MODIFIER
394 # define PRINTF_INT32_MODIFIER ""
395 # endif
396 #else
397 #error "Platform not supported"
398 #endif
399 #endif
400
401 #ifndef INT32_MAX
402 # define INT32_MAX (0x7fffffffL)
403 #endif
404 #ifndef INT32_MIN
405 # define INT32_MIN INT32_C(0x80000000)
406 #endif
407 #ifndef int32_t
408 #if (LONG_MAX == INT32_MAX) || defined (S_SPLINT_S)
409 typedef signed long int32_t;
410 # define INT32_C(v) v ## L
411 # ifndef PRINTF_INT32_MODIFIER
412 # define PRINTF_INT32_MODIFIER "l"
413 # endif
414 #elif (INT_MAX == INT32_MAX)
415 typedef signed int int32_t;
416 # define INT32_C(v) v
417 # ifndef PRINTF_INT32_MODIFIER
418 # define PRINTF_INT32_MODIFIER ""
419 # endif
420 #elif (SHRT_MAX == INT32_MAX)
421 typedef signed short int32_t;
422 # define INT32_C(v) ((short) (v))
423 # ifndef PRINTF_INT32_MODIFIER
424 # define PRINTF_INT32_MODIFIER ""
425 # endif
426 #else
427 #error "Platform not supported"
428 #endif
429 #endif
430
431 /*
432 * The macro stdint_int64_defined is temporarily used to record
433 * whether or not 64 integer support is available. It must be
434 * defined for any 64 integer extensions for new platforms that are
435 * added.
436 */
437
438 #undef stdint_int64_defined
439 #if (defined(__STDC__) && defined(__STDC_VERSION__)) || defined (S_SPLINT_S)
440 # if (__STDC__ && __STDC_VERSION >= 199901L) || defined (S_SPLINT_S)
441 # define stdint_int64_defined
442 typedef long long int64_t;
443 typedef unsigned long long uint64_t;
444 # define UINT64_C(v) v ## ULL
445 # define INT64_C(v) v ## LL
446 # ifndef PRINTF_INT64_MODIFIER
447 # define PRINTF_INT64_MODIFIER "ll"
448 # endif
449 # endif
450 #endif
451
452 #if !defined (stdint_int64_defined)
453 # if defined(__GNUC__)
454 # define stdint_int64_defined
455 __extension__ typedef long long int64_t;
456 __extension__ typedef unsigned long long uint64_t;
457 # define UINT64_C(v) v ## ULL
458 # define INT64_C(v) v ## LL
459 # ifndef PRINTF_INT64_MODIFIER
460 # define PRINTF_INT64_MODIFIER "ll"
461 # endif
462 # elif defined(__MWERKS__) || defined (__SUNPRO_C) || defined (__SUNPRO_CC) || defined (__APPLE_CC__) || defined (_LONG_LONG) || defined (_CRAYC) || defined (S_SPLINT_S)
463 # define stdint_int64_defined
464 typedef long long int64_t;
465 typedef unsigned long long uint64_t;
466 # define UINT64_C(v) v ## ULL
467 # define INT64_C(v) v ## LL
468 # ifndef PRINTF_INT64_MODIFIER
469 # define PRINTF_INT64_MODIFIER "ll"
470 # endif
471 # elif (defined(__WATCOMC__) && defined(__WATCOM_INT64__)) || (defined(_MSC_VER) && _INTEGRAL_MAX_BITS >= 64) || (defined (__BORLANDC__) && __BORLANDC__ > 0x460) || defined (__alpha) || defined (__DECC)
472 # define stdint_int64_defined
473 typedef __int64 int64_t;
474 typedef unsigned __int64 uint64_t;
475 # define UINT64_C(v) v ## UI64
476 # define INT64_C(v) v ## I64
477 # ifndef PRINTF_INT64_MODIFIER
478 # define PRINTF_INT64_MODIFIER "I64"
479 # endif
480 # endif
481 #endif
482
483 #if !defined (LONG_LONG_MAX) && defined (INT64_C)
484 # define LONG_LONG_MAX INT64_C (9223372036854775807)
485 #endif
486 #ifndef ULONG_LONG_MAX
487 # define ULONG_LONG_MAX UINT64_C (18446744073709551615)
488 #endif
489
490 #if !defined (INT64_MAX) && defined (INT64_C)
491 # define INT64_MAX INT64_C (9223372036854775807)
492 #endif
493 #if !defined (INT64_MIN) && defined (INT64_C)
494 # define INT64_MIN INT64_C (-9223372036854775808)
495 #endif
496 #if !defined (UINT64_MAX) && defined (INT64_C)
497 # define UINT64_MAX UINT64_C (18446744073709551615)
498 #endif
499
500 /*
501 * Width of hexadecimal for number field.
502 */
503
504 #ifndef PRINTF_INT64_HEX_WIDTH
505 # define PRINTF_INT64_HEX_WIDTH "16"
506 #endif
507 #ifndef PRINTF_INT32_HEX_WIDTH
508 # define PRINTF_INT32_HEX_WIDTH "8"
509 #endif
510 #ifndef PRINTF_INT16_HEX_WIDTH
511 # define PRINTF_INT16_HEX_WIDTH "4"
512 #endif
513 #ifndef PRINTF_INT8_HEX_WIDTH
514 # define PRINTF_INT8_HEX_WIDTH "2"
515 #endif
516
517 #ifndef PRINTF_INT64_DEC_WIDTH
518 # define PRINTF_INT64_DEC_WIDTH "20"
519 #endif
520 #ifndef PRINTF_INT32_DEC_WIDTH
521 # define PRINTF_INT32_DEC_WIDTH "10"
522 #endif
523 #ifndef PRINTF_INT16_DEC_WIDTH
524 # define PRINTF_INT16_DEC_WIDTH "5"
525 #endif
526 #ifndef PRINTF_INT8_DEC_WIDTH
527 # define PRINTF_INT8_DEC_WIDTH "3"
528 #endif
529
530 /*
531 * Ok, lets not worry about 128 bit integers for now. Moore's law says
532 * we don't need to worry about that until about 2040 at which point
533 * we'll have bigger things to worry about.
534 */
535
536 #ifdef stdint_int64_defined
537 typedef int64_t intmax_t;
538 typedef uint64_t uintmax_t;
539 # define INTMAX_MAX INT64_MAX
540 # define INTMAX_MIN INT64_MIN
541 # define UINTMAX_MAX UINT64_MAX
542 # define UINTMAX_C(v) UINT64_C(v)
543 # define INTMAX_C(v) INT64_C(v)
544 # ifndef PRINTF_INTMAX_MODIFIER
545 # define PRINTF_INTMAX_MODIFIER PRINTF_INT64_MODIFIER
546 # endif
547 # ifndef PRINTF_INTMAX_HEX_WIDTH
548 # define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT64_HEX_WIDTH
549 # endif
550 # ifndef PRINTF_INTMAX_DEC_WIDTH
551 # define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT64_DEC_WIDTH
552 # endif
553 #else
554 typedef int32_t intmax_t;
555 typedef uint32_t uintmax_t;
556 # define INTMAX_MAX INT32_MAX
557 # define UINTMAX_MAX UINT32_MAX
558 # define UINTMAX_C(v) UINT32_C(v)
559 # define INTMAX_C(v) INT32_C(v)
560 # ifndef PRINTF_INTMAX_MODIFIER
561 # define PRINTF_INTMAX_MODIFIER PRINTF_INT32_MODIFIER
562 # endif
563 # ifndef PRINTF_INTMAX_HEX_WIDTH
564 # define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT32_HEX_WIDTH
565 # endif
566 # ifndef PRINTF_INTMAX_DEC_WIDTH
567 # define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT32_DEC_WIDTH
568 # endif
569 #endif
570
571 /*
572 * Because this file currently only supports platforms which have
573 * precise powers of 2 as bit sizes for the default integers, the
574 * least definitions are all trivial. Its possible that a future
575 * version of this file could have different definitions.
576 */
577
578 #ifndef stdint_least_defined
579 typedef int8_t int_least8_t;
580 typedef uint8_t uint_least8_t;
581 typedef int16_t int_least16_t;
582 typedef uint16_t uint_least16_t;
583 typedef int32_t int_least32_t;
584 typedef uint32_t uint_least32_t;
585 # define PRINTF_LEAST32_MODIFIER PRINTF_INT32_MODIFIER
586 # define PRINTF_LEAST16_MODIFIER PRINTF_INT16_MODIFIER
587 # define UINT_LEAST8_MAX UINT8_MAX
588 # define INT_LEAST8_MAX INT8_MAX
589 # define UINT_LEAST16_MAX UINT16_MAX
590 # define INT_LEAST16_MAX INT16_MAX
591 # define UINT_LEAST32_MAX UINT32_MAX
592 # define INT_LEAST32_MAX INT32_MAX
593 # define INT_LEAST8_MIN INT8_MIN
594 # define INT_LEAST16_MIN INT16_MIN
595 # define INT_LEAST32_MIN INT32_MIN
596 # ifdef stdint_int64_defined
597 typedef int64_t int_least64_t;
598 typedef uint64_t uint_least64_t;
599 # define PRINTF_LEAST64_MODIFIER PRINTF_INT64_MODIFIER
600 # define UINT_LEAST64_MAX UINT64_MAX
601 # define INT_LEAST64_MAX INT64_MAX
602 # define INT_LEAST64_MIN INT64_MIN
603 # endif
604 #endif
605 #undef stdint_least_defined
606
607 /*
608 * The ANSI C committee pretending to know or specify anything about
609 * performance is the epitome of misguided arrogance. The mandate of
610 * this file is to *ONLY* ever support that absolute minimum
611 * definition of the fast integer types, for compatibility purposes.
612 * No extensions, and no attempt to suggest what may or may not be a
613 * faster integer type will ever be made in this file. Developers are
614 * warned to stay away from these types when using this or any other
615 * stdint.h.
616 */
617
618 typedef int_least8_t int_fast8_t;
619 typedef uint_least8_t uint_fast8_t;
620 typedef int_least16_t int_fast16_t;
621 typedef uint_least16_t uint_fast16_t;
622 typedef int_least32_t int_fast32_t;
623 typedef uint_least32_t uint_fast32_t;
624 #define UINT_FAST8_MAX UINT_LEAST8_MAX
625 #define INT_FAST8_MAX INT_LEAST8_MAX
626 #define UINT_FAST16_MAX UINT_LEAST16_MAX
627 #define INT_FAST16_MAX INT_LEAST16_MAX
628 #define UINT_FAST32_MAX UINT_LEAST32_MAX
629 #define INT_FAST32_MAX INT_LEAST32_MAX
630 #define INT_FAST8_MIN INT_LEAST8_MIN
631 #define INT_FAST16_MIN INT_LEAST16_MIN
632 #define INT_FAST32_MIN INT_LEAST32_MIN
633 #ifdef stdint_int64_defined
634 typedef int_least64_t int_fast64_t;
635 typedef uint_least64_t uint_fast64_t;
636 # define UINT_FAST64_MAX UINT_LEAST64_MAX
637 # define INT_FAST64_MAX INT_LEAST64_MAX
638 # define INT_FAST64_MIN INT_LEAST64_MIN
639 #endif
640
641 #undef stdint_int64_defined
642
643 /*
644 * Whatever piecemeal, per compiler thing we can do about the wchar_t
645 * type limits.
646 */
647
648 #if defined(__WATCOMC__) || defined(_MSC_VER) || defined (__GNUC__)
649 # include <wchar.h>
650 # ifndef WCHAR_MIN
651 # define WCHAR_MIN 0
652 # endif
653 # ifndef WCHAR_MAX
654 # define WCHAR_MAX ((wchar_t)-1)
655 # endif
656 #endif
657
658 /*
659 * Whatever piecemeal, per compiler/platform thing we can do about the
660 * (u)intptr_t types and limits.
661 */
662
663 #if defined (_MSC_VER) && defined (_UINTPTR_T_DEFINED)
664 # define STDINT_H_UINTPTR_T_DEFINED
665 #endif
666
667 #ifndef STDINT_H_UINTPTR_T_DEFINED
668 # if defined (__alpha__) || defined (__ia64__) || defined (__x86_64__) || defined (_WIN64)
669 # define stdint_intptr_bits 64
670 # elif defined (__WATCOMC__) || defined (__TURBOC__)
671 # if defined(__TINY__) || defined(__SMALL__) || defined(__MEDIUM__)
672 # define stdint_intptr_bits 16
673 # else
674 # define stdint_intptr_bits 32
675 # endif
676 # elif defined (__i386__) || defined (_WIN32) || defined (WIN32)
677 # define stdint_intptr_bits 32
678 # elif defined (__INTEL_COMPILER)
679 /* TODO -- what will Intel do about x86-64? */
680 # endif
681
682 # ifdef stdint_intptr_bits
683 # define stdint_intptr_glue3_i(a,b,c) a##b##c
684 # define stdint_intptr_glue3(a,b,c) stdint_intptr_glue3_i(a,b,c)
685 # ifndef PRINTF_INTPTR_MODIFIER
686 # define PRINTF_INTPTR_MODIFIER stdint_intptr_glue3(PRINTF_INT,stdint_intptr_bits,_MODIFIER)
687 # endif
688 # ifndef PTRDIFF_MAX
689 # define PTRDIFF_MAX stdint_intptr_glue3(INT,stdint_intptr_bits,_MAX)
690 # endif
691 # ifndef PTRDIFF_MIN
692 # define PTRDIFF_MIN stdint_intptr_glue3(INT,stdint_intptr_bits,_MIN)
693 # endif
694 # ifndef UINTPTR_MAX
695 # define UINTPTR_MAX stdint_intptr_glue3(UINT,stdint_intptr_bits,_MAX)
696 # endif
697 # ifndef INTPTR_MAX
698 # define INTPTR_MAX stdint_intptr_glue3(INT,stdint_intptr_bits,_MAX)
699 # endif
700 # ifndef INTPTR_MIN
701 # define INTPTR_MIN stdint_intptr_glue3(INT,stdint_intptr_bits,_MIN)
702 # endif
703 # ifndef INTPTR_C
704 # define INTPTR_C(x) stdint_intptr_glue3(INT,stdint_intptr_bits,_C)(x)
705 # endif
706 # ifndef UINTPTR_C
707 # define UINTPTR_C(x) stdint_intptr_glue3(UINT,stdint_intptr_bits,_C)(x)
708 # endif
709 typedef stdint_intptr_glue3(uint,stdint_intptr_bits,_t) uintptr_t;
710 typedef stdint_intptr_glue3( int,stdint_intptr_bits,_t) intptr_t;
711 # else
712 /* TODO -- This following is likely wrong for some platforms, and does
713 nothing for the definition of uintptr_t. */
714 typedef ptrdiff_t intptr_t;
715 # endif
716 # define STDINT_H_UINTPTR_T_DEFINED
717 #endif
718
719 /*
720 * Assumes sig_atomic_t is signed and we have a 2s complement machine.
721 */
722
723 #ifndef SIG_ATOMIC_MAX
724 # define SIG_ATOMIC_MAX ((((sig_atomic_t) 1) << (sizeof (sig_atomic_t)*CHAR_BIT-1)) - 1)
725 #endif
726
727 #endif
728
00 /*******************************************************************************
11 * *
22 * Author : Angus Johnson *
3 * Version : 4.6.3 *
4 * Date : 11 November 2011 *
3 * Version : 4.8.8 *
4 * Date : 30 August 2012 *
55 * Website : http://www.angusj.com *
6 * Copyright : Angus Johnson 2010-2011 *
6 * Copyright : Angus Johnson 2010-2012 *
77 * *
88 * License: *
99 * Use, modification & distribution is subject to Boost Software License Ver 1. *
4848
4949 namespace ClipperLib {
5050
51 static long64 const loRange = 1518500249; //sqrt(2^63 -1)/2
52 static long64 const hiRange = 6521908912666391106LL; //sqrt(2^127 -1)/2
51 static long64 const loRange = 0x3FFFFFFF;
52 static long64 const hiRange = 0x3FFFFFFFFFFFFFFFLL;
5353 static double const pi = 3.141592653589793238;
5454 enum Direction { dRightToLeft, dLeftToRight };
55 enum RangeTest { rtLo, rtHi, rtError };
5655
5756 #define HORIZONTAL (-1.0E+40)
5857 #define TOLERANCE (1.0e-20)
6160
6261 inline long64 Abs(long64 val)
6362 {
64 if (val < 0) return -val; else return val;
63 return val < 0 ? -val : val;
6564 }
6665 //------------------------------------------------------------------------------
6766
7978
8079 Int128(long64 _lo = 0)
8180 {
82 hi = 0;
83 if (_lo < 0) {
84 lo = -_lo;
85 Negate(*this);
86 } else
87 lo = _lo;
81 lo = _lo;
82 if (lo < 0) hi = -1; else hi = 0;
8883 }
8984
9085 Int128(const Int128 &val): hi(val.hi), lo(val.lo){}
9186
9287 long64 operator = (const long64 &val)
9388 {
94 hi = 0;
95 lo = Abs(val);
96 if (val < 0) Negate(*this);
89 lo = val;
90 if (lo < 0) hi = -1; else hi = 0;
9791 return val;
9892 }
9993
10094 bool operator == (const Int128 &val) const
10195 {return (hi == val.hi && lo == val.lo);}
10296
103 bool operator != (const Int128 &val) const { return !(*this == val);}
97 bool operator != (const Int128 &val) const
98 { return !(*this == val);}
10499
105100 bool operator > (const Int128 &val) const
106101 {
107 if (hi > val.hi) return true;
108 else if (hi < val.hi) return false;
109 else return ulong64(lo) > ulong64(val.lo);
102 if (hi != val.hi)
103 return hi > val.hi;
104 else
105 return lo > val.lo;
110106 }
111107
112108 bool operator < (const Int128 &val) const
113109 {
114 if (hi < val.hi) return true;
115 else if (hi > val.hi) return false;
116 else return ulong64(lo) < ulong64(val.lo);
117 }
110 if (hi != val.hi)
111 return hi < val.hi;
112 else
113 return lo < val.lo;
114 }
115
116 bool operator >= (const Int128 &val) const
117 { return !(*this < val);}
118
119 bool operator <= (const Int128 &val) const
120 { return !(*this > val);}
118121
119122 Int128& operator += (const Int128 &rhs)
120123 {
139142 return *this;
140143 }
141144
145 //Int128 operator -() const
146 //{
147 // Int128 result(*this);
148 // if (result.lo == 0) {
149 // if (result.hi != 0) result.hi = -1;
150 // }
151 // else {
152 // result.lo = -result.lo;
153 // result.hi = ~result.hi;
154 // }
155 // return result;
156 //}
157
142158 Int128 operator - (const Int128 &rhs) const
143159 {
144160 Int128 result(*this);
145 result-= rhs;
161 result -= rhs;
146162 return result;
147163 }
148164
149 Int128 operator * (const Int128 &rhs) const {
165 Int128 operator * (const Int128 &rhs) const
166 {
150167 if ( !(hi == 0 || hi == -1) || !(rhs.hi == 0 || rhs.hi == -1))
151168 throw "Int128 operator*: overflow error";
152169 bool negate = (hi < 0) != (rhs.hi < 0);
224241 }
225242
226243 //for bug testing ...
227 std::string AsString() const
228 {
229 std::string result;
230 unsigned char r = 0;
231 Int128 tmp(0), val(*this);
232 if (hi < 0) Negate(val);
233 result.resize(50);
234 std::string::size_type i = result.size() -1;
235 while (val.hi != 0 || val.lo != 0)
236 {
237 Div10(val, tmp, r);
238 result[i--] = char('0' + r);
239 val = tmp;
240 }
241 if (hi < 0) result[i--] = '-';
242 result.erase(0,i+1);
243 if (result.size() == 0) result = "0";
244 return result;
245 }
244 //std::string AsString() const
245 //{
246 // std::string result;
247 // unsigned char r = 0;
248 // Int128 tmp(0), val(*this);
249 // if (hi < 0) Negate(val);
250 // result.resize(50);
251 // std::string::size_type i = result.size() -1;
252 // while (val.hi != 0 || val.lo != 0)
253 // {
254 // Div10(val, tmp, r);
255 // result[i--] = char('0' + r);
256 // val = tmp;
257 // }
258 // if (hi < 0) result[i--] = '-';
259 // result.erase(0,i+1);
260 // if (result.size() == 0) result = "0";
261 // return result;
262 //}
246263
247264 private:
248265 long64 hi;
250267
251268 static void Negate(Int128 &val)
252269 {
253 if (val.lo == 0)
254 {
255 if( val.hi == 0) return;
256 val.lo = ~val.lo;
257 val.hi = ~val.hi +1;
270 if (val.lo == 0) {
271 if (val.hi != 0) val.hi = -val.hi;;
258272 }
259 else
260 {
261 val.lo = ~val.lo +1;
273 else {
274 val.lo = -val.lo;
262275 val.hi = ~val.hi;
263276 }
264277 }
265278
266279 //debugging only ...
267 void Div10(const Int128 val, Int128& result, unsigned char & remainder) const
268 {
269 remainder = 0;
270 result = 0;
271 for (int i = 63; i >= 0; --i)
272 {
273 if ((val.hi & ((long64)1 << i)) != 0)
274 remainder = char((remainder * 2) + 1); else
275 remainder *= char(2);
276 if (remainder >= 10)
277 {
278 result.hi += ((long64)1 << i);
279 remainder -= char(10);
280 }
281 }
282 for (int i = 63; i >= 0; --i)
283 {
284 if ((val.lo & ((long64)1 << i)) != 0)
285 remainder = char((remainder * 2) + 1); else
286 remainder *= char(2);
287 if (remainder >= 10)
288 {
289 result.lo += ((long64)1 << i);
290 remainder -= char(10);
291 }
292 }
293 }
280 //void Div10(const Int128 val, Int128& result, unsigned char & remainder) const
281 //{
282 // remainder = 0;
283 // result = 0;
284 // for (int i = 63; i >= 0; --i)
285 // {
286 // if ((val.hi & ((long64)1 << i)) != 0)
287 // remainder = char((remainder * 2) + 1); else
288 // remainder *= char(2);
289 // if (remainder >= 10)
290 // {
291 // result.hi += ((long64)1 << i);
292 // remainder -= char(10);
293 // }
294 // }
295 // for (int i = 63; i >= 0; --i)
296 // {
297 // if ((val.lo & ((long64)1 << i)) != 0)
298 // remainder = char((remainder * 2) + 1); else
299 // remainder *= char(2);
300 // if (remainder >= 10)
301 // {
302 // result.lo += ((long64)1 << i);
303 // remainder -= char(10);
304 // }
305 // }
306 //}
294307 };
295308
296309 //------------------------------------------------------------------------------
297310 //------------------------------------------------------------------------------
298311
299 RangeTest TestRange(const Polygon &pts)
300 {
301 RangeTest result = rtLo;
312 bool FullRangeNeeded(const Polygon &pts)
313 {
314 bool result = false;
302315 for (Polygon::size_type i = 0; i < pts.size(); ++i)
303316 {
304317 if (Abs(pts[i].X) > hiRange || Abs(pts[i].Y) > hiRange)
305 return rtError;
318 throw "Coordinate exceeds range bounds.";
306319 else if (Abs(pts[i].X) > loRange || Abs(pts[i].Y) > loRange)
307 result = rtHi;
320 result = true;
308321 }
309322 return result;
310323 }
311324 //------------------------------------------------------------------------------
312
325
313326 bool Orientation(const Polygon &poly)
314327 {
315328 int highI = (int)poly.size() -1;
316329 if (highI < 2) return false;
317 bool UseFullInt64Range = false;
318330
319331 int j = 0, jplus, jminus;
320332 for (int i = 0; i <= highI; ++i)
321333 {
322 if (Abs(poly[i].X) > hiRange || Abs(poly[i].Y) > hiRange)
323 throw "Coordinate exceeds range bounds.";
324 if (Abs(poly[i].X) > loRange || Abs(poly[i].Y) > loRange)
325 UseFullInt64Range = true;
326334 if (poly[i].Y < poly[j].Y) continue;
327335 if ((poly[i].Y > poly[j].Y || poly[i].X < poly[j].X)) j = i;
328336 };
338346 vec2.X = poly[jplus].X - poly[j].X;
339347 vec2.Y = poly[jplus].Y - poly[j].Y;
340348
341 if (UseFullInt64Range)
342 {
349 if (Abs(vec1.X) > loRange || Abs(vec1.Y) > loRange ||
350 Abs(vec2.X) > loRange || Abs(vec2.Y) > loRange)
351 {
352 if (Abs(vec1.X) > hiRange || Abs(vec1.Y) > hiRange ||
353 Abs(vec2.X) > hiRange || Abs(vec2.Y) > hiRange)
354 throw "Coordinate exceeds range bounds.";
343355 Int128 cross = Int128(vec1.X) * Int128(vec2.Y) -
344356 Int128(vec2.X) * Int128(vec1.Y);
345 return cross > 0;
357 return cross >= 0;
346358 }
347359 else
348 {
349 return (vec1.X * vec2.Y - vec2.X * vec1.Y) > 0;
350 }
360 return (vec1.X * vec2.Y - vec2.X * vec1.Y) >= 0;
361 }
362 //------------------------------------------------------------------------------
363
364 inline bool PointsEqual( const IntPoint &pt1, const IntPoint &pt2)
365 {
366 return ( pt1.X == pt2.X && pt1.Y == pt2.Y );
351367 }
352368 //------------------------------------------------------------------------------
353369
354370 bool Orientation(OutRec *outRec, bool UseFullInt64Range)
355371 {
372 //first make sure bottomPt is correctly assigned ...
356373 OutPt *opBottom = outRec->pts, *op = outRec->pts->next;
357374 while (op != outRec->pts)
358375 {
363380 }
364381 op = op->next;
365382 }
366
367 IntPoint vec1, vec2;
368 vec1.X = op->pt.X - op->prev->pt.X;
369 vec1.Y = op->pt.Y - op->prev->pt.Y;
370 vec2.X = op->next->pt.X - op->pt.X;
371 vec2.Y = op->next->pt.Y - op->pt.Y;
383 outRec->bottomPt = opBottom;
384 opBottom->idx = outRec->idx;
385
386 op = opBottom;
387 //find vertices either side of bottomPt (skipping duplicate points) ....
388 OutPt *opPrev = op->prev;
389 OutPt *opNext = op->next;
390 while (op != opPrev && PointsEqual(op->pt, opPrev->pt))
391 opPrev = opPrev->prev;
392 while (op != opNext && PointsEqual(op->pt, opNext->pt))
393 opNext = opNext->next;
394
395 IntPoint ip1, ip2;
396 ip1.X = op->pt.X - opPrev->pt.X;
397 ip1.Y = op->pt.Y - opPrev->pt.Y;
398 ip2.X = opNext->pt.X - op->pt.X;
399 ip2.Y = opNext->pt.Y - op->pt.Y;
372400
373401 if (UseFullInt64Range)
374 {
375 Int128 cross = Int128(vec1.X) * Int128(vec2.Y) - Int128(vec2.X) * Int128(vec1.Y);
376 return cross > 0;
377 }
402 return Int128(ip1.X) * Int128(ip2.Y) - Int128(ip2.X) * Int128(ip1.Y) >= 0;
378403 else
379 {
380 return (vec1.X * vec2.Y - vec2.X * vec1.Y) > 0;
381 }
382 }
383 //------------------------------------------------------------------------------
384
385 inline bool PointsEqual( const IntPoint &pt1, const IntPoint &pt2)
386 {
387 return ( pt1.X == pt2.X && pt1.Y == pt2.Y );
404 return (ip1.X * ip2.Y - ip2.X * ip1.Y) >= 0;
388405 }
389406 //------------------------------------------------------------------------------
390407
392409 {
393410 int highI = (int)poly.size() -1;
394411 if (highI < 2) return 0;
395 bool UseFullInt64Range;
396 RangeTest rt = TestRange(poly);
397 switch (rt) {
398 case rtLo:
399 UseFullInt64Range = false;
400 break;
401 case rtHi:
402 UseFullInt64Range = true;
403 break;
404 default:
405 throw "Coordinate exceeds range bounds.";
406 }
407
408 if (UseFullInt64Range) {
409 Int128 a(0);
412
413 if (FullRangeNeeded(poly)) {
414 Int128 a;
410415 a = (Int128(poly[highI].X) * Int128(poly[0].Y)) -
411416 Int128(poly[0].X) * Int128(poly[highI].Y);
412417 for (int i = 0; i < highI; ++i)
425430 }
426431 //------------------------------------------------------------------------------
427432
433 double Area(const OutRec &outRec, bool UseFullInt64Range)
434 {
435 OutPt *op = outRec.pts;
436 if (UseFullInt64Range) {
437 Int128 a(0);
438 do {
439 a += (Int128(op->prev->pt.X) * Int128(op->pt.Y)) -
440 Int128(op->pt.X) * Int128(op->prev->pt.Y);
441 op = op->next;
442 } while (op != outRec.pts);
443 return a.AsDouble() / 2;
444 }
445 else
446 {
447 double a = 0;
448 do {
449 a += (op->prev->pt.X * op->pt.Y) - (op->pt.X * op->prev->pt.Y);
450 op = op->next;
451 } while (op != outRec.pts);
452 return a/2;
453 }
454 }
455 //------------------------------------------------------------------------------
456
428457 bool PointIsVertex(const IntPoint &pt, OutPt *pp)
429458 {
430459 OutPt *pp2 = pp;
472501
473502 bool SlopesEqual(TEdge &e1, TEdge &e2, bool UseFullInt64Range)
474503 {
475 if (e1.ybot == e1.ytop) return (e2.ybot == e2.ytop);
476 else if (e1.xbot == e1.xtop) return (e2.xbot == e2.xtop);
477 else if (UseFullInt64Range)
504 if (UseFullInt64Range)
478505 return Int128(e1.ytop - e1.ybot) * Int128(e2.xtop - e2.xbot) ==
479506 Int128(e1.xtop - e1.xbot) * Int128(e2.ytop - e2.ybot);
480507 else return (e1.ytop - e1.ybot)*(e2.xtop - e2.xbot) ==
485512 bool SlopesEqual(const IntPoint pt1, const IntPoint pt2,
486513 const IntPoint pt3, bool UseFullInt64Range)
487514 {
488 if (pt1.Y == pt2.Y) return (pt2.Y == pt3.Y);
489 else if (pt1.X == pt2.X) return (pt2.X == pt3.X);
490 else if (UseFullInt64Range)
515 if (UseFullInt64Range)
491516 return Int128(pt1.Y-pt2.Y) * Int128(pt2.X-pt3.X) ==
492517 Int128(pt1.X-pt2.X) * Int128(pt2.Y-pt3.Y);
493518 else return (pt1.Y-pt2.Y)*(pt2.X-pt3.X) == (pt1.X-pt2.X)*(pt2.Y-pt3.Y);
497522 bool SlopesEqual(const IntPoint pt1, const IntPoint pt2,
498523 const IntPoint pt3, const IntPoint pt4, bool UseFullInt64Range)
499524 {
500 if (pt1.Y == pt2.Y) return (pt3.Y == pt4.Y);
501 else if (pt1.X == pt2.X) return (pt3.X == pt4.X);
502 else if (UseFullInt64Range)
525 if (UseFullInt64Range)
503526 return Int128(pt1.Y-pt2.Y) * Int128(pt3.X-pt4.X) ==
504527 Int128(pt1.X-pt2.X) * Int128(pt3.Y-pt4.Y);
505528 else return (pt1.Y-pt2.Y)*(pt3.X-pt4.X) == (pt1.X-pt2.X)*(pt3.Y-pt4.Y);
508531
509532 double GetDx(const IntPoint pt1, const IntPoint pt2)
510533 {
511 if (pt1.Y == pt2.Y) return HORIZONTAL;
512 else return
513 (double)(pt2.X - pt1.X) / (double)(pt2.Y - pt1.Y);
534 return (pt1.Y == pt2.Y) ?
535 HORIZONTAL : (double)(pt2.X - pt1.X) / (double)(pt2.Y - pt1.Y);
514536 }
515537 //---------------------------------------------------------------------------
516538
517539 void SetDx(TEdge &e)
518540 {
519541 if (e.ybot == e.ytop) e.dx = HORIZONTAL;
520 else e.dx =
521 (double)(e.xtop - e.xbot) / (double)(e.ytop - e.ybot);
542 else e.dx = (double)(e.xtop - e.xbot) / (double)(e.ytop - e.ybot);
522543 }
523544 //---------------------------------------------------------------------------
524545
540561
541562 inline long64 Round(double val)
542563 {
543 if ((val < 0)) return static_cast<long64>(val - 0.5);
544 else return static_cast<long64>(val + 0.5);
564 return (val < 0) ?
565 static_cast<long64>(val - 0.5) : static_cast<long64>(val + 0.5);
545566 }
546567 //------------------------------------------------------------------------------
547568
548569 long64 TopX(TEdge &edge, const long64 currentY)
549570 {
550 if( currentY == edge.ytop ) return edge.xtop;
551 return edge.xbot + Round(edge.dx *(currentY - edge.ybot));
571 return ( currentY == edge.ytop ) ?
572 edge.xtop : edge.xbot + Round(edge.dx *(currentY - edge.ybot));
552573 }
553574 //------------------------------------------------------------------------------
554575
708729 }
709730 //------------------------------------------------------------------------------
710731
711 OutPt* PolygonBottom(OutPt* pp)
712 {
732 bool FirstIsBottomPt(const OutPt* btmPt1, const OutPt* btmPt2)
733 {
734 OutPt *p = btmPt1->prev;
735 while (PointsEqual(p->pt, btmPt1->pt) && (p != btmPt1)) p = p->prev;
736 double dx1p = std::fabs(GetDx(btmPt1->pt, p->pt));
737 p = btmPt1->next;
738 while (PointsEqual(p->pt, btmPt1->pt) && (p != btmPt1)) p = p->next;
739 double dx1n = std::fabs(GetDx(btmPt1->pt, p->pt));
740
741 p = btmPt2->prev;
742 while (PointsEqual(p->pt, btmPt2->pt) && (p != btmPt2)) p = p->prev;
743 double dx2p = std::fabs(GetDx(btmPt2->pt, p->pt));
744 p = btmPt2->next;
745 while (PointsEqual(p->pt, btmPt2->pt) && (p != btmPt2)) p = p->next;
746 double dx2n = std::fabs(GetDx(btmPt2->pt, p->pt));
747 return (dx1p >= dx2p && dx1p >= dx2n) || (dx1n >= dx2p && dx1n >= dx2n);
748 }
749 //------------------------------------------------------------------------------
750
751 OutPt* GetBottomPt(OutPt *pp)
752 {
753 OutPt* dups = 0;
713754 OutPt* p = pp->next;
714 OutPt* result = pp;
715755 while (p != pp)
716756 {
717 if (p->pt.Y > result->pt.Y) result = p;
718 else if (p->pt.Y == result->pt.Y && p->pt.X < result->pt.X) result = p;
757 if (p->pt.Y > pp->pt.Y)
758 {
759 pp = p;
760 dups = 0;
761 }
762 else if (p->pt.Y == pp->pt.Y && p->pt.X <= pp->pt.X)
763 {
764 if (p->pt.X < pp->pt.X)
765 {
766 dups = 0;
767 pp = p;
768 } else
769 {
770 if (p->next != pp && p->prev != pp) dups = p;
771 }
772 }
719773 p = p->next;
720774 }
721 return result;
775 if (dups)
776 {
777 //there appears to be at least 2 vertices at bottomPt so ...
778 while (dups != p)
779 {
780 if (!FirstIsBottomPt(p, dups)) pp = dups;
781 dups = dups->next;
782 while (!PointsEqual(dups->pt, pp->pt)) dups = dups->next;
783 }
784 }
785 return pp;
722786 }
723787 //------------------------------------------------------------------------------
724788
804868 {
805869 if (Abs(pg[i].X) > maxVal || Abs(pg[i].Y) > maxVal)
806870 {
807 if (m_UseFullRange)
871 if (Abs(pg[i].X) > hiRange || Abs(pg[i].Y) > hiRange)
808872 throw "Coordinate exceeds range bounds";
809873 maxVal = hiRange;
810 if (Abs(pg[i].X) > maxVal || Abs(pg[i].Y) > maxVal)
811 throw "Coordinate exceeds range bounds";
812874 m_UseFullRange = true;
813875 }
814876
822884 if (j < 2) return false;
823885
824886 len = j+1;
825 for (;;)
887 while (len > 2)
826888 {
827889 //nb: test for point equality before testing slopes ...
828890 if (PointsEqual(p[j], p[0])) j--;
835897 for (int i = 2; i <= j; ++i) p[i-1] = p[i];
836898 j--;
837899 }
838 //exit loop if nothing is changed or there are too few vertices ...
839 if (j == len-1 || j < 2) break;
840 len = j +1;
900 else break;
901 len--;
841902 }
842903 if (len < 3) return false;
843904
9601021
9611022 bool ClipperBase::AddPolygons(const Polygons &ppg, PolyType polyType)
9621023 {
963 bool result = true;
1024 bool result = false;
9641025 for (Polygons::size_type i = 0; i < ppg.size(); ++i)
965 if (AddPolygon(ppg[i], polyType)) result = false;
1026 if (AddPolygon(ppg[i], polyType)) result = true;
9661027 return result;
9671028 }
9681029 //------------------------------------------------------------------------------
11151176 m_Scanbeam = 0;
11161177 m_ActiveEdges = 0;
11171178 m_SortedEdges = 0;
1179 DisposeAllPolyPts();
11181180 LocalMinima* lm = m_MinimaList;
11191181 while (lm)
11201182 {
11641226 {
11651227 if (or1->pts != or2->pts)
11661228 {
1167 if (or1->pts) return true; else return false;
1229 return or1->pts ? true : false;
11681230 }
11691231 else return false;
11701232 }
11781240 int result = i1 - i2;
11791241 if (result == 0 && (or1->isHole != or2->isHole))
11801242 {
1181 if (or1->isHole) return false;
1182 else return true;
1243 return or1->isHole ? false : true;
11831244 }
11841245 else return result < 0;
11851246 }
12491310 FixupOutPolygon(*outRec);
12501311 if (!outRec->pts) continue;
12511312 if (outRec->isHole && fixHoleLinkages) FixHoleLinkage(outRec);
1313
1314 if (outRec->bottomPt == outRec->bottomFlag &&
1315 (Orientation(outRec, m_UseFullRange) != (Area(*outRec, m_UseFullRange) > 0)))
1316 DisposeBottomPt(*outRec);
1317
12521318 if (outRec->isHole ==
12531319 (m_ReverseOutput ^ Orientation(outRec, m_UseFullRange)))
12541320 ReversePolyPtLinks(*outRec->pts);
13091375 }
13101376 //------------------------------------------------------------------------------
13111377
1312 void Clipper::DisposeOutRec(PolyOutList::size_type index, bool ignorePts)
1378 void Clipper::DisposeOutRec(PolyOutList::size_type index)
13131379 {
13141380 OutRec *outRec = m_PolyOuts[index];
1315 if (!ignorePts && outRec->pts) DisposeOutPts(outRec->pts);
1381 if (outRec->pts) DisposeOutPts(outRec->pts);
13161382 delete outRec;
13171383 m_PolyOuts[index] = 0;
13181384 }
14751541
14761542 void Clipper::AddLocalMinPoly(TEdge *e1, TEdge *e2, const IntPoint &pt)
14771543 {
1544 TEdge *e, *prevE;
14781545 if( NEAR_EQUAL(e2->dx, HORIZONTAL) || ( e1->dx > e2->dx ) )
14791546 {
1480 AddOutPt( e1, e2, pt );
1547 AddOutPt( e1, pt );
14811548 e2->outIdx = e1->outIdx;
14821549 e1->side = esLeft;
14831550 e2->side = esRight;
1551 e = e1;
1552 if (e->prevInAEL == e2)
1553 prevE = e2->prevInAEL;
1554 else
1555 prevE = e->prevInAEL;
14841556 } else
14851557 {
1486 AddOutPt( e2, e1, pt );
1558 AddOutPt( e2, pt );
14871559 e1->outIdx = e2->outIdx;
14881560 e1->side = esRight;
14891561 e2->side = esLeft;
1490 }
1562 e = e2;
1563 if (e->prevInAEL == e1)
1564 prevE = e1->prevInAEL;
1565 else
1566 prevE = e->prevInAEL;
1567 }
1568 if (prevE && prevE->outIdx >= 0 &&
1569 (TopX(*prevE, pt.Y) == TopX(*e, pt.Y)) &&
1570 SlopesEqual(*e, *prevE, m_UseFullRange))
1571 AddJoin(e, prevE, -1, -1);
14911572 }
14921573 //------------------------------------------------------------------------------
14931574
14941575 void Clipper::AddLocalMaxPoly(TEdge *e1, TEdge *e2, const IntPoint &pt)
14951576 {
1496 AddOutPt( e1, 0, pt );
1577 AddOutPt( e1, pt );
14971578 if( e1->outIdx == e2->outIdx )
14981579 {
14991580 e1->outIdx = -1;
15001581 e2->outIdx = -1;
15011582 }
1502 else
1503 AppendPolygon( e1, e2 );
1583 else if (e1->outIdx < e2->outIdx)
1584 AppendPolygon(e1, e2);
1585 else
1586 AppendPolygon(e2, e1);
15041587 }
15051588 //------------------------------------------------------------------------------
15061589
16181701
16191702 if( IsContributing(*lb) )
16201703 AddLocalMinPoly( lb, rb, IntPoint(lb->xcurr, m_CurrentLM->Y) );
1621
1622 //if output polygons share an edge, they'll need joining later ...
1623 if (lb->outIdx >= 0 && lb->prevInAEL &&
1624 lb->prevInAEL->outIdx >= 0 && lb->prevInAEL->xcurr == lb->xbot &&
1625 SlopesEqual(*lb, *lb->prevInAEL, m_UseFullRange))
1626 AddJoin(lb, lb->prevInAEL);
16271704
16281705 //if any output polygons share an edge, they'll need joining later ...
16291706 if (rb->outIdx >= 0)
18171894 AddLocalMinPoly(e1, e2, pt);
18181895 break;
18191896 case ctDifference:
1820 if ((e1->polyType == ptClip && e2->polyType == ptClip &&
1821 e1Wc2 > 0 && e2Wc2 > 0) ||
1822 (e1->polyType == ptSubject && e2->polyType == ptSubject &&
1823 e1Wc2 <= 0 && e2Wc2 <= 0))
1897 if (((e1->polyType == ptClip) && (e1Wc2 > 0) && (e2Wc2 > 0)) ||
1898 ((e1->polyType == ptSubject) && (e1Wc2 <= 0) && (e2Wc2 <= 0)))
18241899 AddLocalMinPoly(e1, e2, pt);
18251900 break;
18261901 case ctXor:
18611936 }
18621937 //------------------------------------------------------------------------------
18631938
1864 bool GetNextNonDupOutPt(OutPt* pp, OutPt*& next)
1865 {
1866 next = pp->next;
1867 while (next != pp && PointsEqual(pp->pt, next->pt))
1868 next = next->next;
1869 return next != pp;
1870 }
1871 //------------------------------------------------------------------------------
1872
1873 bool GetPrevNonDupOutPt(OutPt* pp, OutPt*& prev)
1874 {
1875 prev = pp->prev;
1876 while (prev != pp && PointsEqual(pp->pt, prev->pt))
1877 prev = prev->prev;
1878 return prev != pp;
1879 }
1880 //------------------------------------------------------------------------------
1881
18821939 OutRec* GetLowermostRec(OutRec *outRec1, OutRec *outRec2)
18831940 {
18841941 //work out which polygon fragment has the correct hole state ...
18881945 else if (outPt1->pt.Y < outPt2->pt.Y) return outRec2;
18891946 else if (outPt1->pt.X < outPt2->pt.X) return outRec1;
18901947 else if (outPt1->pt.X > outPt2->pt.X) return outRec2;
1891 else if (outRec1->bottomE2 == 0) return outRec2;
1892 else if (outRec2->bottomE2 == 0) return outRec1;
1893 else
1894 {
1895 long64 y1 = std::max(outRec1->bottomE1->ybot, outRec1->bottomE2->ybot);
1896 long64 y2 = std::max(outRec2->bottomE1->ybot, outRec2->bottomE2->ybot);
1897 if (y2 == y1 || (y1 > outPt1->pt.Y && y2 > outPt1->pt.Y))
1898 {
1899 double dx1 = std::max(outRec1->bottomE1->dx, outRec1->bottomE2->dx);
1900 double dx2 = std::max(outRec2->bottomE1->dx, outRec2->bottomE2->dx);
1901 if (dx2 > dx1) return outRec2; else return outRec1;
1902 }
1903 else if (y2 > y1) return outRec2;
1904 else return outRec1;
1905 }
1948 else if (outPt1->next == outPt1) return outRec2;
1949 else if (outPt2->next == outPt2) return outRec1;
1950 else if (FirstIsBottomPt(outPt1, outPt2)) return outRec1;
1951 else return outRec2;
1952 }
1953 //------------------------------------------------------------------------------
1954
1955 bool Param1RightOfParam2(OutRec* outRec1, OutRec* outRec2)
1956 {
1957 do
1958 {
1959 outRec1 = outRec1->FirstLeft;
1960 if (outRec1 == outRec2) return true;
1961 } while (outRec1);
1962 return false;
19061963 }
19071964 //------------------------------------------------------------------------------
19081965
19111968 //get the start and ends of both output polygons ...
19121969 OutRec *outRec1 = m_PolyOuts[e1->outIdx];
19131970 OutRec *outRec2 = m_PolyOuts[e2->outIdx];
1914 OutRec *holeStateRec = GetLowermostRec(outRec1, outRec2);
1915
1916 //fixup hole status ...
1917 if (holeStateRec == outRec2)
1918 outRec1->isHole = outRec2->isHole;
1919 else
1920 outRec2->isHole = outRec1->isHole;
1971
1972 OutRec *holeStateRec;
1973 if (Param1RightOfParam2(outRec1, outRec2)) holeStateRec = outRec2;
1974 else if (Param1RightOfParam2(outRec2, outRec1)) holeStateRec = outRec1;
1975 else holeStateRec = GetLowermostRec(outRec1, outRec2);
19211976
19221977 OutPt* p1_lft = outRec1->pts;
19231978 OutPt* p1_rt = p1_lft->prev;
19722027 {
19732028 outRec1->bottomPt = outRec2->bottomPt;
19742029 outRec1->bottomPt->idx = outRec1->idx;
1975 outRec1->bottomE1 = outRec2->bottomE1;
1976 outRec1->bottomE2 = outRec2->bottomE2;
1977
19782030 if (outRec2->FirstLeft != outRec1)
19792031 outRec1->FirstLeft = outRec2->FirstLeft;
2032 outRec1->isHole = outRec2->isHole;
19802033 }
19812034 outRec2->pts = 0;
19822035 outRec2->bottomPt = 0;
20222075 result->AppendLink = 0;
20232076 result->pts = 0;
20242077 result->bottomPt = 0;
2078 result->sides = esNeither;
2079 result->bottomFlag = 0;
2080
20252081 return result;
20262082 }
20272083 //------------------------------------------------------------------------------
20282084
2029 void Clipper::AddOutPt(TEdge *e, TEdge *altE, const IntPoint &pt)
2085 void Clipper::DisposeBottomPt(OutRec &outRec)
2086 {
2087 OutPt* next = outRec.bottomPt->next;
2088 OutPt* prev = outRec.bottomPt->prev;
2089 if (outRec.pts == outRec.bottomPt) outRec.pts = next;
2090 delete outRec.bottomPt;
2091 next->prev = prev;
2092 prev->next = next;
2093 outRec.bottomPt = next;
2094 FixupOutPolygon(outRec);
2095 }
2096 //------------------------------------------------------------------------------
2097
2098 void Clipper::AddOutPt(TEdge *e, const IntPoint &pt)
20302099 {
20312100 bool ToFront = (e->side == esLeft);
20322101 if( e->outIdx < 0 )
20372106 e->outIdx = outRec->idx;
20382107 OutPt* op = new OutPt;
20392108 outRec->pts = op;
2040 outRec->bottomE1 = e;
2041 outRec->bottomE2 = altE;
20422109 outRec->bottomPt = op;
20432110 op->pt = pt;
20442111 op->idx = outRec->idx;
20512118 OutPt* op = outRec->pts;
20522119 if ((ToFront && PointsEqual(pt, op->pt)) ||
20532120 (!ToFront && PointsEqual(pt, op->prev->pt))) return;
2121
2122 if ((e->side | outRec->sides) != outRec->sides)
2123 {
2124 //check for 'rounding' artefacts ...
2125 if (outRec->sides == esNeither && pt.Y == op->pt.Y)
2126 if (ToFront)
2127 {
2128 if (pt.X == op->pt.X +1) return; //ie wrong side of bottomPt
2129 }
2130 else if (pt.X == op->pt.X -1) return; //ie wrong side of bottomPt
2131
2132 outRec->sides = (EdgeSide)(outRec->sides | e->side);
2133 if (outRec->sides == esBoth)
2134 {
2135 //A vertex from each side has now been added.
2136 //Vertices of one side of an output polygon are quite commonly close to
2137 //or even 'touching' edges of the other side of the output polygon.
2138 //Very occasionally vertices from one side can 'cross' an edge on the
2139 //the other side. The distance 'crossed' is always less that a unit
2140 //and is purely an artefact of coordinate rounding. Nevertheless, this
2141 //results in very tiny self-intersections. Because of the way
2142 //orientation is calculated, even tiny self-intersections can cause
2143 //the Orientation function to return the wrong result. Therefore, it's
2144 //important to ensure that any self-intersections close to BottomPt are
2145 //detected and removed before orientation is assigned.
2146
2147 OutPt *opBot, *op2;
2148 if (ToFront)
2149 {
2150 opBot = outRec->pts;
2151 op2 = opBot->next; //op2 == right side
2152 if (opBot->pt.Y != op2->pt.Y && opBot->pt.Y != pt.Y &&
2153 ((opBot->pt.X - pt.X)/(opBot->pt.Y - pt.Y) <
2154 (opBot->pt.X - op2->pt.X)/(opBot->pt.Y - op2->pt.Y)))
2155 outRec->bottomFlag = opBot;
2156 } else
2157 {
2158 opBot = outRec->pts->prev;
2159 op2 = opBot->prev; //op2 == left side
2160 if (opBot->pt.Y != op2->pt.Y && opBot->pt.Y != pt.Y &&
2161 ((opBot->pt.X - pt.X)/(opBot->pt.Y - pt.Y) >
2162 (opBot->pt.X - op2->pt.X)/(opBot->pt.Y - op2->pt.Y)))
2163 outRec->bottomFlag = opBot;
2164 }
2165 }
2166 }
2167
20542168 OutPt* op2 = new OutPt;
20552169 op2->pt = pt;
20562170 op2->idx = outRec->idx;
20572171 if (op2->pt.Y == outRec->bottomPt->pt.Y &&
20582172 op2->pt.X < outRec->bottomPt->pt.X)
2059 {
2060 outRec->bottomPt = op2;
2061 outRec->bottomE1 = e;
2062 outRec->bottomE2 = altE;
2063 }
2173 outRec->bottomPt = op2;
20642174 op2->next = op;
20652175 op2->prev = op->prev;
20662176 op2->prev->next = op2;
22152325
22162326 TEdge* GetNextInAEL(TEdge *e, Direction dir)
22172327 {
2218 if( dir == dLeftToRight ) return e->nextInAEL;
2219 else return e->prevInAEL;
2328 return dir == dLeftToRight ? e->nextInAEL : e->prevInAEL;
22202329 }
22212330 //------------------------------------------------------------------------------
22222331
23092418 if( horzEdge->nextInLML )
23102419 {
23112420 if( horzEdge->outIdx >= 0 )
2312 AddOutPt( horzEdge, 0, IntPoint(horzEdge->xtop, horzEdge->ytop));
2421 AddOutPt( horzEdge, IntPoint(horzEdge->xtop, horzEdge->ytop));
23132422 UpdateEdgeIntoAEL( horzEdge );
23142423 }
23152424 else
24252534 }
24262535 //------------------------------------------------------------------------------
24272536
2428 bool Process1Before2(IntersectNode &node1, IntersectNode &node2)
2537 bool ProcessParam1BeforeParam2(IntersectNode &node1, IntersectNode &node2)
24292538 {
24302539 bool result;
24312540 if (node1.pt.Y == node2.pt.Y)
24332542 if (node1.edge1 == node2.edge1 || node1.edge2 == node2.edge1)
24342543 {
24352544 result = node2.pt.X > node1.pt.X;
2436 if (node2.edge1->dx > 0) return !result; else return result;
2545 return node2.edge1->dx > 0 ? !result : result;
24372546 }
24382547 else if (node1.edge1 == node2.edge2 || node1.edge2 == node2.edge2)
24392548 {
24402549 result = node2.pt.X > node1.pt.X;
2441 if (node2.edge2->dx > 0) return !result; else return result;
2550 return node2.edge2->dx > 0 ? !result : result;
24422551 }
24432552 else return node2.pt.X > node1.pt.X;
24442553 }
24542563 newNode->pt = pt;
24552564 newNode->next = 0;
24562565 if( !m_IntersectNodes ) m_IntersectNodes = newNode;
2457 else if( Process1Before2(*newNode, *m_IntersectNodes) )
2566 else if( ProcessParam1BeforeParam2(*newNode, *m_IntersectNodes) )
24582567 {
24592568 newNode->next = m_IntersectNodes;
24602569 m_IntersectNodes = newNode;
24622571 else
24632572 {
24642573 IntersectNode* iNode = m_IntersectNodes;
2465 while( iNode->next && Process1Before2(*iNode->next, *newNode) )
2574 while( iNode->next && ProcessParam1BeforeParam2(*iNode->next, *newNode) )
24662575 iNode = iNode->next;
24672576 newNode->next = iNode->next;
24682577 iNode->next = newNode;
25322641 {
25332642 if (e->outIdx >= 0)
25342643 {
2535 AddOutPt(e, 0, IntPoint(e->xtop, e->ytop));
2644 AddOutPt(e, IntPoint(e->xtop, e->ytop));
25362645
25372646 for (HorzJoinList::size_type i = 0; i < m_HorizJoins.size(); ++i)
25382647 {
25682677 {
25692678 if( IsIntermediate( e, topY ) )
25702679 {
2571 if( e->outIdx >= 0 ) AddOutPt(e, 0, IntPoint(e->xtop,e->ytop));
2680 if( e->outIdx >= 0 ) AddOutPt(e, IntPoint(e->xtop,e->ytop));
25722681 UpdateEdgeIntoAEL(e);
25732682
25742683 //if output polygons share an edge, they'll need joining later ...
25782687 IntPoint(e->xbot,e->ybot),
25792688 IntPoint(e->prevInAEL->xtop, e->prevInAEL->ytop), m_UseFullRange))
25802689 {
2581 AddOutPt(e->prevInAEL, 0, IntPoint(e->xbot, e->ybot));
2690 AddOutPt(e->prevInAEL, IntPoint(e->xbot, e->ybot));
25822691 AddJoin(e, e->prevInAEL);
25832692 }
25842693 else if (e->outIdx >= 0 && e->nextInAEL && e->nextInAEL->outIdx >= 0 &&
25852694 e->nextInAEL->ycurr > e->nextInAEL->ytop &&
2586 e->nextInAEL->ycurr < e->nextInAEL->ybot &&
2695 e->nextInAEL->ycurr <= e->nextInAEL->ybot &&
25872696 e->nextInAEL->xcurr == e->xbot && e->nextInAEL->ycurr == e->ybot &&
25882697 SlopesEqual(IntPoint(e->xbot,e->ybot), IntPoint(e->xtop, e->ytop),
25892698 IntPoint(e->xbot,e->ybot),
25902699 IntPoint(e->nextInAEL->xtop, e->nextInAEL->ytop), m_UseFullRange))
25912700 {
2592 AddOutPt(e->nextInAEL, 0, IntPoint(e->xbot, e->ybot));
2701 AddOutPt(e->nextInAEL, IntPoint(e->xbot, e->ybot));
25932702 AddJoin(e, e->nextInAEL);
25942703 }
25952704 }
26222731 lastOK = 0;
26232732 OutPt *tmp = pp;
26242733 if (pp == outRec.bottomPt)
2625 {
2626 if (tmp->prev->pt.Y > tmp->next->pt.Y)
2627 outRec.bottomPt = tmp->prev; else
2628 outRec.bottomPt = tmp->next;
2629 outRec.pts = outRec.bottomPt;
2630 outRec.bottomPt->idx = outRec.idx;
2631 }
2734 outRec.bottomPt = 0; //flags need for updating
26322735 pp->prev->next = pp->next;
26332736 pp->next->prev = pp->prev;
26342737 pp = pp->prev;
26402743 if (!lastOK) lastOK = pp;
26412744 pp = pp->next;
26422745 }
2746 }
2747 if (!outRec.bottomPt) {
2748 outRec.bottomPt = GetBottomPt(pp);
2749 outRec.bottomPt->idx = outRec.idx;
2750 outRec.pts = outRec.bottomPt;
26432751 }
26442752 }
26452753 //------------------------------------------------------------------------------
27652873
27662874 bool E2InsertsBeforeE1(TEdge &e1, TEdge &e2)
27672875 {
2768 if (e2.xcurr == e1.xcurr) return e2.dx > e1.dx;
2769 else return e2.xcurr < e1.xcurr;
2876 return e2.xcurr == e1.xcurr ? e2.dx > e1.dx : e2.xcurr < e1.xcurr;
27702877 }
27712878 //------------------------------------------------------------------------------
27722879
27982905
27992906 void Clipper::DoEdge1(TEdge *edge1, TEdge *edge2, const IntPoint &pt)
28002907 {
2801 AddOutPt(edge1, edge2, pt);
2908 AddOutPt(edge1, pt);
28022909 SwapSides(*edge1, *edge2);
28032910 SwapPolyIndexes(*edge1, *edge2);
28042911 }
28062913
28072914 void Clipper::DoEdge2(TEdge *edge1, TEdge *edge2, const IntPoint &pt)
28082915 {
2809 AddOutPt(edge2, edge1, pt);
2916 AddOutPt(edge2, pt);
28102917 SwapSides(*edge1, *edge2);
28112918 SwapPolyIndexes(*edge1, *edge2);
28122919 }
28142921
28152922 void Clipper::DoBothEdges(TEdge *edge1, TEdge *edge2, const IntPoint &pt)
28162923 {
2817 AddOutPt(edge1, edge2, pt);
2818 AddOutPt(edge2, edge1, pt);
2924 AddOutPt(edge1, pt);
2925 AddOutPt(edge2, pt);
28192926 SwapSides( *edge1 , *edge2 );
28202927 SwapPolyIndexes( *edge1 , *edge2 );
28212928 }
29193026 {
29203027 //instead of joining two polygons, we've just created a new one by
29213028 //splitting one polygon into two.
2922 outRec1->pts = PolygonBottom(p1);
3029 outRec1->pts = GetBottomPt(p1);
29233030 outRec1->bottomPt = outRec1->pts;
29243031 outRec1->bottomPt->idx = outRec1->idx;
29253032 outRec2 = CreateOutRec();
29263033 m_PolyOuts.push_back(outRec2);
29273034 outRec2->idx = (int)m_PolyOuts.size()-1;
29283035 j->poly2Idx = outRec2->idx;
2929 outRec2->pts = PolygonBottom(p2);
3036 outRec2->pts = GetBottomPt(p2);
29303037 outRec2->bottomPt = outRec2->pts;
29313038 outRec2->bottomPt->idx = outRec2->idx;
29323039
29333040 if (PointInPolygon(outRec2->pts->pt, outRec1->pts, m_UseFullRange))
29343041 {
3042 //outRec2 is contained by outRec1 ...
29353043 outRec2->isHole = !outRec1->isHole;
29363044 outRec2->FirstLeft = outRec1;
2937 if (outRec2->isHole == Orientation(outRec2, m_UseFullRange))
2938 ReversePolyPtLinks(*outRec2->pts);
3045 if (outRec2->isHole ==
3046 (m_ReverseOutput ^ Orientation(outRec2, m_UseFullRange)))
3047 ReversePolyPtLinks(*outRec2->pts);
29393048 } else if (PointInPolygon(outRec1->pts->pt, outRec2->pts, m_UseFullRange))
29403049 {
3050 //outRec1 is contained by outRec2 ...
29413051 outRec2->isHole = outRec1->isHole;
29423052 outRec1->isHole = !outRec2->isHole;
29433053 outRec2->FirstLeft = outRec1->FirstLeft;
29443054 outRec1->FirstLeft = outRec2;
2945 if (outRec1->isHole == Orientation(outRec1, m_UseFullRange))
2946 ReversePolyPtLinks(*outRec1->pts);
3055 if (outRec1->isHole ==
3056 (m_ReverseOutput ^ Orientation(outRec1, m_UseFullRange)))
3057 ReversePolyPtLinks(*outRec1->pts);
3058 //make sure any contained holes now link to the correct polygon ...
3059 if (fixHoleLinkages) CheckHoleLinkages1(outRec1, outRec2);
29473060 } else
29483061 {
29493062 outRec2->isHole = outRec1->isHole;
29653078 //now cleanup redundant edges too ...
29663079 FixupOutPolygon(*outRec1);
29673080 FixupOutPolygon(*outRec2);
3081
3082 if (Orientation(outRec1, m_UseFullRange) != (Area(*outRec1, m_UseFullRange) > 0))
3083 DisposeBottomPt(*outRec1);
3084 if (Orientation(outRec2, m_UseFullRange) != (Area(*outRec2, m_UseFullRange) > 0))
3085 DisposeBottomPt(*outRec2);
3086
29683087 } else
29693088 {
29703089 //joined 2 polygons together ...
29713090
29723091 //make sure any holes contained by outRec2 now link to outRec1 ...
29733092 if (fixHoleLinkages) CheckHoleLinkages2(outRec1, outRec2);
3093
3094 //now cleanup redundant edges too ...
3095 FixupOutPolygon(*outRec1);
3096
3097 if (outRec1->pts)
3098 {
3099 outRec1->isHole = !Orientation(outRec1, m_UseFullRange);
3100 if (outRec1->isHole && !outRec1->FirstLeft)
3101 outRec1->FirstLeft = outRec2->FirstLeft;
3102 }
29743103
29753104 //delete the obsolete pointer ...
29763105 int OKIdx = outRec1->idx;
29783107 outRec2->pts = 0;
29793108 outRec2->bottomPt = 0;
29803109 outRec2->AppendLink = outRec1;
2981 //holes are practically always joined to outers, not vice versa ...
2982 if (outRec1->isHole && !outRec2->isHole) outRec1->isHole = false;
29833110
29843111 //now fixup any subsequent Joins that match this polygon
29853112 for (JoinList::size_type k = i+1; k < m_Joins.size(); k++)
29883115 if (j2->poly1Idx == ObsoleteIdx) j2->poly1Idx = OKIdx;
29893116 if (j2->poly2Idx == ObsoleteIdx) j2->poly2Idx = OKIdx;
29903117 }
2991
2992 //now cleanup redundant edges too ...
2993 if (outRec1->pts)
2994 FixupOutPolygon(*outRec1);
2995 else
2996 FixupOutPolygon(*outRec2);
2997 }
2998 }
2999 }
3000 //------------------------------------------------------------------------------
3001
3002 void ReversePoints(Polygon& p)
3118 }
3119 }
3120 }
3121 //------------------------------------------------------------------------------
3122
3123 void ReversePolygon(Polygon& p)
30033124 {
30043125 std::reverse(p.begin(), p.end());
30053126 }
30063127 //------------------------------------------------------------------------------
30073128
3008 void ReversePoints(Polygons& p)
3129 void ReversePolygons(Polygons& p)
30093130 {
30103131 for (Polygons::size_type i = 0; i < p.size(); ++i)
3011 ReversePoints(p[i]);
3132 ReversePolygon(p[i]);
30123133 }
30133134
30143135 //------------------------------------------------------------------------------
30263147 Polygon BuildArc(const IntPoint &pt,
30273148 const double a1, const double a2, const double r)
30283149 {
3029 int steps = std::max(6, int(std::sqrt(std::fabs(r)) * std::fabs(a2 - a1)));
3030 Polygon result(steps);
3031 int n = steps - 1;
3032 double da = (a2 - a1) / n;
3150 long64 steps = std::max(6, int(std::sqrt(std::fabs(r)) * std::fabs(a2 - a1)));
3151 if (steps > 0x100000) steps = 0x100000;
3152 int n = (unsigned)steps;
3153 Polygon result(n);
3154 double da = (a2 - a1) / (n -1);
30333155 double a = a1;
3034 for (int i = 0; i <= n; ++i)
3156 for (int i = 0; i < n; ++i)
30353157 {
30363158 result[i].X = pt.X + Round(std::cos(a)*r);
30373159 result[i].Y = pt.Y + Round(std::sin(a)*r);
31593281 if (clpr.Execute(ctUnion, out_polys, pftNegative, pftNegative))
31603282 {
31613283 out_polys.erase(out_polys.begin());
3162 ReversePoints(out_polys);
3284 ReversePolygons(out_polys);
31633285
31643286 } else
31653287 out_polys.clear();
31863308 (long64)Round(m_p[m_i][m_j].Y + normals[m_j].Y * m_delta));
31873309 if ((normals[m_k].X * normals[m_j].Y - normals[m_j].X * normals[m_k].Y) * m_delta >= 0)
31883310 {
3189 double a1 = std::atan2(normals[m_k].Y, normals[m_k].X);
3190 double a2 = std::atan2(-normals[m_j].Y, -normals[m_j].X);
3191 a1 = std::fabs(a2 - a1);
3192 if (a1 > pi) a1 = pi * 2 - a1;
3193 double dx = std::tan((pi - a1)/4) * std::fabs(m_delta * mul);
3194 pt1 = IntPoint((long64)(pt1.X -normals[m_k].Y * dx),
3195 (long64)(pt1.Y + normals[m_k].X * dx));
3196 AddPoint(pt1);
3197 pt2 = IntPoint((long64)(pt2.X + normals[m_j].Y * dx),
3198 (long64)(pt2.Y -normals[m_j].X * dx));
3199 AddPoint(pt2);
3311 double a1 = std::atan2(normals[m_k].Y, normals[m_k].X);
3312 double a2 = std::atan2(-normals[m_j].Y, -normals[m_j].X);
3313 a1 = std::fabs(a2 - a1);
3314 if (a1 > pi) a1 = pi * 2 - a1;
3315 double dx = std::tan((pi - a1)/4) * std::fabs(m_delta * mul);
3316 pt1 = IntPoint((long64)(pt1.X -normals[m_k].Y * dx),
3317 (long64)(pt1.Y + normals[m_k].X * dx));
3318 AddPoint(pt1);
3319 pt2 = IntPoint((long64)(pt2.X + normals[m_j].Y * dx),
3320 (long64)(pt2.Y -normals[m_j].X * dx));
3321 AddPoint(pt2);
32003322 }
32013323 else
32023324 {
3203 AddPoint(pt1);
3204 AddPoint(m_p[m_i][m_j]);
3205 AddPoint(pt2);
3325 AddPoint(pt1);
3326 AddPoint(m_p[m_i][m_j]);
3327 AddPoint(pt2);
32063328 }
32073329 }
32083330 //------------------------------------------------------------------------------
32733395 }
32743396 //------------------------------------------------------------------------------
32753397
3398 void SimplifyPolygon(const Polygon &in_poly, Polygons &out_polys, PolyFillType fillType)
3399 {
3400 Clipper c;
3401 c.AddPolygon(in_poly, ptSubject);
3402 c.Execute(ctUnion, out_polys, fillType, fillType);
3403 }
3404 //------------------------------------------------------------------------------
3405
3406 void SimplifyPolygons(const Polygons &in_polys, Polygons &out_polys, PolyFillType fillType)
3407 {
3408 Clipper c;
3409 c.AddPolygons(in_polys, ptSubject);
3410 c.Execute(ctUnion, out_polys, fillType, fillType);
3411 }
3412 //------------------------------------------------------------------------------
3413
3414 void SimplifyPolygons(Polygons &polys, PolyFillType fillType)
3415 {
3416 SimplifyPolygons(polys, polys, fillType);
3417 }
3418 //------------------------------------------------------------------------------
3419
32763420 std::ostream& operator <<(std::ostream &s, IntPoint& p)
32773421 {
32783422 s << p.X << ' ' << p.Y << "\n";
00 /*******************************************************************************
11 * *
22 * Author : Angus Johnson *
3 * Version : 4.6.3 *
4 * Date : 11 November 2011 *
3 * Version : 4.8.8 *
4 * Date : 30 August 2012 *
55 * Website : http://www.angusj.com *
6 * Copyright : Angus Johnson 2010-2011 *
6 * Copyright : Angus Johnson 2010-2012 *
77 * *
88 * License: *
99 * Use, modification & distribution is subject to Boost Software License Ver 1. *
7272 };
7373 typedef std::vector< ExPolygon > ExPolygons;
7474
75 enum JoinType { jtSquare, jtMiter, jtRound };
75 enum JoinType { jtSquare, jtRound, jtMiter };
7676
7777 bool Orientation(const Polygon &poly);
7878 double Area(const Polygon &poly);
7979 void OffsetPolygons(const Polygons &in_polys, Polygons &out_polys,
8080 double delta, JoinType jointype = jtSquare, double MiterLimit = 2);
81
82 void ReversePoints(Polygon& p);
83 void ReversePoints(Polygons& p);
81 void SimplifyPolygon(const Polygon &in_poly, Polygons &out_polys, PolyFillType fillType = pftEvenOdd);
82 void SimplifyPolygons(const Polygons &in_polys, Polygons &out_polys, PolyFillType fillType = pftEvenOdd);
83 void SimplifyPolygons(Polygons &polys, PolyFillType fillType = pftEvenOdd);
84
85 void ReversePolygon(Polygon& p);
86 void ReversePolygons(Polygons& p);
8487
8588 //used internally ...
86 enum EdgeSide { esLeft, esRight };
89 enum EdgeSide { esNeither = 0, esLeft = 1, esRight = 2, esBoth = 3 };
8790 enum IntersectProtects { ipNone = 0, ipLeft = 1, ipRight = 2, ipBoth = 3 };
8891
8992 struct TEdge {
138141 OutRec *AppendLink;
139142 OutPt *pts;
140143 OutPt *bottomPt;
141 TEdge *bottomE1;
142 TEdge *bottomE2;
144 OutPt *bottomFlag;
145 EdgeSide sides;
143146 };
144147
145148 struct OutPt {
255258 void IntersectEdges(TEdge *e1, TEdge *e2,
256259 const IntPoint &pt, IntersectProtects protects);
257260 OutRec* CreateOutRec();
258 void AddOutPt(TEdge *e, TEdge *altE, const IntPoint &pt);
261 void AddOutPt(TEdge *e, const IntPoint &pt);
262 void DisposeBottomPt(OutRec &outRec);
259263 void DisposeAllPolyPts();
260 void DisposeOutRec(PolyOutList::size_type index, bool ignorePts = false);
264 void DisposeOutRec(PolyOutList::size_type index);
261265 bool ProcessIntersections(const long64 botY, const long64 topY);
262266 void AddIntersectNode(TEdge *e1, TEdge *e2, const IntPoint &pt);
263267 void BuildIntersectList(const long64 botY, const long64 topY);
214214 {
215215 char_type* start = P;
216216
217 // more forward until '<' found
217 // move forward until '<' found
218218 while(*P != L'<' && *P)
219219 ++P;
220220
118118 Point* Triangle::OppositePoint(Triangle& t, Point& p)
119119 {
120120 Point *cw = t.PointCW(p);
121 double x = cw->x;
122 double y = cw->y;
123 x = p.x;
124 y = p.y;
121 //double x = cw->x;
122 //double y = cw->y;
123 //x = p.x;
124 //y = p.y;
125125 return PointCW(*cw);
126126 }
127127
163163 return 2;
164164 }
165165 assert(0);
166
167 return 0;
166168 }
167169
168170 int Triangle::EdgeIndex(const Point* p1, const Point* p2)
222224 return points_[1];
223225 }
224226 assert(0);
227
228 return 0;
225229 }
226230
227231 // The point counter-clockwise to given point
235239 return points_[0];
236240 }
237241 assert(0);
242
243 return 0;
238244 }
239245
240246 // The neighbor clockwise to given point
3737 #include <stdexcept>
3838 #include <assert.h>
3939 #include <cmath>
40 #include <string>
4041
4142 namespace p2t {
4243
136137 p = &p2;
137138 } else if (p1.x == p2.x) {
138139 // Repeat points
139 // ASSIMP_CHANGE (aramis_acg)
140 throw std::runtime_error("repeat points");
140 // ASSIMP_CHANGE (aramis_acg)
141 throw std::runtime_error(std::string("repeat points"));
141142 //assert(false);
142143 }
143144 }
753753 Sweep::~Sweep() {
754754
755755 // Clean up memory
756 for(int i = 0; i < nodes_.size(); i++) {
756 for(unsigned int i = 0; i < nodes_.size(); i++) {
757757 delete nodes_[i];
758758 }
759759
0 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
1 <!-- Created with Inkscape (http://www.inkscape.org/) -->
2
3 <svg
4 xmlns:dc="http://purl.org/dc/elements/1.1/"
5 xmlns:cc="http://creativecommons.org/ns#"
6 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
7 xmlns:svg="http://www.w3.org/2000/svg"
8 xmlns="http://www.w3.org/2000/svg"
9 xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
10 xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
11 width="557.00226"
12 height="451.52655"
13 id="svg2"
14 version="1.1"
15 inkscape:version="0.48.1 "
16 sodipodi:docname="AssimpAnimation.svg"
17 inkscape:export-filename="A:\Jonathan\Documents\AssimpAnimation.png"
18 inkscape:export-xdpi="100"
19 inkscape:export-ydpi="100">
20 <defs
21 id="defs4">
22 <marker
23 inkscape:stockid="Arrow2Mend"
24 orient="auto"
25 refY="0"
26 refX="0"
27 id="Arrow2Mend"
28 style="overflow:visible">
29 <path
30 id="path4020"
31 style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
32 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"
33 transform="scale(-0.6,-0.6)"
34 inkscape:connector-curvature="0" />
35 </marker>
36 <marker
37 inkscape:stockid="Arrow2Lend"
38 orient="auto"
39 refY="0"
40 refX="0"
41 id="Arrow2Lend"
42 style="overflow:visible">
43 <path
44 id="path4014"
45 style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
46 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"
47 transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
48 inkscape:connector-curvature="0" />
49 </marker>
50 </defs>
51 <sodipodi:namedview
52 id="base"
53 pagecolor="#ffffff"
54 bordercolor="#666666"
55 borderopacity="1.0"
56 inkscape:pageopacity="1"
57 inkscape:pageshadow="2"
58 inkscape:zoom="1"
59 inkscape:cx="521.95938"
60 inkscape:cy="235.26058"
61 inkscape:document-units="px"
62 inkscape:current-layer="layer1"
63 showgrid="false"
64 inkscape:window-width="1525"
65 inkscape:window-height="905"
66 inkscape:window-x="223"
67 inkscape:window-y="47"
68 inkscape:window-maximized="0"
69 fit-margin-top="10"
70 fit-margin-left="10"
71 fit-margin-right="10"
72 fit-margin-bottom="10" />
73 <metadata
74 id="metadata7">
75 <rdf:RDF>
76 <cc:Work
77 rdf:about="">
78 <dc:format>image/svg+xml</dc:format>
79 <dc:type
80 rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
81 <dc:title></dc:title>
82 </cc:Work>
83 </rdf:RDF>
84 </metadata>
85 <g
86 inkscape:label="Ebene 1"
87 inkscape:groupmode="layer"
88 id="layer1"
89 transform="translate(-7.4185486,-19.719715)">
90 <g
91 id="g3133"
92 transform="translate(-171.43404,-84.903042)">
93 <path
94 inkscape:connector-curvature="0"
95 id="path2985"
96 d="m 245.91963,269.53006 0,-64.64286"
97 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
98 <path
99 inkscape:connector-curvature="0"
100 id="path2987"
101 d="m 245.91963,193.26767 0,-26.75116"
102 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
103 <path
104 inkscape:connector-curvature="0"
105 id="path2989"
106 d="M 239.99615,202.05734 203.691,232.24794"
107 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
108 <path
109 inkscape:connector-curvature="0"
110 id="path2991"
111 d="m 253.7539,202.05734 35.54083,25.98684"
112 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
113 <path
114 inkscape:connector-curvature="0"
115 id="path2993"
116 d="m 241.52479,278.87139 c 0,0 -32.86571,32.48356 -31.33708,32.86572"
117 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
118 <path
119 inkscape:connector-curvature="0"
120 id="path2995"
121 d="m 250.31446,278.87139 36.68731,28.66196"
122 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
123 <path
124 transform="translate(-0.38215944,-113.50137)"
125 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"
126 sodipodi:ry="2.4840367"
127 sodipodi:rx="2.4840367"
128 sodipodi:cy="276.00519"
129 sodipodi:cx="246.30179"
130 id="path3003"
131 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"
132 sodipodi:type="arc" />
133 <path
134 sodipodi:type="arc"
135 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"
136 id="path3017"
137 sodipodi:cx="246.30179"
138 sodipodi:cy="276.00519"
139 sodipodi:rx="2.4840367"
140 sodipodi:ry="2.4840367"
141 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"
142 transform="translate(-0.38215944,-1.5286383)" />
143 <path
144 sodipodi:type="arc"
145 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"
146 id="path3019"
147 sodipodi:cx="246.30179"
148 sodipodi:cy="276.00519"
149 sodipodi:rx="2.4840367"
150 sodipodi:ry="2.4840367"
151 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"
152 transform="translate(-0.38215944,-76.81406)" />
153 <path
154 transform="translate(47.769935,-44.330504)"
155 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"
156 sodipodi:ry="2.4840367"
157 sodipodi:rx="2.4840367"
158 sodipodi:cy="276.00519"
159 sodipodi:cx="246.30179"
160 id="path3021"
161 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"
162 sodipodi:type="arc" />
163 <path
164 sodipodi:type="arc"
165 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"
166 id="path3023"
167 sodipodi:cx="246.30179"
168 sodipodi:cy="276.00519"
169 sodipodi:rx="2.4840367"
170 sodipodi:ry="2.4840367"
171 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"
172 transform="translate(45.476978,36.305146)" />
173 <text
174 sodipodi:linespacing="125%"
175 id="text3025"
176 y="272.75684"
177 x="256.04684"
178 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"
179 xml:space="preserve"><tspan
180 id="tspan3029"
181 y="272.75684"
182 x="256.04684"
183 sodipodi:role="line">Pelvis</tspan></text>
184 <text
185 sodipodi:linespacing="125%"
186 id="text3033"
187 y="194.03198"
188 x="254.5182"
189 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"
190 xml:space="preserve"><tspan
191 y="194.03198"
192 x="254.5182"
193 id="tspan3035"
194 sodipodi:role="line">Spine</tspan></text>
195 <text
196 sodipodi:linespacing="125%"
197 id="text3037"
198 y="159.63763"
199 x="252.98958"
200 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"
201 xml:space="preserve"><tspan
202 y="159.63763"
203 x="252.98958"
204 id="tspan3039"
205 sodipodi:role="line">Head</tspan></text>
206 <text
207 sodipodi:linespacing="125%"
208 id="text3041"
209 y="230.33714"
210 x="303.8168"
211 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"
212 xml:space="preserve"><tspan
213 y="230.33714"
214 x="303.8168"
215 id="tspan3043"
216 sodipodi:role="line">Arm</tspan></text>
217 <text
218 sodipodi:linespacing="125%"
219 id="text3045"
220 y="310.59064"
221 x="301.90598"
222 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"
223 xml:space="preserve"><tspan
224 y="310.59064"
225 x="301.90598"
226 id="tspan3047"
227 sodipodi:role="line">Leg</tspan></text>
228 </g>
229 <text
230 sodipodi:linespacing="125%"
231 id="text3049"
232 y="102.99821"
233 x="298.08438"
234 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"
235 xml:space="preserve"><tspan
236 id="tspan3051"
237 y="102.99821"
238 x="298.08438"
239 sodipodi:role="line">Pelvis</tspan></text>
240 <text
241 sodipodi:linespacing="125%"
242 id="text3057"
243 y="193.95218"
244 x="392.85999"
245 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"
246 xml:space="preserve"><tspan
247 y="193.95218"
248 x="392.85999"
249 id="tspan3059"
250 sodipodi:role="line">Head</tspan></text>
251 <text
252 sodipodi:linespacing="125%"
253 id="text3061"
254 y="195.09868"
255 x="316.0459"
256 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"
257 xml:space="preserve"><tspan
258 y="195.09868"
259 x="316.0459"
260 id="tspan3063"
261 sodipodi:role="line">Arm</tspan></text>
262 <text
263 sodipodi:linespacing="125%"
264 id="text3053"
265 y="147.85847"
266 x="346.23648"
267 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"
268 xml:space="preserve"><tspan
269 y="147.85847"
270 x="346.23648"
271 id="tspan3055"
272 sodipodi:role="line">Spine</tspan></text>
273 <text
274 sodipodi:linespacing="125%"
275 id="text3065"
276 y="147.73885"
277 x="260.63275"
278 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"
279 xml:space="preserve"><tspan
280 y="147.73885"
281 x="260.63275"
282 id="tspan3067"
283 sodipodi:role="line">Leg</tspan></text>
284 <path
285 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
286 d="m 272.09755,137.39258 38.21594,-28.2798 43.56619,25.22252"
287 id="path3129"
288 inkscape:connector-curvature="0" />
289 <path
290 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
291 d="m 327.89283,184.01604 33.63003,-29.80844 40.50891,25.98684"
292 id="path3131"
293 inkscape:connector-curvature="0" />
294 <text
295 sodipodi:linespacing="125%"
296 id="text5122"
297 y="63.800404"
298 x="300.70157"
299 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"
300 xml:space="preserve"><tspan
301 id="tspan5126"
302 y="63.800404"
303 x="300.70157"
304 sodipodi:role="line">Root</tspan></text>
305 <text
306 sodipodi:linespacing="125%"
307 id="text5130"
308 y="291.58145"
309 x="329.14432"
310 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"
311 xml:space="preserve"><tspan
312 y="291.58145"
313 x="329.14432"
314 id="tspan5132"
315 sodipodi:role="line">Root</tspan></text>
316 <text
317 sodipodi:linespacing="125%"
318 id="text5134"
319 y="290.80313"
320 x="56.859642"
321 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"
322 xml:space="preserve"><tspan
323 y="290.80313"
324 x="56.859642"
325 id="tspan5136"
326 sodipodi:role="line">Root</tspan></text>
327 <path
328 inkscape:connector-curvature="0"
329 id="path5138"
330 d="m 311.62686,90.551568 0,-22.16525"
331 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
332 <text
333 xml:space="preserve"
334 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"
335 x="54.242455"
336 y="335.71423"
337 id="text3172"
338 sodipodi:linespacing="125%"><tspan
339 sodipodi:role="line"
340 x="54.242455"
341 y="335.71423"
342 id="tspan3174">Pelvis</tspan></text>
343 <text
344 xml:space="preserve"
345 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"
346 x="148.91333"
347 y="426.66821"
348 id="text3176"
349 sodipodi:linespacing="125%"><tspan
350 sodipodi:role="line"
351 id="tspan3178"
352 x="148.91333"
353 y="426.66821">Head</tspan></text>
354 <text
355 xml:space="preserve"
356 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"
357 x="72.099274"
358 y="427.8147"
359 id="text3180"
360 sodipodi:linespacing="125%"><tspan
361 sodipodi:role="line"
362 id="tspan3182"
363 x="72.099274"
364 y="427.8147">Arm</tspan></text>
365 <text
366 xml:space="preserve"
367 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"
368 x="102.28986"
369 y="380.57449"
370 id="text3184"
371 sodipodi:linespacing="125%"><tspan
372 sodipodi:role="line"
373 id="tspan3186"
374 x="102.28986"
375 y="380.57449">Spine</tspan></text>
376 <text
377 xml:space="preserve"
378 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"
379 x="16.686127"
380 y="380.45486"
381 id="text3188"
382 sodipodi:linespacing="125%"><tspan
383 sodipodi:role="line"
384 id="tspan3190"
385 x="16.686127"
386 y="380.45486">Leg</tspan></text>
387 <path
388 inkscape:connector-curvature="0"
389 id="path3192"
390 d="m 28.15094,370.10858 38.21594,-28.2798 43.56619,25.22252"
391 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" />
392 <path
393 inkscape:connector-curvature="0"
394 id="path3194"
395 d="m 83.94622,416.73204 33.63003,-29.80844 40.50891,25.98684"
396 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" />
397 <path
398 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
399 d="m 121.39785,365.90483 c 0,0 -4.96808,-33.63004 -35.15868,-34.77652"
400 id="path3982"
401 inkscape:connector-curvature="0" />
402 <path
403 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
404 d="m 20.8899,367.43346 c 0,0 -4.20375,-34.01219 29.42628,-34.77651"
405 id="path3984"
406 inkscape:connector-curvature="0" />
407 <path
408 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
409 d="m 164.19971,415.2034 c 0,0 1.52864,-38.59811 -27.13332,-37.83379"
410 id="path3986"
411 inkscape:connector-curvature="0" />
412 <path
413 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
414 d="m 79.74246,417.87852 c 0,0 -8.78966,-38.98027 19.10798,-39.36243"
415 id="path3988"
416 inkscape:connector-curvature="0" />
417 <text
418 sodipodi:linespacing="125%"
419 id="text4804"
420 y="337.64984"
421 x="326.52713"
422 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"
423 xml:space="preserve"><tspan
424 id="tspan4806"
425 y="337.64984"
426 x="326.52713"
427 sodipodi:role="line">Pelvis</tspan></text>
428 <text
429 sodipodi:linespacing="125%"
430 id="text4808"
431 y="428.60385"
432 x="421.3027"
433 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"
434 xml:space="preserve"><tspan
435 y="428.60385"
436 x="421.3027"
437 id="tspan4810"
438 sodipodi:role="line">Head</tspan></text>
439 <text
440 sodipodi:linespacing="125%"
441 id="text4812"
442 y="429.75034"
443 x="344.48862"
444 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"
445 xml:space="preserve"><tspan
446 y="429.75034"
447 x="344.48862"
448 id="tspan4814"
449 sodipodi:role="line">Arm</tspan></text>
450 <text
451 sodipodi:linespacing="125%"
452 id="text4816"
453 y="382.51013"
454 x="374.67923"
455 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"
456 xml:space="preserve"><tspan
457 y="382.51013"
458 x="374.67923"
459 id="tspan4818"
460 sodipodi:role="line">Spine</tspan></text>
461 <text
462 sodipodi:linespacing="125%"
463 id="text4820"
464 y="382.3905"
465 x="289.0755"
466 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"
467 xml:space="preserve"><tspan
468 y="382.3905"
469 x="289.0755"
470 id="tspan4822"
471 sodipodi:role="line">Leg</tspan></text>
472 <path
473 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"
474 d="m 300.54031,372.04421 38.21594,-28.2798 43.56619,25.22252"
475 id="path4824"
476 inkscape:connector-curvature="0" />
477 <path
478 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"
479 d="m 356.33559,418.66767 33.63003,-29.80844 40.50891,25.98684"
480 id="path4826"
481 inkscape:connector-curvature="0" />
482 <path
483 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
484 d="m 323.88885,289.99516 c 0,0 -27.54265,43.32913 -27.92481,82.69155"
485 id="path4828"
486 inkscape:connector-curvature="0"
487 sodipodi:nodetypes="cc" />
488 <path
489 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
490 d="m 354.56558,294.70096 c 18.53473,0.57324 34.64538,35.94821 34.26322,77.6036"
491 id="path4830"
492 inkscape:connector-curvature="0"
493 sodipodi:nodetypes="cc" />
494 <path
495 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
496 d="m 355.01331,287.12333 c 62.29199,-11.46478 81.20326,81.74179 81.96758,129.12957"
497 id="path4832"
498 inkscape:connector-curvature="0"
499 sodipodi:nodetypes="cc" />
500 <path
501 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
502 d="m 327.70578,296.87403 c -13.03513,36.78469 -7.75513,93.90861 14.88172,125.87558"
503 id="path4836"
504 inkscape:connector-curvature="0"
505 sodipodi:nodetypes="cc" />
506 <text
507 xml:space="preserve"
508 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"
509 x="312.99045"
510 y="262.5433"
511 id="text5022"
512 sodipodi:linespacing="125%"><tspan
513 sodipodi:role="line"
514 x="312.99045"
515 y="262.5433"
516 id="tspan5030">Offset Matrices</tspan></text>
517 <text
518 xml:space="preserve"
519 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"
520 x="74.542519"
521 y="38.309559"
522 id="text5034"
523 sodipodi:linespacing="125%"><tspan
524 sodipodi:role="line"
525 id="tspan5036"
526 x="74.542519"
527 y="38.309559">Model</tspan></text>
528 <text
529 xml:space="preserve"
530 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"
531 x="299.99161"
532 y="38.309559"
533 id="text5038"
534 sodipodi:linespacing="125%"><tspan
535 sodipodi:role="line"
536 id="tspan5040"
537 x="299.99161"
538 y="38.309559">Bone Hierarchy</tspan></text>
539 <text
540 xml:space="preserve"
541 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"
542 x="38.920315"
543 y="263.29245"
544 id="text5042"
545 sodipodi:linespacing="125%"><tspan
546 sodipodi:role="line"
547 id="tspan5044"
548 x="38.920315"
549 y="263.29245">Node Transformations</tspan></text>
550 <g
551 id="g5110"
552 transform="translate(-25.222526,2.2929569)">
553 <text
554 sodipodi:linespacing="125%"
555 id="text5082"
556 y="453.24557"
557 x="46.994602"
558 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"
559 xml:space="preserve"><tspan
560 id="tspan5086"
561 y="453.24557"
562 x="46.994602"
563 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>
564 <text
565 sodipodi:linespacing="125%"
566 id="text5090"
567 y="457.26581"
568 x="115.63354"
569 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"
570 xml:space="preserve"><tspan
571 y="457.26581"
572 x="115.63354"
573 id="tspan5092"
574 sodipodi:role="line">Head</tspan></text>
575 <text
576 sodipodi:linespacing="125%"
577 id="text5098"
578 y="457.36346"
579 x="432.06158"
580 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"
581 xml:space="preserve"><tspan
582 y="457.36346"
583 x="432.06158"
584 id="tspan5100"
585 sodipodi:role="line">Spine</tspan></text>
586 <text
587 xml:space="preserve"
588 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"
589 x="304.03815"
590 y="457.26581"
591 id="text5102"
592 sodipodi:linespacing="125%"><tspan
593 sodipodi:role="line"
594 id="tspan5104"
595 x="304.03815"
596 y="457.26581">Head</tspan></text>
597 <text
598 sodipodi:linespacing="125%"
599 id="text5106"
600 y="457.26581"
601 x="174.86826"
602 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"
603 xml:space="preserve"><tspan
604 y="457.26581"
605 x="174.86826"
606 id="tspan5108"
607 sodipodi:role="line">Head</tspan></text>
608 <text
609 sodipodi:linespacing="125%"
610 id="text5383"
611 y="457.26581"
612 x="558.59253"
613 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"
614 xml:space="preserve"><tspan
615 y="457.26581"
616 x="558.59253"
617 id="tspan5385"
618 sodipodi:role="line">Pelvis</tspan></text>
619 </g>
620 <path
621 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"
622 d="m 67.784935,297.68201 0,25.98684"
623 id="path5159"
624 inkscape:connector-curvature="0" />
625 <path
626 inkscape:connector-curvature="0"
627 id="path5161"
628 d="m 340.06961,298.44633 0,25.98684"
629 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" />
630 <path
631 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
632 d="m 58.4704,297.00642 c 20.254453,-17.96151 26.369005,-35.923 6.878872,-38.98027"
633 id="path5195"
634 inkscape:connector-curvature="0"
635 transform="translate(17.418549,29.719715)"
636 sodipodi:nodetypes="cc" />
637 <path
638 sodipodi:nodetypes="cc"
639 inkscape:connector-curvature="0"
640 id="path5381"
641 d="m 349.70149,296.32232 c -0.65158,-1.04253 25.97218,13.94397 2.37637,32.74583"
642 style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)" />
643 </g>
644 </svg>
0 # Doxyfile 1.5.8
1
2 #---------------------------------------------------------------------------
3 # Project related configuration options
4 #---------------------------------------------------------------------------
5 DOXYFILE_ENCODING = UTF-8
6 PROJECT_NAME = Assimp
7 PROJECT_NUMBER = "v2.0 (November 2010)"
8 OUTPUT_DIRECTORY =
9 CREATE_SUBDIRS = NO
10 OUTPUT_LANGUAGE = English
11 BRIEF_MEMBER_DESC = YES
12 REPEAT_BRIEF = YES
13 ABBREVIATE_BRIEF = "The $name class " \
14 "The $name widget " \
15 "The $name file " \
16 is \
17 provides \
18 specifies \
19 contains \
20 represents \
21 a \
22 an \
23 the
24 ALWAYS_DETAILED_SEC = NO
25 INLINE_INHERITED_MEMB = NO
26 FULL_PATH_NAMES = NO
27 STRIP_FROM_PATH =
28 STRIP_FROM_INC_PATH =
29 SHORT_NAMES = NO
30 JAVADOC_AUTOBRIEF = YES
31 QT_AUTOBRIEF = NO
32 MULTILINE_CPP_IS_BRIEF = NO
33 INHERIT_DOCS = YES
34 SEPARATE_MEMBER_PAGES = NO
35 TAB_SIZE = 8
36 ALIASES =
37 OPTIMIZE_OUTPUT_FOR_C = NO
38 OPTIMIZE_OUTPUT_JAVA = NO
39 OPTIMIZE_FOR_FORTRAN = NO
40 OPTIMIZE_OUTPUT_VHDL = NO
41 EXTENSION_MAPPING =
42 BUILTIN_STL_SUPPORT = YES
43 CPP_CLI_SUPPORT = NO
44 SIP_SUPPORT = NO
45 IDL_PROPERTY_SUPPORT = YES
46 DISTRIBUTE_GROUP_DOC = NO
47 SUBGROUPING = YES
48 TYPEDEF_HIDES_STRUCT = YES
49 SYMBOL_CACHE_SIZE = 0
50 #---------------------------------------------------------------------------
51 # Build related configuration options
52 #---------------------------------------------------------------------------
53 EXTRACT_ALL = YES
54 EXTRACT_PRIVATE = NO
55 EXTRACT_STATIC = YES
56 EXTRACT_LOCAL_CLASSES = YES
57 EXTRACT_LOCAL_METHODS = NO
58 EXTRACT_ANON_NSPACES = NO
59 HIDE_UNDOC_MEMBERS = YES
60 HIDE_UNDOC_CLASSES = YES
61 HIDE_FRIEND_COMPOUNDS = NO
62 HIDE_IN_BODY_DOCS = NO
63 INTERNAL_DOCS = NO
64 CASE_SENSE_NAMES = NO
65 HIDE_SCOPE_NAMES = NO
66 SHOW_INCLUDE_FILES = NO
67 INLINE_INFO = YES
68 SORT_MEMBER_DOCS = YES
69 SORT_BRIEF_DOCS = YES
70 SORT_GROUP_NAMES = NO
71 SORT_BY_SCOPE_NAME = YES
72 GENERATE_TODOLIST = YES
73 GENERATE_TESTLIST = YES
74 GENERATE_BUGLIST = YES
75 GENERATE_DEPRECATEDLIST= YES
76 ENABLED_SECTIONS =
77 MAX_INITIALIZER_LINES = 30
78 SHOW_USED_FILES = YES
79 SHOW_DIRECTORIES = NO
80 SHOW_FILES = YES
81 SHOW_NAMESPACES = YES
82 FILE_VERSION_FILTER =
83 LAYOUT_FILE =
84 #---------------------------------------------------------------------------
85 # configuration options related to warning and progress messages
86 #---------------------------------------------------------------------------
87 QUIET = NO
88 WARNINGS = YES
89 WARN_IF_UNDOCUMENTED = YES
90 WARN_IF_DOC_ERROR = YES
91 WARN_NO_PARAMDOC = NO
92 WARN_FORMAT = "$file:$line: $text"
93 WARN_LOGFILE =
94 #---------------------------------------------------------------------------
95 # configuration options related to the input files
96 #---------------------------------------------------------------------------
97 INPUT = ../include/ \
98 ../doc/dox.h \
99 ../code/BaseImporter.h
100 INPUT_ENCODING = UTF-8
101 FILE_PATTERNS = *.c \
102 *.cc \
103 *.cxx \
104 *.cpp \
105 *.c++ \
106 *.d \
107 *.java \
108 *.ii \
109 *.ixx \
110 *.ipp \
111 *.i++ \
112 *.inl \
113 *.h \
114 *.hh \
115 *.hxx \
116 *.hpp \
117 *.h++ \
118 *.idl \
119 *.odl \
120 *.cs \
121 *.php \
122 *.php3 \
123 *.inc \
124 *.m \
125 *.mm \
126 *.dox \
127 *.py
128 RECURSIVE = YES
129 EXCLUDE =
130 EXCLUDE_SYMLINKS = NO
131 EXCLUDE_PATTERNS = */.svn/* \
132 */.svn
133 EXCLUDE_SYMBOLS =
134 EXAMPLE_PATH =
135 EXAMPLE_PATTERNS = *
136 EXAMPLE_RECURSIVE = NO
137 IMAGE_PATH =
138 INPUT_FILTER =
139 FILTER_PATTERNS =
140 FILTER_SOURCE_FILES = NO
141 #---------------------------------------------------------------------------
142 # configuration options related to source browsing
143 #---------------------------------------------------------------------------
144 SOURCE_BROWSER = NO
145 INLINE_SOURCES = NO
146 STRIP_CODE_COMMENTS = YES
147 REFERENCED_BY_RELATION = NO
148 REFERENCES_RELATION = NO
149 REFERENCES_LINK_SOURCE = YES
150 USE_HTAGS = NO
151 VERBATIM_HEADERS = NO
152 #---------------------------------------------------------------------------
153 # configuration options related to the alphabetical class index
154 #---------------------------------------------------------------------------
155 ALPHABETICAL_INDEX = YES
156 COLS_IN_ALPHA_INDEX = 5
157 IGNORE_PREFIX =
158 #---------------------------------------------------------------------------
159 # configuration options related to the HTML output
160 #---------------------------------------------------------------------------
161 GENERATE_HTML = YES
162 HTML_OUTPUT = AssimpDoc_Html
163 HTML_FILE_EXTENSION = .html
164 HTML_HEADER =
165 HTML_FOOTER =
166 HTML_STYLESHEET = style.css
167 HTML_ALIGN_MEMBERS = YES
168 HTML_DYNAMIC_SECTIONS = NO
169 GENERATE_DOCSET = NO
170 DOCSET_FEEDNAME = "Doxygen generated docs"
171 DOCSET_BUNDLE_ID = org.doxygen.Project
172 GENERATE_HTMLHELP = YES
173 CHM_FILE = AssimpDoc.chm
174 HHC_LOCATION = "C:\Program Files (x86)\HTML Help Workshop/hhc.exe"
175 GENERATE_CHI = NO
176 CHM_INDEX_ENCODING =
177 BINARY_TOC = NO
178 TOC_EXPAND = NO
179 GENERATE_QHP = NO
180 QCH_FILE =
181 QHP_NAMESPACE =
182 QHP_VIRTUAL_FOLDER = doc
183 QHP_CUST_FILTER_NAME =
184 QHP_CUST_FILTER_ATTRS =
185 QHP_SECT_FILTER_ATTRS =
186 QHG_LOCATION =
187 DISABLE_INDEX = NO
188 ENUM_VALUES_PER_LINE = 4
189 GENERATE_TREEVIEW = YES
190 TREEVIEW_WIDTH = 250
191 FORMULA_FONTSIZE = 10
192 #---------------------------------------------------------------------------
193 # configuration options related to the LaTeX output
194 #---------------------------------------------------------------------------
195 GENERATE_LATEX = NO
196 LATEX_OUTPUT = latex
197 LATEX_CMD_NAME = latex
198 MAKEINDEX_CMD_NAME = makeindex
199 COMPACT_LATEX = NO
200 PAPER_TYPE = a4wide
201 EXTRA_PACKAGES =
202 LATEX_HEADER =
203 PDF_HYPERLINKS = NO
204 USE_PDFLATEX = NO
205 LATEX_BATCHMODE = NO
206 LATEX_HIDE_INDICES = NO
207 #---------------------------------------------------------------------------
208 # configuration options related to the RTF output
209 #---------------------------------------------------------------------------
210 GENERATE_RTF = NO
211 RTF_OUTPUT = rtf
212 COMPACT_RTF = NO
213 RTF_HYPERLINKS = NO
214 RTF_STYLESHEET_FILE =
215 RTF_EXTENSIONS_FILE =
216 #---------------------------------------------------------------------------
217 # configuration options related to the man page output
218 #---------------------------------------------------------------------------
219 GENERATE_MAN = NO
220 MAN_OUTPUT = man
221 MAN_EXTENSION = .3
222 MAN_LINKS = NO
223 #---------------------------------------------------------------------------
224 # configuration options related to the XML output
225 #---------------------------------------------------------------------------
226 GENERATE_XML = NO
227 XML_OUTPUT = xml
228 XML_SCHEMA =
229 XML_DTD =
230 XML_PROGRAMLISTING = YES
231 #---------------------------------------------------------------------------
232 # configuration options for the AutoGen Definitions output
233 #---------------------------------------------------------------------------
234 GENERATE_AUTOGEN_DEF = NO
235 #---------------------------------------------------------------------------
236 # configuration options related to the Perl module output
237 #---------------------------------------------------------------------------
238 GENERATE_PERLMOD = NO
239 PERLMOD_LATEX = NO
240 PERLMOD_PRETTY = YES
241 PERLMOD_MAKEVAR_PREFIX =
242 #---------------------------------------------------------------------------
243 # Configuration options related to the preprocessor
244 #---------------------------------------------------------------------------
245 ENABLE_PREPROCESSING = YES
246 MACRO_EXPANSION = YES
247 EXPAND_ONLY_PREDEF = YES
248 SEARCH_INCLUDES = YES
249 INCLUDE_PATH =
250 INCLUDE_FILE_PATTERNS =
251 PREDEFINED = ASSIMP_DOXYGEN_BUILD=1 \
252 __cplusplus
253 EXPAND_AS_DEFINED = C_STRUCT \
254 C_ENUM
255 SKIP_FUNCTION_MACROS = YES
256 #---------------------------------------------------------------------------
257 # Configuration::additions related to external references
258 #---------------------------------------------------------------------------
259 TAGFILES =
260 GENERATE_TAGFILE =
261 ALLEXTERNALS = NO
262 EXTERNAL_GROUPS = YES
263 PERL_PATH = /usr/bin/perl
264 #---------------------------------------------------------------------------
265 # Configuration options related to the dot tool
266 #---------------------------------------------------------------------------
267 CLASS_DIAGRAMS = NO
268 MSCGEN_PATH =
269 HIDE_UNDOC_RELATIONS = YES
270 HAVE_DOT = NO
271 DOT_FONTNAME = FreeSans
272 DOT_FONTSIZE = 10
273 DOT_FONTPATH =
274 CLASS_GRAPH = YES
275 COLLABORATION_GRAPH = YES
276 GROUP_GRAPHS = YES
277 UML_LOOK = NO
278 TEMPLATE_RELATIONS = NO
279 INCLUDE_GRAPH = YES
280 INCLUDED_BY_GRAPH = YES
281 CALL_GRAPH = NO
282 CALLER_GRAPH = NO
283 GRAPHICAL_HIERARCHY = YES
284 DIRECTORY_GRAPH = YES
285 DOT_IMAGE_FORMAT = png
286 DOT_PATH =
287 DOTFILE_DIRS =
288 DOT_GRAPH_MAX_NODES = 50
289 MAX_DOT_GRAPH_DEPTH = 1000
290 DOT_TRANSPARENT = NO
291 DOT_MULTI_TARGETS = NO
292 GENERATE_LEGEND = YES
293 DOT_CLEANUP = YES
294 #---------------------------------------------------------------------------
295 # Options related to the search engine
296 #---------------------------------------------------------------------------
297 SEARCHENGINE = NO
0 # Doxyfile 1.8.3.1
1
2 # This file describes the settings to be used by the documentation system
3 # doxygen (www.doxygen.org) for a project
4 #
5 # All text after a hash (#) is considered a comment and will be ignored
6 # The format is:
7 # TAG = value [value, ...]
8 # For lists items can also be appended using:
9 # TAG += value [value, ...]
10 # Values that contain spaces should be placed between quotes (" ")
11
12 #---------------------------------------------------------------------------
13 # Project related configuration options
14 #---------------------------------------------------------------------------
15
16 # This tag specifies the encoding used for all characters in the config file
17 # that follow. The default is UTF-8 which is also the encoding used for all
18 # text before the first occurrence of this tag. Doxygen uses libiconv (or the
19 # iconv built into libc) for the transcoding. See
20 # http://www.gnu.org/software/libiconv for the list of possible encodings.
21
22 DOXYFILE_ENCODING = UTF-8
23
24 # The PROJECT_NAME tag is a single word (or sequence of words) that should
25 # identify the project. Note that if you do not use Doxywizard you need
26 # to put quotes around the project name if it contains spaces.
27
28 PROJECT_NAME = Assimp
29
30 # The PROJECT_NUMBER tag can be used to enter a project or revision number.
31 # This could be handy for archiving the generated documentation or
32 # if some version control system is used.
33
34 PROJECT_NUMBER = "v3.1.1 (June 2014)"
35
36 # Using the PROJECT_BRIEF tag one can provide an optional one line description
37 # for a project that appears at the top of each page and should give viewer
38 # a quick idea about the purpose of the project. Keep the description short.
39
40 PROJECT_BRIEF =
41
42 # With the PROJECT_LOGO tag one can specify an logo or icon that is
43 # included in the documentation. The maximum height of the logo should not
44 # exceed 55 pixels and the maximum width should not exceed 200 pixels.
45 # Doxygen will copy the logo to the output directory.
46
47 PROJECT_LOGO =
48
49 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
50 # base path where the generated documentation will be put.
51 # If a relative path is entered, it will be relative to the location
52 # where doxygen was started. If left blank the current directory will be used.
53
54 OUTPUT_DIRECTORY =
55
56 # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
57 # 4096 sub-directories (in 2 levels) under the output directory of each output
58 # format and will distribute the generated files over these directories.
59 # Enabling this option can be useful when feeding doxygen a huge amount of
60 # source files, where putting all generated files in the same directory would
61 # otherwise cause performance problems for the file system.
62
63 CREATE_SUBDIRS = NO
64
65 # The OUTPUT_LANGUAGE tag is used to specify the language in which all
66 # documentation generated by doxygen is written. Doxygen will use this
67 # information to generate all constant output in the proper language.
68 # The default language is English, other supported languages are:
69 # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
70 # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
71 # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
72 # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
73 # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak,
74 # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
75
76 OUTPUT_LANGUAGE = English
77
78 # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
79 # include brief member descriptions after the members that are listed in
80 # the file and class documentation (similar to JavaDoc).
81 # Set to NO to disable this.
82
83 BRIEF_MEMBER_DESC = YES
84
85 # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
86 # the brief description of a member or function before the detailed description.
87 # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
88 # brief descriptions will be completely suppressed.
89
90 REPEAT_BRIEF = YES
91
92 # This tag implements a quasi-intelligent brief description abbreviator
93 # that is used to form the text in various listings. Each string
94 # in this list, if found as the leading text of the brief description, will be
95 # stripped from the text and the result after processing the whole list, is
96 # used as the annotated text. Otherwise, the brief description is used as-is.
97 # If left blank, the following values are used ("$name" is automatically
98 # replaced with the name of the entity): "The $name class" "The $name widget"
99 # "The $name file" "is" "provides" "specifies" "contains"
100 # "represents" "a" "an" "the"
101
102 ABBREVIATE_BRIEF = "The $name class " \
103 "The $name widget " \
104 "The $name file " \
105 is \
106 provides \
107 specifies \
108 contains \
109 represents \
110 a \
111 an \
112 the
113
114 # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
115 # Doxygen will generate a detailed section even if there is only a brief
116 # description.
117
118 ALWAYS_DETAILED_SEC = NO
119
120 # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
121 # inherited members of a class in the documentation of that class as if those
122 # members were ordinary class members. Constructors, destructors and assignment
123 # operators of the base classes will not be shown.
124
125 INLINE_INHERITED_MEMB = NO
126
127 # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
128 # path before files name in the file list and in the header files. If set
129 # to NO the shortest path that makes the file name unique will be used.
130
131 FULL_PATH_NAMES = NO
132
133 # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
134 # can be used to strip a user-defined part of the path. Stripping is
135 # only done if one of the specified strings matches the left-hand part of
136 # the path. The tag can be used to show relative paths in the file list.
137 # If left blank the directory from which doxygen is run is used as the
138 # path to strip. Note that you specify absolute paths here, but also
139 # relative paths, which will be relative from the directory where doxygen is
140 # started.
141
142 STRIP_FROM_PATH =
143
144 # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
145 # the path mentioned in the documentation of a class, which tells
146 # the reader which header file to include in order to use a class.
147 # If left blank only the name of the header file containing the class
148 # definition is used. Otherwise one should specify the include paths that
149 # are normally passed to the compiler using the -I flag.
150
151 STRIP_FROM_INC_PATH =
152
153 # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
154 # (but less readable) file names. This can be useful if your file system
155 # doesn't support long names like on DOS, Mac, or CD-ROM.
156
157 SHORT_NAMES = NO
158
159 # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
160 # will interpret the first line (until the first dot) of a JavaDoc-style
161 # comment as the brief description. If set to NO, the JavaDoc
162 # comments will behave just like regular Qt-style comments
163 # (thus requiring an explicit @brief command for a brief description.)
164
165 JAVADOC_AUTOBRIEF = YES
166
167 # If the QT_AUTOBRIEF tag is set to YES then Doxygen will
168 # interpret the first line (until the first dot) of a Qt-style
169 # comment as the brief description. If set to NO, the comments
170 # will behave just like regular Qt-style comments (thus requiring
171 # an explicit \brief command for a brief description.)
172
173 QT_AUTOBRIEF = NO
174
175 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
176 # treat a multi-line C++ special comment block (i.e. a block of //! or ///
177 # comments) as a brief description. This used to be the default behaviour.
178 # The new default is to treat a multi-line C++ comment block as a detailed
179 # description. Set this tag to YES if you prefer the old behaviour instead.
180
181 MULTILINE_CPP_IS_BRIEF = NO
182
183 # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
184 # member inherits the documentation from any documented member that it
185 # re-implements.
186
187 INHERIT_DOCS = YES
188
189 # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
190 # a new page for each member. If set to NO, the documentation of a member will
191 # be part of the file/class/namespace that contains it.
192
193 SEPARATE_MEMBER_PAGES = NO
194
195 # The TAB_SIZE tag can be used to set the number of spaces in a tab.
196 # Doxygen uses this value to replace tabs by spaces in code fragments.
197
198 TAB_SIZE = 8
199
200 # This tag can be used to specify a number of aliases that acts
201 # as commands in the documentation. An alias has the form "name=value".
202 # For example adding "sideeffect=\par Side Effects:\n" will allow you to
203 # put the command \sideeffect (or @sideeffect) in the documentation, which
204 # will result in a user-defined paragraph with heading "Side Effects:".
205 # You can put \n's in the value part of an alias to insert newlines.
206
207 ALIASES =
208
209 # This tag can be used to specify a number of word-keyword mappings (TCL only).
210 # A mapping has the form "name=value". For example adding
211 # "class=itcl::class" will allow you to use the command class in the
212 # itcl::class meaning.
213
214 TCL_SUBST =
215
216 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
217 # sources only. Doxygen will then generate output that is more tailored for C.
218 # For instance, some of the names that are used will be different. The list
219 # of all members will be omitted, etc.
220
221 OPTIMIZE_OUTPUT_FOR_C = NO
222
223 # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
224 # sources only. Doxygen will then generate output that is more tailored for
225 # Java. For instance, namespaces will be presented as packages, qualified
226 # scopes will look different, etc.
227
228 OPTIMIZE_OUTPUT_JAVA = NO
229
230 # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
231 # sources only. Doxygen will then generate output that is more tailored for
232 # Fortran.
233
234 OPTIMIZE_FOR_FORTRAN = NO
235
236 # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
237 # sources. Doxygen will then generate output that is tailored for
238 # VHDL.
239
240 OPTIMIZE_OUTPUT_VHDL = NO
241
242 # Doxygen selects the parser to use depending on the extension of the files it
243 # parses. With this tag you can assign which parser to use for a given
244 # extension. Doxygen has a built-in mapping, but you can override or extend it
245 # using this tag. The format is ext=language, where ext is a file extension,
246 # and language is one of the parsers supported by doxygen: IDL, Java,
247 # Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,
248 # C++. For instance to make doxygen treat .inc files as Fortran files (default
249 # is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note
250 # that for custom extensions you also need to set FILE_PATTERNS otherwise the
251 # files are not read by doxygen.
252
253 EXTENSION_MAPPING =
254
255 # If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
256 # comments according to the Markdown format, which allows for more readable
257 # documentation. See http://daringfireball.net/projects/markdown/ for details.
258 # The output of markdown processing is further processed by doxygen, so you
259 # can mix doxygen, HTML, and XML commands with Markdown formatting.
260 # Disable only in case of backward compatibilities issues.
261
262 MARKDOWN_SUPPORT = YES
263
264 # When enabled doxygen tries to link words that correspond to documented classes,
265 # or namespaces to their corresponding documentation. Such a link can be
266 # prevented in individual cases by by putting a % sign in front of the word or
267 # globally by setting AUTOLINK_SUPPORT to NO.
268
269 AUTOLINK_SUPPORT = YES
270
271 # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
272 # to include (a tag file for) the STL sources as input, then you should
273 # set this tag to YES in order to let doxygen match functions declarations and
274 # definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
275 # func(std::string) {}). This also makes the inheritance and collaboration
276 # diagrams that involve STL classes more complete and accurate.
277
278 BUILTIN_STL_SUPPORT = YES
279
280 # If you use Microsoft's C++/CLI language, you should set this option to YES to
281 # enable parsing support.
282
283 CPP_CLI_SUPPORT = NO
284
285 # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
286 # Doxygen will parse them like normal C++ but will assume all classes use public
287 # instead of private inheritance when no explicit protection keyword is present.
288
289 SIP_SUPPORT = NO
290
291 # For Microsoft's IDL there are propget and propput attributes to indicate
292 # getter and setter methods for a property. Setting this option to YES (the
293 # default) will make doxygen replace the get and set methods by a property in
294 # the documentation. This will only work if the methods are indeed getting or
295 # setting a simple type. If this is not the case, or you want to show the
296 # methods anyway, you should set this option to NO.
297
298 IDL_PROPERTY_SUPPORT = YES
299
300 # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
301 # tag is set to YES, then doxygen will reuse the documentation of the first
302 # member in the group (if any) for the other members of the group. By default
303 # all members of a group must be documented explicitly.
304
305 DISTRIBUTE_GROUP_DOC = NO
306
307 # Set the SUBGROUPING tag to YES (the default) to allow class member groups of
308 # the same type (for instance a group of public functions) to be put as a
309 # subgroup of that type (e.g. under the Public Functions section). Set it to
310 # NO to prevent subgrouping. Alternatively, this can be done per class using
311 # the \nosubgrouping command.
312
313 SUBGROUPING = YES
314
315 # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
316 # unions are shown inside the group in which they are included (e.g. using
317 # @ingroup) instead of on a separate page (for HTML and Man pages) or
318 # section (for LaTeX and RTF).
319
320 INLINE_GROUPED_CLASSES = NO
321
322 # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
323 # unions with only public data fields will be shown inline in the documentation
324 # of the scope in which they are defined (i.e. file, namespace, or group
325 # documentation), provided this scope is documented. If set to NO (the default),
326 # structs, classes, and unions are shown on a separate page (for HTML and Man
327 # pages) or section (for LaTeX and RTF).
328
329 INLINE_SIMPLE_STRUCTS = NO
330
331 # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
332 # is documented as struct, union, or enum with the name of the typedef. So
333 # typedef struct TypeS {} TypeT, will appear in the documentation as a struct
334 # with name TypeT. When disabled the typedef will appear as a member of a file,
335 # namespace, or class. And the struct will be named TypeS. This can typically
336 # be useful for C code in case the coding convention dictates that all compound
337 # types are typedef'ed and only the typedef is referenced, never the tag name.
338
339 TYPEDEF_HIDES_STRUCT = YES
340
341 # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
342 # determine which symbols to keep in memory and which to flush to disk.
343 # When the cache is full, less often used symbols will be written to disk.
344 # For small to medium size projects (<1000 input files) the default value is
345 # probably good enough. For larger projects a too small cache size can cause
346 # doxygen to be busy swapping symbols to and from disk most of the time
347 # causing a significant performance penalty.
348 # If the system has enough physical memory increasing the cache will improve the
349 # performance by keeping more symbols in memory. Note that the value works on
350 # a logarithmic scale so increasing the size by one will roughly double the
351 # memory usage. The cache size is given by this formula:
352 # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
353 # corresponding to a cache size of 2^16 = 65536 symbols.
354
355 SYMBOL_CACHE_SIZE = 0
356
357 # Similar to the SYMBOL_CACHE_SIZE the size of the symbol lookup cache can be
358 # set using LOOKUP_CACHE_SIZE. This cache is used to resolve symbols given
359 # their name and scope. Since this can be an expensive process and often the
360 # same symbol appear multiple times in the code, doxygen keeps a cache of
361 # pre-resolved symbols. If the cache is too small doxygen will become slower.
362 # If the cache is too large, memory is wasted. The cache size is given by this
363 # formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range is 0..9, the default is 0,
364 # corresponding to a cache size of 2^16 = 65536 symbols.
365
366 LOOKUP_CACHE_SIZE = 0
367
368 #---------------------------------------------------------------------------
369 # Build related configuration options
370 #---------------------------------------------------------------------------
371
372 # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
373 # documentation are documented, even if no documentation was available.
374 # Private class members and static file members will be hidden unless
375 # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
376
377 EXTRACT_ALL = YES
378
379 # If the EXTRACT_PRIVATE tag is set to YES all private members of a class
380 # will be included in the documentation.
381
382 EXTRACT_PRIVATE = NO
383
384 # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
385 # scope will be included in the documentation.
386
387 EXTRACT_PACKAGE = NO
388
389 # If the EXTRACT_STATIC tag is set to YES all static members of a file
390 # will be included in the documentation.
391
392 EXTRACT_STATIC = YES
393
394 # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
395 # defined locally in source files will be included in the documentation.
396 # If set to NO only classes defined in header files are included.
397
398 EXTRACT_LOCAL_CLASSES = YES
399
400 # This flag is only useful for Objective-C code. When set to YES local
401 # methods, which are defined in the implementation section but not in
402 # the interface are included in the documentation.
403 # If set to NO (the default) only methods in the interface are included.
404
405 EXTRACT_LOCAL_METHODS = NO
406
407 # If this flag is set to YES, the members of anonymous namespaces will be
408 # extracted and appear in the documentation as a namespace called
409 # 'anonymous_namespace{file}', where file will be replaced with the base
410 # name of the file that contains the anonymous namespace. By default
411 # anonymous namespaces are hidden.
412
413 EXTRACT_ANON_NSPACES = NO
414
415 # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
416 # undocumented members of documented classes, files or namespaces.
417 # If set to NO (the default) these members will be included in the
418 # various overviews, but no documentation section is generated.
419 # This option has no effect if EXTRACT_ALL is enabled.
420
421 HIDE_UNDOC_MEMBERS = YES
422
423 # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
424 # undocumented classes that are normally visible in the class hierarchy.
425 # If set to NO (the default) these classes will be included in the various
426 # overviews. This option has no effect if EXTRACT_ALL is enabled.
427
428 HIDE_UNDOC_CLASSES = YES
429
430 # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
431 # friend (class|struct|union) declarations.
432 # If set to NO (the default) these declarations will be included in the
433 # documentation.
434
435 HIDE_FRIEND_COMPOUNDS = NO
436
437 # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
438 # documentation blocks found inside the body of a function.
439 # If set to NO (the default) these blocks will be appended to the
440 # function's detailed documentation block.
441
442 HIDE_IN_BODY_DOCS = NO
443
444 # The INTERNAL_DOCS tag determines if documentation
445 # that is typed after a \internal command is included. If the tag is set
446 # to NO (the default) then the documentation will be excluded.
447 # Set it to YES to include the internal documentation.
448
449 INTERNAL_DOCS = NO
450
451 # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
452 # file names in lower-case letters. If set to YES upper-case letters are also
453 # allowed. This is useful if you have classes or files whose names only differ
454 # in case and if your file system supports case sensitive file names. Windows
455 # and Mac users are advised to set this option to NO.
456
457 CASE_SENSE_NAMES = NO
458
459 # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
460 # will show members with their full class and namespace scopes in the
461 # documentation. If set to YES the scope will be hidden.
462
463 HIDE_SCOPE_NAMES = NO
464
465 # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
466 # will put a list of the files that are included by a file in the documentation
467 # of that file.
468
469 SHOW_INCLUDE_FILES = NO
470
471 # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
472 # will list include files with double quotes in the documentation
473 # rather than with sharp brackets.
474
475 FORCE_LOCAL_INCLUDES = NO
476
477 # If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
478 # is inserted in the documentation for inline members.
479
480 INLINE_INFO = YES
481
482 # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
483 # will sort the (detailed) documentation of file and class members
484 # alphabetically by member name. If set to NO the members will appear in
485 # declaration order.
486
487 SORT_MEMBER_DOCS = YES
488
489 # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
490 # brief documentation of file, namespace and class members alphabetically
491 # by member name. If set to NO (the default) the members will appear in
492 # declaration order.
493
494 SORT_BRIEF_DOCS = YES
495
496 # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
497 # will sort the (brief and detailed) documentation of class members so that
498 # constructors and destructors are listed first. If set to NO (the default)
499 # the constructors will appear in the respective orders defined by
500 # SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
501 # This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
502 # and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
503
504 SORT_MEMBERS_CTORS_1ST = NO
505
506 # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
507 # hierarchy of group names into alphabetical order. If set to NO (the default)
508 # the group names will appear in their defined order.
509
510 SORT_GROUP_NAMES = NO
511
512 # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
513 # sorted by fully-qualified names, including namespaces. If set to
514 # NO (the default), the class list will be sorted only by class name,
515 # not including the namespace part.
516 # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
517 # Note: This option applies only to the class list, not to the
518 # alphabetical list.
519
520 SORT_BY_SCOPE_NAME = YES
521
522 # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
523 # do proper type resolution of all parameters of a function it will reject a
524 # match between the prototype and the implementation of a member function even
525 # if there is only one candidate or it is obvious which candidate to choose
526 # by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
527 # will still accept a match between prototype and implementation in such cases.
528
529 STRICT_PROTO_MATCHING = NO
530
531 # The GENERATE_TODOLIST tag can be used to enable (YES) or
532 # disable (NO) the todo list. This list is created by putting \todo
533 # commands in the documentation.
534
535 GENERATE_TODOLIST = YES
536
537 # The GENERATE_TESTLIST tag can be used to enable (YES) or
538 # disable (NO) the test list. This list is created by putting \test
539 # commands in the documentation.
540
541 GENERATE_TESTLIST = YES
542
543 # The GENERATE_BUGLIST tag can be used to enable (YES) or
544 # disable (NO) the bug list. This list is created by putting \bug
545 # commands in the documentation.
546
547 GENERATE_BUGLIST = YES
548
549 # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
550 # disable (NO) the deprecated list. This list is created by putting
551 # \deprecated commands in the documentation.
552
553 GENERATE_DEPRECATEDLIST= YES
554
555 # The ENABLED_SECTIONS tag can be used to enable conditional
556 # documentation sections, marked by \if section-label ... \endif
557 # and \cond section-label ... \endcond blocks.
558
559 ENABLED_SECTIONS =
560
561 # The MAX_INITIALIZER_LINES tag determines the maximum number of lines
562 # the initial value of a variable or macro consists of for it to appear in
563 # the documentation. If the initializer consists of more lines than specified
564 # here it will be hidden. Use a value of 0 to hide initializers completely.
565 # The appearance of the initializer of individual variables and macros in the
566 # documentation can be controlled using \showinitializer or \hideinitializer
567 # command in the documentation regardless of this setting.
568
569 MAX_INITIALIZER_LINES = 30
570
571 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated
572 # at the bottom of the documentation of classes and structs. If set to YES the
573 # list will mention the files that were used to generate the documentation.
574
575 SHOW_USED_FILES = YES
576
577 # Set the SHOW_FILES tag to NO to disable the generation of the Files page.
578 # This will remove the Files entry from the Quick Index and from the
579 # Folder Tree View (if specified). The default is YES.
580
581 SHOW_FILES = YES
582
583 # Set the SHOW_NAMESPACES tag to NO to disable the generation of the
584 # Namespaces page. This will remove the Namespaces entry from the Quick Index
585 # and from the Folder Tree View (if specified). The default is YES.
586
587 SHOW_NAMESPACES = YES
588
589 # The FILE_VERSION_FILTER tag can be used to specify a program or script that
590 # doxygen should invoke to get the current version for each file (typically from
591 # the version control system). Doxygen will invoke the program by executing (via
592 # popen()) the command <command> <input-file>, where <command> is the value of
593 # the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
594 # provided by doxygen. Whatever the program writes to standard output
595 # is used as the file version. See the manual for examples.
596
597 FILE_VERSION_FILTER =
598
599 # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
600 # by doxygen. The layout file controls the global structure of the generated
601 # output files in an output format independent way. To create the layout file
602 # that represents doxygen's defaults, run doxygen with the -l option.
603 # You can optionally specify a file name after the option, if omitted
604 # DoxygenLayout.xml will be used as the name of the layout file.
605
606 LAYOUT_FILE =
607
608 # The CITE_BIB_FILES tag can be used to specify one or more bib files
609 # containing the references data. This must be a list of .bib files. The
610 # .bib extension is automatically appended if omitted. Using this command
611 # requires the bibtex tool to be installed. See also
612 # http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
613 # of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
614 # feature you need bibtex and perl available in the search path. Do not use
615 # file names with spaces, bibtex cannot handle them.
616
617 CITE_BIB_FILES =
618
619 #---------------------------------------------------------------------------
620 # configuration options related to warning and progress messages
621 #---------------------------------------------------------------------------
622
623 # The QUIET tag can be used to turn on/off the messages that are generated
624 # by doxygen. Possible values are YES and NO. If left blank NO is used.
625
626 QUIET = NO
627
628 # The WARNINGS tag can be used to turn on/off the warning messages that are
629 # generated by doxygen. Possible values are YES and NO. If left blank
630 # NO is used.
631
632 WARNINGS = YES
633
634 # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
635 # for undocumented members. If EXTRACT_ALL is set to YES then this flag will
636 # automatically be disabled.
637
638 WARN_IF_UNDOCUMENTED = YES
639
640 # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
641 # potential errors in the documentation, such as not documenting some
642 # parameters in a documented function, or documenting parameters that
643 # don't exist or using markup commands wrongly.
644
645 WARN_IF_DOC_ERROR = YES
646
647 # The WARN_NO_PARAMDOC option can be enabled to get warnings for
648 # functions that are documented, but have no documentation for their parameters
649 # or return value. If set to NO (the default) doxygen will only warn about
650 # wrong or incomplete parameter documentation, but not about the absence of
651 # documentation.
652
653 WARN_NO_PARAMDOC = NO
654
655 # The WARN_FORMAT tag determines the format of the warning messages that
656 # doxygen can produce. The string should contain the $file, $line, and $text
657 # tags, which will be replaced by the file and line number from which the
658 # warning originated and the warning text. Optionally the format may contain
659 # $version, which will be replaced by the version of the file (if it could
660 # be obtained via FILE_VERSION_FILTER)
661
662 WARN_FORMAT = "$file:$line: $text"
663
664 # The WARN_LOGFILE tag can be used to specify a file to which warning
665 # and error messages should be written. If left blank the output is written
666 # to stderr.
667
668 WARN_LOGFILE =
669
670 #---------------------------------------------------------------------------
671 # configuration options related to the input files
672 #---------------------------------------------------------------------------
673
674 # The INPUT tag can be used to specify the files and/or directories that contain
675 # documented source files. You may enter file names like "myfile.cpp" or
676 # directories like "/usr/src/myproject". Separate the files or directories
677 # with spaces.
678
679 INPUT = ../include/ \
680 ../doc/dox.h \
681 ../code/BaseImporter.h
682
683 # This tag can be used to specify the character encoding of the source files
684 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
685 # also the default input encoding. Doxygen uses libiconv (or the iconv built
686 # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
687 # the list of possible encodings.
688
689 INPUT_ENCODING = UTF-8
690
691 # If the value of the INPUT tag contains directories, you can use the
692 # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
693 # and *.h) to filter out the source-files in the directories. If left
694 # blank the following patterns are tested:
695 # *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
696 # *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
697 # *.f90 *.f *.for *.vhd *.vhdl
698
699 FILE_PATTERNS = *.c \
700 *.cc \
701 *.cxx \
702 *.cpp \
703 *.c++ \
704 *.d \
705 *.java \
706 *.ii \
707 *.ixx \
708 *.ipp \
709 *.i++ \
710 *.inl \
711 *.h \
712 *.hh \
713 *.hxx \
714 *.hpp \
715 *.h++ \
716 *.idl \
717 *.odl \
718 *.cs \
719 *.php \
720 *.php3 \
721 *.inc \
722 *.m \
723 *.mm \
724 *.dox \
725 *.py
726
727 # The RECURSIVE tag can be used to turn specify whether or not subdirectories
728 # should be searched for input files as well. Possible values are YES and NO.
729 # If left blank NO is used.
730
731 RECURSIVE = YES
732
733 # The EXCLUDE tag can be used to specify files and/or directories that should be
734 # excluded from the INPUT source files. This way you can easily exclude a
735 # subdirectory from a directory tree whose root is specified with the INPUT tag.
736 # Note that relative paths are relative to the directory from which doxygen is
737 # run.
738
739 EXCLUDE =
740
741 # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
742 # directories that are symbolic links (a Unix file system feature) are excluded
743 # from the input.
744
745 EXCLUDE_SYMLINKS = NO
746
747 # If the value of the INPUT tag contains directories, you can use the
748 # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
749 # certain files from those directories. Note that the wildcards are matched
750 # against the file with absolute path, so to exclude all test directories
751 # for example use the pattern */test/*
752
753 EXCLUDE_PATTERNS = */.svn/* \
754 */.svn
755
756 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
757 # (namespaces, classes, functions, etc.) that should be excluded from the
758 # output. The symbol name can be a fully qualified name, a word, or if the
759 # wildcard * is used, a substring. Examples: ANamespace, AClass,
760 # AClass::ANamespace, ANamespace::*Test
761
762 EXCLUDE_SYMBOLS =
763
764 # The EXAMPLE_PATH tag can be used to specify one or more files or
765 # directories that contain example code fragments that are included (see
766 # the \include command).
767
768 EXAMPLE_PATH =
769
770 # If the value of the EXAMPLE_PATH tag contains directories, you can use the
771 # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
772 # and *.h) to filter out the source-files in the directories. If left
773 # blank all files are included.
774
775 EXAMPLE_PATTERNS = *
776
777 # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
778 # searched for input files to be used with the \include or \dontinclude
779 # commands irrespective of the value of the RECURSIVE tag.
780 # Possible values are YES and NO. If left blank NO is used.
781
782 EXAMPLE_RECURSIVE = NO
783
784 # The IMAGE_PATH tag can be used to specify one or more files or
785 # directories that contain image that are included in the documentation (see
786 # the \image command).
787
788 IMAGE_PATH =
789
790 # The INPUT_FILTER tag can be used to specify a program that doxygen should
791 # invoke to filter for each input file. Doxygen will invoke the filter program
792 # by executing (via popen()) the command <filter> <input-file>, where <filter>
793 # is the value of the INPUT_FILTER tag, and <input-file> is the name of an
794 # input file. Doxygen will then use the output that the filter program writes
795 # to standard output. If FILTER_PATTERNS is specified, this tag will be
796 # ignored.
797
798 INPUT_FILTER =
799
800 # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
801 # basis. Doxygen will compare the file name with each pattern and apply the
802 # filter if there is a match. The filters are a list of the form:
803 # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
804 # info on how filters are used. If FILTER_PATTERNS is empty or if
805 # non of the patterns match the file name, INPUT_FILTER is applied.
806
807 FILTER_PATTERNS =
808
809 # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
810 # INPUT_FILTER) will be used to filter the input files when producing source
811 # files to browse (i.e. when SOURCE_BROWSER is set to YES).
812
813 FILTER_SOURCE_FILES = NO
814
815 # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
816 # pattern. A pattern will override the setting for FILTER_PATTERN (if any)
817 # and it is also possible to disable source filtering for a specific pattern
818 # using *.ext= (so without naming a filter). This option only has effect when
819 # FILTER_SOURCE_FILES is enabled.
820
821 FILTER_SOURCE_PATTERNS =
822
823 # If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that
824 # is part of the input, its contents will be placed on the main page (index.html).
825 # This can be useful if you have a project on for instance GitHub and want reuse
826 # the introduction page also for the doxygen output.
827
828 USE_MDFILE_AS_MAINPAGE =
829
830 #---------------------------------------------------------------------------
831 # configuration options related to source browsing
832 #---------------------------------------------------------------------------
833
834 # If the SOURCE_BROWSER tag is set to YES then a list of source files will
835 # be generated. Documented entities will be cross-referenced with these sources.
836 # Note: To get rid of all source code in the generated output, make sure also
837 # VERBATIM_HEADERS is set to NO.
838
839 SOURCE_BROWSER = NO
840
841 # Setting the INLINE_SOURCES tag to YES will include the body
842 # of functions and classes directly in the documentation.
843
844 INLINE_SOURCES = NO
845
846 # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
847 # doxygen to hide any special comment blocks from generated source code
848 # fragments. Normal C, C++ and Fortran comments will always remain visible.
849
850 STRIP_CODE_COMMENTS = YES
851
852 # If the REFERENCED_BY_RELATION tag is set to YES
853 # then for each documented function all documented
854 # functions referencing it will be listed.
855
856 REFERENCED_BY_RELATION = NO
857
858 # If the REFERENCES_RELATION tag is set to YES
859 # then for each documented function all documented entities
860 # called/used by that function will be listed.
861
862 REFERENCES_RELATION = NO
863
864 # If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
865 # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
866 # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
867 # link to the source code. Otherwise they will link to the documentation.
868
869 REFERENCES_LINK_SOURCE = YES
870
871 # If the USE_HTAGS tag is set to YES then the references to source code
872 # will point to the HTML generated by the htags(1) tool instead of doxygen
873 # built-in source browser. The htags tool is part of GNU's global source
874 # tagging system (see http://www.gnu.org/software/global/global.html). You
875 # will need version 4.8.6 or higher.
876
877 USE_HTAGS = NO
878
879 # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
880 # will generate a verbatim copy of the header file for each class for
881 # which an include is specified. Set to NO to disable this.
882
883 VERBATIM_HEADERS = NO
884
885 #---------------------------------------------------------------------------
886 # configuration options related to the alphabetical class index
887 #---------------------------------------------------------------------------
888
889 # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
890 # of all compounds will be generated. Enable this if the project
891 # contains a lot of classes, structs, unions or interfaces.
892
893 ALPHABETICAL_INDEX = YES
894
895 # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
896 # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
897 # in which this list will be split (can be a number in the range [1..20])
898
899 COLS_IN_ALPHA_INDEX = 5
900
901 # In case all classes in a project start with a common prefix, all
902 # classes will be put under the same header in the alphabetical index.
903 # The IGNORE_PREFIX tag can be used to specify one or more prefixes that
904 # should be ignored while generating the index headers.
905
906 IGNORE_PREFIX =
907
908 #---------------------------------------------------------------------------
909 # configuration options related to the HTML output
910 #---------------------------------------------------------------------------
911
912 # If the GENERATE_HTML tag is set to YES (the default) Doxygen will
913 # generate HTML output.
914
915 GENERATE_HTML = YES
916
917 # The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
918 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
919 # put in front of it. If left blank `html' will be used as the default path.
920
921 HTML_OUTPUT = AssimpDoc_Html
922
923 # The HTML_FILE_EXTENSION tag can be used to specify the file extension for
924 # each generated HTML page (for example: .htm,.php,.asp). If it is left blank
925 # doxygen will generate files with .html extension.
926
927 HTML_FILE_EXTENSION = .html
928
929 # The HTML_HEADER tag can be used to specify a personal HTML header for
930 # each generated HTML page. If it is left blank doxygen will generate a
931 # standard header. Note that when using a custom header you are responsible
932 # for the proper inclusion of any scripts and style sheets that doxygen
933 # needs, which is dependent on the configuration options used.
934 # It is advised to generate a default header using "doxygen -w html
935 # header.html footer.html stylesheet.css YourConfigFile" and then modify
936 # that header. Note that the header is subject to change so you typically
937 # have to redo this when upgrading to a newer version of doxygen or when
938 # changing the value of configuration settings such as GENERATE_TREEVIEW!
939
940 HTML_HEADER =
941
942 # The HTML_FOOTER tag can be used to specify a personal HTML footer for
943 # each generated HTML page. If it is left blank doxygen will generate a
944 # standard footer.
945
946 HTML_FOOTER =
947
948 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading
949 # style sheet that is used by each HTML page. It can be used to
950 # fine-tune the look of the HTML output. If left blank doxygen will
951 # generate a default style sheet. Note that it is recommended to use
952 # HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
953 # tag will in the future become obsolete.
954
955 HTML_STYLESHEET = style.css
956
957 # The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
958 # user-defined cascading style sheet that is included after the standard
959 # style sheets created by doxygen. Using this option one can overrule
960 # certain style aspects. This is preferred over using HTML_STYLESHEET
961 # since it does not replace the standard style sheet and is therefor more
962 # robust against future updates. Doxygen will copy the style sheet file to
963 # the output directory.
964
965 HTML_EXTRA_STYLESHEET =
966
967 # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
968 # other source files which should be copied to the HTML output directory. Note
969 # that these files will be copied to the base HTML output directory. Use the
970 # $relpath$ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
971 # files. In the HTML_STYLESHEET file, use the file name only. Also note that
972 # the files will be copied as-is; there are no commands or markers available.
973
974 HTML_EXTRA_FILES =
975
976 # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
977 # Doxygen will adjust the colors in the style sheet and background images
978 # according to this color. Hue is specified as an angle on a colorwheel,
979 # see http://en.wikipedia.org/wiki/Hue for more information.
980 # For instance the value 0 represents red, 60 is yellow, 120 is green,
981 # 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
982 # The allowed range is 0 to 359.
983
984 HTML_COLORSTYLE_HUE = 220
985
986 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
987 # the colors in the HTML output. For a value of 0 the output will use
988 # grayscales only. A value of 255 will produce the most vivid colors.
989
990 HTML_COLORSTYLE_SAT = 100
991
992 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
993 # the luminance component of the colors in the HTML output. Values below
994 # 100 gradually make the output lighter, whereas values above 100 make
995 # the output darker. The value divided by 100 is the actual gamma applied,
996 # so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
997 # and 100 does not change the gamma.
998
999 HTML_COLORSTYLE_GAMMA = 80
1000
1001 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
1002 # page will contain the date and time when the page was generated. Setting
1003 # this to NO can help when comparing the output of multiple runs.
1004
1005 HTML_TIMESTAMP = YES
1006
1007 # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
1008 # documentation will contain sections that can be hidden and shown after the
1009 # page has loaded.
1010
1011 HTML_DYNAMIC_SECTIONS = NO
1012
1013 # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
1014 # entries shown in the various tree structured indices initially; the user
1015 # can expand and collapse entries dynamically later on. Doxygen will expand
1016 # the tree to such a level that at most the specified number of entries are
1017 # visible (unless a fully collapsed tree already exceeds this amount).
1018 # So setting the number of entries 1 will produce a full collapsed tree by
1019 # default. 0 is a special value representing an infinite number of entries
1020 # and will result in a full expanded tree by default.
1021
1022 HTML_INDEX_NUM_ENTRIES = 100
1023
1024 # If the GENERATE_DOCSET tag is set to YES, additional index files
1025 # will be generated that can be used as input for Apple's Xcode 3
1026 # integrated development environment, introduced with OSX 10.5 (Leopard).
1027 # To create a documentation set, doxygen will generate a Makefile in the
1028 # HTML output directory. Running make will produce the docset in that
1029 # directory and running "make install" will install the docset in
1030 # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
1031 # it at startup.
1032 # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
1033 # for more information.
1034
1035 GENERATE_DOCSET = NO
1036
1037 # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
1038 # feed. A documentation feed provides an umbrella under which multiple
1039 # documentation sets from a single provider (such as a company or product suite)
1040 # can be grouped.
1041
1042 DOCSET_FEEDNAME = "Doxygen generated docs"
1043
1044 # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
1045 # should uniquely identify the documentation set bundle. This should be a
1046 # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
1047 # will append .docset to the name.
1048
1049 DOCSET_BUNDLE_ID = org.doxygen.Project
1050
1051 # When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
1052 # identify the documentation publisher. This should be a reverse domain-name
1053 # style string, e.g. com.mycompany.MyDocSet.documentation.
1054
1055 DOCSET_PUBLISHER_ID = org.doxygen.Publisher
1056
1057 # The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
1058
1059 DOCSET_PUBLISHER_NAME = Publisher
1060
1061 # If the GENERATE_HTMLHELP tag is set to YES, additional index files
1062 # will be generated that can be used as input for tools like the
1063 # Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
1064 # of the generated HTML documentation.
1065
1066 GENERATE_HTMLHELP = YES
1067
1068 # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
1069 # be used to specify the file name of the resulting .chm file. You
1070 # can add a path in front of the file if the result should not be
1071 # written to the html output directory.
1072
1073 CHM_FILE = AssimpDoc.chm
1074
1075 # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
1076 # be used to specify the location (absolute path including file name) of
1077 # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
1078 # the HTML help compiler on the generated index.hhp.
1079
1080 HHC_LOCATION = "C:\Program Files (x86)\HTML Help Workshop/hhc.exe"
1081
1082 # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
1083 # controls if a separate .chi index file is generated (YES) or that
1084 # it should be included in the master .chm file (NO).
1085
1086 GENERATE_CHI = NO
1087
1088 # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
1089 # is used to encode HtmlHelp index (hhk), content (hhc) and project file
1090 # content.
1091
1092 CHM_INDEX_ENCODING =
1093
1094 # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
1095 # controls whether a binary table of contents is generated (YES) or a
1096 # normal table of contents (NO) in the .chm file.
1097
1098 BINARY_TOC = NO
1099
1100 # The TOC_EXPAND flag can be set to YES to add extra items for group members
1101 # to the contents of the HTML help documentation and to the tree view.
1102
1103 TOC_EXPAND = NO
1104
1105 # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
1106 # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
1107 # that can be used as input for Qt's qhelpgenerator to generate a
1108 # Qt Compressed Help (.qch) of the generated HTML documentation.
1109
1110 GENERATE_QHP = NO
1111
1112 # If the QHG_LOCATION tag is specified, the QCH_FILE tag can
1113 # be used to specify the file name of the resulting .qch file.
1114 # The path specified is relative to the HTML output folder.
1115
1116 QCH_FILE =
1117
1118 # The QHP_NAMESPACE tag specifies the namespace to use when generating
1119 # Qt Help Project output. For more information please see
1120 # http://doc.trolltech.com/qthelpproject.html#namespace
1121
1122 QHP_NAMESPACE = org.doxygen.Project
1123
1124 # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
1125 # Qt Help Project output. For more information please see
1126 # http://doc.trolltech.com/qthelpproject.html#virtual-folders
1127
1128 QHP_VIRTUAL_FOLDER = doc
1129
1130 # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
1131 # add. For more information please see
1132 # http://doc.trolltech.com/qthelpproject.html#custom-filters
1133
1134 QHP_CUST_FILTER_NAME =
1135
1136 # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
1137 # custom filter to add. For more information please see
1138 # <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
1139 # Qt Help Project / Custom Filters</a>.
1140
1141 QHP_CUST_FILTER_ATTRS =
1142
1143 # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
1144 # project's
1145 # filter section matches.
1146 # <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
1147 # Qt Help Project / Filter Attributes</a>.
1148
1149 QHP_SECT_FILTER_ATTRS =
1150
1151 # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
1152 # be used to specify the location of Qt's qhelpgenerator.
1153 # If non-empty doxygen will try to run qhelpgenerator on the generated
1154 # .qhp file.
1155
1156 QHG_LOCATION =
1157
1158 # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
1159 # will be generated, which together with the HTML files, form an Eclipse help
1160 # plugin. To install this plugin and make it available under the help contents
1161 # menu in Eclipse, the contents of the directory containing the HTML and XML
1162 # files needs to be copied into the plugins directory of eclipse. The name of
1163 # the directory within the plugins directory should be the same as
1164 # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
1165 # the help appears.
1166
1167 GENERATE_ECLIPSEHELP = NO
1168
1169 # A unique identifier for the eclipse help plugin. When installing the plugin
1170 # the directory name containing the HTML and XML files should also have
1171 # this name.
1172
1173 ECLIPSE_DOC_ID = org.doxygen.Project
1174
1175 # The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
1176 # at top of each HTML page. The value NO (the default) enables the index and
1177 # the value YES disables it. Since the tabs have the same information as the
1178 # navigation tree you can set this option to NO if you already set
1179 # GENERATE_TREEVIEW to YES.
1180
1181 DISABLE_INDEX = NO
1182
1183 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
1184 # structure should be generated to display hierarchical information.
1185 # If the tag value is set to YES, a side panel will be generated
1186 # containing a tree-like index structure (just like the one that
1187 # is generated for HTML Help). For this to work a browser that supports
1188 # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
1189 # Windows users are probably better off using the HTML help feature.
1190 # Since the tree basically has the same information as the tab index you
1191 # could consider to set DISABLE_INDEX to NO when enabling this option.
1192
1193 GENERATE_TREEVIEW = YES
1194
1195 # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
1196 # (range [0,1..20]) that doxygen will group on one line in the generated HTML
1197 # documentation. Note that a value of 0 will completely suppress the enum
1198 # values from appearing in the overview section.
1199
1200 ENUM_VALUES_PER_LINE = 4
1201
1202 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
1203 # used to set the initial width (in pixels) of the frame in which the tree
1204 # is shown.
1205
1206 TREEVIEW_WIDTH = 250
1207
1208 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
1209 # links to external symbols imported via tag files in a separate window.
1210
1211 EXT_LINKS_IN_WINDOW = NO
1212
1213 # Use this tag to change the font size of Latex formulas included
1214 # as images in the HTML documentation. The default is 10. Note that
1215 # when you change the font size after a successful doxygen run you need
1216 # to manually remove any form_*.png images from the HTML output directory
1217 # to force them to be regenerated.
1218
1219 FORMULA_FONTSIZE = 10
1220
1221 # Use the FORMULA_TRANPARENT tag to determine whether or not the images
1222 # generated for formulas are transparent PNGs. Transparent PNGs are
1223 # not supported properly for IE 6.0, but are supported on all modern browsers.
1224 # Note that when changing this option you need to delete any form_*.png files
1225 # in the HTML output before the changes have effect.
1226
1227 FORMULA_TRANSPARENT = YES
1228
1229 # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
1230 # (see http://www.mathjax.org) which uses client side Javascript for the
1231 # rendering instead of using prerendered bitmaps. Use this if you do not
1232 # have LaTeX installed or if you want to formulas look prettier in the HTML
1233 # output. When enabled you may also need to install MathJax separately and
1234 # configure the path to it using the MATHJAX_RELPATH option.
1235
1236 USE_MATHJAX = NO
1237
1238 # When MathJax is enabled you can set the default output format to be used for
1239 # thA MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and
1240 # SVG. The default value is HTML-CSS, which is slower, but has the best
1241 # compatibility.
1242
1243 MATHJAX_FORMAT = HTML-CSS
1244
1245 # When MathJax is enabled you need to specify the location relative to the
1246 # HTML output directory using the MATHJAX_RELPATH option. The destination
1247 # directory should contain the MathJax.js script. For instance, if the mathjax
1248 # directory is located at the same level as the HTML output directory, then
1249 # MATHJAX_RELPATH should be ../mathjax. The default value points to
1250 # the MathJax Content Delivery Network so you can quickly see the result without
1251 # installing MathJax. However, it is strongly recommended to install a local
1252 # copy of MathJax from http://www.mathjax.org before deployment.
1253
1254 MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
1255
1256 # The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
1257 # names that should be enabled during MathJax rendering.
1258
1259 MATHJAX_EXTENSIONS =
1260
1261 # When the SEARCHENGINE tag is enabled doxygen will generate a search box
1262 # for the HTML output. The underlying search engine uses javascript
1263 # and DHTML and should work on any modern browser. Note that when using
1264 # HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
1265 # (GENERATE_DOCSET) there is already a search function so this one should
1266 # typically be disabled. For large projects the javascript based search engine
1267 # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
1268
1269 SEARCHENGINE = NO
1270
1271 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
1272 # implemented using a web server instead of a web client using Javascript.
1273 # There are two flavours of web server based search depending on the
1274 # EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for
1275 # searching and an index file used by the script. When EXTERNAL_SEARCH is
1276 # enabled the indexing and searching needs to be provided by external tools.
1277 # See the manual for details.
1278
1279 SERVER_BASED_SEARCH = NO
1280
1281 # When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP
1282 # script for searching. Instead the search results are written to an XML file
1283 # which needs to be processed by an external indexer. Doxygen will invoke an
1284 # external search engine pointed to by the SEARCHENGINE_URL option to obtain
1285 # the search results. Doxygen ships with an example indexer (doxyindexer) and
1286 # search engine (doxysearch.cgi) which are based on the open source search engine
1287 # library Xapian. See the manual for configuration details.
1288
1289 EXTERNAL_SEARCH = NO
1290
1291 # The SEARCHENGINE_URL should point to a search engine hosted by a web server
1292 # which will returned the search results when EXTERNAL_SEARCH is enabled.
1293 # Doxygen ships with an example search engine (doxysearch) which is based on
1294 # the open source search engine library Xapian. See the manual for configuration
1295 # details.
1296
1297 SEARCHENGINE_URL =
1298
1299 # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
1300 # search data is written to a file for indexing by an external tool. With the
1301 # SEARCHDATA_FILE tag the name of this file can be specified.
1302
1303 SEARCHDATA_FILE = searchdata.xml
1304
1305 # When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the
1306 # EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
1307 # useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
1308 # projects and redirect the results back to the right project.
1309
1310 EXTERNAL_SEARCH_ID =
1311
1312 # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
1313 # projects other than the one defined by this configuration file, but that are
1314 # all added to the same external search index. Each project needs to have a
1315 # unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id
1316 # of to a relative location where the documentation can be found.
1317 # The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ...
1318
1319 EXTRA_SEARCH_MAPPINGS =
1320
1321 #---------------------------------------------------------------------------
1322 # configuration options related to the LaTeX output
1323 #---------------------------------------------------------------------------
1324
1325 # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
1326 # generate Latex output.
1327
1328 GENERATE_LATEX = NO
1329
1330 # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
1331 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
1332 # put in front of it. If left blank `latex' will be used as the default path.
1333
1334 LATEX_OUTPUT = latex
1335
1336 # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
1337 # invoked. If left blank `latex' will be used as the default command name.
1338 # Note that when enabling USE_PDFLATEX this option is only used for
1339 # generating bitmaps for formulas in the HTML output, but not in the
1340 # Makefile that is written to the output directory.
1341
1342 LATEX_CMD_NAME = latex
1343
1344 # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
1345 # generate index for LaTeX. If left blank `makeindex' will be used as the
1346 # default command name.
1347
1348 MAKEINDEX_CMD_NAME = makeindex
1349
1350 # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
1351 # LaTeX documents. This may be useful for small projects and may help to
1352 # save some trees in general.
1353
1354 COMPACT_LATEX = NO
1355
1356 # The PAPER_TYPE tag can be used to set the paper type that is used
1357 # by the printer. Possible values are: a4, letter, legal and
1358 # executive. If left blank a4wide will be used.
1359
1360 PAPER_TYPE = a4wide
1361
1362 # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
1363 # packages that should be included in the LaTeX output.
1364
1365 EXTRA_PACKAGES =
1366
1367 # The LATEX_HEADER tag can be used to specify a personal LaTeX header for
1368 # the generated latex document. The header should contain everything until
1369 # the first chapter. If it is left blank doxygen will generate a
1370 # standard header. Notice: only use this tag if you know what you are doing!
1371
1372 LATEX_HEADER =
1373
1374 # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
1375 # the generated latex document. The footer should contain everything after
1376 # the last chapter. If it is left blank doxygen will generate a
1377 # standard footer. Notice: only use this tag if you know what you are doing!
1378
1379 LATEX_FOOTER =
1380
1381 # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
1382 # is prepared for conversion to pdf (using ps2pdf). The pdf file will
1383 # contain links (just like the HTML output) instead of page references
1384 # This makes the output suitable for online browsing using a pdf viewer.
1385
1386 PDF_HYPERLINKS = NO
1387
1388 # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
1389 # plain latex in the generated Makefile. Set this option to YES to get a
1390 # higher quality PDF documentation.
1391
1392 USE_PDFLATEX = NO
1393
1394 # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
1395 # command to the generated LaTeX files. This will instruct LaTeX to keep
1396 # running if errors occur, instead of asking the user for help.
1397 # This option is also used when generating formulas in HTML.
1398
1399 LATEX_BATCHMODE = NO
1400
1401 # If LATEX_HIDE_INDICES is set to YES then doxygen will not
1402 # include the index chapters (such as File Index, Compound Index, etc.)
1403 # in the output.
1404
1405 LATEX_HIDE_INDICES = NO
1406
1407 # If LATEX_SOURCE_CODE is set to YES then doxygen will include
1408 # source code with syntax highlighting in the LaTeX output.
1409 # Note that which sources are shown also depends on other settings
1410 # such as SOURCE_BROWSER.
1411
1412 LATEX_SOURCE_CODE = NO
1413
1414 # The LATEX_BIB_STYLE tag can be used to specify the style to use for the
1415 # bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
1416 # http://en.wikipedia.org/wiki/BibTeX for more info.
1417
1418 LATEX_BIB_STYLE = plain
1419
1420 #---------------------------------------------------------------------------
1421 # configuration options related to the RTF output
1422 #---------------------------------------------------------------------------
1423
1424 # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
1425 # The RTF output is optimized for Word 97 and may not look very pretty with
1426 # other RTF readers or editors.
1427
1428 GENERATE_RTF = NO
1429
1430 # The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
1431 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
1432 # put in front of it. If left blank `rtf' will be used as the default path.
1433
1434 RTF_OUTPUT = rtf
1435
1436 # If the COMPACT_RTF tag is set to YES Doxygen generates more compact
1437 # RTF documents. This may be useful for small projects and may help to
1438 # save some trees in general.
1439
1440 COMPACT_RTF = NO
1441
1442 # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
1443 # will contain hyperlink fields. The RTF file will
1444 # contain links (just like the HTML output) instead of page references.
1445 # This makes the output suitable for online browsing using WORD or other
1446 # programs which support those fields.
1447 # Note: wordpad (write) and others do not support links.
1448
1449 RTF_HYPERLINKS = NO
1450
1451 # Load style sheet definitions from file. Syntax is similar to doxygen's
1452 # config file, i.e. a series of assignments. You only have to provide
1453 # replacements, missing definitions are set to their default value.
1454
1455 RTF_STYLESHEET_FILE =
1456
1457 # Set optional variables used in the generation of an rtf document.
1458 # Syntax is similar to doxygen's config file.
1459
1460 RTF_EXTENSIONS_FILE =
1461
1462 #---------------------------------------------------------------------------
1463 # configuration options related to the man page output
1464 #---------------------------------------------------------------------------
1465
1466 # If the GENERATE_MAN tag is set to YES (the default) Doxygen will
1467 # generate man pages
1468
1469 GENERATE_MAN = NO
1470
1471 # The MAN_OUTPUT tag is used to specify where the man pages will be put.
1472 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
1473 # put in front of it. If left blank `man' will be used as the default path.
1474
1475 MAN_OUTPUT = man
1476
1477 # The MAN_EXTENSION tag determines the extension that is added to
1478 # the generated man pages (default is the subroutine's section .3)
1479
1480 MAN_EXTENSION = .3
1481
1482 # If the MAN_LINKS tag is set to YES and Doxygen generates man output,
1483 # then it will generate one additional man file for each entity
1484 # documented in the real man page(s). These additional files
1485 # only source the real man page, but without them the man command
1486 # would be unable to find the correct page. The default is NO.
1487
1488 MAN_LINKS = NO
1489
1490 #---------------------------------------------------------------------------
1491 # configuration options related to the XML output
1492 #---------------------------------------------------------------------------
1493
1494 # If the GENERATE_XML tag is set to YES Doxygen will
1495 # generate an XML file that captures the structure of
1496 # the code including all documentation.
1497
1498 GENERATE_XML = NO
1499
1500 # The XML_OUTPUT tag is used to specify where the XML pages will be put.
1501 # If a relative path is entered the value of OUTPUT_DIRECTORY will be
1502 # put in front of it. If left blank `xml' will be used as the default path.
1503
1504 XML_OUTPUT = xml
1505
1506 # The XML_SCHEMA tag can be used to specify an XML schema,
1507 # which can be used by a validating XML parser to check the
1508 # syntax of the XML files.
1509
1510 XML_SCHEMA =
1511
1512 # The XML_DTD tag can be used to specify an XML DTD,
1513 # which can be used by a validating XML parser to check the
1514 # syntax of the XML files.
1515
1516 XML_DTD =
1517
1518 # If the XML_PROGRAMLISTING tag is set to YES Doxygen will
1519 # dump the program listings (including syntax highlighting
1520 # and cross-referencing information) to the XML output. Note that
1521 # enabling this will significantly increase the size of the XML output.
1522
1523 XML_PROGRAMLISTING = YES
1524
1525 #---------------------------------------------------------------------------
1526 # configuration options for the AutoGen Definitions output
1527 #---------------------------------------------------------------------------
1528
1529 # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
1530 # generate an AutoGen Definitions (see autogen.sf.net) file
1531 # that captures the structure of the code including all
1532 # documentation. Note that this feature is still experimental
1533 # and incomplete at the moment.
1534
1535 GENERATE_AUTOGEN_DEF = NO
1536
1537 #---------------------------------------------------------------------------
1538 # configuration options related to the Perl module output
1539 #---------------------------------------------------------------------------
1540
1541 # If the GENERATE_PERLMOD tag is set to YES Doxygen will
1542 # generate a Perl module file that captures the structure of
1543 # the code including all documentation. Note that this
1544 # feature is still experimental and incomplete at the
1545 # moment.
1546
1547 GENERATE_PERLMOD = NO
1548
1549 # If the PERLMOD_LATEX tag is set to YES Doxygen will generate
1550 # the necessary Makefile rules, Perl scripts and LaTeX code to be able
1551 # to generate PDF and DVI output from the Perl module output.
1552
1553 PERLMOD_LATEX = NO
1554
1555 # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
1556 # nicely formatted so it can be parsed by a human reader. This is useful
1557 # if you want to understand what is going on. On the other hand, if this
1558 # tag is set to NO the size of the Perl module output will be much smaller
1559 # and Perl will parse it just the same.
1560
1561 PERLMOD_PRETTY = YES
1562
1563 # The names of the make variables in the generated doxyrules.make file
1564 # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
1565 # This is useful so different doxyrules.make files included by the same
1566 # Makefile don't overwrite each other's variables.
1567
1568 PERLMOD_MAKEVAR_PREFIX =
1569
1570 #---------------------------------------------------------------------------
1571 # Configuration options related to the preprocessor
1572 #---------------------------------------------------------------------------
1573
1574 # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
1575 # evaluate all C-preprocessor directives found in the sources and include
1576 # files.
1577
1578 ENABLE_PREPROCESSING = YES
1579
1580 # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
1581 # names in the source code. If set to NO (the default) only conditional
1582 # compilation will be performed. Macro expansion can be done in a controlled
1583 # way by setting EXPAND_ONLY_PREDEF to YES.
1584
1585 MACRO_EXPANSION = YES
1586
1587 # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
1588 # then the macro expansion is limited to the macros specified with the
1589 # PREDEFINED and EXPAND_AS_DEFINED tags.
1590
1591 EXPAND_ONLY_PREDEF = YES
1592
1593 # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
1594 # pointed to by INCLUDE_PATH will be searched when a #include is found.
1595
1596 SEARCH_INCLUDES = YES
1597
1598 # The INCLUDE_PATH tag can be used to specify one or more directories that
1599 # contain include files that are not input files but should be processed by
1600 # the preprocessor.
1601
1602 INCLUDE_PATH =
1603
1604 # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
1605 # patterns (like *.h and *.hpp) to filter out the header-files in the
1606 # directories. If left blank, the patterns specified with FILE_PATTERNS will
1607 # be used.
1608
1609 INCLUDE_FILE_PATTERNS =
1610
1611 # The PREDEFINED tag can be used to specify one or more macro names that
1612 # are defined before the preprocessor is started (similar to the -D option of
1613 # gcc). The argument of the tag is a list of macros of the form: name
1614 # or name=definition (no spaces). If the definition and the = are
1615 # omitted =1 is assumed. To prevent a macro definition from being
1616 # undefined via #undef or recursively expanded use the := operator
1617 # instead of the = operator.
1618
1619 PREDEFINED = ASSIMP_DOXYGEN_BUILD=1 \
1620 __cplusplus
1621
1622 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
1623 # this tag can be used to specify a list of macro names that should be expanded.
1624 # The macro definition that is found in the sources will be used.
1625 # Use the PREDEFINED tag if you want to use a different macro definition that
1626 # overrules the definition found in the source code.
1627
1628 EXPAND_AS_DEFINED = C_STRUCT \
1629 C_ENUM
1630
1631 # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
1632 # doxygen's preprocessor will remove all references to function-like macros
1633 # that are alone on a line, have an all uppercase name, and do not end with a
1634 # semicolon, because these will confuse the parser if not removed.
1635
1636 SKIP_FUNCTION_MACROS = YES
1637
1638 #---------------------------------------------------------------------------
1639 # Configuration::additions related to external references
1640 #---------------------------------------------------------------------------
1641
1642 # The TAGFILES option can be used to specify one or more tagfiles. For each
1643 # tag file the location of the external documentation should be added. The
1644 # format of a tag file without this location is as follows:
1645 # TAGFILES = file1 file2 ...
1646 # Adding location for the tag files is done as follows:
1647 # TAGFILES = file1=loc1 "file2 = loc2" ...
1648 # where "loc1" and "loc2" can be relative or absolute paths
1649 # or URLs. Note that each tag file must have a unique name (where the name does
1650 # NOT include the path). If a tag file is not located in the directory in which
1651 # doxygen is run, you must also specify the path to the tagfile here.
1652
1653 TAGFILES =
1654
1655 # When a file name is specified after GENERATE_TAGFILE, doxygen will create
1656 # a tag file that is based on the input files it reads.
1657
1658 GENERATE_TAGFILE =
1659
1660 # If the ALLEXTERNALS tag is set to YES all external classes will be listed
1661 # in the class index. If set to NO only the inherited external classes
1662 # will be listed.
1663
1664 ALLEXTERNALS = NO
1665
1666 # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
1667 # in the modules index. If set to NO, only the current project's groups will
1668 # be listed.
1669
1670 EXTERNAL_GROUPS = YES
1671
1672 # The PERL_PATH should be the absolute path and name of the perl script
1673 # interpreter (i.e. the result of `which perl').
1674
1675 PERL_PATH = /usr/bin/perl
1676
1677 #---------------------------------------------------------------------------
1678 # Configuration options related to the dot tool
1679 #---------------------------------------------------------------------------
1680
1681 # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
1682 # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
1683 # or super classes. Setting the tag to NO turns the diagrams off. Note that
1684 # this option also works with HAVE_DOT disabled, but it is recommended to
1685 # install and use dot, since it yields more powerful graphs.
1686
1687 CLASS_DIAGRAMS = NO
1688
1689 # You can define message sequence charts within doxygen comments using the \msc
1690 # command. Doxygen will then run the mscgen tool (see
1691 # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
1692 # documentation. The MSCGEN_PATH tag allows you to specify the directory where
1693 # the mscgen tool resides. If left empty the tool is assumed to be found in the
1694 # default search path.
1695
1696 MSCGEN_PATH =
1697
1698 # If set to YES, the inheritance and collaboration graphs will hide
1699 # inheritance and usage relations if the target is undocumented
1700 # or is not a class.
1701
1702 HIDE_UNDOC_RELATIONS = YES
1703
1704 # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
1705 # available from the path. This tool is part of Graphviz, a graph visualization
1706 # toolkit from AT&T and Lucent Bell Labs. The other options in this section
1707 # have no effect if this option is set to NO (the default)
1708
1709 HAVE_DOT = NO
1710
1711 # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
1712 # allowed to run in parallel. When set to 0 (the default) doxygen will
1713 # base this on the number of processors available in the system. You can set it
1714 # explicitly to a value larger than 0 to get control over the balance
1715 # between CPU load and processing speed.
1716
1717 DOT_NUM_THREADS = 0
1718
1719 # By default doxygen will use the Helvetica font for all dot files that
1720 # doxygen generates. When you want a differently looking font you can specify
1721 # the font name using DOT_FONTNAME. You need to make sure dot is able to find
1722 # the font, which can be done by putting it in a standard location or by setting
1723 # the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
1724 # directory containing the font.
1725
1726 DOT_FONTNAME = FreeSans
1727
1728 # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
1729 # The default size is 10pt.
1730
1731 DOT_FONTSIZE = 10
1732
1733 # By default doxygen will tell dot to use the Helvetica font.
1734 # If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
1735 # set the path where dot can find it.
1736
1737 DOT_FONTPATH =
1738
1739 # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
1740 # will generate a graph for each documented class showing the direct and
1741 # indirect inheritance relations. Setting this tag to YES will force the
1742 # CLASS_DIAGRAMS tag to NO.
1743
1744 CLASS_GRAPH = YES
1745
1746 # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
1747 # will generate a graph for each documented class showing the direct and
1748 # indirect implementation dependencies (inheritance, containment, and
1749 # class references variables) of the class with other documented classes.
1750
1751 COLLABORATION_GRAPH = YES
1752
1753 # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
1754 # will generate a graph for groups, showing the direct groups dependencies
1755
1756 GROUP_GRAPHS = YES
1757
1758 # If the UML_LOOK tag is set to YES doxygen will generate inheritance and
1759 # collaboration diagrams in a style similar to the OMG's Unified Modeling
1760 # Language.
1761
1762 UML_LOOK = NO
1763
1764 # If the UML_LOOK tag is enabled, the fields and methods are shown inside
1765 # the class node. If there are many fields or methods and many nodes the
1766 # graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
1767 # threshold limits the number of items for each type to make the size more
1768 # managable. Set this to 0 for no limit. Note that the threshold may be
1769 # exceeded by 50% before the limit is enforced.
1770
1771 UML_LIMIT_NUM_FIELDS = 10
1772
1773 # If set to YES, the inheritance and collaboration graphs will show the
1774 # relations between templates and their instances.
1775
1776 TEMPLATE_RELATIONS = NO
1777
1778 # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
1779 # tags are set to YES then doxygen will generate a graph for each documented
1780 # file showing the direct and indirect include dependencies of the file with
1781 # other documented files.
1782
1783 INCLUDE_GRAPH = YES
1784
1785 # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
1786 # HAVE_DOT tags are set to YES then doxygen will generate a graph for each
1787 # documented header file showing the documented files that directly or
1788 # indirectly include this file.
1789
1790 INCLUDED_BY_GRAPH = YES
1791
1792 # If the CALL_GRAPH and HAVE_DOT options are set to YES then
1793 # doxygen will generate a call dependency graph for every global function
1794 # or class method. Note that enabling this option will significantly increase
1795 # the time of a run. So in most cases it will be better to enable call graphs
1796 # for selected functions only using the \callgraph command.
1797
1798 CALL_GRAPH = NO
1799
1800 # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
1801 # doxygen will generate a caller dependency graph for every global function
1802 # or class method. Note that enabling this option will significantly increase
1803 # the time of a run. So in most cases it will be better to enable caller
1804 # graphs for selected functions only using the \callergraph command.
1805
1806 CALLER_GRAPH = NO
1807
1808 # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
1809 # will generate a graphical hierarchy of all classes instead of a textual one.
1810
1811 GRAPHICAL_HIERARCHY = YES
1812
1813 # If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
1814 # then doxygen will show the dependencies a directory has on other directories
1815 # in a graphical way. The dependency relations are determined by the #include
1816 # relations between the files in the directories.
1817
1818 DIRECTORY_GRAPH = YES
1819
1820 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
1821 # generated by dot. Possible values are svg, png, jpg, or gif.
1822 # If left blank png will be used. If you choose svg you need to set
1823 # HTML_FILE_EXTENSION to xhtml in order to make the SVG files
1824 # visible in IE 9+ (other browsers do not have this requirement).
1825
1826 DOT_IMAGE_FORMAT = png
1827
1828 # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
1829 # enable generation of interactive SVG images that allow zooming and panning.
1830 # Note that this requires a modern browser other than Internet Explorer.
1831 # Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
1832 # need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
1833 # visible. Older versions of IE do not have SVG support.
1834
1835 INTERACTIVE_SVG = NO
1836
1837 # The tag DOT_PATH can be used to specify the path where the dot tool can be
1838 # found. If left blank, it is assumed the dot tool can be found in the path.
1839
1840 DOT_PATH =
1841
1842 # The DOTFILE_DIRS tag can be used to specify one or more directories that
1843 # contain dot files that are included in the documentation (see the
1844 # \dotfile command).
1845
1846 DOTFILE_DIRS =
1847
1848 # The MSCFILE_DIRS tag can be used to specify one or more directories that
1849 # contain msc files that are included in the documentation (see the
1850 # \mscfile command).
1851
1852 MSCFILE_DIRS =
1853
1854 # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
1855 # nodes that will be shown in the graph. If the number of nodes in a graph
1856 # becomes larger than this value, doxygen will truncate the graph, which is
1857 # visualized by representing a node as a red box. Note that doxygen if the
1858 # number of direct children of the root node in a graph is already larger than
1859 # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
1860 # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
1861
1862 DOT_GRAPH_MAX_NODES = 50
1863
1864 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
1865 # graphs generated by dot. A depth value of 3 means that only nodes reachable
1866 # from the root by following a path via at most 3 edges will be shown. Nodes
1867 # that lay further from the root node will be omitted. Note that setting this
1868 # option to 1 or 2 may greatly reduce the computation time needed for large
1869 # code bases. Also note that the size of a graph can be further restricted by
1870 # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
1871
1872 MAX_DOT_GRAPH_DEPTH = 1000
1873
1874 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
1875 # background. This is disabled by default, because dot on Windows does not
1876 # seem to support this out of the box. Warning: Depending on the platform used,
1877 # enabling this option may lead to badly anti-aliased labels on the edges of
1878 # a graph (i.e. they become hard to read).
1879
1880 DOT_TRANSPARENT = NO
1881
1882 # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
1883 # files in one run (i.e. multiple -o and -T options on the command line). This
1884 # makes dot run faster, but since only newer versions of dot (>1.8.10)
1885 # support this, this feature is disabled by default.
1886
1887 DOT_MULTI_TARGETS = NO
1888
1889 # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
1890 # generate a legend page explaining the meaning of the various boxes and
1891 # arrows in the dot generated graphs.
1892
1893 GENERATE_LEGEND = YES
1894
1895 # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
1896 # remove the intermediate dot files that are used to generate
1897 # the various graphs.
1898
1899 DOT_CLEANUP = YES
0 # Doxyfile 1.5.8
1
2 #---------------------------------------------------------------------------
3 # Project related configuration options
4 #---------------------------------------------------------------------------
5 DOXYFILE_ENCODING = UTF-8
6 PROJECT_NAME = Assimp Command Line Tools
7 PROJECT_NUMBER = "v2.0 (November 2010)"
8 OUTPUT_DIRECTORY =
9 CREATE_SUBDIRS = NO
10 OUTPUT_LANGUAGE = English
11 BRIEF_MEMBER_DESC = YES
12 REPEAT_BRIEF = YES
13 ABBREVIATE_BRIEF = "The $name class " \
14 "The $name widget " \
15 "The $name file " \
16 is \
17 provides \
18 specifies \
19 contains \
20 represents \
21 a \
22 an \
23 the
24 ALWAYS_DETAILED_SEC = NO
25 INLINE_INHERITED_MEMB = NO
26 FULL_PATH_NAMES = NO
27 STRIP_FROM_PATH =
28 STRIP_FROM_INC_PATH =
29 SHORT_NAMES = NO
30 JAVADOC_AUTOBRIEF = YES
31 QT_AUTOBRIEF = NO
32 MULTILINE_CPP_IS_BRIEF = NO
33 INHERIT_DOCS = YES
34 SEPARATE_MEMBER_PAGES = NO
35 TAB_SIZE = 8
36 ALIASES =
37 OPTIMIZE_OUTPUT_FOR_C = NO
38 OPTIMIZE_OUTPUT_JAVA = NO
39 OPTIMIZE_FOR_FORTRAN = NO
40 OPTIMIZE_OUTPUT_VHDL = NO
41 EXTENSION_MAPPING =
42 BUILTIN_STL_SUPPORT = YES
43 CPP_CLI_SUPPORT = NO
44 SIP_SUPPORT = NO
45 IDL_PROPERTY_SUPPORT = YES
46 DISTRIBUTE_GROUP_DOC = NO
47 SUBGROUPING = YES
48 TYPEDEF_HIDES_STRUCT = YES
49 SYMBOL_CACHE_SIZE = 0
50 #---------------------------------------------------------------------------
51 # Build related configuration options
52 #---------------------------------------------------------------------------
53 EXTRACT_ALL = YES
54 EXTRACT_PRIVATE = NO
55 EXTRACT_STATIC = YES
56 EXTRACT_LOCAL_CLASSES = YES
57 EXTRACT_LOCAL_METHODS = NO
58 EXTRACT_ANON_NSPACES = NO
59 HIDE_UNDOC_MEMBERS = YES
60 HIDE_UNDOC_CLASSES = YES
61 HIDE_FRIEND_COMPOUNDS = NO
62 HIDE_IN_BODY_DOCS = NO
63 INTERNAL_DOCS = NO
64 CASE_SENSE_NAMES = NO
65 HIDE_SCOPE_NAMES = NO
66 SHOW_INCLUDE_FILES = NO
67 INLINE_INFO = YES
68 SORT_MEMBER_DOCS = YES
69 SORT_BRIEF_DOCS = YES
70 SORT_GROUP_NAMES = NO
71 SORT_BY_SCOPE_NAME = YES
72 GENERATE_TODOLIST = YES
73 GENERATE_TESTLIST = YES
74 GENERATE_BUGLIST = YES
75 GENERATE_DEPRECATEDLIST= YES
76 ENABLED_SECTIONS =
77 MAX_INITIALIZER_LINES = 30
78 SHOW_USED_FILES = YES
79 SHOW_DIRECTORIES = NO
80 SHOW_FILES = YES
81 SHOW_NAMESPACES = YES
82 FILE_VERSION_FILTER =
83 LAYOUT_FILE =
84 #---------------------------------------------------------------------------
85 # configuration options related to warning and progress messages
86 #---------------------------------------------------------------------------
87 QUIET = NO
88 WARNINGS = YES
89 WARN_IF_UNDOCUMENTED = YES
90 WARN_IF_DOC_ERROR = YES
91 WARN_NO_PARAMDOC = NO
92 WARN_FORMAT = "$file:$line: $text"
93 WARN_LOGFILE =
94 #---------------------------------------------------------------------------
95 # configuration options related to the input files
96 #---------------------------------------------------------------------------
97 INPUT = ../doc/dox_cmd.h
98 INPUT_ENCODING = UTF-8
99 FILE_PATTERNS = *.c \
100 *.cc \
101 *.cxx \
102 *.cpp \
103 *.c++ \
104 *.d \
105 *.java \
106 *.ii \
107 *.ixx \
108 *.ipp \
109 *.i++ \
110 *.inl \
111 *.h \
112 *.hh \
113 *.hxx \
114 *.hpp \
115 *.h++ \
116 *.idl \
117 *.odl \
118 *.cs \
119 *.php \
120 *.php3 \
121 *.inc \
122 *.m \
123 *.mm \
124 *.dox \
125 *.py
126 RECURSIVE = YES
127 EXCLUDE =
128 EXCLUDE_SYMLINKS = NO
129 EXCLUDE_PATTERNS = */.svn/* \
130 */.svn
131 EXCLUDE_SYMBOLS =
132 EXAMPLE_PATH =
133 EXAMPLE_PATTERNS = *
134 EXAMPLE_RECURSIVE = NO
135 IMAGE_PATH =
136 INPUT_FILTER =
137 FILTER_PATTERNS =
138 FILTER_SOURCE_FILES = NO
139 #---------------------------------------------------------------------------
140 # configuration options related to source browsing
141 #---------------------------------------------------------------------------
142 SOURCE_BROWSER = NO
143 INLINE_SOURCES = NO
144 STRIP_CODE_COMMENTS = YES
145 REFERENCED_BY_RELATION = NO
146 REFERENCES_RELATION = NO
147 REFERENCES_LINK_SOURCE = YES
148 USE_HTAGS = NO
149 VERBATIM_HEADERS = NO
150 #---------------------------------------------------------------------------
151 # configuration options related to the alphabetical class index
152 #---------------------------------------------------------------------------
153 ALPHABETICAL_INDEX = NO
154 COLS_IN_ALPHA_INDEX = 5
155 IGNORE_PREFIX =
156 #---------------------------------------------------------------------------
157 # configuration options related to the HTML output
158 #---------------------------------------------------------------------------
159 GENERATE_HTML = YES
160 HTML_OUTPUT = AssimpCmdDoc_Html
161 HTML_FILE_EXTENSION = .html
162 HTML_HEADER =
163 HTML_FOOTER =
164 HTML_STYLESHEET = style.css
165 HTML_ALIGN_MEMBERS = YES
166 HTML_DYNAMIC_SECTIONS = NO
167 GENERATE_DOCSET = NO
168 DOCSET_FEEDNAME = "Doxygen generated docs"
169 DOCSET_BUNDLE_ID = org.doxygen.Project
170 GENERATE_HTMLHELP = YES
171 CHM_FILE = AssimpCmdDoc.chm
172 HHC_LOCATION = "C:/Program Files (x86)/HTML Help Workshop/hhc.exe"
173 GENERATE_CHI = NO
174 CHM_INDEX_ENCODING =
175 BINARY_TOC = NO
176 TOC_EXPAND = NO
177 GENERATE_QHP = NO
178 QCH_FILE =
179 QHP_NAMESPACE =
180 QHP_VIRTUAL_FOLDER = doc
181 QHP_CUST_FILTER_NAME =
182 QHP_CUST_FILTER_ATTRS =
183 QHP_SECT_FILTER_ATTRS =
184 QHG_LOCATION =
185 DISABLE_INDEX = NO
186 ENUM_VALUES_PER_LINE = 4
187 GENERATE_TREEVIEW = NO
188 TREEVIEW_WIDTH = 250
189 FORMULA_FONTSIZE = 10
190 #---------------------------------------------------------------------------
191 # configuration options related to the LaTeX output
192 #---------------------------------------------------------------------------
193 GENERATE_LATEX = NO
194 LATEX_OUTPUT = latex
195 LATEX_CMD_NAME = latex
196 MAKEINDEX_CMD_NAME = makeindex
197 COMPACT_LATEX = NO
198 PAPER_TYPE = a4wide
199 EXTRA_PACKAGES =
200 LATEX_HEADER =
201 PDF_HYPERLINKS = NO
202 USE_PDFLATEX = NO
203 LATEX_BATCHMODE = NO
204 LATEX_HIDE_INDICES = NO
205 #---------------------------------------------------------------------------
206 # configuration options related to the RTF output
207 #---------------------------------------------------------------------------
208 GENERATE_RTF = NO
209 RTF_OUTPUT = rtf
210 COMPACT_RTF = NO
211 RTF_HYPERLINKS = NO
212 RTF_STYLESHEET_FILE =
213 RTF_EXTENSIONS_FILE =
214 #---------------------------------------------------------------------------
215 # configuration options related to the man page output
216 #---------------------------------------------------------------------------
217 GENERATE_MAN = NO
218 MAN_OUTPUT = man
219 MAN_EXTENSION = .3
220 MAN_LINKS = NO
221 #---------------------------------------------------------------------------
222 # configuration options related to the XML output
223 #---------------------------------------------------------------------------
224 GENERATE_XML = NO
225 XML_OUTPUT = xml
226 XML_SCHEMA =
227 XML_DTD =
228 XML_PROGRAMLISTING = YES
229 #---------------------------------------------------------------------------
230 # configuration options for the AutoGen Definitions output
231 #---------------------------------------------------------------------------
232 GENERATE_AUTOGEN_DEF = NO
233 #---------------------------------------------------------------------------
234 # configuration options related to the Perl module output
235 #---------------------------------------------------------------------------
236 GENERATE_PERLMOD = NO
237 PERLMOD_LATEX = NO
238 PERLMOD_PRETTY = YES
239 PERLMOD_MAKEVAR_PREFIX =
240 #---------------------------------------------------------------------------
241 # Configuration options related to the preprocessor
242 #---------------------------------------------------------------------------
243 ENABLE_PREPROCESSING = YES
244 MACRO_EXPANSION = YES
245 EXPAND_ONLY_PREDEF = YES
246 SEARCH_INCLUDES = YES
247 INCLUDE_PATH =
248 INCLUDE_FILE_PATTERNS =
249 PREDEFINED = ASSIMP_DOXYGEN_BUILD=1 \
250 __cplusplus
251 EXPAND_AS_DEFINED = C_STRUCT \
252 C_ENUM
253 SKIP_FUNCTION_MACROS = YES
254 #---------------------------------------------------------------------------
255 # Configuration::additions related to external references
256 #---------------------------------------------------------------------------
257 TAGFILES =
258 GENERATE_TAGFILE =
259 ALLEXTERNALS = NO
260 EXTERNAL_GROUPS = YES
261 PERL_PATH = /usr/bin/perl
262 #---------------------------------------------------------------------------
263 # Configuration options related to the dot tool
264 #---------------------------------------------------------------------------
265 CLASS_DIAGRAMS = NO
266 MSCGEN_PATH =
267 HIDE_UNDOC_RELATIONS = YES
268 HAVE_DOT = NO
269 DOT_FONTNAME = FreeSans
270 DOT_FONTSIZE = 10
271 DOT_FONTPATH =
272 CLASS_GRAPH = YES
273 COLLABORATION_GRAPH = YES
274 GROUP_GRAPHS = YES
275 UML_LOOK = NO
276 TEMPLATE_RELATIONS = NO
277 INCLUDE_GRAPH = YES
278 INCLUDED_BY_GRAPH = YES
279 CALL_GRAPH = NO
280 CALLER_GRAPH = NO
281 GRAPHICAL_HIERARCHY = YES
282 DIRECTORY_GRAPH = YES
283 DOT_IMAGE_FORMAT = png
284 DOT_PATH =
285 DOTFILE_DIRS =
286 DOT_GRAPH_MAX_NODES = 50
287 MAX_DOT_GRAPH_DEPTH = 1000
288 DOT_TRANSPARENT = NO
289 DOT_MULTI_TARGETS = NO
290 GENERATE_LEGEND = YES
291 DOT_CLEANUP = YES
292 #---------------------------------------------------------------------------
293 # Options related to the search engine
294 #---------------------------------------------------------------------------
295 SEARCHENGINE = NO
0 # Doxyfile 1.8.7
1
2 # This file describes the settings to be used by the documentation system
3 # doxygen (www.doxygen.org) for a project.
4 #
5 # All text after a double hash (##) is considered a comment and is placed in
6 # front of the TAG it is preceding.
7 #
8 # All text after a single hash (#) is considered a comment and will be ignored.
9 # The format is:
10 # TAG = value [value, ...]
11 # For lists, items can also be appended using:
12 # TAG += value [value, ...]
13 # Values that contain spaces should be placed between quotes (\" \").
14
15 #---------------------------------------------------------------------------
16 # Project related configuration options
17 #---------------------------------------------------------------------------
18
19 # This tag specifies the encoding used for all characters in the config file
20 # that follow. The default is UTF-8 which is also the encoding used for all text
21 # before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
22 # built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
23 # for the list of possible encodings.
24 # The default value is: UTF-8.
25
26 DOXYFILE_ENCODING = UTF-8
27
28 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
29 # double-quotes, unless you are using Doxywizard) that should identify the
30 # project for which the documentation is generated. This name is used in the
31 # title of most generated pages and in a few other places.
32 # The default value is: My Project.
33
34 PROJECT_NAME = Tools
35
36 # The PROJECT_NUMBER tag can be used to enter a project or revision number. This
37 # could be handy for archiving the generated documentation or if some version
38 # control system is used.
39
40 PROJECT_NUMBER = "v3.1.1 (June 2014)"
41
42 # Using the PROJECT_BRIEF tag one can provide an optional one line description
43 # for a project that appears at the top of each page and should give viewer a
44 # quick idea about the purpose of the project. Keep the description short.
45
46 PROJECT_BRIEF =
47
48 # With the PROJECT_LOGO tag one can specify an logo or icon that is included in
49 # the documentation. The maximum height of the logo should not exceed 55 pixels
50 # and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
51 # to the output directory.
52
53 PROJECT_LOGO =
54
55 # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
56 # into which the generated documentation will be written. If a relative path is
57 # entered, it will be relative to the location where doxygen was started. If
58 # left blank the current directory will be used.
59
60 OUTPUT_DIRECTORY =
61
62 # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
63 # directories (in 2 levels) under the output directory of each output format and
64 # will distribute the generated files over these directories. Enabling this
65 # option can be useful when feeding doxygen a huge amount of source files, where
66 # putting all generated files in the same directory would otherwise causes
67 # performance problems for the file system.
68 # The default value is: NO.
69
70 CREATE_SUBDIRS = NO
71
72 # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
73 # characters to appear in the names of generated files. If set to NO, non-ASCII
74 # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
75 # U+3044.
76 # The default value is: NO.
77
78 ALLOW_UNICODE_NAMES = NO
79
80 # The OUTPUT_LANGUAGE tag is used to specify the language in which all
81 # documentation generated by doxygen is written. Doxygen will use this
82 # information to generate all constant output in the proper language.
83 # Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
84 # Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
85 # Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
86 # Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
87 # Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
88 # Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
89 # Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
90 # Ukrainian and Vietnamese.
91 # The default value is: English.
92
93 OUTPUT_LANGUAGE = English
94
95 # If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
96 # descriptions after the members that are listed in the file and class
97 # documentation (similar to Javadoc). Set to NO to disable this.
98 # The default value is: YES.
99
100 BRIEF_MEMBER_DESC = YES
101
102 # If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
103 # description of a member or function before the detailed description
104 #
105 # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
106 # brief descriptions will be completely suppressed.
107 # The default value is: YES.
108
109 REPEAT_BRIEF = YES
110
111 # This tag implements a quasi-intelligent brief description abbreviator that is
112 # used to form the text in various listings. Each string in this list, if found
113 # as the leading text of the brief description, will be stripped from the text
114 # and the result, after processing the whole list, is used as the annotated
115 # text. Otherwise, the brief description is used as-is. If left blank, the
116 # following values are used ($name is automatically replaced with the name of
117 # the entity):The $name class, The $name widget, The $name file, is, provides,
118 # specifies, contains, represents, a, an and the.
119
120 ABBREVIATE_BRIEF = "The $name class " \
121 "The $name widget " \
122 "The $name file " \
123 is \
124 provides \
125 specifies \
126 contains \
127 represents \
128 a \
129 an \
130 the
131
132 # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
133 # doxygen will generate a detailed section even if there is only a brief
134 # description.
135 # The default value is: NO.
136
137 ALWAYS_DETAILED_SEC = NO
138
139 # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
140 # inherited members of a class in the documentation of that class as if those
141 # members were ordinary class members. Constructors, destructors and assignment
142 # operators of the base classes will not be shown.
143 # The default value is: NO.
144
145 INLINE_INHERITED_MEMB = NO
146
147 # If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
148 # before files name in the file list and in the header files. If set to NO the
149 # shortest path that makes the file name unique will be used
150 # The default value is: YES.
151
152 FULL_PATH_NAMES = NO
153
154 # The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
155 # Stripping is only done if one of the specified strings matches the left-hand
156 # part of the path. The tag can be used to show relative paths in the file list.
157 # If left blank the directory from which doxygen is run is used as the path to
158 # strip.
159 #
160 # Note that you can specify absolute paths here, but also relative paths, which
161 # will be relative from the directory where doxygen is started.
162 # This tag requires that the tag FULL_PATH_NAMES is set to YES.
163
164 STRIP_FROM_PATH =
165
166 # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
167 # path mentioned in the documentation of a class, which tells the reader which
168 # header file to include in order to use a class. If left blank only the name of
169 # the header file containing the class definition is used. Otherwise one should
170 # specify the list of include paths that are normally passed to the compiler
171 # using the -I flag.
172
173 STRIP_FROM_INC_PATH =
174
175 # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
176 # less readable) file names. This can be useful is your file systems doesn't
177 # support long names like on DOS, Mac, or CD-ROM.
178 # The default value is: NO.
179
180 SHORT_NAMES = NO
181
182 # If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
183 # first line (until the first dot) of a Javadoc-style comment as the brief
184 # description. If set to NO, the Javadoc-style will behave just like regular Qt-
185 # style comments (thus requiring an explicit @brief command for a brief
186 # description.)
187 # The default value is: NO.
188
189 JAVADOC_AUTOBRIEF = YES
190
191 # If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
192 # line (until the first dot) of a Qt-style comment as the brief description. If
193 # set to NO, the Qt-style will behave just like regular Qt-style comments (thus
194 # requiring an explicit \brief command for a brief description.)
195 # The default value is: NO.
196
197 QT_AUTOBRIEF = NO
198
199 # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
200 # multi-line C++ special comment block (i.e. a block of //! or /// comments) as
201 # a brief description. This used to be the default behavior. The new default is
202 # to treat a multi-line C++ comment block as a detailed description. Set this
203 # tag to YES if you prefer the old behavior instead.
204 #
205 # Note that setting this tag to YES also means that rational rose comments are
206 # not recognized any more.
207 # The default value is: NO.
208
209 MULTILINE_CPP_IS_BRIEF = NO
210
211 # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
212 # documentation from any documented member that it re-implements.
213 # The default value is: YES.
214
215 INHERIT_DOCS = YES
216
217 # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
218 # new page for each member. If set to NO, the documentation of a member will be
219 # part of the file/class/namespace that contains it.
220 # The default value is: NO.
221
222 SEPARATE_MEMBER_PAGES = NO
223
224 # The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
225 # uses this value to replace tabs by spaces in code fragments.
226 # Minimum value: 1, maximum value: 16, default value: 4.
227
228 TAB_SIZE = 8
229
230 # This tag can be used to specify a number of aliases that act as commands in
231 # the documentation. An alias has the form:
232 # name=value
233 # For example adding
234 # "sideeffect=@par Side Effects:\n"
235 # will allow you to put the command \sideeffect (or @sideeffect) in the
236 # documentation, which will result in a user-defined paragraph with heading
237 # "Side Effects:". You can put \n's in the value part of an alias to insert
238 # newlines.
239
240 ALIASES =
241
242 # This tag can be used to specify a number of word-keyword mappings (TCL only).
243 # A mapping has the form "name=value". For example adding "class=itcl::class"
244 # will allow you to use the command class in the itcl::class meaning.
245
246 TCL_SUBST =
247
248 # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
249 # only. Doxygen will then generate output that is more tailored for C. For
250 # instance, some of the names that are used will be different. The list of all
251 # members will be omitted, etc.
252 # The default value is: NO.
253
254 OPTIMIZE_OUTPUT_FOR_C = NO
255
256 # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
257 # Python sources only. Doxygen will then generate output that is more tailored
258 # for that language. For instance, namespaces will be presented as packages,
259 # qualified scopes will look different, etc.
260 # The default value is: NO.
261
262 OPTIMIZE_OUTPUT_JAVA = NO
263
264 # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
265 # sources. Doxygen will then generate output that is tailored for Fortran.
266 # The default value is: NO.
267
268 OPTIMIZE_FOR_FORTRAN = NO
269
270 # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
271 # sources. Doxygen will then generate output that is tailored for VHDL.
272 # The default value is: NO.
273
274 OPTIMIZE_OUTPUT_VHDL = NO
275
276 # Doxygen selects the parser to use depending on the extension of the files it
277 # parses. With this tag you can assign which parser to use for a given
278 # extension. Doxygen has a built-in mapping, but you can override or extend it
279 # using this tag. The format is ext=language, where ext is a file extension, and
280 # language is one of the parsers supported by doxygen: IDL, Java, Javascript,
281 # C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
282 # FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
283 # Fortran. In the later case the parser tries to guess whether the code is fixed
284 # or free formatted code, this is the default for Fortran type files), VHDL. For
285 # instance to make doxygen treat .inc files as Fortran files (default is PHP),
286 # and .f files as C (default is Fortran), use: inc=Fortran f=C.
287 #
288 # Note For files without extension you can use no_extension as a placeholder.
289 #
290 # Note that for custom extensions you also need to set FILE_PATTERNS otherwise
291 # the files are not read by doxygen.
292
293 EXTENSION_MAPPING =
294
295 # If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
296 # according to the Markdown format, which allows for more readable
297 # documentation. See http://daringfireball.net/projects/markdown/ for details.
298 # The output of markdown processing is further processed by doxygen, so you can
299 # mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
300 # case of backward compatibilities issues.
301 # The default value is: YES.
302
303 MARKDOWN_SUPPORT = YES
304
305 # When enabled doxygen tries to link words that correspond to documented
306 # classes, or namespaces to their corresponding documentation. Such a link can
307 # be prevented in individual cases by by putting a % sign in front of the word
308 # or globally by setting AUTOLINK_SUPPORT to NO.
309 # The default value is: YES.
310
311 AUTOLINK_SUPPORT = YES
312
313 # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
314 # to include (a tag file for) the STL sources as input, then you should set this
315 # tag to YES in order to let doxygen match functions declarations and
316 # definitions whose arguments contain STL classes (e.g. func(std::string);
317 # versus func(std::string) {}). This also make the inheritance and collaboration
318 # diagrams that involve STL classes more complete and accurate.
319 # The default value is: NO.
320
321 BUILTIN_STL_SUPPORT = YES
322
323 # If you use Microsoft's C++/CLI language, you should set this option to YES to
324 # enable parsing support.
325 # The default value is: NO.
326
327 CPP_CLI_SUPPORT = NO
328
329 # Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
330 # http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
331 # will parse them like normal C++ but will assume all classes use public instead
332 # of private inheritance when no explicit protection keyword is present.
333 # The default value is: NO.
334
335 SIP_SUPPORT = NO
336
337 # For Microsoft's IDL there are propget and propput attributes to indicate
338 # getter and setter methods for a property. Setting this option to YES will make
339 # doxygen to replace the get and set methods by a property in the documentation.
340 # This will only work if the methods are indeed getting or setting a simple
341 # type. If this is not the case, or you want to show the methods anyway, you
342 # should set this option to NO.
343 # The default value is: YES.
344
345 IDL_PROPERTY_SUPPORT = YES
346
347 # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
348 # tag is set to YES, then doxygen will reuse the documentation of the first
349 # member in the group (if any) for the other members of the group. By default
350 # all members of a group must be documented explicitly.
351 # The default value is: NO.
352
353 DISTRIBUTE_GROUP_DOC = NO
354
355 # Set the SUBGROUPING tag to YES to allow class member groups of the same type
356 # (for instance a group of public functions) to be put as a subgroup of that
357 # type (e.g. under the Public Functions section). Set it to NO to prevent
358 # subgrouping. Alternatively, this can be done per class using the
359 # \nosubgrouping command.
360 # The default value is: YES.
361
362 SUBGROUPING = YES
363
364 # When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
365 # are shown inside the group in which they are included (e.g. using \ingroup)
366 # instead of on a separate page (for HTML and Man pages) or section (for LaTeX
367 # and RTF).
368 #
369 # Note that this feature does not work in combination with
370 # SEPARATE_MEMBER_PAGES.
371 # The default value is: NO.
372
373 INLINE_GROUPED_CLASSES = NO
374
375 # When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
376 # with only public data fields or simple typedef fields will be shown inline in
377 # the documentation of the scope in which they are defined (i.e. file,
378 # namespace, or group documentation), provided this scope is documented. If set
379 # to NO, structs, classes, and unions are shown on a separate page (for HTML and
380 # Man pages) or section (for LaTeX and RTF).
381 # The default value is: NO.
382
383 INLINE_SIMPLE_STRUCTS = NO
384
385 # When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
386 # enum is documented as struct, union, or enum with the name of the typedef. So
387 # typedef struct TypeS {} TypeT, will appear in the documentation as a struct
388 # with name TypeT. When disabled the typedef will appear as a member of a file,
389 # namespace, or class. And the struct will be named TypeS. This can typically be
390 # useful for C code in case the coding convention dictates that all compound
391 # types are typedef'ed and only the typedef is referenced, never the tag name.
392 # The default value is: NO.
393
394 TYPEDEF_HIDES_STRUCT = YES
395
396 # The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
397 # cache is used to resolve symbols given their name and scope. Since this can be
398 # an expensive process and often the same symbol appears multiple times in the
399 # code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
400 # doxygen will become slower. If the cache is too large, memory is wasted. The
401 # cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
402 # is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
403 # symbols. At the end of a run doxygen will report the cache usage and suggest
404 # the optimal cache size from a speed point of view.
405 # Minimum value: 0, maximum value: 9, default value: 0.
406
407 LOOKUP_CACHE_SIZE = 0
408
409 #---------------------------------------------------------------------------
410 # Build related configuration options
411 #---------------------------------------------------------------------------
412
413 # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
414 # documentation are documented, even if no documentation was available. Private
415 # class members and static file members will be hidden unless the
416 # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
417 # Note: This will also disable the warnings about undocumented members that are
418 # normally produced when WARNINGS is set to YES.
419 # The default value is: NO.
420
421 EXTRACT_ALL = YES
422
423 # If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
424 # be included in the documentation.
425 # The default value is: NO.
426
427 EXTRACT_PRIVATE = NO
428
429 # If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
430 # scope will be included in the documentation.
431 # The default value is: NO.
432
433 EXTRACT_PACKAGE = NO
434
435 # If the EXTRACT_STATIC tag is set to YES all static members of a file will be
436 # included in the documentation.
437 # The default value is: NO.
438
439 EXTRACT_STATIC = YES
440
441 # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
442 # locally in source files will be included in the documentation. If set to NO
443 # only classes defined in header files are included. Does not have any effect
444 # for Java sources.
445 # The default value is: YES.
446
447 EXTRACT_LOCAL_CLASSES = YES
448
449 # This flag is only useful for Objective-C code. When set to YES local methods,
450 # which are defined in the implementation section but not in the interface are
451 # included in the documentation. If set to NO only methods in the interface are
452 # included.
453 # The default value is: NO.
454
455 EXTRACT_LOCAL_METHODS = NO
456
457 # If this flag is set to YES, the members of anonymous namespaces will be
458 # extracted and appear in the documentation as a namespace called
459 # 'anonymous_namespace{file}', where file will be replaced with the base name of
460 # the file that contains the anonymous namespace. By default anonymous namespace
461 # are hidden.
462 # The default value is: NO.
463
464 EXTRACT_ANON_NSPACES = NO
465
466 # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
467 # undocumented members inside documented classes or files. If set to NO these
468 # members will be included in the various overviews, but no documentation
469 # section is generated. This option has no effect if EXTRACT_ALL is enabled.
470 # The default value is: NO.
471
472 HIDE_UNDOC_MEMBERS = YES
473
474 # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
475 # undocumented classes that are normally visible in the class hierarchy. If set
476 # to NO these classes will be included in the various overviews. This option has
477 # no effect if EXTRACT_ALL is enabled.
478 # The default value is: NO.
479
480 HIDE_UNDOC_CLASSES = YES
481
482 # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
483 # (class|struct|union) declarations. If set to NO these declarations will be
484 # included in the documentation.
485 # The default value is: NO.
486
487 HIDE_FRIEND_COMPOUNDS = NO
488
489 # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
490 # documentation blocks found inside the body of a function. If set to NO these
491 # blocks will be appended to the function's detailed documentation block.
492 # The default value is: NO.
493
494 HIDE_IN_BODY_DOCS = NO
495
496 # The INTERNAL_DOCS tag determines if documentation that is typed after a
497 # \internal command is included. If the tag is set to NO then the documentation
498 # will be excluded. Set it to YES to include the internal documentation.
499 # The default value is: NO.
500
501 INTERNAL_DOCS = NO
502
503 # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
504 # names in lower-case letters. If set to YES upper-case letters are also
505 # allowed. This is useful if you have classes or files whose names only differ
506 # in case and if your file system supports case sensitive file names. Windows
507 # and Mac users are advised to set this option to NO.
508 # The default value is: system dependent.
509
510 CASE_SENSE_NAMES = NO
511
512 # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
513 # their full class and namespace scopes in the documentation. If set to YES the
514 # scope will be hidden.
515 # The default value is: NO.
516
517 HIDE_SCOPE_NAMES = NO
518
519 # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
520 # the files that are included by a file in the documentation of that file.
521 # The default value is: YES.
522
523 SHOW_INCLUDE_FILES = NO
524
525 # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
526 # grouped member an include statement to the documentation, telling the reader
527 # which file to include in order to use the member.
528 # The default value is: NO.
529
530 SHOW_GROUPED_MEMB_INC = NO
531
532 # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
533 # files with double quotes in the documentation rather than with sharp brackets.
534 # The default value is: NO.
535
536 FORCE_LOCAL_INCLUDES = NO
537
538 # If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
539 # documentation for inline members.
540 # The default value is: YES.
541
542 INLINE_INFO = YES
543
544 # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
545 # (detailed) documentation of file and class members alphabetically by member
546 # name. If set to NO the members will appear in declaration order.
547 # The default value is: YES.
548
549 SORT_MEMBER_DOCS = YES
550
551 # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
552 # descriptions of file, namespace and class members alphabetically by member
553 # name. If set to NO the members will appear in declaration order. Note that
554 # this will also influence the order of the classes in the class list.
555 # The default value is: NO.
556
557 SORT_BRIEF_DOCS = YES
558
559 # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
560 # (brief and detailed) documentation of class members so that constructors and
561 # destructors are listed first. If set to NO the constructors will appear in the
562 # respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
563 # Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
564 # member documentation.
565 # Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
566 # detailed member documentation.
567 # The default value is: NO.
568
569 SORT_MEMBERS_CTORS_1ST = NO
570
571 # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
572 # of group names into alphabetical order. If set to NO the group names will
573 # appear in their defined order.
574 # The default value is: NO.
575
576 SORT_GROUP_NAMES = NO
577
578 # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
579 # fully-qualified names, including namespaces. If set to NO, the class list will
580 # be sorted only by class name, not including the namespace part.
581 # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
582 # Note: This option applies only to the class list, not to the alphabetical
583 # list.
584 # The default value is: NO.
585
586 SORT_BY_SCOPE_NAME = YES
587
588 # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
589 # type resolution of all parameters of a function it will reject a match between
590 # the prototype and the implementation of a member function even if there is
591 # only one candidate or it is obvious which candidate to choose by doing a
592 # simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
593 # accept a match between prototype and implementation in such cases.
594 # The default value is: NO.
595
596 STRICT_PROTO_MATCHING = NO
597
598 # The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
599 # todo list. This list is created by putting \todo commands in the
600 # documentation.
601 # The default value is: YES.
602
603 GENERATE_TODOLIST = YES
604
605 # The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
606 # test list. This list is created by putting \test commands in the
607 # documentation.
608 # The default value is: YES.
609
610 GENERATE_TESTLIST = YES
611
612 # The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
613 # list. This list is created by putting \bug commands in the documentation.
614 # The default value is: YES.
615
616 GENERATE_BUGLIST = YES
617
618 # The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
619 # the deprecated list. This list is created by putting \deprecated commands in
620 # the documentation.
621 # The default value is: YES.
622
623 GENERATE_DEPRECATEDLIST= YES
624
625 # The ENABLED_SECTIONS tag can be used to enable conditional documentation
626 # sections, marked by \if <section_label> ... \endif and \cond <section_label>
627 # ... \endcond blocks.
628
629 ENABLED_SECTIONS =
630
631 # The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
632 # initial value of a variable or macro / define can have for it to appear in the
633 # documentation. If the initializer consists of more lines than specified here
634 # it will be hidden. Use a value of 0 to hide initializers completely. The
635 # appearance of the value of individual variables and macros / defines can be
636 # controlled using \showinitializer or \hideinitializer command in the
637 # documentation regardless of this setting.
638 # Minimum value: 0, maximum value: 10000, default value: 30.
639
640 MAX_INITIALIZER_LINES = 30
641
642 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
643 # the bottom of the documentation of classes and structs. If set to YES the list
644 # will mention the files that were used to generate the documentation.
645 # The default value is: YES.
646
647 SHOW_USED_FILES = YES
648
649 # Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
650 # will remove the Files entry from the Quick Index and from the Folder Tree View
651 # (if specified).
652 # The default value is: YES.
653
654 SHOW_FILES = YES
655
656 # Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
657 # page. This will remove the Namespaces entry from the Quick Index and from the
658 # Folder Tree View (if specified).
659 # The default value is: YES.
660
661 SHOW_NAMESPACES = YES
662
663 # The FILE_VERSION_FILTER tag can be used to specify a program or script that
664 # doxygen should invoke to get the current version for each file (typically from
665 # the version control system). Doxygen will invoke the program by executing (via
666 # popen()) the command command input-file, where command is the value of the
667 # FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
668 # by doxygen. Whatever the program writes to standard output is used as the file
669 # version. For an example see the documentation.
670
671 FILE_VERSION_FILTER =
672
673 # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
674 # by doxygen. The layout file controls the global structure of the generated
675 # output files in an output format independent way. To create the layout file
676 # that represents doxygen's defaults, run doxygen with the -l option. You can
677 # optionally specify a file name after the option, if omitted DoxygenLayout.xml
678 # will be used as the name of the layout file.
679 #
680 # Note that if you run doxygen from a directory containing a file called
681 # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
682 # tag is left empty.
683
684 LAYOUT_FILE =
685
686 # The CITE_BIB_FILES tag can be used to specify one or more bib files containing
687 # the reference definitions. This must be a list of .bib files. The .bib
688 # extension is automatically appended if omitted. This requires the bibtex tool
689 # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
690 # For LaTeX the style of the bibliography can be controlled using
691 # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
692 # search path. Do not use file names with spaces, bibtex cannot handle them. See
693 # also \cite for info how to create references.
694
695 CITE_BIB_FILES =
696
697 #---------------------------------------------------------------------------
698 # Configuration options related to warning and progress messages
699 #---------------------------------------------------------------------------
700
701 # The QUIET tag can be used to turn on/off the messages that are generated to
702 # standard output by doxygen. If QUIET is set to YES this implies that the
703 # messages are off.
704 # The default value is: NO.
705
706 QUIET = NO
707
708 # The WARNINGS tag can be used to turn on/off the warning messages that are
709 # generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
710 # this implies that the warnings are on.
711 #
712 # Tip: Turn warnings on while writing the documentation.
713 # The default value is: YES.
714
715 WARNINGS = YES
716
717 # If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
718 # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
719 # will automatically be disabled.
720 # The default value is: YES.
721
722 WARN_IF_UNDOCUMENTED = YES
723
724 # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
725 # potential errors in the documentation, such as not documenting some parameters
726 # in a documented function, or documenting parameters that don't exist or using
727 # markup commands wrongly.
728 # The default value is: YES.
729
730 WARN_IF_DOC_ERROR = YES
731
732 # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
733 # are documented, but have no documentation for their parameters or return
734 # value. If set to NO doxygen will only warn about wrong or incomplete parameter
735 # documentation, but not about the absence of documentation.
736 # The default value is: NO.
737
738 WARN_NO_PARAMDOC = NO
739
740 # The WARN_FORMAT tag determines the format of the warning messages that doxygen
741 # can produce. The string should contain the $file, $line, and $text tags, which
742 # will be replaced by the file and line number from which the warning originated
743 # and the warning text. Optionally the format may contain $version, which will
744 # be replaced by the version of the file (if it could be obtained via
745 # FILE_VERSION_FILTER)
746 # The default value is: $file:$line: $text.
747
748 WARN_FORMAT = "$file:$line: $text"
749
750 # The WARN_LOGFILE tag can be used to specify a file to which warning and error
751 # messages should be written. If left blank the output is written to standard
752 # error (stderr).
753
754 WARN_LOGFILE =
755
756 #---------------------------------------------------------------------------
757 # Configuration options related to the input files
758 #---------------------------------------------------------------------------
759
760 # The INPUT tag is used to specify the files and/or directories that contain
761 # documented source files. You may enter file names like myfile.cpp or
762 # directories like /usr/src/myproject. Separate the files or directories with
763 # spaces.
764 # Note: If this tag is empty the current directory is searched.
765
766 INPUT = ../doc/dox_cmd.h
767
768 # This tag can be used to specify the character encoding of the source files
769 # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
770 # libiconv (or the iconv built into libc) for the transcoding. See the libiconv
771 # documentation (see: http://www.gnu.org/software/libiconv) for the list of
772 # possible encodings.
773 # The default value is: UTF-8.
774
775 INPUT_ENCODING = UTF-8
776
777 # If the value of the INPUT tag contains directories, you can use the
778 # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
779 # *.h) to filter out the source-files in the directories. If left blank the
780 # following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
781 # *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
782 # *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
783 # *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
784 # *.qsf, *.as and *.js.
785
786 FILE_PATTERNS = *.c \
787 *.cc \
788 *.cxx \
789 *.cpp \
790 *.c++ \
791 *.d \
792 *.java \
793 *.ii \
794 *.ixx \
795 *.ipp \
796 *.i++ \
797 *.inl \
798 *.h \
799 *.hh \
800 *.hxx \
801 *.hpp \
802 *.h++ \
803 *.idl \
804 *.odl \
805 *.cs \
806 *.php \
807 *.php3 \
808 *.inc \
809 *.m \
810 *.mm \
811 *.dox \
812 *.py
813
814 # The RECURSIVE tag can be used to specify whether or not subdirectories should
815 # be searched for input files as well.
816 # The default value is: NO.
817
818 RECURSIVE = YES
819
820 # The EXCLUDE tag can be used to specify files and/or directories that should be
821 # excluded from the INPUT source files. This way you can easily exclude a
822 # subdirectory from a directory tree whose root is specified with the INPUT tag.
823 #
824 # Note that relative paths are relative to the directory from which doxygen is
825 # run.
826
827 EXCLUDE =
828
829 # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
830 # directories that are symbolic links (a Unix file system feature) are excluded
831 # from the input.
832 # The default value is: NO.
833
834 EXCLUDE_SYMLINKS = NO
835
836 # If the value of the INPUT tag contains directories, you can use the
837 # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
838 # certain files from those directories.
839 #
840 # Note that the wildcards are matched against the file with absolute path, so to
841 # exclude all test directories for example use the pattern */test/*
842
843 EXCLUDE_PATTERNS = */.svn/* \
844 */.svn
845
846 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
847 # (namespaces, classes, functions, etc.) that should be excluded from the
848 # output. The symbol name can be a fully qualified name, a word, or if the
849 # wildcard * is used, a substring. Examples: ANamespace, AClass,
850 # AClass::ANamespace, ANamespace::*Test
851 #
852 # Note that the wildcards are matched against the file with absolute path, so to
853 # exclude all test directories use the pattern */test/*
854
855 EXCLUDE_SYMBOLS =
856
857 # The EXAMPLE_PATH tag can be used to specify one or more files or directories
858 # that contain example code fragments that are included (see the \include
859 # command).
860
861 EXAMPLE_PATH =
862
863 # If the value of the EXAMPLE_PATH tag contains directories, you can use the
864 # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
865 # *.h) to filter out the source-files in the directories. If left blank all
866 # files are included.
867
868 EXAMPLE_PATTERNS = *
869
870 # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
871 # searched for input files to be used with the \include or \dontinclude commands
872 # irrespective of the value of the RECURSIVE tag.
873 # The default value is: NO.
874
875 EXAMPLE_RECURSIVE = NO
876
877 # The IMAGE_PATH tag can be used to specify one or more files or directories
878 # that contain images that are to be included in the documentation (see the
879 # \image command).
880
881 IMAGE_PATH =
882
883 # The INPUT_FILTER tag can be used to specify a program that doxygen should
884 # invoke to filter for each input file. Doxygen will invoke the filter program
885 # by executing (via popen()) the command:
886 #
887 # <filter> <input-file>
888 #
889 # where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
890 # name of an input file. Doxygen will then use the output that the filter
891 # program writes to standard output. If FILTER_PATTERNS is specified, this tag
892 # will be ignored.
893 #
894 # Note that the filter must not add or remove lines; it is applied before the
895 # code is scanned, but not when the output code is generated. If lines are added
896 # or removed, the anchors will not be placed correctly.
897
898 INPUT_FILTER =
899
900 # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
901 # basis. Doxygen will compare the file name with each pattern and apply the
902 # filter if there is a match. The filters are a list of the form: pattern=filter
903 # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
904 # filters are used. If the FILTER_PATTERNS tag is empty or if none of the
905 # patterns match the file name, INPUT_FILTER is applied.
906
907 FILTER_PATTERNS =
908
909 # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
910 # INPUT_FILTER ) will also be used to filter the input files that are used for
911 # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
912 # The default value is: NO.
913
914 FILTER_SOURCE_FILES = NO
915
916 # The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
917 # pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
918 # it is also possible to disable source filtering for a specific pattern using
919 # *.ext= (so without naming a filter).
920 # This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
921
922 FILTER_SOURCE_PATTERNS =
923
924 # If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
925 # is part of the input, its contents will be placed on the main page
926 # (index.html). This can be useful if you have a project on for instance GitHub
927 # and want to reuse the introduction page also for the doxygen output.
928
929 USE_MDFILE_AS_MAINPAGE =
930
931 #---------------------------------------------------------------------------
932 # Configuration options related to source browsing
933 #---------------------------------------------------------------------------
934
935 # If the SOURCE_BROWSER tag is set to YES then a list of source files will be
936 # generated. Documented entities will be cross-referenced with these sources.
937 #
938 # Note: To get rid of all source code in the generated output, make sure that
939 # also VERBATIM_HEADERS is set to NO.
940 # The default value is: NO.
941
942 SOURCE_BROWSER = NO
943
944 # Setting the INLINE_SOURCES tag to YES will include the body of functions,
945 # classes and enums directly into the documentation.
946 # The default value is: NO.
947
948 INLINE_SOURCES = NO
949
950 # Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
951 # special comment blocks from generated source code fragments. Normal C, C++ and
952 # Fortran comments will always remain visible.
953 # The default value is: YES.
954
955 STRIP_CODE_COMMENTS = YES
956
957 # If the REFERENCED_BY_RELATION tag is set to YES then for each documented
958 # function all documented functions referencing it will be listed.
959 # The default value is: NO.
960
961 REFERENCED_BY_RELATION = NO
962
963 # If the REFERENCES_RELATION tag is set to YES then for each documented function
964 # all documented entities called/used by that function will be listed.
965 # The default value is: NO.
966
967 REFERENCES_RELATION = NO
968
969 # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
970 # to YES, then the hyperlinks from functions in REFERENCES_RELATION and
971 # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
972 # link to the documentation.
973 # The default value is: YES.
974
975 REFERENCES_LINK_SOURCE = YES
976
977 # If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
978 # source code will show a tooltip with additional information such as prototype,
979 # brief description and links to the definition and documentation. Since this
980 # will make the HTML file larger and loading of large files a bit slower, you
981 # can opt to disable this feature.
982 # The default value is: YES.
983 # This tag requires that the tag SOURCE_BROWSER is set to YES.
984
985 SOURCE_TOOLTIPS = YES
986
987 # If the USE_HTAGS tag is set to YES then the references to source code will
988 # point to the HTML generated by the htags(1) tool instead of doxygen built-in
989 # source browser. The htags tool is part of GNU's global source tagging system
990 # (see http://www.gnu.org/software/global/global.html). You will need version
991 # 4.8.6 or higher.
992 #
993 # To use it do the following:
994 # - Install the latest version of global
995 # - Enable SOURCE_BROWSER and USE_HTAGS in the config file
996 # - Make sure the INPUT points to the root of the source tree
997 # - Run doxygen as normal
998 #
999 # Doxygen will invoke htags (and that will in turn invoke gtags), so these
1000 # tools must be available from the command line (i.e. in the search path).
1001 #
1002 # The result: instead of the source browser generated by doxygen, the links to
1003 # source code will now point to the output of htags.
1004 # The default value is: NO.
1005 # This tag requires that the tag SOURCE_BROWSER is set to YES.
1006
1007 USE_HTAGS = NO
1008
1009 # If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
1010 # verbatim copy of the header file for each class for which an include is
1011 # specified. Set to NO to disable this.
1012 # See also: Section \class.
1013 # The default value is: YES.
1014
1015 VERBATIM_HEADERS = NO
1016
1017 # If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the
1018 # clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
1019 # cost of reduced performance. This can be particularly helpful with template
1020 # rich C++ code for which doxygen's built-in parser lacks the necessary type
1021 # information.
1022 # Note: The availability of this option depends on whether or not doxygen was
1023 # compiled with the --with-libclang option.
1024 # The default value is: NO.
1025
1026 CLANG_ASSISTED_PARSING = NO
1027
1028 # If clang assisted parsing is enabled you can provide the compiler with command
1029 # line options that you would normally use when invoking the compiler. Note that
1030 # the include paths will already be set by doxygen for the files and directories
1031 # specified with INPUT and INCLUDE_PATH.
1032 # This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
1033
1034 CLANG_OPTIONS =
1035
1036 #---------------------------------------------------------------------------
1037 # Configuration options related to the alphabetical class index
1038 #---------------------------------------------------------------------------
1039
1040 # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
1041 # compounds will be generated. Enable this if the project contains a lot of
1042 # classes, structs, unions or interfaces.
1043 # The default value is: YES.
1044
1045 ALPHABETICAL_INDEX = NO
1046
1047 # The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
1048 # which the alphabetical index list will be split.
1049 # Minimum value: 1, maximum value: 20, default value: 5.
1050 # This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
1051
1052 COLS_IN_ALPHA_INDEX = 5
1053
1054 # In case all classes in a project start with a common prefix, all classes will
1055 # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
1056 # can be used to specify a prefix (or a list of prefixes) that should be ignored
1057 # while generating the index headers.
1058 # This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
1059
1060 IGNORE_PREFIX =
1061
1062 #---------------------------------------------------------------------------
1063 # Configuration options related to the HTML output
1064 #---------------------------------------------------------------------------
1065
1066 # If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
1067 # The default value is: YES.
1068
1069 GENERATE_HTML = YES
1070
1071 # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
1072 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1073 # it.
1074 # The default directory is: html.
1075 # This tag requires that the tag GENERATE_HTML is set to YES.
1076
1077 HTML_OUTPUT = AssimpCmdDoc_Html
1078
1079 # The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
1080 # generated HTML page (for example: .htm, .php, .asp).
1081 # The default value is: .html.
1082 # This tag requires that the tag GENERATE_HTML is set to YES.
1083
1084 HTML_FILE_EXTENSION = .html
1085
1086 # The HTML_HEADER tag can be used to specify a user-defined HTML header file for
1087 # each generated HTML page. If the tag is left blank doxygen will generate a
1088 # standard header.
1089 #
1090 # To get valid HTML the header file that includes any scripts and style sheets
1091 # that doxygen needs, which is dependent on the configuration options used (e.g.
1092 # the setting GENERATE_TREEVIEW). It is highly recommended to start with a
1093 # default header using
1094 # doxygen -w html new_header.html new_footer.html new_stylesheet.css
1095 # YourConfigFile
1096 # and then modify the file new_header.html. See also section "Doxygen usage"
1097 # for information on how to generate the default header that doxygen normally
1098 # uses.
1099 # Note: The header is subject to change so you typically have to regenerate the
1100 # default header when upgrading to a newer version of doxygen. For a description
1101 # of the possible markers and block names see the documentation.
1102 # This tag requires that the tag GENERATE_HTML is set to YES.
1103
1104 HTML_HEADER =
1105
1106 # The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
1107 # generated HTML page. If the tag is left blank doxygen will generate a standard
1108 # footer. See HTML_HEADER for more information on how to generate a default
1109 # footer and what special commands can be used inside the footer. See also
1110 # section "Doxygen usage" for information on how to generate the default footer
1111 # that doxygen normally uses.
1112 # This tag requires that the tag GENERATE_HTML is set to YES.
1113
1114 HTML_FOOTER =
1115
1116 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
1117 # sheet that is used by each HTML page. It can be used to fine-tune the look of
1118 # the HTML output. If left blank doxygen will generate a default style sheet.
1119 # See also section "Doxygen usage" for information on how to generate the style
1120 # sheet that doxygen normally uses.
1121 # Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
1122 # it is more robust and this tag (HTML_STYLESHEET) will in the future become
1123 # obsolete.
1124 # This tag requires that the tag GENERATE_HTML is set to YES.
1125
1126 HTML_STYLESHEET = style.css
1127
1128 # The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user-
1129 # defined cascading style sheet that is included after the standard style sheets
1130 # created by doxygen. Using this option one can overrule certain style aspects.
1131 # This is preferred over using HTML_STYLESHEET since it does not replace the
1132 # standard style sheet and is therefor more robust against future updates.
1133 # Doxygen will copy the style sheet file to the output directory. For an example
1134 # see the documentation.
1135 # This tag requires that the tag GENERATE_HTML is set to YES.
1136
1137 HTML_EXTRA_STYLESHEET =
1138
1139 # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
1140 # other source files which should be copied to the HTML output directory. Note
1141 # that these files will be copied to the base HTML output directory. Use the
1142 # $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
1143 # files. In the HTML_STYLESHEET file, use the file name only. Also note that the
1144 # files will be copied as-is; there are no commands or markers available.
1145 # This tag requires that the tag GENERATE_HTML is set to YES.
1146
1147 HTML_EXTRA_FILES =
1148
1149 # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
1150 # will adjust the colors in the stylesheet and background images according to
1151 # this color. Hue is specified as an angle on a colorwheel, see
1152 # http://en.wikipedia.org/wiki/Hue for more information. For instance the value
1153 # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
1154 # purple, and 360 is red again.
1155 # Minimum value: 0, maximum value: 359, default value: 220.
1156 # This tag requires that the tag GENERATE_HTML is set to YES.
1157
1158 HTML_COLORSTYLE_HUE = 220
1159
1160 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
1161 # in the HTML output. For a value of 0 the output will use grayscales only. A
1162 # value of 255 will produce the most vivid colors.
1163 # Minimum value: 0, maximum value: 255, default value: 100.
1164 # This tag requires that the tag GENERATE_HTML is set to YES.
1165
1166 HTML_COLORSTYLE_SAT = 100
1167
1168 # The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
1169 # luminance component of the colors in the HTML output. Values below 100
1170 # gradually make the output lighter, whereas values above 100 make the output
1171 # darker. The value divided by 100 is the actual gamma applied, so 80 represents
1172 # a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
1173 # change the gamma.
1174 # Minimum value: 40, maximum value: 240, default value: 80.
1175 # This tag requires that the tag GENERATE_HTML is set to YES.
1176
1177 HTML_COLORSTYLE_GAMMA = 80
1178
1179 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
1180 # page will contain the date and time when the page was generated. Setting this
1181 # to NO can help when comparing the output of multiple runs.
1182 # The default value is: YES.
1183 # This tag requires that the tag GENERATE_HTML is set to YES.
1184
1185 HTML_TIMESTAMP = YES
1186
1187 # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
1188 # documentation will contain sections that can be hidden and shown after the
1189 # page has loaded.
1190 # The default value is: NO.
1191 # This tag requires that the tag GENERATE_HTML is set to YES.
1192
1193 HTML_DYNAMIC_SECTIONS = NO
1194
1195 # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
1196 # shown in the various tree structured indices initially; the user can expand
1197 # and collapse entries dynamically later on. Doxygen will expand the tree to
1198 # such a level that at most the specified number of entries are visible (unless
1199 # a fully collapsed tree already exceeds this amount). So setting the number of
1200 # entries 1 will produce a full collapsed tree by default. 0 is a special value
1201 # representing an infinite number of entries and will result in a full expanded
1202 # tree by default.
1203 # Minimum value: 0, maximum value: 9999, default value: 100.
1204 # This tag requires that the tag GENERATE_HTML is set to YES.
1205
1206 HTML_INDEX_NUM_ENTRIES = 100
1207
1208 # If the GENERATE_DOCSET tag is set to YES, additional index files will be
1209 # generated that can be used as input for Apple's Xcode 3 integrated development
1210 # environment (see: http://developer.apple.com/tools/xcode/), introduced with
1211 # OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
1212 # Makefile in the HTML output directory. Running make will produce the docset in
1213 # that directory and running make install will install the docset in
1214 # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
1215 # startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
1216 # for more information.
1217 # The default value is: NO.
1218 # This tag requires that the tag GENERATE_HTML is set to YES.
1219
1220 GENERATE_DOCSET = NO
1221
1222 # This tag determines the name of the docset feed. A documentation feed provides
1223 # an umbrella under which multiple documentation sets from a single provider
1224 # (such as a company or product suite) can be grouped.
1225 # The default value is: Doxygen generated docs.
1226 # This tag requires that the tag GENERATE_DOCSET is set to YES.
1227
1228 DOCSET_FEEDNAME = "Doxygen generated docs"
1229
1230 # This tag specifies a string that should uniquely identify the documentation
1231 # set bundle. This should be a reverse domain-name style string, e.g.
1232 # com.mycompany.MyDocSet. Doxygen will append .docset to the name.
1233 # The default value is: org.doxygen.Project.
1234 # This tag requires that the tag GENERATE_DOCSET is set to YES.
1235
1236 DOCSET_BUNDLE_ID = org.doxygen.Project
1237
1238 # The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
1239 # the documentation publisher. This should be a reverse domain-name style
1240 # string, e.g. com.mycompany.MyDocSet.documentation.
1241 # The default value is: org.doxygen.Publisher.
1242 # This tag requires that the tag GENERATE_DOCSET is set to YES.
1243
1244 DOCSET_PUBLISHER_ID = org.doxygen.Publisher
1245
1246 # The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
1247 # The default value is: Publisher.
1248 # This tag requires that the tag GENERATE_DOCSET is set to YES.
1249
1250 DOCSET_PUBLISHER_NAME = Publisher
1251
1252 # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
1253 # additional HTML index files: index.hhp, index.hhc, and index.hhk. The
1254 # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
1255 # (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
1256 # Windows.
1257 #
1258 # The HTML Help Workshop contains a compiler that can convert all HTML output
1259 # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
1260 # files are now used as the Windows 98 help format, and will replace the old
1261 # Windows help format (.hlp) on all Windows platforms in the future. Compressed
1262 # HTML files also contain an index, a table of contents, and you can search for
1263 # words in the documentation. The HTML workshop also contains a viewer for
1264 # compressed HTML files.
1265 # The default value is: NO.
1266 # This tag requires that the tag GENERATE_HTML is set to YES.
1267
1268 GENERATE_HTMLHELP = YES
1269
1270 # The CHM_FILE tag can be used to specify the file name of the resulting .chm
1271 # file. You can add a path in front of the file if the result should not be
1272 # written to the html output directory.
1273 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1274
1275 CHM_FILE = AssimpCmdDoc.chm
1276
1277 # The HHC_LOCATION tag can be used to specify the location (absolute path
1278 # including file name) of the HTML help compiler ( hhc.exe). If non-empty
1279 # doxygen will try to run the HTML help compiler on the generated index.hhp.
1280 # The file has to be specified with full path.
1281 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1282
1283 HHC_LOCATION = "C:/Program Files (x86)/HTML Help Workshop/hhc.exe"
1284
1285 # The GENERATE_CHI flag controls if a separate .chi index file is generated (
1286 # YES) or that it should be included in the master .chm file ( NO).
1287 # The default value is: NO.
1288 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1289
1290 GENERATE_CHI = NO
1291
1292 # The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
1293 # and project file content.
1294 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1295
1296 CHM_INDEX_ENCODING =
1297
1298 # The BINARY_TOC flag controls whether a binary table of contents is generated (
1299 # YES) or a normal table of contents ( NO) in the .chm file. Furthermore it
1300 # enables the Previous and Next buttons.
1301 # The default value is: NO.
1302 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1303
1304 BINARY_TOC = NO
1305
1306 # The TOC_EXPAND flag can be set to YES to add extra items for group members to
1307 # the table of contents of the HTML help documentation and to the tree view.
1308 # The default value is: NO.
1309 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1310
1311 TOC_EXPAND = NO
1312
1313 # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
1314 # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
1315 # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
1316 # (.qch) of the generated HTML documentation.
1317 # The default value is: NO.
1318 # This tag requires that the tag GENERATE_HTML is set to YES.
1319
1320 GENERATE_QHP = NO
1321
1322 # If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
1323 # the file name of the resulting .qch file. The path specified is relative to
1324 # the HTML output folder.
1325 # This tag requires that the tag GENERATE_QHP is set to YES.
1326
1327 QCH_FILE =
1328
1329 # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
1330 # Project output. For more information please see Qt Help Project / Namespace
1331 # (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
1332 # The default value is: org.doxygen.Project.
1333 # This tag requires that the tag GENERATE_QHP is set to YES.
1334
1335 QHP_NAMESPACE = org.doxygen.Project
1336
1337 # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
1338 # Help Project output. For more information please see Qt Help Project / Virtual
1339 # Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
1340 # folders).
1341 # The default value is: doc.
1342 # This tag requires that the tag GENERATE_QHP is set to YES.
1343
1344 QHP_VIRTUAL_FOLDER = doc
1345
1346 # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
1347 # filter to add. For more information please see Qt Help Project / Custom
1348 # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
1349 # filters).
1350 # This tag requires that the tag GENERATE_QHP is set to YES.
1351
1352 QHP_CUST_FILTER_NAME =
1353
1354 # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
1355 # custom filter to add. For more information please see Qt Help Project / Custom
1356 # Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
1357 # filters).
1358 # This tag requires that the tag GENERATE_QHP is set to YES.
1359
1360 QHP_CUST_FILTER_ATTRS =
1361
1362 # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
1363 # project's filter section matches. Qt Help Project / Filter Attributes (see:
1364 # http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
1365 # This tag requires that the tag GENERATE_QHP is set to YES.
1366
1367 QHP_SECT_FILTER_ATTRS =
1368
1369 # The QHG_LOCATION tag can be used to specify the location of Qt's
1370 # qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
1371 # generated .qhp file.
1372 # This tag requires that the tag GENERATE_QHP is set to YES.
1373
1374 QHG_LOCATION =
1375
1376 # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
1377 # generated, together with the HTML files, they form an Eclipse help plugin. To
1378 # install this plugin and make it available under the help contents menu in
1379 # Eclipse, the contents of the directory containing the HTML and XML files needs
1380 # to be copied into the plugins directory of eclipse. The name of the directory
1381 # within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
1382 # After copying Eclipse needs to be restarted before the help appears.
1383 # The default value is: NO.
1384 # This tag requires that the tag GENERATE_HTML is set to YES.
1385
1386 GENERATE_ECLIPSEHELP = NO
1387
1388 # A unique identifier for the Eclipse help plugin. When installing the plugin
1389 # the directory name containing the HTML and XML files should also have this
1390 # name. Each documentation set should have its own identifier.
1391 # The default value is: org.doxygen.Project.
1392 # This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
1393
1394 ECLIPSE_DOC_ID = org.doxygen.Project
1395
1396 # If you want full control over the layout of the generated HTML pages it might
1397 # be necessary to disable the index and replace it with your own. The
1398 # DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
1399 # of each HTML page. A value of NO enables the index and the value YES disables
1400 # it. Since the tabs in the index contain the same information as the navigation
1401 # tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
1402 # The default value is: NO.
1403 # This tag requires that the tag GENERATE_HTML is set to YES.
1404
1405 DISABLE_INDEX = NO
1406
1407 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
1408 # structure should be generated to display hierarchical information. If the tag
1409 # value is set to YES, a side panel will be generated containing a tree-like
1410 # index structure (just like the one that is generated for HTML Help). For this
1411 # to work a browser that supports JavaScript, DHTML, CSS and frames is required
1412 # (i.e. any modern browser). Windows users are probably better off using the
1413 # HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
1414 # further fine-tune the look of the index. As an example, the default style
1415 # sheet generated by doxygen has an example that shows how to put an image at
1416 # the root of the tree instead of the PROJECT_NAME. Since the tree basically has
1417 # the same information as the tab index, you could consider setting
1418 # DISABLE_INDEX to YES when enabling this option.
1419 # The default value is: NO.
1420 # This tag requires that the tag GENERATE_HTML is set to YES.
1421
1422 GENERATE_TREEVIEW = NO
1423
1424 # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
1425 # doxygen will group on one line in the generated HTML documentation.
1426 #
1427 # Note that a value of 0 will completely suppress the enum values from appearing
1428 # in the overview section.
1429 # Minimum value: 0, maximum value: 20, default value: 4.
1430 # This tag requires that the tag GENERATE_HTML is set to YES.
1431
1432 ENUM_VALUES_PER_LINE = 4
1433
1434 # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
1435 # to set the initial width (in pixels) of the frame in which the tree is shown.
1436 # Minimum value: 0, maximum value: 1500, default value: 250.
1437 # This tag requires that the tag GENERATE_HTML is set to YES.
1438
1439 TREEVIEW_WIDTH = 250
1440
1441 # When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
1442 # external symbols imported via tag files in a separate window.
1443 # The default value is: NO.
1444 # This tag requires that the tag GENERATE_HTML is set to YES.
1445
1446 EXT_LINKS_IN_WINDOW = NO
1447
1448 # Use this tag to change the font size of LaTeX formulas included as images in
1449 # the HTML documentation. When you change the font size after a successful
1450 # doxygen run you need to manually remove any form_*.png images from the HTML
1451 # output directory to force them to be regenerated.
1452 # Minimum value: 8, maximum value: 50, default value: 10.
1453 # This tag requires that the tag GENERATE_HTML is set to YES.
1454
1455 FORMULA_FONTSIZE = 10
1456
1457 # Use the FORMULA_TRANPARENT tag to determine whether or not the images
1458 # generated for formulas are transparent PNGs. Transparent PNGs are not
1459 # supported properly for IE 6.0, but are supported on all modern browsers.
1460 #
1461 # Note that when changing this option you need to delete any form_*.png files in
1462 # the HTML output directory before the changes have effect.
1463 # The default value is: YES.
1464 # This tag requires that the tag GENERATE_HTML is set to YES.
1465
1466 FORMULA_TRANSPARENT = YES
1467
1468 # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
1469 # http://www.mathjax.org) which uses client side Javascript for the rendering
1470 # instead of using prerendered bitmaps. Use this if you do not have LaTeX
1471 # installed or if you want to formulas look prettier in the HTML output. When
1472 # enabled you may also need to install MathJax separately and configure the path
1473 # to it using the MATHJAX_RELPATH option.
1474 # The default value is: NO.
1475 # This tag requires that the tag GENERATE_HTML is set to YES.
1476
1477 USE_MATHJAX = NO
1478
1479 # When MathJax is enabled you can set the default output format to be used for
1480 # the MathJax output. See the MathJax site (see:
1481 # http://docs.mathjax.org/en/latest/output.html) for more details.
1482 # Possible values are: HTML-CSS (which is slower, but has the best
1483 # compatibility), NativeMML (i.e. MathML) and SVG.
1484 # The default value is: HTML-CSS.
1485 # This tag requires that the tag USE_MATHJAX is set to YES.
1486
1487 MATHJAX_FORMAT = HTML-CSS
1488
1489 # When MathJax is enabled you need to specify the location relative to the HTML
1490 # output directory using the MATHJAX_RELPATH option. The destination directory
1491 # should contain the MathJax.js script. For instance, if the mathjax directory
1492 # is located at the same level as the HTML output directory, then
1493 # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
1494 # Content Delivery Network so you can quickly see the result without installing
1495 # MathJax. However, it is strongly recommended to install a local copy of
1496 # MathJax from http://www.mathjax.org before deployment.
1497 # The default value is: http://cdn.mathjax.org/mathjax/latest.
1498 # This tag requires that the tag USE_MATHJAX is set to YES.
1499
1500 MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
1501
1502 # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
1503 # extension names that should be enabled during MathJax rendering. For example
1504 # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
1505 # This tag requires that the tag USE_MATHJAX is set to YES.
1506
1507 MATHJAX_EXTENSIONS =
1508
1509 # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
1510 # of code that will be used on startup of the MathJax code. See the MathJax site
1511 # (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
1512 # example see the documentation.
1513 # This tag requires that the tag USE_MATHJAX is set to YES.
1514
1515 MATHJAX_CODEFILE =
1516
1517 # When the SEARCHENGINE tag is enabled doxygen will generate a search box for
1518 # the HTML output. The underlying search engine uses javascript and DHTML and
1519 # should work on any modern browser. Note that when using HTML help
1520 # (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
1521 # there is already a search function so this one should typically be disabled.
1522 # For large projects the javascript based search engine can be slow, then
1523 # enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
1524 # search using the keyboard; to jump to the search box use <access key> + S
1525 # (what the <access key> is depends on the OS and browser, but it is typically
1526 # <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
1527 # key> to jump into the search results window, the results can be navigated
1528 # using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
1529 # the search. The filter options can be selected when the cursor is inside the
1530 # search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
1531 # to select a filter and <Enter> or <escape> to activate or cancel the filter
1532 # option.
1533 # The default value is: YES.
1534 # This tag requires that the tag GENERATE_HTML is set to YES.
1535
1536 SEARCHENGINE = NO
1537
1538 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
1539 # implemented using a web server instead of a web client using Javascript. There
1540 # are two flavors of web server based searching depending on the EXTERNAL_SEARCH
1541 # setting. When disabled, doxygen will generate a PHP script for searching and
1542 # an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
1543 # and searching needs to be provided by external tools. See the section
1544 # "External Indexing and Searching" for details.
1545 # The default value is: NO.
1546 # This tag requires that the tag SEARCHENGINE is set to YES.
1547
1548 SERVER_BASED_SEARCH = NO
1549
1550 # When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
1551 # script for searching. Instead the search results are written to an XML file
1552 # which needs to be processed by an external indexer. Doxygen will invoke an
1553 # external search engine pointed to by the SEARCHENGINE_URL option to obtain the
1554 # search results.
1555 #
1556 # Doxygen ships with an example indexer ( doxyindexer) and search engine
1557 # (doxysearch.cgi) which are based on the open source search engine library
1558 # Xapian (see: http://xapian.org/).
1559 #
1560 # See the section "External Indexing and Searching" for details.
1561 # The default value is: NO.
1562 # This tag requires that the tag SEARCHENGINE is set to YES.
1563
1564 EXTERNAL_SEARCH = NO
1565
1566 # The SEARCHENGINE_URL should point to a search engine hosted by a web server
1567 # which will return the search results when EXTERNAL_SEARCH is enabled.
1568 #
1569 # Doxygen ships with an example indexer ( doxyindexer) and search engine
1570 # (doxysearch.cgi) which are based on the open source search engine library
1571 # Xapian (see: http://xapian.org/). See the section "External Indexing and
1572 # Searching" for details.
1573 # This tag requires that the tag SEARCHENGINE is set to YES.
1574
1575 SEARCHENGINE_URL =
1576
1577 # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
1578 # search data is written to a file for indexing by an external tool. With the
1579 # SEARCHDATA_FILE tag the name of this file can be specified.
1580 # The default file is: searchdata.xml.
1581 # This tag requires that the tag SEARCHENGINE is set to YES.
1582
1583 SEARCHDATA_FILE = searchdata.xml
1584
1585 # When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
1586 # EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
1587 # useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
1588 # projects and redirect the results back to the right project.
1589 # This tag requires that the tag SEARCHENGINE is set to YES.
1590
1591 EXTERNAL_SEARCH_ID =
1592
1593 # The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
1594 # projects other than the one defined by this configuration file, but that are
1595 # all added to the same external search index. Each project needs to have a
1596 # unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
1597 # to a relative location where the documentation can be found. The format is:
1598 # EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
1599 # This tag requires that the tag SEARCHENGINE is set to YES.
1600
1601 EXTRA_SEARCH_MAPPINGS =
1602
1603 #---------------------------------------------------------------------------
1604 # Configuration options related to the LaTeX output
1605 #---------------------------------------------------------------------------
1606
1607 # If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
1608 # The default value is: YES.
1609
1610 GENERATE_LATEX = NO
1611
1612 # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
1613 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1614 # it.
1615 # The default directory is: latex.
1616 # This tag requires that the tag GENERATE_LATEX is set to YES.
1617
1618 LATEX_OUTPUT = latex
1619
1620 # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
1621 # invoked.
1622 #
1623 # Note that when enabling USE_PDFLATEX this option is only used for generating
1624 # bitmaps for formulas in the HTML output, but not in the Makefile that is
1625 # written to the output directory.
1626 # The default file is: latex.
1627 # This tag requires that the tag GENERATE_LATEX is set to YES.
1628
1629 LATEX_CMD_NAME = latex
1630
1631 # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
1632 # index for LaTeX.
1633 # The default file is: makeindex.
1634 # This tag requires that the tag GENERATE_LATEX is set to YES.
1635
1636 MAKEINDEX_CMD_NAME = makeindex
1637
1638 # If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX
1639 # documents. This may be useful for small projects and may help to save some
1640 # trees in general.
1641 # The default value is: NO.
1642 # This tag requires that the tag GENERATE_LATEX is set to YES.
1643
1644 COMPACT_LATEX = NO
1645
1646 # The PAPER_TYPE tag can be used to set the paper type that is used by the
1647 # printer.
1648 # Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
1649 # 14 inches) and executive (7.25 x 10.5 inches).
1650 # The default value is: a4.
1651 # This tag requires that the tag GENERATE_LATEX is set to YES.
1652
1653 PAPER_TYPE = a4wide
1654
1655 # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
1656 # that should be included in the LaTeX output. To get the times font for
1657 # instance you can specify
1658 # EXTRA_PACKAGES=times
1659 # If left blank no extra packages will be included.
1660 # This tag requires that the tag GENERATE_LATEX is set to YES.
1661
1662 EXTRA_PACKAGES =
1663
1664 # The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
1665 # generated LaTeX document. The header should contain everything until the first
1666 # chapter. If it is left blank doxygen will generate a standard header. See
1667 # section "Doxygen usage" for information on how to let doxygen write the
1668 # default header to a separate file.
1669 #
1670 # Note: Only use a user-defined header if you know what you are doing! The
1671 # following commands have a special meaning inside the header: $title,
1672 # $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will
1673 # replace them by respectively the title of the page, the current date and time,
1674 # only the current date, the version number of doxygen, the project name (see
1675 # PROJECT_NAME), or the project number (see PROJECT_NUMBER).
1676 # This tag requires that the tag GENERATE_LATEX is set to YES.
1677
1678 LATEX_HEADER =
1679
1680 # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
1681 # generated LaTeX document. The footer should contain everything after the last
1682 # chapter. If it is left blank doxygen will generate a standard footer.
1683 #
1684 # Note: Only use a user-defined footer if you know what you are doing!
1685 # This tag requires that the tag GENERATE_LATEX is set to YES.
1686
1687 LATEX_FOOTER =
1688
1689 # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
1690 # other source files which should be copied to the LATEX_OUTPUT output
1691 # directory. Note that the files will be copied as-is; there are no commands or
1692 # markers available.
1693 # This tag requires that the tag GENERATE_LATEX is set to YES.
1694
1695 LATEX_EXTRA_FILES =
1696
1697 # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
1698 # prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
1699 # contain links (just like the HTML output) instead of page references. This
1700 # makes the output suitable for online browsing using a PDF viewer.
1701 # The default value is: YES.
1702 # This tag requires that the tag GENERATE_LATEX is set to YES.
1703
1704 PDF_HYPERLINKS = NO
1705
1706 # If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
1707 # the PDF file directly from the LaTeX files. Set this option to YES to get a
1708 # higher quality PDF documentation.
1709 # The default value is: YES.
1710 # This tag requires that the tag GENERATE_LATEX is set to YES.
1711
1712 USE_PDFLATEX = NO
1713
1714 # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
1715 # command to the generated LaTeX files. This will instruct LaTeX to keep running
1716 # if errors occur, instead of asking the user for help. This option is also used
1717 # when generating formulas in HTML.
1718 # The default value is: NO.
1719 # This tag requires that the tag GENERATE_LATEX is set to YES.
1720
1721 LATEX_BATCHMODE = NO
1722
1723 # If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
1724 # index chapters (such as File Index, Compound Index, etc.) in the output.
1725 # The default value is: NO.
1726 # This tag requires that the tag GENERATE_LATEX is set to YES.
1727
1728 LATEX_HIDE_INDICES = NO
1729
1730 # If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
1731 # code with syntax highlighting in the LaTeX output.
1732 #
1733 # Note that which sources are shown also depends on other settings such as
1734 # SOURCE_BROWSER.
1735 # The default value is: NO.
1736 # This tag requires that the tag GENERATE_LATEX is set to YES.
1737
1738 LATEX_SOURCE_CODE = NO
1739
1740 # The LATEX_BIB_STYLE tag can be used to specify the style to use for the
1741 # bibliography, e.g. plainnat, or ieeetr. See
1742 # http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
1743 # The default value is: plain.
1744 # This tag requires that the tag GENERATE_LATEX is set to YES.
1745
1746 LATEX_BIB_STYLE = plain
1747
1748 #---------------------------------------------------------------------------
1749 # Configuration options related to the RTF output
1750 #---------------------------------------------------------------------------
1751
1752 # If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
1753 # RTF output is optimized for Word 97 and may not look too pretty with other RTF
1754 # readers/editors.
1755 # The default value is: NO.
1756
1757 GENERATE_RTF = NO
1758
1759 # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
1760 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1761 # it.
1762 # The default directory is: rtf.
1763 # This tag requires that the tag GENERATE_RTF is set to YES.
1764
1765 RTF_OUTPUT = rtf
1766
1767 # If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF
1768 # documents. This may be useful for small projects and may help to save some
1769 # trees in general.
1770 # The default value is: NO.
1771 # This tag requires that the tag GENERATE_RTF is set to YES.
1772
1773 COMPACT_RTF = NO
1774
1775 # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
1776 # contain hyperlink fields. The RTF file will contain links (just like the HTML
1777 # output) instead of page references. This makes the output suitable for online
1778 # browsing using Word or some other Word compatible readers that support those
1779 # fields.
1780 #
1781 # Note: WordPad (write) and others do not support links.
1782 # The default value is: NO.
1783 # This tag requires that the tag GENERATE_RTF is set to YES.
1784
1785 RTF_HYPERLINKS = NO
1786
1787 # Load stylesheet definitions from file. Syntax is similar to doxygen's config
1788 # file, i.e. a series of assignments. You only have to provide replacements,
1789 # missing definitions are set to their default value.
1790 #
1791 # See also section "Doxygen usage" for information on how to generate the
1792 # default style sheet that doxygen normally uses.
1793 # This tag requires that the tag GENERATE_RTF is set to YES.
1794
1795 RTF_STYLESHEET_FILE =
1796
1797 # Set optional variables used in the generation of an RTF document. Syntax is
1798 # similar to doxygen's config file. A template extensions file can be generated
1799 # using doxygen -e rtf extensionFile.
1800 # This tag requires that the tag GENERATE_RTF is set to YES.
1801
1802 RTF_EXTENSIONS_FILE =
1803
1804 #---------------------------------------------------------------------------
1805 # Configuration options related to the man page output
1806 #---------------------------------------------------------------------------
1807
1808 # If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
1809 # classes and files.
1810 # The default value is: NO.
1811
1812 GENERATE_MAN = NO
1813
1814 # The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
1815 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1816 # it. A directory man3 will be created inside the directory specified by
1817 # MAN_OUTPUT.
1818 # The default directory is: man.
1819 # This tag requires that the tag GENERATE_MAN is set to YES.
1820
1821 MAN_OUTPUT = man
1822
1823 # The MAN_EXTENSION tag determines the extension that is added to the generated
1824 # man pages. In case the manual section does not start with a number, the number
1825 # 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
1826 # optional.
1827 # The default value is: .3.
1828 # This tag requires that the tag GENERATE_MAN is set to YES.
1829
1830 MAN_EXTENSION = .3
1831
1832 # The MAN_SUBDIR tag determines the name of the directory created within
1833 # MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
1834 # MAN_EXTENSION with the initial . removed.
1835 # This tag requires that the tag GENERATE_MAN is set to YES.
1836
1837 MAN_SUBDIR =
1838
1839 # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
1840 # will generate one additional man file for each entity documented in the real
1841 # man page(s). These additional files only source the real man page, but without
1842 # them the man command would be unable to find the correct page.
1843 # The default value is: NO.
1844 # This tag requires that the tag GENERATE_MAN is set to YES.
1845
1846 MAN_LINKS = NO
1847
1848 #---------------------------------------------------------------------------
1849 # Configuration options related to the XML output
1850 #---------------------------------------------------------------------------
1851
1852 # If the GENERATE_XML tag is set to YES doxygen will generate an XML file that
1853 # captures the structure of the code including all documentation.
1854 # The default value is: NO.
1855
1856 GENERATE_XML = NO
1857
1858 # The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
1859 # relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1860 # it.
1861 # The default directory is: xml.
1862 # This tag requires that the tag GENERATE_XML is set to YES.
1863
1864 XML_OUTPUT = xml
1865
1866 # If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
1867 # listings (including syntax highlighting and cross-referencing information) to
1868 # the XML output. Note that enabling this will significantly increase the size
1869 # of the XML output.
1870 # The default value is: YES.
1871 # This tag requires that the tag GENERATE_XML is set to YES.
1872
1873 XML_PROGRAMLISTING = YES
1874
1875 #---------------------------------------------------------------------------
1876 # Configuration options related to the DOCBOOK output
1877 #---------------------------------------------------------------------------
1878
1879 # If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
1880 # that can be used to generate PDF.
1881 # The default value is: NO.
1882
1883 GENERATE_DOCBOOK = NO
1884
1885 # The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
1886 # If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
1887 # front of it.
1888 # The default directory is: docbook.
1889 # This tag requires that the tag GENERATE_DOCBOOK is set to YES.
1890
1891 DOCBOOK_OUTPUT = docbook
1892
1893 #---------------------------------------------------------------------------
1894 # Configuration options for the AutoGen Definitions output
1895 #---------------------------------------------------------------------------
1896
1897 # If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
1898 # Definitions (see http://autogen.sf.net) file that captures the structure of
1899 # the code including all documentation. Note that this feature is still
1900 # experimental and incomplete at the moment.
1901 # The default value is: NO.
1902
1903 GENERATE_AUTOGEN_DEF = NO
1904
1905 #---------------------------------------------------------------------------
1906 # Configuration options related to the Perl module output
1907 #---------------------------------------------------------------------------
1908
1909 # If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module
1910 # file that captures the structure of the code including all documentation.
1911 #
1912 # Note that this feature is still experimental and incomplete at the moment.
1913 # The default value is: NO.
1914
1915 GENERATE_PERLMOD = NO
1916
1917 # If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary
1918 # Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
1919 # output from the Perl module output.
1920 # The default value is: NO.
1921 # This tag requires that the tag GENERATE_PERLMOD is set to YES.
1922
1923 PERLMOD_LATEX = NO
1924
1925 # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely
1926 # formatted so it can be parsed by a human reader. This is useful if you want to
1927 # understand what is going on. On the other hand, if this tag is set to NO the
1928 # size of the Perl module output will be much smaller and Perl will parse it
1929 # just the same.
1930 # The default value is: YES.
1931 # This tag requires that the tag GENERATE_PERLMOD is set to YES.
1932
1933 PERLMOD_PRETTY = YES
1934
1935 # The names of the make variables in the generated doxyrules.make file are
1936 # prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
1937 # so different doxyrules.make files included by the same Makefile don't
1938 # overwrite each other's variables.
1939 # This tag requires that the tag GENERATE_PERLMOD is set to YES.
1940
1941 PERLMOD_MAKEVAR_PREFIX =
1942
1943 #---------------------------------------------------------------------------
1944 # Configuration options related to the preprocessor
1945 #---------------------------------------------------------------------------
1946
1947 # If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
1948 # C-preprocessor directives found in the sources and include files.
1949 # The default value is: YES.
1950
1951 ENABLE_PREPROCESSING = YES
1952
1953 # If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names
1954 # in the source code. If set to NO only conditional compilation will be
1955 # performed. Macro expansion can be done in a controlled way by setting
1956 # EXPAND_ONLY_PREDEF to YES.
1957 # The default value is: NO.
1958 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
1959
1960 MACRO_EXPANSION = YES
1961
1962 # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
1963 # the macro expansion is limited to the macros specified with the PREDEFINED and
1964 # EXPAND_AS_DEFINED tags.
1965 # The default value is: NO.
1966 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
1967
1968 EXPAND_ONLY_PREDEF = YES
1969
1970 # If the SEARCH_INCLUDES tag is set to YES the includes files in the
1971 # INCLUDE_PATH will be searched if a #include is found.
1972 # The default value is: YES.
1973 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
1974
1975 SEARCH_INCLUDES = YES
1976
1977 # The INCLUDE_PATH tag can be used to specify one or more directories that
1978 # contain include files that are not input files but should be processed by the
1979 # preprocessor.
1980 # This tag requires that the tag SEARCH_INCLUDES is set to YES.
1981
1982 INCLUDE_PATH =
1983
1984 # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
1985 # patterns (like *.h and *.hpp) to filter out the header-files in the
1986 # directories. If left blank, the patterns specified with FILE_PATTERNS will be
1987 # used.
1988 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
1989
1990 INCLUDE_FILE_PATTERNS =
1991
1992 # The PREDEFINED tag can be used to specify one or more macro names that are
1993 # defined before the preprocessor is started (similar to the -D option of e.g.
1994 # gcc). The argument of the tag is a list of macros of the form: name or
1995 # name=definition (no spaces). If the definition and the "=" are omitted, "=1"
1996 # is assumed. To prevent a macro definition from being undefined via #undef or
1997 # recursively expanded use the := operator instead of the = operator.
1998 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
1999
2000 PREDEFINED = ASSIMP_DOXYGEN_BUILD=1 \
2001 __cplusplus
2002
2003 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
2004 # tag can be used to specify a list of macro names that should be expanded. The
2005 # macro definition that is found in the sources will be used. Use the PREDEFINED
2006 # tag if you want to use a different macro definition that overrules the
2007 # definition found in the source code.
2008 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2009
2010 EXPAND_AS_DEFINED = C_STRUCT \
2011 C_ENUM
2012
2013 # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
2014 # remove all references to function-like macros that are alone on a line, have
2015 # an all uppercase name, and do not end with a semicolon. Such function macros
2016 # are typically used for boiler-plate code, and will confuse the parser if not
2017 # removed.
2018 # The default value is: YES.
2019 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2020
2021 SKIP_FUNCTION_MACROS = YES
2022
2023 #---------------------------------------------------------------------------
2024 # Configuration options related to external references
2025 #---------------------------------------------------------------------------
2026
2027 # The TAGFILES tag can be used to specify one or more tag files. For each tag
2028 # file the location of the external documentation should be added. The format of
2029 # a tag file without this location is as follows:
2030 # TAGFILES = file1 file2 ...
2031 # Adding location for the tag files is done as follows:
2032 # TAGFILES = file1=loc1 "file2 = loc2" ...
2033 # where loc1 and loc2 can be relative or absolute paths or URLs. See the
2034 # section "Linking to external documentation" for more information about the use
2035 # of tag files.
2036 # Note: Each tag file must have a unique name (where the name does NOT include
2037 # the path). If a tag file is not located in the directory in which doxygen is
2038 # run, you must also specify the path to the tagfile here.
2039
2040 TAGFILES =
2041
2042 # When a file name is specified after GENERATE_TAGFILE, doxygen will create a
2043 # tag file that is based on the input files it reads. See section "Linking to
2044 # external documentation" for more information about the usage of tag files.
2045
2046 GENERATE_TAGFILE =
2047
2048 # If the ALLEXTERNALS tag is set to YES all external class will be listed in the
2049 # class index. If set to NO only the inherited external classes will be listed.
2050 # The default value is: NO.
2051
2052 ALLEXTERNALS = NO
2053
2054 # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in
2055 # the modules index. If set to NO, only the current project's groups will be
2056 # listed.
2057 # The default value is: YES.
2058
2059 EXTERNAL_GROUPS = YES
2060
2061 # If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
2062 # the related pages index. If set to NO, only the current project's pages will
2063 # be listed.
2064 # The default value is: YES.
2065
2066 EXTERNAL_PAGES = YES
2067
2068 # The PERL_PATH should be the absolute path and name of the perl script
2069 # interpreter (i.e. the result of 'which perl').
2070 # The default file (with absolute path) is: /usr/bin/perl.
2071
2072 PERL_PATH = /usr/bin/perl
2073
2074 #---------------------------------------------------------------------------
2075 # Configuration options related to the dot tool
2076 #---------------------------------------------------------------------------
2077
2078 # If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram
2079 # (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
2080 # NO turns the diagrams off. Note that this option also works with HAVE_DOT
2081 # disabled, but it is recommended to install and use dot, since it yields more
2082 # powerful graphs.
2083 # The default value is: YES.
2084
2085 CLASS_DIAGRAMS = NO
2086
2087 # You can define message sequence charts within doxygen comments using the \msc
2088 # command. Doxygen will then run the mscgen tool (see:
2089 # http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
2090 # documentation. The MSCGEN_PATH tag allows you to specify the directory where
2091 # the mscgen tool resides. If left empty the tool is assumed to be found in the
2092 # default search path.
2093
2094 MSCGEN_PATH =
2095
2096 # You can include diagrams made with dia in doxygen documentation. Doxygen will
2097 # then run dia to produce the diagram and insert it in the documentation. The
2098 # DIA_PATH tag allows you to specify the directory where the dia binary resides.
2099 # If left empty dia is assumed to be found in the default search path.
2100
2101 DIA_PATH =
2102
2103 # If set to YES, the inheritance and collaboration graphs will hide inheritance
2104 # and usage relations if the target is undocumented or is not a class.
2105 # The default value is: YES.
2106
2107 HIDE_UNDOC_RELATIONS = YES
2108
2109 # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
2110 # available from the path. This tool is part of Graphviz (see:
2111 # http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
2112 # Bell Labs. The other options in this section have no effect if this option is
2113 # set to NO
2114 # The default value is: NO.
2115
2116 HAVE_DOT = NO
2117
2118 # The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
2119 # to run in parallel. When set to 0 doxygen will base this on the number of
2120 # processors available in the system. You can set it explicitly to a value
2121 # larger than 0 to get control over the balance between CPU load and processing
2122 # speed.
2123 # Minimum value: 0, maximum value: 32, default value: 0.
2124 # This tag requires that the tag HAVE_DOT is set to YES.
2125
2126 DOT_NUM_THREADS = 0
2127
2128 # When you want a differently looking font n the dot files that doxygen
2129 # generates you can specify the font name using DOT_FONTNAME. You need to make
2130 # sure dot is able to find the font, which can be done by putting it in a
2131 # standard location or by setting the DOTFONTPATH environment variable or by
2132 # setting DOT_FONTPATH to the directory containing the font.
2133 # The default value is: Helvetica.
2134 # This tag requires that the tag HAVE_DOT is set to YES.
2135
2136 DOT_FONTNAME = FreeSans
2137
2138 # The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
2139 # dot graphs.
2140 # Minimum value: 4, maximum value: 24, default value: 10.
2141 # This tag requires that the tag HAVE_DOT is set to YES.
2142
2143 DOT_FONTSIZE = 10
2144
2145 # By default doxygen will tell dot to use the default font as specified with
2146 # DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
2147 # the path where dot can find it using this tag.
2148 # This tag requires that the tag HAVE_DOT is set to YES.
2149
2150 DOT_FONTPATH =
2151
2152 # If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
2153 # each documented class showing the direct and indirect inheritance relations.
2154 # Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
2155 # The default value is: YES.
2156 # This tag requires that the tag HAVE_DOT is set to YES.
2157
2158 CLASS_GRAPH = YES
2159
2160 # If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
2161 # graph for each documented class showing the direct and indirect implementation
2162 # dependencies (inheritance, containment, and class references variables) of the
2163 # class with other documented classes.
2164 # The default value is: YES.
2165 # This tag requires that the tag HAVE_DOT is set to YES.
2166
2167 COLLABORATION_GRAPH = YES
2168
2169 # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
2170 # groups, showing the direct groups dependencies.
2171 # The default value is: YES.
2172 # This tag requires that the tag HAVE_DOT is set to YES.
2173
2174 GROUP_GRAPHS = YES
2175
2176 # If the UML_LOOK tag is set to YES doxygen will generate inheritance and
2177 # collaboration diagrams in a style similar to the OMG's Unified Modeling
2178 # Language.
2179 # The default value is: NO.
2180 # This tag requires that the tag HAVE_DOT is set to YES.
2181
2182 UML_LOOK = NO
2183
2184 # If the UML_LOOK tag is enabled, the fields and methods are shown inside the
2185 # class node. If there are many fields or methods and many nodes the graph may
2186 # become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
2187 # number of items for each type to make the size more manageable. Set this to 0
2188 # for no limit. Note that the threshold may be exceeded by 50% before the limit
2189 # is enforced. So when you set the threshold to 10, up to 15 fields may appear,
2190 # but if the number exceeds 15, the total amount of fields shown is limited to
2191 # 10.
2192 # Minimum value: 0, maximum value: 100, default value: 10.
2193 # This tag requires that the tag HAVE_DOT is set to YES.
2194
2195 UML_LIMIT_NUM_FIELDS = 10
2196
2197 # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
2198 # collaboration graphs will show the relations between templates and their
2199 # instances.
2200 # The default value is: NO.
2201 # This tag requires that the tag HAVE_DOT is set to YES.
2202
2203 TEMPLATE_RELATIONS = NO
2204
2205 # If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
2206 # YES then doxygen will generate a graph for each documented file showing the
2207 # direct and indirect include dependencies of the file with other documented
2208 # files.
2209 # The default value is: YES.
2210 # This tag requires that the tag HAVE_DOT is set to YES.
2211
2212 INCLUDE_GRAPH = YES
2213
2214 # If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
2215 # set to YES then doxygen will generate a graph for each documented file showing
2216 # the direct and indirect include dependencies of the file with other documented
2217 # files.
2218 # The default value is: YES.
2219 # This tag requires that the tag HAVE_DOT is set to YES.
2220
2221 INCLUDED_BY_GRAPH = YES
2222
2223 # If the CALL_GRAPH tag is set to YES then doxygen will generate a call
2224 # dependency graph for every global function or class method.
2225 #
2226 # Note that enabling this option will significantly increase the time of a run.
2227 # So in most cases it will be better to enable call graphs for selected
2228 # functions only using the \callgraph command.
2229 # The default value is: NO.
2230 # This tag requires that the tag HAVE_DOT is set to YES.
2231
2232 CALL_GRAPH = NO
2233
2234 # If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
2235 # dependency graph for every global function or class method.
2236 #
2237 # Note that enabling this option will significantly increase the time of a run.
2238 # So in most cases it will be better to enable caller graphs for selected
2239 # functions only using the \callergraph command.
2240 # The default value is: NO.
2241 # This tag requires that the tag HAVE_DOT is set to YES.
2242
2243 CALLER_GRAPH = NO
2244
2245 # If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
2246 # hierarchy of all classes instead of a textual one.
2247 # The default value is: YES.
2248 # This tag requires that the tag HAVE_DOT is set to YES.
2249
2250 GRAPHICAL_HIERARCHY = YES
2251
2252 # If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
2253 # dependencies a directory has on other directories in a graphical way. The
2254 # dependency relations are determined by the #include relations between the
2255 # files in the directories.
2256 # The default value is: YES.
2257 # This tag requires that the tag HAVE_DOT is set to YES.
2258
2259 DIRECTORY_GRAPH = YES
2260
2261 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
2262 # generated by dot.
2263 # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
2264 # to make the SVG files visible in IE 9+ (other browsers do not have this
2265 # requirement).
2266 # Possible values are: png, jpg, gif and svg.
2267 # The default value is: png.
2268 # This tag requires that the tag HAVE_DOT is set to YES.
2269
2270 DOT_IMAGE_FORMAT = png
2271
2272 # If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
2273 # enable generation of interactive SVG images that allow zooming and panning.
2274 #
2275 # Note that this requires a modern browser other than Internet Explorer. Tested
2276 # and working are Firefox, Chrome, Safari, and Opera.
2277 # Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
2278 # the SVG files visible. Older versions of IE do not have SVG support.
2279 # The default value is: NO.
2280 # This tag requires that the tag HAVE_DOT is set to YES.
2281
2282 INTERACTIVE_SVG = NO
2283
2284 # The DOT_PATH tag can be used to specify the path where the dot tool can be
2285 # found. If left blank, it is assumed the dot tool can be found in the path.
2286 # This tag requires that the tag HAVE_DOT is set to YES.
2287
2288 DOT_PATH =
2289
2290 # The DOTFILE_DIRS tag can be used to specify one or more directories that
2291 # contain dot files that are included in the documentation (see the \dotfile
2292 # command).
2293 # This tag requires that the tag HAVE_DOT is set to YES.
2294
2295 DOTFILE_DIRS =
2296
2297 # The MSCFILE_DIRS tag can be used to specify one or more directories that
2298 # contain msc files that are included in the documentation (see the \mscfile
2299 # command).
2300
2301 MSCFILE_DIRS =
2302
2303 # The DIAFILE_DIRS tag can be used to specify one or more directories that
2304 # contain dia files that are included in the documentation (see the \diafile
2305 # command).
2306
2307 DIAFILE_DIRS =
2308
2309 # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
2310 # that will be shown in the graph. If the number of nodes in a graph becomes
2311 # larger than this value, doxygen will truncate the graph, which is visualized
2312 # by representing a node as a red box. Note that doxygen if the number of direct
2313 # children of the root node in a graph is already larger than
2314 # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
2315 # the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
2316 # Minimum value: 0, maximum value: 10000, default value: 50.
2317 # This tag requires that the tag HAVE_DOT is set to YES.
2318
2319 DOT_GRAPH_MAX_NODES = 50
2320
2321 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
2322 # generated by dot. A depth value of 3 means that only nodes reachable from the
2323 # root by following a path via at most 3 edges will be shown. Nodes that lay
2324 # further from the root node will be omitted. Note that setting this option to 1
2325 # or 2 may greatly reduce the computation time needed for large code bases. Also
2326 # note that the size of a graph can be further restricted by
2327 # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
2328 # Minimum value: 0, maximum value: 1000, default value: 0.
2329 # This tag requires that the tag HAVE_DOT is set to YES.
2330
2331 MAX_DOT_GRAPH_DEPTH = 1000
2332
2333 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
2334 # background. This is disabled by default, because dot on Windows does not seem
2335 # to support this out of the box.
2336 #
2337 # Warning: Depending on the platform used, enabling this option may lead to
2338 # badly anti-aliased labels on the edges of a graph (i.e. they become hard to
2339 # read).
2340 # The default value is: NO.
2341 # This tag requires that the tag HAVE_DOT is set to YES.
2342
2343 DOT_TRANSPARENT = NO
2344
2345 # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
2346 # files in one run (i.e. multiple -o and -T options on the command line). This
2347 # makes dot run faster, but since only newer versions of dot (>1.8.10) support
2348 # this, this feature is disabled by default.
2349 # The default value is: NO.
2350 # This tag requires that the tag HAVE_DOT is set to YES.
2351
2352 DOT_MULTI_TARGETS = NO
2353
2354 # If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
2355 # explaining the meaning of the various boxes and arrows in the dot generated
2356 # graphs.
2357 # The default value is: YES.
2358 # This tag requires that the tag HAVE_DOT is set to YES.
2359
2360 GENERATE_LEGEND = YES
2361
2362 # If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot
2363 # files that are used to generate the various graphs.
2364 # The default value is: YES.
2365 # This tag requires that the tag HAVE_DOT is set to YES.
2366
2367 DOT_CLEANUP = YES
190190 http://www.boost-consulting.com/products/free</a>. Choose the appropriate version of boost for your runtime of choice.
191191
192192 <b>If you don't want to use boost</b>, you can build against our <i>"Boost-Workaround"</i>. It consists of very small
193 implementations of the various boost utility classes used. However, you'll loose functionality (e.g. threading) by doing this.
193 implementations of the various boost utility classes used. However, you'll lose functionality (e.g. threading) by doing this.
194194 So, if you can use boost, you should use boost. Otherwise, See the @link use_noboost NoBoost-Section @endlink
195195 later on this page for the details of the workaround.
196196
14201420 - The implementation knows only about IFC2X3 and applies this rule set to all models it encounters,
14211421 regardless of their actual version. Loading of older or newer files may fail with parsing errors.
14221422
1423 @subsection ifc_metadata Metadata
1424
1425 IFC file properties (IfcPropertySet) are kept as per-node metadata, see aiNode::mMetaData.
1426
14231427 <hr>
14241428 @section ogre Ogre
14251429 *ATTENTION*: The Ogre-Loader is currently under development, many things have changed after this documentation was written, but they are not final enough to rewrite the documentation. So things may have changed by now!
16891693
16901694 @endcode
16911695 */
1696
1697
1698 /**
1699 @page AnimationOverview Animation Overview
1700 \section Transformations
1701 This diagram shows how you can calculate your transformationmatrices for an animated character:
1702 <img src="AnimationOverview.png" />
1703
1704 **/
+0
-445
doc/style.css less more
0 body, table, div, p, dl {
1 font-family: Verdana, Geneva, Arial, sans-serif;
2 font-size: 12px;
3 }
4
5 /* @group Heading Levels */
6
7 h1 {
8 text-align: center;
9 font-size: 160%;
10 color: black;
11 }
12
13 h2 {
14 font-size: 140%;
15 font-weight: bold;
16 }
17
18 h3 {
19 font-size: 120%;
20 font-weight: bold;
21 }
22
23 /* @end */
24
25 caption {
26 font-weight: bold;
27 }
28
29 div.qindex, div.navtab{
30 background-color: #e8eef2;
31 border: 1px solid #84b0c7;
32 text-align: center;
33 margin: 2px;
34 padding: 2px;
35 }
36
37 div.qindex, div.navpath {
38 width: 100%;
39 line-height: 140%;
40 }
41
42 div.navtab {
43 margin-right: 15px;
44 }
45
46 /* @group Link Styling */
47
48 a {
49 color: #153788;
50 font-weight: normal;
51 text-decoration: none;
52 }
53
54 .contents a:visited {
55 color: #1b77c5;
56 }
57
58 a:hover {
59 text-decoration: underline;
60 }
61
62 a.qindex {
63 font-weight: bold;
64 }
65
66 a.qindexHL {
67 font-weight: bold;
68 background-color: #6666cc;
69 color: #ffffff;
70 border: 1px double #9295C2;
71 }
72
73 .contents a.qindexHL:visited {
74 color: #ffffff;
75 }
76
77 a.el {
78 font-weight: bold;
79 }
80
81 a.elRef {
82 }
83
84 a.code {
85 }
86
87 a.codeRef {
88 }
89
90 /* @end */
91
92 dl.el {
93 margin-left: -1cm;
94 }
95
96 .fragment {
97 font-family: monospace, fixed;
98 font-size: 105%;
99 }
100
101 pre.fragment {
102 border: 1px solid #CCCCCC;
103 background-color: #f5f5f5;
104 padding: 4px 6px;
105 margin: 4px 8px 4px 2px;
106 }
107
108 div.ah {
109 background-color: black;
110 font-weight: bold;
111 color: #ffffff;
112 margin-bottom: 3px;
113 margin-top: 3px
114 }
115
116 div.groupHeader {
117 margin-left: 16px;
118 margin-top: 12px;
119 margin-bottom: 6px;
120 font-weight: bold;
121 }
122
123 div.groupText {
124 margin-left: 16px;
125 font-style: italic;
126 }
127
128 body {
129 background: white;
130 color: #252525;
131 margin-right: 20px;
132 margin-left: 20px;
133 margin: 20px;
134 }
135
136 td.indexkey {
137 background-color: #e8eef2;
138 font-weight: bold;
139 border: 1px solid #CCCCCC;
140 margin: 2px 0px 2px 0;
141 padding: 2px 10px;
142 }
143
144 td.indexvalue {
145 background-color: #e8eef2;
146 border: 1px solid #CCCCCC;
147 padding: 2px 10px;
148 margin: 2px 0px;
149 }
150
151 tr.memlist {
152 background-color: #f0f0f0;
153 }
154
155 p.formulaDsp {
156 text-align: center;
157 }
158
159 img.formulaDsp {
160
161 }
162
163 img.formulaInl {
164 vertical-align: middle;
165 }
166
167 /* @group Code Colorization */
168
169 span.keyword {
170 color: #008000
171 }
172
173 span.keywordtype {
174 color: #604020
175 }
176
177 span.keywordflow {
178 color: #e08000
179 }
180
181 span.comment {
182 color: #800000
183 }
184
185 span.preprocessor {
186 color: #806020
187 }
188
189 span.stringliteral {
190 color: #002080
191 }
192
193 span.charliteral {
194 color: #008080
195 }
196
197 span.vhdldigit {
198 color: #ff00ff
199 }
200
201 span.vhdlchar {
202 color: #000000
203 }
204
205 span.vhdlkeyword {
206 color: #700070
207 }
208
209 span.vhdllogic {
210 color: #ff0000
211 }
212
213 /* @end */
214
215 .search {
216 color: #003399;
217 font-weight: bold;
218 }
219
220 form.search {
221 margin-bottom: 0px;
222 margin-top: 0px;
223 }
224
225 input.search {
226 font-size: 75%;
227 color: #000080;
228 font-weight: normal;
229 background-color: #e8eef2;
230 }
231
232 td.tiny {
233 font-size: 75%;
234 }
235
236 .dirtab {
237 padding: 4px;
238 border-collapse: collapse;
239 border: 1px solid #84b0c7;
240 }
241
242 th.dirtab {
243 background: #e8eef2;
244 font-weight: bold;
245 }
246
247 hr {
248 height: 0;
249 border: none;
250 border-top: 1px solid #666;
251 }
252
253 /* @group Member Descriptions */
254
255 .mdescLeft, .mdescRight,
256 .memItemLeft, .memItemRight,
257 .memTemplItemLeft, .memTemplItemRight, .memTemplParams {
258 background-color: #FAFAFA;
259 border: none;
260 margin: 4px;
261 padding: 1px 0 0 8px;
262 }
263
264 .mdescLeft, .mdescRight {
265 padding: 0px 8px 4px 8px;
266 color: #555;
267 }
268
269 .memItemLeft, .memItemRight, .memTemplParams {
270 border-top: 1px solid #ccc;
271 }
272
273 .memTemplParams {
274 color: #606060;
275 }
276
277 /* @end */
278
279 /* @group Member Details */
280
281 /* Styles for detailed member documentation */
282
283 .memtemplate {
284 font-size: 80%;
285 color: #606060;
286 font-weight: normal;
287 margin-left: 3px;
288 }
289
290 .memnav {
291 background-color: #e8eef2;
292 border: 1px solid #84b0c7;
293 text-align: center;
294 margin: 2px;
295 margin-right: 15px;
296 padding: 2px;
297 }
298
299 .memitem {
300 padding: 0;
301 }
302
303 .memname {
304 white-space: nowrap;
305 font-weight: bold;
306 }
307
308 .memproto, .memdoc {
309 border: 1px solid #84b0c7;
310 }
311
312 .memproto {
313 padding: 0;
314 background-color: #d5e1e8;
315 font-weight: bold;
316 -webkit-border-top-left-radius: 8px;
317 -webkit-border-top-right-radius: 8px;
318 -moz-border-radius-topleft: 8px;
319 -moz-border-radius-topright: 8px;
320 }
321
322 .memdoc {
323 padding: 2px 5px;
324 background-color: #eef3f5;
325 border-top-width: 0;
326 -webkit-border-bottom-left-radius: 8px;
327 -webkit-border-bottom-right-radius: 8px;
328 -moz-border-radius-bottomleft: 8px;
329 -moz-border-radius-bottomright: 8px;
330 }
331
332 .paramkey {
333 text-align: right;
334 }
335
336 .paramtype {
337 white-space: nowrap;
338 }
339
340 .paramname {
341 color: #602020;
342 white-space: nowrap;
343 }
344 .paramname em {
345 font-style: normal;
346 }
347
348 /* @end */
349
350 /* @group Directory (tree) */
351
352 /* for the tree view */
353
354 .ftvtree {
355 font-family: sans-serif;
356 margin: 0.5em;
357 }
358
359 /* these are for tree view when used as main index */
360
361 .directory {
362 font-size: 9pt;
363 font-weight: bold;
364 }
365
366 .directory h3 {
367 margin: 0px;
368 margin-top: 1em;
369 font-size: 11pt;
370 }
371
372 /*
373 The following two styles can be used to replace the root node title
374 with an image of your choice. Simply uncomment the next two styles,
375 specify the name of your image and be sure to set 'height' to the
376 proper pixel height of your image.
377 */
378
379 /*
380 .directory h3.swap {
381 height: 61px;
382 background-repeat: no-repeat;
383 background-image: url("yourimage.gif");
384 }
385 .directory h3.swap span {
386 display: none;
387 }
388 */
389
390 .directory > h3 {
391 margin-top: 0;
392 }
393
394 .directory p {
395 margin: 0px;
396 white-space: nowrap;
397 }
398
399 .directory div {
400 display: none;
401 margin: 0px;
402 }
403
404 .directory img {
405 vertical-align: -30%;
406 }
407
408 /* these are for tree view when not used as main index */
409
410 .directory-alt {
411 font-size: 100%;
412 font-weight: bold;
413 }
414
415 .directory-alt h3 {
416 margin: 0px;
417 margin-top: 1em;
418 font-size: 11pt;
419 }
420
421 .directory-alt > h3 {
422 margin-top: 0;
423 }
424
425 .directory-alt p {
426 margin: 0px;
427 white-space: nowrap;
428 }
429
430 .directory-alt div {
431 display: none;
432 margin: 0px;
433 }
434
435 .directory-alt img {
436 vertical-align: -30%;
437 }
438
439 /* @end */
440
441 address {
442 font-style: normal;
443 color: #333;
444 }
0 /* A portable stdint.h
1 ****************************************************************************
2 * BSD License:
3 ****************************************************************************
4 *
5 * Copyright (c) 2005-2007 Paul Hsieh
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 * 3. The name of the author may not be used to endorse or promote products
18 * derived from this software without specific prior written permission.
19 *
20 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
21 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
22 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
23 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
24 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
25 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
29 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 *
31 ****************************************************************************
32 *
33 * Version 0.1.10
34 *
35 * The ANSI C standard committee, for the C99 standard, specified the
36 * inclusion of a new standard include file called stdint.h. This is
37 * a very useful and long desired include file which contains several
38 * very precise definitions for integer scalar types that is
39 * critically important for making portable several classes of
40 * applications including cryptography, hashing, variable length
41 * integer libraries and so on. But for most developers its likely
42 * useful just for programming sanity.
43 *
44 * The problem is that most compiler vendors have decided not to
45 * implement the C99 standard, and the next C++ language standard
46 * (which has a lot more mindshare these days) will be a long time in
47 * coming and its unknown whether or not it will include stdint.h or
48 * how much adoption it will have. Either way, it will be a long time
49 * before all compilers come with a stdint.h and it also does nothing
50 * for the extremely large number of compilers available today which
51 * do not include this file, or anything comparable to it.
52 *
53 * So that's what this file is all about. Its an attempt to build a
54 * single universal include file that works on as many platforms as
55 * possible to deliver what stdint.h is supposed to. A few things
56 * that should be noted about this file:
57 *
58 * 1) It is not guaranteed to be portable and/or present an identical
59 * interface on all platforms. The extreme variability of the
60 * ANSI C standard makes this an impossibility right from the
61 * very get go. Its really only meant to be useful for the vast
62 * majority of platforms that possess the capability of
63 * implementing usefully and precisely defined, standard sized
64 * integer scalars. Systems which are not intrinsically 2s
65 * complement may produce invalid constants.
66 *
67 * 2) There is an unavoidable use of non-reserved symbols.
68 *
69 * 3) Other standard include files are invoked.
70 *
71 * 4) This file may come in conflict with future platforms that do
72 * include stdint.h. The hope is that one or the other can be
73 * used with no real difference.
74 *
75 * 5) In the current verison, if your platform can't represent
76 * int32_t, int16_t and int8_t, it just dumps out with a compiler
77 * error.
78 *
79 * 6) 64 bit integers may or may not be defined. Test for their
80 * presence with the test: #ifdef INT64_MAX or #ifdef UINT64_MAX.
81 * Note that this is different from the C99 specification which
82 * requires the existence of 64 bit support in the compiler. If
83 * this is not defined for your platform, yet it is capable of
84 * dealing with 64 bits then it is because this file has not yet
85 * been extended to cover all of your system's capabilities.
86 *
87 * 7) (u)intptr_t may or may not be defined. Test for its presence
88 * with the test: #ifdef PTRDIFF_MAX. If this is not defined
89 * for your platform, then it is because this file has not yet
90 * been extended to cover all of your system's capabilities, not
91 * because its optional.
92 *
93 * 8) The following might not been defined even if your platform is
94 * capable of defining it:
95 *
96 * WCHAR_MIN
97 * WCHAR_MAX
98 * (u)int64_t
99 * PTRDIFF_MIN
100 * PTRDIFF_MAX
101 * (u)intptr_t
102 *
103 * 9) The following have not been defined:
104 *
105 * WINT_MIN
106 * WINT_MAX
107 *
108 * 10) The criteria for defining (u)int_least(*)_t isn't clear,
109 * except for systems which don't have a type that precisely
110 * defined 8, 16, or 32 bit types (which this include file does
111 * not support anyways). Default definitions have been given.
112 *
113 * 11) The criteria for defining (u)int_fast(*)_t isn't something I
114 * would trust to any particular compiler vendor or the ANSI C
115 * committee. It is well known that "compatible systems" are
116 * commonly created that have very different performance
117 * characteristics from the systems they are compatible with,
118 * especially those whose vendors make both the compiler and the
119 * system. Default definitions have been given, but its strongly
120 * recommended that users never use these definitions for any
121 * reason (they do *NOT* deliver any serious guarantee of
122 * improved performance -- not in this file, nor any vendor's
123 * stdint.h).
124 *
125 * 12) The following macros:
126 *
127 * PRINTF_INTMAX_MODIFIER
128 * PRINTF_INT64_MODIFIER
129 * PRINTF_INT32_MODIFIER
130 * PRINTF_INT16_MODIFIER
131 * PRINTF_LEAST64_MODIFIER
132 * PRINTF_LEAST32_MODIFIER
133 * PRINTF_LEAST16_MODIFIER
134 * PRINTF_INTPTR_MODIFIER
135 *
136 * are strings which have been defined as the modifiers required
137 * for the "d", "u" and "x" printf formats to correctly output
138 * (u)intmax_t, (u)int64_t, (u)int32_t, (u)int16_t, (u)least64_t,
139 * (u)least32_t, (u)least16_t and (u)intptr_t types respectively.
140 * PRINTF_INTPTR_MODIFIER is not defined for some systems which
141 * provide their own stdint.h. PRINTF_INT64_MODIFIER is not
142 * defined if INT64_MAX is not defined. These are an extension
143 * beyond what C99 specifies must be in stdint.h.
144 *
145 * In addition, the following macros are defined:
146 *
147 * PRINTF_INTMAX_HEX_WIDTH
148 * PRINTF_INT64_HEX_WIDTH
149 * PRINTF_INT32_HEX_WIDTH
150 * PRINTF_INT16_HEX_WIDTH
151 * PRINTF_INT8_HEX_WIDTH
152 * PRINTF_INTMAX_DEC_WIDTH
153 * PRINTF_INT64_DEC_WIDTH
154 * PRINTF_INT32_DEC_WIDTH
155 * PRINTF_INT16_DEC_WIDTH
156 * PRINTF_INT8_DEC_WIDTH
157 *
158 * Which specifies the maximum number of characters required to
159 * print the number of that type in either hexadecimal or decimal.
160 * These are an extension beyond what C99 specifies must be in
161 * stdint.h.
162 *
163 * Compilers tested (all with 0 warnings at their highest respective
164 * settings): Borland Turbo C 2.0, WATCOM C/C++ 11.0 (16 bits and 32
165 * bits), Microsoft Visual C++ 6.0 (32 bit), Microsoft Visual Studio
166 * .net (VC7), Intel C++ 4.0, GNU gcc v3.3.3
167 *
168 * This file should be considered a work in progress. Suggestions for
169 * improvements, especially those which increase coverage are strongly
170 * encouraged.
171 *
172 * Acknowledgements
173 *
174 * The following people have made significant contributions to the
175 * development and testing of this file:
176 *
177 * Chris Howie
178 * John Steele Scott
179 * Dave Thorup
180 *
181 */
182
183 #include <stddef.h>
184 #include <limits.h>
185 #include <signal.h>
186
187 /*
188 * For gcc with _STDINT_H, fill in the PRINTF_INT*_MODIFIER macros, and
189 * do nothing else. On the Mac OS X version of gcc this is _STDINT_H_.
190 */
191
192 #if ((defined(__STDC__) && __STDC__ && __STDC_VERSION__ >= 199901L) || (defined (__WATCOMC__) && (defined (_STDINT_H_INCLUDED) || __WATCOMC__ >= 1250)) || (defined(__GNUC__) && (defined(_STDINT_H) || defined(_STDINT_H_)))) && !defined (_PSTDINT_H_INCLUDED) && !defined(_STDINT)
193 #include <stdint.h>
194 #define _PSTDINT_H_INCLUDED
195 # ifndef PRINTF_INT64_MODIFIER
196 # define PRINTF_INT64_MODIFIER "ll"
197 # endif
198 # ifndef PRINTF_INT32_MODIFIER
199 # define PRINTF_INT32_MODIFIER "l"
200 # endif
201 # ifndef PRINTF_INT16_MODIFIER
202 # define PRINTF_INT16_MODIFIER "h"
203 # endif
204 # ifndef PRINTF_INTMAX_MODIFIER
205 # define PRINTF_INTMAX_MODIFIER PRINTF_INT64_MODIFIER
206 # endif
207 # ifndef PRINTF_INT64_HEX_WIDTH
208 # define PRINTF_INT64_HEX_WIDTH "16"
209 # endif
210 # ifndef PRINTF_INT32_HEX_WIDTH
211 # define PRINTF_INT32_HEX_WIDTH "8"
212 # endif
213 # ifndef PRINTF_INT16_HEX_WIDTH
214 # define PRINTF_INT16_HEX_WIDTH "4"
215 # endif
216 # ifndef PRINTF_INT8_HEX_WIDTH
217 # define PRINTF_INT8_HEX_WIDTH "2"
218 # endif
219 # ifndef PRINTF_INT64_DEC_WIDTH
220 # define PRINTF_INT64_DEC_WIDTH "20"
221 # endif
222 # ifndef PRINTF_INT32_DEC_WIDTH
223 # define PRINTF_INT32_DEC_WIDTH "10"
224 # endif
225 # ifndef PRINTF_INT16_DEC_WIDTH
226 # define PRINTF_INT16_DEC_WIDTH "5"
227 # endif
228 # ifndef PRINTF_INT8_DEC_WIDTH
229 # define PRINTF_INT8_DEC_WIDTH "3"
230 # endif
231 # ifndef PRINTF_INTMAX_HEX_WIDTH
232 # define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT64_HEX_WIDTH
233 # endif
234 # ifndef PRINTF_INTMAX_DEC_WIDTH
235 # define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT64_DEC_WIDTH
236 # endif
237
238 /*
239 * Something really weird is going on with Open Watcom. Just pull some of
240 * these duplicated definitions from Open Watcom's stdint.h file for now.
241 */
242
243 # if defined (__WATCOMC__) && __WATCOMC__ >= 1250
244 # if !defined (INT64_C)
245 # define INT64_C(x) (x + (INT64_MAX - INT64_MAX))
246 # endif
247 # if !defined (UINT64_C)
248 # define UINT64_C(x) (x + (UINT64_MAX - UINT64_MAX))
249 # endif
250 # if !defined (INT32_C)
251 # define INT32_C(x) (x + (INT32_MAX - INT32_MAX))
252 # endif
253 # if !defined (UINT32_C)
254 # define UINT32_C(x) (x + (UINT32_MAX - UINT32_MAX))
255 # endif
256 # if !defined (INT16_C)
257 # define INT16_C(x) (x)
258 # endif
259 # if !defined (UINT16_C)
260 # define UINT16_C(x) (x)
261 # endif
262 # if !defined (INT8_C)
263 # define INT8_C(x) (x)
264 # endif
265 # if !defined (UINT8_C)
266 # define UINT8_C(x) (x)
267 # endif
268 # if !defined (UINT64_MAX)
269 # define UINT64_MAX 18446744073709551615ULL
270 # endif
271 # if !defined (INT64_MAX)
272 # define INT64_MAX 9223372036854775807LL
273 # endif
274 # if !defined (UINT32_MAX)
275 # define UINT32_MAX 4294967295UL
276 # endif
277 # if !defined (INT32_MAX)
278 # define INT32_MAX 2147483647L
279 # endif
280 # if !defined (INTMAX_MAX)
281 # define INTMAX_MAX INT64_MAX
282 # endif
283 # if !defined (INTMAX_MIN)
284 # define INTMAX_MIN INT64_MIN
285 # endif
286 # endif
287 #endif
288
289 #ifndef _PSTDINT_H_INCLUDED
290 #define _PSTDINT_H_INCLUDED
291
292 #ifndef SIZE_MAX
293 # define SIZE_MAX (~(size_t)0)
294 #endif
295
296 /*
297 * Deduce the type assignments from limits.h under the assumption that
298 * integer sizes in bits are powers of 2, and follow the ANSI
299 * definitions.
300 */
301
302 #ifndef UINT8_MAX
303 # define UINT8_MAX 0xff
304 #endif
305 #ifndef uint8_t
306 # if (UCHAR_MAX == UINT8_MAX) || defined (S_SPLINT_S)
307 typedef unsigned char uint8_t;
308 # define UINT8_C(v) ((uint8_t) v)
309 # else
310 # error "Platform not supported"
311 # endif
312 #endif
313
314 #ifndef INT8_MAX
315 # define INT8_MAX 0x7f
316 #endif
317 #ifndef INT8_MIN
318 # define INT8_MIN INT8_C(0x80)
319 #endif
320 #ifndef int8_t
321 # if (SCHAR_MAX == INT8_MAX) || defined (S_SPLINT_S)
322 typedef signed char int8_t;
323 # define INT8_C(v) ((int8_t) v)
324 # else
325 # error "Platform not supported"
326 # endif
327 #endif
328
329 #ifndef UINT16_MAX
330 # define UINT16_MAX 0xffff
331 #endif
332 #ifndef uint16_t
333 #if (UINT_MAX == UINT16_MAX) || defined (S_SPLINT_S)
334 typedef unsigned int uint16_t;
335 # ifndef PRINTF_INT16_MODIFIER
336 # define PRINTF_INT16_MODIFIER ""
337 # endif
338 # define UINT16_C(v) ((uint16_t) (v))
339 #elif (USHRT_MAX == UINT16_MAX)
340 typedef unsigned short uint16_t;
341 # define UINT16_C(v) ((uint16_t) (v))
342 # ifndef PRINTF_INT16_MODIFIER
343 # define PRINTF_INT16_MODIFIER "h"
344 # endif
345 #else
346 #error "Platform not supported"
347 #endif
348 #endif
349
350 #ifndef INT16_MAX
351 # define INT16_MAX 0x7fff
352 #endif
353 #ifndef INT16_MIN
354 # define INT16_MIN INT16_C(0x8000)
355 #endif
356 #ifndef int16_t
357 #if (INT_MAX == INT16_MAX) || defined (S_SPLINT_S)
358 typedef signed int int16_t;
359 # define INT16_C(v) ((int16_t) (v))
360 # ifndef PRINTF_INT16_MODIFIER
361 # define PRINTF_INT16_MODIFIER ""
362 # endif
363 #elif (SHRT_MAX == INT16_MAX)
364 typedef signed short int16_t;
365 # define INT16_C(v) ((int16_t) (v))
366 # ifndef PRINTF_INT16_MODIFIER
367 # define PRINTF_INT16_MODIFIER "h"
368 # endif
369 #else
370 #error "Platform not supported"
371 #endif
372 #endif
373
374 #ifndef UINT32_MAX
375 # define UINT32_MAX (0xffffffffUL)
376 #endif
377 #ifndef uint32_t
378 #if (ULONG_MAX == UINT32_MAX) || defined (S_SPLINT_S)
379 typedef unsigned long uint32_t;
380 # define UINT32_C(v) v ## UL
381 # ifndef PRINTF_INT32_MODIFIER
382 # define PRINTF_INT32_MODIFIER "l"
383 # endif
384 #elif (UINT_MAX == UINT32_MAX)
385 typedef unsigned int uint32_t;
386 # ifndef PRINTF_INT32_MODIFIER
387 # define PRINTF_INT32_MODIFIER ""
388 # endif
389 # define UINT32_C(v) v ## U
390 #elif (USHRT_MAX == UINT32_MAX)
391 typedef unsigned short uint32_t;
392 # define UINT32_C(v) ((unsigned short) (v))
393 # ifndef PRINTF_INT32_MODIFIER
394 # define PRINTF_INT32_MODIFIER ""
395 # endif
396 #else
397 #error "Platform not supported"
398 #endif
399 #endif
400
401 #ifndef INT32_MAX
402 # define INT32_MAX (0x7fffffffL)
403 #endif
404 #ifndef INT32_MIN
405 # define INT32_MIN INT32_C(0x80000000)
406 #endif
407 #ifndef int32_t
408 #if (LONG_MAX == INT32_MAX) || defined (S_SPLINT_S)
409 typedef signed long int32_t;
410 # define INT32_C(v) v ## L
411 # ifndef PRINTF_INT32_MODIFIER
412 # define PRINTF_INT32_MODIFIER "l"
413 # endif
414 #elif (INT_MAX == INT32_MAX)
415 typedef signed int int32_t;
416 # define INT32_C(v) v
417 # ifndef PRINTF_INT32_MODIFIER
418 # define PRINTF_INT32_MODIFIER ""
419 # endif
420 #elif (SHRT_MAX == INT32_MAX)
421 typedef signed short int32_t;
422 # define INT32_C(v) ((short) (v))
423 # ifndef PRINTF_INT32_MODIFIER
424 # define PRINTF_INT32_MODIFIER ""
425 # endif
426 #else
427 #error "Platform not supported"
428 #endif
429 #endif
430
431 /*
432 * The macro stdint_int64_defined is temporarily used to record
433 * whether or not 64 integer support is available. It must be
434 * defined for any 64 integer extensions for new platforms that are
435 * added.
436 */
437
438 #undef stdint_int64_defined
439 #if (defined(__STDC__) && defined(__STDC_VERSION__)) || defined (S_SPLINT_S)
440 # if (__STDC__ && __STDC_VERSION >= 199901L) || defined (S_SPLINT_S)
441 # define stdint_int64_defined
442 typedef long long int64_t;
443 typedef unsigned long long uint64_t;
444 # define UINT64_C(v) v ## ULL
445 # define INT64_C(v) v ## LL
446 # ifndef PRINTF_INT64_MODIFIER
447 # define PRINTF_INT64_MODIFIER "ll"
448 # endif
449 # endif
450 #endif
451
452 #if !defined (stdint_int64_defined)
453 # if defined(__GNUC__)
454 # define stdint_int64_defined
455 __extension__ typedef long long int64_t;
456 __extension__ typedef unsigned long long uint64_t;
457 # define UINT64_C(v) v ## ULL
458 # define INT64_C(v) v ## LL
459 # ifndef PRINTF_INT64_MODIFIER
460 # define PRINTF_INT64_MODIFIER "ll"
461 # endif
462 # elif defined(__MWERKS__) || defined (__SUNPRO_C) || defined (__SUNPRO_CC) || defined (__APPLE_CC__) || defined (_LONG_LONG) || defined (_CRAYC) || defined (S_SPLINT_S)
463 # define stdint_int64_defined
464 typedef long long int64_t;
465 typedef unsigned long long uint64_t;
466 # define UINT64_C(v) v ## ULL
467 # define INT64_C(v) v ## LL
468 # ifndef PRINTF_INT64_MODIFIER
469 # define PRINTF_INT64_MODIFIER "ll"
470 # endif
471 # elif (defined(__WATCOMC__) && defined(__WATCOM_INT64__)) || (defined(_MSC_VER) && _INTEGRAL_MAX_BITS >= 64) || (defined (__BORLANDC__) && __BORLANDC__ > 0x460) || defined (__alpha) || defined (__DECC)
472 # define stdint_int64_defined
473 typedef __int64 int64_t;
474 typedef unsigned __int64 uint64_t;
475 # define UINT64_C(v) v ## UI64
476 # define INT64_C(v) v ## I64
477 # ifndef PRINTF_INT64_MODIFIER
478 # define PRINTF_INT64_MODIFIER "I64"
479 # endif
480 # endif
481 #endif
482
483 #if !defined (LONG_LONG_MAX) && defined (INT64_C)
484 # define LONG_LONG_MAX INT64_C (9223372036854775807)
485 #endif
486 #ifndef ULONG_LONG_MAX
487 # define ULONG_LONG_MAX UINT64_C (18446744073709551615)
488 #endif
489
490 #if !defined (INT64_MAX) && defined (INT64_C)
491 # define INT64_MAX INT64_C (9223372036854775807)
492 #endif
493 #if !defined (INT64_MIN) && defined (INT64_C)
494 # define INT64_MIN INT64_C (-9223372036854775808)
495 #endif
496 #if !defined (UINT64_MAX) && defined (INT64_C)
497 # define UINT64_MAX UINT64_C (18446744073709551615)
498 #endif
499
500 /*
501 * Width of hexadecimal for number field.
502 */
503
504 #ifndef PRINTF_INT64_HEX_WIDTH
505 # define PRINTF_INT64_HEX_WIDTH "16"
506 #endif
507 #ifndef PRINTF_INT32_HEX_WIDTH
508 # define PRINTF_INT32_HEX_WIDTH "8"
509 #endif
510 #ifndef PRINTF_INT16_HEX_WIDTH
511 # define PRINTF_INT16_HEX_WIDTH "4"
512 #endif
513 #ifndef PRINTF_INT8_HEX_WIDTH
514 # define PRINTF_INT8_HEX_WIDTH "2"
515 #endif
516
517 #ifndef PRINTF_INT64_DEC_WIDTH
518 # define PRINTF_INT64_DEC_WIDTH "20"
519 #endif
520 #ifndef PRINTF_INT32_DEC_WIDTH
521 # define PRINTF_INT32_DEC_WIDTH "10"
522 #endif
523 #ifndef PRINTF_INT16_DEC_WIDTH
524 # define PRINTF_INT16_DEC_WIDTH "5"
525 #endif
526 #ifndef PRINTF_INT8_DEC_WIDTH
527 # define PRINTF_INT8_DEC_WIDTH "3"
528 #endif
529
530 /*
531 * Ok, lets not worry about 128 bit integers for now. Moore's law says
532 * we don't need to worry about that until about 2040 at which point
533 * we'll have bigger things to worry about.
534 */
535
536 #ifdef stdint_int64_defined
537 typedef int64_t intmax_t;
538 typedef uint64_t uintmax_t;
539 # define INTMAX_MAX INT64_MAX
540 # define INTMAX_MIN INT64_MIN
541 # define UINTMAX_MAX UINT64_MAX
542 # define UINTMAX_C(v) UINT64_C(v)
543 # define INTMAX_C(v) INT64_C(v)
544 # ifndef PRINTF_INTMAX_MODIFIER
545 # define PRINTF_INTMAX_MODIFIER PRINTF_INT64_MODIFIER
546 # endif
547 # ifndef PRINTF_INTMAX_HEX_WIDTH
548 # define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT64_HEX_WIDTH
549 # endif
550 # ifndef PRINTF_INTMAX_DEC_WIDTH
551 # define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT64_DEC_WIDTH
552 # endif
553 #else
554 typedef int32_t intmax_t;
555 typedef uint32_t uintmax_t;
556 # define INTMAX_MAX INT32_MAX
557 # define UINTMAX_MAX UINT32_MAX
558 # define UINTMAX_C(v) UINT32_C(v)
559 # define INTMAX_C(v) INT32_C(v)
560 # ifndef PRINTF_INTMAX_MODIFIER
561 # define PRINTF_INTMAX_MODIFIER PRINTF_INT32_MODIFIER
562 # endif
563 # ifndef PRINTF_INTMAX_HEX_WIDTH
564 # define PRINTF_INTMAX_HEX_WIDTH PRINTF_INT32_HEX_WIDTH
565 # endif
566 # ifndef PRINTF_INTMAX_DEC_WIDTH
567 # define PRINTF_INTMAX_DEC_WIDTH PRINTF_INT32_DEC_WIDTH
568 # endif
569 #endif
570
571 /*
572 * Because this file currently only supports platforms which have
573 * precise powers of 2 as bit sizes for the default integers, the
574 * least definitions are all trivial. Its possible that a future
575 * version of this file could have different definitions.
576 */
577
578 #ifndef stdint_least_defined
579 typedef int8_t int_least8_t;
580 typedef uint8_t uint_least8_t;
581 typedef int16_t int_least16_t;
582 typedef uint16_t uint_least16_t;
583 typedef int32_t int_least32_t;
584 typedef uint32_t uint_least32_t;
585 # define PRINTF_LEAST32_MODIFIER PRINTF_INT32_MODIFIER
586 # define PRINTF_LEAST16_MODIFIER PRINTF_INT16_MODIFIER
587 # define UINT_LEAST8_MAX UINT8_MAX
588 # define INT_LEAST8_MAX INT8_MAX
589 # define UINT_LEAST16_MAX UINT16_MAX
590 # define INT_LEAST16_MAX INT16_MAX
591 # define UINT_LEAST32_MAX UINT32_MAX
592 # define INT_LEAST32_MAX INT32_MAX
593 # define INT_LEAST8_MIN INT8_MIN
594 # define INT_LEAST16_MIN INT16_MIN
595 # define INT_LEAST32_MIN INT32_MIN
596 # ifdef stdint_int64_defined
597 typedef int64_t int_least64_t;
598 typedef uint64_t uint_least64_t;
599 # define PRINTF_LEAST64_MODIFIER PRINTF_INT64_MODIFIER
600 # define UINT_LEAST64_MAX UINT64_MAX
601 # define INT_LEAST64_MAX INT64_MAX
602 # define INT_LEAST64_MIN INT64_MIN
603 # endif
604 #endif
605 #undef stdint_least_defined
606
607 /*
608 * The ANSI C committee pretending to know or specify anything about
609 * performance is the epitome of misguided arrogance. The mandate of
610 * this file is to *ONLY* ever support that absolute minimum
611 * definition of the fast integer types, for compatibility purposes.
612 * No extensions, and no attempt to suggest what may or may not be a
613 * faster integer type will ever be made in this file. Developers are
614 * warned to stay away from these types when using this or any other
615 * stdint.h.
616 */
617
618 typedef int_least8_t int_fast8_t;
619 typedef uint_least8_t uint_fast8_t;
620 typedef int_least16_t int_fast16_t;
621 typedef uint_least16_t uint_fast16_t;
622 typedef int_least32_t int_fast32_t;
623 typedef uint_least32_t uint_fast32_t;
624 #define UINT_FAST8_MAX UINT_LEAST8_MAX
625 #define INT_FAST8_MAX INT_LEAST8_MAX
626 #define UINT_FAST16_MAX UINT_LEAST16_MAX
627 #define INT_FAST16_MAX INT_LEAST16_MAX
628 #define UINT_FAST32_MAX UINT_LEAST32_MAX
629 #define INT_FAST32_MAX INT_LEAST32_MAX
630 #define INT_FAST8_MIN INT_LEAST8_MIN
631 #define INT_FAST16_MIN INT_LEAST16_MIN
632 #define INT_FAST32_MIN INT_LEAST32_MIN
633 #ifdef stdint_int64_defined
634 typedef int_least64_t int_fast64_t;
635 typedef uint_least64_t uint_fast64_t;
636 # define UINT_FAST64_MAX UINT_LEAST64_MAX
637 # define INT_FAST64_MAX INT_LEAST64_MAX
638 # define INT_FAST64_MIN INT_LEAST64_MIN
639 #endif
640
641 #undef stdint_int64_defined
642
643 /*
644 * Whatever piecemeal, per compiler thing we can do about the wchar_t
645 * type limits.
646 */
647
648 #if defined(__WATCOMC__) || defined(_MSC_VER) || defined (__GNUC__)
649 # include <wchar.h>
650 # ifndef WCHAR_MIN
651 # define WCHAR_MIN 0
652 # endif
653 # ifndef WCHAR_MAX
654 # define WCHAR_MAX ((wchar_t)-1)
655 # endif
656 #endif
657
658 /*
659 * Whatever piecemeal, per compiler/platform thing we can do about the
660 * (u)intptr_t types and limits.
661 */
662
663 #if defined (_MSC_VER) && defined (_UINTPTR_T_DEFINED)
664 # define STDINT_H_UINTPTR_T_DEFINED
665 #endif
666
667 #ifndef STDINT_H_UINTPTR_T_DEFINED
668 # if defined (__alpha__) || defined (__ia64__) || defined (__x86_64__) || defined (_WIN64)
669 # define stdint_intptr_bits 64
670 # elif defined (__WATCOMC__) || defined (__TURBOC__)
671 # if defined(__TINY__) || defined(__SMALL__) || defined(__MEDIUM__)
672 # define stdint_intptr_bits 16
673 # else
674 # define stdint_intptr_bits 32
675 # endif
676 # elif defined (__i386__) || defined (_WIN32) || defined (WIN32)
677 # define stdint_intptr_bits 32
678 # elif defined (__INTEL_COMPILER)
679 /* TODO -- what will Intel do about x86-64? */
680 # endif
681
682 # ifdef stdint_intptr_bits
683 # define stdint_intptr_glue3_i(a,b,c) a##b##c
684 # define stdint_intptr_glue3(a,b,c) stdint_intptr_glue3_i(a,b,c)
685 # ifndef PRINTF_INTPTR_MODIFIER
686 # define PRINTF_INTPTR_MODIFIER stdint_intptr_glue3(PRINTF_INT,stdint_intptr_bits,_MODIFIER)
687 # endif
688 # ifndef PTRDIFF_MAX
689 # define PTRDIFF_MAX stdint_intptr_glue3(INT,stdint_intptr_bits,_MAX)
690 # endif
691 # ifndef PTRDIFF_MIN
692 # define PTRDIFF_MIN stdint_intptr_glue3(INT,stdint_intptr_bits,_MIN)
693 # endif
694 # ifndef UINTPTR_MAX
695 # define UINTPTR_MAX stdint_intptr_glue3(UINT,stdint_intptr_bits,_MAX)
696 # endif
697 # ifndef INTPTR_MAX
698 # define INTPTR_MAX stdint_intptr_glue3(INT,stdint_intptr_bits,_MAX)
699 # endif
700 # ifndef INTPTR_MIN
701 # define INTPTR_MIN stdint_intptr_glue3(INT,stdint_intptr_bits,_MIN)
702 # endif
703 # ifndef INTPTR_C
704 # define INTPTR_C(x) stdint_intptr_glue3(INT,stdint_intptr_bits,_C)(x)
705 # endif
706 # ifndef UINTPTR_C
707 # define UINTPTR_C(x) stdint_intptr_glue3(UINT,stdint_intptr_bits,_C)(x)
708 # endif
709 typedef stdint_intptr_glue3(uint,stdint_intptr_bits,_t) uintptr_t;
710 typedef stdint_intptr_glue3( int,stdint_intptr_bits,_t) intptr_t;
711 # else
712 /* TODO -- This following is likely wrong for some platforms, and does
713 nothing for the definition of uintptr_t. */
714 typedef ptrdiff_t intptr_t;
715 # endif
716 # define STDINT_H_UINTPTR_T_DEFINED
717 #endif
718
719 /*
720 * Assumes sig_atomic_t is signed and we have a 2s complement machine.
721 */
722
723 #ifndef SIG_ATOMIC_MAX
724 # define SIG_ATOMIC_MAX ((((sig_atomic_t) 1) << (sizeof (sig_atomic_t)*CHAR_BIT-1)) - 1)
725 #endif
726
727 #endif
728
77 // MSVC 7,8,9
88 // GCC
99 // BORLAND (complains about 'pack state changed but not reverted', but works)
10 // Clang
1011 //
1112 //
1213 // USAGE:
2425 # pragma pack(push,1)
2526 # define PACK_STRUCT
2627 #elif defined( __GNUC__ )
27 # define PACK_STRUCT __attribute__((packed))
28 # if defined(__clang__)
29 # define PACK_STRUCT __attribute__((__packed__))
30 # else
31 # define PACK_STRUCT __attribute__((gcc_struct, __packed__))
32 # endif
2833 #else
2934 # error Compiler not supported
3035 #endif
5050
5151 namespace Assimp {
5252 class ExporterPimpl;
53 class IOSystem;
5354
5455
5556 // ----------------------------------------------------------------------------------
166167 * @return the exported data or NULL in case of error.
167168 * @note If the Exporter instance did already hold a blob from
168169 * a previous call to #ExportToBlob, it will be disposed.
169 * Any IO handlers set via #SetIOHandler are ignored here.*/
170 * Any IO handlers set via #SetIOHandler are ignored here.
171 * @note Use aiCopyScene() to get a modifiable copy of a previously
172 * imported scene. */
170173 const aiExportDataBlob* ExportToBlob( const aiScene* pScene, const char* pFormatId, unsigned int pPreprocessing = 0u );
171174 inline const aiExportDataBlob* ExportToBlob( const aiScene* pScene, const std::string& pFormatId, unsigned int pPreprocessing = 0u );
172175
194197 * redundant as exporters would apply them anyhow. A good example
195198 * is triangulation - whilst you can enforce it by specifying
196199 * the #aiProcess_Triangulate flag, most export formats support only
197 * triangulate data so they would run the step even if it wasn't requested.
198 * @return AI_SUCCESS if everything was fine. */
200 * triangulate data so they would run the step even if it wasn't requested.
201 *
202 * If assimp detects that the input scene was directly taken from the importer side of
203 * the library (i.e. not copied using aiCopyScene and potetially modified afterwards),
204 * any postprocessing steps already applied to the scene will not be applied again, unless
205 * they show non-idempotent behaviour (#aiProcess_MakeLeftHanded, #aiProcess_FlipUVs and
206 * #aiProcess_FlipWindingOrder).
207 * @return AI_SUCCESS if everything was fine.
208 * @note Use aiCopyScene() to get a modifiable copy of a previously
209 * imported scene.*/
199210 aiReturn Export( const aiScene* pScene, const char* pFormatId, const char* pPath, unsigned int pPreprocessing = 0u);
200211 inline aiReturn Export( const aiScene* pScene, const std::string& pFormatId, const std::string& pPath, unsigned int pPreprocessing = 0u);
201212
6060 * to the Importer. If you implement this interface, be sure to also provide an
6161 * implementation for IOSystem that creates instances of your custom IO class.
6262 */
63 class ASSIMP_API IOStream : public Intern::AllocateFromAssimpHeap
63 class ASSIMP_API IOStream
64 #ifndef SWIG
65 : public Intern::AllocateFromAssimpHeap
66 #endif
6467 {
6568 protected:
6669 /** Constructor protected, use IOSystem::Open() to create an instance. */
6363 * supply a custom implementation for IOStream.
6464 *
6565 * @see Importer::SetIOHandler() */
66 class ASSIMP_API IOSystem : public Intern::AllocateFromAssimpHeap
66 class ASSIMP_API IOSystem
67 #ifndef SWIG
68 : public Intern::AllocateFromAssimpHeap
69 #endif
6770 {
6871 public:
6972
230230 bool* bWasExisting = NULL);
231231
232232 // -------------------------------------------------------------------
233 /** Set a matrix configuration property.
234 * @see SetPropertyInteger()
235 */
236 void SetPropertyMatrix(const char* szName, const aiMatrix4x4& sValue,
237 bool* bWasExisting = NULL);
238
239 // -------------------------------------------------------------------
233240 /** Get a configuration property.
234241 * @param szName Name of the property. All supported properties
235242 * are defined in the aiConfig.g header (all constants share the
269276 * The return value remains valid until the property is modified.
270277 * @see GetPropertyInteger()
271278 */
272 const std::string& GetPropertyString(const char* szName,
279 const std::string GetPropertyString(const char* szName,
273280 const std::string& sErrorReturn = "") const;
281
282 // -------------------------------------------------------------------
283 /** Get a matrix configuration property
284 *
285 * The return value remains valid until the property is modified.
286 * @see GetPropertyInteger()
287 */
288 const aiMatrix4x4 GetPropertyMatrix(const char* szName,
289 const aiMatrix4x4& sErrorReturn = aiMatrix4x4()) const;
274290
275291 // -------------------------------------------------------------------
276292 /** Supplies a custom IO handler to the importer to use to open and
408424 * instance. Use GetOrphanedScene() to take ownership of it.
409425 *
410426 * @note This is a straightforward way to decode models from memory
411 * buffers, but it doesn't handle model formats spreading their
427 * buffers, but it doesn't handle model formats that spread their
412428 * data across multiple files or even directories. Examples include
413 * OBJ or MD3, which outsource parts of their material stuff into
414 * external scripts. If you need the full functionality, provide
415 * a custom IOSystem to make Assimp find these files.
429 * OBJ or MD3, which outsource parts of their material info into
430 * external scripts. If you need full functionality, provide
431 * a custom IOSystem to make Assimp find these files and use
432 * the regular ReadFile() API.
416433 */
417434 const aiScene* ReadFileFromMemory(
418435 const void* pBuffer,
5252 * Several default implementations are provided, see #aiDefaultLogStream for more
5353 * details. Writing your own implementation of LogStream is just necessary if these
5454 * are not enough for your purpose. */
55 class ASSIMP_API LogStream
56 : public Intern::AllocateFromAssimpHeap {
55 class ASSIMP_API LogStream
56 #ifndef SWIG
57 : public Intern::AllocateFromAssimpHeap
58 #endif
59 {
5760 protected:
5861 /** @brief Default constructor */
5962 LogStream() {
5555 * Assimp provides a default implementation and uses it for almost all
5656 * logging stuff ('DefaultLogger'). This class defines just basic logging
5757 * behaviour and is not of interest for you. Instead, take a look at #DefaultLogger. */
58 class ASSIMP_API Logger
59 : public Intern::AllocateFromAssimpHeap {
58 class ASSIMP_API Logger
59 #ifndef SWIG
60 : public Intern::AllocateFromAssimpHeap
61 #endif
62 {
6063 public:
6164
6265 // ----------------------------------------------------------------------
5050 *
5151 * Each #Importer instance maintains its own #ProgressHandler. The default
5252 * implementation provided by Assimp doesn't do anything at all. */
53 class ASSIMP_API ProgressHandler
54 : public Intern::AllocateFromAssimpHeap {
53 class ASSIMP_API ProgressHandler
54 #ifndef SWIG
55 : public Intern::AllocateFromAssimpHeap
56 #endif
57 {
5558 protected:
5659 /** @brief Default constructor */
5760 ProgressHandler () {
22 #ifndef AI_DEBUG_H_INC
33 #define AI_DEBUG_H_INC
44
5 #ifdef _DEBUG
5 #ifdef ASSIMP_BUILD_DEBUG
66 # include <assert.h>
77 # define ai_assert(expression) assert(expression)
88 #else
207207 /** This value is not used, it is just here to force the
208208 * the compiler to map this enum to a 32 Bit integer */
209209 #ifndef SWIG
210 _aiAnimBehaviour_Force32Bit = 0x8fffffff
210 _aiAnimBehaviour_Force32Bit = INT_MAX
211211 #endif
212212 };
213213
456456
457457 template <>
458458 struct Interpolator <aiQuatKey> {
459 void operator () (aiQuaternion& out, const aiQuatKey a,
459 void operator () (aiQuaternion& out, const aiQuatKey& a,
460460 const aiQuatKey& b, float d) const
461461 {
462462 Interpolator<aiQuaternion> ipl;
466466
467467 template <>
468468 struct Interpolator <aiMeshKey> {
469 void operator () (unsigned int& out, const aiMeshKey a,
469 void operator () (unsigned int& out, const aiMeshKey& a,
470470 const aiMeshKey& b, float d) const
471471 {
472472 Interpolator<unsigned int> ipl;
9494
9595
9696 // --------------------------------------------------------------------------------
97 /** Create a modifyable copy of a scene.
97 /** Create a modifiable copy of a scene.
9898 * This is useful to import files via Assimp, change their topology and
9999 * export them again. Since the scene returned by the various importer functions
100 * is const, a modifyable copy is needed.
100 * is const, a modifiable copy is needed.
101101 * @param pIn Valid scene to be copied
102 * @param pOut Receives a modifyable copy of the scene.
102 * @param pOut Receives a modifyable copy of the scene. Use aiFreeScene() to
103 * delete it again.
103104 */
104105 ASSIMP_API void aiCopyScene(const C_STRUCT aiScene* pIn,
105106 C_STRUCT aiScene** pOut);
107
108
109 // --------------------------------------------------------------------------------
110 /** Frees a scene copy created using aiCopyScene() */
111 ASSIMP_API void aiFreeScene(const C_STRUCT aiScene* pIn);
106112
107113 // --------------------------------------------------------------------------------
108114 /** Exports the given scene to a chosen file format and writes the result file(s) to disk.
136142 * is triangulation - whilst you can enforce it by specifying
137143 * the #aiProcess_Triangulate flag, most export formats support only
138144 * triangulate data so they would run the step anyway.
145 *
146 * If assimp detects that the input scene was directly taken from the importer side of
147 * the library (i.e. not copied using aiCopyScene and potetially modified afterwards),
148 * any postprocessing steps already applied to the scene will not be applied again, unless
149 * they show non-idempotent behaviour (#aiProcess_MakeLeftHanded, #aiProcess_FlipUVs and
150 * #aiProcess_FlipWindingOrder).
139151 * @return a status code indicating the result of the export
152 * @note Use aiCopyScene() to get a modifiable copy of a previously
153 * imported scene.
140154 */
141155 ASSIMP_API aiReturn aiExportScene( const C_STRUCT aiScene* pScene,
142156 const char* pFormatId,
156170 * @param pPreprocessing Please see the documentation for #aiExportScene
157171 * @return a status code indicating the result of the export
158172 * @note Include <aiFileIO.h> for the definition of #aiFileIO.
173 * @note Use aiCopyScene() to get a modifiable copy of a previously
174 * imported scene.
159175 */
160176 ASSIMP_API aiReturn aiExportSceneEx( const C_STRUCT aiScene* pScene,
161177 const char* pFormatId,
194210 extension that should be used when writing
195211 the data to disc.
196212 */
197 aiString name;
213 C_STRUCT aiString name;
198214
199215 /** Pointer to the next blob in the chain or NULL if there is none. */
200 aiExportDataBlob * next;
216 C_STRUCT aiExportDataBlob * next;
201217
202218 #ifdef __cplusplus
203219 /// Default constructor
230246 * returned by aiExportScene().
231247 * @param pData the data blob returned by #aiExportSceneToBlob
232248 */
233 ASSIMP_API C_STRUCT void aiReleaseExportBlob( const C_STRUCT aiExportDataBlob* pData );
249 ASSIMP_API void aiReleaseExportBlob( const C_STRUCT aiExportDataBlob* pData );
234250
235251 #ifdef __cplusplus
236252 }
7878 * @see aiSetPropertyInteger
7979 * @see aiSetPropertyFloat
8080 * @see aiSetPropertyString
81 * @see aiSetPropertyMatrix
8182 */
8283 // --------------------------------------------------------------------------------
8384 struct aiPropertyStore { char sentinel; };
169170 * Check the return value, and you'll know ...
170171 * @return A pointer to the imported data, NULL if the import failed.
171172 *
172 * @note This is a straightforward way to decode models from memory buffers, but it
173 * doesn't handle model formats spreading their data across multiple files or even
174 * directories. Examples include OBJ or MD3, which outsource parts of their material
175 * stuff into external scripts. If you need the full functionality, provide a custom
176 * IOSystem to make Assimp find these files.
173 * @note This is a straightforward way to decode models from memory
174 * buffers, but it doesn't handle model formats that spread their
175 * data across multiple files or even directories. Examples include
176 * OBJ or MD3, which outsource parts of their material info into
177 * external scripts. If you need full functionality, provide
178 * a custom IOSystem to make Assimp find these files and use
179 * the regular aiImportFileEx()/aiImportFileExWithProperties() API.
177180 */
178181 ASSIMP_API const C_STRUCT aiScene* aiImportFileFromMemory(
179182 const char* pBuffer,
395398 const C_STRUCT aiString* st);
396399
397400 // --------------------------------------------------------------------------------
401 /** Set a matrix property.
402 *
403 * This is the C-version of #Assimp::Importer::SetPropertyMatrix(). In the C
404 * interface, properties are always shared by all imports. It is not possible to
405 * specify them per import.
406 *
407 * @param property store to modify. Use #aiCreatePropertyStore to obtain a store.
408 * @param szName Name of the configuration property to be set. All supported
409 * public properties are defined in the config.h header file (#AI_CONFIG_XXX).
410 * @param value New value for the property
411 */
412 ASSIMP_API void aiSetImportPropertyMatrix(
413 C_STRUCT aiPropertyStore* store,
414 const char* szName,
415 const C_STRUCT aiMatrix4x4* mat);
416
417 // --------------------------------------------------------------------------------
398418 /** Construct a quaternion from a 3x3 rotation matrix.
399419 * @param quat Receives the output quaternion.
400420 * @param mat Matrix to 'quaternionize'.
7373 // comparison
7474 bool operator == (const aiColor4t& other) const;
7575 bool operator != (const aiColor4t& other) const;
76 bool operator < (const aiColor4t& other) const;
7677
7778 // color tuple access, rgba order
7879 inline TReal operator[](unsigned int i) const;
9393 }
9494 // ------------------------------------------------------------------------------------------------
9595 template <typename TReal>
96 AI_FORCE_INLINE bool aiColor4t<TReal>::operator< (const aiColor4t<TReal>& other) const {
97 return r < other.r || (
98 r == other.r && (
99 g < other.g || (
100 g == other.g && (
101 b < other.b || (
102 b == other.b && (
103 a < other.a
104 )
105 )
106 )
107 )
108 )
109 );
110 }
111 // ------------------------------------------------------------------------------------------------
112 template <typename TReal>
96113 AI_FORCE_INLINE aiColor4t<TReal> operator + (const aiColor4t<TReal>& v1, const aiColor4t<TReal>& v2) {
97114 return aiColor4t<TReal>( v1.r + v2.r, v1.g + v2.g, v1.b + v2.b, v1.a + v2.a);
98115 }
7676 #define AI_CONFIG_GLOB_MEASURE_TIME \
7777 "GLOB_MEASURE_TIME"
7878
79
80 // ---------------------------------------------------------------------------
81 /** @brief Global setting to disable generation of skeleton dummy meshes
82 *
83 * Skeleton dummy meshes are generated as a visualization aid in cases which
84 * the input data contains no geometry, but only animation data.
85 * Property data type: bool. Default value: false
86 */
87 // ---------------------------------------------------------------------------
88 #define AI_CONFIG_IMPORT_NO_SKELETON_MESHES \
89 "IMPORT_NO_SKELETON_MESHES"
90
91
92
7993 # if 0 // not implemented yet
8094 // ---------------------------------------------------------------------------
8195 /** @brief Set Assimp's multithreading policy.
156170 */
157171 #define AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE \
158172 "PP_GSN_MAX_SMOOTHING_ANGLE"
173
159174
160175 // ---------------------------------------------------------------------------
161176 /** @brief Sets the colormap (= palette) to be used to decode embedded
218233 "PP_PTV_NORMALIZE"
219234
220235 // ---------------------------------------------------------------------------
236 /** @brief Configures the #aiProcess_PretransformVertices step to use
237 * a users defined matrix as the scene root node transformation before
238 * transforming vertices.
239 * Property type: bool. Default value: false.
240 */
241 #define AI_CONFIG_PP_PTV_ADD_ROOT_TRANSFORMATION \
242 "PP_PTV_ADD_ROOT_TRANSFORMATION"
243
244 // ---------------------------------------------------------------------------
245 /** @brief Configures the #aiProcess_PretransformVertices step to use
246 * a users defined matrix as the scene root node transformation before
247 * transforming vertices. This property correspond to the 'a1' component
248 * of the transformation matrix.
249 * Property type: aiMatrix4x4.
250 */
251 #define AI_CONFIG_PP_PTV_ROOT_TRANSFORMATION \
252 "PP_PTV_ROOT_TRANSFORMATION"
253
254 // ---------------------------------------------------------------------------
221255 /** @brief Configures the #aiProcess_FindDegenerates step to
222256 * remove degenerated primitives from the import - immediately.
223257 *
387421 * use the #aiProcess_OptimizeGraph step to do this */
388422 aiComponent_LIGHTS = 0x100,
389423
390 /** Removes all light sources (aiScene::mCameras).
424 /** Removes all cameras (aiScene::mCameras).
391425 * The corresponding scenegraph nodes are NOT removed.
392426 * use the #aiProcess_OptimizeGraph step to do this */
393427 aiComponent_CAMERAS = 0x200,
493527 // IMPORTER SETTINGS
494528 // Various stuff to fine-tune the behaviour of specific importer plugins.
495529 // ###########################################################################
530
531
532 // ---------------------------------------------------------------------------
533 /** @brief Set whether the fbx importer will merge all geometry layers present
534 * in the source file or take only the first.
535 *
536 * The default value is true (1)
537 * Property type: bool
538 */
539 #define AI_CONFIG_IMPORT_FBX_READ_ALL_GEOMETRY_LAYERS \
540 "IMPORT_FBX_READ_ALL_GEOMETRY_LAYERS"
541
542 // ---------------------------------------------------------------------------
543 /** @brief Set whether the fbx importer will read all materials present in the
544 * source file or take only the referenced materials.
545 *
546 * This is void unless IMPORT_FBX_READ_MATERIALS=1.
547 *
548 * The default value is false (0)
549 * Property type: bool
550 */
551 #define AI_CONFIG_IMPORT_FBX_READ_ALL_MATERIALS \
552 "IMPORT_FBX_READ_ALL_MATERIALS"
553
554 // ---------------------------------------------------------------------------
555 /** @brief Set whether the fbx importer will read materials.
556 *
557 * The default value is true (1)
558 * Property type: bool
559 */
560 #define AI_CONFIG_IMPORT_FBX_READ_MATERIALS \
561 "IMPORT_FBX_READ_MATERIALS"
562
563 // ---------------------------------------------------------------------------
564 /** @brief Set whether the fbx importer will read cameras.
565 *
566 * The default value is true (1)
567 * Property type: bool
568 */
569 #define AI_CONFIG_IMPORT_FBX_READ_CAMERAS \
570 "IMPORT_FBX_READ_CAMERAS"
571
572 // ---------------------------------------------------------------------------
573 /** @brief Set whether the fbx importer will read light sources.
574 *
575 * The default value is true (1)
576 * Property type: bool
577 */
578 #define AI_CONFIG_IMPORT_FBX_READ_LIGHTS \
579 "IMPORT_FBX_READ_LIGHTS"
580
581 // ---------------------------------------------------------------------------
582 /** @brief Set whether the fbx importer will read animations.
583 *
584 * The default value is true (1)
585 * Property type: bool
586 */
587 #define AI_CONFIG_IMPORT_FBX_READ_ANIMATIONS \
588 "IMPORT_FBX_READ_ANIMATIONS"
589
590 // ---------------------------------------------------------------------------
591 /** @brief Set whether the fbx importer will act in strict mode in which only
592 * FBX 2013 is supported and any other sub formats are rejected. FBX 2013
593 * is the primary target for the importer, so this format is best
594 * supported and well-tested.
595 *
596 * The default value is false (0)
597 * Property type: bool
598 */
599 #define AI_CONFIG_IMPORT_FBX_STRICT_MODE \
600 "IMPORT_FBX_STRICT_MODE"
601
602 // ---------------------------------------------------------------------------
603 /** @brief Set whether the fbx importer will preserve pivot points for
604 * transformations (as extra nodes). If set to false, pivots and offsets
605 * will be evaluated whenever possible.
606 *
607 * The default value is true (1)
608 * Property type: bool
609 */
610 #define AI_CONFIG_IMPORT_FBX_PRESERVE_PIVOTS \
611 "IMPORT_FBX_PRESERVE_PIVOTS"
612
613 // ---------------------------------------------------------------------------
614 /** @brief Specifies whether the importer will drop empty animation curves or
615 * animation curves which match the bind pose transformation over their
616 * entire defined range.
617 *
618 * The default value is true (1)
619 * Property type: bool
620 */
621 #define AI_CONFIG_IMPORT_FBX_OPTIMIZE_EMPTY_ANIMATION_CURVES \
622 "IMPORT_FBX_OPTIMIZE_EMPTY_ANIMATION_CURVES"
623
496624
497625
498626 // ---------------------------------------------------------------------------
672800 #define AI_CONFIG_IMPORT_IRR_ANIM_FPS \
673801 "IMPORT_IRR_ANIM_FPS"
674802
675
676 // ---------------------------------------------------------------------------
677 /** @brief Ogre Importer will try to load this Materialfile.
678 *
679 * Ogre Meshes contain only the MaterialName, not the MaterialFile. If there
680 * is no material file with the same name as the material, Ogre Importer will
681 * try to load this file and search the material in it.
803 // ---------------------------------------------------------------------------
804 /** @brief Ogre Importer will try to find referenced materials from this file.
805 *
806 * Ogre meshes reference with material names, this does not tell Assimp the file
807 * where it is located in. Assimp will try to find the source file in the following
808 * order: <material-name>.material, <mesh-filename-base>.material and
809 * lastly the material name defined by this config property.
682810 * <br>
683 * Property type: String. Default value: guessed.
684 */
685 #define AI_CONFIG_IMPORT_OGRE_MATERIAL_FILE "IMPORT_OGRE_MATERIAL_FILE"
686
687
688 // ---------------------------------------------------------------------------
689 /** @brief Ogre Importer detect the texture usage from its filename
690 *
691 * Normally, a texture is loaded as a colormap, if no target is specified in the
692 * materialfile. Is this switch is enabled, texture names ending with _n, _l, _s
693 * are used as normalmaps, lightmaps or specularmaps.
811 * Property type: String. Default value: Scene.material.
812 */
813 #define AI_CONFIG_IMPORT_OGRE_MATERIAL_FILE \
814 "IMPORT_OGRE_MATERIAL_FILE"
815
816 // ---------------------------------------------------------------------------
817 /** @brief Ogre Importer detect the texture usage from its filename.
818 *
819 * Ogre material texture units do not define texture type, the textures usage
820 * depends on the used shader or Ogres fixed pipeline. If this config property
821 * is true Assimp will try to detect the type from the textures filename postfix:
822 * _n, _nrm, _nrml, _normal, _normals and _normalmap for normal map, _s, _spec,
823 * _specular and _specularmap for specular map, _l, _light, _lightmap, _occ
824 * and _occlusion for light map, _disp and _displacement for displacement map.
825 * The matching is case insensitive. Post fix is taken between last "_" and last ".".
826 * Default behavior is to detect type from lower cased texture unit name by
827 * matching against: normalmap, specularmap, lightmap and displacementmap.
828 * For both cases if no match is found aiTextureType_DIFFUSE is used.
694829 * <br>
695830 * Property type: Bool. Default value: false.
696831 */
697 #define AI_CONFIG_IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME "IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME"
698
699
700
701 // ---------------------------------------------------------------------------
832 #define AI_CONFIG_IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME \
833 "IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME"
834
702835 /** @brief Specifies whether the IFC loader skips over IfcSpace elements.
703836 *
704837 * IfcSpace elements (and their geometric representations) are used to
734867 */
735868 #define AI_CONFIG_IMPORT_IFC_CUSTOM_TRIANGULATION "IMPORT_IFC_CUSTOM_TRIANGULATION"
736869
870 #define AI_CONFIG_IMPORT_COLLADA_IGNORE_UP_DIRECTION "IMPORT_COLLADA_IGNORE_UP_DIRECTION"
871
737872 #endif // !! AI_CONFIG_H_INC
5959 *
6060 * Other (mixed) configuration switches are listed here:
6161 * ASSIMP_BUILD_NO_COMPRESSED_X
62 * - Disable support for compressed X files
62 * - Disable support for compressed X files (zip)
6363 * ASSIMP_BUILD_NO_COMPRESSED_BLEND
64 * - Disable support for compressed Blender files*/
64 * - Disable support for compressed Blender files (zip)
65 * ASSIMP_BUILD_NO_COMPRESSED_IFC
66 * - Disable support for IFCZIP files (unzip)
67 */
6568 //////////////////////////////////////////////////////////////////////////
6669
6770 #ifndef ASSIMP_BUILD_NO_COMPRESSED_X
7073
7174 #ifndef ASSIMP_BUILD_NO_COMPRESSED_BLEND
7275 # define ASSIMP_BUILD_NEED_Z_INFLATE
76 #endif
77
78 #ifndef ASSIMP_BUILD_NO_COMPRESSED_IFC
79 # define ASSIMP_BUILD_NEED_Z_INFLATE
80 # define ASSIMP_BUILD_NEED_UNZIP
81 #endif
82
83 #ifndef ASSIMP_BUILD_NO_Q3BSP_IMPORTER
84 # define ASSIMP_BUILD_NEED_Z_INFLATE
85 # define ASSIMP_BUILD_NEED_UNZIP
7386 #endif
7487
7588 //////////////////////////////////////////////////////////////////////////
134147 /* Tells the compiler that a function never returns. Used in code analysis
135148 * to skip dead paths (e.g. after an assertion evaluated to false). */
136149 # define AI_WONT_RETURN __declspec(noreturn)
150
151 #elif defined(SWIG)
152
153 /* Do nothing, the relevant defines are all in AssimpSwigPort.i */
154
137155 #else
138156
139157 # define AI_WONT_RETURN
142160 # define ASSIMP_API_WINONLY
143161 # define AI_FORCE_INLINE inline
144162 #endif // (defined _MSC_VER)
163
164 #ifdef __clang__
165 # define AI_WONT_RETURN_SUFFIX __attribute__((analyzer_noreturn))
166 #else
167 # define AI_WONT_RETURN_SUFFIX
168 #endif // (defined __clang__)
145169
146170 #ifdef __cplusplus
147171 /* No explicit 'struct' and 'enum' tags for C++, this keeps showing up
213237 # define ASSIMP_BUILD_SINGLETHREADED
214238 #endif
215239
216 #ifndef ASSIMP_BUILD_SINGLETHREADED
217 # define AI_C_THREADSAFE
218 #endif // !! ASSIMP_BUILD_SINGLETHREADED
219
220 #ifdef _DEBUG
240 #if defined(_DEBUG) || ! defined(NDEBUG)
221241 # define ASSIMP_BUILD_DEBUG
222242 #endif
223243
7979 * compiler to map this enum to a 32 Bit integer.
8080 */
8181 #ifndef SWIG
82 _aiLightSource_Force32Bit = 0x9fffffff
82 _aiLightSource_Force32Bit = INT_MAX
8383 #endif
8484 };
8585
9999 * 32 Bit integers to represent this enum.
100100 */
101101 #ifndef SWIG
102 _aiTextureOp_Force32Bit = 0x9fffffff
102 _aiTextureOp_Force32Bit = INT_MAX
103103 #endif
104104 //! @endcond
105105 };
135135 * 32 Bit integers to represent this enum.
136136 */
137137 #ifndef SWIG
138 _aiTextureMapMode_Force32Bit = 0x9fffffff
138 _aiTextureMapMode_Force32Bit = INT_MAX
139139 #endif
140140 //! @endcond
141141 };
180180 * 32 Bit integers to represent this enum.
181181 */
182182 #ifndef SWIG
183 _aiTextureMapping_Force32Bit = 0x9fffffff
183 _aiTextureMapping_Force32Bit = INT_MAX
184184 #endif
185185 //! @endcond
186186 };
300300 * 32 Bit integers to represent this enum.
301301 */
302302 #ifndef SWIG
303 _aiTextureType_Force32Bit = 0x9fffffff
303 _aiTextureType_Force32Bit = INT_MAX
304304 #endif
305305 //! @endcond
306306 };
378378 * 32 Bit integers to represent this enum.
379379 */
380380 #ifndef SWIG
381 _aiShadingMode_Force32Bit = 0x9fffffff
381 _aiShadingMode_Force32Bit = INT_MAX
382382 #endif
383383 //! @endcond
384384 };
424424 * 32 Bit integers to represent this enum.
425425 */
426426 #ifndef SWIG
427 _aiTextureFlags_Force32Bit = 0x9fffffff
427 _aiTextureFlags_Force32Bit = INT_MAX
428428 #endif
429429 //! @endcond
430430 };
473473 * 32 Bit integers to represent this enum.
474474 */
475475 #ifndef SWIG
476 _aiBlendMode_Force32Bit = 0x9fffffff
476 _aiBlendMode_Force32Bit = INT_MAX
477477 #endif
478478 //! @endcond
479479 };
567567 * compiler to map this enum to a 32 Bit integer.
568568 */
569569 #ifndef SWIG
570 _aiPTI_Force32Bit = 0x9fffffff
570 _aiPTI_Force32Bit = INT_MAX
571571 #endif
572572 };
573573
630630
631631 #ifdef __cplusplus
632632
633 aiMaterialProperty() {
634 mData = NULL;
635 mIndex = mSemantic = 0;
633 aiMaterialProperty()
634 : mSemantic( 0 )
635 , mIndex( 0 )
636 , mDataLength( 0 )
637 , mType( aiPTI_Float )
638 , mData( NULL )
639 {
636640 }
637641
638642 ~aiMaterialProperty() {
656660 * have to stick with the aiMaterialGetXXX family of unbound functions.
657661 * The library defines a set of standard keys (AI_MATKEY_XXX).
658662 */
663 #ifdef __cplusplus
659664 struct ASSIMP_API aiMaterial
665 #else
666 struct aiMaterial
667 #endif
660668 {
661669
662670 #ifdef __cplusplus
682690 aiReturn Get(const char* pKey,unsigned int type,
683691 unsigned int idx, Type* pOut, unsigned int* pMax) const;
684692
693 aiReturn Get(const char* pKey,unsigned int type,
694 unsigned int idx, int* pOut, unsigned int* pMax) const;
695
696 aiReturn Get(const char* pKey,unsigned int type,
697 unsigned int idx, float* pOut, unsigned int* pMax) const;
698
685699 // -------------------------------------------------------------------
686700 /** @brief Retrieve a Type value with a specific key
687701 * from the material
695709 template <typename Type>
696710 aiReturn Get(const char* pKey,unsigned int type,
697711 unsigned int idx,Type& pOut) const;
712
713
714 aiReturn Get(const char* pKey,unsigned int type,
715 unsigned int idx, int& pOut) const;
716
717 aiReturn Get(const char* pKey,unsigned int type,
718 unsigned int idx, float& pOut) const;
719
720 aiReturn Get(const char* pKey,unsigned int type,
721 unsigned int idx, aiString& pOut) const;
722
723 aiReturn Get(const char* pKey,unsigned int type,
724 unsigned int idx, aiColor3D& pOut) const;
725
726 aiReturn Get(const char* pKey,unsigned int type,
727 unsigned int idx, aiColor4D& pOut) const;
728
729 aiReturn Get(const char* pKey,unsigned int type,
730 unsigned int idx, aiUVTransform& pOut) const;
698731
699732 // -------------------------------------------------------------------
700733 /** Get the number of textures for a particular texture type.
788821 unsigned int type = 0,
789822 unsigned int index = 0);
790823
824 aiReturn AddProperty (const aiVector3D* pInput,
825 unsigned int pNumValues,
826 const char* pKey,
827 unsigned int type = 0,
828 unsigned int index = 0);
829
830 aiReturn AddProperty (const aiColor3D* pInput,
831 unsigned int pNumValues,
832 const char* pKey,
833 unsigned int type = 0,
834 unsigned int index = 0);
835
836 aiReturn AddProperty (const aiColor4D* pInput,
837 unsigned int pNumValues,
838 const char* pKey,
839 unsigned int type = 0,
840 unsigned int index = 0);
841
842 aiReturn AddProperty (const int* pInput,
843 unsigned int pNumValues,
844 const char* pKey,
845 unsigned int type = 0,
846 unsigned int index = 0);
847
848 aiReturn AddProperty (const float* pInput,
849 unsigned int pNumValues,
850 const char* pKey,
851 unsigned int type = 0,
852 unsigned int index = 0);
853
854 aiReturn AddProperty (const aiUVTransform* pInput,
855 unsigned int pNumValues,
856 const char* pKey,
857 unsigned int type = 0,
858 unsigned int index = 0);
859
791860 // ------------------------------------------------------------------------------
792861 /** @brief Remove a given key from the list.
793862 *
14011470 unsigned int type,
14021471 unsigned int index,
14031472 C_STRUCT aiColor4D* pOut);
1473
1474
1475 // ---------------------------------------------------------------------------
1476 /** @brief Retrieve a aiUVTransform value from the material property table
1477 *
1478 * See the sample for aiGetMaterialFloat for more information*/
1479 // ---------------------------------------------------------------------------
1480 ASSIMP_API C_ENUM aiReturn aiGetMaterialUVTransform(const C_STRUCT aiMaterial* pMat,
1481 const char* pKey,
1482 unsigned int type,
1483 unsigned int index,
1484 C_STRUCT aiUVTransform* pOut);
14041485
14051486
14061487 // ---------------------------------------------------------------------------
8888 }
8989
9090 iNum = std::min((size_t)iNum,prop->mDataLength / sizeof(Type));
91 memcpy(pOut,prop->mData,iNum * sizeof(Type));
91 ::memcpy(pOut,prop->mData,iNum * sizeof(Type));
9292 if (pMax) {
9393 *pMax = iNum;
9494 }
114114 return AI_FAILURE;
115115 }
116116
117 memcpy(&pOut,prop->mData,sizeof(Type));
117 ::memcpy(&pOut,prop->mData,sizeof(Type));
118118 }
119119 return ret;
120120 }
121121
122122 // ---------------------------------------------------------------------------
123 template <>
124 inline aiReturn aiMaterial::Get<float>(const char* pKey,unsigned int type,
123 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
125124 unsigned int idx,float* pOut,
126125 unsigned int* pMax) const
127126 {
128127 return ::aiGetMaterialFloatArray(this,pKey,type,idx,pOut,pMax);
129128 }
130129 // ---------------------------------------------------------------------------
131 template <>
132 inline aiReturn aiMaterial::Get<int>(const char* pKey,unsigned int type,
130 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
133131 unsigned int idx,int* pOut,
134132 unsigned int* pMax) const
135133 {
136134 return ::aiGetMaterialIntegerArray(this,pKey,type,idx,pOut,pMax);
137135 }
138136 // ---------------------------------------------------------------------------
139 template <>
140 inline aiReturn aiMaterial::Get<float>(const char* pKey,unsigned int type,
137 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
141138 unsigned int idx,float& pOut) const
142139 {
143140 return aiGetMaterialFloat(this,pKey,type,idx,&pOut);
144141 }
145142 // ---------------------------------------------------------------------------
146 template <>
147 inline aiReturn aiMaterial::Get<int>(const char* pKey,unsigned int type,
143 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
148144 unsigned int idx,int& pOut) const
149145 {
150146 return aiGetMaterialInteger(this,pKey,type,idx,&pOut);
151147 }
152148 // ---------------------------------------------------------------------------
153 template <>
154 inline aiReturn aiMaterial::Get<aiColor4D>(const char* pKey,unsigned int type,
149 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
155150 unsigned int idx,aiColor4D& pOut) const
156151 {
157152 return aiGetMaterialColor(this,pKey,type,idx,&pOut);
158153 }
159154 // ---------------------------------------------------------------------------
160 template <>
161 inline aiReturn aiMaterial::Get<aiColor3D>(const char* pKey,unsigned int type,
155 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
162156 unsigned int idx,aiColor3D& pOut) const
163157 {
164158 aiColor4D c;
167161 return ret;
168162 }
169163 // ---------------------------------------------------------------------------
170 template <>
171 inline aiReturn aiMaterial::Get<aiString>(const char* pKey,unsigned int type,
164 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
172165 unsigned int idx,aiString& pOut) const
173166 {
174167 return aiGetMaterialString(this,pKey,type,idx,&pOut);
175168 }
176
177
178 #ifndef ASSIMP_BUILD_NO_EXPORT
169 // ---------------------------------------------------------------------------
170 inline aiReturn aiMaterial::Get(const char* pKey,unsigned int type,
171 unsigned int idx,aiUVTransform& pOut) const
172 {
173 return aiGetMaterialUVTransform(this,pKey,type,idx,&pOut);
174 }
175
179176
180177 // ---------------------------------------------------------------------------
181178 template<class TYPE>
191188 }
192189
193190 // ---------------------------------------------------------------------------
194 template<>
195 inline aiReturn aiMaterial::AddProperty<float> (const float* pInput,
191 inline aiReturn aiMaterial::AddProperty(const float* pInput,
196192 const unsigned int pNumValues,
197193 const char* pKey,
198194 unsigned int type,
204200 }
205201
206202 // ---------------------------------------------------------------------------
207 template<>
208 inline aiReturn aiMaterial::AddProperty<aiUVTransform> (const aiUVTransform* pInput,
203 inline aiReturn aiMaterial::AddProperty(const aiUVTransform* pInput,
209204 const unsigned int pNumValues,
210205 const char* pKey,
211206 unsigned int type,
217212 }
218213
219214 // ---------------------------------------------------------------------------
220 template<>
221 inline aiReturn aiMaterial::AddProperty<aiColor4D> (const aiColor4D* pInput,
215 inline aiReturn aiMaterial::AddProperty(const aiColor4D* pInput,
222216 const unsigned int pNumValues,
223217 const char* pKey,
224218 unsigned int type,
230224 }
231225
232226 // ---------------------------------------------------------------------------
233 template<>
234 inline aiReturn aiMaterial::AddProperty<aiColor3D> (const aiColor3D* pInput,
227 inline aiReturn aiMaterial::AddProperty(const aiColor3D* pInput,
235228 const unsigned int pNumValues,
236229 const char* pKey,
237230 unsigned int type,
243236 }
244237
245238 // ---------------------------------------------------------------------------
246 template<>
247 inline aiReturn aiMaterial::AddProperty<aiVector3D> (const aiVector3D* pInput,
239 inline aiReturn aiMaterial::AddProperty(const aiVector3D* pInput,
248240 const unsigned int pNumValues,
249241 const char* pKey,
250242 unsigned int type,
256248 }
257249
258250 // ---------------------------------------------------------------------------
259 template<>
260 inline aiReturn aiMaterial::AddProperty<int> (const int* pInput,
251 inline aiReturn aiMaterial::AddProperty(const int* pInput,
261252 const unsigned int pNumValues,
262253 const char* pKey,
263254 unsigned int type,
268259 pKey,type,index,aiPTI_Integer);
269260 }
270261
271 #endif
262
263 // ---------------------------------------------------------------------------
264 // The template specializations below are for backwards compatibility.
265 // The recommended way to add material properties is using the non-template
266 // overloads.
267 // ---------------------------------------------------------------------------
268
269 // ---------------------------------------------------------------------------
270 template<>
271 inline aiReturn aiMaterial::AddProperty<float>(const float* pInput,
272 const unsigned int pNumValues,
273 const char* pKey,
274 unsigned int type,
275 unsigned int index)
276 {
277 return AddBinaryProperty((const void*)pInput,
278 pNumValues * sizeof(float),
279 pKey,type,index,aiPTI_Float);
280 }
281
282 // ---------------------------------------------------------------------------
283 template<>
284 inline aiReturn aiMaterial::AddProperty<aiUVTransform>(const aiUVTransform* pInput,
285 const unsigned int pNumValues,
286 const char* pKey,
287 unsigned int type,
288 unsigned int index)
289 {
290 return AddBinaryProperty((const void*)pInput,
291 pNumValues * sizeof(aiUVTransform),
292 pKey,type,index,aiPTI_Float);
293 }
294
295 // ---------------------------------------------------------------------------
296 template<>
297 inline aiReturn aiMaterial::AddProperty<aiColor4D>(const aiColor4D* pInput,
298 const unsigned int pNumValues,
299 const char* pKey,
300 unsigned int type,
301 unsigned int index)
302 {
303 return AddBinaryProperty((const void*)pInput,
304 pNumValues * sizeof(aiColor4D),
305 pKey,type,index,aiPTI_Float);
306 }
307
308 // ---------------------------------------------------------------------------
309 template<>
310 inline aiReturn aiMaterial::AddProperty<aiColor3D>(const aiColor3D* pInput,
311 const unsigned int pNumValues,
312 const char* pKey,
313 unsigned int type,
314 unsigned int index)
315 {
316 return AddBinaryProperty((const void*)pInput,
317 pNumValues * sizeof(aiColor3D),
318 pKey,type,index,aiPTI_Float);
319 }
320
321 // ---------------------------------------------------------------------------
322 template<>
323 inline aiReturn aiMaterial::AddProperty<aiVector3D>(const aiVector3D* pInput,
324 const unsigned int pNumValues,
325 const char* pKey,
326 unsigned int type,
327 unsigned int index)
328 {
329 return AddBinaryProperty((const void*)pInput,
330 pNumValues * sizeof(aiVector3D),
331 pKey,type,index,aiPTI_Float);
332 }
333
334 // ---------------------------------------------------------------------------
335 template<>
336 inline aiReturn aiMaterial::AddProperty<int>(const int* pInput,
337 const unsigned int pNumValues,
338 const char* pKey,
339 unsigned int type,
340 unsigned int index)
341 {
342 return AddBinaryProperty((const void*)pInput,
343 pNumValues * sizeof(int),
344 pKey,type,index,aiPTI_Integer);
345 }
272346
273347 //! @endcond
274348
8989 const TReal* operator[] (unsigned int p_iIndex) const;
9090
9191 // comparison operators
92 bool operator== (const aiMatrix4x4t<TReal> m) const;
93 bool operator!= (const aiMatrix4x4t<TReal> m) const;
92 bool operator== (const aiMatrix4x4t<TReal>& m) const;
93 bool operator!= (const aiMatrix4x4t<TReal>& m) const;
94
95 bool Equal(const aiMatrix4x4t<TReal>& m, TReal epsilon = 1e-6) const;
9496
9597 template <typename TOther>
9698 operator aiMatrix3x3t<TOther> () const;
4949
5050 #include "matrix4x4.h"
5151 #include <algorithm>
52 #include <cmath>
5253 #include <limits>
5354
5455 // ------------------------------------------------------------------------------------------------
112113
113114 // ------------------------------------------------------------------------------------------------
114115 template <typename TReal>
115 inline bool aiMatrix3x3t<TReal>::operator== (const aiMatrix4x4t<TReal> m) const
116 inline bool aiMatrix3x3t<TReal>::operator== (const aiMatrix4x4t<TReal>& m) const
116117 {
117118 return a1 == m.a1 && a2 == m.a2 && a3 == m.a3 &&
118119 b1 == m.b1 && b2 == m.b2 && b3 == m.b3 &&
121122
122123 // ------------------------------------------------------------------------------------------------
123124 template <typename TReal>
124 inline bool aiMatrix3x3t<TReal>::operator!= (const aiMatrix4x4t<TReal> m) const
125 inline bool aiMatrix3x3t<TReal>::operator!= (const aiMatrix4x4t<TReal>& m) const
125126 {
126127 return !(*this == m);
128 }
129
130 // ---------------------------------------------------------------------------
131 template<typename TReal>
132 inline bool aiMatrix3x3t<TReal>::Equal(const aiMatrix4x4t<TReal>& m, TReal epsilon) const {
133 return
134 std::abs(a1 - m.a1) <= epsilon &&
135 std::abs(a2 - m.a2) <= epsilon &&
136 std::abs(a3 - m.a3) <= epsilon &&
137 std::abs(b1 - m.b1) <= epsilon &&
138 std::abs(b2 - m.b2) <= epsilon &&
139 std::abs(b3 - m.b3) <= epsilon &&
140 std::abs(c1 - m.c1) <= epsilon &&
141 std::abs(c2 - m.c2) <= epsilon &&
142 std::abs(c3 - m.c3) <= epsilon;
127143 }
128144
129145 // ------------------------------------------------------------------------------------------------
7777
7878 /** construction from 3x3 matrix, remaining elements are set to identity */
7979 explicit aiMatrix4x4t( const aiMatrix3x3t<TReal>& m);
80
81 /** construction from position, rotation and scaling components
82 * @param scaling The scaling for the x,y,z axes
83 * @param rotation The rotation as a hamilton quaternion
84 * @param position The position for the x,y,z axes
85 */
86 aiMatrix4x4t(const aiVector3t<TReal>& scaling, const aiQuaterniont<TReal>& rotation,
87 const aiVector3t<TReal>& position);
8088
8189 public:
8290
8593 const TReal* operator[] (unsigned int p_iIndex) const;
8694
8795 // comparison operators
88 bool operator== (const aiMatrix4x4t m) const;
89 bool operator!= (const aiMatrix4x4t m) const;
96 bool operator== (const aiMatrix4x4t& m) const;
97 bool operator!= (const aiMatrix4x4t& m) const;
98
99 bool Equal(const aiMatrix4x4t& m, TReal epsilon = 1e-6) const;
90100
91101 // matrix multiplication.
92102 aiMatrix4x4t& operator *= (const aiMatrix4x4t& m);
66
77 All rights reserved.
88
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
1111 conditions are met:
1212
1313 * Redistributions of source code must retain the above
2424 derived from this software without specific prior
2525 written permission of the assimp team.
2626
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2929 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
3131 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
3333 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
3737 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3838 ---------------------------------------------------------------------------
3939 */
5151 #include "quaternion.h"
5252
5353 #include <algorithm>
54 #include <limits>
55 #include <math.h>
56
57 // ----------------------------------------------------------------------------------------
58 template <typename TReal>
59 aiMatrix4x4t<TReal> ::aiMatrix4x4t () :
60 a1(1.0f), a2(), a3(), a4(),
61 b1(), b2(1.0f), b3(), b4(),
54 #include <limits>
55
56 #ifdef __cplusplus
57 # include <cmath>
58 #else
59 # include <math.h>
60 #endif
61
62 // ----------------------------------------------------------------------------------------
63 template <typename TReal>
64 aiMatrix4x4t<TReal> ::aiMatrix4x4t () :
65 a1(1.0f), a2(), a3(), a4(),
66 b1(), b2(1.0f), b3(), b4(),
6267 c1(), c2(), c3(1.0f), c4(),
6368 d1(), d2(), d3(), d4(1.0f)
6469 {
7075 aiMatrix4x4t<TReal> ::aiMatrix4x4t (TReal _a1, TReal _a2, TReal _a3, TReal _a4,
7176 TReal _b1, TReal _b2, TReal _b3, TReal _b4,
7277 TReal _c1, TReal _c2, TReal _c3, TReal _c4,
73 TReal _d1, TReal _d2, TReal _d3, TReal _d4) :
74 a1(_a1), a2(_a2), a3(_a3), a4(_a4),
75 b1(_b1), b2(_b2), b3(_b3), b4(_b4),
78 TReal _d1, TReal _d2, TReal _d3, TReal _d4) :
79 a1(_a1), a2(_a2), a3(_a3), a4(_a4),
80 b1(_b1), b2(_b2), b3(_b3), b4(_b4),
7681 c1(_c1), c2(_c2), c3(_c3), c4(_c4),
7782 d1(_d1), d2(_d2), d3(_d3), d4(_d4)
7883 {
79
84
8085 }
8186
8287 // ------------------------------------------------------------------------------------------------
99104 b1 = m.b1; b2 = m.b2; b3 = m.b3; b4 = static_cast<TReal>(0.0);
100105 c1 = m.c1; c2 = m.c2; c3 = m.c3; c4 = static_cast<TReal>(0.0);
101106 d1 = static_cast<TReal>(0.0); d2 = static_cast<TReal>(0.0); d3 = static_cast<TReal>(0.0); d4 = static_cast<TReal>(1.0);
107 }
108
109 // ----------------------------------------------------------------------------------------
110 template <typename TReal>
111 inline aiMatrix4x4t<TReal>::aiMatrix4x4t (const aiVector3t<TReal>& scaling, const aiQuaterniont<TReal>& rotation, const aiVector3t<TReal>& position)
112 {
113 // build a 3x3 rotation matrix
114 aiMatrix3x3t<TReal> m = rotation.GetMatrix();
115
116 a1 = m.a1 * scaling.x;
117 a2 = m.a2 * scaling.x;
118 a3 = m.a3 * scaling.x;
119 a4 = position.x;
120
121 b1 = m.b1 * scaling.y;
122 b2 = m.b2 * scaling.y;
123 b3 = m.b3 * scaling.y;
124 b4 = position.y;
125
126 c1 = m.c1 * scaling.z;
127 c2 = m.c2 * scaling.z;
128 c3 = m.c3 * scaling.z;
129 c4= position.z;
130
131 d1 = static_cast<TReal>(0.0);
132 d2 = static_cast<TReal>(0.0);
133 d3 = static_cast<TReal>(0.0);
134 d4 = static_cast<TReal>(1.0);
102135 }
103136
104137 // ----------------------------------------------------------------------------------------
154187 template <typename TReal>
155188 inline TReal aiMatrix4x4t<TReal>::Determinant() const
156189 {
157 return a1*b2*c3*d4 - a1*b2*c4*d3 + a1*b3*c4*d2 - a1*b3*c2*d4
158 + a1*b4*c2*d3 - a1*b4*c3*d2 - a2*b3*c4*d1 + a2*b3*c1*d4
159 - a2*b4*c1*d3 + a2*b4*c3*d1 - a2*b1*c3*d4 + a2*b1*c4*d3
160 + a3*b4*c1*d2 - a3*b4*c2*d1 + a3*b1*c2*d4 - a3*b1*c4*d2
190 return a1*b2*c3*d4 - a1*b2*c4*d3 + a1*b3*c4*d2 - a1*b3*c2*d4
191 + a1*b4*c2*d3 - a1*b4*c3*d2 - a2*b3*c4*d1 + a2*b3*c1*d4
192 - a2*b4*c1*d3 + a2*b4*c3*d1 - a2*b1*c3*d4 + a2*b1*c4*d3
193 + a3*b4*c1*d2 - a3*b4*c2*d1 + a3*b1*c2*d4 - a3*b1*c4*d2
161194 + a3*b2*c4*d1 - a3*b2*c1*d4 - a4*b1*c2*d3 + a4*b1*c3*d2
162195 - a4*b2*c3*d1 + a4*b2*c1*d3 - a4*b3*c1*d2 + a4*b3*c2*d1;
163196 }
168201 {
169202 // Compute the reciprocal determinant
170203 const TReal det = Determinant();
171 if(det == static_cast<TReal>(0.0))
204 if(det == static_cast<TReal>(0.0))
172205 {
173206 // Matrix not invertible. Setting all elements to nan is not really
174207 // correct in a mathematical sense but it is easy to debug for the
201234 res.d1 = -invdet * (b1 * (c2 * d3 - c3 * d2) + b2 * (c3 * d1 - c1 * d3) + b3 * (c1 * d2 - c2 * d1));
202235 res.d2 = invdet * (a1 * (c2 * d3 - c3 * d2) + a2 * (c3 * d1 - c1 * d3) + a3 * (c1 * d2 - c2 * d1));
203236 res.d3 = -invdet * (a1 * (b2 * d3 - b3 * d2) + a2 * (b3 * d1 - b1 * d3) + a3 * (b1 * d2 - b2 * d1));
204 res.d4 = invdet * (a1 * (b2 * c3 - b3 * c2) + a2 * (b3 * c1 - b1 * c3) + a3 * (b1 * c2 - b2 * c1));
237 res.d4 = invdet * (a1 * (b2 * c3 - b3 * c2) + a2 * (b3 * c1 - b1 * c3) + a3 * (b1 * c2 - b2 * c1));
205238 *this = res;
206239
207240 return *this;
225258
226259 // ----------------------------------------------------------------------------------------
227260 template <typename TReal>
228 inline bool aiMatrix4x4t<TReal>::operator== (const aiMatrix4x4t<TReal> m) const
261 inline bool aiMatrix4x4t<TReal>::operator== (const aiMatrix4x4t<TReal>& m) const
229262 {
230263 return (a1 == m.a1 && a2 == m.a2 && a3 == m.a3 && a4 == m.a4 &&
231264 b1 == m.b1 && b2 == m.b2 && b3 == m.b3 && b4 == m.b4 &&
235268
236269 // ----------------------------------------------------------------------------------------
237270 template <typename TReal>
238 inline bool aiMatrix4x4t<TReal>::operator!= (const aiMatrix4x4t<TReal> m) const
271 inline bool aiMatrix4x4t<TReal>::operator!= (const aiMatrix4x4t<TReal>& m) const
239272 {
240273 return !(*this == m);
274 }
275
276 // ---------------------------------------------------------------------------
277 template<typename TReal>
278 inline bool aiMatrix4x4t<TReal>::Equal(const aiMatrix4x4t<TReal>& m, TReal epsilon) const {
279 return
280 std::abs(a1 - m.a1) <= epsilon &&
281 std::abs(a2 - m.a2) <= epsilon &&
282 std::abs(a3 - m.a3) <= epsilon &&
283 std::abs(a4 - m.a4) <= epsilon &&
284 std::abs(b1 - m.b1) <= epsilon &&
285 std::abs(b2 - m.b2) <= epsilon &&
286 std::abs(b3 - m.b3) <= epsilon &&
287 std::abs(b4 - m.b4) <= epsilon &&
288 std::abs(c1 - m.c1) <= epsilon &&
289 std::abs(c2 - m.c2) <= epsilon &&
290 std::abs(c3 - m.c3) <= epsilon &&
291 std::abs(c4 - m.c4) <= epsilon &&
292 std::abs(d1 - m.d1) <= epsilon &&
293 std::abs(d2 - m.d2) <= epsilon &&
294 std::abs(d3 - m.d3) <= epsilon &&
295 std::abs(d4 - m.d4) <= epsilon;
241296 }
242297
243298 // ----------------------------------------------------------------------------------------
367422 d1 <= epsilon && d1 >= -epsilon &&
368423 d2 <= epsilon && d2 >= -epsilon &&
369424 d3 <= epsilon && d3 >= -epsilon &&
370 a1 <= 1.f+epsilon && a1 >= 1.f-epsilon &&
371 b2 <= 1.f+epsilon && b2 >= 1.f-epsilon &&
372 c3 <= 1.f+epsilon && c3 >= 1.f-epsilon &&
425 a1 <= 1.f+epsilon && a1 >= 1.f-epsilon &&
426 b2 <= 1.f+epsilon && b2 >= 1.f-epsilon &&
427 c3 <= 1.f+epsilon && c3 >= 1.f-epsilon &&
373428 d4 <= 1.f+epsilon && d4 >= 1.f-epsilon);
374429 }
375430
471526 */
472527 // ----------------------------------------------------------------------------------------
473528 template <typename TReal>
474 inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::FromToMatrix(const aiVector3t<TReal>& from,
529 inline aiMatrix4x4t<TReal>& aiMatrix4x4t<TReal>::FromToMatrix(const aiVector3t<TReal>& from,
475530 const aiVector3t<TReal>& to, aiMatrix4x4t<TReal>& mtx)
476 {
531 {
477532 aiMatrix3x3t<TReal> m3;
478533 aiMatrix3x3t<TReal>::FromToMatrix(from,to,m3);
479534 mtx = aiMatrix4x4t<TReal>(m3);
134134
135135 //! Default constructor
136136 aiFace()
137 {
138 mNumIndices = 0; mIndices = NULL;
137 : mNumIndices( 0 )
138 , mIndices( NULL )
139 {
139140 }
140141
141142 //! Default destructor. Delete the index array
146147
147148 //! Copy constructor. Copy the index array
148149 aiFace( const aiFace& o)
149 {
150 mIndices = NULL;
150 : mIndices( NULL )
151 {
151152 *this = o;
152153 }
153154
154155 //! Assignment operator. Copy the index array
155 const aiFace& operator = ( const aiFace& o)
156 aiFace& operator = ( const aiFace& o)
156157 {
157158 if (&o == this)
158159 return *this;
159160
160161 delete[] mIndices;
161162 mNumIndices = o.mNumIndices;
162 mIndices = new unsigned int[mNumIndices];
163 ::memcpy( mIndices, o.mIndices, mNumIndices * sizeof( unsigned int));
163 if (mNumIndices) {
164 mIndices = new unsigned int[mNumIndices];
165 ::memcpy( mIndices, o.mIndices, mNumIndices * sizeof( unsigned int));
166 }
167 else {
168 mIndices = NULL;
169 }
164170 return *this;
165171 }
166172
242248
243249 //! Default constructor
244250 aiBone()
245 {
246 mNumWeights = 0; mWeights = NULL;
251 : mNumWeights( 0 )
252 , mWeights( NULL )
253 {
247254 }
248255
249256 //! Copy constructor
250257 aiBone(const aiBone& other)
251 {
252 mNumWeights = other.mNumWeights;
253 mOffsetMatrix = other.mOffsetMatrix;
254 mName = other.mName;
255
258 : mName( other.mName )
259 , mNumWeights( other.mNumWeights )
260 , mOffsetMatrix( other.mOffsetMatrix )
261 {
256262 if (other.mWeights && other.mNumWeights)
257263 {
258264 mWeights = new aiVertexWeight[mNumWeights];
313319 * compiler to map this enum to a 32 Bit integer.
314320 */
315321 #ifndef SWIG
316 _aiPrimitiveType_Force32Bit = 0x9fffffff
322 _aiPrimitiveType_Force32Bit = INT_MAX
317323 #endif
318324 }; //! enum aiPrimitiveType
319325
372378 #ifdef __cplusplus
373379
374380 aiAnimMesh()
375 : mVertices()
376 , mNormals()
377 , mTangents()
378 , mBitangents()
381 : mVertices( NULL )
382 , mNormals( NULL )
383 , mTangents( NULL )
384 , mBitangents( NULL )
385 , mNumVertices( 0 )
379386 {
380387 // fixme consider moving this to the ctor initializer list as well
381388 for( unsigned int a = 0; a < AI_MAX_NUMBER_OF_TEXTURECOORDS; a++){
603610
604611 //! Default constructor. Initializes all members to 0
605612 aiMesh()
606 {
607 mNumVertices = 0;
608 mNumFaces = 0;
609
610 mNumAnimMeshes = 0;
611
612 mPrimitiveTypes = 0;
613 mVertices = NULL; mFaces = NULL;
614 mNormals = NULL; mTangents = NULL;
615 mBitangents = NULL;
616 mAnimMeshes = NULL;
617
613 : mPrimitiveTypes( 0 )
614 , mNumVertices( 0 )
615 , mNumFaces( 0 )
616 , mVertices( NULL )
617 , mNormals( NULL )
618 , mTangents( NULL )
619 , mBitangents( NULL )
620 , mFaces( NULL )
621 , mNumBones( 0 )
622 , mBones( NULL )
623 , mMaterialIndex( 0 )
624 , mNumAnimMeshes( 0 )
625 , mAnimMeshes( NULL )
626 {
618627 for( unsigned int a = 0; a < AI_MAX_NUMBER_OF_TEXTURECOORDS; a++)
619628 {
620629 mNumUVComponents[a] = 0;
621630 mTextureCoords[a] = NULL;
622631 }
632
623633 for( unsigned int a = 0; a < AI_MAX_NUMBER_OF_COLOR_SETS; a++)
624634 mColors[a] = NULL;
625 mNumBones = 0; mBones = NULL;
626 mMaterialIndex = 0;
627 mNumAnimMeshes = 0;
628 mAnimMeshes = NULL;
629635 }
630636
631637 //! Deletes all storage allocated for the mesh
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (assimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /** @file metadata.h
42 * @brief Defines the data structures for holding node meta information.
43 */
44 #ifndef __AI_METADATA_H_INC__
45 #define __AI_METADATA_H_INC__
46
47 #include <assert.h>
48
49 #if defined(_MSC_VER) && (_MSC_VER <= 1500)
50 #include "Compiler/pstdint.h"
51 #else
52 #include <stdint.h>
53 #endif
54
55
56
57 // -------------------------------------------------------------------------------
58 /**
59 * Enum used to distinguish data types
60 */
61 // -------------------------------------------------------------------------------
62 typedef enum aiMetadataType
63 {
64 AI_BOOL = 0,
65 AI_INT = 1,
66 AI_UINT64 = 2,
67 AI_FLOAT = 3,
68 AI_AISTRING = 4,
69 AI_AIVECTOR3D = 5,
70
71 #ifndef SWIG
72 FORCE_32BIT = INT_MAX
73 #endif
74 } aiMetadataType;
75
76
77
78 // -------------------------------------------------------------------------------
79 /**
80 * Metadata entry
81 *
82 * The type field uniquely identifies the underlying type of the data field
83 */
84 // -------------------------------------------------------------------------------
85 struct aiMetadataEntry
86 {
87 aiMetadataType mType;
88 void* mData;
89 };
90
91
92
93 #ifdef __cplusplus
94
95 #include <string>
96
97
98
99 // -------------------------------------------------------------------------------
100 /**
101 * Helper functions to get the aiType enum entry for a type
102 */
103 // -------------------------------------------------------------------------------
104 inline aiMetadataType GetAiType( bool ) { return AI_BOOL; }
105 inline aiMetadataType GetAiType( int ) { return AI_INT; }
106 inline aiMetadataType GetAiType( uint64_t ) { return AI_UINT64; }
107 inline aiMetadataType GetAiType( float ) { return AI_FLOAT; }
108 inline aiMetadataType GetAiType( aiString ) { return AI_AISTRING; }
109 inline aiMetadataType GetAiType( aiVector3D ) { return AI_AIVECTOR3D; }
110
111
112
113 #endif
114
115
116
117 // -------------------------------------------------------------------------------
118 /**
119 * Container for holding metadata.
120 *
121 * Metadata is a key-value store using string keys and values.
122 */
123 // -------------------------------------------------------------------------------
124 struct aiMetadata
125 {
126 /** Length of the mKeys and mValues arrays, respectively */
127 unsigned int mNumProperties;
128
129 /** Arrays of keys, may not be NULL. Entries in this array may not be NULL as well. */
130 C_STRUCT aiString* mKeys;
131
132 /** Arrays of values, may not be NULL. Entries in this array may be NULL if the
133 * corresponding property key has no assigned value. */
134 C_STRUCT aiMetadataEntry* mValues;
135
136 #ifdef __cplusplus
137
138 /** Constructor */
139 aiMetadata()
140 // set all members to zero by default
141 : mNumProperties(0)
142 , mKeys(NULL)
143 , mValues(NULL)
144 {}
145
146
147 /** Destructor */
148 ~aiMetadata()
149 {
150 delete[] mKeys;
151 mKeys = NULL;
152 if (mValues)
153 {
154 // Delete each metadata entry
155 for (unsigned i=0; i<mNumProperties; ++i)
156 {
157 void* data = mValues[i].mData;
158 switch (mValues[i].mType)
159 {
160 case AI_BOOL:
161 delete static_cast<bool*>(data);
162 break;
163 case AI_INT:
164 delete static_cast<int*>(data);
165 break;
166 case AI_UINT64:
167 delete static_cast<uint64_t*>(data);
168 break;
169 case AI_FLOAT:
170 delete static_cast<float*>(data);
171 break;
172 case AI_AISTRING:
173 delete static_cast<aiString*>(data);
174 break;
175 case AI_AIVECTOR3D:
176 delete static_cast<aiVector3D*>(data);
177 break;
178 default:
179 assert(false);
180 break;
181 }
182 }
183
184 // Delete the metadata array
185 delete [] mValues;
186 mValues = NULL;
187 }
188 }
189
190
191
192 template<typename T>
193 inline void Set( unsigned index, const std::string& key, const T& value )
194 {
195 // In range assertion
196 assert(index < mNumProperties);
197
198 // Set metadata key
199 mKeys[index] = key;
200
201 // Set metadata type
202 mValues[index].mType = GetAiType(value);
203 // Copy the given value to the dynamic storage
204 mValues[index].mData = new T(value);
205 }
206
207 template<typename T>
208 inline bool Get( unsigned index, T& value )
209 {
210 // In range assertion
211 assert(index < mNumProperties);
212
213 // Return false if the output data type does
214 // not match the found value's data type
215 if ( GetAiType( value ) != mValues[ index ].mType ) {
216 return false;
217 }
218
219 // Otherwise, output the found value and
220 // return true
221 value = *static_cast<T*>(mValues[index].mData);
222 return true;
223 }
224
225 template<typename T>
226 inline bool Get( const aiString& key, T& value )
227 {
228 // Search for the given key
229 for (unsigned i=0; i<mNumProperties; ++i)
230 if (mKeys[i]==key)
231 return Get(i, value);
232 return false;
233 }
234
235 template<typename T>
236 inline bool Get( const std::string& key, T& value ) {
237 return Get(aiString(key), value);
238 }
239
240 #endif // __cplusplus
241
242 };
243
244 #endif // __AI_METADATA_H_INC__
245
246
5353 /** @enum aiPostProcessSteps
5454 * @brief Defines the flags for all possible post processing steps.
5555 *
56 * @see Importer::ReadFile
56 * @note Some steps are influenced by properties set on the Assimp::Importer itself
57 *
58 * @see Assimp::Importer::ReadFile()
59 * @see Assimp::Importer::SetPropertyInteger()
5760 * @see aiImportFile
5861 * @see aiImportFileEx
5962 */
6669 *
6770 * Does nothing if a mesh does not have normals. You might want this post
6871 * processing step to be executed if you plan to use tangent space calculations
69 * such as normal mapping applied to the meshes. There's a config setting,
72 * such as normal mapping applied to the meshes. There's an importer property,
7073 * <tt>#AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE</tt>, which allows you to specify
7174 * a maximum smoothing angle for the algorithm. However, usually you'll
7275 * want to leave it at the default value.
113116 * solution:
114117 * <ul>
115118 * <li>Specify both #aiProcess_Triangulate and #aiProcess_SortByPType </li>
116 * </li>Ignore all point and line meshes when you process assimp's output</li>
119 * <li>Ignore all point and line meshes when you process assimp's output</li>
117120 * </ul>
118121 */
119122 aiProcess_Triangulate = 0x8,
123126 * light sources, cameras, textures, vertex components).
124127 *
125128 * The components to be removed are specified in a separate
126 * configuration option, <tt>#AI_CONFIG_PP_RVC_FLAGS</tt>. This is quite useful
129 * importer property, <tt>#AI_CONFIG_PP_RVC_FLAGS</tt>. This is quite useful
127130 * if you don't need all parts of the output structure. Vertex colors
128131 * are rarely used today for example... Calling this step to remove unneeded
129132 * data from the pipeline as early as possible results in increased
166169 * they're usually already there.
167170 *
168171 * This flag may not be specified together with
169 * #aiProcess_GenNormals. There's a configuration option,
172 * #aiProcess_GenNormals. There's a importer property,
170173 * <tt>#AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE</tt> which allows you to specify
171174 * an angle maximum for the normal smoothing algorithm. Normals exceeding
172175 * this limit are not smoothed, resulting in a 'hard' seam between two faces.
186189 *
187190 * The split limits can (and should!) be set through the
188191 * <tt>#AI_CONFIG_PP_SLM_VERTEX_LIMIT</tt> and <tt>#AI_CONFIG_PP_SLM_TRIANGLE_LIMIT</tt>
189 * settings. The default values are <tt>#AI_SLM_DEFAULT_MAX_VERTICES</tt> and
192 * importer properties. The default values are <tt>#AI_SLM_DEFAULT_MAX_VERTICES</tt> and
190193 * <tt>#AI_SLM_DEFAULT_MAX_TRIANGLES</tt>.
191194 *
192195 * Note that splitting is generally a time-consuming task, but only if there's
223226 * important vertex weights are removed and the remaining vertex weights are
224227 * renormalized so that the weights still sum up to 1.
225228 * The default bone weight limit is 4 (defined as <tt>#AI_LMW_MAX_WEIGHTS</tt> in
226 * config.h), but you can use the <tt>#AI_CONFIG_PP_LBW_MAX_WEIGHTS</tt> setting to
227 * supply your own limit to the post processing step.
229 * config.h), but you can use the <tt>#AI_CONFIG_PP_LBW_MAX_WEIGHTS</tt> importer
230 * property to supply your own limit to the post processing step.
228231 *
229232 * If you intend to perform the skinning in hardware, this post processing
230233 * step might be of interest to you.
269272 * paper</a>).
270273 *
271274 * If you intend to render huge models in hardware, this step might
272 * be of interest to you. The <tt>#AI_CONFIG_PP_ICL_PTCACHE_SIZE</tt>config
273 * setting can be used to fine-tune the cache optimization.
275 * be of interest to you. The <tt>#AI_CONFIG_PP_ICL_PTCACHE_SIZE</tt>
276 * importer property can be used to fine-tune the cache optimization.
274277 */
275278 aiProcess_ImproveCacheLocality = 0x800,
276279
291294 * So, if you're passing additional information through the
292295 * content pipeline (probably using *magic* material names), don't
293296 * specify this flag. Alternatively take a look at the
294 * <tt>#AI_CONFIG_PP_RRM_EXCLUDE_LIST</tt> setting.
297 * <tt>#AI_CONFIG_PP_RRM_EXCLUDE_LIST</tt> importer property.
295298 */
296299 aiProcess_RemoveRedundantMaterials = 0x1000,
297300
317320 * returns, just one bit is set in aiMesh::mPrimitiveTypes. This is
318321 * especially useful for real-time rendering where point and line
319322 * primitives are often ignored or rendered separately.
320 * You can use the <tt>#AI_CONFIG_PP_SBP_REMOVE</tt> option to specify which
321 * primitive types you need. This can be used to easily exclude
322 * lines and points, which are rarely used, from the import.
323 * You can use the <tt>#AI_CONFIG_PP_SBP_REMOVE</tt> importer property to
324 * specify which primitive types you need. This can be used to easily
325 * exclude lines and points, which are rarely used, from the import.
323326 */
324327 aiProcess_SortByPType = 0x8000,
325328
335338 * <ul>
336339 * <li>Specify the #aiProcess_FindDegenerates flag.
337340 * </li>
338 * <li>Set the <tt>AI_CONFIG_PP_FD_REMOVE</tt> option to 1. This will
339 * cause the step to remove degenerate triangles from the import
340 * as soon as they're detected. They won't pass any further
341 * <li>Set the <tt>#AI_CONFIG_PP_FD_REMOVE</tt> importer property to
342 * 1. This will cause the step to remove degenerate triangles from the
343 * import as soon as they're detected. They won't pass any further
341344 * pipeline steps.
342345 * </li>
343346 * </ul>
348351 * <li>Specify the #aiProcess_SortByPType flag. This moves line and
349352 * point primitives to separate meshes.
350353 * </li>
351 * <li>Set the <tt>AI_CONFIG_PP_SBP_REMOVE</tt> option to
354 * <li>Set the <tt>#AI_CONFIG_PP_SBP_REMOVE</tt> importer property to
352355 * @code aiPrimitiveType_POINTS | aiPrimitiveType_LINES
353356 * @endcode to cause SortByPType to reject point
354357 * and line meshes from the scene.
445448 *
446449 * Node names can be lost during this step. If you use special 'tag nodes'
447450 * to pass additional information through your content pipeline, use the
448 * <tt>#AI_CONFIG_PP_OG_EXCLUDE_LIST</tt> setting to specify a list of node
449 * names you want to be kept. Nodes matching one of the names in this list won't
450 * be touched or modified.
451 * <tt>#AI_CONFIG_PP_OG_EXCLUDE_LIST</tt> importer property to specify a
452 * list of node names you want to be kept. Nodes matching one of the names
453 * in this list won't be touched or modified.
451454 *
452455 * Use this flag with caution. Most simple files will be collapsed to a
453456 * single node, so complex hierarchies are usually completely lost. This is not
619622 aiProcess_FindInstances | \
620623 aiProcess_ValidateDataStructure | \
621624 aiProcess_OptimizeMeshes | \
622 aiProcess_Debone | \
623625 0 )
624626
625627
627629 } // end of extern "C"
628630 #endif
629631
630 #endif // AI_POSTPROCESS_H_INC
632 #endif // AI_POSTPROCESS_H_INC
5454 class aiQuaterniont
5555 {
5656 public:
57 aiQuaterniont() : w(), x(), y(), z() {}
58 aiQuaterniont(TReal w, TReal x, TReal y, TReal z)
59 : w(w), x(x), y(y), z(z) {}
57 aiQuaterniont() : w(1.0), x(), y(), z() {}
58 aiQuaterniont(TReal pw, TReal px, TReal py, TReal pz)
59 : w(pw), x(px), y(py), z(pz) {}
6060
6161 /** Construct from rotation matrix. Result is undefined if the matrix is not orthonormal. */
6262 aiQuaterniont( const aiMatrix3x3t<TReal>& pRotMatrix);
7777
7878 bool operator== (const aiQuaterniont& o) const;
7979 bool operator!= (const aiQuaterniont& o) const;
80
81 bool Equal(const aiQuaterniont& o, TReal epsilon = 1e-6) const;
8082
8183 public:
8284
4747 #ifdef __cplusplus
4848 #include "quaternion.h"
4949
50 #include <cmath>
51
5052 // ---------------------------------------------------------------------------
5153 template<typename TReal>
5254 bool aiQuaterniont<TReal>::operator== (const aiQuaterniont& o) const
6163 return !(*this == o);
6264 }
6365
64
66 // ---------------------------------------------------------------------------
67 template<typename TReal>
68 inline bool aiQuaterniont<TReal>::Equal(const aiQuaterniont& o, TReal epsilon) const {
69 return
70 std::abs(x - o.x) <= epsilon &&
71 std::abs(y - o.y) <= epsilon &&
72 std::abs(z - o.z) <= epsilon &&
73 std::abs(w - o.w) <= epsilon;
74 }
6575
6676 // ---------------------------------------------------------------------------
6777 // Constructs a quaternion from a rotation matrix
6878 template<typename TReal>
6979 inline aiQuaterniont<TReal>::aiQuaterniont( const aiMatrix3x3t<TReal> &pRotMatrix)
7080 {
71 TReal t = 1 + pRotMatrix.a1 + pRotMatrix.b2 + pRotMatrix.c3;
81 TReal t = pRotMatrix.a1 + pRotMatrix.b2 + pRotMatrix.c3;
7282
7383 // large enough
74 if( t > static_cast<TReal>(0.001))
75 {
76 TReal s = sqrt( t) * static_cast<TReal>(2.0);
84 if( t > static_cast<TReal>(0))
85 {
86 TReal s = sqrt(1 + t) * static_cast<TReal>(2.0);
7787 x = (pRotMatrix.c2 - pRotMatrix.b3) / s;
7888 y = (pRotMatrix.a3 - pRotMatrix.c1) / s;
7989 z = (pRotMatrix.b1 - pRotMatrix.a2) / s;
5151 #include "camera.h"
5252 #include "material.h"
5353 #include "anim.h"
54 #include "metadata.h"
5455
5556 #ifdef __cplusplus
5657 extern "C" {
5758 #endif
59
5860
5961 // -------------------------------------------------------------------------------
6062 /** A node in the imported hierarchy.
7072 /** The name of the node.
7173 *
7274 * The name might be empty (length of zero) but all nodes which
73 * need to be accessed afterwards by bones or anims are usually named.
74 * Multiple nodes may have the same name, but nodes which are accessed
75 * by bones (see #aiBone and #aiMesh::mBones) *must* be unique.
75 * need to be referenced by either bones or animations are named.
76 * Multiple nodes may have the same name, except for nodes which are referenced
77 * by bones (see #aiBone and #aiMesh::mBones). Their names *must* be unique.
7678 *
77 * Cameras and lights are assigned to a specific node name - if there
78 * are multiple nodes with this name, they're assigned to each of them.
79 * Cameras and lights reference a specific node by name - if there
80 * are multiple nodes with this name, they are assigned to each of them.
7981 * <br>
80 * There are no limitations regarding the characters contained in
81 * this text. You should be able to handle stuff like whitespace, tabs,
82 * linefeeds, quotation marks, ampersands, ... .
82 * There are no limitations with regard to the characters contained in
83 * the name string as it is usually taken directly from the source file.
84 *
85 * Implementations should be able to handle tokens such as whitespace, tabs,
86 * line feeds, quotation marks, ampersands etc.
87 *
88 * Sometimes assimp introduces new nodes not present in the source file
89 * into the hierarchy (usually out of necessity because sometimes the
90 * source hierarchy format is simply not compatible). Their names are
91 * surrounded by @verbatim <> @endverbatim e.g.
92 * @verbatim<DummyRootNode> @endverbatim.
8393 */
8494 C_STRUCT aiString mName;
8595
100110
101111 /** The meshes of this node. Each entry is an index into the mesh */
102112 unsigned int* mMeshes;
113
114 /** Metadata associated with this node or NULL if there is no metadata.
115 * Whether any metadata is generated depends on the source file format. See the
116 * @link importer_notes @endlink page for more information on every source file
117 * format. Importers that don't document any metadata don't write any.
118 */
119 C_STRUCT aiMetadata* mMetaData;
103120
104121 #ifdef __cplusplus
105122 /** Constructor */
106123 aiNode()
107 {
108124 // set all members to zero by default
109 mParent = NULL;
110 mNumChildren = 0; mChildren = NULL;
111 mNumMeshes = 0; mMeshes = NULL;
112 }
125 : mName("")
126 , mParent(NULL)
127 , mNumChildren(0)
128 , mChildren(NULL)
129 , mNumMeshes(0)
130 , mMeshes(NULL)
131 , mMetaData(NULL)
132 {
133 }
134
113135
114136 /** Construction from a specific name */
115137 aiNode(const std::string& name)
116 {
117138 // set all members to zero by default
118 mParent = NULL;
119 mNumChildren = 0; mChildren = NULL;
120 mNumMeshes = 0; mMeshes = NULL;
121 mName = name;
139 : mName(name)
140 , mParent(NULL)
141 , mNumChildren(0)
142 , mChildren(NULL)
143 , mNumMeshes(0)
144 , mMeshes(NULL)
145 , mMetaData(NULL)
146 {
122147 }
123148
124149 /** Destructor */
133158 }
134159 delete [] mChildren;
135160 delete [] mMeshes;
136 }
161 delete mMetaData;
162 }
163
137164
138165 /** Searches for a node with a specific name, beginning at this
139166 * nodes. Normally you will call this method on the root node
142169 * @param name Name to search for
143170 * @return NULL or a valid Node if the search was successful.
144171 */
172 inline const aiNode* FindNode(const aiString& name) const
173 {
174 return FindNode(name.data);
175 }
176
177
145178 inline aiNode* FindNode(const aiString& name)
146179 {
147180 return FindNode(name.data);
148181 }
182
149183
150184 /** @override
151185 */
152 inline aiNode* FindNode(const char* name)
186 inline const aiNode* FindNode(const char* name) const
153187 {
154188 if (!::strcmp( mName.data,name))return this;
155189 for (unsigned int i = 0; i < mNumChildren;++i)
156190 {
157 aiNode* p = mChildren[i]->FindNode(name);
158 if (p)return p;
191 const aiNode* const p = mChildren[i]->FindNode(name);
192 if (p) {
193 return p;
194 }
159195 }
160 // there is definitely no sub node with this name
196 // there is definitely no sub-node with this name
197 return NULL;
198 }
199
200 inline aiNode* FindNode(const char* name)
201 {
202 if (!::strcmp( mName.data,name))return this;
203 for (unsigned int i = 0; i < mNumChildren;++i)
204 {
205 aiNode* const p = mChildren[i]->FindNode(name);
206 if (p) {
207 return p;
208 }
209 }
210 // there is definitely no sub-node with this name
161211 return NULL;
162212 }
163213
327377 #ifdef __cplusplus
328378
329379 //! Default constructor - set everything to 0/NULL
330 aiScene();
380 ASSIMP_API aiScene();
331381
332382 //! Destructor
333 ~aiScene();
383 ASSIMP_API ~aiScene();
334384
335385 //! Check whether the scene contains meshes
336386 //! Unless no special scene flags are set this will always be true.
4949 #include <memory.h>
5050 #include <math.h>
5151 #include <stddef.h>
52 #include <string.h>
53 #include <limits.h>
5254
5355 // Our compile configuration
5456 #include "defs.h"
6264 #include "quaternion.h"
6365
6466 #ifdef __cplusplus
67 #include <cstring>
6568 #include <new> // for std::nothrow_t
6669 #include <string> // for aiString::Set(const std::string&)
6770
170173 bool operator != (const aiColor3D& other) const
171174 {return r != other.r || g != other.g || b != other.b;}
172175
176 /** Component-wise comparison */
177 // TODO: add epsilon?
178 bool operator < (const aiColor3D& other) const {
179 return r < other.r || (
180 r == other.r && (g < other.g ||
181 (g == other.g && b < other.b)
182 )
183 );
184 }
185
173186 /** Component-wise addition */
174187 aiColor3D operator+(const aiColor3D& c) const {
175188 return aiColor3D(r+c.r,g+c.g,b+c.b);
177190
178191 /** Component-wise subtraction */
179192 aiColor3D operator-(const aiColor3D& c) const {
180 return aiColor3D(r+c.r,g+c.g,b+c.b);
193 return aiColor3D(r-c.r,g-c.g,b-c.b);
181194 }
182195
183196 /** Component-wise multiplication */
243256 {
244257 data[0] = '\0';
245258
246 #ifdef _DEBUG
259 #ifdef ASSIMP_BUILD_DEBUG
247260 // Debug build: overwrite the string on its full length with ESC (27)
248261 memset(data+1,27,MAXLEN-1);
249262 #endif
313326
314327 /** Append a string to the string */
315328 void Append (const char* app) {
316 const size_t len = strlen(app);
329 const size_t len = ::strlen(app);
317330 if (!len) {
318331 return;
319332 }
330343 length = 0;
331344 data[0] = '\0';
332345
333 #ifdef _DEBUG
346 #ifdef ASSIMP_BUILD_DEBUG
334347 // Debug build: overwrite the string on its full length with ESC (27)
335348 memset(data+1,27,MAXLEN-1);
336349 #endif
357370 /** Standard return type for some library functions.
358371 * Rarely used, and if, mostly in the C API.
359372 */
360 enum aiReturn
373 typedef enum aiReturn
361374 {
362375 /** Indicates that a function was successful */
363376 aiReturn_SUCCESS = 0x0,
374387 * Force 32-bit size enum
375388 */
376389 _AI_ENFORCE_ENUM_SIZE = 0x7fffffff
377 }; // !enum aiReturn
390 } aiReturn; // !enum aiReturn
378391
379392 // just for backwards compatibility, don't use these constants anymore
380393 #define AI_SUCCESS aiReturn_SUCCESS
4242 */
4343 #ifndef AI_VECTOR2D_H_INC
4444 #define AI_VECTOR2D_H_INC
45
46 #include <math.h>
47
45
46 #ifdef __cplusplus
47 # include <cmath>
48 #else
49 # include <math.h>
50 #endif
51
4852 #include "./Compiler/pushpack1.h"
4953
5054 // ----------------------------------------------------------------------------------
8286 bool operator== (const aiVector2t& other) const;
8387 bool operator!= (const aiVector2t& other) const;
8488
89 bool Equal(const aiVector2t& other, TReal epsilon = 1e-6) const;
90
8591 aiVector2t& operator= (TReal f);
8692 const aiVector2t SymMul(const aiVector2t& o);
8793
4747 #ifdef __cplusplus
4848 #include "vector2.h"
4949
50 #include <cmath>
51
5052 // ------------------------------------------------------------------------------------------------
5153 template <typename TReal>
5254 template <typename TOther>
130132 return x != other.x || y != other.y;
131133 }
132134
135 // ---------------------------------------------------------------------------
136 template<typename TReal>
137 bool aiVector2t<TReal>::Equal(const aiVector2t& other, TReal epsilon) const {
138 return
139 std::abs(x - other.x) <= epsilon &&
140 std::abs(y - other.y) <= epsilon;
141 }
142
133143 // ------------------------------------------------------------------------------------------------
134144 template <typename TReal>
135145 aiVector2t<TReal>& aiVector2t<TReal>::operator= (TReal f) {
4242 */
4343 #ifndef AI_VECTOR3D_H_INC
4444 #define AI_VECTOR3D_H_INC
45
46 #include <math.h>
47
48
45
46 #ifdef __cplusplus
47 # include <cmath>
48 #else
49 # include <math.h>
50 #endif
51
4952 #include "./Compiler/pushpack1.h"
5053
5154 #ifdef __cplusplus
8487 // comparison
8588 bool operator== (const aiVector3t& other) const;
8689 bool operator!= (const aiVector3t& other) const;
90 bool operator < (const aiVector3t& other) const;
91
92 bool Equal(const aiVector3t& other, TReal epsilon = 1e-6) const;
8793
8894 template <typename TOther>
8995 operator aiVector3t<TOther> () const;
4747 #ifdef __cplusplus
4848 #include "vector3.h"
4949
50 #include <cmath>
51
5052 // ------------------------------------------------------------------------------------------------
5153 /** Transformation of a vector by a 3x3 matrix */
5254 template <typename TReal>
8991 // ------------------------------------------------------------------------------------------------
9092 template <typename TReal>
9193 AI_FORCE_INLINE TReal aiVector3t<TReal>::Length() const {
92 return sqrt( SquareLength());
94 return ::sqrt( SquareLength());
9395 }
9496 // ------------------------------------------------------------------------------------------------
9597 template <typename TReal>
146148 AI_FORCE_INLINE bool aiVector3t<TReal>::operator!= (const aiVector3t<TReal>& other) const {
147149 return x != other.x || y != other.y || z != other.z;
148150 }
151 // ---------------------------------------------------------------------------
152 template<typename TReal>
153 AI_FORCE_INLINE bool aiVector3t<TReal>::Equal(const aiVector3t<TReal>& other, TReal epsilon) const {
154 return
155 std::abs(x - other.x) <= epsilon &&
156 std::abs(y - other.y) <= epsilon &&
157 std::abs(z - other.z) <= epsilon;
158 }
159 // ------------------------------------------------------------------------------------------------
160 template <typename TReal>
161 AI_FORCE_INLINE bool aiVector3t<TReal>::operator < (const aiVector3t<TReal>& other) const {
162 return x != other.x ? x < other.x : y != other.y ? y < other.y : z < other.z;
163 }
149164 // ------------------------------------------------------------------------------------------------
150165 template <typename TReal>
151166 AI_FORCE_INLINE const aiVector3t<TReal> aiVector3t<TReal>::SymMul(const aiVector3t<TReal>& o) {
206221 return aiVector3t<TReal>( -v.x, -v.y, -v.z);
207222 }
208223
224 // ------------------------------------------------------------------------------------------------
209225
210226 #endif // __cplusplus
211227 #endif // AI_VECTOR3D_INL_INC
7373 // ---------------------------------------------------------------------------
7474 /** @brief Returns the repository revision of the Assimp runtime.
7575 * @return SVN Repository revision number of the Assimp runtime the
76 * application was linked/built against
76 * application was linked/built against.
7777 */
7878 ASSIMP_API unsigned int aiGetVersionRevision (void);
79
8079
8180 //! Assimp was compiled as a shared object (Windows: DLL)
8281 #define ASSIMP_CFLAGS_SHARED 0x1
4242 %include "carrays.i"
4343 %include "typemaps.i"
4444 %{
45 #include "..\..\..\include\aiDefines.h"
46 #include "..\..\..\include\aiConfig.h"
47 #include "..\..\..\include\aiTypes.h"
48 #include "..\..\..\include\aiVersion.h"
49 #include "..\..\..\include\aiPostProcess.h"
50 #include "..\..\..\include\aiVector2D.h"
51 #include "..\..\..\include\aiVector3D.h"
52 #include "..\..\..\include\aiColor4D.h"
53 #include "..\..\..\include\aiMatrix3x3.h"
54 #include "..\..\..\include\aiMatrix4x4.h"
55 #include "..\..\..\include\aiCamera.h"
56 #include "..\..\..\include\aiLight.h"
57 #include "..\..\..\include\aiAnim.h"
58 #include "..\..\..\include\aiMesh.h"
59 #include "..\..\..\include\aiFileIO.h"
60 #include "..\..\..\include\aiMaterial.h"
61 #include "..\..\..\include\aiQuaternion.h"
62 #include "..\..\..\include\aiScene.h"
63 #include "..\..\..\include\aiTexture.h"
64 #include "..\..\..\include\assimp.hpp"
65 #include "..\..\..\include\IOSystem.h"
66 #include "..\..\..\include\IOStream.h"
67 #include "..\..\..\include\Logger.h"
68 #include "..\..\..\include\LogStream.h"
69 #include "..\..\..\include\NullLogger.h"
70 #include "..\..\..\include\ProgressHandler.h"
45 #include "..\..\..\include\assimp\defs.h"
46 #include "..\..\..\include\assimp\config.h"
47 #include "..\..\..\include\assimp\types.h"
48 #include "..\..\..\include\assimp\version.h"
49 #include "..\..\..\include\assimp\postprocess.h"
50 #include "..\..\..\include\assimp\vector2.h"
51 #include "..\..\..\include\assimp\vector3.h"
52 #include "..\..\..\include\assimp\color4.h"
53 #include "..\..\..\include\assimp\matrix3x3.h"
54 #include "..\..\..\include\assimp\matrix4x4.h"
55 #include "..\..\..\include\assimp\camera.h"
56 #include "..\..\..\include\assimp\light.h"
57 #include "..\..\..\include\assimp\anim.h"
58 #include "..\..\..\include\assimp\mesh.h"
59 #include "..\..\..\include\assimp\cfileio.h"
60 #include "..\..\..\include\assimp\material.h"
61 #include "..\..\..\include\assimp\quaternion.h"
62 #include "..\..\..\include\assimp\scene.h"
63 #include "..\..\..\include\assimp\texture.h"
64 #include "..\..\..\include\assimp\Importer.hpp"
65 #include "..\..\..\include\assimp\IOSystem.hpp"
66 #include "..\..\..\include\assimp\IOStream.hpp"
67 #include "..\..\..\include\assimp\Logger.hpp"
68 #include "..\..\..\include\assimp\LogStream.hpp"
69 #include "..\..\..\include\assimp\NullLogger.hpp"
70 #include "..\..\..\include\assimp\ProgressHandler.hpp"
7171 %}
7272
7373 #define C_STRUCT
7474 #define C_ENUM
7575 #define ASSIMP_API
7676 #define PACK_STRUCT
77 #define AI_FORCE_INLINE
7778
7879 %rename(__add__) operator+;
7980 %rename(__addnset__) operator+=;
503504 %ignore ::aiGetMaterialTexture;
504505
505506
506 %include "..\..\..\include\aiDefines.h"
507 %include "..\..\..\include\aiConfig.h"
508 %include "..\..\..\include\aiTypes.h"
509 %include "..\..\..\include\aiVersion.h"
510 %include "..\..\..\include\aiPostProcess.h"
511 %include "..\..\..\include\aiVector2D.h"
512 %include "..\..\..\include\aiVector3D.h"
513 %include "..\..\..\include\aiColor4D.h"
514 %include "..\..\..\include\aiMatrix3x3.h"
515 %include "..\..\..\include\aiMatrix4x4.h"
516 %include "..\..\..\include\aiCamera.h"
517 %include "..\..\..\include\aiLight.h"
518 %include "..\..\..\include\aiAnim.h"
519 %include "..\..\..\include\aiMesh.h"
520 %include "..\..\..\include\aiFileIO.h"
521 %include "..\..\..\include\aiMaterial.h"
522 %include "..\..\..\include\aiQuaternion.h"
523 %include "..\..\..\include\aiScene.h"
524 %include "..\..\..\include\aiTexture.h"
525 %include "..\..\..\include\assimp.hpp"
526 %include "..\..\..\include\ProgressHandler.h"
507 %include "..\..\..\include\assimp\defs.h"
508 %include "..\..\..\include\assimp\config.h"
509 %include "..\..\..\include\assimp\types.h"
510 %include "..\..\..\include\assimp\version.h"
511 %include "..\..\..\include\assimp\postprocess.h"
512 %include "..\..\..\include\assimp\vector2.h"
513 %include "..\..\..\include\assimp\vector3.h"
514 %include "..\..\..\include\assimp\color4.h"
515 %include "..\..\..\include\assimp\matrix3x3.h"
516 %include "..\..\..\include\assimp\matrix4x4.h"
517 %include "..\..\..\include\assimp\camera.h"
518 %include "..\..\..\include\assimp\light.h"
519 %include "..\..\..\include\assimp\anim.h"
520 %include "..\..\..\include\assimp\mesh.h"
521 %include "..\..\..\include\assimp\cfileio.h"
522 %include "..\..\..\include\assimp\material.h"
523 %include "..\..\..\include\assimp\quaternion.h"
524 %include "..\..\..\include\assimp\scene.h"
525 %include "..\..\..\include\assimp\texture.h"
526 %include "..\..\..\include\assimp\Importer.hpp"
527 %include "..\..\..\include\assimp\ProgressHandler.hpp"
527528 //%include "..\..\..\include\IOSystem.h"
528529 //%include "..\..\..\include\IOStream.h"
529530 //%include "..\..\..\include\Logger.h"
530531 //%include "..\..\..\include\LogStream.h"
531532 //%include "..\..\..\include\NullLogger.h"
533
534
535 %template(aiColor4D) aiColor4t<float>;
536
537 %template(aiVector3D) aiVector3t<float>;
538 %template(aiVector2D) aiVector2t<float>;
539
540 %template(aiQuaternion) aiQuaterniont<float>;
541 %template(aiMatrix3x3) aiMatrix3x3t<float>;
542 %template(aiMatrix4x4) aiMatrix4x4t<float>;
532543
533544 %template(FloatVector) std::vector<float>;
534545 %template(UintVector) std::vector<unsigned int>;
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * This file is not intended to be easily readable and contains a number of
55 * coding conventions designed to improve portability and efficiency. Do not make
279279 #define SWIG_contract_assert(nullreturn, expr, msg) if (!(expr)) {SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, msg, ""); return nullreturn; } else
280280
281281
282 #include "..\..\..\include\aiDefines.h"
283 #include "..\..\..\include\aiConfig.h"
284 #include "..\..\..\include\aiTypes.h"
285 #include "..\..\..\include\aiVersion.h"
286 #include "..\..\..\include\aiPostProcess.h"
287 #include "..\..\..\include\aiVector2D.h"
288 #include "..\..\..\include\aiVector3D.h"
289 #include "..\..\..\include\aiColor4D.h"
290 #include "..\..\..\include\aiMatrix3x3.h"
291 #include "..\..\..\include\aiMatrix4x4.h"
292 #include "..\..\..\include\aiCamera.h"
293 #include "..\..\..\include\aiLight.h"
294 #include "..\..\..\include\aiAnim.h"
295 #include "..\..\..\include\aiMesh.h"
296 #include "..\..\..\include\aiFileIO.h"
297 #include "..\..\..\include\aiMaterial.h"
298 #include "..\..\..\include\aiQuaternion.h"
299 #include "..\..\..\include\aiScene.h"
300 #include "..\..\..\include\aiTexture.h"
301 #include "..\..\..\include\assimp.hpp"
302 #include "..\..\..\include\IOSystem.h"
303 #include "..\..\..\include\IOStream.h"
304 #include "..\..\..\include\Logger.h"
305 #include "..\..\..\include\LogStream.h"
306 #include "..\..\..\include\NullLogger.h"
307 #include "..\..\..\include\ProgressHandler.h"
282 #include "..\..\..\include\assimp\defs.h"
283 #include "..\..\..\include\assimp\config.h"
284 #include "..\..\..\include\assimp\types.h"
285 #include "..\..\..\include\assimp\version.h"
286 #include "..\..\..\include\assimp\postprocess.h"
287 #include "..\..\..\include\assimp\vector2.h"
288 #include "..\..\..\include\assimp\vector3.h"
289 #include "..\..\..\include\assimp\color4.h"
290 #include "..\..\..\include\assimp\matrix3x3.h"
291 #include "..\..\..\include\assimp\matrix4x4.h"
292 #include "..\..\..\include\assimp\camera.h"
293 #include "..\..\..\include\assimp\light.h"
294 #include "..\..\..\include\assimp\anim.h"
295 #include "..\..\..\include\assimp\mesh.h"
296 #include "..\..\..\include\assimp\cfileio.h"
297 #include "..\..\..\include\assimp\material.h"
298 #include "..\..\..\include\assimp\quaternion.h"
299 #include "..\..\..\include\assimp\scene.h"
300 #include "..\..\..\include\assimp\texture.h"
301 #include "..\..\..\include\assimp\Importer.hpp"
302 #include "..\..\..\include\assimp\IOSystem.hpp"
303 #include "..\..\..\include\assimp\IOStream.hpp"
304 #include "..\..\..\include\assimp\Logger.hpp"
305 #include "..\..\..\include\assimp\LogStream.hpp"
306 #include "..\..\..\include\assimp\NullLogger.hpp"
307 #include "..\..\..\include\assimp\ProgressHandler.hpp"
308308
309309
310310 #include <string>
14311431 return false;
14321432 }
14331433 SWIGINTERN std::vector< std::vector< aiColor4D * > > *new_std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg___SWIG_2(int capacity){
1434 std::vector< std::vector< aiColor4D * > >* pv = 0;
1434 std::vector< std::vector< aiColor4t< float > * > >* pv = 0;
14351435 if (capacity >= 0) {
1436 pv = new std::vector< std::vector< aiColor4D * > >();
1436 pv = new std::vector< std::vector< aiColor4t< float > * > >();
14371437 pv->reserve(capacity);
14381438 } else {
14391439 throw std::out_of_range("capacity");
14401440 }
14411441 return pv;
14421442 }
1443 SWIGINTERN std::vector< aiColor4D * > std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__getitemcopy(std::vector< std::vector< aiColor4D * > > *self,int index){
1443 SWIGINTERN std::vector< aiColor4t< float > * > std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__getitemcopy(std::vector< std::vector< aiColor4D * > > *self,int index){
14441444 if (index>=0 && index<(int)self->size())
14451445 return (*self)[index];
14461446 else
14471447 throw std::out_of_range("index");
14481448 }
1449 SWIGINTERN std::vector< std::vector< aiColor4D * > >::const_reference std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__getitem(std::vector< std::vector< aiColor4D * > > *self,int index){
1449 SWIGINTERN std::vector< std::vector< aiColor4t< float > * > >::const_reference std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__getitem(std::vector< std::vector< aiColor4D * > > *self,int index){
14501450 if (index>=0 && index<(int)self->size())
14511451 return (*self)[index];
14521452 else
14531453 throw std::out_of_range("index");
14541454 }
1455 SWIGINTERN void std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__setitem(std::vector< std::vector< aiColor4D * > > *self,int index,std::vector< aiColor4D * > const &val){
1455 SWIGINTERN void std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__setitem(std::vector< std::vector< aiColor4D * > > *self,int index,std::vector< aiColor4t< float > * > const &val){
14561456 if (index>=0 && index<(int)self->size())
14571457 (*self)[index] = val;
14581458 else
14591459 throw std::out_of_range("index");
14601460 }
1461 SWIGINTERN void std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__AddRange(std::vector< std::vector< aiColor4D * > > *self,std::vector< std::vector< aiColor4D * > > const &values){
1461 SWIGINTERN void std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__AddRange(std::vector< std::vector< aiColor4D * > > *self,std::vector< std::vector< aiColor4t< float > * > > const &values){
14621462 self->insert(self->end(), values.begin(), values.end());
14631463 }
1464 SWIGINTERN std::vector< std::vector< aiColor4D * > > *std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__GetRange(std::vector< std::vector< aiColor4D * > > *self,int index,int count){
1464 SWIGINTERN std::vector< std::vector< aiColor4t< float > * > > *std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__GetRange(std::vector< std::vector< aiColor4D * > > *self,int index,int count){
14651465 if (index < 0)
14661466 throw std::out_of_range("index");
14671467 if (count < 0)
14681468 throw std::out_of_range("count");
14691469 if (index >= (int)self->size()+1 || index+count > (int)self->size())
14701470 throw std::invalid_argument("invalid range");
1471 return new std::vector< std::vector< aiColor4D * > >(self->begin()+index, self->begin()+index+count);
1472 }
1473 SWIGINTERN void std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__Insert(std::vector< std::vector< aiColor4D * > > *self,int index,std::vector< aiColor4D * > const &x){
1471 return new std::vector< std::vector< aiColor4t< float > * > >(self->begin()+index, self->begin()+index+count);
1472 }
1473 SWIGINTERN void std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__Insert(std::vector< std::vector< aiColor4D * > > *self,int index,std::vector< aiColor4t< float > * > const &x){
14741474 if (index>=0 && index<(int)self->size()+1)
14751475 self->insert(self->begin()+index, x);
14761476 else
14771477 throw std::out_of_range("index");
14781478 }
1479 SWIGINTERN void std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__InsertRange(std::vector< std::vector< aiColor4D * > > *self,int index,std::vector< std::vector< aiColor4D * > > const &values){
1479 SWIGINTERN void std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__InsertRange(std::vector< std::vector< aiColor4D * > > *self,int index,std::vector< std::vector< aiColor4t< float > * > > const &values){
14801480 if (index>=0 && index<(int)self->size()+1)
14811481 self->insert(self->begin()+index, values.begin(), values.end());
14821482 else
14971497 throw std::invalid_argument("invalid range");
14981498 self->erase(self->begin()+index, self->begin()+index+count);
14991499 }
1500 SWIGINTERN std::vector< std::vector< aiColor4D * > > *std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__Repeat(std::vector< aiColor4D * > const &value,int count){
1500 SWIGINTERN std::vector< std::vector< aiColor4t< float > * > > *std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__Repeat(std::vector< aiColor4t< float > * > const &value,int count){
15011501 if (count < 0)
15021502 throw std::out_of_range("count");
1503 return new std::vector< std::vector< aiColor4D * > >(count, value);
1503 return new std::vector< std::vector< aiColor4t< float > * > >(count, value);
15041504 }
15051505 SWIGINTERN void std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__Reverse__SWIG_0(std::vector< std::vector< aiColor4D * > > *self){
15061506 std::reverse(self->begin(), self->end());
15141514 throw std::invalid_argument("invalid range");
15151515 std::reverse(self->begin()+index, self->begin()+index+count);
15161516 }
1517 SWIGINTERN void std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__SetRange(std::vector< std::vector< aiColor4D * > > *self,int index,std::vector< std::vector< aiColor4D * > > const &values){
1517 SWIGINTERN void std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__SetRange(std::vector< std::vector< aiColor4D * > > *self,int index,std::vector< std::vector< aiColor4t< float > * > > const &values){
15181518 if (index < 0)
15191519 throw std::out_of_range("index");
15201520 if (index+values.size() > self->size())
15221522 std::copy(values.begin(), values.end(), self->begin()+index);
15231523 }
15241524 SWIGINTERN std::vector< aiColor4D * > *new_std_vector_Sl_aiColor4D_Sm__Sg___SWIG_2(int capacity){
1525 std::vector< aiColor4D * >* pv = 0;
1525 std::vector< aiColor4t< float > * >* pv = 0;
15261526 if (capacity >= 0) {
1527 pv = new std::vector< aiColor4D * >();
1527 pv = new std::vector< aiColor4t< float > * >();
15281528 pv->reserve(capacity);
15291529 } else {
15301530 throw std::out_of_range("capacity");
15311531 }
15321532 return pv;
15331533 }
1534 SWIGINTERN aiColor4D *std_vector_Sl_aiColor4D_Sm__Sg__getitemcopy(std::vector< aiColor4D * > *self,int index){
1534 SWIGINTERN aiColor4t< float > *std_vector_Sl_aiColor4D_Sm__Sg__getitemcopy(std::vector< aiColor4D * > *self,int index){
15351535 if (index>=0 && index<(int)self->size())
15361536 return (*self)[index];
15371537 else
15381538 throw std::out_of_range("index");
15391539 }
1540 SWIGINTERN std::vector< aiColor4D * >::const_reference std_vector_Sl_aiColor4D_Sm__Sg__getitem(std::vector< aiColor4D * > *self,int index){
1540 SWIGINTERN std::vector< aiColor4t< float > * >::const_reference std_vector_Sl_aiColor4D_Sm__Sg__getitem(std::vector< aiColor4D * > *self,int index){
15411541 if (index>=0 && index<(int)self->size())
15421542 return (*self)[index];
15431543 else
15441544 throw std::out_of_range("index");
15451545 }
1546 SWIGINTERN void std_vector_Sl_aiColor4D_Sm__Sg__setitem(std::vector< aiColor4D * > *self,int index,aiColor4D *const &val){
1546 SWIGINTERN void std_vector_Sl_aiColor4D_Sm__Sg__setitem(std::vector< aiColor4D * > *self,int index,aiColor4t< float > *const &val){
15471547 if (index>=0 && index<(int)self->size())
15481548 (*self)[index] = val;
15491549 else
15501550 throw std::out_of_range("index");
15511551 }
1552 SWIGINTERN void std_vector_Sl_aiColor4D_Sm__Sg__AddRange(std::vector< aiColor4D * > *self,std::vector< aiColor4D * > const &values){
1552 SWIGINTERN void std_vector_Sl_aiColor4D_Sm__Sg__AddRange(std::vector< aiColor4D * > *self,std::vector< aiColor4t< float > * > const &values){
15531553 self->insert(self->end(), values.begin(), values.end());
15541554 }
1555 SWIGINTERN std::vector< aiColor4D * > *std_vector_Sl_aiColor4D_Sm__Sg__GetRange(std::vector< aiColor4D * > *self,int index,int count){
1555 SWIGINTERN std::vector< aiColor4t< float > * > *std_vector_Sl_aiColor4D_Sm__Sg__GetRange(std::vector< aiColor4D * > *self,int index,int count){
15561556 if (index < 0)
15571557 throw std::out_of_range("index");
15581558 if (count < 0)
15591559 throw std::out_of_range("count");
15601560 if (index >= (int)self->size()+1 || index+count > (int)self->size())
15611561 throw std::invalid_argument("invalid range");
1562 return new std::vector< aiColor4D * >(self->begin()+index, self->begin()+index+count);
1563 }
1564 SWIGINTERN void std_vector_Sl_aiColor4D_Sm__Sg__Insert(std::vector< aiColor4D * > *self,int index,aiColor4D *const &x){
1562 return new std::vector< aiColor4t< float > * >(self->begin()+index, self->begin()+index+count);
1563 }
1564 SWIGINTERN void std_vector_Sl_aiColor4D_Sm__Sg__Insert(std::vector< aiColor4D * > *self,int index,aiColor4t< float > *const &x){
15651565 if (index>=0 && index<(int)self->size()+1)
15661566 self->insert(self->begin()+index, x);
15671567 else
15681568 throw std::out_of_range("index");
15691569 }
1570 SWIGINTERN void std_vector_Sl_aiColor4D_Sm__Sg__InsertRange(std::vector< aiColor4D * > *self,int index,std::vector< aiColor4D * > const &values){
1570 SWIGINTERN void std_vector_Sl_aiColor4D_Sm__Sg__InsertRange(std::vector< aiColor4D * > *self,int index,std::vector< aiColor4t< float > * > const &values){
15711571 if (index>=0 && index<(int)self->size()+1)
15721572 self->insert(self->begin()+index, values.begin(), values.end());
15731573 else
15881588 throw std::invalid_argument("invalid range");
15891589 self->erase(self->begin()+index, self->begin()+index+count);
15901590 }
1591 SWIGINTERN std::vector< aiColor4D * > *std_vector_Sl_aiColor4D_Sm__Sg__Repeat(aiColor4D *const &value,int count){
1591 SWIGINTERN std::vector< aiColor4t< float > * > *std_vector_Sl_aiColor4D_Sm__Sg__Repeat(aiColor4t< float > *const &value,int count){
15921592 if (count < 0)
15931593 throw std::out_of_range("count");
1594 return new std::vector< aiColor4D * >(count, value);
1594 return new std::vector< aiColor4t< float > * >(count, value);
15951595 }
15961596 SWIGINTERN void std_vector_Sl_aiColor4D_Sm__Sg__Reverse__SWIG_0(std::vector< aiColor4D * > *self){
15971597 std::reverse(self->begin(), self->end());
16051605 throw std::invalid_argument("invalid range");
16061606 std::reverse(self->begin()+index, self->begin()+index+count);
16071607 }
1608 SWIGINTERN void std_vector_Sl_aiColor4D_Sm__Sg__SetRange(std::vector< aiColor4D * > *self,int index,std::vector< aiColor4D * > const &values){
1608 SWIGINTERN void std_vector_Sl_aiColor4D_Sm__Sg__SetRange(std::vector< aiColor4D * > *self,int index,std::vector< aiColor4t< float > * > const &values){
16091609 if (index < 0)
16101610 throw std::out_of_range("index");
16111611 if (index+values.size() > self->size())
16121612 throw std::out_of_range("index");
16131613 std::copy(values.begin(), values.end(), self->begin()+index);
16141614 }
1615 SWIGINTERN bool std_vector_Sl_aiColor4D_Sm__Sg__Contains(std::vector< aiColor4D * > *self,aiColor4D *const &value){
1615 SWIGINTERN bool std_vector_Sl_aiColor4D_Sm__Sg__Contains(std::vector< aiColor4D * > *self,aiColor4t< float > *const &value){
16161616 return std::find(self->begin(), self->end(), value) != self->end();
16171617 }
1618 SWIGINTERN int std_vector_Sl_aiColor4D_Sm__Sg__IndexOf(std::vector< aiColor4D * > *self,aiColor4D *const &value){
1618 SWIGINTERN int std_vector_Sl_aiColor4D_Sm__Sg__IndexOf(std::vector< aiColor4D * > *self,aiColor4t< float > *const &value){
16191619 int index = -1;
1620 std::vector< aiColor4D * >::iterator it = std::find(self->begin(), self->end(), value);
1620 std::vector< aiColor4t< float > * >::iterator it = std::find(self->begin(), self->end(), value);
16211621 if (it != self->end())
16221622 index = (int)(it - self->begin());
16231623 return index;
16241624 }
1625 SWIGINTERN int std_vector_Sl_aiColor4D_Sm__Sg__LastIndexOf(std::vector< aiColor4D * > *self,aiColor4D *const &value){
1625 SWIGINTERN int std_vector_Sl_aiColor4D_Sm__Sg__LastIndexOf(std::vector< aiColor4D * > *self,aiColor4t< float > *const &value){
16261626 int index = -1;
1627 std::vector< aiColor4D * >::reverse_iterator rit = std::find(self->rbegin(), self->rend(), value);
1627 std::vector< aiColor4t< float > * >::reverse_iterator rit = std::find(self->rbegin(), self->rend(), value);
16281628 if (rit != self->rend())
16291629 index = (int)(self->rend() - 1 - rit);
16301630 return index;
16311631 }
1632 SWIGINTERN bool std_vector_Sl_aiColor4D_Sm__Sg__Remove(std::vector< aiColor4D * > *self,aiColor4D *const &value){
1633 std::vector< aiColor4D * >::iterator it = std::find(self->begin(), self->end(), value);
1632 SWIGINTERN bool std_vector_Sl_aiColor4D_Sm__Sg__Remove(std::vector< aiColor4D * > *self,aiColor4t< float > *const &value){
1633 std::vector< aiColor4t< float > * >::iterator it = std::find(self->begin(), self->end(), value);
16341634 if (it != self->end()) {
16351635 self->erase(it);
16361636 return true;
27982798 return false;
27992799 }
28002800 SWIGINTERN std::vector< aiVector3D * > *new_std_vector_Sl_aiVector3D_Sm__Sg___SWIG_2(int capacity){
2801 std::vector< aiVector3D * >* pv = 0;
2801 std::vector< aiVector3t< float > * >* pv = 0;
28022802 if (capacity >= 0) {
2803 pv = new std::vector< aiVector3D * >();
2803 pv = new std::vector< aiVector3t< float > * >();
28042804 pv->reserve(capacity);
28052805 } else {
28062806 throw std::out_of_range("capacity");
28072807 }
28082808 return pv;
28092809 }
2810 SWIGINTERN aiVector3D *std_vector_Sl_aiVector3D_Sm__Sg__getitemcopy(std::vector< aiVector3D * > *self,int index){
2810 SWIGINTERN aiVector3t< float > *std_vector_Sl_aiVector3D_Sm__Sg__getitemcopy(std::vector< aiVector3D * > *self,int index){
28112811 if (index>=0 && index<(int)self->size())
28122812 return (*self)[index];
28132813 else
28142814 throw std::out_of_range("index");
28152815 }
2816 SWIGINTERN std::vector< aiVector3D * >::const_reference std_vector_Sl_aiVector3D_Sm__Sg__getitem(std::vector< aiVector3D * > *self,int index){
2816 SWIGINTERN std::vector< aiVector3t< float > * >::const_reference std_vector_Sl_aiVector3D_Sm__Sg__getitem(std::vector< aiVector3D * > *self,int index){
28172817 if (index>=0 && index<(int)self->size())
28182818 return (*self)[index];
28192819 else
28202820 throw std::out_of_range("index");
28212821 }
2822 SWIGINTERN void std_vector_Sl_aiVector3D_Sm__Sg__setitem(std::vector< aiVector3D * > *self,int index,aiVector3D *const &val){
2822 SWIGINTERN void std_vector_Sl_aiVector3D_Sm__Sg__setitem(std::vector< aiVector3D * > *self,int index,aiVector3t< float > *const &val){
28232823 if (index>=0 && index<(int)self->size())
28242824 (*self)[index] = val;
28252825 else
28262826 throw std::out_of_range("index");
28272827 }
2828 SWIGINTERN void std_vector_Sl_aiVector3D_Sm__Sg__AddRange(std::vector< aiVector3D * > *self,std::vector< aiVector3D * > const &values){
2828 SWIGINTERN void std_vector_Sl_aiVector3D_Sm__Sg__AddRange(std::vector< aiVector3D * > *self,std::vector< aiVector3t< float > * > const &values){
28292829 self->insert(self->end(), values.begin(), values.end());
28302830 }
2831 SWIGINTERN std::vector< aiVector3D * > *std_vector_Sl_aiVector3D_Sm__Sg__GetRange(std::vector< aiVector3D * > *self,int index,int count){
2831 SWIGINTERN std::vector< aiVector3t< float > * > *std_vector_Sl_aiVector3D_Sm__Sg__GetRange(std::vector< aiVector3D * > *self,int index,int count){
28322832 if (index < 0)
28332833 throw std::out_of_range("index");
28342834 if (count < 0)
28352835 throw std::out_of_range("count");
28362836 if (index >= (int)self->size()+1 || index+count > (int)self->size())
28372837 throw std::invalid_argument("invalid range");
2838 return new std::vector< aiVector3D * >(self->begin()+index, self->begin()+index+count);
2839 }
2840 SWIGINTERN void std_vector_Sl_aiVector3D_Sm__Sg__Insert(std::vector< aiVector3D * > *self,int index,aiVector3D *const &x){
2838 return new std::vector< aiVector3t< float > * >(self->begin()+index, self->begin()+index+count);
2839 }
2840 SWIGINTERN void std_vector_Sl_aiVector3D_Sm__Sg__Insert(std::vector< aiVector3D * > *self,int index,aiVector3t< float > *const &x){
28412841 if (index>=0 && index<(int)self->size()+1)
28422842 self->insert(self->begin()+index, x);
28432843 else
28442844 throw std::out_of_range("index");
28452845 }
2846 SWIGINTERN void std_vector_Sl_aiVector3D_Sm__Sg__InsertRange(std::vector< aiVector3D * > *self,int index,std::vector< aiVector3D * > const &values){
2846 SWIGINTERN void std_vector_Sl_aiVector3D_Sm__Sg__InsertRange(std::vector< aiVector3D * > *self,int index,std::vector< aiVector3t< float > * > const &values){
28472847 if (index>=0 && index<(int)self->size()+1)
28482848 self->insert(self->begin()+index, values.begin(), values.end());
28492849 else
28642864 throw std::invalid_argument("invalid range");
28652865 self->erase(self->begin()+index, self->begin()+index+count);
28662866 }
2867 SWIGINTERN std::vector< aiVector3D * > *std_vector_Sl_aiVector3D_Sm__Sg__Repeat(aiVector3D *const &value,int count){
2867 SWIGINTERN std::vector< aiVector3t< float > * > *std_vector_Sl_aiVector3D_Sm__Sg__Repeat(aiVector3t< float > *const &value,int count){
28682868 if (count < 0)
28692869 throw std::out_of_range("count");
2870 return new std::vector< aiVector3D * >(count, value);
2870 return new std::vector< aiVector3t< float > * >(count, value);
28712871 }
28722872 SWIGINTERN void std_vector_Sl_aiVector3D_Sm__Sg__Reverse__SWIG_0(std::vector< aiVector3D * > *self){
28732873 std::reverse(self->begin(), self->end());
28812881 throw std::invalid_argument("invalid range");
28822882 std::reverse(self->begin()+index, self->begin()+index+count);
28832883 }
2884 SWIGINTERN void std_vector_Sl_aiVector3D_Sm__Sg__SetRange(std::vector< aiVector3D * > *self,int index,std::vector< aiVector3D * > const &values){
2884 SWIGINTERN void std_vector_Sl_aiVector3D_Sm__Sg__SetRange(std::vector< aiVector3D * > *self,int index,std::vector< aiVector3t< float > * > const &values){
28852885 if (index < 0)
28862886 throw std::out_of_range("index");
28872887 if (index+values.size() > self->size())
28882888 throw std::out_of_range("index");
28892889 std::copy(values.begin(), values.end(), self->begin()+index);
28902890 }
2891 SWIGINTERN bool std_vector_Sl_aiVector3D_Sm__Sg__Contains(std::vector< aiVector3D * > *self,aiVector3D *const &value){
2891 SWIGINTERN bool std_vector_Sl_aiVector3D_Sm__Sg__Contains(std::vector< aiVector3D * > *self,aiVector3t< float > *const &value){
28922892 return std::find(self->begin(), self->end(), value) != self->end();
28932893 }
2894 SWIGINTERN int std_vector_Sl_aiVector3D_Sm__Sg__IndexOf(std::vector< aiVector3D * > *self,aiVector3D *const &value){
2894 SWIGINTERN int std_vector_Sl_aiVector3D_Sm__Sg__IndexOf(std::vector< aiVector3D * > *self,aiVector3t< float > *const &value){
28952895 int index = -1;
2896 std::vector< aiVector3D * >::iterator it = std::find(self->begin(), self->end(), value);
2896 std::vector< aiVector3t< float > * >::iterator it = std::find(self->begin(), self->end(), value);
28972897 if (it != self->end())
28982898 index = (int)(it - self->begin());
28992899 return index;
29002900 }
2901 SWIGINTERN int std_vector_Sl_aiVector3D_Sm__Sg__LastIndexOf(std::vector< aiVector3D * > *self,aiVector3D *const &value){
2901 SWIGINTERN int std_vector_Sl_aiVector3D_Sm__Sg__LastIndexOf(std::vector< aiVector3D * > *self,aiVector3t< float > *const &value){
29022902 int index = -1;
2903 std::vector< aiVector3D * >::reverse_iterator rit = std::find(self->rbegin(), self->rend(), value);
2903 std::vector< aiVector3t< float > * >::reverse_iterator rit = std::find(self->rbegin(), self->rend(), value);
29042904 if (rit != self->rend())
29052905 index = (int)(self->rend() - 1 - rit);
29062906 return index;
29072907 }
2908 SWIGINTERN bool std_vector_Sl_aiVector3D_Sm__Sg__Remove(std::vector< aiVector3D * > *self,aiVector3D *const &value){
2909 std::vector< aiVector3D * >::iterator it = std::find(self->begin(), self->end(), value);
2908 SWIGINTERN bool std_vector_Sl_aiVector3D_Sm__Sg__Remove(std::vector< aiVector3D * > *self,aiVector3t< float > *const &value){
2909 std::vector< aiVector3t< float > * >::iterator it = std::find(self->begin(), self->end(), value);
29102910 if (it != self->end()) {
29112911 self->erase(it);
29122912 return true;
29292929 else
29302930 throw std::out_of_range("index");
29312931 }
2932 SWIGINTERN std::vector< std::vector< aiVector3D * > >::const_reference std_vector_Sl_std_vector_Sl_aiVector3D_Sm__Sg__Sg__getitem(std::vector< std::vector< aiVector3D * > > *self,int index){
2932 SWIGINTERN std::vector< std::vector< aiVector3t< float > * > >::const_reference std_vector_Sl_std_vector_Sl_aiVector3D_Sm__Sg__Sg__getitem(std::vector< std::vector< aiVector3D * > > *self,int index){
29332933 if (index>=0 && index<(int)self->size())
29342934 return (*self)[index];
29352935 else
33113311 }
33123312
33133313
3314 SWIGEXPORT char * SWIGSTDCALL CSharp_AI_CONFIG_PP_SBBC_MAX_BONES_get() {
3315 char * jresult ;
3316 char *result = 0 ;
3317
3318 result = (char *)("PP_SBBC_MAX_BONES");
3319 jresult = SWIG_csharp_string_callback((const char *)result);
3320 return jresult;
3321 }
3322
3323
3324 SWIGEXPORT int SWIGSTDCALL CSharp_AI_SBBC_DEFAULT_MAX_BONES_get() {
3325 int jresult ;
3326 int result;
3327
3328 result = (int)(60);
3329 jresult = result;
3330 return jresult;
3331 }
3332
3333
33143334 SWIGEXPORT char * SWIGSTDCALL CSharp_AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE_get() {
33153335 char * jresult ;
33163336 char *result = 0 ;
33213341 }
33223342
33233343
3344 SWIGEXPORT char * SWIGSTDCALL CSharp_AI_CONFIG_PP_CT_TEXTURE_CHANNEL_INDEX_get() {
3345 char * jresult ;
3346 char *result = 0 ;
3347
3348 result = (char *)("PP_CT_TEXTURE_CHANNEL_INDEX");
3349 jresult = SWIG_csharp_string_callback((const char *)result);
3350 return jresult;
3351 }
3352
3353
33243354 SWIGEXPORT char * SWIGSTDCALL CSharp_AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE_get() {
33253355 char * jresult ;
33263356 char *result = 0 ;
34513481 }
34523482
34533483
3484 SWIGEXPORT char * SWIGSTDCALL CSharp_AI_CONFIG_PP_DB_THRESHOLD_get() {
3485 char * jresult ;
3486 char *result = 0 ;
3487
3488 result = (char *)("PP_DB_THRESHOLD");
3489 jresult = SWIG_csharp_string_callback((const char *)result);
3490 return jresult;
3491 }
3492
3493
3494 SWIGEXPORT double SWIGSTDCALL CSharp_AI_DEBONE_THRESHOLD_get() {
3495 double jresult ;
3496 double result;
3497
3498 result = (double)(1.0);
3499 jresult = result;
3500 return jresult;
3501 }
3502
3503
3504 SWIGEXPORT char * SWIGSTDCALL CSharp_AI_CONFIG_PP_DB_ALL_OR_NONE_get() {
3505 char * jresult ;
3506 char *result = 0 ;
3507
3508 result = (char *)("PP_DB_ALL_OR_NONE");
3509 jresult = SWIG_csharp_string_callback((const char *)result);
3510 return jresult;
3511 }
3512
3513
34543514 SWIGEXPORT int SWIGSTDCALL CSharp_PP_ICL_PTCACHE_SIZE_get() {
34553515 int jresult ;
34563516 int result;
37663826 char *result = 0 ;
37673827
37683828 result = (char *)("IMPORT_OGRE_MATERIAL_FILE");
3829 jresult = SWIG_csharp_string_callback((const char *)result);
3830 return jresult;
3831 }
3832
3833
3834 SWIGEXPORT char * SWIGSTDCALL CSharp_AI_CONFIG_IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME_get() {
3835 char * jresult ;
3836 char *result = 0 ;
3837
3838 result = (char *)("IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME");
3839 jresult = SWIG_csharp_string_callback((const char *)result);
3840 return jresult;
3841 }
3842
3843
3844 SWIGEXPORT char * SWIGSTDCALL CSharp_AI_CONFIG_IMPORT_IFC_SKIP_SPACE_REPRESENTATIONS_get() {
3845 char * jresult ;
3846 char *result = 0 ;
3847
3848 result = (char *)("IMPORT_IFC_SKIP_SPACE_REPRESENTATIONS");
3849 jresult = SWIG_csharp_string_callback((const char *)result);
3850 return jresult;
3851 }
3852
3853
3854 SWIGEXPORT char * SWIGSTDCALL CSharp_AI_CONFIG_IMPORT_IFC_SKIP_CURVE_REPRESENTATIONS_get() {
3855 char * jresult ;
3856 char *result = 0 ;
3857
3858 result = (char *)("IMPORT_IFC_SKIP_CURVE_REPRESENTATIONS");
3859 jresult = SWIG_csharp_string_callback((const char *)result);
3860 return jresult;
3861 }
3862
3863
3864 SWIGEXPORT char * SWIGSTDCALL CSharp_AI_CONFIG_IMPORT_IFC_CUSTOM_TRIANGULATION_get() {
3865 char * jresult ;
3866 char *result = 0 ;
3867
3868 result = (char *)("IMPORT_IFC_CUSTOM_TRIANGULATION");
37693869 jresult = SWIG_csharp_string_callback((const char *)result);
37703870 return jresult;
37713871 }
43684468 }
43694469 result = (bool)((aiString const *)arg1)->operator !=((aiString const &)*arg2);
43704470 jresult = result;
4471 return jresult;
4472 }
4473
4474
4475 SWIGEXPORT char * SWIGSTDCALL CSharp_aiString_C_Str(void * jarg1) {
4476 char * jresult ;
4477 aiString *arg1 = (aiString *) 0 ;
4478 char *result = 0 ;
4479
4480 arg1 = (aiString *)jarg1;
4481 result = (char *)((aiString const *)arg1)->C_Str();
4482 jresult = SWIG_csharp_string_callback((const char *)result);
43714483 return jresult;
43724484 }
43734485
47254837 }
47264838
47274839
4728 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVector2D__SWIG_0() {
4729 void * jresult ;
4840 SWIGEXPORT void SWIGSTDCALL CSharp_aiCamera_mName_set(void * jarg1, void * jarg2) {
4841 aiCamera *arg1 = (aiCamera *) 0 ;
4842 aiString *arg2 = (aiString *) 0 ;
4843
4844 arg1 = (aiCamera *)jarg1;
4845 arg2 = (aiString *)jarg2;
4846 if (arg1) (arg1)->mName = *arg2;
4847 }
4848
4849
4850 SWIGEXPORT void * SWIGSTDCALL CSharp_aiCamera_mName_get(void * jarg1) {
4851 void * jresult ;
4852 aiCamera *arg1 = (aiCamera *) 0 ;
4853 aiString *result = 0 ;
4854
4855 arg1 = (aiCamera *)jarg1;
4856 result = (aiString *)& ((arg1)->mName);
4857 jresult = (void *)result;
4858 return jresult;
4859 }
4860
4861
4862 SWIGEXPORT void SWIGSTDCALL CSharp_aiCamera_mPosition_set(void * jarg1, void * jarg2) {
4863 aiCamera *arg1 = (aiCamera *) 0 ;
4864 aiVector3D *arg2 = (aiVector3D *) 0 ;
4865
4866 arg1 = (aiCamera *)jarg1;
4867 arg2 = (aiVector3D *)jarg2;
4868 if (arg1) (arg1)->mPosition = *arg2;
4869 }
4870
4871
4872 SWIGEXPORT void * SWIGSTDCALL CSharp_aiCamera_mPosition_get(void * jarg1) {
4873 void * jresult ;
4874 aiCamera *arg1 = (aiCamera *) 0 ;
4875 aiVector3D *result = 0 ;
4876
4877 arg1 = (aiCamera *)jarg1;
4878 result = (aiVector3D *)& ((arg1)->mPosition);
4879 jresult = (void *)result;
4880 return jresult;
4881 }
4882
4883
4884 SWIGEXPORT void SWIGSTDCALL CSharp_aiCamera_mUp_set(void * jarg1, void * jarg2) {
4885 aiCamera *arg1 = (aiCamera *) 0 ;
4886 aiVector3D *arg2 = (aiVector3D *) 0 ;
4887
4888 arg1 = (aiCamera *)jarg1;
4889 arg2 = (aiVector3D *)jarg2;
4890 if (arg1) (arg1)->mUp = *arg2;
4891 }
4892
4893
4894 SWIGEXPORT void * SWIGSTDCALL CSharp_aiCamera_mUp_get(void * jarg1) {
4895 void * jresult ;
4896 aiCamera *arg1 = (aiCamera *) 0 ;
4897 aiVector3D *result = 0 ;
4898
4899 arg1 = (aiCamera *)jarg1;
4900 result = (aiVector3D *)& ((arg1)->mUp);
4901 jresult = (void *)result;
4902 return jresult;
4903 }
4904
4905
4906 SWIGEXPORT void SWIGSTDCALL CSharp_aiCamera_mLookAt_set(void * jarg1, void * jarg2) {
4907 aiCamera *arg1 = (aiCamera *) 0 ;
4908 aiVector3D *arg2 = (aiVector3D *) 0 ;
4909
4910 arg1 = (aiCamera *)jarg1;
4911 arg2 = (aiVector3D *)jarg2;
4912 if (arg1) (arg1)->mLookAt = *arg2;
4913 }
4914
4915
4916 SWIGEXPORT void * SWIGSTDCALL CSharp_aiCamera_mLookAt_get(void * jarg1) {
4917 void * jresult ;
4918 aiCamera *arg1 = (aiCamera *) 0 ;
4919 aiVector3D *result = 0 ;
4920
4921 arg1 = (aiCamera *)jarg1;
4922 result = (aiVector3D *)& ((arg1)->mLookAt);
4923 jresult = (void *)result;
4924 return jresult;
4925 }
4926
4927
4928 SWIGEXPORT void SWIGSTDCALL CSharp_aiCamera_mHorizontalFOV_set(void * jarg1, float jarg2) {
4929 aiCamera *arg1 = (aiCamera *) 0 ;
4930 float arg2 ;
4931
4932 arg1 = (aiCamera *)jarg1;
4933 arg2 = (float)jarg2;
4934 if (arg1) (arg1)->mHorizontalFOV = arg2;
4935 }
4936
4937
4938 SWIGEXPORT float SWIGSTDCALL CSharp_aiCamera_mHorizontalFOV_get(void * jarg1) {
4939 float jresult ;
4940 aiCamera *arg1 = (aiCamera *) 0 ;
4941 float result;
4942
4943 arg1 = (aiCamera *)jarg1;
4944 result = (float) ((arg1)->mHorizontalFOV);
4945 jresult = result;
4946 return jresult;
4947 }
4948
4949
4950 SWIGEXPORT void SWIGSTDCALL CSharp_aiCamera_mClipPlaneNear_set(void * jarg1, float jarg2) {
4951 aiCamera *arg1 = (aiCamera *) 0 ;
4952 float arg2 ;
4953
4954 arg1 = (aiCamera *)jarg1;
4955 arg2 = (float)jarg2;
4956 if (arg1) (arg1)->mClipPlaneNear = arg2;
4957 }
4958
4959
4960 SWIGEXPORT float SWIGSTDCALL CSharp_aiCamera_mClipPlaneNear_get(void * jarg1) {
4961 float jresult ;
4962 aiCamera *arg1 = (aiCamera *) 0 ;
4963 float result;
4964
4965 arg1 = (aiCamera *)jarg1;
4966 result = (float) ((arg1)->mClipPlaneNear);
4967 jresult = result;
4968 return jresult;
4969 }
4970
4971
4972 SWIGEXPORT void SWIGSTDCALL CSharp_aiCamera_mClipPlaneFar_set(void * jarg1, float jarg2) {
4973 aiCamera *arg1 = (aiCamera *) 0 ;
4974 float arg2 ;
4975
4976 arg1 = (aiCamera *)jarg1;
4977 arg2 = (float)jarg2;
4978 if (arg1) (arg1)->mClipPlaneFar = arg2;
4979 }
4980
4981
4982 SWIGEXPORT float SWIGSTDCALL CSharp_aiCamera_mClipPlaneFar_get(void * jarg1) {
4983 float jresult ;
4984 aiCamera *arg1 = (aiCamera *) 0 ;
4985 float result;
4986
4987 arg1 = (aiCamera *)jarg1;
4988 result = (float) ((arg1)->mClipPlaneFar);
4989 jresult = result;
4990 return jresult;
4991 }
4992
4993
4994 SWIGEXPORT void SWIGSTDCALL CSharp_aiCamera_mAspect_set(void * jarg1, float jarg2) {
4995 aiCamera *arg1 = (aiCamera *) 0 ;
4996 float arg2 ;
4997
4998 arg1 = (aiCamera *)jarg1;
4999 arg2 = (float)jarg2;
5000 if (arg1) (arg1)->mAspect = arg2;
5001 }
5002
5003
5004 SWIGEXPORT float SWIGSTDCALL CSharp_aiCamera_mAspect_get(void * jarg1) {
5005 float jresult ;
5006 aiCamera *arg1 = (aiCamera *) 0 ;
5007 float result;
5008
5009 arg1 = (aiCamera *)jarg1;
5010 result = (float) ((arg1)->mAspect);
5011 jresult = result;
5012 return jresult;
5013 }
5014
5015
5016 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiCamera() {
5017 void * jresult ;
5018 aiCamera *result = 0 ;
5019
5020 result = (aiCamera *)new aiCamera();
5021 jresult = (void *)result;
5022 return jresult;
5023 }
5024
5025
5026 SWIGEXPORT void SWIGSTDCALL CSharp_aiCamera_GetCameraMatrix(void * jarg1, void * jarg2) {
5027 aiCamera *arg1 = (aiCamera *) 0 ;
5028 aiMatrix4x4 *arg2 = 0 ;
5029
5030 arg1 = (aiCamera *)jarg1;
5031 arg2 = (aiMatrix4x4 *)jarg2;
5032 if (!arg2) {
5033 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4 & type is null", 0);
5034 return ;
5035 }
5036 ((aiCamera const *)arg1)->GetCameraMatrix(*arg2);
5037 }
5038
5039
5040 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiCamera(void * jarg1) {
5041 aiCamera *arg1 = (aiCamera *) 0 ;
5042
5043 arg1 = (aiCamera *)jarg1;
5044 delete arg1;
5045 }
5046
5047
5048 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mName_set(void * jarg1, void * jarg2) {
5049 aiLight *arg1 = (aiLight *) 0 ;
5050 aiString *arg2 = (aiString *) 0 ;
5051
5052 arg1 = (aiLight *)jarg1;
5053 arg2 = (aiString *)jarg2;
5054 if (arg1) (arg1)->mName = *arg2;
5055 }
5056
5057
5058 SWIGEXPORT void * SWIGSTDCALL CSharp_aiLight_mName_get(void * jarg1) {
5059 void * jresult ;
5060 aiLight *arg1 = (aiLight *) 0 ;
5061 aiString *result = 0 ;
5062
5063 arg1 = (aiLight *)jarg1;
5064 result = (aiString *)& ((arg1)->mName);
5065 jresult = (void *)result;
5066 return jresult;
5067 }
5068
5069
5070 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mType_set(void * jarg1, int jarg2) {
5071 aiLight *arg1 = (aiLight *) 0 ;
5072 aiLightSourceType arg2 ;
5073
5074 arg1 = (aiLight *)jarg1;
5075 arg2 = (aiLightSourceType)jarg2;
5076 if (arg1) (arg1)->mType = arg2;
5077 }
5078
5079
5080 SWIGEXPORT int SWIGSTDCALL CSharp_aiLight_mType_get(void * jarg1) {
5081 int jresult ;
5082 aiLight *arg1 = (aiLight *) 0 ;
5083 aiLightSourceType result;
5084
5085 arg1 = (aiLight *)jarg1;
5086 result = (aiLightSourceType) ((arg1)->mType);
5087 jresult = result;
5088 return jresult;
5089 }
5090
5091
5092 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mPosition_set(void * jarg1, void * jarg2) {
5093 aiLight *arg1 = (aiLight *) 0 ;
5094 aiVector3D *arg2 = (aiVector3D *) 0 ;
5095
5096 arg1 = (aiLight *)jarg1;
5097 arg2 = (aiVector3D *)jarg2;
5098 if (arg1) (arg1)->mPosition = *arg2;
5099 }
5100
5101
5102 SWIGEXPORT void * SWIGSTDCALL CSharp_aiLight_mPosition_get(void * jarg1) {
5103 void * jresult ;
5104 aiLight *arg1 = (aiLight *) 0 ;
5105 aiVector3D *result = 0 ;
5106
5107 arg1 = (aiLight *)jarg1;
5108 result = (aiVector3D *)& ((arg1)->mPosition);
5109 jresult = (void *)result;
5110 return jresult;
5111 }
5112
5113
5114 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mDirection_set(void * jarg1, void * jarg2) {
5115 aiLight *arg1 = (aiLight *) 0 ;
5116 aiVector3D *arg2 = (aiVector3D *) 0 ;
5117
5118 arg1 = (aiLight *)jarg1;
5119 arg2 = (aiVector3D *)jarg2;
5120 if (arg1) (arg1)->mDirection = *arg2;
5121 }
5122
5123
5124 SWIGEXPORT void * SWIGSTDCALL CSharp_aiLight_mDirection_get(void * jarg1) {
5125 void * jresult ;
5126 aiLight *arg1 = (aiLight *) 0 ;
5127 aiVector3D *result = 0 ;
5128
5129 arg1 = (aiLight *)jarg1;
5130 result = (aiVector3D *)& ((arg1)->mDirection);
5131 jresult = (void *)result;
5132 return jresult;
5133 }
5134
5135
5136 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mAttenuationConstant_set(void * jarg1, float jarg2) {
5137 aiLight *arg1 = (aiLight *) 0 ;
5138 float arg2 ;
5139
5140 arg1 = (aiLight *)jarg1;
5141 arg2 = (float)jarg2;
5142 if (arg1) (arg1)->mAttenuationConstant = arg2;
5143 }
5144
5145
5146 SWIGEXPORT float SWIGSTDCALL CSharp_aiLight_mAttenuationConstant_get(void * jarg1) {
5147 float jresult ;
5148 aiLight *arg1 = (aiLight *) 0 ;
5149 float result;
5150
5151 arg1 = (aiLight *)jarg1;
5152 result = (float) ((arg1)->mAttenuationConstant);
5153 jresult = result;
5154 return jresult;
5155 }
5156
5157
5158 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mAttenuationLinear_set(void * jarg1, float jarg2) {
5159 aiLight *arg1 = (aiLight *) 0 ;
5160 float arg2 ;
5161
5162 arg1 = (aiLight *)jarg1;
5163 arg2 = (float)jarg2;
5164 if (arg1) (arg1)->mAttenuationLinear = arg2;
5165 }
5166
5167
5168 SWIGEXPORT float SWIGSTDCALL CSharp_aiLight_mAttenuationLinear_get(void * jarg1) {
5169 float jresult ;
5170 aiLight *arg1 = (aiLight *) 0 ;
5171 float result;
5172
5173 arg1 = (aiLight *)jarg1;
5174 result = (float) ((arg1)->mAttenuationLinear);
5175 jresult = result;
5176 return jresult;
5177 }
5178
5179
5180 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mAttenuationQuadratic_set(void * jarg1, float jarg2) {
5181 aiLight *arg1 = (aiLight *) 0 ;
5182 float arg2 ;
5183
5184 arg1 = (aiLight *)jarg1;
5185 arg2 = (float)jarg2;
5186 if (arg1) (arg1)->mAttenuationQuadratic = arg2;
5187 }
5188
5189
5190 SWIGEXPORT float SWIGSTDCALL CSharp_aiLight_mAttenuationQuadratic_get(void * jarg1) {
5191 float jresult ;
5192 aiLight *arg1 = (aiLight *) 0 ;
5193 float result;
5194
5195 arg1 = (aiLight *)jarg1;
5196 result = (float) ((arg1)->mAttenuationQuadratic);
5197 jresult = result;
5198 return jresult;
5199 }
5200
5201
5202 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mColorDiffuse_set(void * jarg1, void * jarg2) {
5203 aiLight *arg1 = (aiLight *) 0 ;
5204 aiColor3D *arg2 = (aiColor3D *) 0 ;
5205
5206 arg1 = (aiLight *)jarg1;
5207 arg2 = (aiColor3D *)jarg2;
5208 if (arg1) (arg1)->mColorDiffuse = *arg2;
5209 }
5210
5211
5212 SWIGEXPORT void * SWIGSTDCALL CSharp_aiLight_mColorDiffuse_get(void * jarg1) {
5213 void * jresult ;
5214 aiLight *arg1 = (aiLight *) 0 ;
5215 aiColor3D *result = 0 ;
5216
5217 arg1 = (aiLight *)jarg1;
5218 result = (aiColor3D *)& ((arg1)->mColorDiffuse);
5219 jresult = (void *)result;
5220 return jresult;
5221 }
5222
5223
5224 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mColorSpecular_set(void * jarg1, void * jarg2) {
5225 aiLight *arg1 = (aiLight *) 0 ;
5226 aiColor3D *arg2 = (aiColor3D *) 0 ;
5227
5228 arg1 = (aiLight *)jarg1;
5229 arg2 = (aiColor3D *)jarg2;
5230 if (arg1) (arg1)->mColorSpecular = *arg2;
5231 }
5232
5233
5234 SWIGEXPORT void * SWIGSTDCALL CSharp_aiLight_mColorSpecular_get(void * jarg1) {
5235 void * jresult ;
5236 aiLight *arg1 = (aiLight *) 0 ;
5237 aiColor3D *result = 0 ;
5238
5239 arg1 = (aiLight *)jarg1;
5240 result = (aiColor3D *)& ((arg1)->mColorSpecular);
5241 jresult = (void *)result;
5242 return jresult;
5243 }
5244
5245
5246 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mColorAmbient_set(void * jarg1, void * jarg2) {
5247 aiLight *arg1 = (aiLight *) 0 ;
5248 aiColor3D *arg2 = (aiColor3D *) 0 ;
5249
5250 arg1 = (aiLight *)jarg1;
5251 arg2 = (aiColor3D *)jarg2;
5252 if (arg1) (arg1)->mColorAmbient = *arg2;
5253 }
5254
5255
5256 SWIGEXPORT void * SWIGSTDCALL CSharp_aiLight_mColorAmbient_get(void * jarg1) {
5257 void * jresult ;
5258 aiLight *arg1 = (aiLight *) 0 ;
5259 aiColor3D *result = 0 ;
5260
5261 arg1 = (aiLight *)jarg1;
5262 result = (aiColor3D *)& ((arg1)->mColorAmbient);
5263 jresult = (void *)result;
5264 return jresult;
5265 }
5266
5267
5268 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mAngleInnerCone_set(void * jarg1, float jarg2) {
5269 aiLight *arg1 = (aiLight *) 0 ;
5270 float arg2 ;
5271
5272 arg1 = (aiLight *)jarg1;
5273 arg2 = (float)jarg2;
5274 if (arg1) (arg1)->mAngleInnerCone = arg2;
5275 }
5276
5277
5278 SWIGEXPORT float SWIGSTDCALL CSharp_aiLight_mAngleInnerCone_get(void * jarg1) {
5279 float jresult ;
5280 aiLight *arg1 = (aiLight *) 0 ;
5281 float result;
5282
5283 arg1 = (aiLight *)jarg1;
5284 result = (float) ((arg1)->mAngleInnerCone);
5285 jresult = result;
5286 return jresult;
5287 }
5288
5289
5290 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mAngleOuterCone_set(void * jarg1, float jarg2) {
5291 aiLight *arg1 = (aiLight *) 0 ;
5292 float arg2 ;
5293
5294 arg1 = (aiLight *)jarg1;
5295 arg2 = (float)jarg2;
5296 if (arg1) (arg1)->mAngleOuterCone = arg2;
5297 }
5298
5299
5300 SWIGEXPORT float SWIGSTDCALL CSharp_aiLight_mAngleOuterCone_get(void * jarg1) {
5301 float jresult ;
5302 aiLight *arg1 = (aiLight *) 0 ;
5303 float result;
5304
5305 arg1 = (aiLight *)jarg1;
5306 result = (float) ((arg1)->mAngleOuterCone);
5307 jresult = result;
5308 return jresult;
5309 }
5310
5311
5312 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiLight() {
5313 void * jresult ;
5314 aiLight *result = 0 ;
5315
5316 result = (aiLight *)new aiLight();
5317 jresult = (void *)result;
5318 return jresult;
5319 }
5320
5321
5322 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiLight(void * jarg1) {
5323 aiLight *arg1 = (aiLight *) 0 ;
5324
5325 arg1 = (aiLight *)jarg1;
5326 delete arg1;
5327 }
5328
5329
5330 SWIGEXPORT void SWIGSTDCALL CSharp_aiVectorKey_mTime_set(void * jarg1, double jarg2) {
5331 aiVectorKey *arg1 = (aiVectorKey *) 0 ;
5332 double arg2 ;
5333
5334 arg1 = (aiVectorKey *)jarg1;
5335 arg2 = (double)jarg2;
5336 if (arg1) (arg1)->mTime = arg2;
5337 }
5338
5339
5340 SWIGEXPORT double SWIGSTDCALL CSharp_aiVectorKey_mTime_get(void * jarg1) {
5341 double jresult ;
5342 aiVectorKey *arg1 = (aiVectorKey *) 0 ;
5343 double result;
5344
5345 arg1 = (aiVectorKey *)jarg1;
5346 result = (double) ((arg1)->mTime);
5347 jresult = result;
5348 return jresult;
5349 }
5350
5351
5352 SWIGEXPORT void SWIGSTDCALL CSharp_aiVectorKey_mValue_set(void * jarg1, void * jarg2) {
5353 aiVectorKey *arg1 = (aiVectorKey *) 0 ;
5354 aiVector3D *arg2 = (aiVector3D *) 0 ;
5355
5356 arg1 = (aiVectorKey *)jarg1;
5357 arg2 = (aiVector3D *)jarg2;
5358 if (arg1) (arg1)->mValue = *arg2;
5359 }
5360
5361
5362 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVectorKey_mValue_get(void * jarg1) {
5363 void * jresult ;
5364 aiVectorKey *arg1 = (aiVectorKey *) 0 ;
5365 aiVector3D *result = 0 ;
5366
5367 arg1 = (aiVectorKey *)jarg1;
5368 result = (aiVector3D *)& ((arg1)->mValue);
5369 jresult = (void *)result;
5370 return jresult;
5371 }
5372
5373
5374 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVectorKey__SWIG_0() {
5375 void * jresult ;
5376 aiVectorKey *result = 0 ;
5377
5378 result = (aiVectorKey *)new aiVectorKey();
5379 jresult = (void *)result;
5380 return jresult;
5381 }
5382
5383
5384 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVectorKey__SWIG_1(double jarg1, void * jarg2) {
5385 void * jresult ;
5386 double arg1 ;
5387 aiVector3D *arg2 = 0 ;
5388 aiVectorKey *result = 0 ;
5389
5390 arg1 = (double)jarg1;
5391 arg2 = (aiVector3D *)jarg2;
5392 if (!arg2) {
5393 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D const & type is null", 0);
5394 return 0;
5395 }
5396 result = (aiVectorKey *)new aiVectorKey(arg1,(aiVector3D const &)*arg2);
5397 jresult = (void *)result;
5398 return jresult;
5399 }
5400
5401
5402 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiVectorKey___equal__(void * jarg1, void * jarg2) {
5403 unsigned int jresult ;
5404 aiVectorKey *arg1 = (aiVectorKey *) 0 ;
5405 aiVectorKey *arg2 = 0 ;
5406 bool result;
5407
5408 arg1 = (aiVectorKey *)jarg1;
5409 arg2 = (aiVectorKey *)jarg2;
5410 if (!arg2) {
5411 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVectorKey const & type is null", 0);
5412 return 0;
5413 }
5414 result = (bool)((aiVectorKey const *)arg1)->operator ==((aiVectorKey const &)*arg2);
5415 jresult = result;
5416 return jresult;
5417 }
5418
5419
5420 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiVectorKey___nequal__(void * jarg1, void * jarg2) {
5421 unsigned int jresult ;
5422 aiVectorKey *arg1 = (aiVectorKey *) 0 ;
5423 aiVectorKey *arg2 = 0 ;
5424 bool result;
5425
5426 arg1 = (aiVectorKey *)jarg1;
5427 arg2 = (aiVectorKey *)jarg2;
5428 if (!arg2) {
5429 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVectorKey const & type is null", 0);
5430 return 0;
5431 }
5432 result = (bool)((aiVectorKey const *)arg1)->operator !=((aiVectorKey const &)*arg2);
5433 jresult = result;
5434 return jresult;
5435 }
5436
5437
5438 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiVectorKey___smaller__(void * jarg1, void * jarg2) {
5439 unsigned int jresult ;
5440 aiVectorKey *arg1 = (aiVectorKey *) 0 ;
5441 aiVectorKey *arg2 = 0 ;
5442 bool result;
5443
5444 arg1 = (aiVectorKey *)jarg1;
5445 arg2 = (aiVectorKey *)jarg2;
5446 if (!arg2) {
5447 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVectorKey const & type is null", 0);
5448 return 0;
5449 }
5450 result = (bool)((aiVectorKey const *)arg1)->operator <((aiVectorKey const &)*arg2);
5451 jresult = result;
5452 return jresult;
5453 }
5454
5455
5456 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiVectorKey___greater__(void * jarg1, void * jarg2) {
5457 unsigned int jresult ;
5458 aiVectorKey *arg1 = (aiVectorKey *) 0 ;
5459 aiVectorKey *arg2 = 0 ;
5460 bool result;
5461
5462 arg1 = (aiVectorKey *)jarg1;
5463 arg2 = (aiVectorKey *)jarg2;
5464 if (!arg2) {
5465 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVectorKey const & type is null", 0);
5466 return 0;
5467 }
5468 result = (bool)((aiVectorKey const *)arg1)->operator >((aiVectorKey const &)*arg2);
5469 jresult = result;
5470 return jresult;
5471 }
5472
5473
5474 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiVectorKey(void * jarg1) {
5475 aiVectorKey *arg1 = (aiVectorKey *) 0 ;
5476
5477 arg1 = (aiVectorKey *)jarg1;
5478 delete arg1;
5479 }
5480
5481
5482 SWIGEXPORT void SWIGSTDCALL CSharp_aiQuatKey_mTime_set(void * jarg1, double jarg2) {
5483 aiQuatKey *arg1 = (aiQuatKey *) 0 ;
5484 double arg2 ;
5485
5486 arg1 = (aiQuatKey *)jarg1;
5487 arg2 = (double)jarg2;
5488 if (arg1) (arg1)->mTime = arg2;
5489 }
5490
5491
5492 SWIGEXPORT double SWIGSTDCALL CSharp_aiQuatKey_mTime_get(void * jarg1) {
5493 double jresult ;
5494 aiQuatKey *arg1 = (aiQuatKey *) 0 ;
5495 double result;
5496
5497 arg1 = (aiQuatKey *)jarg1;
5498 result = (double) ((arg1)->mTime);
5499 jresult = result;
5500 return jresult;
5501 }
5502
5503
5504 SWIGEXPORT void SWIGSTDCALL CSharp_aiQuatKey_mValue_set(void * jarg1, void * jarg2) {
5505 aiQuatKey *arg1 = (aiQuatKey *) 0 ;
5506 aiQuaternion *arg2 = (aiQuaternion *) 0 ;
5507
5508 arg1 = (aiQuatKey *)jarg1;
5509 arg2 = (aiQuaternion *)jarg2;
5510 if (arg1) (arg1)->mValue = *arg2;
5511 }
5512
5513
5514 SWIGEXPORT void * SWIGSTDCALL CSharp_aiQuatKey_mValue_get(void * jarg1) {
5515 void * jresult ;
5516 aiQuatKey *arg1 = (aiQuatKey *) 0 ;
5517 aiQuaternion *result = 0 ;
5518
5519 arg1 = (aiQuatKey *)jarg1;
5520 result = (aiQuaternion *)& ((arg1)->mValue);
5521 jresult = (void *)result;
5522 return jresult;
5523 }
5524
5525
5526 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiQuatKey__SWIG_0() {
5527 void * jresult ;
5528 aiQuatKey *result = 0 ;
5529
5530 result = (aiQuatKey *)new aiQuatKey();
5531 jresult = (void *)result;
5532 return jresult;
5533 }
5534
5535
5536 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiQuatKey__SWIG_1(double jarg1, void * jarg2) {
5537 void * jresult ;
5538 double arg1 ;
5539 aiQuaternion *arg2 = 0 ;
5540 aiQuatKey *result = 0 ;
5541
5542 arg1 = (double)jarg1;
5543 arg2 = (aiQuaternion *)jarg2;
5544 if (!arg2) {
5545 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuaternion const & type is null", 0);
5546 return 0;
5547 }
5548 result = (aiQuatKey *)new aiQuatKey(arg1,(aiQuaternion const &)*arg2);
5549 jresult = (void *)result;
5550 return jresult;
5551 }
5552
5553
5554 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiQuatKey___equal__(void * jarg1, void * jarg2) {
5555 unsigned int jresult ;
5556 aiQuatKey *arg1 = (aiQuatKey *) 0 ;
5557 aiQuatKey *arg2 = 0 ;
5558 bool result;
5559
5560 arg1 = (aiQuatKey *)jarg1;
5561 arg2 = (aiQuatKey *)jarg2;
5562 if (!arg2) {
5563 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuatKey const & type is null", 0);
5564 return 0;
5565 }
5566 result = (bool)((aiQuatKey const *)arg1)->operator ==((aiQuatKey const &)*arg2);
5567 jresult = result;
5568 return jresult;
5569 }
5570
5571
5572 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiQuatKey___nequal__(void * jarg1, void * jarg2) {
5573 unsigned int jresult ;
5574 aiQuatKey *arg1 = (aiQuatKey *) 0 ;
5575 aiQuatKey *arg2 = 0 ;
5576 bool result;
5577
5578 arg1 = (aiQuatKey *)jarg1;
5579 arg2 = (aiQuatKey *)jarg2;
5580 if (!arg2) {
5581 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuatKey const & type is null", 0);
5582 return 0;
5583 }
5584 result = (bool)((aiQuatKey const *)arg1)->operator !=((aiQuatKey const &)*arg2);
5585 jresult = result;
5586 return jresult;
5587 }
5588
5589
5590 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiQuatKey___smaller__(void * jarg1, void * jarg2) {
5591 unsigned int jresult ;
5592 aiQuatKey *arg1 = (aiQuatKey *) 0 ;
5593 aiQuatKey *arg2 = 0 ;
5594 bool result;
5595
5596 arg1 = (aiQuatKey *)jarg1;
5597 arg2 = (aiQuatKey *)jarg2;
5598 if (!arg2) {
5599 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuatKey const & type is null", 0);
5600 return 0;
5601 }
5602 result = (bool)((aiQuatKey const *)arg1)->operator <((aiQuatKey const &)*arg2);
5603 jresult = result;
5604 return jresult;
5605 }
5606
5607
5608 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiQuatKey___greater__(void * jarg1, void * jarg2) {
5609 unsigned int jresult ;
5610 aiQuatKey *arg1 = (aiQuatKey *) 0 ;
5611 aiQuatKey *arg2 = 0 ;
5612 bool result;
5613
5614 arg1 = (aiQuatKey *)jarg1;
5615 arg2 = (aiQuatKey *)jarg2;
5616 if (!arg2) {
5617 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuatKey const & type is null", 0);
5618 return 0;
5619 }
5620 result = (bool)((aiQuatKey const *)arg1)->operator >((aiQuatKey const &)*arg2);
5621 jresult = result;
5622 return jresult;
5623 }
5624
5625
5626 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiQuatKey(void * jarg1) {
5627 aiQuatKey *arg1 = (aiQuatKey *) 0 ;
5628
5629 arg1 = (aiQuatKey *)jarg1;
5630 delete arg1;
5631 }
5632
5633
5634 SWIGEXPORT void SWIGSTDCALL CSharp_aiMeshKey_mTime_set(void * jarg1, double jarg2) {
5635 aiMeshKey *arg1 = (aiMeshKey *) 0 ;
5636 double arg2 ;
5637
5638 arg1 = (aiMeshKey *)jarg1;
5639 arg2 = (double)jarg2;
5640 if (arg1) (arg1)->mTime = arg2;
5641 }
5642
5643
5644 SWIGEXPORT double SWIGSTDCALL CSharp_aiMeshKey_mTime_get(void * jarg1) {
5645 double jresult ;
5646 aiMeshKey *arg1 = (aiMeshKey *) 0 ;
5647 double result;
5648
5649 arg1 = (aiMeshKey *)jarg1;
5650 result = (double) ((arg1)->mTime);
5651 jresult = result;
5652 return jresult;
5653 }
5654
5655
5656 SWIGEXPORT void SWIGSTDCALL CSharp_aiMeshKey_mValue_set(void * jarg1, unsigned int jarg2) {
5657 aiMeshKey *arg1 = (aiMeshKey *) 0 ;
5658 unsigned int arg2 ;
5659
5660 arg1 = (aiMeshKey *)jarg1;
5661 arg2 = (unsigned int)jarg2;
5662 if (arg1) (arg1)->mValue = arg2;
5663 }
5664
5665
5666 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMeshKey_mValue_get(void * jarg1) {
5667 unsigned int jresult ;
5668 aiMeshKey *arg1 = (aiMeshKey *) 0 ;
5669 unsigned int result;
5670
5671 arg1 = (aiMeshKey *)jarg1;
5672 result = (unsigned int) ((arg1)->mValue);
5673 jresult = result;
5674 return jresult;
5675 }
5676
5677
5678 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiMeshKey__SWIG_0() {
5679 void * jresult ;
5680 aiMeshKey *result = 0 ;
5681
5682 result = (aiMeshKey *)new aiMeshKey();
5683 jresult = (void *)result;
5684 return jresult;
5685 }
5686
5687
5688 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiMeshKey__SWIG_1(double jarg1, unsigned int jarg2) {
5689 void * jresult ;
5690 double arg1 ;
5691 unsigned int arg2 ;
5692 aiMeshKey *result = 0 ;
5693
5694 arg1 = (double)jarg1;
5695 arg2 = (unsigned int)jarg2;
5696 result = (aiMeshKey *)new aiMeshKey(arg1,arg2);
5697 jresult = (void *)result;
5698 return jresult;
5699 }
5700
5701
5702 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMeshKey___equal__(void * jarg1, void * jarg2) {
5703 unsigned int jresult ;
5704 aiMeshKey *arg1 = (aiMeshKey *) 0 ;
5705 aiMeshKey *arg2 = 0 ;
5706 bool result;
5707
5708 arg1 = (aiMeshKey *)jarg1;
5709 arg2 = (aiMeshKey *)jarg2;
5710 if (!arg2) {
5711 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMeshKey const & type is null", 0);
5712 return 0;
5713 }
5714 result = (bool)((aiMeshKey const *)arg1)->operator ==((aiMeshKey const &)*arg2);
5715 jresult = result;
5716 return jresult;
5717 }
5718
5719
5720 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMeshKey___nequal__(void * jarg1, void * jarg2) {
5721 unsigned int jresult ;
5722 aiMeshKey *arg1 = (aiMeshKey *) 0 ;
5723 aiMeshKey *arg2 = 0 ;
5724 bool result;
5725
5726 arg1 = (aiMeshKey *)jarg1;
5727 arg2 = (aiMeshKey *)jarg2;
5728 if (!arg2) {
5729 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMeshKey const & type is null", 0);
5730 return 0;
5731 }
5732 result = (bool)((aiMeshKey const *)arg1)->operator !=((aiMeshKey const &)*arg2);
5733 jresult = result;
5734 return jresult;
5735 }
5736
5737
5738 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMeshKey___smaller__(void * jarg1, void * jarg2) {
5739 unsigned int jresult ;
5740 aiMeshKey *arg1 = (aiMeshKey *) 0 ;
5741 aiMeshKey *arg2 = 0 ;
5742 bool result;
5743
5744 arg1 = (aiMeshKey *)jarg1;
5745 arg2 = (aiMeshKey *)jarg2;
5746 if (!arg2) {
5747 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMeshKey const & type is null", 0);
5748 return 0;
5749 }
5750 result = (bool)((aiMeshKey const *)arg1)->operator <((aiMeshKey const &)*arg2);
5751 jresult = result;
5752 return jresult;
5753 }
5754
5755
5756 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMeshKey___greater__(void * jarg1, void * jarg2) {
5757 unsigned int jresult ;
5758 aiMeshKey *arg1 = (aiMeshKey *) 0 ;
5759 aiMeshKey *arg2 = 0 ;
5760 bool result;
5761
5762 arg1 = (aiMeshKey *)jarg1;
5763 arg2 = (aiMeshKey *)jarg2;
5764 if (!arg2) {
5765 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMeshKey const & type is null", 0);
5766 return 0;
5767 }
5768 result = (bool)((aiMeshKey const *)arg1)->operator >((aiMeshKey const &)*arg2);
5769 jresult = result;
5770 return jresult;
5771 }
5772
5773
5774 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiMeshKey(void * jarg1) {
5775 aiMeshKey *arg1 = (aiMeshKey *) 0 ;
5776
5777 arg1 = (aiMeshKey *)jarg1;
5778 delete arg1;
5779 }
5780
5781
5782 SWIGEXPORT void SWIGSTDCALL CSharp_aiNodeAnim_mNodeName_set(void * jarg1, void * jarg2) {
5783 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
5784 aiString *arg2 = (aiString *) 0 ;
5785
5786 arg1 = (aiNodeAnim *)jarg1;
5787 arg2 = (aiString *)jarg2;
5788 if (arg1) (arg1)->mNodeName = *arg2;
5789 }
5790
5791
5792 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNodeAnim_mNodeName_get(void * jarg1) {
5793 void * jresult ;
5794 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
5795 aiString *result = 0 ;
5796
5797 arg1 = (aiNodeAnim *)jarg1;
5798 result = (aiString *)& ((arg1)->mNodeName);
5799 jresult = (void *)result;
5800 return jresult;
5801 }
5802
5803
5804 SWIGEXPORT void SWIGSTDCALL CSharp_aiNodeAnim_mNumPositionKeys_set(void * jarg1, unsigned int jarg2) {
5805 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
5806 unsigned int arg2 ;
5807
5808 arg1 = (aiNodeAnim *)jarg1;
5809 arg2 = (unsigned int)jarg2;
5810 if (arg1) (arg1)->mNumPositionKeys = arg2;
5811 }
5812
5813
5814 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiNodeAnim_mNumPositionKeys_get(void * jarg1) {
5815 unsigned int jresult ;
5816 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
5817 unsigned int result;
5818
5819 arg1 = (aiNodeAnim *)jarg1;
5820 result = (unsigned int) ((arg1)->mNumPositionKeys);
5821 jresult = result;
5822 return jresult;
5823 }
5824
5825
5826 SWIGEXPORT void SWIGSTDCALL CSharp_aiNodeAnim_mNumRotationKeys_set(void * jarg1, unsigned int jarg2) {
5827 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
5828 unsigned int arg2 ;
5829
5830 arg1 = (aiNodeAnim *)jarg1;
5831 arg2 = (unsigned int)jarg2;
5832 if (arg1) (arg1)->mNumRotationKeys = arg2;
5833 }
5834
5835
5836 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiNodeAnim_mNumRotationKeys_get(void * jarg1) {
5837 unsigned int jresult ;
5838 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
5839 unsigned int result;
5840
5841 arg1 = (aiNodeAnim *)jarg1;
5842 result = (unsigned int) ((arg1)->mNumRotationKeys);
5843 jresult = result;
5844 return jresult;
5845 }
5846
5847
5848 SWIGEXPORT void SWIGSTDCALL CSharp_aiNodeAnim_mNumScalingKeys_set(void * jarg1, unsigned int jarg2) {
5849 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
5850 unsigned int arg2 ;
5851
5852 arg1 = (aiNodeAnim *)jarg1;
5853 arg2 = (unsigned int)jarg2;
5854 if (arg1) (arg1)->mNumScalingKeys = arg2;
5855 }
5856
5857
5858 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiNodeAnim_mNumScalingKeys_get(void * jarg1) {
5859 unsigned int jresult ;
5860 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
5861 unsigned int result;
5862
5863 arg1 = (aiNodeAnim *)jarg1;
5864 result = (unsigned int) ((arg1)->mNumScalingKeys);
5865 jresult = result;
5866 return jresult;
5867 }
5868
5869
5870 SWIGEXPORT void SWIGSTDCALL CSharp_aiNodeAnim_mPreState_set(void * jarg1, int jarg2) {
5871 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
5872 aiAnimBehaviour arg2 ;
5873
5874 arg1 = (aiNodeAnim *)jarg1;
5875 arg2 = (aiAnimBehaviour)jarg2;
5876 if (arg1) (arg1)->mPreState = arg2;
5877 }
5878
5879
5880 SWIGEXPORT int SWIGSTDCALL CSharp_aiNodeAnim_mPreState_get(void * jarg1) {
5881 int jresult ;
5882 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
5883 aiAnimBehaviour result;
5884
5885 arg1 = (aiNodeAnim *)jarg1;
5886 result = (aiAnimBehaviour) ((arg1)->mPreState);
5887 jresult = result;
5888 return jresult;
5889 }
5890
5891
5892 SWIGEXPORT void SWIGSTDCALL CSharp_aiNodeAnim_mPostState_set(void * jarg1, int jarg2) {
5893 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
5894 aiAnimBehaviour arg2 ;
5895
5896 arg1 = (aiNodeAnim *)jarg1;
5897 arg2 = (aiAnimBehaviour)jarg2;
5898 if (arg1) (arg1)->mPostState = arg2;
5899 }
5900
5901
5902 SWIGEXPORT int SWIGSTDCALL CSharp_aiNodeAnim_mPostState_get(void * jarg1) {
5903 int jresult ;
5904 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
5905 aiAnimBehaviour result;
5906
5907 arg1 = (aiNodeAnim *)jarg1;
5908 result = (aiAnimBehaviour) ((arg1)->mPostState);
5909 jresult = result;
5910 return jresult;
5911 }
5912
5913
5914 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiNodeAnim() {
5915 void * jresult ;
5916 aiNodeAnim *result = 0 ;
5917
5918 result = (aiNodeAnim *)new aiNodeAnim();
5919 jresult = (void *)result;
5920 return jresult;
5921 }
5922
5923
5924 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiNodeAnim(void * jarg1) {
5925 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
5926
5927 arg1 = (aiNodeAnim *)jarg1;
5928 delete arg1;
5929 }
5930
5931
5932 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNodeAnim_GetmPositionKeys(void * jarg1) {
5933 void * jresult ;
5934 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
5935 std::vector< aiVectorKey * > *result = 0 ;
5936
5937 arg1 = (aiNodeAnim *)jarg1;
5938 result = (std::vector< aiVectorKey * > *)aiNodeAnim_GetmPositionKeys(arg1);
5939 jresult = (void *)result;
5940 return jresult;
5941 }
5942
5943
5944 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNodeAnim_GetmRotationKeys(void * jarg1) {
5945 void * jresult ;
5946 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
5947 std::vector< aiQuatKey * > *result = 0 ;
5948
5949 arg1 = (aiNodeAnim *)jarg1;
5950 result = (std::vector< aiQuatKey * > *)aiNodeAnim_GetmRotationKeys(arg1);
5951 jresult = (void *)result;
5952 return jresult;
5953 }
5954
5955
5956 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNodeAnim_GetmScalingKeys(void * jarg1) {
5957 void * jresult ;
5958 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
5959 std::vector< aiVectorKey * > *result = 0 ;
5960
5961 arg1 = (aiNodeAnim *)jarg1;
5962 result = (std::vector< aiVectorKey * > *)aiNodeAnim_GetmScalingKeys(arg1);
5963 jresult = (void *)result;
5964 return jresult;
5965 }
5966
5967
5968 SWIGEXPORT void SWIGSTDCALL CSharp_aiMeshAnim_mName_set(void * jarg1, void * jarg2) {
5969 aiMeshAnim *arg1 = (aiMeshAnim *) 0 ;
5970 aiString *arg2 = (aiString *) 0 ;
5971
5972 arg1 = (aiMeshAnim *)jarg1;
5973 arg2 = (aiString *)jarg2;
5974 if (arg1) (arg1)->mName = *arg2;
5975 }
5976
5977
5978 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMeshAnim_mName_get(void * jarg1) {
5979 void * jresult ;
5980 aiMeshAnim *arg1 = (aiMeshAnim *) 0 ;
5981 aiString *result = 0 ;
5982
5983 arg1 = (aiMeshAnim *)jarg1;
5984 result = (aiString *)& ((arg1)->mName);
5985 jresult = (void *)result;
5986 return jresult;
5987 }
5988
5989
5990 SWIGEXPORT void SWIGSTDCALL CSharp_aiMeshAnim_mNumKeys_set(void * jarg1, unsigned int jarg2) {
5991 aiMeshAnim *arg1 = (aiMeshAnim *) 0 ;
5992 unsigned int arg2 ;
5993
5994 arg1 = (aiMeshAnim *)jarg1;
5995 arg2 = (unsigned int)jarg2;
5996 if (arg1) (arg1)->mNumKeys = arg2;
5997 }
5998
5999
6000 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMeshAnim_mNumKeys_get(void * jarg1) {
6001 unsigned int jresult ;
6002 aiMeshAnim *arg1 = (aiMeshAnim *) 0 ;
6003 unsigned int result;
6004
6005 arg1 = (aiMeshAnim *)jarg1;
6006 result = (unsigned int) ((arg1)->mNumKeys);
6007 jresult = result;
6008 return jresult;
6009 }
6010
6011
6012 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiMeshAnim() {
6013 void * jresult ;
6014 aiMeshAnim *result = 0 ;
6015
6016 result = (aiMeshAnim *)new aiMeshAnim();
6017 jresult = (void *)result;
6018 return jresult;
6019 }
6020
6021
6022 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiMeshAnim(void * jarg1) {
6023 aiMeshAnim *arg1 = (aiMeshAnim *) 0 ;
6024
6025 arg1 = (aiMeshAnim *)jarg1;
6026 delete arg1;
6027 }
6028
6029
6030 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMeshAnim_GetmKeys(void * jarg1) {
6031 void * jresult ;
6032 aiMeshAnim *arg1 = (aiMeshAnim *) 0 ;
6033 std::vector< aiMeshKey * > *result = 0 ;
6034
6035 arg1 = (aiMeshAnim *)jarg1;
6036 result = (std::vector< aiMeshKey * > *)aiMeshAnim_GetmKeys(arg1);
6037 jresult = (void *)result;
6038 return jresult;
6039 }
6040
6041
6042 SWIGEXPORT void SWIGSTDCALL CSharp_aiAnimation_mName_set(void * jarg1, void * jarg2) {
6043 aiAnimation *arg1 = (aiAnimation *) 0 ;
6044 aiString *arg2 = (aiString *) 0 ;
6045
6046 arg1 = (aiAnimation *)jarg1;
6047 arg2 = (aiString *)jarg2;
6048 if (arg1) (arg1)->mName = *arg2;
6049 }
6050
6051
6052 SWIGEXPORT void * SWIGSTDCALL CSharp_aiAnimation_mName_get(void * jarg1) {
6053 void * jresult ;
6054 aiAnimation *arg1 = (aiAnimation *) 0 ;
6055 aiString *result = 0 ;
6056
6057 arg1 = (aiAnimation *)jarg1;
6058 result = (aiString *)& ((arg1)->mName);
6059 jresult = (void *)result;
6060 return jresult;
6061 }
6062
6063
6064 SWIGEXPORT void SWIGSTDCALL CSharp_aiAnimation_mDuration_set(void * jarg1, double jarg2) {
6065 aiAnimation *arg1 = (aiAnimation *) 0 ;
6066 double arg2 ;
6067
6068 arg1 = (aiAnimation *)jarg1;
6069 arg2 = (double)jarg2;
6070 if (arg1) (arg1)->mDuration = arg2;
6071 }
6072
6073
6074 SWIGEXPORT double SWIGSTDCALL CSharp_aiAnimation_mDuration_get(void * jarg1) {
6075 double jresult ;
6076 aiAnimation *arg1 = (aiAnimation *) 0 ;
6077 double result;
6078
6079 arg1 = (aiAnimation *)jarg1;
6080 result = (double) ((arg1)->mDuration);
6081 jresult = result;
6082 return jresult;
6083 }
6084
6085
6086 SWIGEXPORT void SWIGSTDCALL CSharp_aiAnimation_mTicksPerSecond_set(void * jarg1, double jarg2) {
6087 aiAnimation *arg1 = (aiAnimation *) 0 ;
6088 double arg2 ;
6089
6090 arg1 = (aiAnimation *)jarg1;
6091 arg2 = (double)jarg2;
6092 if (arg1) (arg1)->mTicksPerSecond = arg2;
6093 }
6094
6095
6096 SWIGEXPORT double SWIGSTDCALL CSharp_aiAnimation_mTicksPerSecond_get(void * jarg1) {
6097 double jresult ;
6098 aiAnimation *arg1 = (aiAnimation *) 0 ;
6099 double result;
6100
6101 arg1 = (aiAnimation *)jarg1;
6102 result = (double) ((arg1)->mTicksPerSecond);
6103 jresult = result;
6104 return jresult;
6105 }
6106
6107
6108 SWIGEXPORT void SWIGSTDCALL CSharp_aiAnimation_mNumChannels_set(void * jarg1, unsigned int jarg2) {
6109 aiAnimation *arg1 = (aiAnimation *) 0 ;
6110 unsigned int arg2 ;
6111
6112 arg1 = (aiAnimation *)jarg1;
6113 arg2 = (unsigned int)jarg2;
6114 if (arg1) (arg1)->mNumChannels = arg2;
6115 }
6116
6117
6118 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiAnimation_mNumChannels_get(void * jarg1) {
6119 unsigned int jresult ;
6120 aiAnimation *arg1 = (aiAnimation *) 0 ;
6121 unsigned int result;
6122
6123 arg1 = (aiAnimation *)jarg1;
6124 result = (unsigned int) ((arg1)->mNumChannels);
6125 jresult = result;
6126 return jresult;
6127 }
6128
6129
6130 SWIGEXPORT void SWIGSTDCALL CSharp_aiAnimation_mNumMeshChannels_set(void * jarg1, unsigned int jarg2) {
6131 aiAnimation *arg1 = (aiAnimation *) 0 ;
6132 unsigned int arg2 ;
6133
6134 arg1 = (aiAnimation *)jarg1;
6135 arg2 = (unsigned int)jarg2;
6136 if (arg1) (arg1)->mNumMeshChannels = arg2;
6137 }
6138
6139
6140 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiAnimation_mNumMeshChannels_get(void * jarg1) {
6141 unsigned int jresult ;
6142 aiAnimation *arg1 = (aiAnimation *) 0 ;
6143 unsigned int result;
6144
6145 arg1 = (aiAnimation *)jarg1;
6146 result = (unsigned int) ((arg1)->mNumMeshChannels);
6147 jresult = result;
6148 return jresult;
6149 }
6150
6151
6152 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiAnimation() {
6153 void * jresult ;
6154 aiAnimation *result = 0 ;
6155
6156 result = (aiAnimation *)new aiAnimation();
6157 jresult = (void *)result;
6158 return jresult;
6159 }
6160
6161
6162 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiAnimation(void * jarg1) {
6163 aiAnimation *arg1 = (aiAnimation *) 0 ;
6164
6165 arg1 = (aiAnimation *)jarg1;
6166 delete arg1;
6167 }
6168
6169
6170 SWIGEXPORT void * SWIGSTDCALL CSharp_aiAnimation_GetmChannels(void * jarg1) {
6171 void * jresult ;
6172 aiAnimation *arg1 = (aiAnimation *) 0 ;
6173 std::vector< aiNodeAnim * > *result = 0 ;
6174
6175 arg1 = (aiAnimation *)jarg1;
6176 result = (std::vector< aiNodeAnim * > *)aiAnimation_GetmChannels(arg1);
6177 jresult = (void *)result;
6178 return jresult;
6179 }
6180
6181
6182 SWIGEXPORT void * SWIGSTDCALL CSharp_aiAnimation_GetmMeshChannels(void * jarg1) {
6183 void * jresult ;
6184 aiAnimation *arg1 = (aiAnimation *) 0 ;
6185 std::vector< aiMeshAnim * > *result = 0 ;
6186
6187 arg1 = (aiAnimation *)jarg1;
6188 result = (std::vector< aiMeshAnim * > *)aiAnimation_GetmMeshChannels(arg1);
6189 jresult = (void *)result;
6190 return jresult;
6191 }
6192
6193
6194 SWIGEXPORT int SWIGSTDCALL CSharp_AI_MAX_FACE_INDICES_get() {
6195 int jresult ;
6196 int result;
6197
6198 result = (int)(0x7fff);
6199 jresult = result;
6200 return jresult;
6201 }
6202
6203
6204 SWIGEXPORT int SWIGSTDCALL CSharp_AI_MAX_BONE_WEIGHTS_get() {
6205 int jresult ;
6206 int result;
6207
6208 result = (int)(0x7fffffff);
6209 jresult = result;
6210 return jresult;
6211 }
6212
6213
6214 SWIGEXPORT int SWIGSTDCALL CSharp_AI_MAX_VERTICES_get() {
6215 int jresult ;
6216 int result;
6217
6218 result = (int)(0x7fffffff);
6219 jresult = result;
6220 return jresult;
6221 }
6222
6223
6224 SWIGEXPORT int SWIGSTDCALL CSharp_AI_MAX_FACES_get() {
6225 int jresult ;
6226 int result;
6227
6228 result = (int)(0x7fffffff);
6229 jresult = result;
6230 return jresult;
6231 }
6232
6233
6234 SWIGEXPORT int SWIGSTDCALL CSharp_AI_MAX_NUMBER_OF_COLOR_SETS_get() {
6235 int jresult ;
6236 int result;
6237
6238 result = (int)(0x8);
6239 jresult = result;
6240 return jresult;
6241 }
6242
6243
6244 SWIGEXPORT int SWIGSTDCALL CSharp_AI_MAX_NUMBER_OF_TEXTURECOORDS_get() {
6245 int jresult ;
6246 int result;
6247
6248 result = (int)(0x8);
6249 jresult = result;
6250 return jresult;
6251 }
6252
6253
6254 SWIGEXPORT void SWIGSTDCALL CSharp_aiFace_mNumIndices_set(void * jarg1, unsigned int jarg2) {
6255 aiFace *arg1 = (aiFace *) 0 ;
6256 unsigned int arg2 ;
6257
6258 arg1 = (aiFace *)jarg1;
6259 arg2 = (unsigned int)jarg2;
6260 if (arg1) (arg1)->mNumIndices = arg2;
6261 }
6262
6263
6264 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiFace_mNumIndices_get(void * jarg1) {
6265 unsigned int jresult ;
6266 aiFace *arg1 = (aiFace *) 0 ;
6267 unsigned int result;
6268
6269 arg1 = (aiFace *)jarg1;
6270 result = (unsigned int) ((arg1)->mNumIndices);
6271 jresult = result;
6272 return jresult;
6273 }
6274
6275
6276 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiFace__SWIG_0() {
6277 void * jresult ;
6278 aiFace *result = 0 ;
6279
6280 result = (aiFace *)new aiFace();
6281 jresult = (void *)result;
6282 return jresult;
6283 }
6284
6285
6286 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiFace(void * jarg1) {
6287 aiFace *arg1 = (aiFace *) 0 ;
6288
6289 arg1 = (aiFace *)jarg1;
6290 delete arg1;
6291 }
6292
6293
6294 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiFace__SWIG_1(void * jarg1) {
6295 void * jresult ;
6296 aiFace *arg1 = 0 ;
6297 aiFace *result = 0 ;
6298
6299 arg1 = (aiFace *)jarg1;
6300 if (!arg1) {
6301 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiFace const & type is null", 0);
6302 return 0;
6303 }
6304 result = (aiFace *)new aiFace((aiFace const &)*arg1);
6305 jresult = (void *)result;
6306 return jresult;
6307 }
6308
6309
6310 SWIGEXPORT void * SWIGSTDCALL CSharp_aiFace___set__(void * jarg1, void * jarg2) {
6311 void * jresult ;
6312 aiFace *arg1 = (aiFace *) 0 ;
6313 aiFace *arg2 = 0 ;
6314 aiFace *result = 0 ;
6315
6316 arg1 = (aiFace *)jarg1;
6317 arg2 = (aiFace *)jarg2;
6318 if (!arg2) {
6319 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiFace const & type is null", 0);
6320 return 0;
6321 }
6322 result = (aiFace *) &(arg1)->operator =((aiFace const &)*arg2);
6323 jresult = (void *)result;
6324 return jresult;
6325 }
6326
6327
6328 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiFace___equal__(void * jarg1, void * jarg2) {
6329 unsigned int jresult ;
6330 aiFace *arg1 = (aiFace *) 0 ;
6331 aiFace *arg2 = 0 ;
6332 bool result;
6333
6334 arg1 = (aiFace *)jarg1;
6335 arg2 = (aiFace *)jarg2;
6336 if (!arg2) {
6337 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiFace const & type is null", 0);
6338 return 0;
6339 }
6340 result = (bool)((aiFace const *)arg1)->operator ==((aiFace const &)*arg2);
6341 jresult = result;
6342 return jresult;
6343 }
6344
6345
6346 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiFace___nequal__(void * jarg1, void * jarg2) {
6347 unsigned int jresult ;
6348 aiFace *arg1 = (aiFace *) 0 ;
6349 aiFace *arg2 = 0 ;
6350 bool result;
6351
6352 arg1 = (aiFace *)jarg1;
6353 arg2 = (aiFace *)jarg2;
6354 if (!arg2) {
6355 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiFace const & type is null", 0);
6356 return 0;
6357 }
6358 result = (bool)((aiFace const *)arg1)->operator !=((aiFace const &)*arg2);
6359 jresult = result;
6360 return jresult;
6361 }
6362
6363
6364 SWIGEXPORT void * SWIGSTDCALL CSharp_aiFace_GetmIndices(void * jarg1) {
6365 void * jresult ;
6366 aiFace *arg1 = (aiFace *) 0 ;
6367 std::vector< unsigned int > *result = 0 ;
6368
6369 arg1 = (aiFace *)jarg1;
6370 result = (std::vector< unsigned int > *)aiFace_GetmIndices(arg1);
6371 jresult = (void *)result;
6372 return jresult;
6373 }
6374
6375
6376 SWIGEXPORT void SWIGSTDCALL CSharp_aiVertexWeight_mVertexId_set(void * jarg1, unsigned int jarg2) {
6377 aiVertexWeight *arg1 = (aiVertexWeight *) 0 ;
6378 unsigned int arg2 ;
6379
6380 arg1 = (aiVertexWeight *)jarg1;
6381 arg2 = (unsigned int)jarg2;
6382 if (arg1) (arg1)->mVertexId = arg2;
6383 }
6384
6385
6386 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiVertexWeight_mVertexId_get(void * jarg1) {
6387 unsigned int jresult ;
6388 aiVertexWeight *arg1 = (aiVertexWeight *) 0 ;
6389 unsigned int result;
6390
6391 arg1 = (aiVertexWeight *)jarg1;
6392 result = (unsigned int) ((arg1)->mVertexId);
6393 jresult = result;
6394 return jresult;
6395 }
6396
6397
6398 SWIGEXPORT void SWIGSTDCALL CSharp_aiVertexWeight_mWeight_set(void * jarg1, float jarg2) {
6399 aiVertexWeight *arg1 = (aiVertexWeight *) 0 ;
6400 float arg2 ;
6401
6402 arg1 = (aiVertexWeight *)jarg1;
6403 arg2 = (float)jarg2;
6404 if (arg1) (arg1)->mWeight = arg2;
6405 }
6406
6407
6408 SWIGEXPORT float SWIGSTDCALL CSharp_aiVertexWeight_mWeight_get(void * jarg1) {
6409 float jresult ;
6410 aiVertexWeight *arg1 = (aiVertexWeight *) 0 ;
6411 float result;
6412
6413 arg1 = (aiVertexWeight *)jarg1;
6414 result = (float) ((arg1)->mWeight);
6415 jresult = result;
6416 return jresult;
6417 }
6418
6419
6420 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVertexWeight__SWIG_0() {
6421 void * jresult ;
6422 aiVertexWeight *result = 0 ;
6423
6424 result = (aiVertexWeight *)new aiVertexWeight();
6425 jresult = (void *)result;
6426 return jresult;
6427 }
6428
6429
6430 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVertexWeight__SWIG_1(unsigned int jarg1, float jarg2) {
6431 void * jresult ;
6432 unsigned int arg1 ;
6433 float arg2 ;
6434 aiVertexWeight *result = 0 ;
6435
6436 arg1 = (unsigned int)jarg1;
6437 arg2 = (float)jarg2;
6438 result = (aiVertexWeight *)new aiVertexWeight(arg1,arg2);
6439 jresult = (void *)result;
6440 return jresult;
6441 }
6442
6443
6444 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiVertexWeight(void * jarg1) {
6445 aiVertexWeight *arg1 = (aiVertexWeight *) 0 ;
6446
6447 arg1 = (aiVertexWeight *)jarg1;
6448 delete arg1;
6449 }
6450
6451
6452 SWIGEXPORT void SWIGSTDCALL CSharp_aiBone_mName_set(void * jarg1, void * jarg2) {
6453 aiBone *arg1 = (aiBone *) 0 ;
6454 aiString *arg2 = (aiString *) 0 ;
6455
6456 arg1 = (aiBone *)jarg1;
6457 arg2 = (aiString *)jarg2;
6458 if (arg1) (arg1)->mName = *arg2;
6459 }
6460
6461
6462 SWIGEXPORT void * SWIGSTDCALL CSharp_aiBone_mName_get(void * jarg1) {
6463 void * jresult ;
6464 aiBone *arg1 = (aiBone *) 0 ;
6465 aiString *result = 0 ;
6466
6467 arg1 = (aiBone *)jarg1;
6468 result = (aiString *)& ((arg1)->mName);
6469 jresult = (void *)result;
6470 return jresult;
6471 }
6472
6473
6474 SWIGEXPORT void SWIGSTDCALL CSharp_aiBone_mNumWeights_set(void * jarg1, unsigned int jarg2) {
6475 aiBone *arg1 = (aiBone *) 0 ;
6476 unsigned int arg2 ;
6477
6478 arg1 = (aiBone *)jarg1;
6479 arg2 = (unsigned int)jarg2;
6480 if (arg1) (arg1)->mNumWeights = arg2;
6481 }
6482
6483
6484 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiBone_mNumWeights_get(void * jarg1) {
6485 unsigned int jresult ;
6486 aiBone *arg1 = (aiBone *) 0 ;
6487 unsigned int result;
6488
6489 arg1 = (aiBone *)jarg1;
6490 result = (unsigned int) ((arg1)->mNumWeights);
6491 jresult = result;
6492 return jresult;
6493 }
6494
6495
6496 SWIGEXPORT void SWIGSTDCALL CSharp_aiBone_mOffsetMatrix_set(void * jarg1, void * jarg2) {
6497 aiBone *arg1 = (aiBone *) 0 ;
6498 aiMatrix4x4 *arg2 = (aiMatrix4x4 *) 0 ;
6499
6500 arg1 = (aiBone *)jarg1;
6501 arg2 = (aiMatrix4x4 *)jarg2;
6502 if (arg1) (arg1)->mOffsetMatrix = *arg2;
6503 }
6504
6505
6506 SWIGEXPORT void * SWIGSTDCALL CSharp_aiBone_mOffsetMatrix_get(void * jarg1) {
6507 void * jresult ;
6508 aiBone *arg1 = (aiBone *) 0 ;
6509 aiMatrix4x4 *result = 0 ;
6510
6511 arg1 = (aiBone *)jarg1;
6512 result = (aiMatrix4x4 *)& ((arg1)->mOffsetMatrix);
6513 jresult = (void *)result;
6514 return jresult;
6515 }
6516
6517
6518 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiBone__SWIG_0() {
6519 void * jresult ;
6520 aiBone *result = 0 ;
6521
6522 result = (aiBone *)new aiBone();
6523 jresult = (void *)result;
6524 return jresult;
6525 }
6526
6527
6528 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiBone__SWIG_1(void * jarg1) {
6529 void * jresult ;
6530 aiBone *arg1 = 0 ;
6531 aiBone *result = 0 ;
6532
6533 arg1 = (aiBone *)jarg1;
6534 if (!arg1) {
6535 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiBone const & type is null", 0);
6536 return 0;
6537 }
6538 result = (aiBone *)new aiBone((aiBone const &)*arg1);
6539 jresult = (void *)result;
6540 return jresult;
6541 }
6542
6543
6544 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiBone(void * jarg1) {
6545 aiBone *arg1 = (aiBone *) 0 ;
6546
6547 arg1 = (aiBone *)jarg1;
6548 delete arg1;
6549 }
6550
6551
6552 SWIGEXPORT void * SWIGSTDCALL CSharp_aiBone_GetmWeights(void * jarg1) {
6553 void * jresult ;
6554 aiBone *arg1 = (aiBone *) 0 ;
6555 std::vector< aiVertexWeight * > *result = 0 ;
6556
6557 arg1 = (aiBone *)jarg1;
6558 result = (std::vector< aiVertexWeight * > *)aiBone_GetmWeights(arg1);
6559 jresult = (void *)result;
6560 return jresult;
6561 }
6562
6563
6564 SWIGEXPORT void SWIGSTDCALL CSharp_aiAnimMesh_mBitangents_set(void * jarg1, void * jarg2) {
6565 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
6566 aiVector3D *arg2 = (aiVector3D *) 0 ;
6567
6568 arg1 = (aiAnimMesh *)jarg1;
6569 arg2 = (aiVector3D *)jarg2;
6570 if (arg1) (arg1)->mBitangents = arg2;
6571 }
6572
6573
6574 SWIGEXPORT void * SWIGSTDCALL CSharp_aiAnimMesh_mBitangents_get(void * jarg1) {
6575 void * jresult ;
6576 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
6577 aiVector3D *result = 0 ;
6578
6579 arg1 = (aiAnimMesh *)jarg1;
6580 result = (aiVector3D *) ((arg1)->mBitangents);
6581 jresult = (void *)result;
6582 return jresult;
6583 }
6584
6585
6586 SWIGEXPORT void SWIGSTDCALL CSharp_aiAnimMesh_mNumVertices_set(void * jarg1, unsigned int jarg2) {
6587 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
6588 unsigned int arg2 ;
6589
6590 arg1 = (aiAnimMesh *)jarg1;
6591 arg2 = (unsigned int)jarg2;
6592 if (arg1) (arg1)->mNumVertices = arg2;
6593 }
6594
6595
6596 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiAnimMesh_mNumVertices_get(void * jarg1) {
6597 unsigned int jresult ;
6598 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
6599 unsigned int result;
6600
6601 arg1 = (aiAnimMesh *)jarg1;
6602 result = (unsigned int) ((arg1)->mNumVertices);
6603 jresult = result;
6604 return jresult;
6605 }
6606
6607
6608 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiAnimMesh() {
6609 void * jresult ;
6610 aiAnimMesh *result = 0 ;
6611
6612 result = (aiAnimMesh *)new aiAnimMesh();
6613 jresult = (void *)result;
6614 return jresult;
6615 }
6616
6617
6618 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiAnimMesh(void * jarg1) {
6619 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
6620
6621 arg1 = (aiAnimMesh *)jarg1;
6622 delete arg1;
6623 }
6624
6625
6626 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiAnimMesh_HasPositions(void * jarg1) {
6627 unsigned int jresult ;
6628 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
6629 bool result;
6630
6631 arg1 = (aiAnimMesh *)jarg1;
6632 result = (bool)((aiAnimMesh const *)arg1)->HasPositions();
6633 jresult = result;
6634 return jresult;
6635 }
6636
6637
6638 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiAnimMesh_HasNormals(void * jarg1) {
6639 unsigned int jresult ;
6640 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
6641 bool result;
6642
6643 arg1 = (aiAnimMesh *)jarg1;
6644 result = (bool)((aiAnimMesh const *)arg1)->HasNormals();
6645 jresult = result;
6646 return jresult;
6647 }
6648
6649
6650 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiAnimMesh_HasTangentsAndBitangents(void * jarg1) {
6651 unsigned int jresult ;
6652 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
6653 bool result;
6654
6655 arg1 = (aiAnimMesh *)jarg1;
6656 result = (bool)((aiAnimMesh const *)arg1)->HasTangentsAndBitangents();
6657 jresult = result;
6658 return jresult;
6659 }
6660
6661
6662 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiAnimMesh_HasVertexColors(void * jarg1, unsigned int jarg2) {
6663 unsigned int jresult ;
6664 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
6665 unsigned int arg2 ;
6666 bool result;
6667
6668 arg1 = (aiAnimMesh *)jarg1;
6669 arg2 = (unsigned int)jarg2;
6670 result = (bool)((aiAnimMesh const *)arg1)->HasVertexColors(arg2);
6671 jresult = result;
6672 return jresult;
6673 }
6674
6675
6676 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiAnimMesh_HasTextureCoords(void * jarg1, unsigned int jarg2) {
6677 unsigned int jresult ;
6678 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
6679 unsigned int arg2 ;
6680 bool result;
6681
6682 arg1 = (aiAnimMesh *)jarg1;
6683 arg2 = (unsigned int)jarg2;
6684 result = (bool)((aiAnimMesh const *)arg1)->HasTextureCoords(arg2);
6685 jresult = result;
6686 return jresult;
6687 }
6688
6689
6690 SWIGEXPORT void SWIGSTDCALL CSharp_aiMesh_mPrimitiveTypes_set(void * jarg1, unsigned int jarg2) {
6691 aiMesh *arg1 = (aiMesh *) 0 ;
6692 unsigned int arg2 ;
6693
6694 arg1 = (aiMesh *)jarg1;
6695 arg2 = (unsigned int)jarg2;
6696 if (arg1) (arg1)->mPrimitiveTypes = arg2;
6697 }
6698
6699
6700 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_mPrimitiveTypes_get(void * jarg1) {
6701 unsigned int jresult ;
6702 aiMesh *arg1 = (aiMesh *) 0 ;
6703 unsigned int result;
6704
6705 arg1 = (aiMesh *)jarg1;
6706 result = (unsigned int) ((arg1)->mPrimitiveTypes);
6707 jresult = result;
6708 return jresult;
6709 }
6710
6711
6712 SWIGEXPORT void SWIGSTDCALL CSharp_aiMesh_mNumVertices_set(void * jarg1, unsigned int jarg2) {
6713 aiMesh *arg1 = (aiMesh *) 0 ;
6714 unsigned int arg2 ;
6715
6716 arg1 = (aiMesh *)jarg1;
6717 arg2 = (unsigned int)jarg2;
6718 if (arg1) (arg1)->mNumVertices = arg2;
6719 }
6720
6721
6722 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_mNumVertices_get(void * jarg1) {
6723 unsigned int jresult ;
6724 aiMesh *arg1 = (aiMesh *) 0 ;
6725 unsigned int result;
6726
6727 arg1 = (aiMesh *)jarg1;
6728 result = (unsigned int) ((arg1)->mNumVertices);
6729 jresult = result;
6730 return jresult;
6731 }
6732
6733
6734 SWIGEXPORT void SWIGSTDCALL CSharp_aiMesh_mNumFaces_set(void * jarg1, unsigned int jarg2) {
6735 aiMesh *arg1 = (aiMesh *) 0 ;
6736 unsigned int arg2 ;
6737
6738 arg1 = (aiMesh *)jarg1;
6739 arg2 = (unsigned int)jarg2;
6740 if (arg1) (arg1)->mNumFaces = arg2;
6741 }
6742
6743
6744 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_mNumFaces_get(void * jarg1) {
6745 unsigned int jresult ;
6746 aiMesh *arg1 = (aiMesh *) 0 ;
6747 unsigned int result;
6748
6749 arg1 = (aiMesh *)jarg1;
6750 result = (unsigned int) ((arg1)->mNumFaces);
6751 jresult = result;
6752 return jresult;
6753 }
6754
6755
6756 SWIGEXPORT void SWIGSTDCALL CSharp_aiMesh_mNumBones_set(void * jarg1, unsigned int jarg2) {
6757 aiMesh *arg1 = (aiMesh *) 0 ;
6758 unsigned int arg2 ;
6759
6760 arg1 = (aiMesh *)jarg1;
6761 arg2 = (unsigned int)jarg2;
6762 if (arg1) (arg1)->mNumBones = arg2;
6763 }
6764
6765
6766 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_mNumBones_get(void * jarg1) {
6767 unsigned int jresult ;
6768 aiMesh *arg1 = (aiMesh *) 0 ;
6769 unsigned int result;
6770
6771 arg1 = (aiMesh *)jarg1;
6772 result = (unsigned int) ((arg1)->mNumBones);
6773 jresult = result;
6774 return jresult;
6775 }
6776
6777
6778 SWIGEXPORT void SWIGSTDCALL CSharp_aiMesh_mMaterialIndex_set(void * jarg1, unsigned int jarg2) {
6779 aiMesh *arg1 = (aiMesh *) 0 ;
6780 unsigned int arg2 ;
6781
6782 arg1 = (aiMesh *)jarg1;
6783 arg2 = (unsigned int)jarg2;
6784 if (arg1) (arg1)->mMaterialIndex = arg2;
6785 }
6786
6787
6788 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_mMaterialIndex_get(void * jarg1) {
6789 unsigned int jresult ;
6790 aiMesh *arg1 = (aiMesh *) 0 ;
6791 unsigned int result;
6792
6793 arg1 = (aiMesh *)jarg1;
6794 result = (unsigned int) ((arg1)->mMaterialIndex);
6795 jresult = result;
6796 return jresult;
6797 }
6798
6799
6800 SWIGEXPORT void SWIGSTDCALL CSharp_aiMesh_mName_set(void * jarg1, void * jarg2) {
6801 aiMesh *arg1 = (aiMesh *) 0 ;
6802 aiString *arg2 = (aiString *) 0 ;
6803
6804 arg1 = (aiMesh *)jarg1;
6805 arg2 = (aiString *)jarg2;
6806 if (arg1) (arg1)->mName = *arg2;
6807 }
6808
6809
6810 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_mName_get(void * jarg1) {
6811 void * jresult ;
6812 aiMesh *arg1 = (aiMesh *) 0 ;
6813 aiString *result = 0 ;
6814
6815 arg1 = (aiMesh *)jarg1;
6816 result = (aiString *)& ((arg1)->mName);
6817 jresult = (void *)result;
6818 return jresult;
6819 }
6820
6821
6822 SWIGEXPORT void SWIGSTDCALL CSharp_aiMesh_mNumAnimMeshes_set(void * jarg1, unsigned int jarg2) {
6823 aiMesh *arg1 = (aiMesh *) 0 ;
6824 unsigned int arg2 ;
6825
6826 arg1 = (aiMesh *)jarg1;
6827 arg2 = (unsigned int)jarg2;
6828 if (arg1) (arg1)->mNumAnimMeshes = arg2;
6829 }
6830
6831
6832 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_mNumAnimMeshes_get(void * jarg1) {
6833 unsigned int jresult ;
6834 aiMesh *arg1 = (aiMesh *) 0 ;
6835 unsigned int result;
6836
6837 arg1 = (aiMesh *)jarg1;
6838 result = (unsigned int) ((arg1)->mNumAnimMeshes);
6839 jresult = result;
6840 return jresult;
6841 }
6842
6843
6844 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiMesh() {
6845 void * jresult ;
6846 aiMesh *result = 0 ;
6847
6848 result = (aiMesh *)new aiMesh();
6849 jresult = (void *)result;
6850 return jresult;
6851 }
6852
6853
6854 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiMesh(void * jarg1) {
6855 aiMesh *arg1 = (aiMesh *) 0 ;
6856
6857 arg1 = (aiMesh *)jarg1;
6858 delete arg1;
6859 }
6860
6861
6862 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_HasPositions(void * jarg1) {
6863 unsigned int jresult ;
6864 aiMesh *arg1 = (aiMesh *) 0 ;
6865 bool result;
6866
6867 arg1 = (aiMesh *)jarg1;
6868 result = (bool)((aiMesh const *)arg1)->HasPositions();
6869 jresult = result;
6870 return jresult;
6871 }
6872
6873
6874 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_HasFaces(void * jarg1) {
6875 unsigned int jresult ;
6876 aiMesh *arg1 = (aiMesh *) 0 ;
6877 bool result;
6878
6879 arg1 = (aiMesh *)jarg1;
6880 result = (bool)((aiMesh const *)arg1)->HasFaces();
6881 jresult = result;
6882 return jresult;
6883 }
6884
6885
6886 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_HasNormals(void * jarg1) {
6887 unsigned int jresult ;
6888 aiMesh *arg1 = (aiMesh *) 0 ;
6889 bool result;
6890
6891 arg1 = (aiMesh *)jarg1;
6892 result = (bool)((aiMesh const *)arg1)->HasNormals();
6893 jresult = result;
6894 return jresult;
6895 }
6896
6897
6898 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_HasTangentsAndBitangents(void * jarg1) {
6899 unsigned int jresult ;
6900 aiMesh *arg1 = (aiMesh *) 0 ;
6901 bool result;
6902
6903 arg1 = (aiMesh *)jarg1;
6904 result = (bool)((aiMesh const *)arg1)->HasTangentsAndBitangents();
6905 jresult = result;
6906 return jresult;
6907 }
6908
6909
6910 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_HasVertexColors(void * jarg1, unsigned int jarg2) {
6911 unsigned int jresult ;
6912 aiMesh *arg1 = (aiMesh *) 0 ;
6913 unsigned int arg2 ;
6914 bool result;
6915
6916 arg1 = (aiMesh *)jarg1;
6917 arg2 = (unsigned int)jarg2;
6918 result = (bool)((aiMesh const *)arg1)->HasVertexColors(arg2);
6919 jresult = result;
6920 return jresult;
6921 }
6922
6923
6924 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_HasTextureCoords(void * jarg1, unsigned int jarg2) {
6925 unsigned int jresult ;
6926 aiMesh *arg1 = (aiMesh *) 0 ;
6927 unsigned int arg2 ;
6928 bool result;
6929
6930 arg1 = (aiMesh *)jarg1;
6931 arg2 = (unsigned int)jarg2;
6932 result = (bool)((aiMesh const *)arg1)->HasTextureCoords(arg2);
6933 jresult = result;
6934 return jresult;
6935 }
6936
6937
6938 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_GetNumUVChannels(void * jarg1) {
6939 unsigned int jresult ;
6940 aiMesh *arg1 = (aiMesh *) 0 ;
6941 unsigned int result;
6942
6943 arg1 = (aiMesh *)jarg1;
6944 result = (unsigned int)((aiMesh const *)arg1)->GetNumUVChannels();
6945 jresult = result;
6946 return jresult;
6947 }
6948
6949
6950 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_GetNumColorChannels(void * jarg1) {
6951 unsigned int jresult ;
6952 aiMesh *arg1 = (aiMesh *) 0 ;
6953 unsigned int result;
6954
6955 arg1 = (aiMesh *)jarg1;
6956 result = (unsigned int)((aiMesh const *)arg1)->GetNumColorChannels();
6957 jresult = result;
6958 return jresult;
6959 }
6960
6961
6962 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_HasBones(void * jarg1) {
6963 unsigned int jresult ;
6964 aiMesh *arg1 = (aiMesh *) 0 ;
6965 bool result;
6966
6967 arg1 = (aiMesh *)jarg1;
6968 result = (bool)((aiMesh const *)arg1)->HasBones();
6969 jresult = result;
6970 return jresult;
6971 }
6972
6973
6974 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmAnimMeshes(void * jarg1) {
6975 void * jresult ;
6976 aiMesh *arg1 = (aiMesh *) 0 ;
6977 std::vector< aiAnimMesh * > *result = 0 ;
6978
6979 arg1 = (aiMesh *)jarg1;
6980 result = (std::vector< aiAnimMesh * > *)aiMesh_GetmAnimMeshes(arg1);
6981 jresult = (void *)result;
6982 return jresult;
6983 }
6984
6985
6986 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmBitangents(void * jarg1) {
6987 void * jresult ;
6988 aiMesh *arg1 = (aiMesh *) 0 ;
6989 std::vector< aiVector3D * > *result = 0 ;
6990
6991 arg1 = (aiMesh *)jarg1;
6992 result = (std::vector< aiVector3D * > *)aiMesh_GetmBitangents(arg1);
6993 jresult = (void *)result;
6994 return jresult;
6995 }
6996
6997
6998 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmBones(void * jarg1) {
6999 void * jresult ;
7000 aiMesh *arg1 = (aiMesh *) 0 ;
7001 std::vector< aiBone * > *result = 0 ;
7002
7003 arg1 = (aiMesh *)jarg1;
7004 result = (std::vector< aiBone * > *)aiMesh_GetmBones(arg1);
7005 jresult = (void *)result;
7006 return jresult;
7007 }
7008
7009
7010 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmColors(void * jarg1) {
7011 void * jresult ;
7012 aiMesh *arg1 = (aiMesh *) 0 ;
7013 std::vector< std::vector< aiColor4D * > > *result = 0 ;
7014
7015 arg1 = (aiMesh *)jarg1;
7016 result = (std::vector< std::vector< aiColor4D * > > *)aiMesh_GetmColors(arg1);
7017 jresult = (void *)result;
7018 return jresult;
7019 }
7020
7021
7022 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmFaces(void * jarg1) {
7023 void * jresult ;
7024 aiMesh *arg1 = (aiMesh *) 0 ;
7025 std::vector< aiFace * > *result = 0 ;
7026
7027 arg1 = (aiMesh *)jarg1;
7028 result = (std::vector< aiFace * > *)aiMesh_GetmFaces(arg1);
7029 jresult = (void *)result;
7030 return jresult;
7031 }
7032
7033
7034 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmNormals(void * jarg1) {
7035 void * jresult ;
7036 aiMesh *arg1 = (aiMesh *) 0 ;
7037 std::vector< aiVector3D * > *result = 0 ;
7038
7039 arg1 = (aiMesh *)jarg1;
7040 result = (std::vector< aiVector3D * > *)aiMesh_GetmNormals(arg1);
7041 jresult = (void *)result;
7042 return jresult;
7043 }
7044
7045
7046 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmTangents(void * jarg1) {
7047 void * jresult ;
7048 aiMesh *arg1 = (aiMesh *) 0 ;
7049 std::vector< aiVector3D * > *result = 0 ;
7050
7051 arg1 = (aiMesh *)jarg1;
7052 result = (std::vector< aiVector3D * > *)aiMesh_GetmTangents(arg1);
7053 jresult = (void *)result;
7054 return jresult;
7055 }
7056
7057
7058 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmTextureCoords(void * jarg1) {
7059 void * jresult ;
7060 aiMesh *arg1 = (aiMesh *) 0 ;
7061 std::vector< std::vector< aiVector3D * > > *result = 0 ;
7062
7063 arg1 = (aiMesh *)jarg1;
7064 result = (std::vector< std::vector< aiVector3D * > > *)aiMesh_GetmTextureCoords(arg1);
7065 jresult = (void *)result;
7066 return jresult;
7067 }
7068
7069
7070 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmNumUVComponents(void * jarg1) {
7071 void * jresult ;
7072 aiMesh *arg1 = (aiMesh *) 0 ;
7073 std::vector< unsigned int > *result = 0 ;
7074
7075 arg1 = (aiMesh *)jarg1;
7076 result = (std::vector< unsigned int > *)aiMesh_GetmNumUVComponents(arg1);
7077 jresult = (void *)result;
7078 return jresult;
7079 }
7080
7081
7082 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmVertices(void * jarg1) {
7083 void * jresult ;
7084 aiMesh *arg1 = (aiMesh *) 0 ;
7085 std::vector< aiVector3D * > *result = 0 ;
7086
7087 arg1 = (aiMesh *)jarg1;
7088 result = (std::vector< aiVector3D * > *)aiMesh_GetmVertices(arg1);
7089 jresult = (void *)result;
7090 return jresult;
7091 }
7092
7093
7094 SWIGEXPORT char * SWIGSTDCALL CSharp_AI_DEFAULT_MATERIAL_NAME_get() {
7095 char * jresult ;
7096 char *result = 0 ;
7097
7098 result = (char *)("DefaultMaterial");
7099 jresult = SWIG_csharp_string_callback((const char *)result);
7100 return jresult;
7101 }
7102
7103
7104 SWIGEXPORT void SWIGSTDCALL CSharp_aiUVTransform_mTranslation_set(void * jarg1, void * jarg2) {
7105 aiUVTransform *arg1 = (aiUVTransform *) 0 ;
7106 aiVector2D *arg2 = (aiVector2D *) 0 ;
7107
7108 arg1 = (aiUVTransform *)jarg1;
7109 arg2 = (aiVector2D *)jarg2;
7110 if (arg1) (arg1)->mTranslation = *arg2;
7111 }
7112
7113
7114 SWIGEXPORT void * SWIGSTDCALL CSharp_aiUVTransform_mTranslation_get(void * jarg1) {
7115 void * jresult ;
7116 aiUVTransform *arg1 = (aiUVTransform *) 0 ;
47307117 aiVector2D *result = 0 ;
47317118
4732 result = (aiVector2D *)new aiVector2D();
4733 jresult = (void *)result;
4734 return jresult;
4735 }
4736
4737
4738 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVector2D__SWIG_1(float jarg1, float jarg2) {
4739 void * jresult ;
4740 float arg1 ;
7119 arg1 = (aiUVTransform *)jarg1;
7120 result = (aiVector2D *)& ((arg1)->mTranslation);
7121 jresult = (void *)result;
7122 return jresult;
7123 }
7124
7125
7126 SWIGEXPORT void SWIGSTDCALL CSharp_aiUVTransform_mScaling_set(void * jarg1, void * jarg2) {
7127 aiUVTransform *arg1 = (aiUVTransform *) 0 ;
7128 aiVector2D *arg2 = (aiVector2D *) 0 ;
7129
7130 arg1 = (aiUVTransform *)jarg1;
7131 arg2 = (aiVector2D *)jarg2;
7132 if (arg1) (arg1)->mScaling = *arg2;
7133 }
7134
7135
7136 SWIGEXPORT void * SWIGSTDCALL CSharp_aiUVTransform_mScaling_get(void * jarg1) {
7137 void * jresult ;
7138 aiUVTransform *arg1 = (aiUVTransform *) 0 ;
7139 aiVector2D *result = 0 ;
7140
7141 arg1 = (aiUVTransform *)jarg1;
7142 result = (aiVector2D *)& ((arg1)->mScaling);
7143 jresult = (void *)result;
7144 return jresult;
7145 }
7146
7147
7148 SWIGEXPORT void SWIGSTDCALL CSharp_aiUVTransform_mRotation_set(void * jarg1, float jarg2) {
7149 aiUVTransform *arg1 = (aiUVTransform *) 0 ;
47417150 float arg2 ;
4742 aiVector2D *result = 0 ;
4743
4744 arg1 = (float)jarg1;
7151
7152 arg1 = (aiUVTransform *)jarg1;
47457153 arg2 = (float)jarg2;
4746 result = (aiVector2D *)new aiVector2D(arg1,arg2);
4747 jresult = (void *)result;
4748 return jresult;
4749 }
4750
4751
4752 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVector2D__SWIG_2(float jarg1) {
4753 void * jresult ;
4754 float arg1 ;
4755 aiVector2D *result = 0 ;
4756
4757 arg1 = (float)jarg1;
4758 result = (aiVector2D *)new aiVector2D(arg1);
4759 jresult = (void *)result;
4760 return jresult;
4761 }
4762
4763
4764 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVector2D__SWIG_3(void * jarg1) {
4765 void * jresult ;
4766 aiVector2D *arg1 = 0 ;
4767 aiVector2D *result = 0 ;
4768
4769 arg1 = (aiVector2D *)jarg1;
7154 if (arg1) (arg1)->mRotation = arg2;
7155 }
7156
7157
7158 SWIGEXPORT float SWIGSTDCALL CSharp_aiUVTransform_mRotation_get(void * jarg1) {
7159 float jresult ;
7160 aiUVTransform *arg1 = (aiUVTransform *) 0 ;
7161 float result;
7162
7163 arg1 = (aiUVTransform *)jarg1;
7164 result = (float) ((arg1)->mRotation);
7165 jresult = result;
7166 return jresult;
7167 }
7168
7169
7170 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiUVTransform() {
7171 void * jresult ;
7172 aiUVTransform *result = 0 ;
7173
7174 result = (aiUVTransform *)new aiUVTransform();
7175 jresult = (void *)result;
7176 return jresult;
7177 }
7178
7179
7180 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiUVTransform(void * jarg1) {
7181 aiUVTransform *arg1 = (aiUVTransform *) 0 ;
7182
7183 arg1 = (aiUVTransform *)jarg1;
7184 delete arg1;
7185 }
7186
7187
7188 SWIGEXPORT void SWIGSTDCALL CSharp_aiMaterialProperty_mKey_set(void * jarg1, void * jarg2) {
7189 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
7190 aiString *arg2 = (aiString *) 0 ;
7191
7192 arg1 = (aiMaterialProperty *)jarg1;
7193 arg2 = (aiString *)jarg2;
7194 if (arg1) (arg1)->mKey = *arg2;
7195 }
7196
7197
7198 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMaterialProperty_mKey_get(void * jarg1) {
7199 void * jresult ;
7200 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
7201 aiString *result = 0 ;
7202
7203 arg1 = (aiMaterialProperty *)jarg1;
7204 result = (aiString *)& ((arg1)->mKey);
7205 jresult = (void *)result;
7206 return jresult;
7207 }
7208
7209
7210 SWIGEXPORT void SWIGSTDCALL CSharp_aiMaterialProperty_mSemantic_set(void * jarg1, unsigned int jarg2) {
7211 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
7212 unsigned int arg2 ;
7213
7214 arg1 = (aiMaterialProperty *)jarg1;
7215 arg2 = (unsigned int)jarg2;
7216 if (arg1) (arg1)->mSemantic = arg2;
7217 }
7218
7219
7220 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterialProperty_mSemantic_get(void * jarg1) {
7221 unsigned int jresult ;
7222 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
7223 unsigned int result;
7224
7225 arg1 = (aiMaterialProperty *)jarg1;
7226 result = (unsigned int) ((arg1)->mSemantic);
7227 jresult = result;
7228 return jresult;
7229 }
7230
7231
7232 SWIGEXPORT void SWIGSTDCALL CSharp_aiMaterialProperty_mIndex_set(void * jarg1, unsigned int jarg2) {
7233 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
7234 unsigned int arg2 ;
7235
7236 arg1 = (aiMaterialProperty *)jarg1;
7237 arg2 = (unsigned int)jarg2;
7238 if (arg1) (arg1)->mIndex = arg2;
7239 }
7240
7241
7242 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterialProperty_mIndex_get(void * jarg1) {
7243 unsigned int jresult ;
7244 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
7245 unsigned int result;
7246
7247 arg1 = (aiMaterialProperty *)jarg1;
7248 result = (unsigned int) ((arg1)->mIndex);
7249 jresult = result;
7250 return jresult;
7251 }
7252
7253
7254 SWIGEXPORT void SWIGSTDCALL CSharp_aiMaterialProperty_mDataLength_set(void * jarg1, unsigned int jarg2) {
7255 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
7256 unsigned int arg2 ;
7257
7258 arg1 = (aiMaterialProperty *)jarg1;
7259 arg2 = (unsigned int)jarg2;
7260 if (arg1) (arg1)->mDataLength = arg2;
7261 }
7262
7263
7264 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterialProperty_mDataLength_get(void * jarg1) {
7265 unsigned int jresult ;
7266 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
7267 unsigned int result;
7268
7269 arg1 = (aiMaterialProperty *)jarg1;
7270 result = (unsigned int) ((arg1)->mDataLength);
7271 jresult = result;
7272 return jresult;
7273 }
7274
7275
7276 SWIGEXPORT void SWIGSTDCALL CSharp_aiMaterialProperty_mType_set(void * jarg1, int jarg2) {
7277 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
7278 aiPropertyTypeInfo arg2 ;
7279
7280 arg1 = (aiMaterialProperty *)jarg1;
7281 arg2 = (aiPropertyTypeInfo)jarg2;
7282 if (arg1) (arg1)->mType = arg2;
7283 }
7284
7285
7286 SWIGEXPORT int SWIGSTDCALL CSharp_aiMaterialProperty_mType_get(void * jarg1) {
7287 int jresult ;
7288 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
7289 aiPropertyTypeInfo result;
7290
7291 arg1 = (aiMaterialProperty *)jarg1;
7292 result = (aiPropertyTypeInfo) ((arg1)->mType);
7293 jresult = result;
7294 return jresult;
7295 }
7296
7297
7298 SWIGEXPORT void SWIGSTDCALL CSharp_aiMaterialProperty_mData_set(void * jarg1, char * jarg2) {
7299 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
7300 char *arg2 = (char *) 0 ;
7301
7302 arg1 = (aiMaterialProperty *)jarg1;
7303 arg2 = (char *)jarg2;
7304 {
7305 delete [] arg1->mData;
7306 if (arg2) {
7307 arg1->mData = (char *) (new char[strlen((const char *)arg2)+1]);
7308 strcpy((char *)arg1->mData, (const char *)arg2);
7309 } else {
7310 arg1->mData = 0;
7311 }
7312 }
7313 }
7314
7315
7316 SWIGEXPORT char * SWIGSTDCALL CSharp_aiMaterialProperty_mData_get(void * jarg1) {
7317 char * jresult ;
7318 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
7319 char *result = 0 ;
7320
7321 arg1 = (aiMaterialProperty *)jarg1;
7322 result = (char *) ((arg1)->mData);
7323 jresult = SWIG_csharp_string_callback((const char *)result);
7324 return jresult;
7325 }
7326
7327
7328 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiMaterialProperty() {
7329 void * jresult ;
7330 aiMaterialProperty *result = 0 ;
7331
7332 result = (aiMaterialProperty *)new aiMaterialProperty();
7333 jresult = (void *)result;
7334 return jresult;
7335 }
7336
7337
7338 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiMaterialProperty(void * jarg1) {
7339 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
7340
7341 arg1 = (aiMaterialProperty *)jarg1;
7342 delete arg1;
7343 }
7344
7345
7346 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiMaterial() {
7347 void * jresult ;
7348 aiMaterial *result = 0 ;
7349
7350 result = (aiMaterial *)new aiMaterial();
7351 jresult = (void *)result;
7352 return jresult;
7353 }
7354
7355
7356 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiMaterial(void * jarg1) {
7357 aiMaterial *arg1 = (aiMaterial *) 0 ;
7358
7359 arg1 = (aiMaterial *)jarg1;
7360 delete arg1;
7361 }
7362
7363
7364 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureCount(void * jarg1, int jarg2) {
7365 unsigned int jresult ;
7366 aiMaterial *arg1 = (aiMaterial *) 0 ;
7367 aiTextureType arg2 ;
7368 unsigned int result;
7369
7370 arg1 = (aiMaterial *)jarg1;
7371 arg2 = (aiTextureType)jarg2;
7372 result = (unsigned int)((aiMaterial const *)arg1)->GetTextureCount(arg2);
7373 jresult = result;
7374 return jresult;
7375 }
7376
7377
7378 SWIGEXPORT int SWIGSTDCALL CSharp_aiMaterial_AddBinaryProperty(void * jarg1, void * jarg2, unsigned int jarg3, char * jarg4, unsigned int jarg5, unsigned int jarg6, int jarg7) {
7379 int jresult ;
7380 aiMaterial *arg1 = (aiMaterial *) 0 ;
7381 void *arg2 = (void *) 0 ;
7382 unsigned int arg3 ;
7383 char *arg4 = (char *) 0 ;
7384 unsigned int arg5 ;
7385 unsigned int arg6 ;
7386 aiPropertyTypeInfo arg7 ;
7387 aiReturn result;
7388
7389 arg1 = (aiMaterial *)jarg1;
7390 arg2 = (void *)jarg2;
7391 arg3 = (unsigned int)jarg3;
7392 arg4 = (char *)jarg4;
7393 arg5 = (unsigned int)jarg5;
7394 arg6 = (unsigned int)jarg6;
7395 arg7 = (aiPropertyTypeInfo)jarg7;
7396 result = (aiReturn)(arg1)->AddBinaryProperty((void const *)arg2,arg3,(char const *)arg4,arg5,arg6,arg7);
7397 jresult = result;
7398 return jresult;
7399 }
7400
7401
7402 SWIGEXPORT int SWIGSTDCALL CSharp_aiMaterial_AddProperty__SWIG_0(void * jarg1, void * jarg2, char * jarg3, unsigned int jarg4, unsigned int jarg5) {
7403 int jresult ;
7404 aiMaterial *arg1 = (aiMaterial *) 0 ;
7405 aiString *arg2 = (aiString *) 0 ;
7406 char *arg3 = (char *) 0 ;
7407 unsigned int arg4 ;
7408 unsigned int arg5 ;
7409 aiReturn result;
7410
7411 arg1 = (aiMaterial *)jarg1;
7412 arg2 = (aiString *)jarg2;
7413 arg3 = (char *)jarg3;
7414 arg4 = (unsigned int)jarg4;
7415 arg5 = (unsigned int)jarg5;
7416 result = (aiReturn)(arg1)->AddProperty((aiString const *)arg2,(char const *)arg3,arg4,arg5);
7417 jresult = result;
7418 return jresult;
7419 }
7420
7421
7422 SWIGEXPORT int SWIGSTDCALL CSharp_aiMaterial_AddProperty__SWIG_1(void * jarg1, void * jarg2, char * jarg3, unsigned int jarg4) {
7423 int jresult ;
7424 aiMaterial *arg1 = (aiMaterial *) 0 ;
7425 aiString *arg2 = (aiString *) 0 ;
7426 char *arg3 = (char *) 0 ;
7427 unsigned int arg4 ;
7428 aiReturn result;
7429
7430 arg1 = (aiMaterial *)jarg1;
7431 arg2 = (aiString *)jarg2;
7432 arg3 = (char *)jarg3;
7433 arg4 = (unsigned int)jarg4;
7434 result = (aiReturn)(arg1)->AddProperty((aiString const *)arg2,(char const *)arg3,arg4);
7435 jresult = result;
7436 return jresult;
7437 }
7438
7439
7440 SWIGEXPORT int SWIGSTDCALL CSharp_aiMaterial_AddProperty__SWIG_2(void * jarg1, void * jarg2, char * jarg3) {
7441 int jresult ;
7442 aiMaterial *arg1 = (aiMaterial *) 0 ;
7443 aiString *arg2 = (aiString *) 0 ;
7444 char *arg3 = (char *) 0 ;
7445 aiReturn result;
7446
7447 arg1 = (aiMaterial *)jarg1;
7448 arg2 = (aiString *)jarg2;
7449 arg3 = (char *)jarg3;
7450 result = (aiReturn)(arg1)->AddProperty((aiString const *)arg2,(char const *)arg3);
7451 jresult = result;
7452 return jresult;
7453 }
7454
7455
7456 SWIGEXPORT int SWIGSTDCALL CSharp_aiMaterial_RemoveProperty__SWIG_0(void * jarg1, char * jarg2, unsigned int jarg3, unsigned int jarg4) {
7457 int jresult ;
7458 aiMaterial *arg1 = (aiMaterial *) 0 ;
7459 char *arg2 = (char *) 0 ;
7460 unsigned int arg3 ;
7461 unsigned int arg4 ;
7462 aiReturn result;
7463
7464 arg1 = (aiMaterial *)jarg1;
7465 arg2 = (char *)jarg2;
7466 arg3 = (unsigned int)jarg3;
7467 arg4 = (unsigned int)jarg4;
7468 result = (aiReturn)(arg1)->RemoveProperty((char const *)arg2,arg3,arg4);
7469 jresult = result;
7470 return jresult;
7471 }
7472
7473
7474 SWIGEXPORT int SWIGSTDCALL CSharp_aiMaterial_RemoveProperty__SWIG_1(void * jarg1, char * jarg2, unsigned int jarg3) {
7475 int jresult ;
7476 aiMaterial *arg1 = (aiMaterial *) 0 ;
7477 char *arg2 = (char *) 0 ;
7478 unsigned int arg3 ;
7479 aiReturn result;
7480
7481 arg1 = (aiMaterial *)jarg1;
7482 arg2 = (char *)jarg2;
7483 arg3 = (unsigned int)jarg3;
7484 result = (aiReturn)(arg1)->RemoveProperty((char const *)arg2,arg3);
7485 jresult = result;
7486 return jresult;
7487 }
7488
7489
7490 SWIGEXPORT int SWIGSTDCALL CSharp_aiMaterial_RemoveProperty__SWIG_2(void * jarg1, char * jarg2) {
7491 int jresult ;
7492 aiMaterial *arg1 = (aiMaterial *) 0 ;
7493 char *arg2 = (char *) 0 ;
7494 aiReturn result;
7495
7496 arg1 = (aiMaterial *)jarg1;
7497 arg2 = (char *)jarg2;
7498 result = (aiReturn)(arg1)->RemoveProperty((char const *)arg2);
7499 jresult = result;
7500 return jresult;
7501 }
7502
7503
7504 SWIGEXPORT void SWIGSTDCALL CSharp_aiMaterial_Clear(void * jarg1) {
7505 aiMaterial *arg1 = (aiMaterial *) 0 ;
7506
7507 arg1 = (aiMaterial *)jarg1;
7508 (arg1)->Clear();
7509 }
7510
7511
7512 SWIGEXPORT void SWIGSTDCALL CSharp_aiMaterial_CopyPropertyList(void * jarg1, void * jarg2) {
7513 aiMaterial *arg1 = (aiMaterial *) 0 ;
7514 aiMaterial *arg2 = (aiMaterial *) 0 ;
7515
7516 arg1 = (aiMaterial *)jarg1;
7517 arg2 = (aiMaterial *)jarg2;
7518 aiMaterial::CopyPropertyList(arg1,(aiMaterial const *)arg2);
7519 }
7520
7521
7522 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetDiffuse(void * jarg1, void * jarg2) {
7523 unsigned int jresult ;
7524 aiMaterial *arg1 = (aiMaterial *) 0 ;
7525 aiColor4D *arg2 = (aiColor4D *) 0 ;
7526 bool result;
7527
7528 arg1 = (aiMaterial *)jarg1;
7529 arg2 = (aiColor4D *)jarg2;
7530 result = (bool)aiMaterial_GetDiffuse(arg1,arg2);
7531 jresult = result;
7532 return jresult;
7533 }
7534
7535
7536 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetSpecular(void * jarg1, void * jarg2) {
7537 unsigned int jresult ;
7538 aiMaterial *arg1 = (aiMaterial *) 0 ;
7539 aiColor4D *arg2 = (aiColor4D *) 0 ;
7540 bool result;
7541
7542 arg1 = (aiMaterial *)jarg1;
7543 arg2 = (aiColor4D *)jarg2;
7544 result = (bool)aiMaterial_GetSpecular(arg1,arg2);
7545 jresult = result;
7546 return jresult;
7547 }
7548
7549
7550 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetAmbient(void * jarg1, void * jarg2) {
7551 unsigned int jresult ;
7552 aiMaterial *arg1 = (aiMaterial *) 0 ;
7553 aiColor4D *arg2 = (aiColor4D *) 0 ;
7554 bool result;
7555
7556 arg1 = (aiMaterial *)jarg1;
7557 arg2 = (aiColor4D *)jarg2;
7558 result = (bool)aiMaterial_GetAmbient(arg1,arg2);
7559 jresult = result;
7560 return jresult;
7561 }
7562
7563
7564 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetEmissive(void * jarg1, void * jarg2) {
7565 unsigned int jresult ;
7566 aiMaterial *arg1 = (aiMaterial *) 0 ;
7567 aiColor4D *arg2 = (aiColor4D *) 0 ;
7568 bool result;
7569
7570 arg1 = (aiMaterial *)jarg1;
7571 arg2 = (aiColor4D *)jarg2;
7572 result = (bool)aiMaterial_GetEmissive(arg1,arg2);
7573 jresult = result;
7574 return jresult;
7575 }
7576
7577
7578 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetOpacity(void * jarg1, float * jarg2) {
7579 unsigned int jresult ;
7580 aiMaterial *arg1 = (aiMaterial *) 0 ;
7581 float *arg2 = (float *) 0 ;
7582 bool result;
7583
7584 arg1 = (aiMaterial *)jarg1;
7585 arg2 = (float *)jarg2;
7586 result = (bool)aiMaterial_GetOpacity(arg1,arg2);
7587 jresult = result;
7588 return jresult;
7589 }
7590
7591
7592 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetShininessStrength(void * jarg1, float * jarg2) {
7593 unsigned int jresult ;
7594 aiMaterial *arg1 = (aiMaterial *) 0 ;
7595 float *arg2 = (float *) 0 ;
7596 bool result;
7597
7598 arg1 = (aiMaterial *)jarg1;
7599 arg2 = (float *)jarg2;
7600 result = (bool)aiMaterial_GetShininessStrength(arg1,arg2);
7601 jresult = result;
7602 return jresult;
7603 }
7604
7605
7606 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetShadingModel(void * jarg1, int * jarg2) {
7607 unsigned int jresult ;
7608 aiMaterial *arg1 = (aiMaterial *) 0 ;
7609 int *arg2 = (int *) 0 ;
7610 bool result;
7611
7612 arg1 = (aiMaterial *)jarg1;
7613 arg2 = (int *)jarg2;
7614 result = (bool)aiMaterial_GetShadingModel(arg1,arg2);
7615 jresult = result;
7616 return jresult;
7617 }
7618
7619
7620 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTexFlagsDiffuse0(void * jarg1, int * jarg2) {
7621 unsigned int jresult ;
7622 aiMaterial *arg1 = (aiMaterial *) 0 ;
7623 int *arg2 = (int *) 0 ;
7624 bool result;
7625
7626 arg1 = (aiMaterial *)jarg1;
7627 arg2 = (int *)jarg2;
7628 result = (bool)aiMaterial_GetTexFlagsDiffuse0(arg1,arg2);
7629 jresult = result;
7630 return jresult;
7631 }
7632
7633
7634 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetMappingModeUDiffuse0(void * jarg1, int * jarg2) {
7635 unsigned int jresult ;
7636 aiMaterial *arg1 = (aiMaterial *) 0 ;
7637 int *arg2 = (int *) 0 ;
7638 bool result;
7639
7640 arg1 = (aiMaterial *)jarg1;
7641 arg2 = (int *)jarg2;
7642 result = (bool)aiMaterial_GetMappingModeUDiffuse0(arg1,arg2);
7643 jresult = result;
7644 return jresult;
7645 }
7646
7647
7648 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetMappingModeVDiffuse0(void * jarg1, int * jarg2) {
7649 unsigned int jresult ;
7650 aiMaterial *arg1 = (aiMaterial *) 0 ;
7651 int *arg2 = (int *) 0 ;
7652 bool result;
7653
7654 arg1 = (aiMaterial *)jarg1;
7655 arg2 = (int *)jarg2;
7656 result = (bool)aiMaterial_GetMappingModeVDiffuse0(arg1,arg2);
7657 jresult = result;
7658 return jresult;
7659 }
7660
7661
7662 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureDiffuse0(void * jarg1, void * jarg2) {
7663 unsigned int jresult ;
7664 aiMaterial *arg1 = (aiMaterial *) 0 ;
7665 aiString *arg2 = (aiString *) 0 ;
7666 bool result;
7667
7668 arg1 = (aiMaterial *)jarg1;
7669 arg2 = (aiString *)jarg2;
7670 result = (bool)aiMaterial_GetTextureDiffuse0(arg1,arg2);
7671 jresult = result;
7672 return jresult;
7673 }
7674
7675
7676 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureSpecular0(void * jarg1, void * jarg2) {
7677 unsigned int jresult ;
7678 aiMaterial *arg1 = (aiMaterial *) 0 ;
7679 aiString *arg2 = (aiString *) 0 ;
7680 bool result;
7681
7682 arg1 = (aiMaterial *)jarg1;
7683 arg2 = (aiString *)jarg2;
7684 result = (bool)aiMaterial_GetTextureSpecular0(arg1,arg2);
7685 jresult = result;
7686 return jresult;
7687 }
7688
7689
7690 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureOpacity0(void * jarg1, void * jarg2) {
7691 unsigned int jresult ;
7692 aiMaterial *arg1 = (aiMaterial *) 0 ;
7693 aiString *arg2 = (aiString *) 0 ;
7694 bool result;
7695
7696 arg1 = (aiMaterial *)jarg1;
7697 arg2 = (aiString *)jarg2;
7698 result = (bool)aiMaterial_GetTextureOpacity0(arg1,arg2);
7699 jresult = result;
7700 return jresult;
7701 }
7702
7703
7704 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureAmbient0(void * jarg1, void * jarg2) {
7705 unsigned int jresult ;
7706 aiMaterial *arg1 = (aiMaterial *) 0 ;
7707 aiString *arg2 = (aiString *) 0 ;
7708 bool result;
7709
7710 arg1 = (aiMaterial *)jarg1;
7711 arg2 = (aiString *)jarg2;
7712 result = (bool)aiMaterial_GetTextureAmbient0(arg1,arg2);
7713 jresult = result;
7714 return jresult;
7715 }
7716
7717
7718 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureEmissive0(void * jarg1, void * jarg2) {
7719 unsigned int jresult ;
7720 aiMaterial *arg1 = (aiMaterial *) 0 ;
7721 aiString *arg2 = (aiString *) 0 ;
7722 bool result;
7723
7724 arg1 = (aiMaterial *)jarg1;
7725 arg2 = (aiString *)jarg2;
7726 result = (bool)aiMaterial_GetTextureEmissive0(arg1,arg2);
7727 jresult = result;
7728 return jresult;
7729 }
7730
7731
7732 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureShininess0(void * jarg1, void * jarg2) {
7733 unsigned int jresult ;
7734 aiMaterial *arg1 = (aiMaterial *) 0 ;
7735 aiString *arg2 = (aiString *) 0 ;
7736 bool result;
7737
7738 arg1 = (aiMaterial *)jarg1;
7739 arg2 = (aiString *)jarg2;
7740 result = (bool)aiMaterial_GetTextureShininess0(arg1,arg2);
7741 jresult = result;
7742 return jresult;
7743 }
7744
7745
7746 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureLightmap0(void * jarg1, void * jarg2) {
7747 unsigned int jresult ;
7748 aiMaterial *arg1 = (aiMaterial *) 0 ;
7749 aiString *arg2 = (aiString *) 0 ;
7750 bool result;
7751
7752 arg1 = (aiMaterial *)jarg1;
7753 arg2 = (aiString *)jarg2;
7754 result = (bool)aiMaterial_GetTextureLightmap0(arg1,arg2);
7755 jresult = result;
7756 return jresult;
7757 }
7758
7759
7760 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureNormals0(void * jarg1, void * jarg2) {
7761 unsigned int jresult ;
7762 aiMaterial *arg1 = (aiMaterial *) 0 ;
7763 aiString *arg2 = (aiString *) 0 ;
7764 bool result;
7765
7766 arg1 = (aiMaterial *)jarg1;
7767 arg2 = (aiString *)jarg2;
7768 result = (bool)aiMaterial_GetTextureNormals0(arg1,arg2);
7769 jresult = result;
7770 return jresult;
7771 }
7772
7773
7774 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureHeight0(void * jarg1, void * jarg2) {
7775 unsigned int jresult ;
7776 aiMaterial *arg1 = (aiMaterial *) 0 ;
7777 aiString *arg2 = (aiString *) 0 ;
7778 bool result;
7779
7780 arg1 = (aiMaterial *)jarg1;
7781 arg2 = (aiString *)jarg2;
7782 result = (bool)aiMaterial_GetTextureHeight0(arg1,arg2);
7783 jresult = result;
7784 return jresult;
7785 }
7786
7787
7788 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetGlobalBackgroundImage(void * jarg1, void * jarg2) {
7789 unsigned int jresult ;
7790 aiMaterial *arg1 = (aiMaterial *) 0 ;
7791 aiString *arg2 = (aiString *) 0 ;
7792 bool result;
7793
7794 arg1 = (aiMaterial *)jarg1;
7795 arg2 = (aiString *)jarg2;
7796 result = (bool)aiMaterial_GetGlobalBackgroundImage(arg1,arg2);
7797 jresult = result;
7798 return jresult;
7799 }
7800
7801
7802 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTwoSided(void * jarg1, int * jarg2) {
7803 unsigned int jresult ;
7804 aiMaterial *arg1 = (aiMaterial *) 0 ;
7805 int *arg2 = (int *) 0 ;
7806 bool result;
7807
7808 arg1 = (aiMaterial *)jarg1;
7809 arg2 = (int *)jarg2;
7810 result = (bool)aiMaterial_GetTwoSided(arg1,arg2);
7811 jresult = result;
7812 return jresult;
7813 }
7814
7815
7816 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_TEXTURE_BASE_get() {
7817 char * jresult ;
7818 char *result = 0 ;
7819
7820 result = (char *)("$tex.file");
7821 jresult = SWIG_csharp_string_callback((const char *)result);
7822 return jresult;
7823 }
7824
7825
7826 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_UVWSRC_BASE_get() {
7827 char * jresult ;
7828 char *result = 0 ;
7829
7830 result = (char *)("$tex.uvwsrc");
7831 jresult = SWIG_csharp_string_callback((const char *)result);
7832 return jresult;
7833 }
7834
7835
7836 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_TEXOP_BASE_get() {
7837 char * jresult ;
7838 char *result = 0 ;
7839
7840 result = (char *)("$tex.op");
7841 jresult = SWIG_csharp_string_callback((const char *)result);
7842 return jresult;
7843 }
7844
7845
7846 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_MAPPING_BASE_get() {
7847 char * jresult ;
7848 char *result = 0 ;
7849
7850 result = (char *)("$tex.mapping");
7851 jresult = SWIG_csharp_string_callback((const char *)result);
7852 return jresult;
7853 }
7854
7855
7856 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_TEXBLEND_BASE_get() {
7857 char * jresult ;
7858 char *result = 0 ;
7859
7860 result = (char *)("$tex.blend");
7861 jresult = SWIG_csharp_string_callback((const char *)result);
7862 return jresult;
7863 }
7864
7865
7866 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_MAPPINGMODE_U_BASE_get() {
7867 char * jresult ;
7868 char *result = 0 ;
7869
7870 result = (char *)("$tex.mapmodeu");
7871 jresult = SWIG_csharp_string_callback((const char *)result);
7872 return jresult;
7873 }
7874
7875
7876 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_MAPPINGMODE_V_BASE_get() {
7877 char * jresult ;
7878 char *result = 0 ;
7879
7880 result = (char *)("$tex.mapmodev");
7881 jresult = SWIG_csharp_string_callback((const char *)result);
7882 return jresult;
7883 }
7884
7885
7886 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_TEXMAP_AXIS_BASE_get() {
7887 char * jresult ;
7888 char *result = 0 ;
7889
7890 result = (char *)("$tex.mapaxis");
7891 jresult = SWIG_csharp_string_callback((const char *)result);
7892 return jresult;
7893 }
7894
7895
7896 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_UVTRANSFORM_BASE_get() {
7897 char * jresult ;
7898 char *result = 0 ;
7899
7900 result = (char *)("$tex.uvtrafo");
7901 jresult = SWIG_csharp_string_callback((const char *)result);
7902 return jresult;
7903 }
7904
7905
7906 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_TEXFLAGS_BASE_get() {
7907 char * jresult ;
7908 char *result = 0 ;
7909
7910 result = (char *)("$tex.flags");
7911 jresult = SWIG_csharp_string_callback((const char *)result);
7912 return jresult;
7913 }
7914
7915
7916 SWIGEXPORT void SWIGSTDCALL CSharp_aiNode_mName_set(void * jarg1, void * jarg2) {
7917 aiNode *arg1 = (aiNode *) 0 ;
7918 aiString *arg2 = (aiString *) 0 ;
7919
7920 arg1 = (aiNode *)jarg1;
7921 arg2 = (aiString *)jarg2;
7922 if (arg1) (arg1)->mName = *arg2;
7923 }
7924
7925
7926 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNode_mName_get(void * jarg1) {
7927 void * jresult ;
7928 aiNode *arg1 = (aiNode *) 0 ;
7929 aiString *result = 0 ;
7930
7931 arg1 = (aiNode *)jarg1;
7932 result = (aiString *)& ((arg1)->mName);
7933 jresult = (void *)result;
7934 return jresult;
7935 }
7936
7937
7938 SWIGEXPORT void SWIGSTDCALL CSharp_aiNode_mTransformation_set(void * jarg1, void * jarg2) {
7939 aiNode *arg1 = (aiNode *) 0 ;
7940 aiMatrix4x4 *arg2 = (aiMatrix4x4 *) 0 ;
7941
7942 arg1 = (aiNode *)jarg1;
7943 arg2 = (aiMatrix4x4 *)jarg2;
7944 if (arg1) (arg1)->mTransformation = *arg2;
7945 }
7946
7947
7948 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNode_mTransformation_get(void * jarg1) {
7949 void * jresult ;
7950 aiNode *arg1 = (aiNode *) 0 ;
7951 aiMatrix4x4 *result = 0 ;
7952
7953 arg1 = (aiNode *)jarg1;
7954 result = (aiMatrix4x4 *)& ((arg1)->mTransformation);
7955 jresult = (void *)result;
7956 return jresult;
7957 }
7958
7959
7960 SWIGEXPORT void SWIGSTDCALL CSharp_aiNode_mParent_set(void * jarg1, void * jarg2) {
7961 aiNode *arg1 = (aiNode *) 0 ;
7962 aiNode *arg2 = (aiNode *) 0 ;
7963
7964 arg1 = (aiNode *)jarg1;
7965 arg2 = (aiNode *)jarg2;
7966 if (arg1) (arg1)->mParent = arg2;
7967 }
7968
7969
7970 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNode_mParent_get(void * jarg1) {
7971 void * jresult ;
7972 aiNode *arg1 = (aiNode *) 0 ;
7973 aiNode *result = 0 ;
7974
7975 arg1 = (aiNode *)jarg1;
7976 result = (aiNode *) ((arg1)->mParent);
7977 jresult = (void *)result;
7978 return jresult;
7979 }
7980
7981
7982 SWIGEXPORT void SWIGSTDCALL CSharp_aiNode_mNumChildren_set(void * jarg1, unsigned int jarg2) {
7983 aiNode *arg1 = (aiNode *) 0 ;
7984 unsigned int arg2 ;
7985
7986 arg1 = (aiNode *)jarg1;
7987 arg2 = (unsigned int)jarg2;
7988 if (arg1) (arg1)->mNumChildren = arg2;
7989 }
7990
7991
7992 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiNode_mNumChildren_get(void * jarg1) {
7993 unsigned int jresult ;
7994 aiNode *arg1 = (aiNode *) 0 ;
7995 unsigned int result;
7996
7997 arg1 = (aiNode *)jarg1;
7998 result = (unsigned int) ((arg1)->mNumChildren);
7999 jresult = result;
8000 return jresult;
8001 }
8002
8003
8004 SWIGEXPORT void SWIGSTDCALL CSharp_aiNode_mNumMeshes_set(void * jarg1, unsigned int jarg2) {
8005 aiNode *arg1 = (aiNode *) 0 ;
8006 unsigned int arg2 ;
8007
8008 arg1 = (aiNode *)jarg1;
8009 arg2 = (unsigned int)jarg2;
8010 if (arg1) (arg1)->mNumMeshes = arg2;
8011 }
8012
8013
8014 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiNode_mNumMeshes_get(void * jarg1) {
8015 unsigned int jresult ;
8016 aiNode *arg1 = (aiNode *) 0 ;
8017 unsigned int result;
8018
8019 arg1 = (aiNode *)jarg1;
8020 result = (unsigned int) ((arg1)->mNumMeshes);
8021 jresult = result;
8022 return jresult;
8023 }
8024
8025
8026 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiNode__SWIG_0() {
8027 void * jresult ;
8028 aiNode *result = 0 ;
8029
8030 result = (aiNode *)new aiNode();
8031 jresult = (void *)result;
8032 return jresult;
8033 }
8034
8035
8036 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiNode__SWIG_1(char * jarg1) {
8037 void * jresult ;
8038 std::string *arg1 = 0 ;
8039 aiNode *result = 0 ;
8040
8041 if (!jarg1) {
8042 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "null string", 0);
8043 return 0;
8044 }
8045 std::string arg1_str(jarg1);
8046 arg1 = &arg1_str;
8047 result = (aiNode *)new aiNode((std::string const &)*arg1);
8048 jresult = (void *)result;
8049 return jresult;
8050 }
8051
8052
8053 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiNode(void * jarg1) {
8054 aiNode *arg1 = (aiNode *) 0 ;
8055
8056 arg1 = (aiNode *)jarg1;
8057 delete arg1;
8058 }
8059
8060
8061 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNode_FindNode__SWIG_0(void * jarg1, void * jarg2) {
8062 void * jresult ;
8063 aiNode *arg1 = (aiNode *) 0 ;
8064 aiString *arg2 = 0 ;
8065 aiNode *result = 0 ;
8066
8067 arg1 = (aiNode *)jarg1;
8068 arg2 = (aiString *)jarg2;
8069 if (!arg2) {
8070 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiString const & type is null", 0);
8071 return 0;
8072 }
8073 result = (aiNode *)(arg1)->FindNode((aiString const &)*arg2);
8074 jresult = (void *)result;
8075 return jresult;
8076 }
8077
8078
8079 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNode_FindNode__SWIG_1(void * jarg1, char * jarg2) {
8080 void * jresult ;
8081 aiNode *arg1 = (aiNode *) 0 ;
8082 char *arg2 = (char *) 0 ;
8083 aiNode *result = 0 ;
8084
8085 arg1 = (aiNode *)jarg1;
8086 arg2 = (char *)jarg2;
8087 result = (aiNode *)(arg1)->FindNode((char const *)arg2);
8088 jresult = (void *)result;
8089 return jresult;
8090 }
8091
8092
8093 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNode_GetmChildren(void * jarg1) {
8094 void * jresult ;
8095 aiNode *arg1 = (aiNode *) 0 ;
8096 std::vector< aiNode * > *result = 0 ;
8097
8098 arg1 = (aiNode *)jarg1;
8099 result = (std::vector< aiNode * > *)aiNode_GetmChildren(arg1);
8100 jresult = (void *)result;
8101 return jresult;
8102 }
8103
8104
8105 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNode_GetmMeshes(void * jarg1) {
8106 void * jresult ;
8107 aiNode *arg1 = (aiNode *) 0 ;
8108 std::vector< unsigned int > *result = 0 ;
8109
8110 arg1 = (aiNode *)jarg1;
8111 result = (std::vector< unsigned int > *)aiNode_GetmMeshes(arg1);
8112 jresult = (void *)result;
8113 return jresult;
8114 }
8115
8116
8117 SWIGEXPORT int SWIGSTDCALL CSharp_AI_SCENE_FLAGS_INCOMPLETE_get() {
8118 int jresult ;
8119 int result;
8120
8121 result = (int)(0x1);
8122 jresult = result;
8123 return jresult;
8124 }
8125
8126
8127 SWIGEXPORT int SWIGSTDCALL CSharp_AI_SCENE_FLAGS_VALIDATED_get() {
8128 int jresult ;
8129 int result;
8130
8131 result = (int)(0x2);
8132 jresult = result;
8133 return jresult;
8134 }
8135
8136
8137 SWIGEXPORT int SWIGSTDCALL CSharp_AI_SCENE_FLAGS_VALIDATION_WARNING_get() {
8138 int jresult ;
8139 int result;
8140
8141 result = (int)(0x4);
8142 jresult = result;
8143 return jresult;
8144 }
8145
8146
8147 SWIGEXPORT int SWIGSTDCALL CSharp_AI_SCENE_FLAGS_NON_VERBOSE_FORMAT_get() {
8148 int jresult ;
8149 int result;
8150
8151 result = (int)(0x8);
8152 jresult = result;
8153 return jresult;
8154 }
8155
8156
8157 SWIGEXPORT int SWIGSTDCALL CSharp_AI_SCENE_FLAGS_TERRAIN_get() {
8158 int jresult ;
8159 int result;
8160
8161 result = (int)(0x10);
8162 jresult = result;
8163 return jresult;
8164 }
8165
8166
8167 SWIGEXPORT void SWIGSTDCALL CSharp_aiScene_mFlags_set(void * jarg1, unsigned int jarg2) {
8168 aiScene *arg1 = (aiScene *) 0 ;
8169 unsigned int arg2 ;
8170
8171 arg1 = (aiScene *)jarg1;
8172 arg2 = (unsigned int)jarg2;
8173 if (arg1) (arg1)->mFlags = arg2;
8174 }
8175
8176
8177 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_mFlags_get(void * jarg1) {
8178 unsigned int jresult ;
8179 aiScene *arg1 = (aiScene *) 0 ;
8180 unsigned int result;
8181
8182 arg1 = (aiScene *)jarg1;
8183 result = (unsigned int) ((arg1)->mFlags);
8184 jresult = result;
8185 return jresult;
8186 }
8187
8188
8189 SWIGEXPORT void SWIGSTDCALL CSharp_aiScene_mRootNode_set(void * jarg1, void * jarg2) {
8190 aiScene *arg1 = (aiScene *) 0 ;
8191 aiNode *arg2 = (aiNode *) 0 ;
8192
8193 arg1 = (aiScene *)jarg1;
8194 arg2 = (aiNode *)jarg2;
8195 if (arg1) (arg1)->mRootNode = arg2;
8196 }
8197
8198
8199 SWIGEXPORT void * SWIGSTDCALL CSharp_aiScene_mRootNode_get(void * jarg1) {
8200 void * jresult ;
8201 aiScene *arg1 = (aiScene *) 0 ;
8202 aiNode *result = 0 ;
8203
8204 arg1 = (aiScene *)jarg1;
8205 result = (aiNode *) ((arg1)->mRootNode);
8206 jresult = (void *)result;
8207 return jresult;
8208 }
8209
8210
8211 SWIGEXPORT void SWIGSTDCALL CSharp_aiScene_mNumMeshes_set(void * jarg1, unsigned int jarg2) {
8212 aiScene *arg1 = (aiScene *) 0 ;
8213 unsigned int arg2 ;
8214
8215 arg1 = (aiScene *)jarg1;
8216 arg2 = (unsigned int)jarg2;
8217 if (arg1) (arg1)->mNumMeshes = arg2;
8218 }
8219
8220
8221 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_mNumMeshes_get(void * jarg1) {
8222 unsigned int jresult ;
8223 aiScene *arg1 = (aiScene *) 0 ;
8224 unsigned int result;
8225
8226 arg1 = (aiScene *)jarg1;
8227 result = (unsigned int) ((arg1)->mNumMeshes);
8228 jresult = result;
8229 return jresult;
8230 }
8231
8232
8233 SWIGEXPORT void SWIGSTDCALL CSharp_aiScene_mNumMaterials_set(void * jarg1, unsigned int jarg2) {
8234 aiScene *arg1 = (aiScene *) 0 ;
8235 unsigned int arg2 ;
8236
8237 arg1 = (aiScene *)jarg1;
8238 arg2 = (unsigned int)jarg2;
8239 if (arg1) (arg1)->mNumMaterials = arg2;
8240 }
8241
8242
8243 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_mNumMaterials_get(void * jarg1) {
8244 unsigned int jresult ;
8245 aiScene *arg1 = (aiScene *) 0 ;
8246 unsigned int result;
8247
8248 arg1 = (aiScene *)jarg1;
8249 result = (unsigned int) ((arg1)->mNumMaterials);
8250 jresult = result;
8251 return jresult;
8252 }
8253
8254
8255 SWIGEXPORT void SWIGSTDCALL CSharp_aiScene_mNumAnimations_set(void * jarg1, unsigned int jarg2) {
8256 aiScene *arg1 = (aiScene *) 0 ;
8257 unsigned int arg2 ;
8258
8259 arg1 = (aiScene *)jarg1;
8260 arg2 = (unsigned int)jarg2;
8261 if (arg1) (arg1)->mNumAnimations = arg2;
8262 }
8263
8264
8265 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_mNumAnimations_get(void * jarg1) {
8266 unsigned int jresult ;
8267 aiScene *arg1 = (aiScene *) 0 ;
8268 unsigned int result;
8269
8270 arg1 = (aiScene *)jarg1;
8271 result = (unsigned int) ((arg1)->mNumAnimations);
8272 jresult = result;
8273 return jresult;
8274 }
8275
8276
8277 SWIGEXPORT void SWIGSTDCALL CSharp_aiScene_mNumTextures_set(void * jarg1, unsigned int jarg2) {
8278 aiScene *arg1 = (aiScene *) 0 ;
8279 unsigned int arg2 ;
8280
8281 arg1 = (aiScene *)jarg1;
8282 arg2 = (unsigned int)jarg2;
8283 if (arg1) (arg1)->mNumTextures = arg2;
8284 }
8285
8286
8287 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_mNumTextures_get(void * jarg1) {
8288 unsigned int jresult ;
8289 aiScene *arg1 = (aiScene *) 0 ;
8290 unsigned int result;
8291
8292 arg1 = (aiScene *)jarg1;
8293 result = (unsigned int) ((arg1)->mNumTextures);
8294 jresult = result;
8295 return jresult;
8296 }
8297
8298
8299 SWIGEXPORT void SWIGSTDCALL CSharp_aiScene_mNumLights_set(void * jarg1, unsigned int jarg2) {
8300 aiScene *arg1 = (aiScene *) 0 ;
8301 unsigned int arg2 ;
8302
8303 arg1 = (aiScene *)jarg1;
8304 arg2 = (unsigned int)jarg2;
8305 if (arg1) (arg1)->mNumLights = arg2;
8306 }
8307
8308
8309 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_mNumLights_get(void * jarg1) {
8310 unsigned int jresult ;
8311 aiScene *arg1 = (aiScene *) 0 ;
8312 unsigned int result;
8313
8314 arg1 = (aiScene *)jarg1;
8315 result = (unsigned int) ((arg1)->mNumLights);
8316 jresult = result;
8317 return jresult;
8318 }
8319
8320
8321 SWIGEXPORT void SWIGSTDCALL CSharp_aiScene_mNumCameras_set(void * jarg1, unsigned int jarg2) {
8322 aiScene *arg1 = (aiScene *) 0 ;
8323 unsigned int arg2 ;
8324
8325 arg1 = (aiScene *)jarg1;
8326 arg2 = (unsigned int)jarg2;
8327 if (arg1) (arg1)->mNumCameras = arg2;
8328 }
8329
8330
8331 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_mNumCameras_get(void * jarg1) {
8332 unsigned int jresult ;
8333 aiScene *arg1 = (aiScene *) 0 ;
8334 unsigned int result;
8335
8336 arg1 = (aiScene *)jarg1;
8337 result = (unsigned int) ((arg1)->mNumCameras);
8338 jresult = result;
8339 return jresult;
8340 }
8341
8342
8343 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiScene() {
8344 void * jresult ;
8345 aiScene *result = 0 ;
8346
8347 result = (aiScene *)new aiScene();
8348 jresult = (void *)result;
8349 return jresult;
8350 }
8351
8352
8353 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiScene(void * jarg1) {
8354 aiScene *arg1 = (aiScene *) 0 ;
8355
8356 arg1 = (aiScene *)jarg1;
8357 delete arg1;
8358 }
8359
8360
8361 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_HasMeshes(void * jarg1) {
8362 unsigned int jresult ;
8363 aiScene *arg1 = (aiScene *) 0 ;
8364 bool result;
8365
8366 arg1 = (aiScene *)jarg1;
8367 result = (bool)((aiScene const *)arg1)->HasMeshes();
8368 jresult = result;
8369 return jresult;
8370 }
8371
8372
8373 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_HasMaterials(void * jarg1) {
8374 unsigned int jresult ;
8375 aiScene *arg1 = (aiScene *) 0 ;
8376 bool result;
8377
8378 arg1 = (aiScene *)jarg1;
8379 result = (bool)((aiScene const *)arg1)->HasMaterials();
8380 jresult = result;
8381 return jresult;
8382 }
8383
8384
8385 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_HasLights(void * jarg1) {
8386 unsigned int jresult ;
8387 aiScene *arg1 = (aiScene *) 0 ;
8388 bool result;
8389
8390 arg1 = (aiScene *)jarg1;
8391 result = (bool)((aiScene const *)arg1)->HasLights();
8392 jresult = result;
8393 return jresult;
8394 }
8395
8396
8397 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_HasTextures(void * jarg1) {
8398 unsigned int jresult ;
8399 aiScene *arg1 = (aiScene *) 0 ;
8400 bool result;
8401
8402 arg1 = (aiScene *)jarg1;
8403 result = (bool)((aiScene const *)arg1)->HasTextures();
8404 jresult = result;
8405 return jresult;
8406 }
8407
8408
8409 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_HasCameras(void * jarg1) {
8410 unsigned int jresult ;
8411 aiScene *arg1 = (aiScene *) 0 ;
8412 bool result;
8413
8414 arg1 = (aiScene *)jarg1;
8415 result = (bool)((aiScene const *)arg1)->HasCameras();
8416 jresult = result;
8417 return jresult;
8418 }
8419
8420
8421 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_HasAnimations(void * jarg1) {
8422 unsigned int jresult ;
8423 aiScene *arg1 = (aiScene *) 0 ;
8424 bool result;
8425
8426 arg1 = (aiScene *)jarg1;
8427 result = (bool)((aiScene const *)arg1)->HasAnimations();
8428 jresult = result;
8429 return jresult;
8430 }
8431
8432
8433 SWIGEXPORT void SWIGSTDCALL CSharp_aiScene_mPrivate_set(void * jarg1, void * jarg2) {
8434 aiScene *arg1 = (aiScene *) 0 ;
8435 void *arg2 = (void *) 0 ;
8436
8437 arg1 = (aiScene *)jarg1;
8438 arg2 = (void *)jarg2;
8439 if (arg1) (arg1)->mPrivate = arg2;
8440 }
8441
8442
8443 SWIGEXPORT void * SWIGSTDCALL CSharp_aiScene_mPrivate_get(void * jarg1) {
8444 void * jresult ;
8445 aiScene *arg1 = (aiScene *) 0 ;
8446 void *result = 0 ;
8447
8448 arg1 = (aiScene *)jarg1;
8449 result = (void *) ((arg1)->mPrivate);
8450 jresult = (void *)result;
8451 return jresult;
8452 }
8453
8454
8455 SWIGEXPORT void * SWIGSTDCALL CSharp_aiScene_GetmAnimations(void * jarg1) {
8456 void * jresult ;
8457 aiScene *arg1 = (aiScene *) 0 ;
8458 std::vector< aiAnimation * > *result = 0 ;
8459
8460 arg1 = (aiScene *)jarg1;
8461 result = (std::vector< aiAnimation * > *)aiScene_GetmAnimations(arg1);
8462 jresult = (void *)result;
8463 return jresult;
8464 }
8465
8466
8467 SWIGEXPORT void * SWIGSTDCALL CSharp_aiScene_GetmCameras(void * jarg1) {
8468 void * jresult ;
8469 aiScene *arg1 = (aiScene *) 0 ;
8470 std::vector< aiCamera * > *result = 0 ;
8471
8472 arg1 = (aiScene *)jarg1;
8473 result = (std::vector< aiCamera * > *)aiScene_GetmCameras(arg1);
8474 jresult = (void *)result;
8475 return jresult;
8476 }
8477
8478
8479 SWIGEXPORT void * SWIGSTDCALL CSharp_aiScene_GetmLights(void * jarg1) {
8480 void * jresult ;
8481 aiScene *arg1 = (aiScene *) 0 ;
8482 std::vector< aiLight * > *result = 0 ;
8483
8484 arg1 = (aiScene *)jarg1;
8485 result = (std::vector< aiLight * > *)aiScene_GetmLights(arg1);
8486 jresult = (void *)result;
8487 return jresult;
8488 }
8489
8490
8491 SWIGEXPORT void * SWIGSTDCALL CSharp_aiScene_GetmMaterials(void * jarg1) {
8492 void * jresult ;
8493 aiScene *arg1 = (aiScene *) 0 ;
8494 std::vector< aiMaterial * > *result = 0 ;
8495
8496 arg1 = (aiScene *)jarg1;
8497 result = (std::vector< aiMaterial * > *)aiScene_GetmMaterials(arg1);
8498 jresult = (void *)result;
8499 return jresult;
8500 }
8501
8502
8503 SWIGEXPORT void * SWIGSTDCALL CSharp_aiScene_GetmMeshes(void * jarg1) {
8504 void * jresult ;
8505 aiScene *arg1 = (aiScene *) 0 ;
8506 std::vector< aiMesh * > *result = 0 ;
8507
8508 arg1 = (aiScene *)jarg1;
8509 result = (std::vector< aiMesh * > *)aiScene_GetmMeshes(arg1);
8510 jresult = (void *)result;
8511 return jresult;
8512 }
8513
8514
8515 SWIGEXPORT void * SWIGSTDCALL CSharp_aiScene_GetmTextures(void * jarg1) {
8516 void * jresult ;
8517 aiScene *arg1 = (aiScene *) 0 ;
8518 std::vector< aiTexture * > *result = 0 ;
8519
8520 arg1 = (aiScene *)jarg1;
8521 result = (std::vector< aiTexture * > *)aiScene_GetmTextures(arg1);
8522 jresult = (void *)result;
8523 return jresult;
8524 }
8525
8526
8527 SWIGEXPORT void SWIGSTDCALL CSharp_aiTexel_b_set(void * jarg1, unsigned char jarg2) {
8528 aiTexel *arg1 = (aiTexel *) 0 ;
8529 unsigned char arg2 ;
8530
8531 arg1 = (aiTexel *)jarg1;
8532 arg2 = (unsigned char)jarg2;
8533 if (arg1) (arg1)->b = arg2;
8534 }
8535
8536
8537 SWIGEXPORT unsigned char SWIGSTDCALL CSharp_aiTexel_b_get(void * jarg1) {
8538 unsigned char jresult ;
8539 aiTexel *arg1 = (aiTexel *) 0 ;
8540 unsigned char result;
8541
8542 arg1 = (aiTexel *)jarg1;
8543 result = (unsigned char) ((arg1)->b);
8544 jresult = result;
8545 return jresult;
8546 }
8547
8548
8549 SWIGEXPORT void SWIGSTDCALL CSharp_aiTexel_g_set(void * jarg1, unsigned char jarg2) {
8550 aiTexel *arg1 = (aiTexel *) 0 ;
8551 unsigned char arg2 ;
8552
8553 arg1 = (aiTexel *)jarg1;
8554 arg2 = (unsigned char)jarg2;
8555 if (arg1) (arg1)->g = arg2;
8556 }
8557
8558
8559 SWIGEXPORT unsigned char SWIGSTDCALL CSharp_aiTexel_g_get(void * jarg1) {
8560 unsigned char jresult ;
8561 aiTexel *arg1 = (aiTexel *) 0 ;
8562 unsigned char result;
8563
8564 arg1 = (aiTexel *)jarg1;
8565 result = (unsigned char) ((arg1)->g);
8566 jresult = result;
8567 return jresult;
8568 }
8569
8570
8571 SWIGEXPORT void SWIGSTDCALL CSharp_aiTexel_r_set(void * jarg1, unsigned char jarg2) {
8572 aiTexel *arg1 = (aiTexel *) 0 ;
8573 unsigned char arg2 ;
8574
8575 arg1 = (aiTexel *)jarg1;
8576 arg2 = (unsigned char)jarg2;
8577 if (arg1) (arg1)->r = arg2;
8578 }
8579
8580
8581 SWIGEXPORT unsigned char SWIGSTDCALL CSharp_aiTexel_r_get(void * jarg1) {
8582 unsigned char jresult ;
8583 aiTexel *arg1 = (aiTexel *) 0 ;
8584 unsigned char result;
8585
8586 arg1 = (aiTexel *)jarg1;
8587 result = (unsigned char) ((arg1)->r);
8588 jresult = result;
8589 return jresult;
8590 }
8591
8592
8593 SWIGEXPORT void SWIGSTDCALL CSharp_aiTexel_a_set(void * jarg1, unsigned char jarg2) {
8594 aiTexel *arg1 = (aiTexel *) 0 ;
8595 unsigned char arg2 ;
8596
8597 arg1 = (aiTexel *)jarg1;
8598 arg2 = (unsigned char)jarg2;
8599 if (arg1) (arg1)->a = arg2;
8600 }
8601
8602
8603 SWIGEXPORT unsigned char SWIGSTDCALL CSharp_aiTexel_a_get(void * jarg1) {
8604 unsigned char jresult ;
8605 aiTexel *arg1 = (aiTexel *) 0 ;
8606 unsigned char result;
8607
8608 arg1 = (aiTexel *)jarg1;
8609 result = (unsigned char) ((arg1)->a);
8610 jresult = result;
8611 return jresult;
8612 }
8613
8614
8615 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiTexel___equal__(void * jarg1, void * jarg2) {
8616 unsigned int jresult ;
8617 aiTexel *arg1 = (aiTexel *) 0 ;
8618 aiTexel *arg2 = 0 ;
8619 bool result;
8620
8621 arg1 = (aiTexel *)jarg1;
8622 arg2 = (aiTexel *)jarg2;
8623 if (!arg2) {
8624 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiTexel const & type is null", 0);
8625 return 0;
8626 }
8627 result = (bool)((aiTexel const *)arg1)->operator ==((aiTexel const &)*arg2);
8628 jresult = result;
8629 return jresult;
8630 }
8631
8632
8633 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiTexel___nequal__(void * jarg1, void * jarg2) {
8634 unsigned int jresult ;
8635 aiTexel *arg1 = (aiTexel *) 0 ;
8636 aiTexel *arg2 = 0 ;
8637 bool result;
8638
8639 arg1 = (aiTexel *)jarg1;
8640 arg2 = (aiTexel *)jarg2;
8641 if (!arg2) {
8642 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiTexel const & type is null", 0);
8643 return 0;
8644 }
8645 result = (bool)((aiTexel const *)arg1)->operator !=((aiTexel const &)*arg2);
8646 jresult = result;
8647 return jresult;
8648 }
8649
8650
8651 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiTexel() {
8652 void * jresult ;
8653 aiTexel *result = 0 ;
8654
8655 result = (aiTexel *)new aiTexel();
8656 jresult = (void *)result;
8657 return jresult;
8658 }
8659
8660
8661 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiTexel(void * jarg1) {
8662 aiTexel *arg1 = (aiTexel *) 0 ;
8663
8664 arg1 = (aiTexel *)jarg1;
8665 delete arg1;
8666 }
8667
8668
8669 SWIGEXPORT void SWIGSTDCALL CSharp_aiTexture_mWidth_set(void * jarg1, unsigned int jarg2) {
8670 aiTexture *arg1 = (aiTexture *) 0 ;
8671 unsigned int arg2 ;
8672
8673 arg1 = (aiTexture *)jarg1;
8674 arg2 = (unsigned int)jarg2;
8675 if (arg1) (arg1)->mWidth = arg2;
8676 }
8677
8678
8679 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiTexture_mWidth_get(void * jarg1) {
8680 unsigned int jresult ;
8681 aiTexture *arg1 = (aiTexture *) 0 ;
8682 unsigned int result;
8683
8684 arg1 = (aiTexture *)jarg1;
8685 result = (unsigned int) ((arg1)->mWidth);
8686 jresult = result;
8687 return jresult;
8688 }
8689
8690
8691 SWIGEXPORT void SWIGSTDCALL CSharp_aiTexture_mHeight_set(void * jarg1, unsigned int jarg2) {
8692 aiTexture *arg1 = (aiTexture *) 0 ;
8693 unsigned int arg2 ;
8694
8695 arg1 = (aiTexture *)jarg1;
8696 arg2 = (unsigned int)jarg2;
8697 if (arg1) (arg1)->mHeight = arg2;
8698 }
8699
8700
8701 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiTexture_mHeight_get(void * jarg1) {
8702 unsigned int jresult ;
8703 aiTexture *arg1 = (aiTexture *) 0 ;
8704 unsigned int result;
8705
8706 arg1 = (aiTexture *)jarg1;
8707 result = (unsigned int) ((arg1)->mHeight);
8708 jresult = result;
8709 return jresult;
8710 }
8711
8712
8713 SWIGEXPORT void SWIGSTDCALL CSharp_aiTexture_achFormatHint_set(void * jarg1, char * jarg2) {
8714 aiTexture *arg1 = (aiTexture *) 0 ;
8715 char *arg2 ;
8716
8717 arg1 = (aiTexture *)jarg1;
8718 arg2 = (char *)jarg2;
8719 {
8720 if(arg2) {
8721 strncpy((char*)arg1->achFormatHint, (const char *)arg2, 4-1);
8722 arg1->achFormatHint[4-1] = 0;
8723 } else {
8724 arg1->achFormatHint[0] = 0;
8725 }
8726 }
8727 }
8728
8729
8730 SWIGEXPORT char * SWIGSTDCALL CSharp_aiTexture_achFormatHint_get(void * jarg1) {
8731 char * jresult ;
8732 aiTexture *arg1 = (aiTexture *) 0 ;
8733 char *result = 0 ;
8734
8735 arg1 = (aiTexture *)jarg1;
8736 result = (char *)(char *) ((arg1)->achFormatHint);
8737 jresult = SWIG_csharp_string_callback((const char *)result);
8738 return jresult;
8739 }
8740
8741
8742 SWIGEXPORT void SWIGSTDCALL CSharp_aiTexture_pcData_set(void * jarg1, void * jarg2) {
8743 aiTexture *arg1 = (aiTexture *) 0 ;
8744 aiTexel *arg2 = (aiTexel *) 0 ;
8745
8746 arg1 = (aiTexture *)jarg1;
8747 arg2 = (aiTexel *)jarg2;
8748 if (arg1) (arg1)->pcData = arg2;
8749 }
8750
8751
8752 SWIGEXPORT void * SWIGSTDCALL CSharp_aiTexture_pcData_get(void * jarg1) {
8753 void * jresult ;
8754 aiTexture *arg1 = (aiTexture *) 0 ;
8755 aiTexel *result = 0 ;
8756
8757 arg1 = (aiTexture *)jarg1;
8758 result = (aiTexel *) ((arg1)->pcData);
8759 jresult = (void *)result;
8760 return jresult;
8761 }
8762
8763
8764 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiTexture_CheckFormat(void * jarg1, char * jarg2) {
8765 unsigned int jresult ;
8766 aiTexture *arg1 = (aiTexture *) 0 ;
8767 char *arg2 = (char *) 0 ;
8768 bool result;
8769
8770 arg1 = (aiTexture *)jarg1;
8771 arg2 = (char *)jarg2;
8772 result = (bool)((aiTexture const *)arg1)->CheckFormat((char const *)arg2);
8773 jresult = result;
8774 return jresult;
8775 }
8776
8777
8778 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiTexture() {
8779 void * jresult ;
8780 aiTexture *result = 0 ;
8781
8782 result = (aiTexture *)new aiTexture();
8783 jresult = (void *)result;
8784 return jresult;
8785 }
8786
8787
8788 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiTexture(void * jarg1) {
8789 aiTexture *arg1 = (aiTexture *) 0 ;
8790
8791 arg1 = (aiTexture *)jarg1;
8792 delete arg1;
8793 }
8794
8795
8796 SWIGEXPORT int SWIGSTDCALL CSharp_AI_PROPERTY_WAS_NOT_EXISTING_get() {
8797 int jresult ;
8798 int result;
8799
8800 result = (int)(0xffffffff);
8801 jresult = result;
8802 return jresult;
8803 }
8804
8805
8806 SWIGEXPORT void * SWIGSTDCALL CSharp_new_Importer__SWIG_0() {
8807 void * jresult ;
8808 Assimp::Importer *result = 0 ;
8809
8810 result = (Assimp::Importer *)new Assimp::Importer();
8811 jresult = (void *)result;
8812 return jresult;
8813 }
8814
8815
8816 SWIGEXPORT void * SWIGSTDCALL CSharp_new_Importer__SWIG_1(void * jarg1) {
8817 void * jresult ;
8818 Assimp::Importer *arg1 = 0 ;
8819 Assimp::Importer *result = 0 ;
8820
8821 arg1 = (Assimp::Importer *)jarg1;
47708822 if (!arg1) {
4771 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2D const & type is null", 0);
8823 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Assimp::Importer const & type is null", 0);
47728824 return 0;
47738825 }
4774 result = (aiVector2D *)new aiVector2D((aiVector2D const &)*arg1);
4775 jresult = (void *)result;
4776 return jresult;
4777 }
4778
4779
4780 SWIGEXPORT void SWIGSTDCALL CSharp_aiVector2D_Set(void * jarg1, float jarg2, float jarg3) {
4781 aiVector2D *arg1 = (aiVector2D *) 0 ;
8826 result = (Assimp::Importer *)new Assimp::Importer((Assimp::Importer const &)*arg1);
8827 jresult = (void *)result;
8828 return jresult;
8829 }
8830
8831
8832 SWIGEXPORT void SWIGSTDCALL CSharp_delete_Importer(void * jarg1) {
8833 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
8834
8835 arg1 = (Assimp::Importer *)jarg1;
8836 delete arg1;
8837 }
8838
8839
8840 SWIGEXPORT int SWIGSTDCALL CSharp_Importer_GetPropertyInteger__SWIG_0(void * jarg1, char * jarg2, int jarg3) {
8841 int jresult ;
8842 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
8843 char *arg2 = (char *) 0 ;
8844 int arg3 ;
8845 int result;
8846
8847 arg1 = (Assimp::Importer *)jarg1;
8848 arg2 = (char *)jarg2;
8849 arg3 = (int)jarg3;
8850 result = (int)((Assimp::Importer const *)arg1)->GetPropertyInteger((char const *)arg2,arg3);
8851 jresult = result;
8852 return jresult;
8853 }
8854
8855
8856 SWIGEXPORT int SWIGSTDCALL CSharp_Importer_GetPropertyInteger__SWIG_1(void * jarg1, char * jarg2) {
8857 int jresult ;
8858 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
8859 char *arg2 = (char *) 0 ;
8860 int result;
8861
8862 arg1 = (Assimp::Importer *)jarg1;
8863 arg2 = (char *)jarg2;
8864 result = (int)((Assimp::Importer const *)arg1)->GetPropertyInteger((char const *)arg2);
8865 jresult = result;
8866 return jresult;
8867 }
8868
8869
8870 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Importer_GetPropertyBool__SWIG_0(void * jarg1, char * jarg2, unsigned int jarg3) {
8871 unsigned int jresult ;
8872 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
8873 char *arg2 = (char *) 0 ;
8874 bool arg3 ;
8875 bool result;
8876
8877 arg1 = (Assimp::Importer *)jarg1;
8878 arg2 = (char *)jarg2;
8879 arg3 = jarg3 ? true : false;
8880 result = (bool)((Assimp::Importer const *)arg1)->GetPropertyBool((char const *)arg2,arg3);
8881 jresult = result;
8882 return jresult;
8883 }
8884
8885
8886 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Importer_GetPropertyBool__SWIG_1(void * jarg1, char * jarg2) {
8887 unsigned int jresult ;
8888 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
8889 char *arg2 = (char *) 0 ;
8890 bool result;
8891
8892 arg1 = (Assimp::Importer *)jarg1;
8893 arg2 = (char *)jarg2;
8894 result = (bool)((Assimp::Importer const *)arg1)->GetPropertyBool((char const *)arg2);
8895 jresult = result;
8896 return jresult;
8897 }
8898
8899
8900 SWIGEXPORT float SWIGSTDCALL CSharp_Importer_GetPropertyFloat__SWIG_0(void * jarg1, char * jarg2, float jarg3) {
8901 float jresult ;
8902 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
8903 char *arg2 = (char *) 0 ;
8904 float arg3 ;
8905 float result;
8906
8907 arg1 = (Assimp::Importer *)jarg1;
8908 arg2 = (char *)jarg2;
8909 arg3 = (float)jarg3;
8910 result = (float)((Assimp::Importer const *)arg1)->GetPropertyFloat((char const *)arg2,arg3);
8911 jresult = result;
8912 return jresult;
8913 }
8914
8915
8916 SWIGEXPORT float SWIGSTDCALL CSharp_Importer_GetPropertyFloat__SWIG_1(void * jarg1, char * jarg2) {
8917 float jresult ;
8918 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
8919 char *arg2 = (char *) 0 ;
8920 float result;
8921
8922 arg1 = (Assimp::Importer *)jarg1;
8923 arg2 = (char *)jarg2;
8924 result = (float)((Assimp::Importer const *)arg1)->GetPropertyFloat((char const *)arg2);
8925 jresult = result;
8926 return jresult;
8927 }
8928
8929
8930 SWIGEXPORT char * SWIGSTDCALL CSharp_Importer_GetPropertyString__SWIG_0(void * jarg1, char * jarg2, char * jarg3) {
8931 char * jresult ;
8932 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
8933 char *arg2 = (char *) 0 ;
8934 std::string *arg3 = 0 ;
8935 std::string *result = 0 ;
8936
8937 arg1 = (Assimp::Importer *)jarg1;
8938 arg2 = (char *)jarg2;
8939 if (!jarg3) {
8940 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "null string", 0);
8941 return 0;
8942 }
8943 std::string arg3_str(jarg3);
8944 arg3 = &arg3_str;
8945 result = (std::string *) &((Assimp::Importer const *)arg1)->GetPropertyString((char const *)arg2,(std::string const &)*arg3);
8946 jresult = SWIG_csharp_string_callback(result->c_str());
8947 return jresult;
8948 }
8949
8950
8951 SWIGEXPORT char * SWIGSTDCALL CSharp_Importer_GetPropertyString__SWIG_1(void * jarg1, char * jarg2) {
8952 char * jresult ;
8953 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
8954 char *arg2 = (char *) 0 ;
8955 std::string *result = 0 ;
8956
8957 arg1 = (Assimp::Importer *)jarg1;
8958 arg2 = (char *)jarg2;
8959 result = (std::string *) &((Assimp::Importer const *)arg1)->GetPropertyString((char const *)arg2);
8960 jresult = SWIG_csharp_string_callback(result->c_str());
8961 return jresult;
8962 }
8963
8964
8965 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Importer_IsDefaultIOHandler(void * jarg1) {
8966 unsigned int jresult ;
8967 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
8968 bool result;
8969
8970 arg1 = (Assimp::Importer *)jarg1;
8971 result = (bool)((Assimp::Importer const *)arg1)->IsDefaultIOHandler();
8972 jresult = result;
8973 return jresult;
8974 }
8975
8976
8977 SWIGEXPORT void SWIGSTDCALL CSharp_Importer_SetProgressHandler(void * jarg1, void * jarg2) {
8978 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
8979 Assimp::ProgressHandler *arg2 = (Assimp::ProgressHandler *) 0 ;
8980
8981 arg1 = (Assimp::Importer *)jarg1;
8982 arg2 = (Assimp::ProgressHandler *)jarg2;
8983 (arg1)->SetProgressHandler(arg2);
8984 }
8985
8986
8987 SWIGEXPORT void * SWIGSTDCALL CSharp_Importer_GetProgressHandler(void * jarg1) {
8988 void * jresult ;
8989 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
8990 Assimp::ProgressHandler *result = 0 ;
8991
8992 arg1 = (Assimp::Importer *)jarg1;
8993 result = (Assimp::ProgressHandler *)((Assimp::Importer const *)arg1)->GetProgressHandler();
8994 jresult = (void *)result;
8995 return jresult;
8996 }
8997
8998
8999 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Importer_IsDefaultProgressHandler(void * jarg1) {
9000 unsigned int jresult ;
9001 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
9002 bool result;
9003
9004 arg1 = (Assimp::Importer *)jarg1;
9005 result = (bool)((Assimp::Importer const *)arg1)->IsDefaultProgressHandler();
9006 jresult = result;
9007 return jresult;
9008 }
9009
9010
9011 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Importer_ValidateFlags(void * jarg1, unsigned int jarg2) {
9012 unsigned int jresult ;
9013 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
9014 unsigned int arg2 ;
9015 bool result;
9016
9017 arg1 = (Assimp::Importer *)jarg1;
9018 arg2 = (unsigned int)jarg2;
9019 result = (bool)((Assimp::Importer const *)arg1)->ValidateFlags(arg2);
9020 jresult = result;
9021 return jresult;
9022 }
9023
9024
9025 SWIGEXPORT void * SWIGSTDCALL CSharp_Importer_ReadFile__SWIG_0(void * jarg1, char * jarg2, unsigned int jarg3) {
9026 void * jresult ;
9027 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
9028 char *arg2 = (char *) 0 ;
9029 unsigned int arg3 ;
9030 aiScene *result = 0 ;
9031
9032 arg1 = (Assimp::Importer *)jarg1;
9033 arg2 = (char *)jarg2;
9034 arg3 = (unsigned int)jarg3;
9035 result = (aiScene *)(arg1)->ReadFile((char const *)arg2,arg3);
9036 jresult = (void *)result;
9037 return jresult;
9038 }
9039
9040
9041 SWIGEXPORT void SWIGSTDCALL CSharp_Importer_FreeScene(void * jarg1) {
9042 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
9043
9044 arg1 = (Assimp::Importer *)jarg1;
9045 (arg1)->FreeScene();
9046 }
9047
9048
9049 SWIGEXPORT char * SWIGSTDCALL CSharp_Importer_GetErrorString(void * jarg1) {
9050 char * jresult ;
9051 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
9052 char *result = 0 ;
9053
9054 arg1 = (Assimp::Importer *)jarg1;
9055 result = (char *)((Assimp::Importer const *)arg1)->GetErrorString();
9056 jresult = SWIG_csharp_string_callback((const char *)result);
9057 return jresult;
9058 }
9059
9060
9061 SWIGEXPORT void * SWIGSTDCALL CSharp_Importer_GetScene(void * jarg1) {
9062 void * jresult ;
9063 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
9064 aiScene *result = 0 ;
9065
9066 arg1 = (Assimp::Importer *)jarg1;
9067 result = (aiScene *)((Assimp::Importer const *)arg1)->GetScene();
9068 jresult = (void *)result;
9069 return jresult;
9070 }
9071
9072
9073 SWIGEXPORT void * SWIGSTDCALL CSharp_Importer_GetOrphanedScene(void * jarg1) {
9074 void * jresult ;
9075 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
9076 aiScene *result = 0 ;
9077
9078 arg1 = (Assimp::Importer *)jarg1;
9079 result = (aiScene *)(arg1)->GetOrphanedScene();
9080 jresult = (void *)result;
9081 return jresult;
9082 }
9083
9084
9085 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Importer_IsExtensionSupported__SWIG_0(void * jarg1, char * jarg2) {
9086 unsigned int jresult ;
9087 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
9088 char *arg2 = (char *) 0 ;
9089 bool result;
9090
9091 arg1 = (Assimp::Importer *)jarg1;
9092 arg2 = (char *)jarg2;
9093 result = (bool)((Assimp::Importer const *)arg1)->IsExtensionSupported((char const *)arg2);
9094 jresult = result;
9095 return jresult;
9096 }
9097
9098
9099 SWIGEXPORT void SWIGSTDCALL CSharp_Importer_GetExtensionList__SWIG_0(void * jarg1, void * jarg2) {
9100 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
9101 aiString *arg2 = 0 ;
9102
9103 arg1 = (Assimp::Importer *)jarg1;
9104 arg2 = (aiString *)jarg2;
9105 if (!arg2) {
9106 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiString & type is null", 0);
9107 return ;
9108 }
9109 ((Assimp::Importer const *)arg1)->GetExtensionList(*arg2);
9110 }
9111
9112
9113 SWIGEXPORT void SWIGSTDCALL CSharp_Importer_GetExtensionList__SWIG_1(void * jarg1, void * jarg2) {
9114 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
9115 std::string *arg2 = 0 ;
9116
9117 arg1 = (Assimp::Importer *)jarg1;
9118 arg2 = (std::string *)jarg2;
9119 if (!arg2) {
9120 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::string & type is null", 0);
9121 return ;
9122 }
9123 ((Assimp::Importer const *)arg1)->GetExtensionList(*arg2);
9124 }
9125
9126
9127 SWIGEXPORT unsigned long SWIGSTDCALL CSharp_Importer_GetImporterCount(void * jarg1) {
9128 unsigned long jresult ;
9129 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
9130 size_t result;
9131
9132 arg1 = (Assimp::Importer *)jarg1;
9133 result = ((Assimp::Importer const *)arg1)->GetImporterCount();
9134 jresult = (unsigned long)result;
9135 return jresult;
9136 }
9137
9138
9139 SWIGEXPORT void * SWIGSTDCALL CSharp_Importer_GetImporterInfo(void * jarg1, unsigned long jarg2) {
9140 void * jresult ;
9141 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
9142 size_t arg2 ;
9143 aiImporterDesc *result = 0 ;
9144
9145 arg1 = (Assimp::Importer *)jarg1;
9146 arg2 = (size_t)jarg2;
9147 result = (aiImporterDesc *)((Assimp::Importer const *)arg1)->GetImporterInfo(arg2);
9148 jresult = (void *)result;
9149 return jresult;
9150 }
9151
9152
9153 SWIGEXPORT void * SWIGSTDCALL CSharp_Importer_GetImporter__SWIG_0(void * jarg1, unsigned long jarg2) {
9154 void * jresult ;
9155 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
9156 size_t arg2 ;
9157 Assimp::BaseImporter *result = 0 ;
9158
9159 arg1 = (Assimp::Importer *)jarg1;
9160 arg2 = (size_t)jarg2;
9161 result = (Assimp::BaseImporter *)((Assimp::Importer const *)arg1)->GetImporter(arg2);
9162 jresult = (void *)result;
9163 return jresult;
9164 }
9165
9166
9167 SWIGEXPORT void * SWIGSTDCALL CSharp_Importer_GetImporter__SWIG_1(void * jarg1, char * jarg2) {
9168 void * jresult ;
9169 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
9170 char *arg2 = (char *) 0 ;
9171 Assimp::BaseImporter *result = 0 ;
9172
9173 arg1 = (Assimp::Importer *)jarg1;
9174 arg2 = (char *)jarg2;
9175 result = (Assimp::BaseImporter *)((Assimp::Importer const *)arg1)->GetImporter((char const *)arg2);
9176 jresult = (void *)result;
9177 return jresult;
9178 }
9179
9180
9181 SWIGEXPORT unsigned long SWIGSTDCALL CSharp_Importer_GetImporterIndex(void * jarg1, char * jarg2) {
9182 unsigned long jresult ;
9183 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
9184 char *arg2 = (char *) 0 ;
9185 size_t result;
9186
9187 arg1 = (Assimp::Importer *)jarg1;
9188 arg2 = (char *)jarg2;
9189 result = ((Assimp::Importer const *)arg1)->GetImporterIndex((char const *)arg2);
9190 jresult = (unsigned long)result;
9191 return jresult;
9192 }
9193
9194
9195 SWIGEXPORT void SWIGSTDCALL CSharp_Importer_GetMemoryRequirements(void * jarg1, void * jarg2) {
9196 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
9197 aiMemoryInfo *arg2 = 0 ;
9198
9199 arg1 = (Assimp::Importer *)jarg1;
9200 arg2 = (aiMemoryInfo *)jarg2;
9201 if (!arg2) {
9202 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMemoryInfo & type is null", 0);
9203 return ;
9204 }
9205 ((Assimp::Importer const *)arg1)->GetMemoryRequirements(*arg2);
9206 }
9207
9208
9209 SWIGEXPORT void SWIGSTDCALL CSharp_Importer_SetExtraVerbose(void * jarg1, unsigned int jarg2) {
9210 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
9211 bool arg2 ;
9212
9213 arg1 = (Assimp::Importer *)jarg1;
9214 arg2 = jarg2 ? true : false;
9215 (arg1)->SetExtraVerbose(arg2);
9216 }
9217
9218
9219 SWIGEXPORT void * SWIGSTDCALL CSharp_Importer_Pimpl__SWIG_0(void * jarg1) {
9220 void * jresult ;
9221 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
9222 Assimp::ImporterPimpl *result = 0 ;
9223
9224 arg1 = (Assimp::Importer *)jarg1;
9225 result = (Assimp::ImporterPimpl *)(arg1)->Pimpl();
9226 jresult = (void *)result;
9227 return jresult;
9228 }
9229
9230
9231 SWIGEXPORT char * SWIGSTDCALL CSharp_Importer_GetExtensionList__SWIG_2(void * jarg1) {
9232 char * jresult ;
9233 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
9234 std::string result;
9235
9236 arg1 = (Assimp::Importer *)jarg1;
9237 result = Assimp_Importer_GetExtensionList__SWIG_2(arg1);
9238 jresult = SWIG_csharp_string_callback((&result)->c_str());
9239 return jresult;
9240 }
9241
9242
9243 SWIGEXPORT void SWIGSTDCALL CSharp_delete_ProgressHandler(void * jarg1) {
9244 Assimp::ProgressHandler *arg1 = (Assimp::ProgressHandler *) 0 ;
9245
9246 arg1 = (Assimp::ProgressHandler *)jarg1;
9247 delete arg1;
9248 }
9249
9250
9251 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_ProgressHandler_Update__SWIG_0(void * jarg1, float jarg2) {
9252 unsigned int jresult ;
9253 Assimp::ProgressHandler *arg1 = (Assimp::ProgressHandler *) 0 ;
47829254 float arg2 ;
4783 float arg3 ;
4784
4785 arg1 = (aiVector2D *)jarg1;
9255 bool result;
9256
9257 arg1 = (Assimp::ProgressHandler *)jarg1;
47869258 arg2 = (float)jarg2;
4787 arg3 = (float)jarg3;
4788 (arg1)->Set(arg2,arg3);
4789 }
4790
4791
4792 SWIGEXPORT float SWIGSTDCALL CSharp_aiVector2D_SquareLength(void * jarg1) {
4793 float jresult ;
4794 aiVector2D *arg1 = (aiVector2D *) 0 ;
4795 float result;
4796
4797 arg1 = (aiVector2D *)jarg1;
4798 result = (float)((aiVector2D const *)arg1)->SquareLength();
4799 jresult = result;
4800 return jresult;
4801 }
4802
4803
4804 SWIGEXPORT float SWIGSTDCALL CSharp_aiVector2D_Length(void * jarg1) {
4805 float jresult ;
4806 aiVector2D *arg1 = (aiVector2D *) 0 ;
4807 float result;
4808
4809 arg1 = (aiVector2D *)jarg1;
4810 result = (float)((aiVector2D const *)arg1)->Length();
4811 jresult = result;
4812 return jresult;
4813 }
4814
4815
4816 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector2D_Normalize(void * jarg1) {
4817 void * jresult ;
4818 aiVector2D *arg1 = (aiVector2D *) 0 ;
4819 aiVector2D *result = 0 ;
4820
4821 arg1 = (aiVector2D *)jarg1;
4822 result = (aiVector2D *) &(arg1)->Normalize();
4823 jresult = (void *)result;
4824 return jresult;
4825 }
4826
4827
4828 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector2D___addnset__(void * jarg1, void * jarg2) {
4829 void * jresult ;
4830 aiVector2D *arg1 = (aiVector2D *) 0 ;
4831 aiVector2D *arg2 = 0 ;
4832 aiVector2D *result = 0 ;
4833
4834 arg1 = (aiVector2D *)jarg1;
4835 arg2 = (aiVector2D *)jarg2;
4836 if (!arg2) {
4837 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2D const & type is null", 0);
4838 return 0;
4839 }
4840 result = (aiVector2D *) &(arg1)->operator +=((aiVector2D const &)*arg2);
4841 jresult = (void *)result;
4842 return jresult;
4843 }
4844
4845
4846 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector2D___subnset__(void * jarg1, void * jarg2) {
4847 void * jresult ;
4848 aiVector2D *arg1 = (aiVector2D *) 0 ;
4849 aiVector2D *arg2 = 0 ;
4850 aiVector2D *result = 0 ;
4851
4852 arg1 = (aiVector2D *)jarg1;
4853 arg2 = (aiVector2D *)jarg2;
4854 if (!arg2) {
4855 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2D const & type is null", 0);
4856 return 0;
4857 }
4858 result = (aiVector2D *) &(arg1)->operator -=((aiVector2D const &)*arg2);
4859 jresult = (void *)result;
4860 return jresult;
4861 }
4862
4863
4864 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector2D___mulnset__(void * jarg1, float jarg2) {
4865 void * jresult ;
4866 aiVector2D *arg1 = (aiVector2D *) 0 ;
4867 float arg2 ;
4868 aiVector2D *result = 0 ;
4869
4870 arg1 = (aiVector2D *)jarg1;
4871 arg2 = (float)jarg2;
4872 result = (aiVector2D *) &(arg1)->operator *=(arg2);
4873 jresult = (void *)result;
4874 return jresult;
4875 }
4876
4877
4878 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector2D___divnset__(void * jarg1, float jarg2) {
4879 void * jresult ;
4880 aiVector2D *arg1 = (aiVector2D *) 0 ;
4881 float arg2 ;
4882 aiVector2D *result = 0 ;
4883
4884 arg1 = (aiVector2D *)jarg1;
4885 arg2 = (float)jarg2;
4886 result = (aiVector2D *) &(arg1)->operator /=(arg2);
4887 jresult = (void *)result;
4888 return jresult;
4889 }
4890
4891
4892 SWIGEXPORT float SWIGSTDCALL CSharp_aiVector2D___idx____SWIG_0(void * jarg1, unsigned int jarg2) {
4893 float jresult ;
4894 aiVector2D *arg1 = (aiVector2D *) 0 ;
4895 unsigned int arg2 ;
4896 float result;
4897
4898 arg1 = (aiVector2D *)jarg1;
4899 arg2 = (unsigned int)jarg2;
4900 result = (float)((aiVector2D const *)arg1)->operator [](arg2);
4901 jresult = result;
4902 return jresult;
4903 }
4904
4905
4906 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiVector2D___equal__(void * jarg1, void * jarg2) {
9259 result = (bool)(arg1)->Update(arg2);
9260 jresult = result;
9261 return jresult;
9262 }
9263
9264
9265 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_ProgressHandler_Update__SWIG_1(void * jarg1) {
49079266 unsigned int jresult ;
4908 aiVector2D *arg1 = (aiVector2D *) 0 ;
4909 aiVector2D *arg2 = 0 ;
9267 Assimp::ProgressHandler *arg1 = (Assimp::ProgressHandler *) 0 ;
49109268 bool result;
49119269
4912 arg1 = (aiVector2D *)jarg1;
4913 arg2 = (aiVector2D *)jarg2;
4914 if (!arg2) {
4915 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2D const & type is null", 0);
4916 return 0;
4917 }
4918 result = (bool)((aiVector2D const *)arg1)->operator ==((aiVector2D const &)*arg2);
4919 jresult = result;
4920 return jresult;
4921 }
4922
4923
4924 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiVector2D___nequal__(void * jarg1, void * jarg2) {
4925 unsigned int jresult ;
4926 aiVector2D *arg1 = (aiVector2D *) 0 ;
4927 aiVector2D *arg2 = 0 ;
4928 bool result;
4929
4930 arg1 = (aiVector2D *)jarg1;
4931 arg2 = (aiVector2D *)jarg2;
4932 if (!arg2) {
4933 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2D const & type is null", 0);
4934 return 0;
4935 }
4936 result = (bool)((aiVector2D const *)arg1)->operator !=((aiVector2D const &)*arg2);
4937 jresult = result;
4938 return jresult;
4939 }
4940
4941
4942 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector2D___set__(void * jarg1, float jarg2) {
4943 void * jresult ;
4944 aiVector2D *arg1 = (aiVector2D *) 0 ;
4945 float arg2 ;
4946 aiVector2D *result = 0 ;
4947
4948 arg1 = (aiVector2D *)jarg1;
4949 arg2 = (float)jarg2;
4950 result = (aiVector2D *) &(arg1)->operator =(arg2);
4951 jresult = (void *)result;
4952 return jresult;
4953 }
4954
4955
4956 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector2D_SymMul(void * jarg1, void * jarg2) {
4957 void * jresult ;
4958 aiVector2D *arg1 = (aiVector2D *) 0 ;
4959 aiVector2D *arg2 = 0 ;
4960 aiVector2D result;
4961
4962 arg1 = (aiVector2D *)jarg1;
4963 arg2 = (aiVector2D *)jarg2;
4964 if (!arg2) {
4965 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2D const & type is null", 0);
4966 return 0;
4967 }
4968 result = (arg1)->SymMul((aiVector2D const &)*arg2);
4969 jresult = new aiVector2D((const aiVector2D &)result);
4970 return jresult;
4971 }
4972
4973
4974 SWIGEXPORT void SWIGSTDCALL CSharp_aiVector2D_x_set(void * jarg1, float jarg2) {
4975 aiVector2D *arg1 = (aiVector2D *) 0 ;
4976 float arg2 ;
4977
4978 arg1 = (aiVector2D *)jarg1;
4979 arg2 = (float)jarg2;
4980 if (arg1) (arg1)->x = arg2;
4981 }
4982
4983
4984 SWIGEXPORT float SWIGSTDCALL CSharp_aiVector2D_x_get(void * jarg1) {
4985 float jresult ;
4986 aiVector2D *arg1 = (aiVector2D *) 0 ;
4987 float result;
4988
4989 arg1 = (aiVector2D *)jarg1;
4990 result = (float) ((arg1)->x);
4991 jresult = result;
4992 return jresult;
4993 }
4994
4995
4996 SWIGEXPORT void SWIGSTDCALL CSharp_aiVector2D_y_set(void * jarg1, float jarg2) {
4997 aiVector2D *arg1 = (aiVector2D *) 0 ;
4998 float arg2 ;
4999
5000 arg1 = (aiVector2D *)jarg1;
5001 arg2 = (float)jarg2;
5002 if (arg1) (arg1)->y = arg2;
5003 }
5004
5005
5006 SWIGEXPORT float SWIGSTDCALL CSharp_aiVector2D_y_get(void * jarg1) {
5007 float jresult ;
5008 aiVector2D *arg1 = (aiVector2D *) 0 ;
5009 float result;
5010
5011 arg1 = (aiVector2D *)jarg1;
5012 result = (float) ((arg1)->y);
5013 jresult = result;
5014 return jresult;
5015 }
5016
5017
5018 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiVector2D(void * jarg1) {
5019 aiVector2D *arg1 = (aiVector2D *) 0 ;
5020
5021 arg1 = (aiVector2D *)jarg1;
5022 delete arg1;
5023 }
5024
5025
5026 SWIGEXPORT void * SWIGSTDCALL CSharp___add__(void * jarg1, void * jarg2) {
5027 void * jresult ;
5028 aiVector2D *arg1 = 0 ;
5029 aiVector2D *arg2 = 0 ;
5030 aiVector2D result;
5031
5032 arg1 = (aiVector2D *)jarg1;
5033 if (!arg1) {
5034 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2D const & type is null", 0);
5035 return 0;
5036 }
5037 arg2 = (aiVector2D *)jarg2;
5038 if (!arg2) {
5039 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2D const & type is null", 0);
5040 return 0;
5041 }
5042 result = operator +((aiVector2D const &)*arg1,(aiVector2D const &)*arg2);
5043 jresult = new aiVector2D((const aiVector2D &)result);
5044 return jresult;
5045 }
5046
5047
5048 SWIGEXPORT void * SWIGSTDCALL CSharp___sub____SWIG_0(void * jarg1, void * jarg2) {
5049 void * jresult ;
5050 aiVector2D *arg1 = 0 ;
5051 aiVector2D *arg2 = 0 ;
5052 aiVector2D result;
5053
5054 arg1 = (aiVector2D *)jarg1;
5055 if (!arg1) {
5056 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2D const & type is null", 0);
5057 return 0;
5058 }
5059 arg2 = (aiVector2D *)jarg2;
5060 if (!arg2) {
5061 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2D const & type is null", 0);
5062 return 0;
5063 }
5064 result = operator -((aiVector2D const &)*arg1,(aiVector2D const &)*arg2);
5065 jresult = new aiVector2D((const aiVector2D &)result);
5066 return jresult;
5067 }
5068
5069
5070 SWIGEXPORT float SWIGSTDCALL CSharp___mul____SWIG_0(void * jarg1, void * jarg2) {
5071 float jresult ;
5072 aiVector2D *arg1 = 0 ;
5073 aiVector2D *arg2 = 0 ;
5074 float result;
5075
5076 arg1 = (aiVector2D *)jarg1;
5077 if (!arg1) {
5078 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2D const & type is null", 0);
5079 return 0;
5080 }
5081 arg2 = (aiVector2D *)jarg2;
5082 if (!arg2) {
5083 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2D const & type is null", 0);
5084 return 0;
5085 }
5086 result = (float)operator *((aiVector2D const &)*arg1,(aiVector2D const &)*arg2);
5087 jresult = result;
5088 return jresult;
5089 }
5090
5091
5092 SWIGEXPORT void * SWIGSTDCALL CSharp___mul____SWIG_1(float jarg1, void * jarg2) {
5093 void * jresult ;
5094 float arg1 ;
5095 aiVector2D *arg2 = 0 ;
5096 aiVector2D result;
5097
5098 arg1 = (float)jarg1;
5099 arg2 = (aiVector2D *)jarg2;
5100 if (!arg2) {
5101 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2D const & type is null", 0);
5102 return 0;
5103 }
5104 result = operator *(arg1,(aiVector2D const &)*arg2);
5105 jresult = new aiVector2D((const aiVector2D &)result);
5106 return jresult;
5107 }
5108
5109
5110 SWIGEXPORT void * SWIGSTDCALL CSharp___mul____SWIG_2(void * jarg1, float jarg2) {
5111 void * jresult ;
5112 aiVector2D *arg1 = 0 ;
5113 float arg2 ;
5114 aiVector2D result;
5115
5116 arg1 = (aiVector2D *)jarg1;
5117 if (!arg1) {
5118 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2D const & type is null", 0);
5119 return 0;
5120 }
5121 arg2 = (float)jarg2;
5122 result = operator *((aiVector2D const &)*arg1,arg2);
5123 jresult = new aiVector2D((const aiVector2D &)result);
5124 return jresult;
5125 }
5126
5127
5128 SWIGEXPORT void * SWIGSTDCALL CSharp___div____SWIG_0(void * jarg1, float jarg2) {
5129 void * jresult ;
5130 aiVector2D *arg1 = 0 ;
5131 float arg2 ;
5132 aiVector2D result;
5133
5134 arg1 = (aiVector2D *)jarg1;
5135 if (!arg1) {
5136 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2D const & type is null", 0);
5137 return 0;
5138 }
5139 arg2 = (float)jarg2;
5140 result = operator /((aiVector2D const &)*arg1,arg2);
5141 jresult = new aiVector2D((const aiVector2D &)result);
5142 return jresult;
5143 }
5144
5145
5146 SWIGEXPORT void * SWIGSTDCALL CSharp___div____SWIG_1(void * jarg1, void * jarg2) {
5147 void * jresult ;
5148 aiVector2D *arg1 = 0 ;
5149 aiVector2D *arg2 = 0 ;
5150 aiVector2D result;
5151
5152 arg1 = (aiVector2D *)jarg1;
5153 if (!arg1) {
5154 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2D const & type is null", 0);
5155 return 0;
5156 }
5157 arg2 = (aiVector2D *)jarg2;
5158 if (!arg2) {
5159 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2D const & type is null", 0);
5160 return 0;
5161 }
5162 result = operator /((aiVector2D const &)*arg1,(aiVector2D const &)*arg2);
5163 jresult = new aiVector2D((const aiVector2D &)result);
5164 return jresult;
5165 }
5166
5167
5168 SWIGEXPORT void * SWIGSTDCALL CSharp___sub____SWIG_1(void * jarg1) {
5169 void * jresult ;
5170 aiVector2D *arg1 = 0 ;
5171 aiVector2D result;
5172
5173 arg1 = (aiVector2D *)jarg1;
5174 if (!arg1) {
5175 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2D const & type is null", 0);
5176 return 0;
5177 }
5178 result = operator -((aiVector2D const &)*arg1);
5179 jresult = new aiVector2D((const aiVector2D &)result);
5180 return jresult;
5181 }
5182
5183
5184 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVector3D__SWIG_0() {
5185 void * jresult ;
5186 aiVector3D *result = 0 ;
5187
5188 result = (aiVector3D *)new aiVector3D();
5189 jresult = (void *)result;
5190 return jresult;
5191 }
5192
5193
5194 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVector3D__SWIG_1(float jarg1, float jarg2, float jarg3) {
9270 arg1 = (Assimp::ProgressHandler *)jarg1;
9271 result = (bool)(arg1)->Update();
9272 jresult = result;
9273 return jresult;
9274 }
9275
9276
9277 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiColor4D__SWIG_0() {
9278 void * jresult ;
9279 aiColor4t< float > *result = 0 ;
9280
9281 result = (aiColor4t< float > *)new aiColor4t< float >();
9282 jresult = (void *)result;
9283 return jresult;
9284 }
9285
9286
9287 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiColor4D__SWIG_1(float jarg1, float jarg2, float jarg3, float jarg4) {
51959288 void * jresult ;
51969289 float arg1 ;
51979290 float arg2 ;
51989291 float arg3 ;
5199 aiVector3D *result = 0 ;
9292 float arg4 ;
9293 aiColor4t< float > *result = 0 ;
52009294
52019295 arg1 = (float)jarg1;
52029296 arg2 = (float)jarg2;
52039297 arg3 = (float)jarg3;
5204 result = (aiVector3D *)new aiVector3D(arg1,arg2,arg3);
9298 arg4 = (float)jarg4;
9299 result = (aiColor4t< float > *)new aiColor4t< float >(arg1,arg2,arg3,arg4);
9300 jresult = (void *)result;
9301 return jresult;
9302 }
9303
9304
9305 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiColor4D__SWIG_2(float jarg1) {
9306 void * jresult ;
9307 float arg1 ;
9308 aiColor4t< float > *result = 0 ;
9309
9310 arg1 = (float)jarg1;
9311 result = (aiColor4t< float > *)new aiColor4t< float >(arg1);
9312 jresult = (void *)result;
9313 return jresult;
9314 }
9315
9316
9317 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiColor4D__SWIG_3(void * jarg1) {
9318 void * jresult ;
9319 aiColor4t< float > *arg1 = 0 ;
9320 aiColor4t< float > *result = 0 ;
9321
9322 arg1 = (aiColor4t< float > *)jarg1;
9323 if (!arg1) {
9324 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiColor4t< float > const & type is null", 0);
9325 return 0;
9326 }
9327 result = (aiColor4t< float > *)new aiColor4t< float >((aiColor4t< float > const &)*arg1);
9328 jresult = (void *)result;
9329 return jresult;
9330 }
9331
9332
9333 SWIGEXPORT void * SWIGSTDCALL CSharp_aiColor4D___addnset__(void * jarg1, void * jarg2) {
9334 void * jresult ;
9335 aiColor4t< float > *arg1 = (aiColor4t< float > *) 0 ;
9336 aiColor4t< float > *arg2 = 0 ;
9337 aiColor4t< float > *result = 0 ;
9338
9339 arg1 = (aiColor4t< float > *)jarg1;
9340 arg2 = (aiColor4t< float > *)jarg2;
9341 if (!arg2) {
9342 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiColor4t< float > const & type is null", 0);
9343 return 0;
9344 }
9345 result = (aiColor4t< float > *) &(arg1)->operator +=((aiColor4t< float > const &)*arg2);
9346 jresult = (void *)result;
9347 return jresult;
9348 }
9349
9350
9351 SWIGEXPORT void * SWIGSTDCALL CSharp_aiColor4D___subnset__(void * jarg1, void * jarg2) {
9352 void * jresult ;
9353 aiColor4t< float > *arg1 = (aiColor4t< float > *) 0 ;
9354 aiColor4t< float > *arg2 = 0 ;
9355 aiColor4t< float > *result = 0 ;
9356
9357 arg1 = (aiColor4t< float > *)jarg1;
9358 arg2 = (aiColor4t< float > *)jarg2;
9359 if (!arg2) {
9360 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiColor4t< float > const & type is null", 0);
9361 return 0;
9362 }
9363 result = (aiColor4t< float > *) &(arg1)->operator -=((aiColor4t< float > const &)*arg2);
9364 jresult = (void *)result;
9365 return jresult;
9366 }
9367
9368
9369 SWIGEXPORT void * SWIGSTDCALL CSharp_aiColor4D___mulnset__(void * jarg1, float jarg2) {
9370 void * jresult ;
9371 aiColor4t< float > *arg1 = (aiColor4t< float > *) 0 ;
9372 float arg2 ;
9373 aiColor4t< float > *result = 0 ;
9374
9375 arg1 = (aiColor4t< float > *)jarg1;
9376 arg2 = (float)jarg2;
9377 result = (aiColor4t< float > *) &(arg1)->operator *=(arg2);
9378 jresult = (void *)result;
9379 return jresult;
9380 }
9381
9382
9383 SWIGEXPORT void * SWIGSTDCALL CSharp_aiColor4D___divnset__(void * jarg1, float jarg2) {
9384 void * jresult ;
9385 aiColor4t< float > *arg1 = (aiColor4t< float > *) 0 ;
9386 float arg2 ;
9387 aiColor4t< float > *result = 0 ;
9388
9389 arg1 = (aiColor4t< float > *)jarg1;
9390 arg2 = (float)jarg2;
9391 result = (aiColor4t< float > *) &(arg1)->operator /=(arg2);
9392 jresult = (void *)result;
9393 return jresult;
9394 }
9395
9396
9397 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiColor4D___equal__(void * jarg1, void * jarg2) {
9398 unsigned int jresult ;
9399 aiColor4t< float > *arg1 = (aiColor4t< float > *) 0 ;
9400 aiColor4t< float > *arg2 = 0 ;
9401 bool result;
9402
9403 arg1 = (aiColor4t< float > *)jarg1;
9404 arg2 = (aiColor4t< float > *)jarg2;
9405 if (!arg2) {
9406 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiColor4t< float > const & type is null", 0);
9407 return 0;
9408 }
9409 result = (bool)((aiColor4t< float > const *)arg1)->operator ==((aiColor4t< float > const &)*arg2);
9410 jresult = result;
9411 return jresult;
9412 }
9413
9414
9415 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiColor4D___nequal__(void * jarg1, void * jarg2) {
9416 unsigned int jresult ;
9417 aiColor4t< float > *arg1 = (aiColor4t< float > *) 0 ;
9418 aiColor4t< float > *arg2 = 0 ;
9419 bool result;
9420
9421 arg1 = (aiColor4t< float > *)jarg1;
9422 arg2 = (aiColor4t< float > *)jarg2;
9423 if (!arg2) {
9424 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiColor4t< float > const & type is null", 0);
9425 return 0;
9426 }
9427 result = (bool)((aiColor4t< float > const *)arg1)->operator !=((aiColor4t< float > const &)*arg2);
9428 jresult = result;
9429 return jresult;
9430 }
9431
9432
9433 SWIGEXPORT float SWIGSTDCALL CSharp_aiColor4D___idx____SWIG_0(void * jarg1, unsigned int jarg2) {
9434 float jresult ;
9435 aiColor4t< float > *arg1 = (aiColor4t< float > *) 0 ;
9436 unsigned int arg2 ;
9437 float result;
9438
9439 arg1 = (aiColor4t< float > *)jarg1;
9440 arg2 = (unsigned int)jarg2;
9441 result = (float)((aiColor4t< float > const *)arg1)->operator [](arg2);
9442 jresult = result;
9443 return jresult;
9444 }
9445
9446
9447 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiColor4D_IsBlack(void * jarg1) {
9448 unsigned int jresult ;
9449 aiColor4t< float > *arg1 = (aiColor4t< float > *) 0 ;
9450 bool result;
9451
9452 arg1 = (aiColor4t< float > *)jarg1;
9453 result = (bool)((aiColor4t< float > const *)arg1)->IsBlack();
9454 jresult = result;
9455 return jresult;
9456 }
9457
9458
9459 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4D_r_set(void * jarg1, float jarg2) {
9460 aiColor4t< float > *arg1 = (aiColor4t< float > *) 0 ;
9461 float arg2 ;
9462
9463 arg1 = (aiColor4t< float > *)jarg1;
9464 arg2 = (float)jarg2;
9465 if (arg1) (arg1)->r = arg2;
9466 }
9467
9468
9469 SWIGEXPORT float SWIGSTDCALL CSharp_aiColor4D_r_get(void * jarg1) {
9470 float jresult ;
9471 aiColor4t< float > *arg1 = (aiColor4t< float > *) 0 ;
9472 float result;
9473
9474 arg1 = (aiColor4t< float > *)jarg1;
9475 result = (float) ((arg1)->r);
9476 jresult = result;
9477 return jresult;
9478 }
9479
9480
9481 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4D_g_set(void * jarg1, float jarg2) {
9482 aiColor4t< float > *arg1 = (aiColor4t< float > *) 0 ;
9483 float arg2 ;
9484
9485 arg1 = (aiColor4t< float > *)jarg1;
9486 arg2 = (float)jarg2;
9487 if (arg1) (arg1)->g = arg2;
9488 }
9489
9490
9491 SWIGEXPORT float SWIGSTDCALL CSharp_aiColor4D_g_get(void * jarg1) {
9492 float jresult ;
9493 aiColor4t< float > *arg1 = (aiColor4t< float > *) 0 ;
9494 float result;
9495
9496 arg1 = (aiColor4t< float > *)jarg1;
9497 result = (float) ((arg1)->g);
9498 jresult = result;
9499 return jresult;
9500 }
9501
9502
9503 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4D_b_set(void * jarg1, float jarg2) {
9504 aiColor4t< float > *arg1 = (aiColor4t< float > *) 0 ;
9505 float arg2 ;
9506
9507 arg1 = (aiColor4t< float > *)jarg1;
9508 arg2 = (float)jarg2;
9509 if (arg1) (arg1)->b = arg2;
9510 }
9511
9512
9513 SWIGEXPORT float SWIGSTDCALL CSharp_aiColor4D_b_get(void * jarg1) {
9514 float jresult ;
9515 aiColor4t< float > *arg1 = (aiColor4t< float > *) 0 ;
9516 float result;
9517
9518 arg1 = (aiColor4t< float > *)jarg1;
9519 result = (float) ((arg1)->b);
9520 jresult = result;
9521 return jresult;
9522 }
9523
9524
9525 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4D_a_set(void * jarg1, float jarg2) {
9526 aiColor4t< float > *arg1 = (aiColor4t< float > *) 0 ;
9527 float arg2 ;
9528
9529 arg1 = (aiColor4t< float > *)jarg1;
9530 arg2 = (float)jarg2;
9531 if (arg1) (arg1)->a = arg2;
9532 }
9533
9534
9535 SWIGEXPORT float SWIGSTDCALL CSharp_aiColor4D_a_get(void * jarg1) {
9536 float jresult ;
9537 aiColor4t< float > *arg1 = (aiColor4t< float > *) 0 ;
9538 float result;
9539
9540 arg1 = (aiColor4t< float > *)jarg1;
9541 result = (float) ((arg1)->a);
9542 jresult = result;
9543 return jresult;
9544 }
9545
9546
9547 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiColor4D(void * jarg1) {
9548 aiColor4t< float > *arg1 = (aiColor4t< float > *) 0 ;
9549
9550 arg1 = (aiColor4t< float > *)jarg1;
9551 delete arg1;
9552 }
9553
9554
9555 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVector3D__SWIG_0() {
9556 void * jresult ;
9557 aiVector3t< float > *result = 0 ;
9558
9559 result = (aiVector3t< float > *)new aiVector3t< float >();
9560 jresult = (void *)result;
9561 return jresult;
9562 }
9563
9564
9565 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVector3D__SWIG_1(float jarg1, float jarg2, float jarg3) {
9566 void * jresult ;
9567 float arg1 ;
9568 float arg2 ;
9569 float arg3 ;
9570 aiVector3t< float > *result = 0 ;
9571
9572 arg1 = (float)jarg1;
9573 arg2 = (float)jarg2;
9574 arg3 = (float)jarg3;
9575 result = (aiVector3t< float > *)new aiVector3t< float >(arg1,arg2,arg3);
52059576 jresult = (void *)result;
52069577 return jresult;
52079578 }
52109581 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVector3D__SWIG_2(float jarg1) {
52119582 void * jresult ;
52129583 float arg1 ;
5213 aiVector3D *result = 0 ;
9584 aiVector3t< float > *result = 0 ;
52149585
52159586 arg1 = (float)jarg1;
5216 result = (aiVector3D *)new aiVector3D(arg1);
9587 result = (aiVector3t< float > *)new aiVector3t< float >(arg1);
52179588 jresult = (void *)result;
52189589 return jresult;
52199590 }
52219592
52229593 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVector3D__SWIG_3(void * jarg1) {
52239594 void * jresult ;
5224 aiVector3D *arg1 = 0 ;
5225 aiVector3D *result = 0 ;
5226
5227 arg1 = (aiVector3D *)jarg1;
9595 aiVector3t< float > *arg1 = 0 ;
9596 aiVector3t< float > *result = 0 ;
9597
9598 arg1 = (aiVector3t< float > *)jarg1;
52289599 if (!arg1) {
5229 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D const & type is null", 0);
9600 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3t< float > const & type is null", 0);
52309601 return 0;
52319602 }
5232 result = (aiVector3D *)new aiVector3D((aiVector3D const &)*arg1);
9603 result = (aiVector3t< float > *)new aiVector3t< float >((aiVector3t< float > const &)*arg1);
52339604 jresult = (void *)result;
52349605 return jresult;
52359606 }
52379608
52389609 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector3D___addnset__(void * jarg1, void * jarg2) {
52399610 void * jresult ;
5240 aiVector3D *arg1 = (aiVector3D *) 0 ;
5241 aiVector3D *arg2 = 0 ;
5242 aiVector3D *result = 0 ;
5243
5244 arg1 = (aiVector3D *)jarg1;
5245 arg2 = (aiVector3D *)jarg2;
9611 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
9612 aiVector3t< float > *arg2 = 0 ;
9613 aiVector3t< float > *result = 0 ;
9614
9615 arg1 = (aiVector3t< float > *)jarg1;
9616 arg2 = (aiVector3t< float > *)jarg2;
52469617 if (!arg2) {
5247 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D const & type is null", 0);
9618 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3t< float > const & type is null", 0);
52489619 return 0;
52499620 }
5250 result = (aiVector3D *) &(arg1)->operator +=((aiVector3D const &)*arg2);
9621 result = (aiVector3t< float > *) &(arg1)->operator +=((aiVector3t< float > const &)*arg2);
52519622 jresult = (void *)result;
52529623 return jresult;
52539624 }
52559626
52569627 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector3D___subnset__(void * jarg1, void * jarg2) {
52579628 void * jresult ;
5258 aiVector3D *arg1 = (aiVector3D *) 0 ;
5259 aiVector3D *arg2 = 0 ;
5260 aiVector3D *result = 0 ;
5261
5262 arg1 = (aiVector3D *)jarg1;
5263 arg2 = (aiVector3D *)jarg2;
9629 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
9630 aiVector3t< float > *arg2 = 0 ;
9631 aiVector3t< float > *result = 0 ;
9632
9633 arg1 = (aiVector3t< float > *)jarg1;
9634 arg2 = (aiVector3t< float > *)jarg2;
52649635 if (!arg2) {
5265 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D const & type is null", 0);
9636 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3t< float > const & type is null", 0);
52669637 return 0;
52679638 }
5268 result = (aiVector3D *) &(arg1)->operator -=((aiVector3D const &)*arg2);
9639 result = (aiVector3t< float > *) &(arg1)->operator -=((aiVector3t< float > const &)*arg2);
52699640 jresult = (void *)result;
52709641 return jresult;
52719642 }
52739644
52749645 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector3D___mulnset____SWIG_0(void * jarg1, float jarg2) {
52759646 void * jresult ;
5276 aiVector3D *arg1 = (aiVector3D *) 0 ;
9647 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
52779648 float arg2 ;
5278 aiVector3D *result = 0 ;
5279
5280 arg1 = (aiVector3D *)jarg1;
9649 aiVector3t< float > *result = 0 ;
9650
9651 arg1 = (aiVector3t< float > *)jarg1;
52819652 arg2 = (float)jarg2;
5282 result = (aiVector3D *) &(arg1)->operator *=(arg2);
9653 result = (aiVector3t< float > *) &(arg1)->operator *=(arg2);
52839654 jresult = (void *)result;
52849655 return jresult;
52859656 }
52879658
52889659 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector3D___divnset__(void * jarg1, float jarg2) {
52899660 void * jresult ;
5290 aiVector3D *arg1 = (aiVector3D *) 0 ;
9661 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
52919662 float arg2 ;
5292 aiVector3D *result = 0 ;
5293
5294 arg1 = (aiVector3D *)jarg1;
9663 aiVector3t< float > *result = 0 ;
9664
9665 arg1 = (aiVector3t< float > *)jarg1;
52959666 arg2 = (float)jarg2;
5296 result = (aiVector3D *) &(arg1)->operator /=(arg2);
9667 result = (aiVector3t< float > *) &(arg1)->operator /=(arg2);
52979668 jresult = (void *)result;
52989669 return jresult;
52999670 }
53019672
53029673 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector3D___mulnset____SWIG_1(void * jarg1, void * jarg2) {
53039674 void * jresult ;
5304 aiVector3D *arg1 = (aiVector3D *) 0 ;
5305 aiMatrix3x3 *arg2 = 0 ;
5306 aiVector3D *result = 0 ;
5307
5308 arg1 = (aiVector3D *)jarg1;
5309 arg2 = (aiMatrix3x3 *)jarg2;
9675 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
9676 aiMatrix3x3t< float > *arg2 = 0 ;
9677 aiVector3t< float > *result = 0 ;
9678
9679 arg1 = (aiVector3t< float > *)jarg1;
9680 arg2 = (aiMatrix3x3t< float > *)jarg2;
53109681 if (!arg2) {
5311 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix3x3 const & type is null", 0);
9682 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix3x3t< float > const & type is null", 0);
53129683 return 0;
53139684 }
5314 result = (aiVector3D *) &(arg1)->operator *=((aiMatrix3x3 const &)*arg2);
9685 result = (aiVector3t< float > *) &(arg1)->operator *=((aiMatrix3x3t< float > const &)*arg2);
53159686 jresult = (void *)result;
53169687 return jresult;
53179688 }
53199690
53209691 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector3D___mulnset____SWIG_2(void * jarg1, void * jarg2) {
53219692 void * jresult ;
5322 aiVector3D *arg1 = (aiVector3D *) 0 ;
5323 aiMatrix4x4 *arg2 = 0 ;
5324 aiVector3D *result = 0 ;
5325
5326 arg1 = (aiVector3D *)jarg1;
5327 arg2 = (aiMatrix4x4 *)jarg2;
9693 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
9694 aiMatrix4x4t< float > *arg2 = 0 ;
9695 aiVector3t< float > *result = 0 ;
9696
9697 arg1 = (aiVector3t< float > *)jarg1;
9698 arg2 = (aiMatrix4x4t< float > *)jarg2;
53289699 if (!arg2) {
5329 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4 const & type is null", 0);
9700 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4t< float > const & type is null", 0);
53309701 return 0;
53319702 }
5332 result = (aiVector3D *) &(arg1)->operator *=((aiMatrix4x4 const &)*arg2);
9703 result = (aiVector3t< float > *) &(arg1)->operator *=((aiMatrix4x4t< float > const &)*arg2);
53339704 jresult = (void *)result;
53349705 return jresult;
53359706 }
53379708
53389709 SWIGEXPORT float SWIGSTDCALL CSharp_aiVector3D___idx____SWIG_0(void * jarg1, unsigned int jarg2) {
53399710 float jresult ;
5340 aiVector3D *arg1 = (aiVector3D *) 0 ;
9711 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
53419712 unsigned int arg2 ;
53429713 float result;
53439714
5344 arg1 = (aiVector3D *)jarg1;
9715 arg1 = (aiVector3t< float > *)jarg1;
53459716 arg2 = (unsigned int)jarg2;
5346 result = (float)((aiVector3D const *)arg1)->operator [](arg2);
9717 result = (float)((aiVector3t< float > const *)arg1)->operator [](arg2);
53479718 jresult = result;
53489719 return jresult;
53499720 }
53519722
53529723 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiVector3D___equal__(void * jarg1, void * jarg2) {
53539724 unsigned int jresult ;
5354 aiVector3D *arg1 = (aiVector3D *) 0 ;
5355 aiVector3D *arg2 = 0 ;
9725 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
9726 aiVector3t< float > *arg2 = 0 ;
53569727 bool result;
53579728
5358 arg1 = (aiVector3D *)jarg1;
5359 arg2 = (aiVector3D *)jarg2;
9729 arg1 = (aiVector3t< float > *)jarg1;
9730 arg2 = (aiVector3t< float > *)jarg2;
53609731 if (!arg2) {
5361 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D const & type is null", 0);
9732 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3t< float > const & type is null", 0);
53629733 return 0;
53639734 }
5364 result = (bool)((aiVector3D const *)arg1)->operator ==((aiVector3D const &)*arg2);
9735 result = (bool)((aiVector3t< float > const *)arg1)->operator ==((aiVector3t< float > const &)*arg2);
53659736 jresult = result;
53669737 return jresult;
53679738 }
53699740
53709741 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiVector3D___nequal__(void * jarg1, void * jarg2) {
53719742 unsigned int jresult ;
5372 aiVector3D *arg1 = (aiVector3D *) 0 ;
5373 aiVector3D *arg2 = 0 ;
9743 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
9744 aiVector3t< float > *arg2 = 0 ;
53749745 bool result;
53759746
5376 arg1 = (aiVector3D *)jarg1;
5377 arg2 = (aiVector3D *)jarg2;
9747 arg1 = (aiVector3t< float > *)jarg1;
9748 arg2 = (aiVector3t< float > *)jarg2;
53789749 if (!arg2) {
5379 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D const & type is null", 0);
9750 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3t< float > const & type is null", 0);
53809751 return 0;
53819752 }
5382 result = (bool)((aiVector3D const *)arg1)->operator !=((aiVector3D const &)*arg2);
9753 result = (bool)((aiVector3t< float > const *)arg1)->operator !=((aiVector3t< float > const &)*arg2);
53839754 jresult = result;
53849755 return jresult;
53859756 }
53869757
53879758
53889759 SWIGEXPORT void SWIGSTDCALL CSharp_aiVector3D_Set(void * jarg1, float jarg2, float jarg3, float jarg4) {
5389 aiVector3D *arg1 = (aiVector3D *) 0 ;
9760 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
53909761 float arg2 ;
53919762 float arg3 ;
5392 float arg4 = (float) 0. ;
5393
5394 arg1 = (aiVector3D *)jarg1;
9763 float arg4 ;
9764
9765 arg1 = (aiVector3t< float > *)jarg1;
53959766 arg2 = (float)jarg2;
53969767 arg3 = (float)jarg3;
53979768 arg4 = (float)jarg4;
54019772
54029773 SWIGEXPORT float SWIGSTDCALL CSharp_aiVector3D_SquareLength(void * jarg1) {
54039774 float jresult ;
5404 aiVector3D *arg1 = (aiVector3D *) 0 ;
9775 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
54059776 float result;
54069777
5407 arg1 = (aiVector3D *)jarg1;
5408 result = (float)((aiVector3D const *)arg1)->SquareLength();
9778 arg1 = (aiVector3t< float > *)jarg1;
9779 result = (float)((aiVector3t< float > const *)arg1)->SquareLength();
54099780 jresult = result;
54109781 return jresult;
54119782 }
54139784
54149785 SWIGEXPORT float SWIGSTDCALL CSharp_aiVector3D_Length(void * jarg1) {
54159786 float jresult ;
5416 aiVector3D *arg1 = (aiVector3D *) 0 ;
9787 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
54179788 float result;
54189789
5419 arg1 = (aiVector3D *)jarg1;
5420 result = (float)((aiVector3D const *)arg1)->Length();
9790 arg1 = (aiVector3t< float > *)jarg1;
9791 result = (float)((aiVector3t< float > const *)arg1)->Length();
54219792 jresult = result;
54229793 return jresult;
54239794 }
54259796
54269797 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector3D_Normalize(void * jarg1) {
54279798 void * jresult ;
5428 aiVector3D *arg1 = (aiVector3D *) 0 ;
5429 aiVector3D *result = 0 ;
5430
5431 arg1 = (aiVector3D *)jarg1;
5432 result = (aiVector3D *) &(arg1)->Normalize();
9799 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
9800 aiVector3t< float > *result = 0 ;
9801
9802 arg1 = (aiVector3t< float > *)jarg1;
9803 result = (aiVector3t< float > *) &(arg1)->Normalize();
54339804 jresult = (void *)result;
54349805 return jresult;
54359806 }
54379808
54389809 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector3D_SymMul(void * jarg1, void * jarg2) {
54399810 void * jresult ;
5440 aiVector3D *arg1 = (aiVector3D *) 0 ;
5441 aiVector3D *arg2 = 0 ;
5442 aiVector3D result;
5443
5444 arg1 = (aiVector3D *)jarg1;
5445 arg2 = (aiVector3D *)jarg2;
9811 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
9812 aiVector3t< float > *arg2 = 0 ;
9813 aiVector3t< float > result;
9814
9815 arg1 = (aiVector3t< float > *)jarg1;
9816 arg2 = (aiVector3t< float > *)jarg2;
54469817 if (!arg2) {
5447 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D const & type is null", 0);
9818 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3t< float > const & type is null", 0);
54489819 return 0;
54499820 }
5450 result = (arg1)->SymMul((aiVector3D const &)*arg2);
5451 jresult = new aiVector3D((const aiVector3D &)result);
9821 result = (arg1)->SymMul((aiVector3t< float > const &)*arg2);
9822 jresult = new aiVector3t< float >((const aiVector3t< float > &)result);
54529823 return jresult;
54539824 }
54549825
54559826
54569827 SWIGEXPORT void SWIGSTDCALL CSharp_aiVector3D_x_set(void * jarg1, float jarg2) {
5457 aiVector3D *arg1 = (aiVector3D *) 0 ;
9828 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
54589829 float arg2 ;
54599830
5460 arg1 = (aiVector3D *)jarg1;
9831 arg1 = (aiVector3t< float > *)jarg1;
54619832 arg2 = (float)jarg2;
54629833 if (arg1) (arg1)->x = arg2;
54639834 }
54659836
54669837 SWIGEXPORT float SWIGSTDCALL CSharp_aiVector3D_x_get(void * jarg1) {
54679838 float jresult ;
5468 aiVector3D *arg1 = (aiVector3D *) 0 ;
9839 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
54699840 float result;
54709841
5471 arg1 = (aiVector3D *)jarg1;
9842 arg1 = (aiVector3t< float > *)jarg1;
54729843 result = (float) ((arg1)->x);
54739844 jresult = result;
54749845 return jresult;
54769847
54779848
54789849 SWIGEXPORT void SWIGSTDCALL CSharp_aiVector3D_y_set(void * jarg1, float jarg2) {
5479 aiVector3D *arg1 = (aiVector3D *) 0 ;
9850 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
54809851 float arg2 ;
54819852
5482 arg1 = (aiVector3D *)jarg1;
9853 arg1 = (aiVector3t< float > *)jarg1;
54839854 arg2 = (float)jarg2;
54849855 if (arg1) (arg1)->y = arg2;
54859856 }
54879858
54889859 SWIGEXPORT float SWIGSTDCALL CSharp_aiVector3D_y_get(void * jarg1) {
54899860 float jresult ;
5490 aiVector3D *arg1 = (aiVector3D *) 0 ;
9861 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
54919862 float result;
54929863
5493 arg1 = (aiVector3D *)jarg1;
9864 arg1 = (aiVector3t< float > *)jarg1;
54949865 result = (float) ((arg1)->y);
54959866 jresult = result;
54969867 return jresult;
54989869
54999870
55009871 SWIGEXPORT void SWIGSTDCALL CSharp_aiVector3D_z_set(void * jarg1, float jarg2) {
5501 aiVector3D *arg1 = (aiVector3D *) 0 ;
9872 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
55029873 float arg2 ;
55039874
5504 arg1 = (aiVector3D *)jarg1;
9875 arg1 = (aiVector3t< float > *)jarg1;
55059876 arg2 = (float)jarg2;
55069877 if (arg1) (arg1)->z = arg2;
55079878 }
55099880
55109881 SWIGEXPORT float SWIGSTDCALL CSharp_aiVector3D_z_get(void * jarg1) {
55119882 float jresult ;
5512 aiVector3D *arg1 = (aiVector3D *) 0 ;
9883 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
55139884 float result;
55149885
5515 arg1 = (aiVector3D *)jarg1;
9886 arg1 = (aiVector3t< float > *)jarg1;
55169887 result = (float) ((arg1)->z);
55179888 jresult = result;
55189889 return jresult;
55209891
55219892
55229893 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiVector3D(void * jarg1) {
5523 aiVector3D *arg1 = (aiVector3D *) 0 ;
5524
5525 arg1 = (aiVector3D *)jarg1;
9894 aiVector3t< float > *arg1 = (aiVector3t< float > *) 0 ;
9895
9896 arg1 = (aiVector3t< float > *)jarg1;
55269897 delete arg1;
55279898 }
55289899
55299900
5530 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiColor4D__SWIG_0() {
5531 void * jresult ;
5532 aiColor4D *result = 0 ;
5533
5534 result = (aiColor4D *)new aiColor4D();
5535 jresult = (void *)result;
5536 return jresult;
5537 }
5538
5539
5540 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiColor4D__SWIG_1(float jarg1, float jarg2, float jarg3, float jarg4) {
9901 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVector2D__SWIG_0() {
9902 void * jresult ;
9903 aiVector2t< float > *result = 0 ;
9904
9905 result = (aiVector2t< float > *)new aiVector2t< float >();
9906 jresult = (void *)result;
9907 return jresult;
9908 }
9909
9910
9911 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVector2D__SWIG_1(float jarg1, float jarg2) {
9912 void * jresult ;
9913 float arg1 ;
9914 float arg2 ;
9915 aiVector2t< float > *result = 0 ;
9916
9917 arg1 = (float)jarg1;
9918 arg2 = (float)jarg2;
9919 result = (aiVector2t< float > *)new aiVector2t< float >(arg1,arg2);
9920 jresult = (void *)result;
9921 return jresult;
9922 }
9923
9924
9925 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVector2D__SWIG_2(float jarg1) {
9926 void * jresult ;
9927 float arg1 ;
9928 aiVector2t< float > *result = 0 ;
9929
9930 arg1 = (float)jarg1;
9931 result = (aiVector2t< float > *)new aiVector2t< float >(arg1);
9932 jresult = (void *)result;
9933 return jresult;
9934 }
9935
9936
9937 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVector2D__SWIG_3(void * jarg1) {
9938 void * jresult ;
9939 aiVector2t< float > *arg1 = 0 ;
9940 aiVector2t< float > *result = 0 ;
9941
9942 arg1 = (aiVector2t< float > *)jarg1;
9943 if (!arg1) {
9944 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2t< float > const & type is null", 0);
9945 return 0;
9946 }
9947 result = (aiVector2t< float > *)new aiVector2t< float >((aiVector2t< float > const &)*arg1);
9948 jresult = (void *)result;
9949 return jresult;
9950 }
9951
9952
9953 SWIGEXPORT void SWIGSTDCALL CSharp_aiVector2D_Set(void * jarg1, float jarg2, float jarg3) {
9954 aiVector2t< float > *arg1 = (aiVector2t< float > *) 0 ;
9955 float arg2 ;
9956 float arg3 ;
9957
9958 arg1 = (aiVector2t< float > *)jarg1;
9959 arg2 = (float)jarg2;
9960 arg3 = (float)jarg3;
9961 (arg1)->Set(arg2,arg3);
9962 }
9963
9964
9965 SWIGEXPORT float SWIGSTDCALL CSharp_aiVector2D_SquareLength(void * jarg1) {
9966 float jresult ;
9967 aiVector2t< float > *arg1 = (aiVector2t< float > *) 0 ;
9968 float result;
9969
9970 arg1 = (aiVector2t< float > *)jarg1;
9971 result = (float)((aiVector2t< float > const *)arg1)->SquareLength();
9972 jresult = result;
9973 return jresult;
9974 }
9975
9976
9977 SWIGEXPORT float SWIGSTDCALL CSharp_aiVector2D_Length(void * jarg1) {
9978 float jresult ;
9979 aiVector2t< float > *arg1 = (aiVector2t< float > *) 0 ;
9980 float result;
9981
9982 arg1 = (aiVector2t< float > *)jarg1;
9983 result = (float)((aiVector2t< float > const *)arg1)->Length();
9984 jresult = result;
9985 return jresult;
9986 }
9987
9988
9989 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector2D_Normalize(void * jarg1) {
9990 void * jresult ;
9991 aiVector2t< float > *arg1 = (aiVector2t< float > *) 0 ;
9992 aiVector2t< float > *result = 0 ;
9993
9994 arg1 = (aiVector2t< float > *)jarg1;
9995 result = (aiVector2t< float > *) &(arg1)->Normalize();
9996 jresult = (void *)result;
9997 return jresult;
9998 }
9999
10000
10001 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector2D___addnset__(void * jarg1, void * jarg2) {
10002 void * jresult ;
10003 aiVector2t< float > *arg1 = (aiVector2t< float > *) 0 ;
10004 aiVector2t< float > *arg2 = 0 ;
10005 aiVector2t< float > *result = 0 ;
10006
10007 arg1 = (aiVector2t< float > *)jarg1;
10008 arg2 = (aiVector2t< float > *)jarg2;
10009 if (!arg2) {
10010 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2t< float > const & type is null", 0);
10011 return 0;
10012 }
10013 result = (aiVector2t< float > *) &(arg1)->operator +=((aiVector2t< float > const &)*arg2);
10014 jresult = (void *)result;
10015 return jresult;
10016 }
10017
10018
10019 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector2D___subnset__(void * jarg1, void * jarg2) {
10020 void * jresult ;
10021 aiVector2t< float > *arg1 = (aiVector2t< float > *) 0 ;
10022 aiVector2t< float > *arg2 = 0 ;
10023 aiVector2t< float > *result = 0 ;
10024
10025 arg1 = (aiVector2t< float > *)jarg1;
10026 arg2 = (aiVector2t< float > *)jarg2;
10027 if (!arg2) {
10028 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2t< float > const & type is null", 0);
10029 return 0;
10030 }
10031 result = (aiVector2t< float > *) &(arg1)->operator -=((aiVector2t< float > const &)*arg2);
10032 jresult = (void *)result;
10033 return jresult;
10034 }
10035
10036
10037 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector2D___mulnset__(void * jarg1, float jarg2) {
10038 void * jresult ;
10039 aiVector2t< float > *arg1 = (aiVector2t< float > *) 0 ;
10040 float arg2 ;
10041 aiVector2t< float > *result = 0 ;
10042
10043 arg1 = (aiVector2t< float > *)jarg1;
10044 arg2 = (float)jarg2;
10045 result = (aiVector2t< float > *) &(arg1)->operator *=(arg2);
10046 jresult = (void *)result;
10047 return jresult;
10048 }
10049
10050
10051 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector2D___divnset__(void * jarg1, float jarg2) {
10052 void * jresult ;
10053 aiVector2t< float > *arg1 = (aiVector2t< float > *) 0 ;
10054 float arg2 ;
10055 aiVector2t< float > *result = 0 ;
10056
10057 arg1 = (aiVector2t< float > *)jarg1;
10058 arg2 = (float)jarg2;
10059 result = (aiVector2t< float > *) &(arg1)->operator /=(arg2);
10060 jresult = (void *)result;
10061 return jresult;
10062 }
10063
10064
10065 SWIGEXPORT float SWIGSTDCALL CSharp_aiVector2D___idx____SWIG_0(void * jarg1, unsigned int jarg2) {
10066 float jresult ;
10067 aiVector2t< float > *arg1 = (aiVector2t< float > *) 0 ;
10068 unsigned int arg2 ;
10069 float result;
10070
10071 arg1 = (aiVector2t< float > *)jarg1;
10072 arg2 = (unsigned int)jarg2;
10073 result = (float)((aiVector2t< float > const *)arg1)->operator [](arg2);
10074 jresult = result;
10075 return jresult;
10076 }
10077
10078
10079 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiVector2D___equal__(void * jarg1, void * jarg2) {
10080 unsigned int jresult ;
10081 aiVector2t< float > *arg1 = (aiVector2t< float > *) 0 ;
10082 aiVector2t< float > *arg2 = 0 ;
10083 bool result;
10084
10085 arg1 = (aiVector2t< float > *)jarg1;
10086 arg2 = (aiVector2t< float > *)jarg2;
10087 if (!arg2) {
10088 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2t< float > const & type is null", 0);
10089 return 0;
10090 }
10091 result = (bool)((aiVector2t< float > const *)arg1)->operator ==((aiVector2t< float > const &)*arg2);
10092 jresult = result;
10093 return jresult;
10094 }
10095
10096
10097 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiVector2D___nequal__(void * jarg1, void * jarg2) {
10098 unsigned int jresult ;
10099 aiVector2t< float > *arg1 = (aiVector2t< float > *) 0 ;
10100 aiVector2t< float > *arg2 = 0 ;
10101 bool result;
10102
10103 arg1 = (aiVector2t< float > *)jarg1;
10104 arg2 = (aiVector2t< float > *)jarg2;
10105 if (!arg2) {
10106 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2t< float > const & type is null", 0);
10107 return 0;
10108 }
10109 result = (bool)((aiVector2t< float > const *)arg1)->operator !=((aiVector2t< float > const &)*arg2);
10110 jresult = result;
10111 return jresult;
10112 }
10113
10114
10115 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector2D___set__(void * jarg1, float jarg2) {
10116 void * jresult ;
10117 aiVector2t< float > *arg1 = (aiVector2t< float > *) 0 ;
10118 float arg2 ;
10119 aiVector2t< float > *result = 0 ;
10120
10121 arg1 = (aiVector2t< float > *)jarg1;
10122 arg2 = (float)jarg2;
10123 result = (aiVector2t< float > *) &(arg1)->operator =(arg2);
10124 jresult = (void *)result;
10125 return jresult;
10126 }
10127
10128
10129 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector2D_SymMul(void * jarg1, void * jarg2) {
10130 void * jresult ;
10131 aiVector2t< float > *arg1 = (aiVector2t< float > *) 0 ;
10132 aiVector2t< float > *arg2 = 0 ;
10133 aiVector2t< float > result;
10134
10135 arg1 = (aiVector2t< float > *)jarg1;
10136 arg2 = (aiVector2t< float > *)jarg2;
10137 if (!arg2) {
10138 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2t< float > const & type is null", 0);
10139 return 0;
10140 }
10141 result = (arg1)->SymMul((aiVector2t< float > const &)*arg2);
10142 jresult = new aiVector2t< float >((const aiVector2t< float > &)result);
10143 return jresult;
10144 }
10145
10146
10147 SWIGEXPORT void SWIGSTDCALL CSharp_aiVector2D_x_set(void * jarg1, float jarg2) {
10148 aiVector2t< float > *arg1 = (aiVector2t< float > *) 0 ;
10149 float arg2 ;
10150
10151 arg1 = (aiVector2t< float > *)jarg1;
10152 arg2 = (float)jarg2;
10153 if (arg1) (arg1)->x = arg2;
10154 }
10155
10156
10157 SWIGEXPORT float SWIGSTDCALL CSharp_aiVector2D_x_get(void * jarg1) {
10158 float jresult ;
10159 aiVector2t< float > *arg1 = (aiVector2t< float > *) 0 ;
10160 float result;
10161
10162 arg1 = (aiVector2t< float > *)jarg1;
10163 result = (float) ((arg1)->x);
10164 jresult = result;
10165 return jresult;
10166 }
10167
10168
10169 SWIGEXPORT void SWIGSTDCALL CSharp_aiVector2D_y_set(void * jarg1, float jarg2) {
10170 aiVector2t< float > *arg1 = (aiVector2t< float > *) 0 ;
10171 float arg2 ;
10172
10173 arg1 = (aiVector2t< float > *)jarg1;
10174 arg2 = (float)jarg2;
10175 if (arg1) (arg1)->y = arg2;
10176 }
10177
10178
10179 SWIGEXPORT float SWIGSTDCALL CSharp_aiVector2D_y_get(void * jarg1) {
10180 float jresult ;
10181 aiVector2t< float > *arg1 = (aiVector2t< float > *) 0 ;
10182 float result;
10183
10184 arg1 = (aiVector2t< float > *)jarg1;
10185 result = (float) ((arg1)->y);
10186 jresult = result;
10187 return jresult;
10188 }
10189
10190
10191 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiVector2D(void * jarg1) {
10192 aiVector2t< float > *arg1 = (aiVector2t< float > *) 0 ;
10193
10194 arg1 = (aiVector2t< float > *)jarg1;
10195 delete arg1;
10196 }
10197
10198
10199 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiQuaternion__SWIG_0() {
10200 void * jresult ;
10201 aiQuaterniont< float > *result = 0 ;
10202
10203 result = (aiQuaterniont< float > *)new aiQuaterniont< float >();
10204 jresult = (void *)result;
10205 return jresult;
10206 }
10207
10208
10209 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiQuaternion__SWIG_1(float jarg1, float jarg2, float jarg3, float jarg4) {
554110210 void * jresult ;
554210211 float arg1 ;
554310212 float arg2 ;
554410213 float arg3 ;
554510214 float arg4 ;
5546 aiColor4D *result = 0 ;
10215 aiQuaterniont< float > *result = 0 ;
554710216
554810217 arg1 = (float)jarg1;
554910218 arg2 = (float)jarg2;
555010219 arg3 = (float)jarg3;
555110220 arg4 = (float)jarg4;
5552 result = (aiColor4D *)new aiColor4D(arg1,arg2,arg3,arg4);
5553 jresult = (void *)result;
5554 return jresult;
5555 }
5556
5557
5558 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiColor4D__SWIG_2(float jarg1) {
10221 result = (aiQuaterniont< float > *)new aiQuaterniont< float >(arg1,arg2,arg3,arg4);
10222 jresult = (void *)result;
10223 return jresult;
10224 }
10225
10226
10227 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiQuaternion__SWIG_2(void * jarg1) {
10228 void * jresult ;
10229 aiMatrix3x3t< float > *arg1 = 0 ;
10230 aiQuaterniont< float > *result = 0 ;
10231
10232 arg1 = (aiMatrix3x3t< float > *)jarg1;
10233 if (!arg1) {
10234 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix3x3t< float > const & type is null", 0);
10235 return 0;
10236 }
10237 result = (aiQuaterniont< float > *)new aiQuaterniont< float >((aiMatrix3x3t< float > const &)*arg1);
10238 jresult = (void *)result;
10239 return jresult;
10240 }
10241
10242
10243 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiQuaternion__SWIG_3(float jarg1, float jarg2, float jarg3) {
555910244 void * jresult ;
556010245 float arg1 ;
5561 aiColor4D *result = 0 ;
10246 float arg2 ;
10247 float arg3 ;
10248 aiQuaterniont< float > *result = 0 ;
556210249
556310250 arg1 = (float)jarg1;
5564 result = (aiColor4D *)new aiColor4D(arg1);
5565 jresult = (void *)result;
5566 return jresult;
5567 }
5568
5569
5570 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiColor4D__SWIG_3(void * jarg1) {
5571 void * jresult ;
5572 aiColor4D *arg1 = 0 ;
5573 aiColor4D *result = 0 ;
5574
5575 arg1 = (aiColor4D *)jarg1;
10251 arg2 = (float)jarg2;
10252 arg3 = (float)jarg3;
10253 result = (aiQuaterniont< float > *)new aiQuaterniont< float >(arg1,arg2,arg3);
10254 jresult = (void *)result;
10255 return jresult;
10256 }
10257
10258
10259 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiQuaternion__SWIG_4(void * jarg1, float jarg2) {
10260 void * jresult ;
10261 aiVector3t< float > arg1 ;
10262 float arg2 ;
10263 aiVector3t< float > *argp1 ;
10264 aiQuaterniont< float > *result = 0 ;
10265
10266 argp1 = (aiVector3t< float > *)jarg1;
10267 if (!argp1) {
10268 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null aiVector3t< float >", 0);
10269 return 0;
10270 }
10271 arg1 = *argp1;
10272 arg2 = (float)jarg2;
10273 result = (aiQuaterniont< float > *)new aiQuaterniont< float >(arg1,arg2);
10274 jresult = (void *)result;
10275 return jresult;
10276 }
10277
10278
10279 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiQuaternion__SWIG_5(void * jarg1) {
10280 void * jresult ;
10281 aiVector3t< float > arg1 ;
10282 aiVector3t< float > *argp1 ;
10283 aiQuaterniont< float > *result = 0 ;
10284
10285 argp1 = (aiVector3t< float > *)jarg1;
10286 if (!argp1) {
10287 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null aiVector3t< float >", 0);
10288 return 0;
10289 }
10290 arg1 = *argp1;
10291 result = (aiQuaterniont< float > *)new aiQuaterniont< float >(arg1);
10292 jresult = (void *)result;
10293 return jresult;
10294 }
10295
10296
10297 SWIGEXPORT void * SWIGSTDCALL CSharp_aiQuaternion_GetMatrix(void * jarg1) {
10298 void * jresult ;
10299 aiQuaterniont< float > *arg1 = (aiQuaterniont< float > *) 0 ;
10300 aiMatrix3x3t< float > result;
10301
10302 arg1 = (aiQuaterniont< float > *)jarg1;
10303 result = ((aiQuaterniont< float > const *)arg1)->GetMatrix();
10304 jresult = new aiMatrix3x3t< float >((const aiMatrix3x3t< float > &)result);
10305 return jresult;
10306 }
10307
10308
10309 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiQuaternion___equal__(void * jarg1, void * jarg2) {
10310 unsigned int jresult ;
10311 aiQuaterniont< float > *arg1 = (aiQuaterniont< float > *) 0 ;
10312 aiQuaterniont< float > *arg2 = 0 ;
10313 bool result;
10314
10315 arg1 = (aiQuaterniont< float > *)jarg1;
10316 arg2 = (aiQuaterniont< float > *)jarg2;
10317 if (!arg2) {
10318 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuaterniont< float > const & type is null", 0);
10319 return 0;
10320 }
10321 result = (bool)((aiQuaterniont< float > const *)arg1)->operator ==((aiQuaterniont< float > const &)*arg2);
10322 jresult = result;
10323 return jresult;
10324 }
10325
10326
10327 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiQuaternion___nequal__(void * jarg1, void * jarg2) {
10328 unsigned int jresult ;
10329 aiQuaterniont< float > *arg1 = (aiQuaterniont< float > *) 0 ;
10330 aiQuaterniont< float > *arg2 = 0 ;
10331 bool result;
10332
10333 arg1 = (aiQuaterniont< float > *)jarg1;
10334 arg2 = (aiQuaterniont< float > *)jarg2;
10335 if (!arg2) {
10336 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuaterniont< float > const & type is null", 0);
10337 return 0;
10338 }
10339 result = (bool)((aiQuaterniont< float > const *)arg1)->operator !=((aiQuaterniont< float > const &)*arg2);
10340 jresult = result;
10341 return jresult;
10342 }
10343
10344
10345 SWIGEXPORT void * SWIGSTDCALL CSharp_aiQuaternion_Normalize(void * jarg1) {
10346 void * jresult ;
10347 aiQuaterniont< float > *arg1 = (aiQuaterniont< float > *) 0 ;
10348 aiQuaterniont< float > *result = 0 ;
10349
10350 arg1 = (aiQuaterniont< float > *)jarg1;
10351 result = (aiQuaterniont< float > *) &(arg1)->Normalize();
10352 jresult = (void *)result;
10353 return jresult;
10354 }
10355
10356
10357 SWIGEXPORT void * SWIGSTDCALL CSharp_aiQuaternion_Conjugate(void * jarg1) {
10358 void * jresult ;
10359 aiQuaterniont< float > *arg1 = (aiQuaterniont< float > *) 0 ;
10360 aiQuaterniont< float > *result = 0 ;
10361
10362 arg1 = (aiQuaterniont< float > *)jarg1;
10363 result = (aiQuaterniont< float > *) &(arg1)->Conjugate();
10364 jresult = (void *)result;
10365 return jresult;
10366 }
10367
10368
10369 SWIGEXPORT void * SWIGSTDCALL CSharp_aiQuaternion_Rotate(void * jarg1, void * jarg2) {
10370 void * jresult ;
10371 aiQuaterniont< float > *arg1 = (aiQuaterniont< float > *) 0 ;
10372 aiVector3t< float > *arg2 = 0 ;
10373 aiVector3t< float > result;
10374
10375 arg1 = (aiQuaterniont< float > *)jarg1;
10376 arg2 = (aiVector3t< float > *)jarg2;
10377 if (!arg2) {
10378 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3t< float > const & type is null", 0);
10379 return 0;
10380 }
10381 result = (arg1)->Rotate((aiVector3t< float > const &)*arg2);
10382 jresult = new aiVector3t< float >((const aiVector3t< float > &)result);
10383 return jresult;
10384 }
10385
10386
10387 SWIGEXPORT void * SWIGSTDCALL CSharp_aiQuaternion___mul__(void * jarg1, void * jarg2) {
10388 void * jresult ;
10389 aiQuaterniont< float > *arg1 = (aiQuaterniont< float > *) 0 ;
10390 aiQuaterniont< float > *arg2 = 0 ;
10391 aiQuaterniont< float > result;
10392
10393 arg1 = (aiQuaterniont< float > *)jarg1;
10394 arg2 = (aiQuaterniont< float > *)jarg2;
10395 if (!arg2) {
10396 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuaterniont< float > const & type is null", 0);
10397 return 0;
10398 }
10399 result = ((aiQuaterniont< float > const *)arg1)->operator *((aiQuaterniont< float > const &)*arg2);
10400 jresult = new aiQuaterniont< float >((const aiQuaterniont< float > &)result);
10401 return jresult;
10402 }
10403
10404
10405 SWIGEXPORT void SWIGSTDCALL CSharp_aiQuaternion_Interpolate(void * jarg1, void * jarg2, void * jarg3, float jarg4) {
10406 aiQuaterniont< float > *arg1 = 0 ;
10407 aiQuaterniont< float > *arg2 = 0 ;
10408 aiQuaterniont< float > *arg3 = 0 ;
10409 float arg4 ;
10410
10411 arg1 = (aiQuaterniont< float > *)jarg1;
557610412 if (!arg1) {
5577 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiColor4D const & type is null", 0);
5578 return 0;
10413 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuaterniont< float > & type is null", 0);
10414 return ;
557910415 }
5580 result = (aiColor4D *)new aiColor4D((aiColor4D const &)*arg1);
5581 jresult = (void *)result;
5582 return jresult;
5583 }
5584
5585
5586 SWIGEXPORT void * SWIGSTDCALL CSharp_aiColor4D___addnset__(void * jarg1, void * jarg2) {
5587 void * jresult ;
5588 aiColor4D *arg1 = (aiColor4D *) 0 ;
5589 aiColor4D *arg2 = 0 ;
5590 aiColor4D *result = 0 ;
5591
5592 arg1 = (aiColor4D *)jarg1;
5593 arg2 = (aiColor4D *)jarg2;
10416 arg2 = (aiQuaterniont< float > *)jarg2;
559410417 if (!arg2) {
5595 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiColor4D const & type is null", 0);
5596 return 0;
10418 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuaterniont< float > const & type is null", 0);
10419 return ;
559710420 }
5598 result = (aiColor4D *) &(arg1)->operator +=((aiColor4D const &)*arg2);
5599 jresult = (void *)result;
5600 return jresult;
5601 }
5602
5603
5604 SWIGEXPORT void * SWIGSTDCALL CSharp_aiColor4D___subnset__(void * jarg1, void * jarg2) {
5605 void * jresult ;
5606 aiColor4D *arg1 = (aiColor4D *) 0 ;
5607 aiColor4D *arg2 = 0 ;
5608 aiColor4D *result = 0 ;
5609
5610 arg1 = (aiColor4D *)jarg1;
5611 arg2 = (aiColor4D *)jarg2;
5612 if (!arg2) {
5613 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiColor4D const & type is null", 0);
5614 return 0;
10421 arg3 = (aiQuaterniont< float > *)jarg3;
10422 if (!arg3) {
10423 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuaterniont< float > const & type is null", 0);
10424 return ;
561510425 }
5616 result = (aiColor4D *) &(arg1)->operator -=((aiColor4D const &)*arg2);
5617 jresult = (void *)result;
5618 return jresult;
5619 }
5620
5621
5622 SWIGEXPORT void * SWIGSTDCALL CSharp_aiColor4D___mulnset__(void * jarg1, float jarg2) {
5623 void * jresult ;
5624 aiColor4D *arg1 = (aiColor4D *) 0 ;
10426 arg4 = (float)jarg4;
10427 aiQuaterniont< float >::SWIGTEMPLATEDISAMBIGUATOR Interpolate(*arg1,(aiQuaterniont< float > const &)*arg2,(aiQuaterniont< float > const &)*arg3,arg4);
10428 }
10429
10430
10431 SWIGEXPORT void SWIGSTDCALL CSharp_aiQuaternion_w_set(void * jarg1, float jarg2) {
10432 aiQuaterniont< float > *arg1 = (aiQuaterniont< float > *) 0 ;
562510433 float arg2 ;
5626 aiColor4D *result = 0 ;
5627
5628 arg1 = (aiColor4D *)jarg1;
10434
10435 arg1 = (aiQuaterniont< float > *)jarg1;
562910436 arg2 = (float)jarg2;
5630 result = (aiColor4D *) &(arg1)->operator *=(arg2);
5631 jresult = (void *)result;
5632 return jresult;
5633 }
5634
5635
5636 SWIGEXPORT void * SWIGSTDCALL CSharp_aiColor4D___divnset__(void * jarg1, float jarg2) {
5637 void * jresult ;
5638 aiColor4D *arg1 = (aiColor4D *) 0 ;
10437 if (arg1) (arg1)->w = arg2;
10438 }
10439
10440
10441 SWIGEXPORT float SWIGSTDCALL CSharp_aiQuaternion_w_get(void * jarg1) {
10442 float jresult ;
10443 aiQuaterniont< float > *arg1 = (aiQuaterniont< float > *) 0 ;
10444 float result;
10445
10446 arg1 = (aiQuaterniont< float > *)jarg1;
10447 result = (float) ((arg1)->w);
10448 jresult = result;
10449 return jresult;
10450 }
10451
10452
10453 SWIGEXPORT void SWIGSTDCALL CSharp_aiQuaternion_x_set(void * jarg1, float jarg2) {
10454 aiQuaterniont< float > *arg1 = (aiQuaterniont< float > *) 0 ;
563910455 float arg2 ;
5640 aiColor4D *result = 0 ;
5641
5642 arg1 = (aiColor4D *)jarg1;
10456
10457 arg1 = (aiQuaterniont< float > *)jarg1;
564310458 arg2 = (float)jarg2;
5644 result = (aiColor4D *) &(arg1)->operator /=(arg2);
5645 jresult = (void *)result;
5646 return jresult;
5647 }
5648
5649
5650 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiColor4D___equal__(void * jarg1, void * jarg2) {
5651 unsigned int jresult ;
5652 aiColor4D *arg1 = (aiColor4D *) 0 ;
5653 aiColor4D *arg2 = 0 ;
5654 bool result;
5655
5656 arg1 = (aiColor4D *)jarg1;
5657 arg2 = (aiColor4D *)jarg2;
5658 if (!arg2) {
5659 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiColor4D const & type is null", 0);
5660 return 0;
5661 }
5662 result = (bool)((aiColor4D const *)arg1)->operator ==((aiColor4D const &)*arg2);
5663 jresult = result;
5664 return jresult;
5665 }
5666
5667
5668 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiColor4D___nequal__(void * jarg1, void * jarg2) {
5669 unsigned int jresult ;
5670 aiColor4D *arg1 = (aiColor4D *) 0 ;
5671 aiColor4D *arg2 = 0 ;
5672 bool result;
5673
5674 arg1 = (aiColor4D *)jarg1;
5675 arg2 = (aiColor4D *)jarg2;
5676 if (!arg2) {
5677 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiColor4D const & type is null", 0);
5678 return 0;
5679 }
5680 result = (bool)((aiColor4D const *)arg1)->operator !=((aiColor4D const &)*arg2);
5681 jresult = result;
5682 return jresult;
5683 }
5684
5685
5686 SWIGEXPORT float SWIGSTDCALL CSharp_aiColor4D___idx____SWIG_0(void * jarg1, unsigned int jarg2) {
10459 if (arg1) (arg1)->x = arg2;
10460 }
10461
10462
10463 SWIGEXPORT float SWIGSTDCALL CSharp_aiQuaternion_x_get(void * jarg1) {
568710464 float jresult ;
5688 aiColor4D *arg1 = (aiColor4D *) 0 ;
5689 unsigned int arg2 ;
10465 aiQuaterniont< float > *arg1 = (aiQuaterniont< float > *) 0 ;
569010466 float result;
569110467
5692 arg1 = (aiColor4D *)jarg1;
5693 arg2 = (unsigned int)jarg2;
5694 result = (float)((aiColor4D const *)arg1)->operator [](arg2);
5695 jresult = result;
5696 return jresult;
5697 }
5698
5699
5700 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiColor4D_IsBlack(void * jarg1) {
5701 unsigned int jresult ;
5702 aiColor4D *arg1 = (aiColor4D *) 0 ;
5703 bool result;
5704
5705 arg1 = (aiColor4D *)jarg1;
5706 result = (bool)((aiColor4D const *)arg1)->IsBlack();
5707 jresult = result;
5708 return jresult;
5709 }
5710
5711
5712 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4D_r_set(void * jarg1, float jarg2) {
5713 aiColor4D *arg1 = (aiColor4D *) 0 ;
10468 arg1 = (aiQuaterniont< float > *)jarg1;
10469 result = (float) ((arg1)->x);
10470 jresult = result;
10471 return jresult;
10472 }
10473
10474
10475 SWIGEXPORT void SWIGSTDCALL CSharp_aiQuaternion_y_set(void * jarg1, float jarg2) {
10476 aiQuaterniont< float > *arg1 = (aiQuaterniont< float > *) 0 ;
571410477 float arg2 ;
571510478
5716 arg1 = (aiColor4D *)jarg1;
10479 arg1 = (aiQuaterniont< float > *)jarg1;
571710480 arg2 = (float)jarg2;
5718 if (arg1) (arg1)->r = arg2;
5719 }
5720
5721
5722 SWIGEXPORT float SWIGSTDCALL CSharp_aiColor4D_r_get(void * jarg1) {
10481 if (arg1) (arg1)->y = arg2;
10482 }
10483
10484
10485 SWIGEXPORT float SWIGSTDCALL CSharp_aiQuaternion_y_get(void * jarg1) {
572310486 float jresult ;
5724 aiColor4D *arg1 = (aiColor4D *) 0 ;
10487 aiQuaterniont< float > *arg1 = (aiQuaterniont< float > *) 0 ;
572510488 float result;
572610489
5727 arg1 = (aiColor4D *)jarg1;
5728 result = (float) ((arg1)->r);
5729 jresult = result;
5730 return jresult;
5731 }
5732
5733
5734 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4D_g_set(void * jarg1, float jarg2) {
5735 aiColor4D *arg1 = (aiColor4D *) 0 ;
10490 arg1 = (aiQuaterniont< float > *)jarg1;
10491 result = (float) ((arg1)->y);
10492 jresult = result;
10493 return jresult;
10494 }
10495
10496
10497 SWIGEXPORT void SWIGSTDCALL CSharp_aiQuaternion_z_set(void * jarg1, float jarg2) {
10498 aiQuaterniont< float > *arg1 = (aiQuaterniont< float > *) 0 ;
573610499 float arg2 ;
573710500
5738 arg1 = (aiColor4D *)jarg1;
10501 arg1 = (aiQuaterniont< float > *)jarg1;
573910502 arg2 = (float)jarg2;
5740 if (arg1) (arg1)->g = arg2;
5741 }
5742
5743
5744 SWIGEXPORT float SWIGSTDCALL CSharp_aiColor4D_g_get(void * jarg1) {
10503 if (arg1) (arg1)->z = arg2;
10504 }
10505
10506
10507 SWIGEXPORT float SWIGSTDCALL CSharp_aiQuaternion_z_get(void * jarg1) {
574510508 float jresult ;
5746 aiColor4D *arg1 = (aiColor4D *) 0 ;
10509 aiQuaterniont< float > *arg1 = (aiQuaterniont< float > *) 0 ;
574710510 float result;
574810511
5749 arg1 = (aiColor4D *)jarg1;
5750 result = (float) ((arg1)->g);
5751 jresult = result;
5752 return jresult;
5753 }
5754
5755
5756 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4D_b_set(void * jarg1, float jarg2) {
5757 aiColor4D *arg1 = (aiColor4D *) 0 ;
5758 float arg2 ;
5759
5760 arg1 = (aiColor4D *)jarg1;
5761 arg2 = (float)jarg2;
5762 if (arg1) (arg1)->b = arg2;
5763 }
5764
5765
5766 SWIGEXPORT float SWIGSTDCALL CSharp_aiColor4D_b_get(void * jarg1) {
5767 float jresult ;
5768 aiColor4D *arg1 = (aiColor4D *) 0 ;
5769 float result;
5770
5771 arg1 = (aiColor4D *)jarg1;
5772 result = (float) ((arg1)->b);
5773 jresult = result;
5774 return jresult;
5775 }
5776
5777
5778 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4D_a_set(void * jarg1, float jarg2) {
5779 aiColor4D *arg1 = (aiColor4D *) 0 ;
5780 float arg2 ;
5781
5782 arg1 = (aiColor4D *)jarg1;
5783 arg2 = (float)jarg2;
5784 if (arg1) (arg1)->a = arg2;
5785 }
5786
5787
5788 SWIGEXPORT float SWIGSTDCALL CSharp_aiColor4D_a_get(void * jarg1) {
5789 float jresult ;
5790 aiColor4D *arg1 = (aiColor4D *) 0 ;
5791 float result;
5792
5793 arg1 = (aiColor4D *)jarg1;
5794 result = (float) ((arg1)->a);
5795 jresult = result;
5796 return jresult;
5797 }
5798
5799
5800 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiColor4D(void * jarg1) {
5801 aiColor4D *arg1 = (aiColor4D *) 0 ;
5802
5803 arg1 = (aiColor4D *)jarg1;
10512 arg1 = (aiQuaterniont< float > *)jarg1;
10513 result = (float) ((arg1)->z);
10514 jresult = result;
10515 return jresult;
10516 }
10517
10518
10519 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiQuaternion(void * jarg1) {
10520 aiQuaterniont< float > *arg1 = (aiQuaterniont< float > *) 0 ;
10521
10522 arg1 = (aiQuaterniont< float > *)jarg1;
580410523 delete arg1;
580510524 }
580610525
580710526
580810527 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiMatrix3x3__SWIG_0() {
580910528 void * jresult ;
5810 aiMatrix3x3 *result = 0 ;
5811
5812 result = (aiMatrix3x3 *)new aiMatrix3x3();
10529 aiMatrix3x3t< float > *result = 0 ;
10530
10531 result = (aiMatrix3x3t< float > *)new aiMatrix3x3t< float >();
581310532 jresult = (void *)result;
581410533 return jresult;
581510534 }
582610545 float arg7 ;
582710546 float arg8 ;
582810547 float arg9 ;
5829 aiMatrix3x3 *result = 0 ;
10548 aiMatrix3x3t< float > *result = 0 ;
583010549
583110550 arg1 = (float)jarg1;
583210551 arg2 = (float)jarg2;
583710556 arg7 = (float)jarg7;
583810557 arg8 = (float)jarg8;
583910558 arg9 = (float)jarg9;
5840 result = (aiMatrix3x3 *)new aiMatrix3x3(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
5841 jresult = (void *)result;
10559 result = (aiMatrix3x3t< float > *)new aiMatrix3x3t< float >(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9);
10560 jresult = (void *)result;
10561 return jresult;
10562 }
10563
10564
10565 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix3x3___mulnset__(void * jarg1, void * jarg2) {
10566 void * jresult ;
10567 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
10568 aiMatrix3x3t< float > *arg2 = 0 ;
10569 aiMatrix3x3t< float > *result = 0 ;
10570
10571 arg1 = (aiMatrix3x3t< float > *)jarg1;
10572 arg2 = (aiMatrix3x3t< float > *)jarg2;
10573 if (!arg2) {
10574 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix3x3t< float > const & type is null", 0);
10575 return 0;
10576 }
10577 result = (aiMatrix3x3t< float > *) &(arg1)->operator *=((aiMatrix3x3t< float > const &)*arg2);
10578 jresult = (void *)result;
10579 return jresult;
10580 }
10581
10582
10583 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix3x3___mul__(void * jarg1, void * jarg2) {
10584 void * jresult ;
10585 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
10586 aiMatrix3x3t< float > *arg2 = 0 ;
10587 aiMatrix3x3t< float > result;
10588
10589 arg1 = (aiMatrix3x3t< float > *)jarg1;
10590 arg2 = (aiMatrix3x3t< float > *)jarg2;
10591 if (!arg2) {
10592 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix3x3t< float > const & type is null", 0);
10593 return 0;
10594 }
10595 result = ((aiMatrix3x3t< float > const *)arg1)->operator *((aiMatrix3x3t< float > const &)*arg2);
10596 jresult = new aiMatrix3x3t< float >((const aiMatrix3x3t< float > &)result);
10597 return jresult;
10598 }
10599
10600
10601 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix3x3___idx____SWIG_0(void * jarg1, unsigned int jarg2) {
10602 void * jresult ;
10603 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
10604 unsigned int arg2 ;
10605 float *result = 0 ;
10606
10607 arg1 = (aiMatrix3x3t< float > *)jarg1;
10608 arg2 = (unsigned int)jarg2;
10609 result = (float *)(arg1)->operator [](arg2);
10610 jresult = (void *)result;
10611 return jresult;
10612 }
10613
10614
10615 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMatrix3x3___equal__(void * jarg1, void * jarg2) {
10616 unsigned int jresult ;
10617 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
10618 aiMatrix4x4t< float > arg2 ;
10619 aiMatrix4x4t< float > const *argp2 ;
10620 bool result;
10621
10622 arg1 = (aiMatrix3x3t< float > *)jarg1;
10623 argp2 = (aiMatrix4x4t< float > *)jarg2;
10624 if (!argp2) {
10625 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null aiMatrix4x4t< float > const", 0);
10626 return 0;
10627 }
10628 arg2 = *argp2;
10629 result = (bool)((aiMatrix3x3t< float > const *)arg1)->operator ==(arg2);
10630 jresult = result;
10631 return jresult;
10632 }
10633
10634
10635 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMatrix3x3___nequal__(void * jarg1, void * jarg2) {
10636 unsigned int jresult ;
10637 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
10638 aiMatrix4x4t< float > arg2 ;
10639 aiMatrix4x4t< float > const *argp2 ;
10640 bool result;
10641
10642 arg1 = (aiMatrix3x3t< float > *)jarg1;
10643 argp2 = (aiMatrix4x4t< float > *)jarg2;
10644 if (!argp2) {
10645 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null aiMatrix4x4t< float > const", 0);
10646 return 0;
10647 }
10648 arg2 = *argp2;
10649 result = (bool)((aiMatrix3x3t< float > const *)arg1)->operator !=(arg2);
10650 jresult = result;
584210651 return jresult;
584310652 }
584410653
584510654
584610655 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiMatrix3x3__SWIG_2(void * jarg1) {
584710656 void * jresult ;
5848 aiMatrix4x4 *arg1 = 0 ;
5849 aiMatrix3x3 *result = 0 ;
5850
5851 arg1 = (aiMatrix4x4 *)jarg1;
10657 aiMatrix4x4t< float > *arg1 = 0 ;
10658 aiMatrix3x3t< float > *result = 0 ;
10659
10660 arg1 = (aiMatrix4x4t< float > *)jarg1;
585210661 if (!arg1) {
5853 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4 const & type is null", 0);
10662 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4t< float > const & type is null", 0);
585410663 return 0;
585510664 }
5856 result = (aiMatrix3x3 *)new aiMatrix3x3((aiMatrix4x4 const &)*arg1);
10665 result = (aiMatrix3x3t< float > *)new aiMatrix3x3t< float >((aiMatrix4x4t< float > const &)*arg1);
585710666 jresult = (void *)result;
585810667 return jresult;
585910668 }
586110670
586210671 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix3x3_Transpose(void * jarg1) {
586310672 void * jresult ;
5864 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
5865 aiMatrix3x3 *result = 0 ;
5866
5867 arg1 = (aiMatrix3x3 *)jarg1;
5868 result = (aiMatrix3x3 *) &(arg1)->Transpose();
10673 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
10674 aiMatrix3x3t< float > *result = 0 ;
10675
10676 arg1 = (aiMatrix3x3t< float > *)jarg1;
10677 result = (aiMatrix3x3t< float > *) &(arg1)->Transpose();
586910678 jresult = (void *)result;
587010679 return jresult;
587110680 }
587310682
587410683 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix3x3_Inverse(void * jarg1) {
587510684 void * jresult ;
5876 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
5877 aiMatrix3x3 *result = 0 ;
5878
5879 arg1 = (aiMatrix3x3 *)jarg1;
5880 result = (aiMatrix3x3 *) &(arg1)->Inverse();
10685 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
10686 aiMatrix3x3t< float > *result = 0 ;
10687
10688 arg1 = (aiMatrix3x3t< float > *)jarg1;
10689 result = (aiMatrix3x3t< float > *) &(arg1)->Inverse();
588110690 jresult = (void *)result;
588210691 return jresult;
588310692 }
588510694
588610695 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix3x3_Determinant(void * jarg1) {
588710696 float jresult ;
5888 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
10697 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
588910698 float result;
589010699
5891 arg1 = (aiMatrix3x3 *)jarg1;
5892 result = (float)((aiMatrix3x3 const *)arg1)->Determinant();
10700 arg1 = (aiMatrix3x3t< float > *)jarg1;
10701 result = (float)((aiMatrix3x3t< float > const *)arg1)->Determinant();
589310702 jresult = result;
589410703 return jresult;
589510704 }
589810707 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix3x3_RotationZ(float jarg1, void * jarg2) {
589910708 void * jresult ;
590010709 float arg1 ;
5901 aiMatrix3x3 *arg2 = 0 ;
5902 aiMatrix3x3 *result = 0 ;
10710 aiMatrix3x3t< float > *arg2 = 0 ;
10711 aiMatrix3x3t< float > *result = 0 ;
590310712
590410713 arg1 = (float)jarg1;
5905 arg2 = (aiMatrix3x3 *)jarg2;
10714 arg2 = (aiMatrix3x3t< float > *)jarg2;
590610715 if (!arg2) {
5907 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix3x3 & type is null", 0);
10716 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix3x3t< float > & type is null", 0);
590810717 return 0;
590910718 }
5910 result = (aiMatrix3x3 *) &aiMatrix3x3::RotationZ(arg1,*arg2);
10719 result = (aiMatrix3x3t< float > *) &aiMatrix3x3t< float >::SWIGTEMPLATEDISAMBIGUATOR RotationZ(arg1,*arg2);
591110720 jresult = (void *)result;
591210721 return jresult;
591310722 }
591610725 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix3x3_Rotation(float jarg1, void * jarg2, void * jarg3) {
591710726 void * jresult ;
591810727 float arg1 ;
5919 aiVector3D *arg2 = 0 ;
5920 aiMatrix3x3 *arg3 = 0 ;
5921 aiMatrix3x3 *result = 0 ;
10728 aiVector3t< float > *arg2 = 0 ;
10729 aiMatrix3x3t< float > *arg3 = 0 ;
10730 aiMatrix3x3t< float > *result = 0 ;
592210731
592310732 arg1 = (float)jarg1;
5924 arg2 = (aiVector3D *)jarg2;
10733 arg2 = (aiVector3t< float > *)jarg2;
592510734 if (!arg2) {
5926 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D const & type is null", 0);
10735 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3t< float > const & type is null", 0);
592710736 return 0;
592810737 }
5929 arg3 = (aiMatrix3x3 *)jarg3;
10738 arg3 = (aiMatrix3x3t< float > *)jarg3;
593010739 if (!arg3) {
5931 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix3x3 & type is null", 0);
10740 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix3x3t< float > & type is null", 0);
593210741 return 0;
593310742 }
5934 result = (aiMatrix3x3 *) &aiMatrix3x3::Rotation(arg1,(aiVector3D const &)*arg2,*arg3);
10743 result = (aiMatrix3x3t< float > *) &aiMatrix3x3t< float >::SWIGTEMPLATEDISAMBIGUATOR Rotation(arg1,(aiVector3t< float > const &)*arg2,*arg3);
593510744 jresult = (void *)result;
593610745 return jresult;
593710746 }
593910748
594010749 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix3x3_Translation(void * jarg1, void * jarg2) {
594110750 void * jresult ;
5942 aiVector2D *arg1 = 0 ;
5943 aiMatrix3x3 *arg2 = 0 ;
5944 aiMatrix3x3 *result = 0 ;
5945
5946 arg1 = (aiVector2D *)jarg1;
10751 aiVector2t< float > *arg1 = 0 ;
10752 aiMatrix3x3t< float > *arg2 = 0 ;
10753 aiMatrix3x3t< float > *result = 0 ;
10754
10755 arg1 = (aiVector2t< float > *)jarg1;
594710756 if (!arg1) {
5948 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2D const & type is null", 0);
10757 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector2t< float > const & type is null", 0);
594910758 return 0;
595010759 }
5951 arg2 = (aiMatrix3x3 *)jarg2;
10760 arg2 = (aiMatrix3x3t< float > *)jarg2;
595210761 if (!arg2) {
5953 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix3x3 & type is null", 0);
10762 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix3x3t< float > & type is null", 0);
595410763 return 0;
595510764 }
5956 result = (aiMatrix3x3 *) &aiMatrix3x3::Translation((aiVector2D const &)*arg1,*arg2);
10765 result = (aiMatrix3x3t< float > *) &aiMatrix3x3t< float >::SWIGTEMPLATEDISAMBIGUATOR Translation((aiVector2t< float > const &)*arg1,*arg2);
595710766 jresult = (void *)result;
595810767 return jresult;
595910768 }
596110770
596210771 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix3x3_FromToMatrix(void * jarg1, void * jarg2, void * jarg3) {
596310772 void * jresult ;
5964 aiVector3D *arg1 = 0 ;
5965 aiVector3D *arg2 = 0 ;
5966 aiMatrix3x3 *arg3 = 0 ;
5967 aiMatrix3x3 *result = 0 ;
5968
5969 arg1 = (aiVector3D *)jarg1;
10773 aiVector3t< float > *arg1 = 0 ;
10774 aiVector3t< float > *arg2 = 0 ;
10775 aiMatrix3x3t< float > *arg3 = 0 ;
10776 aiMatrix3x3t< float > *result = 0 ;
10777
10778 arg1 = (aiVector3t< float > *)jarg1;
597010779 if (!arg1) {
5971 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D const & type is null", 0);
10780 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3t< float > const & type is null", 0);
597210781 return 0;
597310782 }
5974 arg2 = (aiVector3D *)jarg2;
10783 arg2 = (aiVector3t< float > *)jarg2;
597510784 if (!arg2) {
5976 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D const & type is null", 0);
10785 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3t< float > const & type is null", 0);
597710786 return 0;
597810787 }
5979 arg3 = (aiMatrix3x3 *)jarg3;
10788 arg3 = (aiMatrix3x3t< float > *)jarg3;
598010789 if (!arg3) {
5981 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix3x3 & type is null", 0);
10790 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix3x3t< float > & type is null", 0);
598210791 return 0;
598310792 }
5984 result = (aiMatrix3x3 *) &aiMatrix3x3::FromToMatrix((aiVector3D const &)*arg1,(aiVector3D const &)*arg2,*arg3);
10793 result = (aiMatrix3x3t< float > *) &aiMatrix3x3t< float >::SWIGTEMPLATEDISAMBIGUATOR FromToMatrix((aiVector3t< float > const &)*arg1,(aiVector3t< float > const &)*arg2,*arg3);
598510794 jresult = (void *)result;
598610795 return jresult;
598710796 }
598810797
598910798
599010799 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix3x3_a1_set(void * jarg1, float jarg2) {
5991 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
10800 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
599210801 float arg2 ;
599310802
5994 arg1 = (aiMatrix3x3 *)jarg1;
10803 arg1 = (aiMatrix3x3t< float > *)jarg1;
599510804 arg2 = (float)jarg2;
599610805 if (arg1) (arg1)->a1 = arg2;
599710806 }
599910808
600010809 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix3x3_a1_get(void * jarg1) {
600110810 float jresult ;
6002 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
10811 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
600310812 float result;
600410813
6005 arg1 = (aiMatrix3x3 *)jarg1;
10814 arg1 = (aiMatrix3x3t< float > *)jarg1;
600610815 result = (float) ((arg1)->a1);
600710816 jresult = result;
600810817 return jresult;
601010819
601110820
601210821 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix3x3_a2_set(void * jarg1, float jarg2) {
6013 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
10822 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
601410823 float arg2 ;
601510824
6016 arg1 = (aiMatrix3x3 *)jarg1;
10825 arg1 = (aiMatrix3x3t< float > *)jarg1;
601710826 arg2 = (float)jarg2;
601810827 if (arg1) (arg1)->a2 = arg2;
601910828 }
602110830
602210831 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix3x3_a2_get(void * jarg1) {
602310832 float jresult ;
6024 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
10833 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
602510834 float result;
602610835
6027 arg1 = (aiMatrix3x3 *)jarg1;
10836 arg1 = (aiMatrix3x3t< float > *)jarg1;
602810837 result = (float) ((arg1)->a2);
602910838 jresult = result;
603010839 return jresult;
603210841
603310842
603410843 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix3x3_a3_set(void * jarg1, float jarg2) {
6035 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
10844 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
603610845 float arg2 ;
603710846
6038 arg1 = (aiMatrix3x3 *)jarg1;
10847 arg1 = (aiMatrix3x3t< float > *)jarg1;
603910848 arg2 = (float)jarg2;
604010849 if (arg1) (arg1)->a3 = arg2;
604110850 }
604310852
604410853 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix3x3_a3_get(void * jarg1) {
604510854 float jresult ;
6046 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
10855 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
604710856 float result;
604810857
6049 arg1 = (aiMatrix3x3 *)jarg1;
10858 arg1 = (aiMatrix3x3t< float > *)jarg1;
605010859 result = (float) ((arg1)->a3);
605110860 jresult = result;
605210861 return jresult;
605410863
605510864
605610865 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix3x3_b1_set(void * jarg1, float jarg2) {
6057 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
10866 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
605810867 float arg2 ;
605910868
6060 arg1 = (aiMatrix3x3 *)jarg1;
10869 arg1 = (aiMatrix3x3t< float > *)jarg1;
606110870 arg2 = (float)jarg2;
606210871 if (arg1) (arg1)->b1 = arg2;
606310872 }
606510874
606610875 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix3x3_b1_get(void * jarg1) {
606710876 float jresult ;
6068 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
10877 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
606910878 float result;
607010879
6071 arg1 = (aiMatrix3x3 *)jarg1;
10880 arg1 = (aiMatrix3x3t< float > *)jarg1;
607210881 result = (float) ((arg1)->b1);
607310882 jresult = result;
607410883 return jresult;
607610885
607710886
607810887 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix3x3_b2_set(void * jarg1, float jarg2) {
6079 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
10888 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
608010889 float arg2 ;
608110890
6082 arg1 = (aiMatrix3x3 *)jarg1;
10891 arg1 = (aiMatrix3x3t< float > *)jarg1;
608310892 arg2 = (float)jarg2;
608410893 if (arg1) (arg1)->b2 = arg2;
608510894 }
608710896
608810897 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix3x3_b2_get(void * jarg1) {
608910898 float jresult ;
6090 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
10899 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
609110900 float result;
609210901
6093 arg1 = (aiMatrix3x3 *)jarg1;
10902 arg1 = (aiMatrix3x3t< float > *)jarg1;
609410903 result = (float) ((arg1)->b2);
609510904 jresult = result;
609610905 return jresult;
609810907
609910908
610010909 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix3x3_b3_set(void * jarg1, float jarg2) {
6101 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
10910 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
610210911 float arg2 ;
610310912
6104 arg1 = (aiMatrix3x3 *)jarg1;
10913 arg1 = (aiMatrix3x3t< float > *)jarg1;
610510914 arg2 = (float)jarg2;
610610915 if (arg1) (arg1)->b3 = arg2;
610710916 }
610910918
611010919 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix3x3_b3_get(void * jarg1) {
611110920 float jresult ;
6112 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
10921 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
611310922 float result;
611410923
6115 arg1 = (aiMatrix3x3 *)jarg1;
10924 arg1 = (aiMatrix3x3t< float > *)jarg1;
611610925 result = (float) ((arg1)->b3);
611710926 jresult = result;
611810927 return jresult;
612010929
612110930
612210931 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix3x3_c1_set(void * jarg1, float jarg2) {
6123 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
10932 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
612410933 float arg2 ;
612510934
6126 arg1 = (aiMatrix3x3 *)jarg1;
10935 arg1 = (aiMatrix3x3t< float > *)jarg1;
612710936 arg2 = (float)jarg2;
612810937 if (arg1) (arg1)->c1 = arg2;
612910938 }
613110940
613210941 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix3x3_c1_get(void * jarg1) {
613310942 float jresult ;
6134 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
10943 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
613510944 float result;
613610945
6137 arg1 = (aiMatrix3x3 *)jarg1;
10946 arg1 = (aiMatrix3x3t< float > *)jarg1;
613810947 result = (float) ((arg1)->c1);
613910948 jresult = result;
614010949 return jresult;
614210951
614310952
614410953 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix3x3_c2_set(void * jarg1, float jarg2) {
6145 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
10954 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
614610955 float arg2 ;
614710956
6148 arg1 = (aiMatrix3x3 *)jarg1;
10957 arg1 = (aiMatrix3x3t< float > *)jarg1;
614910958 arg2 = (float)jarg2;
615010959 if (arg1) (arg1)->c2 = arg2;
615110960 }
615310962
615410963 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix3x3_c2_get(void * jarg1) {
615510964 float jresult ;
6156 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
10965 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
615710966 float result;
615810967
6159 arg1 = (aiMatrix3x3 *)jarg1;
10968 arg1 = (aiMatrix3x3t< float > *)jarg1;
616010969 result = (float) ((arg1)->c2);
616110970 jresult = result;
616210971 return jresult;
616410973
616510974
616610975 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix3x3_c3_set(void * jarg1, float jarg2) {
6167 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
10976 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
616810977 float arg2 ;
616910978
6170 arg1 = (aiMatrix3x3 *)jarg1;
10979 arg1 = (aiMatrix3x3t< float > *)jarg1;
617110980 arg2 = (float)jarg2;
617210981 if (arg1) (arg1)->c3 = arg2;
617310982 }
617510984
617610985 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix3x3_c3_get(void * jarg1) {
617710986 float jresult ;
6178 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
10987 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
617910988 float result;
618010989
6181 arg1 = (aiMatrix3x3 *)jarg1;
10990 arg1 = (aiMatrix3x3t< float > *)jarg1;
618210991 result = (float) ((arg1)->c3);
618310992 jresult = result;
618410993 return jresult;
618610995
618710996
618810997 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiMatrix3x3(void * jarg1) {
6189 aiMatrix3x3 *arg1 = (aiMatrix3x3 *) 0 ;
6190
6191 arg1 = (aiMatrix3x3 *)jarg1;
10998 aiMatrix3x3t< float > *arg1 = (aiMatrix3x3t< float > *) 0 ;
10999
11000 arg1 = (aiMatrix3x3t< float > *)jarg1;
619211001 delete arg1;
619311002 }
619411003
619511004
619611005 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiMatrix4x4__SWIG_0() {
619711006 void * jresult ;
6198 aiMatrix4x4 *result = 0 ;
6199
6200 result = (aiMatrix4x4 *)new aiMatrix4x4();
11007 aiMatrix4x4t< float > *result = 0 ;
11008
11009 result = (aiMatrix4x4t< float > *)new aiMatrix4x4t< float >();
620111010 jresult = (void *)result;
620211011 return jresult;
620311012 }
622111030 float arg14 ;
622211031 float arg15 ;
622311032 float arg16 ;
6224 aiMatrix4x4 *result = 0 ;
11033 aiMatrix4x4t< float > *result = 0 ;
622511034
622611035 arg1 = (float)jarg1;
622711036 arg2 = (float)jarg2;
623911048 arg14 = (float)jarg14;
624011049 arg15 = (float)jarg15;
624111050 arg16 = (float)jarg16;
6242 result = (aiMatrix4x4 *)new aiMatrix4x4(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14,arg15,arg16);
11051 result = (aiMatrix4x4t< float > *)new aiMatrix4x4t< float >(arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10,arg11,arg12,arg13,arg14,arg15,arg16);
624311052 jresult = (void *)result;
624411053 return jresult;
624511054 }
624711056
624811057 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiMatrix4x4__SWIG_2(void * jarg1) {
624911058 void * jresult ;
6250 aiMatrix3x3 *arg1 = 0 ;
6251 aiMatrix4x4 *result = 0 ;
6252
6253 arg1 = (aiMatrix3x3 *)jarg1;
11059 aiMatrix3x3t< float > *arg1 = 0 ;
11060 aiMatrix4x4t< float > *result = 0 ;
11061
11062 arg1 = (aiMatrix3x3t< float > *)jarg1;
625411063 if (!arg1) {
6255 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix3x3 const & type is null", 0);
11064 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix3x3t< float > const & type is null", 0);
625611065 return 0;
625711066 }
6258 result = (aiMatrix4x4 *)new aiMatrix4x4((aiMatrix3x3 const &)*arg1);
6259 jresult = (void *)result;
11067 result = (aiMatrix4x4t< float > *)new aiMatrix4x4t< float >((aiMatrix3x3t< float > const &)*arg1);
11068 jresult = (void *)result;
11069 return jresult;
11070 }
11071
11072
11073 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix4x4___idx____SWIG_0(void * jarg1, unsigned int jarg2) {
11074 void * jresult ;
11075 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
11076 unsigned int arg2 ;
11077 float *result = 0 ;
11078
11079 arg1 = (aiMatrix4x4t< float > *)jarg1;
11080 arg2 = (unsigned int)jarg2;
11081 result = (float *)(arg1)->operator [](arg2);
11082 jresult = (void *)result;
11083 return jresult;
11084 }
11085
11086
11087 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMatrix4x4___equal__(void * jarg1, void * jarg2) {
11088 unsigned int jresult ;
11089 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
11090 aiMatrix4x4t< float > arg2 ;
11091 aiMatrix4x4t< float > const *argp2 ;
11092 bool result;
11093
11094 arg1 = (aiMatrix4x4t< float > *)jarg1;
11095 argp2 = (aiMatrix4x4t< float > *)jarg2;
11096 if (!argp2) {
11097 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null aiMatrix4x4t< float > const", 0);
11098 return 0;
11099 }
11100 arg2 = *argp2;
11101 result = (bool)((aiMatrix4x4t< float > const *)arg1)->operator ==(arg2);
11102 jresult = result;
11103 return jresult;
11104 }
11105
11106
11107 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMatrix4x4___nequal__(void * jarg1, void * jarg2) {
11108 unsigned int jresult ;
11109 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
11110 aiMatrix4x4t< float > arg2 ;
11111 aiMatrix4x4t< float > const *argp2 ;
11112 bool result;
11113
11114 arg1 = (aiMatrix4x4t< float > *)jarg1;
11115 argp2 = (aiMatrix4x4t< float > *)jarg2;
11116 if (!argp2) {
11117 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null aiMatrix4x4t< float > const", 0);
11118 return 0;
11119 }
11120 arg2 = *argp2;
11121 result = (bool)((aiMatrix4x4t< float > const *)arg1)->operator !=(arg2);
11122 jresult = result;
11123 return jresult;
11124 }
11125
11126
11127 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix4x4___mulnset__(void * jarg1, void * jarg2) {
11128 void * jresult ;
11129 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
11130 aiMatrix4x4t< float > *arg2 = 0 ;
11131 aiMatrix4x4t< float > *result = 0 ;
11132
11133 arg1 = (aiMatrix4x4t< float > *)jarg1;
11134 arg2 = (aiMatrix4x4t< float > *)jarg2;
11135 if (!arg2) {
11136 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4t< float > const & type is null", 0);
11137 return 0;
11138 }
11139 result = (aiMatrix4x4t< float > *) &(arg1)->operator *=((aiMatrix4x4t< float > const &)*arg2);
11140 jresult = (void *)result;
11141 return jresult;
11142 }
11143
11144
11145 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix4x4___mul__(void * jarg1, void * jarg2) {
11146 void * jresult ;
11147 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
11148 aiMatrix4x4t< float > *arg2 = 0 ;
11149 aiMatrix4x4t< float > result;
11150
11151 arg1 = (aiMatrix4x4t< float > *)jarg1;
11152 arg2 = (aiMatrix4x4t< float > *)jarg2;
11153 if (!arg2) {
11154 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4t< float > const & type is null", 0);
11155 return 0;
11156 }
11157 result = ((aiMatrix4x4t< float > const *)arg1)->operator *((aiMatrix4x4t< float > const &)*arg2);
11158 jresult = new aiMatrix4x4t< float >((const aiMatrix4x4t< float > &)result);
626011159 return jresult;
626111160 }
626211161
626311162
626411163 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix4x4_Transpose(void * jarg1) {
626511164 void * jresult ;
6266 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
6267 aiMatrix4x4 *result = 0 ;
6268
6269 arg1 = (aiMatrix4x4 *)jarg1;
6270 result = (aiMatrix4x4 *) &(arg1)->Transpose();
11165 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
11166 aiMatrix4x4t< float > *result = 0 ;
11167
11168 arg1 = (aiMatrix4x4t< float > *)jarg1;
11169 result = (aiMatrix4x4t< float > *) &(arg1)->Transpose();
627111170 jresult = (void *)result;
627211171 return jresult;
627311172 }
627511174
627611175 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix4x4_Inverse(void * jarg1) {
627711176 void * jresult ;
6278 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
6279 aiMatrix4x4 *result = 0 ;
6280
6281 arg1 = (aiMatrix4x4 *)jarg1;
6282 result = (aiMatrix4x4 *) &(arg1)->Inverse();
11177 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
11178 aiMatrix4x4t< float > *result = 0 ;
11179
11180 arg1 = (aiMatrix4x4t< float > *)jarg1;
11181 result = (aiMatrix4x4t< float > *) &(arg1)->Inverse();
628311182 jresult = (void *)result;
628411183 return jresult;
628511184 }
628711186
628811187 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix4x4_Determinant(void * jarg1) {
628911188 float jresult ;
6290 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11189 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
629111190 float result;
629211191
6293 arg1 = (aiMatrix4x4 *)jarg1;
6294 result = (float)((aiMatrix4x4 const *)arg1)->Determinant();
11192 arg1 = (aiMatrix4x4t< float > *)jarg1;
11193 result = (float)((aiMatrix4x4t< float > const *)arg1)->Determinant();
629511194 jresult = result;
629611195 return jresult;
629711196 }
629911198
630011199 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMatrix4x4_IsIdentity(void * jarg1) {
630111200 unsigned int jresult ;
6302 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11201 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
630311202 bool result;
630411203
6305 arg1 = (aiMatrix4x4 *)jarg1;
6306 result = (bool)((aiMatrix4x4 const *)arg1)->IsIdentity();
11204 arg1 = (aiMatrix4x4t< float > *)jarg1;
11205 result = (bool)((aiMatrix4x4t< float > const *)arg1)->IsIdentity();
630711206 jresult = result;
630811207 return jresult;
630911208 }
631011209
631111210
631211211 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix4x4_Decompose(void * jarg1, void * jarg2, void * jarg3, void * jarg4) {
6313 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
6314 aiVector3D *arg2 = 0 ;
6315 aiQuaternion *arg3 = 0 ;
6316 aiVector3D *arg4 = 0 ;
6317
6318 arg1 = (aiMatrix4x4 *)jarg1;
6319 arg2 = (aiVector3D *)jarg2;
11212 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
11213 aiVector3t< float > *arg2 = 0 ;
11214 aiQuaterniont< float > *arg3 = 0 ;
11215 aiVector3t< float > *arg4 = 0 ;
11216
11217 arg1 = (aiMatrix4x4t< float > *)jarg1;
11218 arg2 = (aiVector3t< float > *)jarg2;
632011219 if (!arg2) {
6321 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D & type is null", 0);
11220 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3t< float > & type is null", 0);
632211221 return ;
632311222 }
6324 arg3 = (aiQuaternion *)jarg3;
11223 arg3 = (aiQuaterniont< float > *)jarg3;
632511224 if (!arg3) {
6326 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuaternion & type is null", 0);
11225 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuaterniont< float > & type is null", 0);
632711226 return ;
632811227 }
6329 arg4 = (aiVector3D *)jarg4;
11228 arg4 = (aiVector3t< float > *)jarg4;
633011229 if (!arg4) {
6331 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D & type is null", 0);
11230 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3t< float > & type is null", 0);
633211231 return ;
633311232 }
6334 ((aiMatrix4x4 const *)arg1)->Decompose(*arg2,*arg3,*arg4);
11233 ((aiMatrix4x4t< float > const *)arg1)->Decompose(*arg2,*arg3,*arg4);
633511234 }
633611235
633711236
633811237 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix4x4_DecomposeNoScaling(void * jarg1, void * jarg2, void * jarg3) {
6339 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
6340 aiQuaternion *arg2 = 0 ;
6341 aiVector3D *arg3 = 0 ;
6342
6343 arg1 = (aiMatrix4x4 *)jarg1;
6344 arg2 = (aiQuaternion *)jarg2;
11238 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
11239 aiQuaterniont< float > *arg2 = 0 ;
11240 aiVector3t< float > *arg3 = 0 ;
11241
11242 arg1 = (aiMatrix4x4t< float > *)jarg1;
11243 arg2 = (aiQuaterniont< float > *)jarg2;
634511244 if (!arg2) {
6346 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuaternion & type is null", 0);
11245 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuaterniont< float > & type is null", 0);
634711246 return ;
634811247 }
6349 arg3 = (aiVector3D *)jarg3;
11248 arg3 = (aiVector3t< float > *)jarg3;
635011249 if (!arg3) {
6351 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D & type is null", 0);
11250 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3t< float > & type is null", 0);
635211251 return ;
635311252 }
6354 ((aiMatrix4x4 const *)arg1)->DecomposeNoScaling(*arg2,*arg3);
11253 ((aiMatrix4x4t< float > const *)arg1)->DecomposeNoScaling(*arg2,*arg3);
635511254 }
635611255
635711256
635811257 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix4x4_FromEulerAnglesXYZ__SWIG_0(void * jarg1, float jarg2, float jarg3, float jarg4) {
635911258 void * jresult ;
6360 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11259 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
636111260 float arg2 ;
636211261 float arg3 ;
636311262 float arg4 ;
6364 aiMatrix4x4 *result = 0 ;
6365
6366 arg1 = (aiMatrix4x4 *)jarg1;
11263 aiMatrix4x4t< float > *result = 0 ;
11264
11265 arg1 = (aiMatrix4x4t< float > *)jarg1;
636711266 arg2 = (float)jarg2;
636811267 arg3 = (float)jarg3;
636911268 arg4 = (float)jarg4;
6370 result = (aiMatrix4x4 *) &(arg1)->FromEulerAnglesXYZ(arg2,arg3,arg4);
11269 result = (aiMatrix4x4t< float > *) &(arg1)->FromEulerAnglesXYZ(arg2,arg3,arg4);
637111270 jresult = (void *)result;
637211271 return jresult;
637311272 }
637511274
637611275 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix4x4_FromEulerAnglesXYZ__SWIG_1(void * jarg1, void * jarg2) {
637711276 void * jresult ;
6378 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
6379 aiVector3D *arg2 = 0 ;
6380 aiMatrix4x4 *result = 0 ;
6381
6382 arg1 = (aiMatrix4x4 *)jarg1;
6383 arg2 = (aiVector3D *)jarg2;
11277 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
11278 aiVector3t< float > *arg2 = 0 ;
11279 aiMatrix4x4t< float > *result = 0 ;
11280
11281 arg1 = (aiMatrix4x4t< float > *)jarg1;
11282 arg2 = (aiVector3t< float > *)jarg2;
638411283 if (!arg2) {
6385 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D const & type is null", 0);
11284 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3t< float > const & type is null", 0);
638611285 return 0;
638711286 }
6388 result = (aiMatrix4x4 *) &(arg1)->FromEulerAnglesXYZ((aiVector3D const &)*arg2);
11287 result = (aiMatrix4x4t< float > *) &(arg1)->FromEulerAnglesXYZ((aiVector3t< float > const &)*arg2);
638911288 jresult = (void *)result;
639011289 return jresult;
639111290 }
639411293 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix4x4_RotationX(float jarg1, void * jarg2) {
639511294 void * jresult ;
639611295 float arg1 ;
6397 aiMatrix4x4 *arg2 = 0 ;
6398 aiMatrix4x4 *result = 0 ;
11296 aiMatrix4x4t< float > *arg2 = 0 ;
11297 aiMatrix4x4t< float > *result = 0 ;
639911298
640011299 arg1 = (float)jarg1;
6401 arg2 = (aiMatrix4x4 *)jarg2;
11300 arg2 = (aiMatrix4x4t< float > *)jarg2;
640211301 if (!arg2) {
6403 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4 & type is null", 0);
11302 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4t< float > & type is null", 0);
640411303 return 0;
640511304 }
6406 result = (aiMatrix4x4 *) &aiMatrix4x4::RotationX(arg1,*arg2);
11305 result = (aiMatrix4x4t< float > *) &aiMatrix4x4t< float >::SWIGTEMPLATEDISAMBIGUATOR RotationX(arg1,*arg2);
640711306 jresult = (void *)result;
640811307 return jresult;
640911308 }
641211311 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix4x4_RotationY(float jarg1, void * jarg2) {
641311312 void * jresult ;
641411313 float arg1 ;
6415 aiMatrix4x4 *arg2 = 0 ;
6416 aiMatrix4x4 *result = 0 ;
11314 aiMatrix4x4t< float > *arg2 = 0 ;
11315 aiMatrix4x4t< float > *result = 0 ;
641711316
641811317 arg1 = (float)jarg1;
6419 arg2 = (aiMatrix4x4 *)jarg2;
11318 arg2 = (aiMatrix4x4t< float > *)jarg2;
642011319 if (!arg2) {
6421 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4 & type is null", 0);
11320 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4t< float > & type is null", 0);
642211321 return 0;
642311322 }
6424 result = (aiMatrix4x4 *) &aiMatrix4x4::RotationY(arg1,*arg2);
11323 result = (aiMatrix4x4t< float > *) &aiMatrix4x4t< float >::SWIGTEMPLATEDISAMBIGUATOR RotationY(arg1,*arg2);
642511324 jresult = (void *)result;
642611325 return jresult;
642711326 }
643011329 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix4x4_RotationZ(float jarg1, void * jarg2) {
643111330 void * jresult ;
643211331 float arg1 ;
6433 aiMatrix4x4 *arg2 = 0 ;
6434 aiMatrix4x4 *result = 0 ;
11332 aiMatrix4x4t< float > *arg2 = 0 ;
11333 aiMatrix4x4t< float > *result = 0 ;
643511334
643611335 arg1 = (float)jarg1;
6437 arg2 = (aiMatrix4x4 *)jarg2;
11336 arg2 = (aiMatrix4x4t< float > *)jarg2;
643811337 if (!arg2) {
6439 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4 & type is null", 0);
11338 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4t< float > & type is null", 0);
644011339 return 0;
644111340 }
6442 result = (aiMatrix4x4 *) &aiMatrix4x4::RotationZ(arg1,*arg2);
11341 result = (aiMatrix4x4t< float > *) &aiMatrix4x4t< float >::SWIGTEMPLATEDISAMBIGUATOR RotationZ(arg1,*arg2);
644311342 jresult = (void *)result;
644411343 return jresult;
644511344 }
644811347 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix4x4_Rotation(float jarg1, void * jarg2, void * jarg3) {
644911348 void * jresult ;
645011349 float arg1 ;
6451 aiVector3D *arg2 = 0 ;
6452 aiMatrix4x4 *arg3 = 0 ;
6453 aiMatrix4x4 *result = 0 ;
11350 aiVector3t< float > *arg2 = 0 ;
11351 aiMatrix4x4t< float > *arg3 = 0 ;
11352 aiMatrix4x4t< float > *result = 0 ;
645411353
645511354 arg1 = (float)jarg1;
6456 arg2 = (aiVector3D *)jarg2;
11355 arg2 = (aiVector3t< float > *)jarg2;
645711356 if (!arg2) {
6458 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D const & type is null", 0);
11357 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3t< float > const & type is null", 0);
645911358 return 0;
646011359 }
6461 arg3 = (aiMatrix4x4 *)jarg3;
11360 arg3 = (aiMatrix4x4t< float > *)jarg3;
646211361 if (!arg3) {
6463 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4 & type is null", 0);
11362 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4t< float > & type is null", 0);
646411363 return 0;
646511364 }
6466 result = (aiMatrix4x4 *) &aiMatrix4x4::Rotation(arg1,(aiVector3D const &)*arg2,*arg3);
11365 result = (aiMatrix4x4t< float > *) &aiMatrix4x4t< float >::SWIGTEMPLATEDISAMBIGUATOR Rotation(arg1,(aiVector3t< float > const &)*arg2,*arg3);
646711366 jresult = (void *)result;
646811367 return jresult;
646911368 }
647111370
647211371 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix4x4_Translation(void * jarg1, void * jarg2) {
647311372 void * jresult ;
6474 aiVector3D *arg1 = 0 ;
6475 aiMatrix4x4 *arg2 = 0 ;
6476 aiMatrix4x4 *result = 0 ;
6477
6478 arg1 = (aiVector3D *)jarg1;
11373 aiVector3t< float > *arg1 = 0 ;
11374 aiMatrix4x4t< float > *arg2 = 0 ;
11375 aiMatrix4x4t< float > *result = 0 ;
11376
11377 arg1 = (aiVector3t< float > *)jarg1;
647911378 if (!arg1) {
6480 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D const & type is null", 0);
11379 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3t< float > const & type is null", 0);
648111380 return 0;
648211381 }
6483 arg2 = (aiMatrix4x4 *)jarg2;
11382 arg2 = (aiMatrix4x4t< float > *)jarg2;
648411383 if (!arg2) {
6485 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4 & type is null", 0);
11384 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4t< float > & type is null", 0);
648611385 return 0;
648711386 }
6488 result = (aiMatrix4x4 *) &aiMatrix4x4::Translation((aiVector3D const &)*arg1,*arg2);
11387 result = (aiMatrix4x4t< float > *) &aiMatrix4x4t< float >::SWIGTEMPLATEDISAMBIGUATOR Translation((aiVector3t< float > const &)*arg1,*arg2);
648911388 jresult = (void *)result;
649011389 return jresult;
649111390 }
649311392
649411393 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix4x4_Scaling(void * jarg1, void * jarg2) {
649511394 void * jresult ;
6496 aiVector3D *arg1 = 0 ;
6497 aiMatrix4x4 *arg2 = 0 ;
6498 aiMatrix4x4 *result = 0 ;
6499
6500 arg1 = (aiVector3D *)jarg1;
11395 aiVector3t< float > *arg1 = 0 ;
11396 aiMatrix4x4t< float > *arg2 = 0 ;
11397 aiMatrix4x4t< float > *result = 0 ;
11398
11399 arg1 = (aiVector3t< float > *)jarg1;
650111400 if (!arg1) {
6502 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D const & type is null", 0);
11401 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3t< float > const & type is null", 0);
650311402 return 0;
650411403 }
6505 arg2 = (aiMatrix4x4 *)jarg2;
11404 arg2 = (aiMatrix4x4t< float > *)jarg2;
650611405 if (!arg2) {
6507 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4 & type is null", 0);
11406 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4t< float > & type is null", 0);
650811407 return 0;
650911408 }
6510 result = (aiMatrix4x4 *) &aiMatrix4x4::Scaling((aiVector3D const &)*arg1,*arg2);
11409 result = (aiMatrix4x4t< float > *) &aiMatrix4x4t< float >::SWIGTEMPLATEDISAMBIGUATOR Scaling((aiVector3t< float > const &)*arg1,*arg2);
651111410 jresult = (void *)result;
651211411 return jresult;
651311412 }
651511414
651611415 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMatrix4x4_FromToMatrix(void * jarg1, void * jarg2, void * jarg3) {
651711416 void * jresult ;
6518 aiVector3D *arg1 = 0 ;
6519 aiVector3D *arg2 = 0 ;
6520 aiMatrix4x4 *arg3 = 0 ;
6521 aiMatrix4x4 *result = 0 ;
6522
6523 arg1 = (aiVector3D *)jarg1;
11417 aiVector3t< float > *arg1 = 0 ;
11418 aiVector3t< float > *arg2 = 0 ;
11419 aiMatrix4x4t< float > *arg3 = 0 ;
11420 aiMatrix4x4t< float > *result = 0 ;
11421
11422 arg1 = (aiVector3t< float > *)jarg1;
652411423 if (!arg1) {
6525 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D const & type is null", 0);
11424 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3t< float > const & type is null", 0);
652611425 return 0;
652711426 }
6528 arg2 = (aiVector3D *)jarg2;
11427 arg2 = (aiVector3t< float > *)jarg2;
652911428 if (!arg2) {
6530 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D const & type is null", 0);
11429 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3t< float > const & type is null", 0);
653111430 return 0;
653211431 }
6533 arg3 = (aiMatrix4x4 *)jarg3;
11432 arg3 = (aiMatrix4x4t< float > *)jarg3;
653411433 if (!arg3) {
6535 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4 & type is null", 0);
11434 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4t< float > & type is null", 0);
653611435 return 0;
653711436 }
6538 result = (aiMatrix4x4 *) &aiMatrix4x4::FromToMatrix((aiVector3D const &)*arg1,(aiVector3D const &)*arg2,*arg3);
11437 result = (aiMatrix4x4t< float > *) &aiMatrix4x4t< float >::SWIGTEMPLATEDISAMBIGUATOR FromToMatrix((aiVector3t< float > const &)*arg1,(aiVector3t< float > const &)*arg2,*arg3);
653911438 jresult = (void *)result;
654011439 return jresult;
654111440 }
654211441
654311442
654411443 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix4x4_a1_set(void * jarg1, float jarg2) {
6545 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11444 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
654611445 float arg2 ;
654711446
6548 arg1 = (aiMatrix4x4 *)jarg1;
11447 arg1 = (aiMatrix4x4t< float > *)jarg1;
654911448 arg2 = (float)jarg2;
655011449 if (arg1) (arg1)->a1 = arg2;
655111450 }
655311452
655411453 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix4x4_a1_get(void * jarg1) {
655511454 float jresult ;
6556 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11455 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
655711456 float result;
655811457
6559 arg1 = (aiMatrix4x4 *)jarg1;
11458 arg1 = (aiMatrix4x4t< float > *)jarg1;
656011459 result = (float) ((arg1)->a1);
656111460 jresult = result;
656211461 return jresult;
656411463
656511464
656611465 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix4x4_a2_set(void * jarg1, float jarg2) {
6567 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11466 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
656811467 float arg2 ;
656911468
6570 arg1 = (aiMatrix4x4 *)jarg1;
11469 arg1 = (aiMatrix4x4t< float > *)jarg1;
657111470 arg2 = (float)jarg2;
657211471 if (arg1) (arg1)->a2 = arg2;
657311472 }
657511474
657611475 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix4x4_a2_get(void * jarg1) {
657711476 float jresult ;
6578 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11477 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
657911478 float result;
658011479
6581 arg1 = (aiMatrix4x4 *)jarg1;
11480 arg1 = (aiMatrix4x4t< float > *)jarg1;
658211481 result = (float) ((arg1)->a2);
658311482 jresult = result;
658411483 return jresult;
658611485
658711486
658811487 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix4x4_a3_set(void * jarg1, float jarg2) {
6589 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11488 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
659011489 float arg2 ;
659111490
6592 arg1 = (aiMatrix4x4 *)jarg1;
11491 arg1 = (aiMatrix4x4t< float > *)jarg1;
659311492 arg2 = (float)jarg2;
659411493 if (arg1) (arg1)->a3 = arg2;
659511494 }
659711496
659811497 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix4x4_a3_get(void * jarg1) {
659911498 float jresult ;
6600 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11499 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
660111500 float result;
660211501
6603 arg1 = (aiMatrix4x4 *)jarg1;
11502 arg1 = (aiMatrix4x4t< float > *)jarg1;
660411503 result = (float) ((arg1)->a3);
660511504 jresult = result;
660611505 return jresult;
660811507
660911508
661011509 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix4x4_a4_set(void * jarg1, float jarg2) {
6611 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11510 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
661211511 float arg2 ;
661311512
6614 arg1 = (aiMatrix4x4 *)jarg1;
11513 arg1 = (aiMatrix4x4t< float > *)jarg1;
661511514 arg2 = (float)jarg2;
661611515 if (arg1) (arg1)->a4 = arg2;
661711516 }
661911518
662011519 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix4x4_a4_get(void * jarg1) {
662111520 float jresult ;
6622 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11521 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
662311522 float result;
662411523
6625 arg1 = (aiMatrix4x4 *)jarg1;
11524 arg1 = (aiMatrix4x4t< float > *)jarg1;
662611525 result = (float) ((arg1)->a4);
662711526 jresult = result;
662811527 return jresult;
663011529
663111530
663211531 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix4x4_b1_set(void * jarg1, float jarg2) {
6633 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11532 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
663411533 float arg2 ;
663511534
6636 arg1 = (aiMatrix4x4 *)jarg1;
11535 arg1 = (aiMatrix4x4t< float > *)jarg1;
663711536 arg2 = (float)jarg2;
663811537 if (arg1) (arg1)->b1 = arg2;
663911538 }
664111540
664211541 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix4x4_b1_get(void * jarg1) {
664311542 float jresult ;
6644 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11543 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
664511544 float result;
664611545
6647 arg1 = (aiMatrix4x4 *)jarg1;
11546 arg1 = (aiMatrix4x4t< float > *)jarg1;
664811547 result = (float) ((arg1)->b1);
664911548 jresult = result;
665011549 return jresult;
665211551
665311552
665411553 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix4x4_b2_set(void * jarg1, float jarg2) {
6655 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11554 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
665611555 float arg2 ;
665711556
6658 arg1 = (aiMatrix4x4 *)jarg1;
11557 arg1 = (aiMatrix4x4t< float > *)jarg1;
665911558 arg2 = (float)jarg2;
666011559 if (arg1) (arg1)->b2 = arg2;
666111560 }
666311562
666411563 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix4x4_b2_get(void * jarg1) {
666511564 float jresult ;
6666 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11565 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
666711566 float result;
666811567
6669 arg1 = (aiMatrix4x4 *)jarg1;
11568 arg1 = (aiMatrix4x4t< float > *)jarg1;
667011569 result = (float) ((arg1)->b2);
667111570 jresult = result;
667211571 return jresult;
667411573
667511574
667611575 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix4x4_b3_set(void * jarg1, float jarg2) {
6677 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11576 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
667811577 float arg2 ;
667911578
6680 arg1 = (aiMatrix4x4 *)jarg1;
11579 arg1 = (aiMatrix4x4t< float > *)jarg1;
668111580 arg2 = (float)jarg2;
668211581 if (arg1) (arg1)->b3 = arg2;
668311582 }
668511584
668611585 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix4x4_b3_get(void * jarg1) {
668711586 float jresult ;
6688 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11587 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
668911588 float result;
669011589
6691 arg1 = (aiMatrix4x4 *)jarg1;
11590 arg1 = (aiMatrix4x4t< float > *)jarg1;
669211591 result = (float) ((arg1)->b3);
669311592 jresult = result;
669411593 return jresult;
669611595
669711596
669811597 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix4x4_b4_set(void * jarg1, float jarg2) {
6699 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11598 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
670011599 float arg2 ;
670111600
6702 arg1 = (aiMatrix4x4 *)jarg1;
11601 arg1 = (aiMatrix4x4t< float > *)jarg1;
670311602 arg2 = (float)jarg2;
670411603 if (arg1) (arg1)->b4 = arg2;
670511604 }
670711606
670811607 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix4x4_b4_get(void * jarg1) {
670911608 float jresult ;
6710 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11609 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
671111610 float result;
671211611
6713 arg1 = (aiMatrix4x4 *)jarg1;
11612 arg1 = (aiMatrix4x4t< float > *)jarg1;
671411613 result = (float) ((arg1)->b4);
671511614 jresult = result;
671611615 return jresult;
671811617
671911618
672011619 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix4x4_c1_set(void * jarg1, float jarg2) {
6721 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11620 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
672211621 float arg2 ;
672311622
6724 arg1 = (aiMatrix4x4 *)jarg1;
11623 arg1 = (aiMatrix4x4t< float > *)jarg1;
672511624 arg2 = (float)jarg2;
672611625 if (arg1) (arg1)->c1 = arg2;
672711626 }
672911628
673011629 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix4x4_c1_get(void * jarg1) {
673111630 float jresult ;
6732 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11631 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
673311632 float result;
673411633
6735 arg1 = (aiMatrix4x4 *)jarg1;
11634 arg1 = (aiMatrix4x4t< float > *)jarg1;
673611635 result = (float) ((arg1)->c1);
673711636 jresult = result;
673811637 return jresult;
674011639
674111640
674211641 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix4x4_c2_set(void * jarg1, float jarg2) {
6743 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11642 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
674411643 float arg2 ;
674511644
6746 arg1 = (aiMatrix4x4 *)jarg1;
11645 arg1 = (aiMatrix4x4t< float > *)jarg1;
674711646 arg2 = (float)jarg2;
674811647 if (arg1) (arg1)->c2 = arg2;
674911648 }
675111650
675211651 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix4x4_c2_get(void * jarg1) {
675311652 float jresult ;
6754 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11653 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
675511654 float result;
675611655
6757 arg1 = (aiMatrix4x4 *)jarg1;
11656 arg1 = (aiMatrix4x4t< float > *)jarg1;
675811657 result = (float) ((arg1)->c2);
675911658 jresult = result;
676011659 return jresult;
676211661
676311662
676411663 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix4x4_c3_set(void * jarg1, float jarg2) {
6765 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11664 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
676611665 float arg2 ;
676711666
6768 arg1 = (aiMatrix4x4 *)jarg1;
11667 arg1 = (aiMatrix4x4t< float > *)jarg1;
676911668 arg2 = (float)jarg2;
677011669 if (arg1) (arg1)->c3 = arg2;
677111670 }
677311672
677411673 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix4x4_c3_get(void * jarg1) {
677511674 float jresult ;
6776 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11675 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
677711676 float result;
677811677
6779 arg1 = (aiMatrix4x4 *)jarg1;
11678 arg1 = (aiMatrix4x4t< float > *)jarg1;
678011679 result = (float) ((arg1)->c3);
678111680 jresult = result;
678211681 return jresult;
678411683
678511684
678611685 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix4x4_c4_set(void * jarg1, float jarg2) {
6787 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11686 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
678811687 float arg2 ;
678911688
6790 arg1 = (aiMatrix4x4 *)jarg1;
11689 arg1 = (aiMatrix4x4t< float > *)jarg1;
679111690 arg2 = (float)jarg2;
679211691 if (arg1) (arg1)->c4 = arg2;
679311692 }
679511694
679611695 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix4x4_c4_get(void * jarg1) {
679711696 float jresult ;
6798 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11697 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
679911698 float result;
680011699
6801 arg1 = (aiMatrix4x4 *)jarg1;
11700 arg1 = (aiMatrix4x4t< float > *)jarg1;
680211701 result = (float) ((arg1)->c4);
680311702 jresult = result;
680411703 return jresult;
680611705
680711706
680811707 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix4x4_d1_set(void * jarg1, float jarg2) {
6809 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11708 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
681011709 float arg2 ;
681111710
6812 arg1 = (aiMatrix4x4 *)jarg1;
11711 arg1 = (aiMatrix4x4t< float > *)jarg1;
681311712 arg2 = (float)jarg2;
681411713 if (arg1) (arg1)->d1 = arg2;
681511714 }
681711716
681811717 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix4x4_d1_get(void * jarg1) {
681911718 float jresult ;
6820 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11719 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
682111720 float result;
682211721
6823 arg1 = (aiMatrix4x4 *)jarg1;
11722 arg1 = (aiMatrix4x4t< float > *)jarg1;
682411723 result = (float) ((arg1)->d1);
682511724 jresult = result;
682611725 return jresult;
682811727
682911728
683011729 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix4x4_d2_set(void * jarg1, float jarg2) {
6831 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11730 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
683211731 float arg2 ;
683311732
6834 arg1 = (aiMatrix4x4 *)jarg1;
11733 arg1 = (aiMatrix4x4t< float > *)jarg1;
683511734 arg2 = (float)jarg2;
683611735 if (arg1) (arg1)->d2 = arg2;
683711736 }
683911738
684011739 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix4x4_d2_get(void * jarg1) {
684111740 float jresult ;
6842 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11741 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
684311742 float result;
684411743
6845 arg1 = (aiMatrix4x4 *)jarg1;
11744 arg1 = (aiMatrix4x4t< float > *)jarg1;
684611745 result = (float) ((arg1)->d2);
684711746 jresult = result;
684811747 return jresult;
685011749
685111750
685211751 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix4x4_d3_set(void * jarg1, float jarg2) {
6853 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11752 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
685411753 float arg2 ;
685511754
6856 arg1 = (aiMatrix4x4 *)jarg1;
11755 arg1 = (aiMatrix4x4t< float > *)jarg1;
685711756 arg2 = (float)jarg2;
685811757 if (arg1) (arg1)->d3 = arg2;
685911758 }
686111760
686211761 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix4x4_d3_get(void * jarg1) {
686311762 float jresult ;
6864 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11763 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
686511764 float result;
686611765
6867 arg1 = (aiMatrix4x4 *)jarg1;
11766 arg1 = (aiMatrix4x4t< float > *)jarg1;
686811767 result = (float) ((arg1)->d3);
686911768 jresult = result;
687011769 return jresult;
687211771
687311772
687411773 SWIGEXPORT void SWIGSTDCALL CSharp_aiMatrix4x4_d4_set(void * jarg1, float jarg2) {
6875 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11774 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
687611775 float arg2 ;
687711776
6878 arg1 = (aiMatrix4x4 *)jarg1;
11777 arg1 = (aiMatrix4x4t< float > *)jarg1;
687911778 arg2 = (float)jarg2;
688011779 if (arg1) (arg1)->d4 = arg2;
688111780 }
688311782
688411783 SWIGEXPORT float SWIGSTDCALL CSharp_aiMatrix4x4_d4_get(void * jarg1) {
688511784 float jresult ;
6886 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
11785 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
688711786 float result;
688811787
6889 arg1 = (aiMatrix4x4 *)jarg1;
11788 arg1 = (aiMatrix4x4t< float > *)jarg1;
689011789 result = (float) ((arg1)->d4);
689111790 jresult = result;
689211791 return jresult;
689411793
689511794
689611795 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiMatrix4x4(void * jarg1) {
6897 aiMatrix4x4 *arg1 = (aiMatrix4x4 *) 0 ;
6898
6899 arg1 = (aiMatrix4x4 *)jarg1;
11796 aiMatrix4x4t< float > *arg1 = (aiMatrix4x4t< float > *) 0 ;
11797
11798 arg1 = (aiMatrix4x4t< float > *)jarg1;
690011799 delete arg1;
6901 }
6902
6903
6904 SWIGEXPORT void SWIGSTDCALL CSharp_aiCamera_mName_set(void * jarg1, void * jarg2) {
6905 aiCamera *arg1 = (aiCamera *) 0 ;
6906 aiString *arg2 = (aiString *) 0 ;
6907
6908 arg1 = (aiCamera *)jarg1;
6909 arg2 = (aiString *)jarg2;
6910 if (arg1) (arg1)->mName = *arg2;
6911 }
6912
6913
6914 SWIGEXPORT void * SWIGSTDCALL CSharp_aiCamera_mName_get(void * jarg1) {
6915 void * jresult ;
6916 aiCamera *arg1 = (aiCamera *) 0 ;
6917 aiString *result = 0 ;
6918
6919 arg1 = (aiCamera *)jarg1;
6920 result = (aiString *)& ((arg1)->mName);
6921 jresult = (void *)result;
6922 return jresult;
6923 }
6924
6925
6926 SWIGEXPORT void SWIGSTDCALL CSharp_aiCamera_mPosition_set(void * jarg1, void * jarg2) {
6927 aiCamera *arg1 = (aiCamera *) 0 ;
6928 aiVector3D *arg2 = (aiVector3D *) 0 ;
6929
6930 arg1 = (aiCamera *)jarg1;
6931 arg2 = (aiVector3D *)jarg2;
6932 if (arg1) (arg1)->mPosition = *arg2;
6933 }
6934
6935
6936 SWIGEXPORT void * SWIGSTDCALL CSharp_aiCamera_mPosition_get(void * jarg1) {
6937 void * jresult ;
6938 aiCamera *arg1 = (aiCamera *) 0 ;
6939 aiVector3D *result = 0 ;
6940
6941 arg1 = (aiCamera *)jarg1;
6942 result = (aiVector3D *)& ((arg1)->mPosition);
6943 jresult = (void *)result;
6944 return jresult;
6945 }
6946
6947
6948 SWIGEXPORT void SWIGSTDCALL CSharp_aiCamera_mUp_set(void * jarg1, void * jarg2) {
6949 aiCamera *arg1 = (aiCamera *) 0 ;
6950 aiVector3D *arg2 = (aiVector3D *) 0 ;
6951
6952 arg1 = (aiCamera *)jarg1;
6953 arg2 = (aiVector3D *)jarg2;
6954 if (arg1) (arg1)->mUp = *arg2;
6955 }
6956
6957
6958 SWIGEXPORT void * SWIGSTDCALL CSharp_aiCamera_mUp_get(void * jarg1) {
6959 void * jresult ;
6960 aiCamera *arg1 = (aiCamera *) 0 ;
6961 aiVector3D *result = 0 ;
6962
6963 arg1 = (aiCamera *)jarg1;
6964 result = (aiVector3D *)& ((arg1)->mUp);
6965 jresult = (void *)result;
6966 return jresult;
6967 }
6968
6969
6970 SWIGEXPORT void SWIGSTDCALL CSharp_aiCamera_mLookAt_set(void * jarg1, void * jarg2) {
6971 aiCamera *arg1 = (aiCamera *) 0 ;
6972 aiVector3D *arg2 = (aiVector3D *) 0 ;
6973
6974 arg1 = (aiCamera *)jarg1;
6975 arg2 = (aiVector3D *)jarg2;
6976 if (arg1) (arg1)->mLookAt = *arg2;
6977 }
6978
6979
6980 SWIGEXPORT void * SWIGSTDCALL CSharp_aiCamera_mLookAt_get(void * jarg1) {
6981 void * jresult ;
6982 aiCamera *arg1 = (aiCamera *) 0 ;
6983 aiVector3D *result = 0 ;
6984
6985 arg1 = (aiCamera *)jarg1;
6986 result = (aiVector3D *)& ((arg1)->mLookAt);
6987 jresult = (void *)result;
6988 return jresult;
6989 }
6990
6991
6992 SWIGEXPORT void SWIGSTDCALL CSharp_aiCamera_mHorizontalFOV_set(void * jarg1, float jarg2) {
6993 aiCamera *arg1 = (aiCamera *) 0 ;
6994 float arg2 ;
6995
6996 arg1 = (aiCamera *)jarg1;
6997 arg2 = (float)jarg2;
6998 if (arg1) (arg1)->mHorizontalFOV = arg2;
6999 }
7000
7001
7002 SWIGEXPORT float SWIGSTDCALL CSharp_aiCamera_mHorizontalFOV_get(void * jarg1) {
7003 float jresult ;
7004 aiCamera *arg1 = (aiCamera *) 0 ;
7005 float result;
7006
7007 arg1 = (aiCamera *)jarg1;
7008 result = (float) ((arg1)->mHorizontalFOV);
7009 jresult = result;
7010 return jresult;
7011 }
7012
7013
7014 SWIGEXPORT void SWIGSTDCALL CSharp_aiCamera_mClipPlaneNear_set(void * jarg1, float jarg2) {
7015 aiCamera *arg1 = (aiCamera *) 0 ;
7016 float arg2 ;
7017
7018 arg1 = (aiCamera *)jarg1;
7019 arg2 = (float)jarg2;
7020 if (arg1) (arg1)->mClipPlaneNear = arg2;
7021 }
7022
7023
7024 SWIGEXPORT float SWIGSTDCALL CSharp_aiCamera_mClipPlaneNear_get(void * jarg1) {
7025 float jresult ;
7026 aiCamera *arg1 = (aiCamera *) 0 ;
7027 float result;
7028
7029 arg1 = (aiCamera *)jarg1;
7030 result = (float) ((arg1)->mClipPlaneNear);
7031 jresult = result;
7032 return jresult;
7033 }
7034
7035
7036 SWIGEXPORT void SWIGSTDCALL CSharp_aiCamera_mClipPlaneFar_set(void * jarg1, float jarg2) {
7037 aiCamera *arg1 = (aiCamera *) 0 ;
7038 float arg2 ;
7039
7040 arg1 = (aiCamera *)jarg1;
7041 arg2 = (float)jarg2;
7042 if (arg1) (arg1)->mClipPlaneFar = arg2;
7043 }
7044
7045
7046 SWIGEXPORT float SWIGSTDCALL CSharp_aiCamera_mClipPlaneFar_get(void * jarg1) {
7047 float jresult ;
7048 aiCamera *arg1 = (aiCamera *) 0 ;
7049 float result;
7050
7051 arg1 = (aiCamera *)jarg1;
7052 result = (float) ((arg1)->mClipPlaneFar);
7053 jresult = result;
7054 return jresult;
7055 }
7056
7057
7058 SWIGEXPORT void SWIGSTDCALL CSharp_aiCamera_mAspect_set(void * jarg1, float jarg2) {
7059 aiCamera *arg1 = (aiCamera *) 0 ;
7060 float arg2 ;
7061
7062 arg1 = (aiCamera *)jarg1;
7063 arg2 = (float)jarg2;
7064 if (arg1) (arg1)->mAspect = arg2;
7065 }
7066
7067
7068 SWIGEXPORT float SWIGSTDCALL CSharp_aiCamera_mAspect_get(void * jarg1) {
7069 float jresult ;
7070 aiCamera *arg1 = (aiCamera *) 0 ;
7071 float result;
7072
7073 arg1 = (aiCamera *)jarg1;
7074 result = (float) ((arg1)->mAspect);
7075 jresult = result;
7076 return jresult;
7077 }
7078
7079
7080 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiCamera() {
7081 void * jresult ;
7082 aiCamera *result = 0 ;
7083
7084 result = (aiCamera *)new aiCamera();
7085 jresult = (void *)result;
7086 return jresult;
7087 }
7088
7089
7090 SWIGEXPORT void SWIGSTDCALL CSharp_aiCamera_GetCameraMatrix(void * jarg1, void * jarg2) {
7091 aiCamera *arg1 = (aiCamera *) 0 ;
7092 aiMatrix4x4 *arg2 = 0 ;
7093
7094 arg1 = (aiCamera *)jarg1;
7095 arg2 = (aiMatrix4x4 *)jarg2;
7096 if (!arg2) {
7097 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix4x4 & type is null", 0);
7098 return ;
7099 }
7100 ((aiCamera const *)arg1)->GetCameraMatrix(*arg2);
7101 }
7102
7103
7104 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiCamera(void * jarg1) {
7105 aiCamera *arg1 = (aiCamera *) 0 ;
7106
7107 arg1 = (aiCamera *)jarg1;
7108 delete arg1;
7109 }
7110
7111
7112 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mName_set(void * jarg1, void * jarg2) {
7113 aiLight *arg1 = (aiLight *) 0 ;
7114 aiString *arg2 = (aiString *) 0 ;
7115
7116 arg1 = (aiLight *)jarg1;
7117 arg2 = (aiString *)jarg2;
7118 if (arg1) (arg1)->mName = *arg2;
7119 }
7120
7121
7122 SWIGEXPORT void * SWIGSTDCALL CSharp_aiLight_mName_get(void * jarg1) {
7123 void * jresult ;
7124 aiLight *arg1 = (aiLight *) 0 ;
7125 aiString *result = 0 ;
7126
7127 arg1 = (aiLight *)jarg1;
7128 result = (aiString *)& ((arg1)->mName);
7129 jresult = (void *)result;
7130 return jresult;
7131 }
7132
7133
7134 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mType_set(void * jarg1, int jarg2) {
7135 aiLight *arg1 = (aiLight *) 0 ;
7136 aiLightSourceType arg2 ;
7137
7138 arg1 = (aiLight *)jarg1;
7139 arg2 = (aiLightSourceType)jarg2;
7140 if (arg1) (arg1)->mType = arg2;
7141 }
7142
7143
7144 SWIGEXPORT int SWIGSTDCALL CSharp_aiLight_mType_get(void * jarg1) {
7145 int jresult ;
7146 aiLight *arg1 = (aiLight *) 0 ;
7147 aiLightSourceType result;
7148
7149 arg1 = (aiLight *)jarg1;
7150 result = (aiLightSourceType) ((arg1)->mType);
7151 jresult = result;
7152 return jresult;
7153 }
7154
7155
7156 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mPosition_set(void * jarg1, void * jarg2) {
7157 aiLight *arg1 = (aiLight *) 0 ;
7158 aiVector3D *arg2 = (aiVector3D *) 0 ;
7159
7160 arg1 = (aiLight *)jarg1;
7161 arg2 = (aiVector3D *)jarg2;
7162 if (arg1) (arg1)->mPosition = *arg2;
7163 }
7164
7165
7166 SWIGEXPORT void * SWIGSTDCALL CSharp_aiLight_mPosition_get(void * jarg1) {
7167 void * jresult ;
7168 aiLight *arg1 = (aiLight *) 0 ;
7169 aiVector3D *result = 0 ;
7170
7171 arg1 = (aiLight *)jarg1;
7172 result = (aiVector3D *)& ((arg1)->mPosition);
7173 jresult = (void *)result;
7174 return jresult;
7175 }
7176
7177
7178 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mDirection_set(void * jarg1, void * jarg2) {
7179 aiLight *arg1 = (aiLight *) 0 ;
7180 aiVector3D *arg2 = (aiVector3D *) 0 ;
7181
7182 arg1 = (aiLight *)jarg1;
7183 arg2 = (aiVector3D *)jarg2;
7184 if (arg1) (arg1)->mDirection = *arg2;
7185 }
7186
7187
7188 SWIGEXPORT void * SWIGSTDCALL CSharp_aiLight_mDirection_get(void * jarg1) {
7189 void * jresult ;
7190 aiLight *arg1 = (aiLight *) 0 ;
7191 aiVector3D *result = 0 ;
7192
7193 arg1 = (aiLight *)jarg1;
7194 result = (aiVector3D *)& ((arg1)->mDirection);
7195 jresult = (void *)result;
7196 return jresult;
7197 }
7198
7199
7200 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mAttenuationConstant_set(void * jarg1, float jarg2) {
7201 aiLight *arg1 = (aiLight *) 0 ;
7202 float arg2 ;
7203
7204 arg1 = (aiLight *)jarg1;
7205 arg2 = (float)jarg2;
7206 if (arg1) (arg1)->mAttenuationConstant = arg2;
7207 }
7208
7209
7210 SWIGEXPORT float SWIGSTDCALL CSharp_aiLight_mAttenuationConstant_get(void * jarg1) {
7211 float jresult ;
7212 aiLight *arg1 = (aiLight *) 0 ;
7213 float result;
7214
7215 arg1 = (aiLight *)jarg1;
7216 result = (float) ((arg1)->mAttenuationConstant);
7217 jresult = result;
7218 return jresult;
7219 }
7220
7221
7222 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mAttenuationLinear_set(void * jarg1, float jarg2) {
7223 aiLight *arg1 = (aiLight *) 0 ;
7224 float arg2 ;
7225
7226 arg1 = (aiLight *)jarg1;
7227 arg2 = (float)jarg2;
7228 if (arg1) (arg1)->mAttenuationLinear = arg2;
7229 }
7230
7231
7232 SWIGEXPORT float SWIGSTDCALL CSharp_aiLight_mAttenuationLinear_get(void * jarg1) {
7233 float jresult ;
7234 aiLight *arg1 = (aiLight *) 0 ;
7235 float result;
7236
7237 arg1 = (aiLight *)jarg1;
7238 result = (float) ((arg1)->mAttenuationLinear);
7239 jresult = result;
7240 return jresult;
7241 }
7242
7243
7244 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mAttenuationQuadratic_set(void * jarg1, float jarg2) {
7245 aiLight *arg1 = (aiLight *) 0 ;
7246 float arg2 ;
7247
7248 arg1 = (aiLight *)jarg1;
7249 arg2 = (float)jarg2;
7250 if (arg1) (arg1)->mAttenuationQuadratic = arg2;
7251 }
7252
7253
7254 SWIGEXPORT float SWIGSTDCALL CSharp_aiLight_mAttenuationQuadratic_get(void * jarg1) {
7255 float jresult ;
7256 aiLight *arg1 = (aiLight *) 0 ;
7257 float result;
7258
7259 arg1 = (aiLight *)jarg1;
7260 result = (float) ((arg1)->mAttenuationQuadratic);
7261 jresult = result;
7262 return jresult;
7263 }
7264
7265
7266 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mColorDiffuse_set(void * jarg1, void * jarg2) {
7267 aiLight *arg1 = (aiLight *) 0 ;
7268 aiColor3D *arg2 = (aiColor3D *) 0 ;
7269
7270 arg1 = (aiLight *)jarg1;
7271 arg2 = (aiColor3D *)jarg2;
7272 if (arg1) (arg1)->mColorDiffuse = *arg2;
7273 }
7274
7275
7276 SWIGEXPORT void * SWIGSTDCALL CSharp_aiLight_mColorDiffuse_get(void * jarg1) {
7277 void * jresult ;
7278 aiLight *arg1 = (aiLight *) 0 ;
7279 aiColor3D *result = 0 ;
7280
7281 arg1 = (aiLight *)jarg1;
7282 result = (aiColor3D *)& ((arg1)->mColorDiffuse);
7283 jresult = (void *)result;
7284 return jresult;
7285 }
7286
7287
7288 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mColorSpecular_set(void * jarg1, void * jarg2) {
7289 aiLight *arg1 = (aiLight *) 0 ;
7290 aiColor3D *arg2 = (aiColor3D *) 0 ;
7291
7292 arg1 = (aiLight *)jarg1;
7293 arg2 = (aiColor3D *)jarg2;
7294 if (arg1) (arg1)->mColorSpecular = *arg2;
7295 }
7296
7297
7298 SWIGEXPORT void * SWIGSTDCALL CSharp_aiLight_mColorSpecular_get(void * jarg1) {
7299 void * jresult ;
7300 aiLight *arg1 = (aiLight *) 0 ;
7301 aiColor3D *result = 0 ;
7302
7303 arg1 = (aiLight *)jarg1;
7304 result = (aiColor3D *)& ((arg1)->mColorSpecular);
7305 jresult = (void *)result;
7306 return jresult;
7307 }
7308
7309
7310 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mColorAmbient_set(void * jarg1, void * jarg2) {
7311 aiLight *arg1 = (aiLight *) 0 ;
7312 aiColor3D *arg2 = (aiColor3D *) 0 ;
7313
7314 arg1 = (aiLight *)jarg1;
7315 arg2 = (aiColor3D *)jarg2;
7316 if (arg1) (arg1)->mColorAmbient = *arg2;
7317 }
7318
7319
7320 SWIGEXPORT void * SWIGSTDCALL CSharp_aiLight_mColorAmbient_get(void * jarg1) {
7321 void * jresult ;
7322 aiLight *arg1 = (aiLight *) 0 ;
7323 aiColor3D *result = 0 ;
7324
7325 arg1 = (aiLight *)jarg1;
7326 result = (aiColor3D *)& ((arg1)->mColorAmbient);
7327 jresult = (void *)result;
7328 return jresult;
7329 }
7330
7331
7332 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mAngleInnerCone_set(void * jarg1, float jarg2) {
7333 aiLight *arg1 = (aiLight *) 0 ;
7334 float arg2 ;
7335
7336 arg1 = (aiLight *)jarg1;
7337 arg2 = (float)jarg2;
7338 if (arg1) (arg1)->mAngleInnerCone = arg2;
7339 }
7340
7341
7342 SWIGEXPORT float SWIGSTDCALL CSharp_aiLight_mAngleInnerCone_get(void * jarg1) {
7343 float jresult ;
7344 aiLight *arg1 = (aiLight *) 0 ;
7345 float result;
7346
7347 arg1 = (aiLight *)jarg1;
7348 result = (float) ((arg1)->mAngleInnerCone);
7349 jresult = result;
7350 return jresult;
7351 }
7352
7353
7354 SWIGEXPORT void SWIGSTDCALL CSharp_aiLight_mAngleOuterCone_set(void * jarg1, float jarg2) {
7355 aiLight *arg1 = (aiLight *) 0 ;
7356 float arg2 ;
7357
7358 arg1 = (aiLight *)jarg1;
7359 arg2 = (float)jarg2;
7360 if (arg1) (arg1)->mAngleOuterCone = arg2;
7361 }
7362
7363
7364 SWIGEXPORT float SWIGSTDCALL CSharp_aiLight_mAngleOuterCone_get(void * jarg1) {
7365 float jresult ;
7366 aiLight *arg1 = (aiLight *) 0 ;
7367 float result;
7368
7369 arg1 = (aiLight *)jarg1;
7370 result = (float) ((arg1)->mAngleOuterCone);
7371 jresult = result;
7372 return jresult;
7373 }
7374
7375
7376 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiLight() {
7377 void * jresult ;
7378 aiLight *result = 0 ;
7379
7380 result = (aiLight *)new aiLight();
7381 jresult = (void *)result;
7382 return jresult;
7383 }
7384
7385
7386 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiLight(void * jarg1) {
7387 aiLight *arg1 = (aiLight *) 0 ;
7388
7389 arg1 = (aiLight *)jarg1;
7390 delete arg1;
7391 }
7392
7393
7394 SWIGEXPORT void SWIGSTDCALL CSharp_aiVectorKey_mTime_set(void * jarg1, double jarg2) {
7395 aiVectorKey *arg1 = (aiVectorKey *) 0 ;
7396 double arg2 ;
7397
7398 arg1 = (aiVectorKey *)jarg1;
7399 arg2 = (double)jarg2;
7400 if (arg1) (arg1)->mTime = arg2;
7401 }
7402
7403
7404 SWIGEXPORT double SWIGSTDCALL CSharp_aiVectorKey_mTime_get(void * jarg1) {
7405 double jresult ;
7406 aiVectorKey *arg1 = (aiVectorKey *) 0 ;
7407 double result;
7408
7409 arg1 = (aiVectorKey *)jarg1;
7410 result = (double) ((arg1)->mTime);
7411 jresult = result;
7412 return jresult;
7413 }
7414
7415
7416 SWIGEXPORT void SWIGSTDCALL CSharp_aiVectorKey_mValue_set(void * jarg1, void * jarg2) {
7417 aiVectorKey *arg1 = (aiVectorKey *) 0 ;
7418 aiVector3D *arg2 = (aiVector3D *) 0 ;
7419
7420 arg1 = (aiVectorKey *)jarg1;
7421 arg2 = (aiVector3D *)jarg2;
7422 if (arg1) (arg1)->mValue = *arg2;
7423 }
7424
7425
7426 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVectorKey_mValue_get(void * jarg1) {
7427 void * jresult ;
7428 aiVectorKey *arg1 = (aiVectorKey *) 0 ;
7429 aiVector3D *result = 0 ;
7430
7431 arg1 = (aiVectorKey *)jarg1;
7432 result = (aiVector3D *)& ((arg1)->mValue);
7433 jresult = (void *)result;
7434 return jresult;
7435 }
7436
7437
7438 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVectorKey__SWIG_0() {
7439 void * jresult ;
7440 aiVectorKey *result = 0 ;
7441
7442 result = (aiVectorKey *)new aiVectorKey();
7443 jresult = (void *)result;
7444 return jresult;
7445 }
7446
7447
7448 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVectorKey__SWIG_1(double jarg1, void * jarg2) {
7449 void * jresult ;
7450 double arg1 ;
7451 aiVector3D *arg2 = 0 ;
7452 aiVectorKey *result = 0 ;
7453
7454 arg1 = (double)jarg1;
7455 arg2 = (aiVector3D *)jarg2;
7456 if (!arg2) {
7457 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D const & type is null", 0);
7458 return 0;
7459 }
7460 result = (aiVectorKey *)new aiVectorKey(arg1,(aiVector3D const &)*arg2);
7461 jresult = (void *)result;
7462 return jresult;
7463 }
7464
7465
7466 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiVectorKey___equal__(void * jarg1, void * jarg2) {
7467 unsigned int jresult ;
7468 aiVectorKey *arg1 = (aiVectorKey *) 0 ;
7469 aiVectorKey *arg2 = 0 ;
7470 bool result;
7471
7472 arg1 = (aiVectorKey *)jarg1;
7473 arg2 = (aiVectorKey *)jarg2;
7474 if (!arg2) {
7475 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVectorKey const & type is null", 0);
7476 return 0;
7477 }
7478 result = (bool)((aiVectorKey const *)arg1)->operator ==((aiVectorKey const &)*arg2);
7479 jresult = result;
7480 return jresult;
7481 }
7482
7483
7484 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiVectorKey___nequal__(void * jarg1, void * jarg2) {
7485 unsigned int jresult ;
7486 aiVectorKey *arg1 = (aiVectorKey *) 0 ;
7487 aiVectorKey *arg2 = 0 ;
7488 bool result;
7489
7490 arg1 = (aiVectorKey *)jarg1;
7491 arg2 = (aiVectorKey *)jarg2;
7492 if (!arg2) {
7493 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVectorKey const & type is null", 0);
7494 return 0;
7495 }
7496 result = (bool)((aiVectorKey const *)arg1)->operator !=((aiVectorKey const &)*arg2);
7497 jresult = result;
7498 return jresult;
7499 }
7500
7501
7502 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiVectorKey___smaller__(void * jarg1, void * jarg2) {
7503 unsigned int jresult ;
7504 aiVectorKey *arg1 = (aiVectorKey *) 0 ;
7505 aiVectorKey *arg2 = 0 ;
7506 bool result;
7507
7508 arg1 = (aiVectorKey *)jarg1;
7509 arg2 = (aiVectorKey *)jarg2;
7510 if (!arg2) {
7511 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVectorKey const & type is null", 0);
7512 return 0;
7513 }
7514 result = (bool)((aiVectorKey const *)arg1)->operator <((aiVectorKey const &)*arg2);
7515 jresult = result;
7516 return jresult;
7517 }
7518
7519
7520 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiVectorKey___greater__(void * jarg1, void * jarg2) {
7521 unsigned int jresult ;
7522 aiVectorKey *arg1 = (aiVectorKey *) 0 ;
7523 aiVectorKey *arg2 = 0 ;
7524 bool result;
7525
7526 arg1 = (aiVectorKey *)jarg1;
7527 arg2 = (aiVectorKey *)jarg2;
7528 if (!arg2) {
7529 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVectorKey const & type is null", 0);
7530 return 0;
7531 }
7532 result = (bool)((aiVectorKey const *)arg1)->operator >((aiVectorKey const &)*arg2);
7533 jresult = result;
7534 return jresult;
7535 }
7536
7537
7538 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiVectorKey(void * jarg1) {
7539 aiVectorKey *arg1 = (aiVectorKey *) 0 ;
7540
7541 arg1 = (aiVectorKey *)jarg1;
7542 delete arg1;
7543 }
7544
7545
7546 SWIGEXPORT void SWIGSTDCALL CSharp_aiQuatKey_mTime_set(void * jarg1, double jarg2) {
7547 aiQuatKey *arg1 = (aiQuatKey *) 0 ;
7548 double arg2 ;
7549
7550 arg1 = (aiQuatKey *)jarg1;
7551 arg2 = (double)jarg2;
7552 if (arg1) (arg1)->mTime = arg2;
7553 }
7554
7555
7556 SWIGEXPORT double SWIGSTDCALL CSharp_aiQuatKey_mTime_get(void * jarg1) {
7557 double jresult ;
7558 aiQuatKey *arg1 = (aiQuatKey *) 0 ;
7559 double result;
7560
7561 arg1 = (aiQuatKey *)jarg1;
7562 result = (double) ((arg1)->mTime);
7563 jresult = result;
7564 return jresult;
7565 }
7566
7567
7568 SWIGEXPORT void SWIGSTDCALL CSharp_aiQuatKey_mValue_set(void * jarg1, void * jarg2) {
7569 aiQuatKey *arg1 = (aiQuatKey *) 0 ;
7570 aiQuaternion *arg2 = (aiQuaternion *) 0 ;
7571
7572 arg1 = (aiQuatKey *)jarg1;
7573 arg2 = (aiQuaternion *)jarg2;
7574 if (arg1) (arg1)->mValue = *arg2;
7575 }
7576
7577
7578 SWIGEXPORT void * SWIGSTDCALL CSharp_aiQuatKey_mValue_get(void * jarg1) {
7579 void * jresult ;
7580 aiQuatKey *arg1 = (aiQuatKey *) 0 ;
7581 aiQuaternion *result = 0 ;
7582
7583 arg1 = (aiQuatKey *)jarg1;
7584 result = (aiQuaternion *)& ((arg1)->mValue);
7585 jresult = (void *)result;
7586 return jresult;
7587 }
7588
7589
7590 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiQuatKey__SWIG_0() {
7591 void * jresult ;
7592 aiQuatKey *result = 0 ;
7593
7594 result = (aiQuatKey *)new aiQuatKey();
7595 jresult = (void *)result;
7596 return jresult;
7597 }
7598
7599
7600 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiQuatKey__SWIG_1(double jarg1, void * jarg2) {
7601 void * jresult ;
7602 double arg1 ;
7603 aiQuaternion *arg2 = 0 ;
7604 aiQuatKey *result = 0 ;
7605
7606 arg1 = (double)jarg1;
7607 arg2 = (aiQuaternion *)jarg2;
7608 if (!arg2) {
7609 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuaternion const & type is null", 0);
7610 return 0;
7611 }
7612 result = (aiQuatKey *)new aiQuatKey(arg1,(aiQuaternion const &)*arg2);
7613 jresult = (void *)result;
7614 return jresult;
7615 }
7616
7617
7618 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiQuatKey___equal__(void * jarg1, void * jarg2) {
7619 unsigned int jresult ;
7620 aiQuatKey *arg1 = (aiQuatKey *) 0 ;
7621 aiQuatKey *arg2 = 0 ;
7622 bool result;
7623
7624 arg1 = (aiQuatKey *)jarg1;
7625 arg2 = (aiQuatKey *)jarg2;
7626 if (!arg2) {
7627 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuatKey const & type is null", 0);
7628 return 0;
7629 }
7630 result = (bool)((aiQuatKey const *)arg1)->operator ==((aiQuatKey const &)*arg2);
7631 jresult = result;
7632 return jresult;
7633 }
7634
7635
7636 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiQuatKey___nequal__(void * jarg1, void * jarg2) {
7637 unsigned int jresult ;
7638 aiQuatKey *arg1 = (aiQuatKey *) 0 ;
7639 aiQuatKey *arg2 = 0 ;
7640 bool result;
7641
7642 arg1 = (aiQuatKey *)jarg1;
7643 arg2 = (aiQuatKey *)jarg2;
7644 if (!arg2) {
7645 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuatKey const & type is null", 0);
7646 return 0;
7647 }
7648 result = (bool)((aiQuatKey const *)arg1)->operator !=((aiQuatKey const &)*arg2);
7649 jresult = result;
7650 return jresult;
7651 }
7652
7653
7654 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiQuatKey___smaller__(void * jarg1, void * jarg2) {
7655 unsigned int jresult ;
7656 aiQuatKey *arg1 = (aiQuatKey *) 0 ;
7657 aiQuatKey *arg2 = 0 ;
7658 bool result;
7659
7660 arg1 = (aiQuatKey *)jarg1;
7661 arg2 = (aiQuatKey *)jarg2;
7662 if (!arg2) {
7663 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuatKey const & type is null", 0);
7664 return 0;
7665 }
7666 result = (bool)((aiQuatKey const *)arg1)->operator <((aiQuatKey const &)*arg2);
7667 jresult = result;
7668 return jresult;
7669 }
7670
7671
7672 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiQuatKey___greater__(void * jarg1, void * jarg2) {
7673 unsigned int jresult ;
7674 aiQuatKey *arg1 = (aiQuatKey *) 0 ;
7675 aiQuatKey *arg2 = 0 ;
7676 bool result;
7677
7678 arg1 = (aiQuatKey *)jarg1;
7679 arg2 = (aiQuatKey *)jarg2;
7680 if (!arg2) {
7681 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuatKey const & type is null", 0);
7682 return 0;
7683 }
7684 result = (bool)((aiQuatKey const *)arg1)->operator >((aiQuatKey const &)*arg2);
7685 jresult = result;
7686 return jresult;
7687 }
7688
7689
7690 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiQuatKey(void * jarg1) {
7691 aiQuatKey *arg1 = (aiQuatKey *) 0 ;
7692
7693 arg1 = (aiQuatKey *)jarg1;
7694 delete arg1;
7695 }
7696
7697
7698 SWIGEXPORT void SWIGSTDCALL CSharp_aiMeshKey_mTime_set(void * jarg1, double jarg2) {
7699 aiMeshKey *arg1 = (aiMeshKey *) 0 ;
7700 double arg2 ;
7701
7702 arg1 = (aiMeshKey *)jarg1;
7703 arg2 = (double)jarg2;
7704 if (arg1) (arg1)->mTime = arg2;
7705 }
7706
7707
7708 SWIGEXPORT double SWIGSTDCALL CSharp_aiMeshKey_mTime_get(void * jarg1) {
7709 double jresult ;
7710 aiMeshKey *arg1 = (aiMeshKey *) 0 ;
7711 double result;
7712
7713 arg1 = (aiMeshKey *)jarg1;
7714 result = (double) ((arg1)->mTime);
7715 jresult = result;
7716 return jresult;
7717 }
7718
7719
7720 SWIGEXPORT void SWIGSTDCALL CSharp_aiMeshKey_mValue_set(void * jarg1, unsigned int jarg2) {
7721 aiMeshKey *arg1 = (aiMeshKey *) 0 ;
7722 unsigned int arg2 ;
7723
7724 arg1 = (aiMeshKey *)jarg1;
7725 arg2 = (unsigned int)jarg2;
7726 if (arg1) (arg1)->mValue = arg2;
7727 }
7728
7729
7730 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMeshKey_mValue_get(void * jarg1) {
7731 unsigned int jresult ;
7732 aiMeshKey *arg1 = (aiMeshKey *) 0 ;
7733 unsigned int result;
7734
7735 arg1 = (aiMeshKey *)jarg1;
7736 result = (unsigned int) ((arg1)->mValue);
7737 jresult = result;
7738 return jresult;
7739 }
7740
7741
7742 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiMeshKey__SWIG_0() {
7743 void * jresult ;
7744 aiMeshKey *result = 0 ;
7745
7746 result = (aiMeshKey *)new aiMeshKey();
7747 jresult = (void *)result;
7748 return jresult;
7749 }
7750
7751
7752 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiMeshKey__SWIG_1(double jarg1, unsigned int jarg2) {
7753 void * jresult ;
7754 double arg1 ;
7755 unsigned int arg2 ;
7756 aiMeshKey *result = 0 ;
7757
7758 arg1 = (double)jarg1;
7759 arg2 = (unsigned int)jarg2;
7760 result = (aiMeshKey *)new aiMeshKey(arg1,arg2);
7761 jresult = (void *)result;
7762 return jresult;
7763 }
7764
7765
7766 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMeshKey___equal__(void * jarg1, void * jarg2) {
7767 unsigned int jresult ;
7768 aiMeshKey *arg1 = (aiMeshKey *) 0 ;
7769 aiMeshKey *arg2 = 0 ;
7770 bool result;
7771
7772 arg1 = (aiMeshKey *)jarg1;
7773 arg2 = (aiMeshKey *)jarg2;
7774 if (!arg2) {
7775 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMeshKey const & type is null", 0);
7776 return 0;
7777 }
7778 result = (bool)((aiMeshKey const *)arg1)->operator ==((aiMeshKey const &)*arg2);
7779 jresult = result;
7780 return jresult;
7781 }
7782
7783
7784 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMeshKey___nequal__(void * jarg1, void * jarg2) {
7785 unsigned int jresult ;
7786 aiMeshKey *arg1 = (aiMeshKey *) 0 ;
7787 aiMeshKey *arg2 = 0 ;
7788 bool result;
7789
7790 arg1 = (aiMeshKey *)jarg1;
7791 arg2 = (aiMeshKey *)jarg2;
7792 if (!arg2) {
7793 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMeshKey const & type is null", 0);
7794 return 0;
7795 }
7796 result = (bool)((aiMeshKey const *)arg1)->operator !=((aiMeshKey const &)*arg2);
7797 jresult = result;
7798 return jresult;
7799 }
7800
7801
7802 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMeshKey___smaller__(void * jarg1, void * jarg2) {
7803 unsigned int jresult ;
7804 aiMeshKey *arg1 = (aiMeshKey *) 0 ;
7805 aiMeshKey *arg2 = 0 ;
7806 bool result;
7807
7808 arg1 = (aiMeshKey *)jarg1;
7809 arg2 = (aiMeshKey *)jarg2;
7810 if (!arg2) {
7811 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMeshKey const & type is null", 0);
7812 return 0;
7813 }
7814 result = (bool)((aiMeshKey const *)arg1)->operator <((aiMeshKey const &)*arg2);
7815 jresult = result;
7816 return jresult;
7817 }
7818
7819
7820 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMeshKey___greater__(void * jarg1, void * jarg2) {
7821 unsigned int jresult ;
7822 aiMeshKey *arg1 = (aiMeshKey *) 0 ;
7823 aiMeshKey *arg2 = 0 ;
7824 bool result;
7825
7826 arg1 = (aiMeshKey *)jarg1;
7827 arg2 = (aiMeshKey *)jarg2;
7828 if (!arg2) {
7829 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMeshKey const & type is null", 0);
7830 return 0;
7831 }
7832 result = (bool)((aiMeshKey const *)arg1)->operator >((aiMeshKey const &)*arg2);
7833 jresult = result;
7834 return jresult;
7835 }
7836
7837
7838 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiMeshKey(void * jarg1) {
7839 aiMeshKey *arg1 = (aiMeshKey *) 0 ;
7840
7841 arg1 = (aiMeshKey *)jarg1;
7842 delete arg1;
7843 }
7844
7845
7846 SWIGEXPORT void SWIGSTDCALL CSharp_aiNodeAnim_mNodeName_set(void * jarg1, void * jarg2) {
7847 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
7848 aiString *arg2 = (aiString *) 0 ;
7849
7850 arg1 = (aiNodeAnim *)jarg1;
7851 arg2 = (aiString *)jarg2;
7852 if (arg1) (arg1)->mNodeName = *arg2;
7853 }
7854
7855
7856 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNodeAnim_mNodeName_get(void * jarg1) {
7857 void * jresult ;
7858 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
7859 aiString *result = 0 ;
7860
7861 arg1 = (aiNodeAnim *)jarg1;
7862 result = (aiString *)& ((arg1)->mNodeName);
7863 jresult = (void *)result;
7864 return jresult;
7865 }
7866
7867
7868 SWIGEXPORT void SWIGSTDCALL CSharp_aiNodeAnim_mNumPositionKeys_set(void * jarg1, unsigned int jarg2) {
7869 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
7870 unsigned int arg2 ;
7871
7872 arg1 = (aiNodeAnim *)jarg1;
7873 arg2 = (unsigned int)jarg2;
7874 if (arg1) (arg1)->mNumPositionKeys = arg2;
7875 }
7876
7877
7878 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiNodeAnim_mNumPositionKeys_get(void * jarg1) {
7879 unsigned int jresult ;
7880 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
7881 unsigned int result;
7882
7883 arg1 = (aiNodeAnim *)jarg1;
7884 result = (unsigned int) ((arg1)->mNumPositionKeys);
7885 jresult = result;
7886 return jresult;
7887 }
7888
7889
7890 SWIGEXPORT void SWIGSTDCALL CSharp_aiNodeAnim_mNumRotationKeys_set(void * jarg1, unsigned int jarg2) {
7891 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
7892 unsigned int arg2 ;
7893
7894 arg1 = (aiNodeAnim *)jarg1;
7895 arg2 = (unsigned int)jarg2;
7896 if (arg1) (arg1)->mNumRotationKeys = arg2;
7897 }
7898
7899
7900 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiNodeAnim_mNumRotationKeys_get(void * jarg1) {
7901 unsigned int jresult ;
7902 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
7903 unsigned int result;
7904
7905 arg1 = (aiNodeAnim *)jarg1;
7906 result = (unsigned int) ((arg1)->mNumRotationKeys);
7907 jresult = result;
7908 return jresult;
7909 }
7910
7911
7912 SWIGEXPORT void SWIGSTDCALL CSharp_aiNodeAnim_mNumScalingKeys_set(void * jarg1, unsigned int jarg2) {
7913 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
7914 unsigned int arg2 ;
7915
7916 arg1 = (aiNodeAnim *)jarg1;
7917 arg2 = (unsigned int)jarg2;
7918 if (arg1) (arg1)->mNumScalingKeys = arg2;
7919 }
7920
7921
7922 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiNodeAnim_mNumScalingKeys_get(void * jarg1) {
7923 unsigned int jresult ;
7924 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
7925 unsigned int result;
7926
7927 arg1 = (aiNodeAnim *)jarg1;
7928 result = (unsigned int) ((arg1)->mNumScalingKeys);
7929 jresult = result;
7930 return jresult;
7931 }
7932
7933
7934 SWIGEXPORT void SWIGSTDCALL CSharp_aiNodeAnim_mPreState_set(void * jarg1, int jarg2) {
7935 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
7936 aiAnimBehaviour arg2 ;
7937
7938 arg1 = (aiNodeAnim *)jarg1;
7939 arg2 = (aiAnimBehaviour)jarg2;
7940 if (arg1) (arg1)->mPreState = arg2;
7941 }
7942
7943
7944 SWIGEXPORT int SWIGSTDCALL CSharp_aiNodeAnim_mPreState_get(void * jarg1) {
7945 int jresult ;
7946 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
7947 aiAnimBehaviour result;
7948
7949 arg1 = (aiNodeAnim *)jarg1;
7950 result = (aiAnimBehaviour) ((arg1)->mPreState);
7951 jresult = result;
7952 return jresult;
7953 }
7954
7955
7956 SWIGEXPORT void SWIGSTDCALL CSharp_aiNodeAnim_mPostState_set(void * jarg1, int jarg2) {
7957 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
7958 aiAnimBehaviour arg2 ;
7959
7960 arg1 = (aiNodeAnim *)jarg1;
7961 arg2 = (aiAnimBehaviour)jarg2;
7962 if (arg1) (arg1)->mPostState = arg2;
7963 }
7964
7965
7966 SWIGEXPORT int SWIGSTDCALL CSharp_aiNodeAnim_mPostState_get(void * jarg1) {
7967 int jresult ;
7968 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
7969 aiAnimBehaviour result;
7970
7971 arg1 = (aiNodeAnim *)jarg1;
7972 result = (aiAnimBehaviour) ((arg1)->mPostState);
7973 jresult = result;
7974 return jresult;
7975 }
7976
7977
7978 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiNodeAnim() {
7979 void * jresult ;
7980 aiNodeAnim *result = 0 ;
7981
7982 result = (aiNodeAnim *)new aiNodeAnim();
7983 jresult = (void *)result;
7984 return jresult;
7985 }
7986
7987
7988 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiNodeAnim(void * jarg1) {
7989 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
7990
7991 arg1 = (aiNodeAnim *)jarg1;
7992 delete arg1;
7993 }
7994
7995
7996 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNodeAnim_GetmPositionKeys(void * jarg1) {
7997 void * jresult ;
7998 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
7999 std::vector< aiVectorKey * > *result = 0 ;
8000
8001 arg1 = (aiNodeAnim *)jarg1;
8002 result = (std::vector< aiVectorKey * > *)aiNodeAnim_GetmPositionKeys(arg1);
8003 jresult = (void *)result;
8004 return jresult;
8005 }
8006
8007
8008 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNodeAnim_GetmRotationKeys(void * jarg1) {
8009 void * jresult ;
8010 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
8011 std::vector< aiQuatKey * > *result = 0 ;
8012
8013 arg1 = (aiNodeAnim *)jarg1;
8014 result = (std::vector< aiQuatKey * > *)aiNodeAnim_GetmRotationKeys(arg1);
8015 jresult = (void *)result;
8016 return jresult;
8017 }
8018
8019
8020 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNodeAnim_GetmScalingKeys(void * jarg1) {
8021 void * jresult ;
8022 aiNodeAnim *arg1 = (aiNodeAnim *) 0 ;
8023 std::vector< aiVectorKey * > *result = 0 ;
8024
8025 arg1 = (aiNodeAnim *)jarg1;
8026 result = (std::vector< aiVectorKey * > *)aiNodeAnim_GetmScalingKeys(arg1);
8027 jresult = (void *)result;
8028 return jresult;
8029 }
8030
8031
8032 SWIGEXPORT void SWIGSTDCALL CSharp_aiMeshAnim_mName_set(void * jarg1, void * jarg2) {
8033 aiMeshAnim *arg1 = (aiMeshAnim *) 0 ;
8034 aiString *arg2 = (aiString *) 0 ;
8035
8036 arg1 = (aiMeshAnim *)jarg1;
8037 arg2 = (aiString *)jarg2;
8038 if (arg1) (arg1)->mName = *arg2;
8039 }
8040
8041
8042 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMeshAnim_mName_get(void * jarg1) {
8043 void * jresult ;
8044 aiMeshAnim *arg1 = (aiMeshAnim *) 0 ;
8045 aiString *result = 0 ;
8046
8047 arg1 = (aiMeshAnim *)jarg1;
8048 result = (aiString *)& ((arg1)->mName);
8049 jresult = (void *)result;
8050 return jresult;
8051 }
8052
8053
8054 SWIGEXPORT void SWIGSTDCALL CSharp_aiMeshAnim_mNumKeys_set(void * jarg1, unsigned int jarg2) {
8055 aiMeshAnim *arg1 = (aiMeshAnim *) 0 ;
8056 unsigned int arg2 ;
8057
8058 arg1 = (aiMeshAnim *)jarg1;
8059 arg2 = (unsigned int)jarg2;
8060 if (arg1) (arg1)->mNumKeys = arg2;
8061 }
8062
8063
8064 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMeshAnim_mNumKeys_get(void * jarg1) {
8065 unsigned int jresult ;
8066 aiMeshAnim *arg1 = (aiMeshAnim *) 0 ;
8067 unsigned int result;
8068
8069 arg1 = (aiMeshAnim *)jarg1;
8070 result = (unsigned int) ((arg1)->mNumKeys);
8071 jresult = result;
8072 return jresult;
8073 }
8074
8075
8076 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiMeshAnim() {
8077 void * jresult ;
8078 aiMeshAnim *result = 0 ;
8079
8080 result = (aiMeshAnim *)new aiMeshAnim();
8081 jresult = (void *)result;
8082 return jresult;
8083 }
8084
8085
8086 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiMeshAnim(void * jarg1) {
8087 aiMeshAnim *arg1 = (aiMeshAnim *) 0 ;
8088
8089 arg1 = (aiMeshAnim *)jarg1;
8090 delete arg1;
8091 }
8092
8093
8094 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMeshAnim_GetmKeys(void * jarg1) {
8095 void * jresult ;
8096 aiMeshAnim *arg1 = (aiMeshAnim *) 0 ;
8097 std::vector< aiMeshKey * > *result = 0 ;
8098
8099 arg1 = (aiMeshAnim *)jarg1;
8100 result = (std::vector< aiMeshKey * > *)aiMeshAnim_GetmKeys(arg1);
8101 jresult = (void *)result;
8102 return jresult;
8103 }
8104
8105
8106 SWIGEXPORT void SWIGSTDCALL CSharp_aiAnimation_mName_set(void * jarg1, void * jarg2) {
8107 aiAnimation *arg1 = (aiAnimation *) 0 ;
8108 aiString *arg2 = (aiString *) 0 ;
8109
8110 arg1 = (aiAnimation *)jarg1;
8111 arg2 = (aiString *)jarg2;
8112 if (arg1) (arg1)->mName = *arg2;
8113 }
8114
8115
8116 SWIGEXPORT void * SWIGSTDCALL CSharp_aiAnimation_mName_get(void * jarg1) {
8117 void * jresult ;
8118 aiAnimation *arg1 = (aiAnimation *) 0 ;
8119 aiString *result = 0 ;
8120
8121 arg1 = (aiAnimation *)jarg1;
8122 result = (aiString *)& ((arg1)->mName);
8123 jresult = (void *)result;
8124 return jresult;
8125 }
8126
8127
8128 SWIGEXPORT void SWIGSTDCALL CSharp_aiAnimation_mDuration_set(void * jarg1, double jarg2) {
8129 aiAnimation *arg1 = (aiAnimation *) 0 ;
8130 double arg2 ;
8131
8132 arg1 = (aiAnimation *)jarg1;
8133 arg2 = (double)jarg2;
8134 if (arg1) (arg1)->mDuration = arg2;
8135 }
8136
8137
8138 SWIGEXPORT double SWIGSTDCALL CSharp_aiAnimation_mDuration_get(void * jarg1) {
8139 double jresult ;
8140 aiAnimation *arg1 = (aiAnimation *) 0 ;
8141 double result;
8142
8143 arg1 = (aiAnimation *)jarg1;
8144 result = (double) ((arg1)->mDuration);
8145 jresult = result;
8146 return jresult;
8147 }
8148
8149
8150 SWIGEXPORT void SWIGSTDCALL CSharp_aiAnimation_mTicksPerSecond_set(void * jarg1, double jarg2) {
8151 aiAnimation *arg1 = (aiAnimation *) 0 ;
8152 double arg2 ;
8153
8154 arg1 = (aiAnimation *)jarg1;
8155 arg2 = (double)jarg2;
8156 if (arg1) (arg1)->mTicksPerSecond = arg2;
8157 }
8158
8159
8160 SWIGEXPORT double SWIGSTDCALL CSharp_aiAnimation_mTicksPerSecond_get(void * jarg1) {
8161 double jresult ;
8162 aiAnimation *arg1 = (aiAnimation *) 0 ;
8163 double result;
8164
8165 arg1 = (aiAnimation *)jarg1;
8166 result = (double) ((arg1)->mTicksPerSecond);
8167 jresult = result;
8168 return jresult;
8169 }
8170
8171
8172 SWIGEXPORT void SWIGSTDCALL CSharp_aiAnimation_mNumChannels_set(void * jarg1, unsigned int jarg2) {
8173 aiAnimation *arg1 = (aiAnimation *) 0 ;
8174 unsigned int arg2 ;
8175
8176 arg1 = (aiAnimation *)jarg1;
8177 arg2 = (unsigned int)jarg2;
8178 if (arg1) (arg1)->mNumChannels = arg2;
8179 }
8180
8181
8182 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiAnimation_mNumChannels_get(void * jarg1) {
8183 unsigned int jresult ;
8184 aiAnimation *arg1 = (aiAnimation *) 0 ;
8185 unsigned int result;
8186
8187 arg1 = (aiAnimation *)jarg1;
8188 result = (unsigned int) ((arg1)->mNumChannels);
8189 jresult = result;
8190 return jresult;
8191 }
8192
8193
8194 SWIGEXPORT void SWIGSTDCALL CSharp_aiAnimation_mNumMeshChannels_set(void * jarg1, unsigned int jarg2) {
8195 aiAnimation *arg1 = (aiAnimation *) 0 ;
8196 unsigned int arg2 ;
8197
8198 arg1 = (aiAnimation *)jarg1;
8199 arg2 = (unsigned int)jarg2;
8200 if (arg1) (arg1)->mNumMeshChannels = arg2;
8201 }
8202
8203
8204 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiAnimation_mNumMeshChannels_get(void * jarg1) {
8205 unsigned int jresult ;
8206 aiAnimation *arg1 = (aiAnimation *) 0 ;
8207 unsigned int result;
8208
8209 arg1 = (aiAnimation *)jarg1;
8210 result = (unsigned int) ((arg1)->mNumMeshChannels);
8211 jresult = result;
8212 return jresult;
8213 }
8214
8215
8216 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiAnimation() {
8217 void * jresult ;
8218 aiAnimation *result = 0 ;
8219
8220 result = (aiAnimation *)new aiAnimation();
8221 jresult = (void *)result;
8222 return jresult;
8223 }
8224
8225
8226 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiAnimation(void * jarg1) {
8227 aiAnimation *arg1 = (aiAnimation *) 0 ;
8228
8229 arg1 = (aiAnimation *)jarg1;
8230 delete arg1;
8231 }
8232
8233
8234 SWIGEXPORT void * SWIGSTDCALL CSharp_aiAnimation_GetmChannels(void * jarg1) {
8235 void * jresult ;
8236 aiAnimation *arg1 = (aiAnimation *) 0 ;
8237 std::vector< aiNodeAnim * > *result = 0 ;
8238
8239 arg1 = (aiAnimation *)jarg1;
8240 result = (std::vector< aiNodeAnim * > *)aiAnimation_GetmChannels(arg1);
8241 jresult = (void *)result;
8242 return jresult;
8243 }
8244
8245
8246 SWIGEXPORT void * SWIGSTDCALL CSharp_aiAnimation_GetmMeshChannels(void * jarg1) {
8247 void * jresult ;
8248 aiAnimation *arg1 = (aiAnimation *) 0 ;
8249 std::vector< aiMeshAnim * > *result = 0 ;
8250
8251 arg1 = (aiAnimation *)jarg1;
8252 result = (std::vector< aiMeshAnim * > *)aiAnimation_GetmMeshChannels(arg1);
8253 jresult = (void *)result;
8254 return jresult;
8255 }
8256
8257
8258 SWIGEXPORT int SWIGSTDCALL CSharp_AI_MAX_FACE_INDICES_get() {
8259 int jresult ;
8260 int result;
8261
8262 result = (int)(0x7fff);
8263 jresult = result;
8264 return jresult;
8265 }
8266
8267
8268 SWIGEXPORT int SWIGSTDCALL CSharp_AI_MAX_BONE_WEIGHTS_get() {
8269 int jresult ;
8270 int result;
8271
8272 result = (int)(0x7fffffff);
8273 jresult = result;
8274 return jresult;
8275 }
8276
8277
8278 SWIGEXPORT int SWIGSTDCALL CSharp_AI_MAX_VERTICES_get() {
8279 int jresult ;
8280 int result;
8281
8282 result = (int)(0x7fffffff);
8283 jresult = result;
8284 return jresult;
8285 }
8286
8287
8288 SWIGEXPORT int SWIGSTDCALL CSharp_AI_MAX_FACES_get() {
8289 int jresult ;
8290 int result;
8291
8292 result = (int)(0x7fffffff);
8293 jresult = result;
8294 return jresult;
8295 }
8296
8297
8298 SWIGEXPORT int SWIGSTDCALL CSharp_AI_MAX_NUMBER_OF_COLOR_SETS_get() {
8299 int jresult ;
8300 int result;
8301
8302 result = (int)(0x4);
8303 jresult = result;
8304 return jresult;
8305 }
8306
8307
8308 SWIGEXPORT int SWIGSTDCALL CSharp_AI_MAX_NUMBER_OF_TEXTURECOORDS_get() {
8309 int jresult ;
8310 int result;
8311
8312 result = (int)(0x4);
8313 jresult = result;
8314 return jresult;
8315 }
8316
8317
8318 SWIGEXPORT void SWIGSTDCALL CSharp_aiFace_mNumIndices_set(void * jarg1, unsigned int jarg2) {
8319 aiFace *arg1 = (aiFace *) 0 ;
8320 unsigned int arg2 ;
8321
8322 arg1 = (aiFace *)jarg1;
8323 arg2 = (unsigned int)jarg2;
8324 if (arg1) (arg1)->mNumIndices = arg2;
8325 }
8326
8327
8328 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiFace_mNumIndices_get(void * jarg1) {
8329 unsigned int jresult ;
8330 aiFace *arg1 = (aiFace *) 0 ;
8331 unsigned int result;
8332
8333 arg1 = (aiFace *)jarg1;
8334 result = (unsigned int) ((arg1)->mNumIndices);
8335 jresult = result;
8336 return jresult;
8337 }
8338
8339
8340 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiFace__SWIG_0() {
8341 void * jresult ;
8342 aiFace *result = 0 ;
8343
8344 result = (aiFace *)new aiFace();
8345 jresult = (void *)result;
8346 return jresult;
8347 }
8348
8349
8350 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiFace(void * jarg1) {
8351 aiFace *arg1 = (aiFace *) 0 ;
8352
8353 arg1 = (aiFace *)jarg1;
8354 delete arg1;
8355 }
8356
8357
8358 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiFace__SWIG_1(void * jarg1) {
8359 void * jresult ;
8360 aiFace *arg1 = 0 ;
8361 aiFace *result = 0 ;
8362
8363 arg1 = (aiFace *)jarg1;
8364 if (!arg1) {
8365 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiFace const & type is null", 0);
8366 return 0;
8367 }
8368 result = (aiFace *)new aiFace((aiFace const &)*arg1);
8369 jresult = (void *)result;
8370 return jresult;
8371 }
8372
8373
8374 SWIGEXPORT void * SWIGSTDCALL CSharp_aiFace___set__(void * jarg1, void * jarg2) {
8375 void * jresult ;
8376 aiFace *arg1 = (aiFace *) 0 ;
8377 aiFace *arg2 = 0 ;
8378 aiFace *result = 0 ;
8379
8380 arg1 = (aiFace *)jarg1;
8381 arg2 = (aiFace *)jarg2;
8382 if (!arg2) {
8383 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiFace const & type is null", 0);
8384 return 0;
8385 }
8386 result = (aiFace *) &(arg1)->operator =((aiFace const &)*arg2);
8387 jresult = (void *)result;
8388 return jresult;
8389 }
8390
8391
8392 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiFace___equal__(void * jarg1, void * jarg2) {
8393 unsigned int jresult ;
8394 aiFace *arg1 = (aiFace *) 0 ;
8395 aiFace *arg2 = 0 ;
8396 bool result;
8397
8398 arg1 = (aiFace *)jarg1;
8399 arg2 = (aiFace *)jarg2;
8400 if (!arg2) {
8401 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiFace const & type is null", 0);
8402 return 0;
8403 }
8404 result = (bool)((aiFace const *)arg1)->operator ==((aiFace const &)*arg2);
8405 jresult = result;
8406 return jresult;
8407 }
8408
8409
8410 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiFace___nequal__(void * jarg1, void * jarg2) {
8411 unsigned int jresult ;
8412 aiFace *arg1 = (aiFace *) 0 ;
8413 aiFace *arg2 = 0 ;
8414 bool result;
8415
8416 arg1 = (aiFace *)jarg1;
8417 arg2 = (aiFace *)jarg2;
8418 if (!arg2) {
8419 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiFace const & type is null", 0);
8420 return 0;
8421 }
8422 result = (bool)((aiFace const *)arg1)->operator !=((aiFace const &)*arg2);
8423 jresult = result;
8424 return jresult;
8425 }
8426
8427
8428 SWIGEXPORT void * SWIGSTDCALL CSharp_aiFace_GetmIndices(void * jarg1) {
8429 void * jresult ;
8430 aiFace *arg1 = (aiFace *) 0 ;
8431 std::vector< unsigned int > *result = 0 ;
8432
8433 arg1 = (aiFace *)jarg1;
8434 result = (std::vector< unsigned int > *)aiFace_GetmIndices(arg1);
8435 jresult = (void *)result;
8436 return jresult;
8437 }
8438
8439
8440 SWIGEXPORT void SWIGSTDCALL CSharp_aiVertexWeight_mVertexId_set(void * jarg1, unsigned int jarg2) {
8441 aiVertexWeight *arg1 = (aiVertexWeight *) 0 ;
8442 unsigned int arg2 ;
8443
8444 arg1 = (aiVertexWeight *)jarg1;
8445 arg2 = (unsigned int)jarg2;
8446 if (arg1) (arg1)->mVertexId = arg2;
8447 }
8448
8449
8450 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiVertexWeight_mVertexId_get(void * jarg1) {
8451 unsigned int jresult ;
8452 aiVertexWeight *arg1 = (aiVertexWeight *) 0 ;
8453 unsigned int result;
8454
8455 arg1 = (aiVertexWeight *)jarg1;
8456 result = (unsigned int) ((arg1)->mVertexId);
8457 jresult = result;
8458 return jresult;
8459 }
8460
8461
8462 SWIGEXPORT void SWIGSTDCALL CSharp_aiVertexWeight_mWeight_set(void * jarg1, float jarg2) {
8463 aiVertexWeight *arg1 = (aiVertexWeight *) 0 ;
8464 float arg2 ;
8465
8466 arg1 = (aiVertexWeight *)jarg1;
8467 arg2 = (float)jarg2;
8468 if (arg1) (arg1)->mWeight = arg2;
8469 }
8470
8471
8472 SWIGEXPORT float SWIGSTDCALL CSharp_aiVertexWeight_mWeight_get(void * jarg1) {
8473 float jresult ;
8474 aiVertexWeight *arg1 = (aiVertexWeight *) 0 ;
8475 float result;
8476
8477 arg1 = (aiVertexWeight *)jarg1;
8478 result = (float) ((arg1)->mWeight);
8479 jresult = result;
8480 return jresult;
8481 }
8482
8483
8484 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVertexWeight__SWIG_0() {
8485 void * jresult ;
8486 aiVertexWeight *result = 0 ;
8487
8488 result = (aiVertexWeight *)new aiVertexWeight();
8489 jresult = (void *)result;
8490 return jresult;
8491 }
8492
8493
8494 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiVertexWeight__SWIG_1(unsigned int jarg1, float jarg2) {
8495 void * jresult ;
8496 unsigned int arg1 ;
8497 float arg2 ;
8498 aiVertexWeight *result = 0 ;
8499
8500 arg1 = (unsigned int)jarg1;
8501 arg2 = (float)jarg2;
8502 result = (aiVertexWeight *)new aiVertexWeight(arg1,arg2);
8503 jresult = (void *)result;
8504 return jresult;
8505 }
8506
8507
8508 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiVertexWeight(void * jarg1) {
8509 aiVertexWeight *arg1 = (aiVertexWeight *) 0 ;
8510
8511 arg1 = (aiVertexWeight *)jarg1;
8512 delete arg1;
8513 }
8514
8515
8516 SWIGEXPORT void SWIGSTDCALL CSharp_aiBone_mName_set(void * jarg1, void * jarg2) {
8517 aiBone *arg1 = (aiBone *) 0 ;
8518 aiString *arg2 = (aiString *) 0 ;
8519
8520 arg1 = (aiBone *)jarg1;
8521 arg2 = (aiString *)jarg2;
8522 if (arg1) (arg1)->mName = *arg2;
8523 }
8524
8525
8526 SWIGEXPORT void * SWIGSTDCALL CSharp_aiBone_mName_get(void * jarg1) {
8527 void * jresult ;
8528 aiBone *arg1 = (aiBone *) 0 ;
8529 aiString *result = 0 ;
8530
8531 arg1 = (aiBone *)jarg1;
8532 result = (aiString *)& ((arg1)->mName);
8533 jresult = (void *)result;
8534 return jresult;
8535 }
8536
8537
8538 SWIGEXPORT void SWIGSTDCALL CSharp_aiBone_mNumWeights_set(void * jarg1, unsigned int jarg2) {
8539 aiBone *arg1 = (aiBone *) 0 ;
8540 unsigned int arg2 ;
8541
8542 arg1 = (aiBone *)jarg1;
8543 arg2 = (unsigned int)jarg2;
8544 if (arg1) (arg1)->mNumWeights = arg2;
8545 }
8546
8547
8548 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiBone_mNumWeights_get(void * jarg1) {
8549 unsigned int jresult ;
8550 aiBone *arg1 = (aiBone *) 0 ;
8551 unsigned int result;
8552
8553 arg1 = (aiBone *)jarg1;
8554 result = (unsigned int) ((arg1)->mNumWeights);
8555 jresult = result;
8556 return jresult;
8557 }
8558
8559
8560 SWIGEXPORT void SWIGSTDCALL CSharp_aiBone_mOffsetMatrix_set(void * jarg1, void * jarg2) {
8561 aiBone *arg1 = (aiBone *) 0 ;
8562 aiMatrix4x4 *arg2 = (aiMatrix4x4 *) 0 ;
8563
8564 arg1 = (aiBone *)jarg1;
8565 arg2 = (aiMatrix4x4 *)jarg2;
8566 if (arg1) (arg1)->mOffsetMatrix = *arg2;
8567 }
8568
8569
8570 SWIGEXPORT void * SWIGSTDCALL CSharp_aiBone_mOffsetMatrix_get(void * jarg1) {
8571 void * jresult ;
8572 aiBone *arg1 = (aiBone *) 0 ;
8573 aiMatrix4x4 *result = 0 ;
8574
8575 arg1 = (aiBone *)jarg1;
8576 result = (aiMatrix4x4 *)& ((arg1)->mOffsetMatrix);
8577 jresult = (void *)result;
8578 return jresult;
8579 }
8580
8581
8582 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiBone__SWIG_0() {
8583 void * jresult ;
8584 aiBone *result = 0 ;
8585
8586 result = (aiBone *)new aiBone();
8587 jresult = (void *)result;
8588 return jresult;
8589 }
8590
8591
8592 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiBone__SWIG_1(void * jarg1) {
8593 void * jresult ;
8594 aiBone *arg1 = 0 ;
8595 aiBone *result = 0 ;
8596
8597 arg1 = (aiBone *)jarg1;
8598 if (!arg1) {
8599 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiBone const & type is null", 0);
8600 return 0;
8601 }
8602 result = (aiBone *)new aiBone((aiBone const &)*arg1);
8603 jresult = (void *)result;
8604 return jresult;
8605 }
8606
8607
8608 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiBone(void * jarg1) {
8609 aiBone *arg1 = (aiBone *) 0 ;
8610
8611 arg1 = (aiBone *)jarg1;
8612 delete arg1;
8613 }
8614
8615
8616 SWIGEXPORT void * SWIGSTDCALL CSharp_aiBone_GetmWeights(void * jarg1) {
8617 void * jresult ;
8618 aiBone *arg1 = (aiBone *) 0 ;
8619 std::vector< aiVertexWeight * > *result = 0 ;
8620
8621 arg1 = (aiBone *)jarg1;
8622 result = (std::vector< aiVertexWeight * > *)aiBone_GetmWeights(arg1);
8623 jresult = (void *)result;
8624 return jresult;
8625 }
8626
8627
8628 SWIGEXPORT void SWIGSTDCALL CSharp_aiAnimMesh_mBitangents_set(void * jarg1, void * jarg2) {
8629 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
8630 aiVector3D *arg2 = (aiVector3D *) 0 ;
8631
8632 arg1 = (aiAnimMesh *)jarg1;
8633 arg2 = (aiVector3D *)jarg2;
8634 if (arg1) (arg1)->mBitangents = arg2;
8635 }
8636
8637
8638 SWIGEXPORT void * SWIGSTDCALL CSharp_aiAnimMesh_mBitangents_get(void * jarg1) {
8639 void * jresult ;
8640 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
8641 aiVector3D *result = 0 ;
8642
8643 arg1 = (aiAnimMesh *)jarg1;
8644 result = (aiVector3D *) ((arg1)->mBitangents);
8645 jresult = (void *)result;
8646 return jresult;
8647 }
8648
8649
8650 SWIGEXPORT void SWIGSTDCALL CSharp_aiAnimMesh_mNumVertices_set(void * jarg1, unsigned int jarg2) {
8651 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
8652 unsigned int arg2 ;
8653
8654 arg1 = (aiAnimMesh *)jarg1;
8655 arg2 = (unsigned int)jarg2;
8656 if (arg1) (arg1)->mNumVertices = arg2;
8657 }
8658
8659
8660 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiAnimMesh_mNumVertices_get(void * jarg1) {
8661 unsigned int jresult ;
8662 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
8663 unsigned int result;
8664
8665 arg1 = (aiAnimMesh *)jarg1;
8666 result = (unsigned int) ((arg1)->mNumVertices);
8667 jresult = result;
8668 return jresult;
8669 }
8670
8671
8672 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiAnimMesh() {
8673 void * jresult ;
8674 aiAnimMesh *result = 0 ;
8675
8676 result = (aiAnimMesh *)new aiAnimMesh();
8677 jresult = (void *)result;
8678 return jresult;
8679 }
8680
8681
8682 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiAnimMesh(void * jarg1) {
8683 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
8684
8685 arg1 = (aiAnimMesh *)jarg1;
8686 delete arg1;
8687 }
8688
8689
8690 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiAnimMesh_HasPositions(void * jarg1) {
8691 unsigned int jresult ;
8692 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
8693 bool result;
8694
8695 arg1 = (aiAnimMesh *)jarg1;
8696 result = (bool)((aiAnimMesh const *)arg1)->HasPositions();
8697 jresult = result;
8698 return jresult;
8699 }
8700
8701
8702 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiAnimMesh_HasNormals(void * jarg1) {
8703 unsigned int jresult ;
8704 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
8705 bool result;
8706
8707 arg1 = (aiAnimMesh *)jarg1;
8708 result = (bool)((aiAnimMesh const *)arg1)->HasNormals();
8709 jresult = result;
8710 return jresult;
8711 }
8712
8713
8714 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiAnimMesh_HasTangentsAndBitangents(void * jarg1) {
8715 unsigned int jresult ;
8716 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
8717 bool result;
8718
8719 arg1 = (aiAnimMesh *)jarg1;
8720 result = (bool)((aiAnimMesh const *)arg1)->HasTangentsAndBitangents();
8721 jresult = result;
8722 return jresult;
8723 }
8724
8725
8726 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiAnimMesh_HasVertexColors(void * jarg1, unsigned int jarg2) {
8727 unsigned int jresult ;
8728 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
8729 unsigned int arg2 ;
8730 bool result;
8731
8732 arg1 = (aiAnimMesh *)jarg1;
8733 arg2 = (unsigned int)jarg2;
8734 result = (bool)((aiAnimMesh const *)arg1)->HasVertexColors(arg2);
8735 jresult = result;
8736 return jresult;
8737 }
8738
8739
8740 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiAnimMesh_HasTextureCoords(void * jarg1, unsigned int jarg2) {
8741 unsigned int jresult ;
8742 aiAnimMesh *arg1 = (aiAnimMesh *) 0 ;
8743 unsigned int arg2 ;
8744 bool result;
8745
8746 arg1 = (aiAnimMesh *)jarg1;
8747 arg2 = (unsigned int)jarg2;
8748 result = (bool)((aiAnimMesh const *)arg1)->HasTextureCoords(arg2);
8749 jresult = result;
8750 return jresult;
8751 }
8752
8753
8754 SWIGEXPORT void SWIGSTDCALL CSharp_aiMesh_mPrimitiveTypes_set(void * jarg1, unsigned int jarg2) {
8755 aiMesh *arg1 = (aiMesh *) 0 ;
8756 unsigned int arg2 ;
8757
8758 arg1 = (aiMesh *)jarg1;
8759 arg2 = (unsigned int)jarg2;
8760 if (arg1) (arg1)->mPrimitiveTypes = arg2;
8761 }
8762
8763
8764 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_mPrimitiveTypes_get(void * jarg1) {
8765 unsigned int jresult ;
8766 aiMesh *arg1 = (aiMesh *) 0 ;
8767 unsigned int result;
8768
8769 arg1 = (aiMesh *)jarg1;
8770 result = (unsigned int) ((arg1)->mPrimitiveTypes);
8771 jresult = result;
8772 return jresult;
8773 }
8774
8775
8776 SWIGEXPORT void SWIGSTDCALL CSharp_aiMesh_mNumVertices_set(void * jarg1, unsigned int jarg2) {
8777 aiMesh *arg1 = (aiMesh *) 0 ;
8778 unsigned int arg2 ;
8779
8780 arg1 = (aiMesh *)jarg1;
8781 arg2 = (unsigned int)jarg2;
8782 if (arg1) (arg1)->mNumVertices = arg2;
8783 }
8784
8785
8786 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_mNumVertices_get(void * jarg1) {
8787 unsigned int jresult ;
8788 aiMesh *arg1 = (aiMesh *) 0 ;
8789 unsigned int result;
8790
8791 arg1 = (aiMesh *)jarg1;
8792 result = (unsigned int) ((arg1)->mNumVertices);
8793 jresult = result;
8794 return jresult;
8795 }
8796
8797
8798 SWIGEXPORT void SWIGSTDCALL CSharp_aiMesh_mNumFaces_set(void * jarg1, unsigned int jarg2) {
8799 aiMesh *arg1 = (aiMesh *) 0 ;
8800 unsigned int arg2 ;
8801
8802 arg1 = (aiMesh *)jarg1;
8803 arg2 = (unsigned int)jarg2;
8804 if (arg1) (arg1)->mNumFaces = arg2;
8805 }
8806
8807
8808 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_mNumFaces_get(void * jarg1) {
8809 unsigned int jresult ;
8810 aiMesh *arg1 = (aiMesh *) 0 ;
8811 unsigned int result;
8812
8813 arg1 = (aiMesh *)jarg1;
8814 result = (unsigned int) ((arg1)->mNumFaces);
8815 jresult = result;
8816 return jresult;
8817 }
8818
8819
8820 SWIGEXPORT void SWIGSTDCALL CSharp_aiMesh_mNumBones_set(void * jarg1, unsigned int jarg2) {
8821 aiMesh *arg1 = (aiMesh *) 0 ;
8822 unsigned int arg2 ;
8823
8824 arg1 = (aiMesh *)jarg1;
8825 arg2 = (unsigned int)jarg2;
8826 if (arg1) (arg1)->mNumBones = arg2;
8827 }
8828
8829
8830 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_mNumBones_get(void * jarg1) {
8831 unsigned int jresult ;
8832 aiMesh *arg1 = (aiMesh *) 0 ;
8833 unsigned int result;
8834
8835 arg1 = (aiMesh *)jarg1;
8836 result = (unsigned int) ((arg1)->mNumBones);
8837 jresult = result;
8838 return jresult;
8839 }
8840
8841
8842 SWIGEXPORT void SWIGSTDCALL CSharp_aiMesh_mMaterialIndex_set(void * jarg1, unsigned int jarg2) {
8843 aiMesh *arg1 = (aiMesh *) 0 ;
8844 unsigned int arg2 ;
8845
8846 arg1 = (aiMesh *)jarg1;
8847 arg2 = (unsigned int)jarg2;
8848 if (arg1) (arg1)->mMaterialIndex = arg2;
8849 }
8850
8851
8852 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_mMaterialIndex_get(void * jarg1) {
8853 unsigned int jresult ;
8854 aiMesh *arg1 = (aiMesh *) 0 ;
8855 unsigned int result;
8856
8857 arg1 = (aiMesh *)jarg1;
8858 result = (unsigned int) ((arg1)->mMaterialIndex);
8859 jresult = result;
8860 return jresult;
8861 }
8862
8863
8864 SWIGEXPORT void SWIGSTDCALL CSharp_aiMesh_mName_set(void * jarg1, void * jarg2) {
8865 aiMesh *arg1 = (aiMesh *) 0 ;
8866 aiString *arg2 = (aiString *) 0 ;
8867
8868 arg1 = (aiMesh *)jarg1;
8869 arg2 = (aiString *)jarg2;
8870 if (arg1) (arg1)->mName = *arg2;
8871 }
8872
8873
8874 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_mName_get(void * jarg1) {
8875 void * jresult ;
8876 aiMesh *arg1 = (aiMesh *) 0 ;
8877 aiString *result = 0 ;
8878
8879 arg1 = (aiMesh *)jarg1;
8880 result = (aiString *)& ((arg1)->mName);
8881 jresult = (void *)result;
8882 return jresult;
8883 }
8884
8885
8886 SWIGEXPORT void SWIGSTDCALL CSharp_aiMesh_mNumAnimMeshes_set(void * jarg1, unsigned int jarg2) {
8887 aiMesh *arg1 = (aiMesh *) 0 ;
8888 unsigned int arg2 ;
8889
8890 arg1 = (aiMesh *)jarg1;
8891 arg2 = (unsigned int)jarg2;
8892 if (arg1) (arg1)->mNumAnimMeshes = arg2;
8893 }
8894
8895
8896 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_mNumAnimMeshes_get(void * jarg1) {
8897 unsigned int jresult ;
8898 aiMesh *arg1 = (aiMesh *) 0 ;
8899 unsigned int result;
8900
8901 arg1 = (aiMesh *)jarg1;
8902 result = (unsigned int) ((arg1)->mNumAnimMeshes);
8903 jresult = result;
8904 return jresult;
8905 }
8906
8907
8908 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiMesh() {
8909 void * jresult ;
8910 aiMesh *result = 0 ;
8911
8912 result = (aiMesh *)new aiMesh();
8913 jresult = (void *)result;
8914 return jresult;
8915 }
8916
8917
8918 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiMesh(void * jarg1) {
8919 aiMesh *arg1 = (aiMesh *) 0 ;
8920
8921 arg1 = (aiMesh *)jarg1;
8922 delete arg1;
8923 }
8924
8925
8926 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_HasPositions(void * jarg1) {
8927 unsigned int jresult ;
8928 aiMesh *arg1 = (aiMesh *) 0 ;
8929 bool result;
8930
8931 arg1 = (aiMesh *)jarg1;
8932 result = (bool)((aiMesh const *)arg1)->HasPositions();
8933 jresult = result;
8934 return jresult;
8935 }
8936
8937
8938 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_HasFaces(void * jarg1) {
8939 unsigned int jresult ;
8940 aiMesh *arg1 = (aiMesh *) 0 ;
8941 bool result;
8942
8943 arg1 = (aiMesh *)jarg1;
8944 result = (bool)((aiMesh const *)arg1)->HasFaces();
8945 jresult = result;
8946 return jresult;
8947 }
8948
8949
8950 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_HasNormals(void * jarg1) {
8951 unsigned int jresult ;
8952 aiMesh *arg1 = (aiMesh *) 0 ;
8953 bool result;
8954
8955 arg1 = (aiMesh *)jarg1;
8956 result = (bool)((aiMesh const *)arg1)->HasNormals();
8957 jresult = result;
8958 return jresult;
8959 }
8960
8961
8962 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_HasTangentsAndBitangents(void * jarg1) {
8963 unsigned int jresult ;
8964 aiMesh *arg1 = (aiMesh *) 0 ;
8965 bool result;
8966
8967 arg1 = (aiMesh *)jarg1;
8968 result = (bool)((aiMesh const *)arg1)->HasTangentsAndBitangents();
8969 jresult = result;
8970 return jresult;
8971 }
8972
8973
8974 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_HasVertexColors(void * jarg1, unsigned int jarg2) {
8975 unsigned int jresult ;
8976 aiMesh *arg1 = (aiMesh *) 0 ;
8977 unsigned int arg2 ;
8978 bool result;
8979
8980 arg1 = (aiMesh *)jarg1;
8981 arg2 = (unsigned int)jarg2;
8982 result = (bool)((aiMesh const *)arg1)->HasVertexColors(arg2);
8983 jresult = result;
8984 return jresult;
8985 }
8986
8987
8988 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_HasTextureCoords(void * jarg1, unsigned int jarg2) {
8989 unsigned int jresult ;
8990 aiMesh *arg1 = (aiMesh *) 0 ;
8991 unsigned int arg2 ;
8992 bool result;
8993
8994 arg1 = (aiMesh *)jarg1;
8995 arg2 = (unsigned int)jarg2;
8996 result = (bool)((aiMesh const *)arg1)->HasTextureCoords(arg2);
8997 jresult = result;
8998 return jresult;
8999 }
9000
9001
9002 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_GetNumUVChannels(void * jarg1) {
9003 unsigned int jresult ;
9004 aiMesh *arg1 = (aiMesh *) 0 ;
9005 unsigned int result;
9006
9007 arg1 = (aiMesh *)jarg1;
9008 result = (unsigned int)((aiMesh const *)arg1)->GetNumUVChannels();
9009 jresult = result;
9010 return jresult;
9011 }
9012
9013
9014 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_GetNumColorChannels(void * jarg1) {
9015 unsigned int jresult ;
9016 aiMesh *arg1 = (aiMesh *) 0 ;
9017 unsigned int result;
9018
9019 arg1 = (aiMesh *)jarg1;
9020 result = (unsigned int)((aiMesh const *)arg1)->GetNumColorChannels();
9021 jresult = result;
9022 return jresult;
9023 }
9024
9025
9026 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMesh_HasBones(void * jarg1) {
9027 unsigned int jresult ;
9028 aiMesh *arg1 = (aiMesh *) 0 ;
9029 bool result;
9030
9031 arg1 = (aiMesh *)jarg1;
9032 result = (bool)((aiMesh const *)arg1)->HasBones();
9033 jresult = result;
9034 return jresult;
9035 }
9036
9037
9038 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmAnimMeshes(void * jarg1) {
9039 void * jresult ;
9040 aiMesh *arg1 = (aiMesh *) 0 ;
9041 std::vector< aiAnimMesh * > *result = 0 ;
9042
9043 arg1 = (aiMesh *)jarg1;
9044 result = (std::vector< aiAnimMesh * > *)aiMesh_GetmAnimMeshes(arg1);
9045 jresult = (void *)result;
9046 return jresult;
9047 }
9048
9049
9050 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmBitangents(void * jarg1) {
9051 void * jresult ;
9052 aiMesh *arg1 = (aiMesh *) 0 ;
9053 std::vector< aiVector3D * > *result = 0 ;
9054
9055 arg1 = (aiMesh *)jarg1;
9056 result = (std::vector< aiVector3D * > *)aiMesh_GetmBitangents(arg1);
9057 jresult = (void *)result;
9058 return jresult;
9059 }
9060
9061
9062 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmBones(void * jarg1) {
9063 void * jresult ;
9064 aiMesh *arg1 = (aiMesh *) 0 ;
9065 std::vector< aiBone * > *result = 0 ;
9066
9067 arg1 = (aiMesh *)jarg1;
9068 result = (std::vector< aiBone * > *)aiMesh_GetmBones(arg1);
9069 jresult = (void *)result;
9070 return jresult;
9071 }
9072
9073
9074 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmColors(void * jarg1) {
9075 void * jresult ;
9076 aiMesh *arg1 = (aiMesh *) 0 ;
9077 std::vector< std::vector< aiColor4D * > > *result = 0 ;
9078
9079 arg1 = (aiMesh *)jarg1;
9080 result = (std::vector< std::vector< aiColor4D * > > *)aiMesh_GetmColors(arg1);
9081 jresult = (void *)result;
9082 return jresult;
9083 }
9084
9085
9086 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmFaces(void * jarg1) {
9087 void * jresult ;
9088 aiMesh *arg1 = (aiMesh *) 0 ;
9089 std::vector< aiFace * > *result = 0 ;
9090
9091 arg1 = (aiMesh *)jarg1;
9092 result = (std::vector< aiFace * > *)aiMesh_GetmFaces(arg1);
9093 jresult = (void *)result;
9094 return jresult;
9095 }
9096
9097
9098 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmNormals(void * jarg1) {
9099 void * jresult ;
9100 aiMesh *arg1 = (aiMesh *) 0 ;
9101 std::vector< aiVector3D * > *result = 0 ;
9102
9103 arg1 = (aiMesh *)jarg1;
9104 result = (std::vector< aiVector3D * > *)aiMesh_GetmNormals(arg1);
9105 jresult = (void *)result;
9106 return jresult;
9107 }
9108
9109
9110 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmTangents(void * jarg1) {
9111 void * jresult ;
9112 aiMesh *arg1 = (aiMesh *) 0 ;
9113 std::vector< aiVector3D * > *result = 0 ;
9114
9115 arg1 = (aiMesh *)jarg1;
9116 result = (std::vector< aiVector3D * > *)aiMesh_GetmTangents(arg1);
9117 jresult = (void *)result;
9118 return jresult;
9119 }
9120
9121
9122 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmTextureCoords(void * jarg1) {
9123 void * jresult ;
9124 aiMesh *arg1 = (aiMesh *) 0 ;
9125 std::vector< std::vector< aiVector3D * > > *result = 0 ;
9126
9127 arg1 = (aiMesh *)jarg1;
9128 result = (std::vector< std::vector< aiVector3D * > > *)aiMesh_GetmTextureCoords(arg1);
9129 jresult = (void *)result;
9130 return jresult;
9131 }
9132
9133
9134 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmNumUVComponents(void * jarg1) {
9135 void * jresult ;
9136 aiMesh *arg1 = (aiMesh *) 0 ;
9137 std::vector< unsigned int > *result = 0 ;
9138
9139 arg1 = (aiMesh *)jarg1;
9140 result = (std::vector< unsigned int > *)aiMesh_GetmNumUVComponents(arg1);
9141 jresult = (void *)result;
9142 return jresult;
9143 }
9144
9145
9146 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMesh_GetmVertices(void * jarg1) {
9147 void * jresult ;
9148 aiMesh *arg1 = (aiMesh *) 0 ;
9149 std::vector< aiVector3D * > *result = 0 ;
9150
9151 arg1 = (aiMesh *)jarg1;
9152 result = (std::vector< aiVector3D * > *)aiMesh_GetmVertices(arg1);
9153 jresult = (void *)result;
9154 return jresult;
9155 }
9156
9157
9158 SWIGEXPORT char * SWIGSTDCALL CSharp_AI_DEFAULT_MATERIAL_NAME_get() {
9159 char * jresult ;
9160 char *result = 0 ;
9161
9162 result = (char *)("DefaultMaterial");
9163 jresult = SWIG_csharp_string_callback((const char *)result);
9164 return jresult;
9165 }
9166
9167
9168 SWIGEXPORT char * SWIGSTDCALL CSharp_AI_DEFAULT_TEXTURED_MATERIAL_NAME_get() {
9169 char * jresult ;
9170 char *result = 0 ;
9171
9172 result = (char *)("TexturedDefaultMaterial");
9173 jresult = SWIG_csharp_string_callback((const char *)result);
9174 return jresult;
9175 }
9176
9177
9178 SWIGEXPORT void SWIGSTDCALL CSharp_aiUVTransform_mTranslation_set(void * jarg1, void * jarg2) {
9179 aiUVTransform *arg1 = (aiUVTransform *) 0 ;
9180 aiVector2D *arg2 = (aiVector2D *) 0 ;
9181
9182 arg1 = (aiUVTransform *)jarg1;
9183 arg2 = (aiVector2D *)jarg2;
9184 if (arg1) (arg1)->mTranslation = *arg2;
9185 }
9186
9187
9188 SWIGEXPORT void * SWIGSTDCALL CSharp_aiUVTransform_mTranslation_get(void * jarg1) {
9189 void * jresult ;
9190 aiUVTransform *arg1 = (aiUVTransform *) 0 ;
9191 aiVector2D *result = 0 ;
9192
9193 arg1 = (aiUVTransform *)jarg1;
9194 result = (aiVector2D *)& ((arg1)->mTranslation);
9195 jresult = (void *)result;
9196 return jresult;
9197 }
9198
9199
9200 SWIGEXPORT void SWIGSTDCALL CSharp_aiUVTransform_mScaling_set(void * jarg1, void * jarg2) {
9201 aiUVTransform *arg1 = (aiUVTransform *) 0 ;
9202 aiVector2D *arg2 = (aiVector2D *) 0 ;
9203
9204 arg1 = (aiUVTransform *)jarg1;
9205 arg2 = (aiVector2D *)jarg2;
9206 if (arg1) (arg1)->mScaling = *arg2;
9207 }
9208
9209
9210 SWIGEXPORT void * SWIGSTDCALL CSharp_aiUVTransform_mScaling_get(void * jarg1) {
9211 void * jresult ;
9212 aiUVTransform *arg1 = (aiUVTransform *) 0 ;
9213 aiVector2D *result = 0 ;
9214
9215 arg1 = (aiUVTransform *)jarg1;
9216 result = (aiVector2D *)& ((arg1)->mScaling);
9217 jresult = (void *)result;
9218 return jresult;
9219 }
9220
9221
9222 SWIGEXPORT void SWIGSTDCALL CSharp_aiUVTransform_mRotation_set(void * jarg1, float jarg2) {
9223 aiUVTransform *arg1 = (aiUVTransform *) 0 ;
9224 float arg2 ;
9225
9226 arg1 = (aiUVTransform *)jarg1;
9227 arg2 = (float)jarg2;
9228 if (arg1) (arg1)->mRotation = arg2;
9229 }
9230
9231
9232 SWIGEXPORT float SWIGSTDCALL CSharp_aiUVTransform_mRotation_get(void * jarg1) {
9233 float jresult ;
9234 aiUVTransform *arg1 = (aiUVTransform *) 0 ;
9235 float result;
9236
9237 arg1 = (aiUVTransform *)jarg1;
9238 result = (float) ((arg1)->mRotation);
9239 jresult = result;
9240 return jresult;
9241 }
9242
9243
9244 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiUVTransform() {
9245 void * jresult ;
9246 aiUVTransform *result = 0 ;
9247
9248 result = (aiUVTransform *)new aiUVTransform();
9249 jresult = (void *)result;
9250 return jresult;
9251 }
9252
9253
9254 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiUVTransform(void * jarg1) {
9255 aiUVTransform *arg1 = (aiUVTransform *) 0 ;
9256
9257 arg1 = (aiUVTransform *)jarg1;
9258 delete arg1;
9259 }
9260
9261
9262 SWIGEXPORT void SWIGSTDCALL CSharp_aiMaterialProperty_mKey_set(void * jarg1, void * jarg2) {
9263 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
9264 aiString *arg2 = (aiString *) 0 ;
9265
9266 arg1 = (aiMaterialProperty *)jarg1;
9267 arg2 = (aiString *)jarg2;
9268 if (arg1) (arg1)->mKey = *arg2;
9269 }
9270
9271
9272 SWIGEXPORT void * SWIGSTDCALL CSharp_aiMaterialProperty_mKey_get(void * jarg1) {
9273 void * jresult ;
9274 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
9275 aiString *result = 0 ;
9276
9277 arg1 = (aiMaterialProperty *)jarg1;
9278 result = (aiString *)& ((arg1)->mKey);
9279 jresult = (void *)result;
9280 return jresult;
9281 }
9282
9283
9284 SWIGEXPORT void SWIGSTDCALL CSharp_aiMaterialProperty_mSemantic_set(void * jarg1, unsigned int jarg2) {
9285 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
9286 unsigned int arg2 ;
9287
9288 arg1 = (aiMaterialProperty *)jarg1;
9289 arg2 = (unsigned int)jarg2;
9290 if (arg1) (arg1)->mSemantic = arg2;
9291 }
9292
9293
9294 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterialProperty_mSemantic_get(void * jarg1) {
9295 unsigned int jresult ;
9296 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
9297 unsigned int result;
9298
9299 arg1 = (aiMaterialProperty *)jarg1;
9300 result = (unsigned int) ((arg1)->mSemantic);
9301 jresult = result;
9302 return jresult;
9303 }
9304
9305
9306 SWIGEXPORT void SWIGSTDCALL CSharp_aiMaterialProperty_mIndex_set(void * jarg1, unsigned int jarg2) {
9307 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
9308 unsigned int arg2 ;
9309
9310 arg1 = (aiMaterialProperty *)jarg1;
9311 arg2 = (unsigned int)jarg2;
9312 if (arg1) (arg1)->mIndex = arg2;
9313 }
9314
9315
9316 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterialProperty_mIndex_get(void * jarg1) {
9317 unsigned int jresult ;
9318 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
9319 unsigned int result;
9320
9321 arg1 = (aiMaterialProperty *)jarg1;
9322 result = (unsigned int) ((arg1)->mIndex);
9323 jresult = result;
9324 return jresult;
9325 }
9326
9327
9328 SWIGEXPORT void SWIGSTDCALL CSharp_aiMaterialProperty_mDataLength_set(void * jarg1, unsigned int jarg2) {
9329 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
9330 unsigned int arg2 ;
9331
9332 arg1 = (aiMaterialProperty *)jarg1;
9333 arg2 = (unsigned int)jarg2;
9334 if (arg1) (arg1)->mDataLength = arg2;
9335 }
9336
9337
9338 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterialProperty_mDataLength_get(void * jarg1) {
9339 unsigned int jresult ;
9340 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
9341 unsigned int result;
9342
9343 arg1 = (aiMaterialProperty *)jarg1;
9344 result = (unsigned int) ((arg1)->mDataLength);
9345 jresult = result;
9346 return jresult;
9347 }
9348
9349
9350 SWIGEXPORT void SWIGSTDCALL CSharp_aiMaterialProperty_mType_set(void * jarg1, int jarg2) {
9351 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
9352 aiPropertyTypeInfo arg2 ;
9353
9354 arg1 = (aiMaterialProperty *)jarg1;
9355 arg2 = (aiPropertyTypeInfo)jarg2;
9356 if (arg1) (arg1)->mType = arg2;
9357 }
9358
9359
9360 SWIGEXPORT int SWIGSTDCALL CSharp_aiMaterialProperty_mType_get(void * jarg1) {
9361 int jresult ;
9362 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
9363 aiPropertyTypeInfo result;
9364
9365 arg1 = (aiMaterialProperty *)jarg1;
9366 result = (aiPropertyTypeInfo) ((arg1)->mType);
9367 jresult = result;
9368 return jresult;
9369 }
9370
9371
9372 SWIGEXPORT void SWIGSTDCALL CSharp_aiMaterialProperty_mData_set(void * jarg1, char * jarg2) {
9373 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
9374 char *arg2 = (char *) 0 ;
9375
9376 arg1 = (aiMaterialProperty *)jarg1;
9377 arg2 = (char *)jarg2;
9378 {
9379 if (arg1->mData) delete [] arg1->mData;
9380 if (arg2) {
9381 arg1->mData = (char *) (new char[strlen((const char *)arg2)+1]);
9382 strcpy((char *)arg1->mData, (const char *)arg2);
9383 } else {
9384 arg1->mData = 0;
9385 }
9386 }
9387 }
9388
9389
9390 SWIGEXPORT char * SWIGSTDCALL CSharp_aiMaterialProperty_mData_get(void * jarg1) {
9391 char * jresult ;
9392 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
9393 char *result = 0 ;
9394
9395 arg1 = (aiMaterialProperty *)jarg1;
9396 result = (char *) ((arg1)->mData);
9397 jresult = SWIG_csharp_string_callback((const char *)result);
9398 return jresult;
9399 }
9400
9401
9402 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiMaterialProperty() {
9403 void * jresult ;
9404 aiMaterialProperty *result = 0 ;
9405
9406 result = (aiMaterialProperty *)new aiMaterialProperty();
9407 jresult = (void *)result;
9408 return jresult;
9409 }
9410
9411
9412 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiMaterialProperty(void * jarg1) {
9413 aiMaterialProperty *arg1 = (aiMaterialProperty *) 0 ;
9414
9415 arg1 = (aiMaterialProperty *)jarg1;
9416 delete arg1;
9417 }
9418
9419
9420 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiMaterial() {
9421 void * jresult ;
9422 aiMaterial *result = 0 ;
9423
9424 result = (aiMaterial *)new aiMaterial();
9425 jresult = (void *)result;
9426 return jresult;
9427 }
9428
9429
9430 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiMaterial(void * jarg1) {
9431 aiMaterial *arg1 = (aiMaterial *) 0 ;
9432
9433 arg1 = (aiMaterial *)jarg1;
9434 delete arg1;
9435 }
9436
9437
9438 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureCount(void * jarg1, int jarg2) {
9439 unsigned int jresult ;
9440 aiMaterial *arg1 = (aiMaterial *) 0 ;
9441 aiTextureType arg2 ;
9442 unsigned int result;
9443
9444 arg1 = (aiMaterial *)jarg1;
9445 arg2 = (aiTextureType)jarg2;
9446 result = (unsigned int)((aiMaterial const *)arg1)->GetTextureCount(arg2);
9447 jresult = result;
9448 return jresult;
9449 }
9450
9451
9452 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetDiffuse(void * jarg1, void * jarg2) {
9453 unsigned int jresult ;
9454 aiMaterial *arg1 = (aiMaterial *) 0 ;
9455 aiColor4D *arg2 = (aiColor4D *) 0 ;
9456 bool result;
9457
9458 arg1 = (aiMaterial *)jarg1;
9459 arg2 = (aiColor4D *)jarg2;
9460 result = (bool)aiMaterial_GetDiffuse(arg1,arg2);
9461 jresult = result;
9462 return jresult;
9463 }
9464
9465
9466 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetSpecular(void * jarg1, void * jarg2) {
9467 unsigned int jresult ;
9468 aiMaterial *arg1 = (aiMaterial *) 0 ;
9469 aiColor4D *arg2 = (aiColor4D *) 0 ;
9470 bool result;
9471
9472 arg1 = (aiMaterial *)jarg1;
9473 arg2 = (aiColor4D *)jarg2;
9474 result = (bool)aiMaterial_GetSpecular(arg1,arg2);
9475 jresult = result;
9476 return jresult;
9477 }
9478
9479
9480 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetAmbient(void * jarg1, void * jarg2) {
9481 unsigned int jresult ;
9482 aiMaterial *arg1 = (aiMaterial *) 0 ;
9483 aiColor4D *arg2 = (aiColor4D *) 0 ;
9484 bool result;
9485
9486 arg1 = (aiMaterial *)jarg1;
9487 arg2 = (aiColor4D *)jarg2;
9488 result = (bool)aiMaterial_GetAmbient(arg1,arg2);
9489 jresult = result;
9490 return jresult;
9491 }
9492
9493
9494 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetEmissive(void * jarg1, void * jarg2) {
9495 unsigned int jresult ;
9496 aiMaterial *arg1 = (aiMaterial *) 0 ;
9497 aiColor4D *arg2 = (aiColor4D *) 0 ;
9498 bool result;
9499
9500 arg1 = (aiMaterial *)jarg1;
9501 arg2 = (aiColor4D *)jarg2;
9502 result = (bool)aiMaterial_GetEmissive(arg1,arg2);
9503 jresult = result;
9504 return jresult;
9505 }
9506
9507
9508 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetOpacity(void * jarg1, float * jarg2) {
9509 unsigned int jresult ;
9510 aiMaterial *arg1 = (aiMaterial *) 0 ;
9511 float *arg2 = (float *) 0 ;
9512 bool result;
9513
9514 arg1 = (aiMaterial *)jarg1;
9515 arg2 = (float *)jarg2;
9516 result = (bool)aiMaterial_GetOpacity(arg1,arg2);
9517 jresult = result;
9518 return jresult;
9519 }
9520
9521
9522 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetShininessStrength(void * jarg1, float * jarg2) {
9523 unsigned int jresult ;
9524 aiMaterial *arg1 = (aiMaterial *) 0 ;
9525 float *arg2 = (float *) 0 ;
9526 bool result;
9527
9528 arg1 = (aiMaterial *)jarg1;
9529 arg2 = (float *)jarg2;
9530 result = (bool)aiMaterial_GetShininessStrength(arg1,arg2);
9531 jresult = result;
9532 return jresult;
9533 }
9534
9535
9536 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetShadingModel(void * jarg1, int * jarg2) {
9537 unsigned int jresult ;
9538 aiMaterial *arg1 = (aiMaterial *) 0 ;
9539 int *arg2 = (int *) 0 ;
9540 bool result;
9541
9542 arg1 = (aiMaterial *)jarg1;
9543 arg2 = (int *)jarg2;
9544 result = (bool)aiMaterial_GetShadingModel(arg1,arg2);
9545 jresult = result;
9546 return jresult;
9547 }
9548
9549
9550 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTexFlagsDiffuse0(void * jarg1, int * jarg2) {
9551 unsigned int jresult ;
9552 aiMaterial *arg1 = (aiMaterial *) 0 ;
9553 int *arg2 = (int *) 0 ;
9554 bool result;
9555
9556 arg1 = (aiMaterial *)jarg1;
9557 arg2 = (int *)jarg2;
9558 result = (bool)aiMaterial_GetTexFlagsDiffuse0(arg1,arg2);
9559 jresult = result;
9560 return jresult;
9561 }
9562
9563
9564 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetMappingModeUDiffuse0(void * jarg1, int * jarg2) {
9565 unsigned int jresult ;
9566 aiMaterial *arg1 = (aiMaterial *) 0 ;
9567 int *arg2 = (int *) 0 ;
9568 bool result;
9569
9570 arg1 = (aiMaterial *)jarg1;
9571 arg2 = (int *)jarg2;
9572 result = (bool)aiMaterial_GetMappingModeUDiffuse0(arg1,arg2);
9573 jresult = result;
9574 return jresult;
9575 }
9576
9577
9578 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetMappingModeVDiffuse0(void * jarg1, int * jarg2) {
9579 unsigned int jresult ;
9580 aiMaterial *arg1 = (aiMaterial *) 0 ;
9581 int *arg2 = (int *) 0 ;
9582 bool result;
9583
9584 arg1 = (aiMaterial *)jarg1;
9585 arg2 = (int *)jarg2;
9586 result = (bool)aiMaterial_GetMappingModeVDiffuse0(arg1,arg2);
9587 jresult = result;
9588 return jresult;
9589 }
9590
9591
9592 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureDiffuse0(void * jarg1, void * jarg2) {
9593 unsigned int jresult ;
9594 aiMaterial *arg1 = (aiMaterial *) 0 ;
9595 aiString *arg2 = (aiString *) 0 ;
9596 bool result;
9597
9598 arg1 = (aiMaterial *)jarg1;
9599 arg2 = (aiString *)jarg2;
9600 result = (bool)aiMaterial_GetTextureDiffuse0(arg1,arg2);
9601 jresult = result;
9602 return jresult;
9603 }
9604
9605
9606 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureSpecular0(void * jarg1, void * jarg2) {
9607 unsigned int jresult ;
9608 aiMaterial *arg1 = (aiMaterial *) 0 ;
9609 aiString *arg2 = (aiString *) 0 ;
9610 bool result;
9611
9612 arg1 = (aiMaterial *)jarg1;
9613 arg2 = (aiString *)jarg2;
9614 result = (bool)aiMaterial_GetTextureSpecular0(arg1,arg2);
9615 jresult = result;
9616 return jresult;
9617 }
9618
9619
9620 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureOpacity0(void * jarg1, void * jarg2) {
9621 unsigned int jresult ;
9622 aiMaterial *arg1 = (aiMaterial *) 0 ;
9623 aiString *arg2 = (aiString *) 0 ;
9624 bool result;
9625
9626 arg1 = (aiMaterial *)jarg1;
9627 arg2 = (aiString *)jarg2;
9628 result = (bool)aiMaterial_GetTextureOpacity0(arg1,arg2);
9629 jresult = result;
9630 return jresult;
9631 }
9632
9633
9634 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureAmbient0(void * jarg1, void * jarg2) {
9635 unsigned int jresult ;
9636 aiMaterial *arg1 = (aiMaterial *) 0 ;
9637 aiString *arg2 = (aiString *) 0 ;
9638 bool result;
9639
9640 arg1 = (aiMaterial *)jarg1;
9641 arg2 = (aiString *)jarg2;
9642 result = (bool)aiMaterial_GetTextureAmbient0(arg1,arg2);
9643 jresult = result;
9644 return jresult;
9645 }
9646
9647
9648 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureEmissive0(void * jarg1, void * jarg2) {
9649 unsigned int jresult ;
9650 aiMaterial *arg1 = (aiMaterial *) 0 ;
9651 aiString *arg2 = (aiString *) 0 ;
9652 bool result;
9653
9654 arg1 = (aiMaterial *)jarg1;
9655 arg2 = (aiString *)jarg2;
9656 result = (bool)aiMaterial_GetTextureEmissive0(arg1,arg2);
9657 jresult = result;
9658 return jresult;
9659 }
9660
9661
9662 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureShininess0(void * jarg1, void * jarg2) {
9663 unsigned int jresult ;
9664 aiMaterial *arg1 = (aiMaterial *) 0 ;
9665 aiString *arg2 = (aiString *) 0 ;
9666 bool result;
9667
9668 arg1 = (aiMaterial *)jarg1;
9669 arg2 = (aiString *)jarg2;
9670 result = (bool)aiMaterial_GetTextureShininess0(arg1,arg2);
9671 jresult = result;
9672 return jresult;
9673 }
9674
9675
9676 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureLightmap0(void * jarg1, void * jarg2) {
9677 unsigned int jresult ;
9678 aiMaterial *arg1 = (aiMaterial *) 0 ;
9679 aiString *arg2 = (aiString *) 0 ;
9680 bool result;
9681
9682 arg1 = (aiMaterial *)jarg1;
9683 arg2 = (aiString *)jarg2;
9684 result = (bool)aiMaterial_GetTextureLightmap0(arg1,arg2);
9685 jresult = result;
9686 return jresult;
9687 }
9688
9689
9690 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureNormals0(void * jarg1, void * jarg2) {
9691 unsigned int jresult ;
9692 aiMaterial *arg1 = (aiMaterial *) 0 ;
9693 aiString *arg2 = (aiString *) 0 ;
9694 bool result;
9695
9696 arg1 = (aiMaterial *)jarg1;
9697 arg2 = (aiString *)jarg2;
9698 result = (bool)aiMaterial_GetTextureNormals0(arg1,arg2);
9699 jresult = result;
9700 return jresult;
9701 }
9702
9703
9704 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTextureHeight0(void * jarg1, void * jarg2) {
9705 unsigned int jresult ;
9706 aiMaterial *arg1 = (aiMaterial *) 0 ;
9707 aiString *arg2 = (aiString *) 0 ;
9708 bool result;
9709
9710 arg1 = (aiMaterial *)jarg1;
9711 arg2 = (aiString *)jarg2;
9712 result = (bool)aiMaterial_GetTextureHeight0(arg1,arg2);
9713 jresult = result;
9714 return jresult;
9715 }
9716
9717
9718 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetGlobalBackgroundImage(void * jarg1, void * jarg2) {
9719 unsigned int jresult ;
9720 aiMaterial *arg1 = (aiMaterial *) 0 ;
9721 aiString *arg2 = (aiString *) 0 ;
9722 bool result;
9723
9724 arg1 = (aiMaterial *)jarg1;
9725 arg2 = (aiString *)jarg2;
9726 result = (bool)aiMaterial_GetGlobalBackgroundImage(arg1,arg2);
9727 jresult = result;
9728 return jresult;
9729 }
9730
9731
9732 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiMaterial_GetTwoSided(void * jarg1, int * jarg2) {
9733 unsigned int jresult ;
9734 aiMaterial *arg1 = (aiMaterial *) 0 ;
9735 int *arg2 = (int *) 0 ;
9736 bool result;
9737
9738 arg1 = (aiMaterial *)jarg1;
9739 arg2 = (int *)jarg2;
9740 result = (bool)aiMaterial_GetTwoSided(arg1,arg2);
9741 jresult = result;
9742 return jresult;
9743 }
9744
9745
9746 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_TEXTURE_BASE_get() {
9747 char * jresult ;
9748 char *result = 0 ;
9749
9750 result = (char *)("$tex.file");
9751 jresult = SWIG_csharp_string_callback((const char *)result);
9752 return jresult;
9753 }
9754
9755
9756 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_UVWSRC_BASE_get() {
9757 char * jresult ;
9758 char *result = 0 ;
9759
9760 result = (char *)("$tex.uvwsrc");
9761 jresult = SWIG_csharp_string_callback((const char *)result);
9762 return jresult;
9763 }
9764
9765
9766 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_TEXOP_BASE_get() {
9767 char * jresult ;
9768 char *result = 0 ;
9769
9770 result = (char *)("$tex.op");
9771 jresult = SWIG_csharp_string_callback((const char *)result);
9772 return jresult;
9773 }
9774
9775
9776 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_MAPPING_BASE_get() {
9777 char * jresult ;
9778 char *result = 0 ;
9779
9780 result = (char *)("$tex.mapping");
9781 jresult = SWIG_csharp_string_callback((const char *)result);
9782 return jresult;
9783 }
9784
9785
9786 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_TEXBLEND_BASE_get() {
9787 char * jresult ;
9788 char *result = 0 ;
9789
9790 result = (char *)("$tex.blend");
9791 jresult = SWIG_csharp_string_callback((const char *)result);
9792 return jresult;
9793 }
9794
9795
9796 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_MAPPINGMODE_U_BASE_get() {
9797 char * jresult ;
9798 char *result = 0 ;
9799
9800 result = (char *)("$tex.mapmodeu");
9801 jresult = SWIG_csharp_string_callback((const char *)result);
9802 return jresult;
9803 }
9804
9805
9806 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_MAPPINGMODE_V_BASE_get() {
9807 char * jresult ;
9808 char *result = 0 ;
9809
9810 result = (char *)("$tex.mapmodev");
9811 jresult = SWIG_csharp_string_callback((const char *)result);
9812 return jresult;
9813 }
9814
9815
9816 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_TEXMAP_AXIS_BASE_get() {
9817 char * jresult ;
9818 char *result = 0 ;
9819
9820 result = (char *)("$tex.mapaxis");
9821 jresult = SWIG_csharp_string_callback((const char *)result);
9822 return jresult;
9823 }
9824
9825
9826 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_UVTRANSFORM_BASE_get() {
9827 char * jresult ;
9828 char *result = 0 ;
9829
9830 result = (char *)("$tex.uvtrafo");
9831 jresult = SWIG_csharp_string_callback((const char *)result);
9832 return jresult;
9833 }
9834
9835
9836 SWIGEXPORT char * SWIGSTDCALL CSharp__AI_MATKEY_TEXFLAGS_BASE_get() {
9837 char * jresult ;
9838 char *result = 0 ;
9839
9840 result = (char *)("$tex.flags");
9841 jresult = SWIG_csharp_string_callback((const char *)result);
9842 return jresult;
9843 }
9844
9845
9846 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiQuaternion__SWIG_0() {
9847 void * jresult ;
9848 aiQuaternion *result = 0 ;
9849
9850 result = (aiQuaternion *)new aiQuaternion();
9851 jresult = (void *)result;
9852 return jresult;
9853 }
9854
9855
9856 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiQuaternion__SWIG_1(float jarg1, float jarg2, float jarg3, float jarg4) {
9857 void * jresult ;
9858 float arg1 ;
9859 float arg2 ;
9860 float arg3 ;
9861 float arg4 ;
9862 aiQuaternion *result = 0 ;
9863
9864 arg1 = (float)jarg1;
9865 arg2 = (float)jarg2;
9866 arg3 = (float)jarg3;
9867 arg4 = (float)jarg4;
9868 result = (aiQuaternion *)new aiQuaternion(arg1,arg2,arg3,arg4);
9869 jresult = (void *)result;
9870 return jresult;
9871 }
9872
9873
9874 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiQuaternion__SWIG_2(void * jarg1) {
9875 void * jresult ;
9876 aiMatrix3x3 *arg1 = 0 ;
9877 aiQuaternion *result = 0 ;
9878
9879 arg1 = (aiMatrix3x3 *)jarg1;
9880 if (!arg1) {
9881 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMatrix3x3 const & type is null", 0);
9882 return 0;
9883 }
9884 result = (aiQuaternion *)new aiQuaternion((aiMatrix3x3 const &)*arg1);
9885 jresult = (void *)result;
9886 return jresult;
9887 }
9888
9889
9890 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiQuaternion__SWIG_3(float jarg1, float jarg2, float jarg3) {
9891 void * jresult ;
9892 float arg1 ;
9893 float arg2 ;
9894 float arg3 ;
9895 aiQuaternion *result = 0 ;
9896
9897 arg1 = (float)jarg1;
9898 arg2 = (float)jarg2;
9899 arg3 = (float)jarg3;
9900 result = (aiQuaternion *)new aiQuaternion(arg1,arg2,arg3);
9901 jresult = (void *)result;
9902 return jresult;
9903 }
9904
9905
9906 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiQuaternion__SWIG_4(void * jarg1, float jarg2) {
9907 void * jresult ;
9908 aiVector3D arg1 ;
9909 float arg2 ;
9910 aiVector3D *argp1 ;
9911 aiQuaternion *result = 0 ;
9912
9913 argp1 = (aiVector3D *)jarg1;
9914 if (!argp1) {
9915 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null aiVector3D", 0);
9916 return 0;
9917 }
9918 arg1 = *argp1;
9919 arg2 = (float)jarg2;
9920 result = (aiQuaternion *)new aiQuaternion(arg1,arg2);
9921 jresult = (void *)result;
9922 return jresult;
9923 }
9924
9925
9926 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiQuaternion__SWIG_5(void * jarg1) {
9927 void * jresult ;
9928 aiVector3D arg1 ;
9929 aiVector3D *argp1 ;
9930 aiQuaternion *result = 0 ;
9931
9932 argp1 = (aiVector3D *)jarg1;
9933 if (!argp1) {
9934 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Attempt to dereference null aiVector3D", 0);
9935 return 0;
9936 }
9937 arg1 = *argp1;
9938 result = (aiQuaternion *)new aiQuaternion(arg1);
9939 jresult = (void *)result;
9940 return jresult;
9941 }
9942
9943
9944 SWIGEXPORT void * SWIGSTDCALL CSharp_aiQuaternion_GetMatrix(void * jarg1) {
9945 void * jresult ;
9946 aiQuaternion *arg1 = (aiQuaternion *) 0 ;
9947 aiMatrix3x3 result;
9948
9949 arg1 = (aiQuaternion *)jarg1;
9950 result = ((aiQuaternion const *)arg1)->GetMatrix();
9951 jresult = new aiMatrix3x3((const aiMatrix3x3 &)result);
9952 return jresult;
9953 }
9954
9955
9956 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiQuaternion___equal__(void * jarg1, void * jarg2) {
9957 unsigned int jresult ;
9958 aiQuaternion *arg1 = (aiQuaternion *) 0 ;
9959 aiQuaternion *arg2 = 0 ;
9960 bool result;
9961
9962 arg1 = (aiQuaternion *)jarg1;
9963 arg2 = (aiQuaternion *)jarg2;
9964 if (!arg2) {
9965 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuaternion const & type is null", 0);
9966 return 0;
9967 }
9968 result = (bool)((aiQuaternion const *)arg1)->operator ==((aiQuaternion const &)*arg2);
9969 jresult = result;
9970 return jresult;
9971 }
9972
9973
9974 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiQuaternion___nequal__(void * jarg1, void * jarg2) {
9975 unsigned int jresult ;
9976 aiQuaternion *arg1 = (aiQuaternion *) 0 ;
9977 aiQuaternion *arg2 = 0 ;
9978 bool result;
9979
9980 arg1 = (aiQuaternion *)jarg1;
9981 arg2 = (aiQuaternion *)jarg2;
9982 if (!arg2) {
9983 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuaternion const & type is null", 0);
9984 return 0;
9985 }
9986 result = (bool)((aiQuaternion const *)arg1)->operator !=((aiQuaternion const &)*arg2);
9987 jresult = result;
9988 return jresult;
9989 }
9990
9991
9992 SWIGEXPORT void * SWIGSTDCALL CSharp_aiQuaternion_Normalize(void * jarg1) {
9993 void * jresult ;
9994 aiQuaternion *arg1 = (aiQuaternion *) 0 ;
9995 aiQuaternion *result = 0 ;
9996
9997 arg1 = (aiQuaternion *)jarg1;
9998 result = (aiQuaternion *) &(arg1)->Normalize();
9999 jresult = (void *)result;
10000 return jresult;
10001 }
10002
10003
10004 SWIGEXPORT void * SWIGSTDCALL CSharp_aiQuaternion_Conjugate(void * jarg1) {
10005 void * jresult ;
10006 aiQuaternion *arg1 = (aiQuaternion *) 0 ;
10007 aiQuaternion *result = 0 ;
10008
10009 arg1 = (aiQuaternion *)jarg1;
10010 result = (aiQuaternion *) &(arg1)->Conjugate();
10011 jresult = (void *)result;
10012 return jresult;
10013 }
10014
10015
10016 SWIGEXPORT void * SWIGSTDCALL CSharp_aiQuaternion_Rotate(void * jarg1, void * jarg2) {
10017 void * jresult ;
10018 aiQuaternion *arg1 = (aiQuaternion *) 0 ;
10019 aiVector3D *arg2 = 0 ;
10020 aiVector3D result;
10021
10022 arg1 = (aiQuaternion *)jarg1;
10023 arg2 = (aiVector3D *)jarg2;
10024 if (!arg2) {
10025 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiVector3D const & type is null", 0);
10026 return 0;
10027 }
10028 result = (arg1)->Rotate((aiVector3D const &)*arg2);
10029 jresult = new aiVector3D((const aiVector3D &)result);
10030 return jresult;
10031 }
10032
10033
10034 SWIGEXPORT void * SWIGSTDCALL CSharp_aiQuaternion___mul__(void * jarg1, void * jarg2) {
10035 void * jresult ;
10036 aiQuaternion *arg1 = (aiQuaternion *) 0 ;
10037 aiQuaternion *arg2 = 0 ;
10038 aiQuaternion result;
10039
10040 arg1 = (aiQuaternion *)jarg1;
10041 arg2 = (aiQuaternion *)jarg2;
10042 if (!arg2) {
10043 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuaternion const & type is null", 0);
10044 return 0;
10045 }
10046 result = ((aiQuaternion const *)arg1)->operator *((aiQuaternion const &)*arg2);
10047 jresult = new aiQuaternion((const aiQuaternion &)result);
10048 return jresult;
10049 }
10050
10051
10052 SWIGEXPORT void SWIGSTDCALL CSharp_aiQuaternion_Interpolate(void * jarg1, void * jarg2, void * jarg3, float jarg4) {
10053 aiQuaternion *arg1 = 0 ;
10054 aiQuaternion *arg2 = 0 ;
10055 aiQuaternion *arg3 = 0 ;
10056 float arg4 ;
10057
10058 arg1 = (aiQuaternion *)jarg1;
10059 if (!arg1) {
10060 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuaternion & type is null", 0);
10061 return ;
10062 }
10063 arg2 = (aiQuaternion *)jarg2;
10064 if (!arg2) {
10065 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuaternion const & type is null", 0);
10066 return ;
10067 }
10068 arg3 = (aiQuaternion *)jarg3;
10069 if (!arg3) {
10070 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiQuaternion const & type is null", 0);
10071 return ;
10072 }
10073 arg4 = (float)jarg4;
10074 aiQuaternion::Interpolate(*arg1,(aiQuaternion const &)*arg2,(aiQuaternion const &)*arg3,arg4);
10075 }
10076
10077
10078 SWIGEXPORT void SWIGSTDCALL CSharp_aiQuaternion_w_set(void * jarg1, float jarg2) {
10079 aiQuaternion *arg1 = (aiQuaternion *) 0 ;
10080 float arg2 ;
10081
10082 arg1 = (aiQuaternion *)jarg1;
10083 arg2 = (float)jarg2;
10084 if (arg1) (arg1)->w = arg2;
10085 }
10086
10087
10088 SWIGEXPORT float SWIGSTDCALL CSharp_aiQuaternion_w_get(void * jarg1) {
10089 float jresult ;
10090 aiQuaternion *arg1 = (aiQuaternion *) 0 ;
10091 float result;
10092
10093 arg1 = (aiQuaternion *)jarg1;
10094 result = (float) ((arg1)->w);
10095 jresult = result;
10096 return jresult;
10097 }
10098
10099
10100 SWIGEXPORT void SWIGSTDCALL CSharp_aiQuaternion_x_set(void * jarg1, float jarg2) {
10101 aiQuaternion *arg1 = (aiQuaternion *) 0 ;
10102 float arg2 ;
10103
10104 arg1 = (aiQuaternion *)jarg1;
10105 arg2 = (float)jarg2;
10106 if (arg1) (arg1)->x = arg2;
10107 }
10108
10109
10110 SWIGEXPORT float SWIGSTDCALL CSharp_aiQuaternion_x_get(void * jarg1) {
10111 float jresult ;
10112 aiQuaternion *arg1 = (aiQuaternion *) 0 ;
10113 float result;
10114
10115 arg1 = (aiQuaternion *)jarg1;
10116 result = (float) ((arg1)->x);
10117 jresult = result;
10118 return jresult;
10119 }
10120
10121
10122 SWIGEXPORT void SWIGSTDCALL CSharp_aiQuaternion_y_set(void * jarg1, float jarg2) {
10123 aiQuaternion *arg1 = (aiQuaternion *) 0 ;
10124 float arg2 ;
10125
10126 arg1 = (aiQuaternion *)jarg1;
10127 arg2 = (float)jarg2;
10128 if (arg1) (arg1)->y = arg2;
10129 }
10130
10131
10132 SWIGEXPORT float SWIGSTDCALL CSharp_aiQuaternion_y_get(void * jarg1) {
10133 float jresult ;
10134 aiQuaternion *arg1 = (aiQuaternion *) 0 ;
10135 float result;
10136
10137 arg1 = (aiQuaternion *)jarg1;
10138 result = (float) ((arg1)->y);
10139 jresult = result;
10140 return jresult;
10141 }
10142
10143
10144 SWIGEXPORT void SWIGSTDCALL CSharp_aiQuaternion_z_set(void * jarg1, float jarg2) {
10145 aiQuaternion *arg1 = (aiQuaternion *) 0 ;
10146 float arg2 ;
10147
10148 arg1 = (aiQuaternion *)jarg1;
10149 arg2 = (float)jarg2;
10150 if (arg1) (arg1)->z = arg2;
10151 }
10152
10153
10154 SWIGEXPORT float SWIGSTDCALL CSharp_aiQuaternion_z_get(void * jarg1) {
10155 float jresult ;
10156 aiQuaternion *arg1 = (aiQuaternion *) 0 ;
10157 float result;
10158
10159 arg1 = (aiQuaternion *)jarg1;
10160 result = (float) ((arg1)->z);
10161 jresult = result;
10162 return jresult;
10163 }
10164
10165
10166 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiQuaternion(void * jarg1) {
10167 aiQuaternion *arg1 = (aiQuaternion *) 0 ;
10168
10169 arg1 = (aiQuaternion *)jarg1;
10170 delete arg1;
10171 }
10172
10173
10174 SWIGEXPORT void SWIGSTDCALL CSharp_aiNode_mName_set(void * jarg1, void * jarg2) {
10175 aiNode *arg1 = (aiNode *) 0 ;
10176 aiString *arg2 = (aiString *) 0 ;
10177
10178 arg1 = (aiNode *)jarg1;
10179 arg2 = (aiString *)jarg2;
10180 if (arg1) (arg1)->mName = *arg2;
10181 }
10182
10183
10184 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNode_mName_get(void * jarg1) {
10185 void * jresult ;
10186 aiNode *arg1 = (aiNode *) 0 ;
10187 aiString *result = 0 ;
10188
10189 arg1 = (aiNode *)jarg1;
10190 result = (aiString *)& ((arg1)->mName);
10191 jresult = (void *)result;
10192 return jresult;
10193 }
10194
10195
10196 SWIGEXPORT void SWIGSTDCALL CSharp_aiNode_mTransformation_set(void * jarg1, void * jarg2) {
10197 aiNode *arg1 = (aiNode *) 0 ;
10198 aiMatrix4x4 *arg2 = (aiMatrix4x4 *) 0 ;
10199
10200 arg1 = (aiNode *)jarg1;
10201 arg2 = (aiMatrix4x4 *)jarg2;
10202 if (arg1) (arg1)->mTransformation = *arg2;
10203 }
10204
10205
10206 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNode_mTransformation_get(void * jarg1) {
10207 void * jresult ;
10208 aiNode *arg1 = (aiNode *) 0 ;
10209 aiMatrix4x4 *result = 0 ;
10210
10211 arg1 = (aiNode *)jarg1;
10212 result = (aiMatrix4x4 *)& ((arg1)->mTransformation);
10213 jresult = (void *)result;
10214 return jresult;
10215 }
10216
10217
10218 SWIGEXPORT void SWIGSTDCALL CSharp_aiNode_mParent_set(void * jarg1, void * jarg2) {
10219 aiNode *arg1 = (aiNode *) 0 ;
10220 aiNode *arg2 = (aiNode *) 0 ;
10221
10222 arg1 = (aiNode *)jarg1;
10223 arg2 = (aiNode *)jarg2;
10224 if (arg1) (arg1)->mParent = arg2;
10225 }
10226
10227
10228 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNode_mParent_get(void * jarg1) {
10229 void * jresult ;
10230 aiNode *arg1 = (aiNode *) 0 ;
10231 aiNode *result = 0 ;
10232
10233 arg1 = (aiNode *)jarg1;
10234 result = (aiNode *) ((arg1)->mParent);
10235 jresult = (void *)result;
10236 return jresult;
10237 }
10238
10239
10240 SWIGEXPORT void SWIGSTDCALL CSharp_aiNode_mNumChildren_set(void * jarg1, unsigned int jarg2) {
10241 aiNode *arg1 = (aiNode *) 0 ;
10242 unsigned int arg2 ;
10243
10244 arg1 = (aiNode *)jarg1;
10245 arg2 = (unsigned int)jarg2;
10246 if (arg1) (arg1)->mNumChildren = arg2;
10247 }
10248
10249
10250 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiNode_mNumChildren_get(void * jarg1) {
10251 unsigned int jresult ;
10252 aiNode *arg1 = (aiNode *) 0 ;
10253 unsigned int result;
10254
10255 arg1 = (aiNode *)jarg1;
10256 result = (unsigned int) ((arg1)->mNumChildren);
10257 jresult = result;
10258 return jresult;
10259 }
10260
10261
10262 SWIGEXPORT void SWIGSTDCALL CSharp_aiNode_mNumMeshes_set(void * jarg1, unsigned int jarg2) {
10263 aiNode *arg1 = (aiNode *) 0 ;
10264 unsigned int arg2 ;
10265
10266 arg1 = (aiNode *)jarg1;
10267 arg2 = (unsigned int)jarg2;
10268 if (arg1) (arg1)->mNumMeshes = arg2;
10269 }
10270
10271
10272 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiNode_mNumMeshes_get(void * jarg1) {
10273 unsigned int jresult ;
10274 aiNode *arg1 = (aiNode *) 0 ;
10275 unsigned int result;
10276
10277 arg1 = (aiNode *)jarg1;
10278 result = (unsigned int) ((arg1)->mNumMeshes);
10279 jresult = result;
10280 return jresult;
10281 }
10282
10283
10284 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiNode__SWIG_0() {
10285 void * jresult ;
10286 aiNode *result = 0 ;
10287
10288 result = (aiNode *)new aiNode();
10289 jresult = (void *)result;
10290 return jresult;
10291 }
10292
10293
10294 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiNode__SWIG_1(char * jarg1) {
10295 void * jresult ;
10296 std::string *arg1 = 0 ;
10297 aiNode *result = 0 ;
10298
10299 if (!jarg1) {
10300 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "null string", 0);
10301 return 0;
10302 }
10303 std::string arg1_str(jarg1);
10304 arg1 = &arg1_str;
10305 result = (aiNode *)new aiNode((std::string const &)*arg1);
10306 jresult = (void *)result;
10307 return jresult;
10308 }
10309
10310
10311 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiNode(void * jarg1) {
10312 aiNode *arg1 = (aiNode *) 0 ;
10313
10314 arg1 = (aiNode *)jarg1;
10315 delete arg1;
10316 }
10317
10318
10319 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNode_FindNode__SWIG_0(void * jarg1, void * jarg2) {
10320 void * jresult ;
10321 aiNode *arg1 = (aiNode *) 0 ;
10322 aiString *arg2 = 0 ;
10323 aiNode *result = 0 ;
10324
10325 arg1 = (aiNode *)jarg1;
10326 arg2 = (aiString *)jarg2;
10327 if (!arg2) {
10328 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiString const & type is null", 0);
10329 return 0;
10330 }
10331 result = (aiNode *)(arg1)->FindNode((aiString const &)*arg2);
10332 jresult = (void *)result;
10333 return jresult;
10334 }
10335
10336
10337 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNode_FindNode__SWIG_1(void * jarg1, char * jarg2) {
10338 void * jresult ;
10339 aiNode *arg1 = (aiNode *) 0 ;
10340 char *arg2 = (char *) 0 ;
10341 aiNode *result = 0 ;
10342
10343 arg1 = (aiNode *)jarg1;
10344 arg2 = (char *)jarg2;
10345 result = (aiNode *)(arg1)->FindNode((char const *)arg2);
10346 jresult = (void *)result;
10347 return jresult;
10348 }
10349
10350
10351 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNode_GetmChildren(void * jarg1) {
10352 void * jresult ;
10353 aiNode *arg1 = (aiNode *) 0 ;
10354 std::vector< aiNode * > *result = 0 ;
10355
10356 arg1 = (aiNode *)jarg1;
10357 result = (std::vector< aiNode * > *)aiNode_GetmChildren(arg1);
10358 jresult = (void *)result;
10359 return jresult;
10360 }
10361
10362
10363 SWIGEXPORT void * SWIGSTDCALL CSharp_aiNode_GetmMeshes(void * jarg1) {
10364 void * jresult ;
10365 aiNode *arg1 = (aiNode *) 0 ;
10366 std::vector< unsigned int > *result = 0 ;
10367
10368 arg1 = (aiNode *)jarg1;
10369 result = (std::vector< unsigned int > *)aiNode_GetmMeshes(arg1);
10370 jresult = (void *)result;
10371 return jresult;
10372 }
10373
10374
10375 SWIGEXPORT int SWIGSTDCALL CSharp_AI_SCENE_FLAGS_INCOMPLETE_get() {
10376 int jresult ;
10377 int result;
10378
10379 result = (int)(0x1);
10380 jresult = result;
10381 return jresult;
10382 }
10383
10384
10385 SWIGEXPORT int SWIGSTDCALL CSharp_AI_SCENE_FLAGS_VALIDATED_get() {
10386 int jresult ;
10387 int result;
10388
10389 result = (int)(0x2);
10390 jresult = result;
10391 return jresult;
10392 }
10393
10394
10395 SWIGEXPORT int SWIGSTDCALL CSharp_AI_SCENE_FLAGS_VALIDATION_WARNING_get() {
10396 int jresult ;
10397 int result;
10398
10399 result = (int)(0x4);
10400 jresult = result;
10401 return jresult;
10402 }
10403
10404
10405 SWIGEXPORT int SWIGSTDCALL CSharp_AI_SCENE_FLAGS_NON_VERBOSE_FORMAT_get() {
10406 int jresult ;
10407 int result;
10408
10409 result = (int)(0x8);
10410 jresult = result;
10411 return jresult;
10412 }
10413
10414
10415 SWIGEXPORT int SWIGSTDCALL CSharp_AI_SCENE_FLAGS_TERRAIN_get() {
10416 int jresult ;
10417 int result;
10418
10419 result = (int)(0x10);
10420 jresult = result;
10421 return jresult;
10422 }
10423
10424
10425 SWIGEXPORT void SWIGSTDCALL CSharp_aiScene_mFlags_set(void * jarg1, unsigned int jarg2) {
10426 aiScene *arg1 = (aiScene *) 0 ;
10427 unsigned int arg2 ;
10428
10429 arg1 = (aiScene *)jarg1;
10430 arg2 = (unsigned int)jarg2;
10431 if (arg1) (arg1)->mFlags = arg2;
10432 }
10433
10434
10435 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_mFlags_get(void * jarg1) {
10436 unsigned int jresult ;
10437 aiScene *arg1 = (aiScene *) 0 ;
10438 unsigned int result;
10439
10440 arg1 = (aiScene *)jarg1;
10441 result = (unsigned int) ((arg1)->mFlags);
10442 jresult = result;
10443 return jresult;
10444 }
10445
10446
10447 SWIGEXPORT void SWIGSTDCALL CSharp_aiScene_mRootNode_set(void * jarg1, void * jarg2) {
10448 aiScene *arg1 = (aiScene *) 0 ;
10449 aiNode *arg2 = (aiNode *) 0 ;
10450
10451 arg1 = (aiScene *)jarg1;
10452 arg2 = (aiNode *)jarg2;
10453 if (arg1) (arg1)->mRootNode = arg2;
10454 }
10455
10456
10457 SWIGEXPORT void * SWIGSTDCALL CSharp_aiScene_mRootNode_get(void * jarg1) {
10458 void * jresult ;
10459 aiScene *arg1 = (aiScene *) 0 ;
10460 aiNode *result = 0 ;
10461
10462 arg1 = (aiScene *)jarg1;
10463 result = (aiNode *) ((arg1)->mRootNode);
10464 jresult = (void *)result;
10465 return jresult;
10466 }
10467
10468
10469 SWIGEXPORT void SWIGSTDCALL CSharp_aiScene_mNumMeshes_set(void * jarg1, unsigned int jarg2) {
10470 aiScene *arg1 = (aiScene *) 0 ;
10471 unsigned int arg2 ;
10472
10473 arg1 = (aiScene *)jarg1;
10474 arg2 = (unsigned int)jarg2;
10475 if (arg1) (arg1)->mNumMeshes = arg2;
10476 }
10477
10478
10479 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_mNumMeshes_get(void * jarg1) {
10480 unsigned int jresult ;
10481 aiScene *arg1 = (aiScene *) 0 ;
10482 unsigned int result;
10483
10484 arg1 = (aiScene *)jarg1;
10485 result = (unsigned int) ((arg1)->mNumMeshes);
10486 jresult = result;
10487 return jresult;
10488 }
10489
10490
10491 SWIGEXPORT void SWIGSTDCALL CSharp_aiScene_mNumMaterials_set(void * jarg1, unsigned int jarg2) {
10492 aiScene *arg1 = (aiScene *) 0 ;
10493 unsigned int arg2 ;
10494
10495 arg1 = (aiScene *)jarg1;
10496 arg2 = (unsigned int)jarg2;
10497 if (arg1) (arg1)->mNumMaterials = arg2;
10498 }
10499
10500
10501 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_mNumMaterials_get(void * jarg1) {
10502 unsigned int jresult ;
10503 aiScene *arg1 = (aiScene *) 0 ;
10504 unsigned int result;
10505
10506 arg1 = (aiScene *)jarg1;
10507 result = (unsigned int) ((arg1)->mNumMaterials);
10508 jresult = result;
10509 return jresult;
10510 }
10511
10512
10513 SWIGEXPORT void SWIGSTDCALL CSharp_aiScene_mNumAnimations_set(void * jarg1, unsigned int jarg2) {
10514 aiScene *arg1 = (aiScene *) 0 ;
10515 unsigned int arg2 ;
10516
10517 arg1 = (aiScene *)jarg1;
10518 arg2 = (unsigned int)jarg2;
10519 if (arg1) (arg1)->mNumAnimations = arg2;
10520 }
10521
10522
10523 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_mNumAnimations_get(void * jarg1) {
10524 unsigned int jresult ;
10525 aiScene *arg1 = (aiScene *) 0 ;
10526 unsigned int result;
10527
10528 arg1 = (aiScene *)jarg1;
10529 result = (unsigned int) ((arg1)->mNumAnimations);
10530 jresult = result;
10531 return jresult;
10532 }
10533
10534
10535 SWIGEXPORT void SWIGSTDCALL CSharp_aiScene_mNumTextures_set(void * jarg1, unsigned int jarg2) {
10536 aiScene *arg1 = (aiScene *) 0 ;
10537 unsigned int arg2 ;
10538
10539 arg1 = (aiScene *)jarg1;
10540 arg2 = (unsigned int)jarg2;
10541 if (arg1) (arg1)->mNumTextures = arg2;
10542 }
10543
10544
10545 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_mNumTextures_get(void * jarg1) {
10546 unsigned int jresult ;
10547 aiScene *arg1 = (aiScene *) 0 ;
10548 unsigned int result;
10549
10550 arg1 = (aiScene *)jarg1;
10551 result = (unsigned int) ((arg1)->mNumTextures);
10552 jresult = result;
10553 return jresult;
10554 }
10555
10556
10557 SWIGEXPORT void SWIGSTDCALL CSharp_aiScene_mNumLights_set(void * jarg1, unsigned int jarg2) {
10558 aiScene *arg1 = (aiScene *) 0 ;
10559 unsigned int arg2 ;
10560
10561 arg1 = (aiScene *)jarg1;
10562 arg2 = (unsigned int)jarg2;
10563 if (arg1) (arg1)->mNumLights = arg2;
10564 }
10565
10566
10567 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_mNumLights_get(void * jarg1) {
10568 unsigned int jresult ;
10569 aiScene *arg1 = (aiScene *) 0 ;
10570 unsigned int result;
10571
10572 arg1 = (aiScene *)jarg1;
10573 result = (unsigned int) ((arg1)->mNumLights);
10574 jresult = result;
10575 return jresult;
10576 }
10577
10578
10579 SWIGEXPORT void SWIGSTDCALL CSharp_aiScene_mNumCameras_set(void * jarg1, unsigned int jarg2) {
10580 aiScene *arg1 = (aiScene *) 0 ;
10581 unsigned int arg2 ;
10582
10583 arg1 = (aiScene *)jarg1;
10584 arg2 = (unsigned int)jarg2;
10585 if (arg1) (arg1)->mNumCameras = arg2;
10586 }
10587
10588
10589 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_mNumCameras_get(void * jarg1) {
10590 unsigned int jresult ;
10591 aiScene *arg1 = (aiScene *) 0 ;
10592 unsigned int result;
10593
10594 arg1 = (aiScene *)jarg1;
10595 result = (unsigned int) ((arg1)->mNumCameras);
10596 jresult = result;
10597 return jresult;
10598 }
10599
10600
10601 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiScene() {
10602 void * jresult ;
10603 aiScene *result = 0 ;
10604
10605 result = (aiScene *)new aiScene();
10606 jresult = (void *)result;
10607 return jresult;
10608 }
10609
10610
10611 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiScene(void * jarg1) {
10612 aiScene *arg1 = (aiScene *) 0 ;
10613
10614 arg1 = (aiScene *)jarg1;
10615 delete arg1;
10616 }
10617
10618
10619 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_HasMeshes(void * jarg1) {
10620 unsigned int jresult ;
10621 aiScene *arg1 = (aiScene *) 0 ;
10622 bool result;
10623
10624 arg1 = (aiScene *)jarg1;
10625 result = (bool)((aiScene const *)arg1)->HasMeshes();
10626 jresult = result;
10627 return jresult;
10628 }
10629
10630
10631 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_HasMaterials(void * jarg1) {
10632 unsigned int jresult ;
10633 aiScene *arg1 = (aiScene *) 0 ;
10634 bool result;
10635
10636 arg1 = (aiScene *)jarg1;
10637 result = (bool)((aiScene const *)arg1)->HasMaterials();
10638 jresult = result;
10639 return jresult;
10640 }
10641
10642
10643 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_HasLights(void * jarg1) {
10644 unsigned int jresult ;
10645 aiScene *arg1 = (aiScene *) 0 ;
10646 bool result;
10647
10648 arg1 = (aiScene *)jarg1;
10649 result = (bool)((aiScene const *)arg1)->HasLights();
10650 jresult = result;
10651 return jresult;
10652 }
10653
10654
10655 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_HasTextures(void * jarg1) {
10656 unsigned int jresult ;
10657 aiScene *arg1 = (aiScene *) 0 ;
10658 bool result;
10659
10660 arg1 = (aiScene *)jarg1;
10661 result = (bool)((aiScene const *)arg1)->HasTextures();
10662 jresult = result;
10663 return jresult;
10664 }
10665
10666
10667 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_HasCameras(void * jarg1) {
10668 unsigned int jresult ;
10669 aiScene *arg1 = (aiScene *) 0 ;
10670 bool result;
10671
10672 arg1 = (aiScene *)jarg1;
10673 result = (bool)((aiScene const *)arg1)->HasCameras();
10674 jresult = result;
10675 return jresult;
10676 }
10677
10678
10679 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiScene_HasAnimations(void * jarg1) {
10680 unsigned int jresult ;
10681 aiScene *arg1 = (aiScene *) 0 ;
10682 bool result;
10683
10684 arg1 = (aiScene *)jarg1;
10685 result = (bool)((aiScene const *)arg1)->HasAnimations();
10686 jresult = result;
10687 return jresult;
10688 }
10689
10690
10691 SWIGEXPORT void * SWIGSTDCALL CSharp_aiScene_GetmAnimations(void * jarg1) {
10692 void * jresult ;
10693 aiScene *arg1 = (aiScene *) 0 ;
10694 std::vector< aiAnimation * > *result = 0 ;
10695
10696 arg1 = (aiScene *)jarg1;
10697 result = (std::vector< aiAnimation * > *)aiScene_GetmAnimations(arg1);
10698 jresult = (void *)result;
10699 return jresult;
10700 }
10701
10702
10703 SWIGEXPORT void * SWIGSTDCALL CSharp_aiScene_GetmCameras(void * jarg1) {
10704 void * jresult ;
10705 aiScene *arg1 = (aiScene *) 0 ;
10706 std::vector< aiCamera * > *result = 0 ;
10707
10708 arg1 = (aiScene *)jarg1;
10709 result = (std::vector< aiCamera * > *)aiScene_GetmCameras(arg1);
10710 jresult = (void *)result;
10711 return jresult;
10712 }
10713
10714
10715 SWIGEXPORT void * SWIGSTDCALL CSharp_aiScene_GetmLights(void * jarg1) {
10716 void * jresult ;
10717 aiScene *arg1 = (aiScene *) 0 ;
10718 std::vector< aiLight * > *result = 0 ;
10719
10720 arg1 = (aiScene *)jarg1;
10721 result = (std::vector< aiLight * > *)aiScene_GetmLights(arg1);
10722 jresult = (void *)result;
10723 return jresult;
10724 }
10725
10726
10727 SWIGEXPORT void * SWIGSTDCALL CSharp_aiScene_GetmMaterials(void * jarg1) {
10728 void * jresult ;
10729 aiScene *arg1 = (aiScene *) 0 ;
10730 std::vector< aiMaterial * > *result = 0 ;
10731
10732 arg1 = (aiScene *)jarg1;
10733 result = (std::vector< aiMaterial * > *)aiScene_GetmMaterials(arg1);
10734 jresult = (void *)result;
10735 return jresult;
10736 }
10737
10738
10739 SWIGEXPORT void * SWIGSTDCALL CSharp_aiScene_GetmMeshes(void * jarg1) {
10740 void * jresult ;
10741 aiScene *arg1 = (aiScene *) 0 ;
10742 std::vector< aiMesh * > *result = 0 ;
10743
10744 arg1 = (aiScene *)jarg1;
10745 result = (std::vector< aiMesh * > *)aiScene_GetmMeshes(arg1);
10746 jresult = (void *)result;
10747 return jresult;
10748 }
10749
10750
10751 SWIGEXPORT void * SWIGSTDCALL CSharp_aiScene_GetmTextures(void * jarg1) {
10752 void * jresult ;
10753 aiScene *arg1 = (aiScene *) 0 ;
10754 std::vector< aiTexture * > *result = 0 ;
10755
10756 arg1 = (aiScene *)jarg1;
10757 result = (std::vector< aiTexture * > *)aiScene_GetmTextures(arg1);
10758 jresult = (void *)result;
10759 return jresult;
10760 }
10761
10762
10763 SWIGEXPORT void SWIGSTDCALL CSharp_aiTexel_b_set(void * jarg1, unsigned char jarg2) {
10764 aiTexel *arg1 = (aiTexel *) 0 ;
10765 unsigned char arg2 ;
10766
10767 arg1 = (aiTexel *)jarg1;
10768 arg2 = (unsigned char)jarg2;
10769 if (arg1) (arg1)->b = arg2;
10770 }
10771
10772
10773 SWIGEXPORT unsigned char SWIGSTDCALL CSharp_aiTexel_b_get(void * jarg1) {
10774 unsigned char jresult ;
10775 aiTexel *arg1 = (aiTexel *) 0 ;
10776 unsigned char result;
10777
10778 arg1 = (aiTexel *)jarg1;
10779 result = (unsigned char) ((arg1)->b);
10780 jresult = result;
10781 return jresult;
10782 }
10783
10784
10785 SWIGEXPORT void SWIGSTDCALL CSharp_aiTexel_g_set(void * jarg1, unsigned char jarg2) {
10786 aiTexel *arg1 = (aiTexel *) 0 ;
10787 unsigned char arg2 ;
10788
10789 arg1 = (aiTexel *)jarg1;
10790 arg2 = (unsigned char)jarg2;
10791 if (arg1) (arg1)->g = arg2;
10792 }
10793
10794
10795 SWIGEXPORT unsigned char SWIGSTDCALL CSharp_aiTexel_g_get(void * jarg1) {
10796 unsigned char jresult ;
10797 aiTexel *arg1 = (aiTexel *) 0 ;
10798 unsigned char result;
10799
10800 arg1 = (aiTexel *)jarg1;
10801 result = (unsigned char) ((arg1)->g);
10802 jresult = result;
10803 return jresult;
10804 }
10805
10806
10807 SWIGEXPORT void SWIGSTDCALL CSharp_aiTexel_r_set(void * jarg1, unsigned char jarg2) {
10808 aiTexel *arg1 = (aiTexel *) 0 ;
10809 unsigned char arg2 ;
10810
10811 arg1 = (aiTexel *)jarg1;
10812 arg2 = (unsigned char)jarg2;
10813 if (arg1) (arg1)->r = arg2;
10814 }
10815
10816
10817 SWIGEXPORT unsigned char SWIGSTDCALL CSharp_aiTexel_r_get(void * jarg1) {
10818 unsigned char jresult ;
10819 aiTexel *arg1 = (aiTexel *) 0 ;
10820 unsigned char result;
10821
10822 arg1 = (aiTexel *)jarg1;
10823 result = (unsigned char) ((arg1)->r);
10824 jresult = result;
10825 return jresult;
10826 }
10827
10828
10829 SWIGEXPORT void SWIGSTDCALL CSharp_aiTexel_a_set(void * jarg1, unsigned char jarg2) {
10830 aiTexel *arg1 = (aiTexel *) 0 ;
10831 unsigned char arg2 ;
10832
10833 arg1 = (aiTexel *)jarg1;
10834 arg2 = (unsigned char)jarg2;
10835 if (arg1) (arg1)->a = arg2;
10836 }
10837
10838
10839 SWIGEXPORT unsigned char SWIGSTDCALL CSharp_aiTexel_a_get(void * jarg1) {
10840 unsigned char jresult ;
10841 aiTexel *arg1 = (aiTexel *) 0 ;
10842 unsigned char result;
10843
10844 arg1 = (aiTexel *)jarg1;
10845 result = (unsigned char) ((arg1)->a);
10846 jresult = result;
10847 return jresult;
10848 }
10849
10850
10851 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiTexel___equal__(void * jarg1, void * jarg2) {
10852 unsigned int jresult ;
10853 aiTexel *arg1 = (aiTexel *) 0 ;
10854 aiTexel *arg2 = 0 ;
10855 bool result;
10856
10857 arg1 = (aiTexel *)jarg1;
10858 arg2 = (aiTexel *)jarg2;
10859 if (!arg2) {
10860 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiTexel const & type is null", 0);
10861 return 0;
10862 }
10863 result = (bool)((aiTexel const *)arg1)->operator ==((aiTexel const &)*arg2);
10864 jresult = result;
10865 return jresult;
10866 }
10867
10868
10869 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiTexel___nequal__(void * jarg1, void * jarg2) {
10870 unsigned int jresult ;
10871 aiTexel *arg1 = (aiTexel *) 0 ;
10872 aiTexel *arg2 = 0 ;
10873 bool result;
10874
10875 arg1 = (aiTexel *)jarg1;
10876 arg2 = (aiTexel *)jarg2;
10877 if (!arg2) {
10878 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiTexel const & type is null", 0);
10879 return 0;
10880 }
10881 result = (bool)((aiTexel const *)arg1)->operator !=((aiTexel const &)*arg2);
10882 jresult = result;
10883 return jresult;
10884 }
10885
10886
10887 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiTexel() {
10888 void * jresult ;
10889 aiTexel *result = 0 ;
10890
10891 result = (aiTexel *)new aiTexel();
10892 jresult = (void *)result;
10893 return jresult;
10894 }
10895
10896
10897 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiTexel(void * jarg1) {
10898 aiTexel *arg1 = (aiTexel *) 0 ;
10899
10900 arg1 = (aiTexel *)jarg1;
10901 delete arg1;
10902 }
10903
10904
10905 SWIGEXPORT void SWIGSTDCALL CSharp_aiTexture_mWidth_set(void * jarg1, unsigned int jarg2) {
10906 aiTexture *arg1 = (aiTexture *) 0 ;
10907 unsigned int arg2 ;
10908
10909 arg1 = (aiTexture *)jarg1;
10910 arg2 = (unsigned int)jarg2;
10911 if (arg1) (arg1)->mWidth = arg2;
10912 }
10913
10914
10915 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiTexture_mWidth_get(void * jarg1) {
10916 unsigned int jresult ;
10917 aiTexture *arg1 = (aiTexture *) 0 ;
10918 unsigned int result;
10919
10920 arg1 = (aiTexture *)jarg1;
10921 result = (unsigned int) ((arg1)->mWidth);
10922 jresult = result;
10923 return jresult;
10924 }
10925
10926
10927 SWIGEXPORT void SWIGSTDCALL CSharp_aiTexture_mHeight_set(void * jarg1, unsigned int jarg2) {
10928 aiTexture *arg1 = (aiTexture *) 0 ;
10929 unsigned int arg2 ;
10930
10931 arg1 = (aiTexture *)jarg1;
10932 arg2 = (unsigned int)jarg2;
10933 if (arg1) (arg1)->mHeight = arg2;
10934 }
10935
10936
10937 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiTexture_mHeight_get(void * jarg1) {
10938 unsigned int jresult ;
10939 aiTexture *arg1 = (aiTexture *) 0 ;
10940 unsigned int result;
10941
10942 arg1 = (aiTexture *)jarg1;
10943 result = (unsigned int) ((arg1)->mHeight);
10944 jresult = result;
10945 return jresult;
10946 }
10947
10948
10949 SWIGEXPORT void SWIGSTDCALL CSharp_aiTexture_achFormatHint_set(void * jarg1, char * jarg2) {
10950 aiTexture *arg1 = (aiTexture *) 0 ;
10951 char *arg2 ;
10952
10953 arg1 = (aiTexture *)jarg1;
10954 arg2 = (char *)jarg2;
10955 {
10956 if(arg2) {
10957 strncpy((char*)arg1->achFormatHint, (const char *)arg2, 4-1);
10958 arg1->achFormatHint[4-1] = 0;
10959 } else {
10960 arg1->achFormatHint[0] = 0;
10961 }
10962 }
10963 }
10964
10965
10966 SWIGEXPORT char * SWIGSTDCALL CSharp_aiTexture_achFormatHint_get(void * jarg1) {
10967 char * jresult ;
10968 aiTexture *arg1 = (aiTexture *) 0 ;
10969 char *result = 0 ;
10970
10971 arg1 = (aiTexture *)jarg1;
10972 result = (char *)(char *) ((arg1)->achFormatHint);
10973 jresult = SWIG_csharp_string_callback((const char *)result);
10974 return jresult;
10975 }
10976
10977
10978 SWIGEXPORT void SWIGSTDCALL CSharp_aiTexture_pcData_set(void * jarg1, void * jarg2) {
10979 aiTexture *arg1 = (aiTexture *) 0 ;
10980 aiTexel *arg2 = (aiTexel *) 0 ;
10981
10982 arg1 = (aiTexture *)jarg1;
10983 arg2 = (aiTexel *)jarg2;
10984 if (arg1) (arg1)->pcData = arg2;
10985 }
10986
10987
10988 SWIGEXPORT void * SWIGSTDCALL CSharp_aiTexture_pcData_get(void * jarg1) {
10989 void * jresult ;
10990 aiTexture *arg1 = (aiTexture *) 0 ;
10991 aiTexel *result = 0 ;
10992
10993 arg1 = (aiTexture *)jarg1;
10994 result = (aiTexel *) ((arg1)->pcData);
10995 jresult = (void *)result;
10996 return jresult;
10997 }
10998
10999
11000 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiTexture_CheckFormat(void * jarg1, char * jarg2) {
11001 unsigned int jresult ;
11002 aiTexture *arg1 = (aiTexture *) 0 ;
11003 char *arg2 = (char *) 0 ;
11004 bool result;
11005
11006 arg1 = (aiTexture *)jarg1;
11007 arg2 = (char *)jarg2;
11008 result = (bool)((aiTexture const *)arg1)->CheckFormat((char const *)arg2);
11009 jresult = result;
11010 return jresult;
11011 }
11012
11013
11014 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiTexture() {
11015 void * jresult ;
11016 aiTexture *result = 0 ;
11017
11018 result = (aiTexture *)new aiTexture();
11019 jresult = (void *)result;
11020 return jresult;
11021 }
11022
11023
11024 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiTexture(void * jarg1) {
11025 aiTexture *arg1 = (aiTexture *) 0 ;
11026
11027 arg1 = (aiTexture *)jarg1;
11028 delete arg1;
11029 }
11030
11031
11032 SWIGEXPORT int SWIGSTDCALL CSharp_AI_PROPERTY_WAS_NOT_EXISTING_get() {
11033 int jresult ;
11034 int result;
11035
11036 result = (int)(0xffffffff);
11037 jresult = result;
11038 return jresult;
11039 }
11040
11041
11042 SWIGEXPORT void * SWIGSTDCALL CSharp_aiImportFileFromMemory(char * jarg1, unsigned int jarg2, unsigned int jarg3, char * jarg4) {
11043 void * jresult ;
11044 char *arg1 = (char *) 0 ;
11045 unsigned int arg2 ;
11046 unsigned int arg3 ;
11047 char *arg4 = (char *) 0 ;
11048 aiScene *result = 0 ;
11049
11050 arg1 = (char *)jarg1;
11051 arg2 = (unsigned int)jarg2;
11052 arg3 = (unsigned int)jarg3;
11053 arg4 = (char *)jarg4;
11054 result = (aiScene *)aiImportFileFromMemory((char const *)arg1,arg2,arg3,(char const *)arg4);
11055 jresult = (void *)result;
11056 return jresult;
11057 }
11058
11059
11060 SWIGEXPORT void * SWIGSTDCALL CSharp_new_Importer__SWIG_0() {
11061 void * jresult ;
11062 Assimp::Importer *result = 0 ;
11063
11064 result = (Assimp::Importer *)new Assimp::Importer();
11065 jresult = (void *)result;
11066 return jresult;
11067 }
11068
11069
11070 SWIGEXPORT void * SWIGSTDCALL CSharp_new_Importer__SWIG_1(void * jarg1) {
11071 void * jresult ;
11072 Assimp::Importer *arg1 = 0 ;
11073 Assimp::Importer *result = 0 ;
11074
11075 arg1 = (Assimp::Importer *)jarg1;
11076 if (!arg1) {
11077 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "Assimp::Importer const & type is null", 0);
11078 return 0;
11079 }
11080 result = (Assimp::Importer *)new Assimp::Importer((Assimp::Importer const &)*arg1);
11081 jresult = (void *)result;
11082 return jresult;
11083 }
11084
11085
11086 SWIGEXPORT void SWIGSTDCALL CSharp_delete_Importer(void * jarg1) {
11087 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11088
11089 arg1 = (Assimp::Importer *)jarg1;
11090 delete arg1;
11091 }
11092
11093
11094 SWIGEXPORT int SWIGSTDCALL CSharp_Importer_GetPropertyInteger__SWIG_0(void * jarg1, char * jarg2, int jarg3) {
11095 int jresult ;
11096 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11097 char *arg2 = (char *) 0 ;
11098 int arg3 ;
11099 int result;
11100
11101 arg1 = (Assimp::Importer *)jarg1;
11102 arg2 = (char *)jarg2;
11103 arg3 = (int)jarg3;
11104 result = (int)((Assimp::Importer const *)arg1)->GetPropertyInteger((char const *)arg2,arg3);
11105 jresult = result;
11106 return jresult;
11107 }
11108
11109
11110 SWIGEXPORT int SWIGSTDCALL CSharp_Importer_GetPropertyInteger__SWIG_1(void * jarg1, char * jarg2) {
11111 int jresult ;
11112 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11113 char *arg2 = (char *) 0 ;
11114 int result;
11115
11116 arg1 = (Assimp::Importer *)jarg1;
11117 arg2 = (char *)jarg2;
11118 result = (int)((Assimp::Importer const *)arg1)->GetPropertyInteger((char const *)arg2);
11119 jresult = result;
11120 return jresult;
11121 }
11122
11123
11124 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Importer_GetPropertyBool__SWIG_0(void * jarg1, char * jarg2, unsigned int jarg3) {
11125 unsigned int jresult ;
11126 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11127 char *arg2 = (char *) 0 ;
11128 bool arg3 ;
11129 bool result;
11130
11131 arg1 = (Assimp::Importer *)jarg1;
11132 arg2 = (char *)jarg2;
11133 arg3 = jarg3 ? true : false;
11134 result = (bool)((Assimp::Importer const *)arg1)->GetPropertyBool((char const *)arg2,arg3);
11135 jresult = result;
11136 return jresult;
11137 }
11138
11139
11140 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Importer_GetPropertyBool__SWIG_1(void * jarg1, char * jarg2) {
11141 unsigned int jresult ;
11142 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11143 char *arg2 = (char *) 0 ;
11144 bool result;
11145
11146 arg1 = (Assimp::Importer *)jarg1;
11147 arg2 = (char *)jarg2;
11148 result = (bool)((Assimp::Importer const *)arg1)->GetPropertyBool((char const *)arg2);
11149 jresult = result;
11150 return jresult;
11151 }
11152
11153
11154 SWIGEXPORT float SWIGSTDCALL CSharp_Importer_GetPropertyFloat__SWIG_0(void * jarg1, char * jarg2, float jarg3) {
11155 float jresult ;
11156 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11157 char *arg2 = (char *) 0 ;
11158 float arg3 ;
11159 float result;
11160
11161 arg1 = (Assimp::Importer *)jarg1;
11162 arg2 = (char *)jarg2;
11163 arg3 = (float)jarg3;
11164 result = (float)((Assimp::Importer const *)arg1)->GetPropertyFloat((char const *)arg2,arg3);
11165 jresult = result;
11166 return jresult;
11167 }
11168
11169
11170 SWIGEXPORT float SWIGSTDCALL CSharp_Importer_GetPropertyFloat__SWIG_1(void * jarg1, char * jarg2) {
11171 float jresult ;
11172 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11173 char *arg2 = (char *) 0 ;
11174 float result;
11175
11176 arg1 = (Assimp::Importer *)jarg1;
11177 arg2 = (char *)jarg2;
11178 result = (float)((Assimp::Importer const *)arg1)->GetPropertyFloat((char const *)arg2);
11179 jresult = result;
11180 return jresult;
11181 }
11182
11183
11184 SWIGEXPORT char * SWIGSTDCALL CSharp_Importer_GetPropertyString__SWIG_0(void * jarg1, char * jarg2, char * jarg3) {
11185 char * jresult ;
11186 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11187 char *arg2 = (char *) 0 ;
11188 std::string *arg3 = 0 ;
11189 std::string *result = 0 ;
11190
11191 arg1 = (Assimp::Importer *)jarg1;
11192 arg2 = (char *)jarg2;
11193 if (!jarg3) {
11194 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "null string", 0);
11195 return 0;
11196 }
11197 std::string arg3_str(jarg3);
11198 arg3 = &arg3_str;
11199 result = (std::string *) &((Assimp::Importer const *)arg1)->GetPropertyString((char const *)arg2,(std::string const &)*arg3);
11200 jresult = SWIG_csharp_string_callback(result->c_str());
11201 return jresult;
11202 }
11203
11204
11205 SWIGEXPORT char * SWIGSTDCALL CSharp_Importer_GetPropertyString__SWIG_1(void * jarg1, char * jarg2) {
11206 char * jresult ;
11207 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11208 char *arg2 = (char *) 0 ;
11209 std::string *result = 0 ;
11210
11211 arg1 = (Assimp::Importer *)jarg1;
11212 arg2 = (char *)jarg2;
11213 result = (std::string *) &((Assimp::Importer const *)arg1)->GetPropertyString((char const *)arg2);
11214 jresult = SWIG_csharp_string_callback(result->c_str());
11215 return jresult;
11216 }
11217
11218
11219 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Importer_IsDefaultIOHandler(void * jarg1) {
11220 unsigned int jresult ;
11221 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11222 bool result;
11223
11224 arg1 = (Assimp::Importer *)jarg1;
11225 result = (bool)((Assimp::Importer const *)arg1)->IsDefaultIOHandler();
11226 jresult = result;
11227 return jresult;
11228 }
11229
11230
11231 SWIGEXPORT void SWIGSTDCALL CSharp_Importer_SetProgressHandler(void * jarg1, void * jarg2) {
11232 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11233 Assimp::ProgressHandler *arg2 = (Assimp::ProgressHandler *) 0 ;
11234
11235 arg1 = (Assimp::Importer *)jarg1;
11236 arg2 = (Assimp::ProgressHandler *)jarg2;
11237 (arg1)->SetProgressHandler(arg2);
11238 }
11239
11240
11241 SWIGEXPORT void * SWIGSTDCALL CSharp_Importer_GetProgressHandler(void * jarg1) {
11242 void * jresult ;
11243 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11244 Assimp::ProgressHandler *result = 0 ;
11245
11246 arg1 = (Assimp::Importer *)jarg1;
11247 result = (Assimp::ProgressHandler *)((Assimp::Importer const *)arg1)->GetProgressHandler();
11248 jresult = (void *)result;
11249 return jresult;
11250 }
11251
11252
11253 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Importer_IsDefaultProgressHandler(void * jarg1) {
11254 unsigned int jresult ;
11255 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11256 bool result;
11257
11258 arg1 = (Assimp::Importer *)jarg1;
11259 result = (bool)((Assimp::Importer const *)arg1)->IsDefaultProgressHandler();
11260 jresult = result;
11261 return jresult;
11262 }
11263
11264
11265 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Importer_ValidateFlags(void * jarg1, unsigned int jarg2) {
11266 unsigned int jresult ;
11267 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11268 unsigned int arg2 ;
11269 bool result;
11270
11271 arg1 = (Assimp::Importer *)jarg1;
11272 arg2 = (unsigned int)jarg2;
11273 result = (bool)((Assimp::Importer const *)arg1)->ValidateFlags(arg2);
11274 jresult = result;
11275 return jresult;
11276 }
11277
11278
11279 SWIGEXPORT void * SWIGSTDCALL CSharp_Importer_ReadFile__SWIG_0(void * jarg1, char * jarg2, unsigned int jarg3) {
11280 void * jresult ;
11281 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11282 char *arg2 = (char *) 0 ;
11283 unsigned int arg3 ;
11284 aiScene *result = 0 ;
11285
11286 arg1 = (Assimp::Importer *)jarg1;
11287 arg2 = (char *)jarg2;
11288 arg3 = (unsigned int)jarg3;
11289 result = (aiScene *)(arg1)->ReadFile((char const *)arg2,arg3);
11290 jresult = (void *)result;
11291 return jresult;
11292 }
11293
11294
11295 SWIGEXPORT void SWIGSTDCALL CSharp_Importer_FreeScene(void * jarg1) {
11296 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11297
11298 arg1 = (Assimp::Importer *)jarg1;
11299 (arg1)->FreeScene();
11300 }
11301
11302
11303 SWIGEXPORT char * SWIGSTDCALL CSharp_Importer_GetErrorString(void * jarg1) {
11304 char * jresult ;
11305 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11306 char *result = 0 ;
11307
11308 arg1 = (Assimp::Importer *)jarg1;
11309 result = (char *)((Assimp::Importer const *)arg1)->GetErrorString();
11310 jresult = SWIG_csharp_string_callback((const char *)result);
11311 return jresult;
11312 }
11313
11314
11315 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Importer_IsExtensionSupported__SWIG_0(void * jarg1, char * jarg2) {
11316 unsigned int jresult ;
11317 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11318 char *arg2 = (char *) 0 ;
11319 bool result;
11320
11321 arg1 = (Assimp::Importer *)jarg1;
11322 arg2 = (char *)jarg2;
11323 result = (bool)((Assimp::Importer const *)arg1)->IsExtensionSupported((char const *)arg2);
11324 jresult = result;
11325 return jresult;
11326 }
11327
11328
11329 SWIGEXPORT void SWIGSTDCALL CSharp_Importer_GetExtensionList__SWIG_0(void * jarg1, void * jarg2) {
11330 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11331 aiString *arg2 = 0 ;
11332
11333 arg1 = (Assimp::Importer *)jarg1;
11334 arg2 = (aiString *)jarg2;
11335 if (!arg2) {
11336 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiString & type is null", 0);
11337 return ;
11338 }
11339 ((Assimp::Importer const *)arg1)->GetExtensionList(*arg2);
11340 }
11341
11342
11343 SWIGEXPORT void SWIGSTDCALL CSharp_Importer_GetExtensionList__SWIG_1(void * jarg1, void * jarg2) {
11344 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11345 std::string *arg2 = 0 ;
11346
11347 arg1 = (Assimp::Importer *)jarg1;
11348 arg2 = (std::string *)jarg2;
11349 if (!arg2) {
11350 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::string & type is null", 0);
11351 return ;
11352 }
11353 ((Assimp::Importer const *)arg1)->GetExtensionList(*arg2);
11354 }
11355
11356
11357 SWIGEXPORT void * SWIGSTDCALL CSharp_Importer_GetScene(void * jarg1) {
11358 void * jresult ;
11359 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11360 aiScene *result = 0 ;
11361
11362 arg1 = (Assimp::Importer *)jarg1;
11363 result = (aiScene *)((Assimp::Importer const *)arg1)->GetScene();
11364 jresult = (void *)result;
11365 return jresult;
11366 }
11367
11368
11369 SWIGEXPORT void * SWIGSTDCALL CSharp_Importer_GetOrphanedScene(void * jarg1) {
11370 void * jresult ;
11371 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11372 aiScene *result = 0 ;
11373
11374 arg1 = (Assimp::Importer *)jarg1;
11375 result = (aiScene *)(arg1)->GetOrphanedScene();
11376 jresult = (void *)result;
11377 return jresult;
11378 }
11379
11380
11381 SWIGEXPORT void SWIGSTDCALL CSharp_Importer_GetMemoryRequirements(void * jarg1, void * jarg2) {
11382 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11383 aiMemoryInfo *arg2 = 0 ;
11384
11385 arg1 = (Assimp::Importer *)jarg1;
11386 arg2 = (aiMemoryInfo *)jarg2;
11387 if (!arg2) {
11388 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "aiMemoryInfo & type is null", 0);
11389 return ;
11390 }
11391 ((Assimp::Importer const *)arg1)->GetMemoryRequirements(*arg2);
11392 }
11393
11394
11395 SWIGEXPORT void SWIGSTDCALL CSharp_Importer_SetExtraVerbose(void * jarg1, unsigned int jarg2) {
11396 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11397 bool arg2 ;
11398
11399 arg1 = (Assimp::Importer *)jarg1;
11400 arg2 = jarg2 ? true : false;
11401 (arg1)->SetExtraVerbose(arg2);
11402 }
11403
11404
11405 SWIGEXPORT char * SWIGSTDCALL CSharp_Importer_GetExtensionList__SWIG_2(void * jarg1) {
11406 char * jresult ;
11407 Assimp::Importer *arg1 = (Assimp::Importer *) 0 ;
11408 std::string result;
11409
11410 arg1 = (Assimp::Importer *)jarg1;
11411 result = Assimp_Importer_GetExtensionList__SWIG_2(arg1);
11412 jresult = SWIG_csharp_string_callback((&result)->c_str());
11413 return jresult;
11414 }
11415
11416
11417 SWIGEXPORT void SWIGSTDCALL CSharp_delete_ProgressHandler(void * jarg1) {
11418 Assimp::ProgressHandler *arg1 = (Assimp::ProgressHandler *) 0 ;
11419
11420 arg1 = (Assimp::ProgressHandler *)jarg1;
11421 delete arg1;
11422 }
11423
11424
11425 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_ProgressHandler_Update__SWIG_0(void * jarg1, float jarg2) {
11426 unsigned int jresult ;
11427 Assimp::ProgressHandler *arg1 = (Assimp::ProgressHandler *) 0 ;
11428 float arg2 ;
11429 bool result;
11430
11431 arg1 = (Assimp::ProgressHandler *)jarg1;
11432 arg2 = (float)jarg2;
11433 result = (bool)(arg1)->Update(arg2);
11434 jresult = result;
11435 return jresult;
11436 }
11437
11438
11439 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_ProgressHandler_Update__SWIG_1(void * jarg1) {
11440 unsigned int jresult ;
11441 Assimp::ProgressHandler *arg1 = (Assimp::ProgressHandler *) 0 ;
11442 bool result;
11443
11444 arg1 = (Assimp::ProgressHandler *)jarg1;
11445 result = (bool)(arg1)->Update();
11446 jresult = result;
11447 return jresult;
1144811800 }
1144911801
1145011802
1407414426
1407514427 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVectorVector_Add(void * jarg1, void * jarg2) {
1407614428 std::vector< std::vector< aiColor4D * > > *arg1 = (std::vector< std::vector< aiColor4D * > > *) 0 ;
14077 std::vector< aiColor4D * > *arg2 = 0 ;
14429 std::vector< aiColor4t< float > * > *arg2 = 0 ;
1407814430
1407914431 arg1 = (std::vector< std::vector< aiColor4D * > > *)jarg1;
14080 arg2 = (std::vector< aiColor4D * > *)jarg2;
14432 arg2 = (std::vector< aiColor4t< float > * > *)jarg2;
1408114433 if (!arg2) {
14082 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiColor4D * > const & type is null", 0);
14434 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiColor4t< float > * > const & type is null", 0);
1408314435 return ;
1408414436 }
14085 (arg1)->push_back((std::vector< aiColor4D * > const &)*arg2);
14437 (arg1)->push_back((std::vector< aiColor4t< float > * > const &)*arg2);
1408614438 }
1408714439
1408814440
1408914441 SWIGEXPORT unsigned long SWIGSTDCALL CSharp_aiColor4DVectorVector_size(void * jarg1) {
1409014442 unsigned long jresult ;
1409114443 std::vector< std::vector< aiColor4D * > > *arg1 = (std::vector< std::vector< aiColor4D * > > *) 0 ;
14092 std::vector< std::vector< aiColor4D * > >::size_type result;
14444 std::vector< std::vector< aiColor4t< float > * > >::size_type result;
1409314445
1409414446 arg1 = (std::vector< std::vector< aiColor4D * > > *)jarg1;
1409514447 result = ((std::vector< std::vector< aiColor4D * > > const *)arg1)->size();
1410114453 SWIGEXPORT unsigned long SWIGSTDCALL CSharp_aiColor4DVectorVector_capacity(void * jarg1) {
1410214454 unsigned long jresult ;
1410314455 std::vector< std::vector< aiColor4D * > > *arg1 = (std::vector< std::vector< aiColor4D * > > *) 0 ;
14104 std::vector< std::vector< aiColor4D * > >::size_type result;
14456 std::vector< std::vector< aiColor4t< float > * > >::size_type result;
1410514457
1410614458 arg1 = (std::vector< std::vector< aiColor4D * > > *)jarg1;
1410714459 result = ((std::vector< std::vector< aiColor4D * > > const *)arg1)->capacity();
1411214464
1411314465 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVectorVector_reserve(void * jarg1, unsigned long jarg2) {
1411414466 std::vector< std::vector< aiColor4D * > > *arg1 = (std::vector< std::vector< aiColor4D * > > *) 0 ;
14115 std::vector< std::vector< aiColor4D * > >::size_type arg2 ;
14467 std::vector< std::vector< aiColor4t< float > * > >::size_type arg2 ;
1411614468
1411714469 arg1 = (std::vector< std::vector< aiColor4D * > > *)jarg1;
14118 arg2 = (std::vector< std::vector< aiColor4D * > >::size_type)jarg2;
14470 arg2 = (std::vector< std::vector< aiColor4t< float > * > >::size_type)jarg2;
1411914471 (arg1)->reserve(arg2);
1412014472 }
1412114473
1416914521 void * jresult ;
1417014522 std::vector< std::vector< aiColor4D * > > *arg1 = (std::vector< std::vector< aiColor4D * > > *) 0 ;
1417114523 int arg2 ;
14172 std::vector< aiColor4D * > result;
14524 std::vector< aiColor4t< float > * > result;
1417314525
1417414526 arg1 = (std::vector< std::vector< aiColor4D * > > *)jarg1;
1417514527 arg2 = (int)jarg2;
1418114533 return 0;
1418214534 }
1418314535
14184 jresult = new std::vector< aiColor4D * >((const std::vector< aiColor4D * > &)result);
14536 jresult = new std::vector< aiColor4t< float > * >((const std::vector< aiColor4t< float > * > &)result);
1418514537 return jresult;
1418614538 }
1418714539
1419014542 void * jresult ;
1419114543 std::vector< std::vector< aiColor4D * > > *arg1 = (std::vector< std::vector< aiColor4D * > > *) 0 ;
1419214544 int arg2 ;
14193 std::vector< aiColor4D * > *result = 0 ;
14545 std::vector< aiColor4t< float > * > *result = 0 ;
1419414546
1419514547 arg1 = (std::vector< std::vector< aiColor4D * > > *)jarg1;
1419614548 arg2 = (int)jarg2;
1419714549 try {
14198 result = (std::vector< aiColor4D * > *) &std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__getitem(arg1,arg2);
14550 result = (std::vector< aiColor4t< float > * > *) &std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__getitem(arg1,arg2);
1419914551 }
1420014552 catch(std::out_of_range &_e) {
1420114553 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
1421014562 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVectorVector_setitem(void * jarg1, int jarg2, void * jarg3) {
1421114563 std::vector< std::vector< aiColor4D * > > *arg1 = (std::vector< std::vector< aiColor4D * > > *) 0 ;
1421214564 int arg2 ;
14213 std::vector< aiColor4D * > *arg3 = 0 ;
14565 std::vector< aiColor4t< float > * > *arg3 = 0 ;
1421414566
1421514567 arg1 = (std::vector< std::vector< aiColor4D * > > *)jarg1;
1421614568 arg2 = (int)jarg2;
14217 arg3 = (std::vector< aiColor4D * > *)jarg3;
14569 arg3 = (std::vector< aiColor4t< float > * > *)jarg3;
1421814570 if (!arg3) {
14219 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiColor4D * > const & type is null", 0);
14571 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiColor4t< float > * > const & type is null", 0);
1422014572 return ;
1422114573 }
1422214574 try {
14223 std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__setitem(arg1,arg2,(std::vector< aiColor4D * > const &)*arg3);
14575 std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__setitem(arg1,arg2,(std::vector< aiColor4t< float > * > const &)*arg3);
1422414576 }
1422514577 catch(std::out_of_range &_e) {
1422614578 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
1423214584
1423314585 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVectorVector_AddRange(void * jarg1, void * jarg2) {
1423414586 std::vector< std::vector< aiColor4D * > > *arg1 = (std::vector< std::vector< aiColor4D * > > *) 0 ;
14235 std::vector< std::vector< aiColor4D * > > *arg2 = 0 ;
14587 std::vector< std::vector< aiColor4t< float > * > > *arg2 = 0 ;
1423614588
1423714589 arg1 = (std::vector< std::vector< aiColor4D * > > *)jarg1;
14238 arg2 = (std::vector< std::vector< aiColor4D * > > *)jarg2;
14590 arg2 = (std::vector< std::vector< aiColor4t< float > * > > *)jarg2;
1423914591 if (!arg2) {
14240 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< std::vector< aiColor4D * > > const & type is null", 0);
14592 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< std::vector< aiColor4t< float > * > > const & type is null", 0);
1424114593 return ;
1424214594 }
14243 std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__AddRange(arg1,(std::vector< std::vector< aiColor4D * > > const &)*arg2);
14595 std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__AddRange(arg1,(std::vector< std::vector< aiColor4t< float > * > > const &)*arg2);
1424414596 }
1424514597
1424614598
1424914601 std::vector< std::vector< aiColor4D * > > *arg1 = (std::vector< std::vector< aiColor4D * > > *) 0 ;
1425014602 int arg2 ;
1425114603 int arg3 ;
14252 std::vector< std::vector< aiColor4D * > > *result = 0 ;
14604 std::vector< std::vector< aiColor4t< float > * > > *result = 0 ;
1425314605
1425414606 arg1 = (std::vector< std::vector< aiColor4D * > > *)jarg1;
1425514607 arg2 = (int)jarg2;
1425614608 arg3 = (int)jarg3;
1425714609 try {
14258 result = (std::vector< std::vector< aiColor4D * > > *)std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__GetRange(arg1,arg2,arg3);
14610 result = (std::vector< std::vector< aiColor4t< float > * > > *)std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__GetRange(arg1,arg2,arg3);
1425914611 }
1426014612 catch(std::out_of_range &_e) {
1426114613 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
1427414626 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVectorVector_Insert(void * jarg1, int jarg2, void * jarg3) {
1427514627 std::vector< std::vector< aiColor4D * > > *arg1 = (std::vector< std::vector< aiColor4D * > > *) 0 ;
1427614628 int arg2 ;
14277 std::vector< aiColor4D * > *arg3 = 0 ;
14629 std::vector< aiColor4t< float > * > *arg3 = 0 ;
1427814630
1427914631 arg1 = (std::vector< std::vector< aiColor4D * > > *)jarg1;
1428014632 arg2 = (int)jarg2;
14281 arg3 = (std::vector< aiColor4D * > *)jarg3;
14633 arg3 = (std::vector< aiColor4t< float > * > *)jarg3;
1428214634 if (!arg3) {
14283 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiColor4D * > const & type is null", 0);
14635 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiColor4t< float > * > const & type is null", 0);
1428414636 return ;
1428514637 }
1428614638 try {
14287 std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__Insert(arg1,arg2,(std::vector< aiColor4D * > const &)*arg3);
14639 std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__Insert(arg1,arg2,(std::vector< aiColor4t< float > * > const &)*arg3);
1428814640 }
1428914641 catch(std::out_of_range &_e) {
1429014642 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
1429714649 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVectorVector_InsertRange(void * jarg1, int jarg2, void * jarg3) {
1429814650 std::vector< std::vector< aiColor4D * > > *arg1 = (std::vector< std::vector< aiColor4D * > > *) 0 ;
1429914651 int arg2 ;
14300 std::vector< std::vector< aiColor4D * > > *arg3 = 0 ;
14652 std::vector< std::vector< aiColor4t< float > * > > *arg3 = 0 ;
1430114653
1430214654 arg1 = (std::vector< std::vector< aiColor4D * > > *)jarg1;
1430314655 arg2 = (int)jarg2;
14304 arg3 = (std::vector< std::vector< aiColor4D * > > *)jarg3;
14656 arg3 = (std::vector< std::vector< aiColor4t< float > * > > *)jarg3;
1430514657 if (!arg3) {
14306 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< std::vector< aiColor4D * > > const & type is null", 0);
14658 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< std::vector< aiColor4t< float > * > > const & type is null", 0);
1430714659 return ;
1430814660 }
1430914661 try {
14310 std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__InsertRange(arg1,arg2,(std::vector< std::vector< aiColor4D * > > const &)*arg3);
14662 std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__InsertRange(arg1,arg2,(std::vector< std::vector< aiColor4t< float > * > > const &)*arg3);
1431114663 }
1431214664 catch(std::out_of_range &_e) {
1431314665 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
1435914711
1436014712 SWIGEXPORT void * SWIGSTDCALL CSharp_aiColor4DVectorVector_Repeat(void * jarg1, int jarg2) {
1436114713 void * jresult ;
14714 std::vector< aiColor4t< float > * > *arg1 = 0 ;
14715 int arg2 ;
14716 std::vector< std::vector< aiColor4t< float > * > > *result = 0 ;
14717
14718 arg1 = (std::vector< aiColor4t< float > * > *)jarg1;
14719 if (!arg1) {
14720 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiColor4t< float > * > const & type is null", 0);
14721 return 0;
14722 }
14723 arg2 = (int)jarg2;
14724 try {
14725 result = (std::vector< std::vector< aiColor4t< float > * > > *)std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__Repeat((std::vector< aiColor4t< float > * > const &)*arg1,arg2);
14726 }
14727 catch(std::out_of_range &_e) {
14728 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14729 return 0;
14730 }
14731
14732 jresult = (void *)result;
14733 return jresult;
14734 }
14735
14736
14737 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVectorVector_Reverse__SWIG_0(void * jarg1) {
14738 std::vector< std::vector< aiColor4D * > > *arg1 = (std::vector< std::vector< aiColor4D * > > *) 0 ;
14739
14740 arg1 = (std::vector< std::vector< aiColor4D * > > *)jarg1;
14741 std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__Reverse__SWIG_0(arg1);
14742 }
14743
14744
14745 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVectorVector_Reverse__SWIG_1(void * jarg1, int jarg2, int jarg3) {
14746 std::vector< std::vector< aiColor4D * > > *arg1 = (std::vector< std::vector< aiColor4D * > > *) 0 ;
14747 int arg2 ;
14748 int arg3 ;
14749
14750 arg1 = (std::vector< std::vector< aiColor4D * > > *)jarg1;
14751 arg2 = (int)jarg2;
14752 arg3 = (int)jarg3;
14753 try {
14754 std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__Reverse__SWIG_1(arg1,arg2,arg3);
14755 }
14756 catch(std::out_of_range &_e) {
14757 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14758 return ;
14759 }
14760 catch(std::invalid_argument &_e) {
14761 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentException, (&_e)->what(), "");
14762 return ;
14763 }
14764
14765 }
14766
14767
14768 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVectorVector_SetRange(void * jarg1, int jarg2, void * jarg3) {
14769 std::vector< std::vector< aiColor4D * > > *arg1 = (std::vector< std::vector< aiColor4D * > > *) 0 ;
14770 int arg2 ;
14771 std::vector< std::vector< aiColor4t< float > * > > *arg3 = 0 ;
14772
14773 arg1 = (std::vector< std::vector< aiColor4D * > > *)jarg1;
14774 arg2 = (int)jarg2;
14775 arg3 = (std::vector< std::vector< aiColor4t< float > * > > *)jarg3;
14776 if (!arg3) {
14777 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< std::vector< aiColor4t< float > * > > const & type is null", 0);
14778 return ;
14779 }
14780 try {
14781 std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__SetRange(arg1,arg2,(std::vector< std::vector< aiColor4t< float > * > > const &)*arg3);
14782 }
14783 catch(std::out_of_range &_e) {
14784 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14785 return ;
14786 }
14787
14788 }
14789
14790
14791 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiColor4DVectorVector(void * jarg1) {
14792 std::vector< std::vector< aiColor4D * > > *arg1 = (std::vector< std::vector< aiColor4D * > > *) 0 ;
14793
14794 arg1 = (std::vector< std::vector< aiColor4D * > > *)jarg1;
14795 delete arg1;
14796 }
14797
14798
14799 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_Clear(void * jarg1) {
14800 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14801
14802 arg1 = (std::vector< aiColor4D * > *)jarg1;
14803 (arg1)->clear();
14804 }
14805
14806
14807 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_Add(void * jarg1, void * jarg2) {
14808 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14809 aiColor4t< float > **arg2 = 0 ;
14810 aiColor4t< float > *temp2 = 0 ;
14811
14812 arg1 = (std::vector< aiColor4D * > *)jarg1;
14813 temp2 = (aiColor4t< float > *)jarg2;
14814 arg2 = (aiColor4t< float > **)&temp2;
14815 (arg1)->push_back((aiColor4t< float > *const &)*arg2);
14816 }
14817
14818
14819 SWIGEXPORT unsigned long SWIGSTDCALL CSharp_aiColor4DVector_size(void * jarg1) {
14820 unsigned long jresult ;
14821 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14822 std::vector< aiColor4t< float > * >::size_type result;
14823
14824 arg1 = (std::vector< aiColor4D * > *)jarg1;
14825 result = ((std::vector< aiColor4D * > const *)arg1)->size();
14826 jresult = (unsigned long)result;
14827 return jresult;
14828 }
14829
14830
14831 SWIGEXPORT unsigned long SWIGSTDCALL CSharp_aiColor4DVector_capacity(void * jarg1) {
14832 unsigned long jresult ;
14833 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14834 std::vector< aiColor4t< float > * >::size_type result;
14835
14836 arg1 = (std::vector< aiColor4D * > *)jarg1;
14837 result = ((std::vector< aiColor4D * > const *)arg1)->capacity();
14838 jresult = (unsigned long)result;
14839 return jresult;
14840 }
14841
14842
14843 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_reserve(void * jarg1, unsigned long jarg2) {
14844 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14845 std::vector< aiColor4t< float > * >::size_type arg2 ;
14846
14847 arg1 = (std::vector< aiColor4D * > *)jarg1;
14848 arg2 = (std::vector< aiColor4t< float > * >::size_type)jarg2;
14849 (arg1)->reserve(arg2);
14850 }
14851
14852
14853 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiColor4DVector__SWIG_0() {
14854 void * jresult ;
14855 std::vector< aiColor4D * > *result = 0 ;
14856
14857 result = (std::vector< aiColor4D * > *)new std::vector< aiColor4D * >();
14858 jresult = (void *)result;
14859 return jresult;
14860 }
14861
14862
14863 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiColor4DVector__SWIG_1(void * jarg1) {
14864 void * jresult ;
1436214865 std::vector< aiColor4D * > *arg1 = 0 ;
14363 int arg2 ;
14364 std::vector< std::vector< aiColor4D * > > *result = 0 ;
14866 std::vector< aiColor4D * > *result = 0 ;
1436514867
1436614868 arg1 = (std::vector< aiColor4D * > *)jarg1;
1436714869 if (!arg1) {
1436814870 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiColor4D * > const & type is null", 0);
1436914871 return 0;
1437014872 }
14371 arg2 = (int)jarg2;
14372 try {
14373 result = (std::vector< std::vector< aiColor4D * > > *)std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__Repeat((std::vector< aiColor4D * > const &)*arg1,arg2);
14374 }
14375 catch(std::out_of_range &_e) {
14376 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14377 return 0;
14378 }
14379
14380 jresult = (void *)result;
14381 return jresult;
14382 }
14383
14384
14385 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVectorVector_Reverse__SWIG_0(void * jarg1) {
14386 std::vector< std::vector< aiColor4D * > > *arg1 = (std::vector< std::vector< aiColor4D * > > *) 0 ;
14387
14388 arg1 = (std::vector< std::vector< aiColor4D * > > *)jarg1;
14389 std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__Reverse__SWIG_0(arg1);
14390 }
14391
14392
14393 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVectorVector_Reverse__SWIG_1(void * jarg1, int jarg2, int jarg3) {
14394 std::vector< std::vector< aiColor4D * > > *arg1 = (std::vector< std::vector< aiColor4D * > > *) 0 ;
14873 result = (std::vector< aiColor4D * > *)new std::vector< aiColor4D * >((std::vector< aiColor4D * > const &)*arg1);
14874 jresult = (void *)result;
14875 return jresult;
14876 }
14877
14878
14879 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiColor4DVector__SWIG_2(int jarg1) {
14880 void * jresult ;
14881 int arg1 ;
14882 std::vector< aiColor4D * > *result = 0 ;
14883
14884 arg1 = (int)jarg1;
14885 try {
14886 result = (std::vector< aiColor4D * > *)new_std_vector_Sl_aiColor4D_Sm__Sg___SWIG_2(arg1);
14887 }
14888 catch(std::out_of_range &_e) {
14889 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14890 return 0;
14891 }
14892
14893 jresult = (void *)result;
14894 return jresult;
14895 }
14896
14897
14898 SWIGEXPORT void * SWIGSTDCALL CSharp_aiColor4DVector_getitemcopy(void * jarg1, int jarg2) {
14899 void * jresult ;
14900 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14901 int arg2 ;
14902 aiColor4t< float > *result = 0 ;
14903
14904 arg1 = (std::vector< aiColor4D * > *)jarg1;
14905 arg2 = (int)jarg2;
14906 try {
14907 result = (aiColor4t< float > *)std_vector_Sl_aiColor4D_Sm__Sg__getitemcopy(arg1,arg2);
14908 }
14909 catch(std::out_of_range &_e) {
14910 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14911 return 0;
14912 }
14913
14914 jresult = (void *)result;
14915 return jresult;
14916 }
14917
14918
14919 SWIGEXPORT void * SWIGSTDCALL CSharp_aiColor4DVector_getitem(void * jarg1, int jarg2) {
14920 void * jresult ;
14921 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14922 int arg2 ;
14923 aiColor4t< float > **result = 0 ;
14924
14925 arg1 = (std::vector< aiColor4D * > *)jarg1;
14926 arg2 = (int)jarg2;
14927 try {
14928 result = (aiColor4t< float > **) &std_vector_Sl_aiColor4D_Sm__Sg__getitem(arg1,arg2);
14929 }
14930 catch(std::out_of_range &_e) {
14931 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14932 return 0;
14933 }
14934
14935 jresult = (void *)*result;
14936 return jresult;
14937 }
14938
14939
14940 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_setitem(void * jarg1, int jarg2, void * jarg3) {
14941 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14942 int arg2 ;
14943 aiColor4t< float > **arg3 = 0 ;
14944 aiColor4t< float > *temp3 = 0 ;
14945
14946 arg1 = (std::vector< aiColor4D * > *)jarg1;
14947 arg2 = (int)jarg2;
14948 temp3 = (aiColor4t< float > *)jarg3;
14949 arg3 = (aiColor4t< float > **)&temp3;
14950 try {
14951 std_vector_Sl_aiColor4D_Sm__Sg__setitem(arg1,arg2,(aiColor4t< float > *const &)*arg3);
14952 }
14953 catch(std::out_of_range &_e) {
14954 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14955 return ;
14956 }
14957
14958 }
14959
14960
14961 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_AddRange(void * jarg1, void * jarg2) {
14962 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14963 std::vector< aiColor4t< float > * > *arg2 = 0 ;
14964
14965 arg1 = (std::vector< aiColor4D * > *)jarg1;
14966 arg2 = (std::vector< aiColor4t< float > * > *)jarg2;
14967 if (!arg2) {
14968 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiColor4t< float > * > const & type is null", 0);
14969 return ;
14970 }
14971 std_vector_Sl_aiColor4D_Sm__Sg__AddRange(arg1,(std::vector< aiColor4t< float > * > const &)*arg2);
14972 }
14973
14974
14975 SWIGEXPORT void * SWIGSTDCALL CSharp_aiColor4DVector_GetRange(void * jarg1, int jarg2, int jarg3) {
14976 void * jresult ;
14977 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
1439514978 int arg2 ;
1439614979 int arg3 ;
14397
14398 arg1 = (std::vector< std::vector< aiColor4D * > > *)jarg1;
14980 std::vector< aiColor4t< float > * > *result = 0 ;
14981
14982 arg1 = (std::vector< aiColor4D * > *)jarg1;
1439914983 arg2 = (int)jarg2;
1440014984 arg3 = (int)jarg3;
1440114985 try {
14402 std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__Reverse__SWIG_1(arg1,arg2,arg3);
14403 }
14404 catch(std::out_of_range &_e) {
14405 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14406 return ;
14986 result = (std::vector< aiColor4t< float > * > *)std_vector_Sl_aiColor4D_Sm__Sg__GetRange(arg1,arg2,arg3);
14987 }
14988 catch(std::out_of_range &_e) {
14989 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14990 return 0;
1440714991 }
1440814992 catch(std::invalid_argument &_e) {
1440914993 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentException, (&_e)->what(), "");
14410 return ;
14411 }
14412
14413 }
14414
14415
14416 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVectorVector_SetRange(void * jarg1, int jarg2, void * jarg3) {
14417 std::vector< std::vector< aiColor4D * > > *arg1 = (std::vector< std::vector< aiColor4D * > > *) 0 ;
14418 int arg2 ;
14419 std::vector< std::vector< aiColor4D * > > *arg3 = 0 ;
14420
14421 arg1 = (std::vector< std::vector< aiColor4D * > > *)jarg1;
14422 arg2 = (int)jarg2;
14423 arg3 = (std::vector< std::vector< aiColor4D * > > *)jarg3;
14994 return 0;
14995 }
14996
14997 jresult = (void *)result;
14998 return jresult;
14999 }
15000
15001
15002 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_Insert(void * jarg1, int jarg2, void * jarg3) {
15003 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
15004 int arg2 ;
15005 aiColor4t< float > **arg3 = 0 ;
15006 aiColor4t< float > *temp3 = 0 ;
15007
15008 arg1 = (std::vector< aiColor4D * > *)jarg1;
15009 arg2 = (int)jarg2;
15010 temp3 = (aiColor4t< float > *)jarg3;
15011 arg3 = (aiColor4t< float > **)&temp3;
15012 try {
15013 std_vector_Sl_aiColor4D_Sm__Sg__Insert(arg1,arg2,(aiColor4t< float > *const &)*arg3);
15014 }
15015 catch(std::out_of_range &_e) {
15016 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
15017 return ;
15018 }
15019
15020 }
15021
15022
15023 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_InsertRange(void * jarg1, int jarg2, void * jarg3) {
15024 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
15025 int arg2 ;
15026 std::vector< aiColor4t< float > * > *arg3 = 0 ;
15027
15028 arg1 = (std::vector< aiColor4D * > *)jarg1;
15029 arg2 = (int)jarg2;
15030 arg3 = (std::vector< aiColor4t< float > * > *)jarg3;
1442415031 if (!arg3) {
14425 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< std::vector< aiColor4D * > > const & type is null", 0);
15032 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiColor4t< float > * > const & type is null", 0);
1442615033 return ;
1442715034 }
1442815035 try {
14429 std_vector_Sl_std_vector_Sl_aiColor4D_Sm__Sg__Sg__SetRange(arg1,arg2,(std::vector< std::vector< aiColor4D * > > const &)*arg3);
14430 }
14431 catch(std::out_of_range &_e) {
14432 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14433 return ;
14434 }
14435
14436 }
14437
14438
14439 SWIGEXPORT void SWIGSTDCALL CSharp_delete_aiColor4DVectorVector(void * jarg1) {
14440 std::vector< std::vector< aiColor4D * > > *arg1 = (std::vector< std::vector< aiColor4D * > > *) 0 ;
14441
14442 arg1 = (std::vector< std::vector< aiColor4D * > > *)jarg1;
14443 delete arg1;
14444 }
14445
14446
14447 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_Clear(void * jarg1) {
15036 std_vector_Sl_aiColor4D_Sm__Sg__InsertRange(arg1,arg2,(std::vector< aiColor4t< float > * > const &)*arg3);
15037 }
15038 catch(std::out_of_range &_e) {
15039 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
15040 return ;
15041 }
15042
15043 }
15044
15045
15046 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_RemoveAt(void * jarg1, int jarg2) {
1444815047 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
15048 int arg2 ;
1444915049
1445015050 arg1 = (std::vector< aiColor4D * > *)jarg1;
14451 (arg1)->clear();
14452 }
14453
14454
14455 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_Add(void * jarg1, void * jarg2) {
15051 arg2 = (int)jarg2;
15052 try {
15053 std_vector_Sl_aiColor4D_Sm__Sg__RemoveAt(arg1,arg2);
15054 }
15055 catch(std::out_of_range &_e) {
15056 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
15057 return ;
15058 }
15059
15060 }
15061
15062
15063 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_RemoveRange(void * jarg1, int jarg2, int jarg3) {
1445615064 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14457 aiColor4D **arg2 = 0 ;
14458 aiColor4D *temp2 = 0 ;
15065 int arg2 ;
15066 int arg3 ;
1445915067
1446015068 arg1 = (std::vector< aiColor4D * > *)jarg1;
14461 temp2 = (aiColor4D *)jarg2;
14462 arg2 = (aiColor4D **)&temp2;
14463 (arg1)->push_back((aiColor4D *const &)*arg2);
14464 }
14465
14466
14467 SWIGEXPORT unsigned long SWIGSTDCALL CSharp_aiColor4DVector_size(void * jarg1) {
14468 unsigned long jresult ;
14469 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14470 std::vector< aiColor4D * >::size_type result;
14471
14472 arg1 = (std::vector< aiColor4D * > *)jarg1;
14473 result = ((std::vector< aiColor4D * > const *)arg1)->size();
14474 jresult = (unsigned long)result;
14475 return jresult;
14476 }
14477
14478
14479 SWIGEXPORT unsigned long SWIGSTDCALL CSharp_aiColor4DVector_capacity(void * jarg1) {
14480 unsigned long jresult ;
14481 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14482 std::vector< aiColor4D * >::size_type result;
14483
14484 arg1 = (std::vector< aiColor4D * > *)jarg1;
14485 result = ((std::vector< aiColor4D * > const *)arg1)->capacity();
14486 jresult = (unsigned long)result;
14487 return jresult;
14488 }
14489
14490
14491 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_reserve(void * jarg1, unsigned long jarg2) {
14492 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14493 std::vector< aiColor4D * >::size_type arg2 ;
14494
14495 arg1 = (std::vector< aiColor4D * > *)jarg1;
14496 arg2 = (std::vector< aiColor4D * >::size_type)jarg2;
14497 (arg1)->reserve(arg2);
14498 }
14499
14500
14501 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiColor4DVector__SWIG_0() {
14502 void * jresult ;
14503 std::vector< aiColor4D * > *result = 0 ;
14504
14505 result = (std::vector< aiColor4D * > *)new std::vector< aiColor4D * >();
14506 jresult = (void *)result;
14507 return jresult;
14508 }
14509
14510
14511 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiColor4DVector__SWIG_1(void * jarg1) {
14512 void * jresult ;
14513 std::vector< aiColor4D * > *arg1 = 0 ;
14514 std::vector< aiColor4D * > *result = 0 ;
14515
14516 arg1 = (std::vector< aiColor4D * > *)jarg1;
14517 if (!arg1) {
14518 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiColor4D * > const & type is null", 0);
14519 return 0;
14520 }
14521 result = (std::vector< aiColor4D * > *)new std::vector< aiColor4D * >((std::vector< aiColor4D * > const &)*arg1);
14522 jresult = (void *)result;
14523 return jresult;
14524 }
14525
14526
14527 SWIGEXPORT void * SWIGSTDCALL CSharp_new_aiColor4DVector__SWIG_2(int jarg1) {
14528 void * jresult ;
14529 int arg1 ;
14530 std::vector< aiColor4D * > *result = 0 ;
14531
14532 arg1 = (int)jarg1;
14533 try {
14534 result = (std::vector< aiColor4D * > *)new_std_vector_Sl_aiColor4D_Sm__Sg___SWIG_2(arg1);
14535 }
14536 catch(std::out_of_range &_e) {
14537 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14538 return 0;
14539 }
14540
14541 jresult = (void *)result;
14542 return jresult;
14543 }
14544
14545
14546 SWIGEXPORT void * SWIGSTDCALL CSharp_aiColor4DVector_getitemcopy(void * jarg1, int jarg2) {
14547 void * jresult ;
14548 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14549 int arg2 ;
14550 aiColor4D *result = 0 ;
14551
14552 arg1 = (std::vector< aiColor4D * > *)jarg1;
14553 arg2 = (int)jarg2;
14554 try {
14555 result = (aiColor4D *)std_vector_Sl_aiColor4D_Sm__Sg__getitemcopy(arg1,arg2);
14556 }
14557 catch(std::out_of_range &_e) {
14558 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14559 return 0;
14560 }
14561
14562 jresult = (void *)result;
14563 return jresult;
14564 }
14565
14566
14567 SWIGEXPORT void * SWIGSTDCALL CSharp_aiColor4DVector_getitem(void * jarg1, int jarg2) {
14568 void * jresult ;
14569 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14570 int arg2 ;
14571 aiColor4D **result = 0 ;
14572
14573 arg1 = (std::vector< aiColor4D * > *)jarg1;
14574 arg2 = (int)jarg2;
14575 try {
14576 result = (aiColor4D **) &std_vector_Sl_aiColor4D_Sm__Sg__getitem(arg1,arg2);
14577 }
14578 catch(std::out_of_range &_e) {
14579 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14580 return 0;
14581 }
14582
14583 jresult = (void *)*result;
14584 return jresult;
14585 }
14586
14587
14588 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_setitem(void * jarg1, int jarg2, void * jarg3) {
14589 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14590 int arg2 ;
14591 aiColor4D **arg3 = 0 ;
14592 aiColor4D *temp3 = 0 ;
14593
14594 arg1 = (std::vector< aiColor4D * > *)jarg1;
14595 arg2 = (int)jarg2;
14596 temp3 = (aiColor4D *)jarg3;
14597 arg3 = (aiColor4D **)&temp3;
14598 try {
14599 std_vector_Sl_aiColor4D_Sm__Sg__setitem(arg1,arg2,(aiColor4D *const &)*arg3);
14600 }
14601 catch(std::out_of_range &_e) {
14602 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14603 return ;
14604 }
14605
14606 }
14607
14608
14609 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_AddRange(void * jarg1, void * jarg2) {
14610 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14611 std::vector< aiColor4D * > *arg2 = 0 ;
14612
14613 arg1 = (std::vector< aiColor4D * > *)jarg1;
14614 arg2 = (std::vector< aiColor4D * > *)jarg2;
14615 if (!arg2) {
14616 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiColor4D * > const & type is null", 0);
14617 return ;
14618 }
14619 std_vector_Sl_aiColor4D_Sm__Sg__AddRange(arg1,(std::vector< aiColor4D * > const &)*arg2);
14620 }
14621
14622
14623 SWIGEXPORT void * SWIGSTDCALL CSharp_aiColor4DVector_GetRange(void * jarg1, int jarg2, int jarg3) {
14624 void * jresult ;
14625 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14626 int arg2 ;
14627 int arg3 ;
14628 std::vector< aiColor4D * > *result = 0 ;
14629
14630 arg1 = (std::vector< aiColor4D * > *)jarg1;
1463115069 arg2 = (int)jarg2;
1463215070 arg3 = (int)jarg3;
1463315071 try {
14634 result = (std::vector< aiColor4D * > *)std_vector_Sl_aiColor4D_Sm__Sg__GetRange(arg1,arg2,arg3);
14635 }
14636 catch(std::out_of_range &_e) {
14637 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14638 return 0;
15072 std_vector_Sl_aiColor4D_Sm__Sg__RemoveRange(arg1,arg2,arg3);
15073 }
15074 catch(std::out_of_range &_e) {
15075 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
15076 return ;
1463915077 }
1464015078 catch(std::invalid_argument &_e) {
1464115079 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentException, (&_e)->what(), "");
14642 return 0;
14643 }
14644
14645 jresult = (void *)result;
14646 return jresult;
14647 }
14648
14649
14650 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_Insert(void * jarg1, int jarg2, void * jarg3) {
15080 return ;
15081 }
15082
15083 }
15084
15085
15086 SWIGEXPORT void * SWIGSTDCALL CSharp_aiColor4DVector_Repeat(void * jarg1, int jarg2) {
15087 void * jresult ;
15088 aiColor4t< float > **arg1 = 0 ;
15089 int arg2 ;
15090 aiColor4t< float > *temp1 = 0 ;
15091 std::vector< aiColor4t< float > * > *result = 0 ;
15092
15093 temp1 = (aiColor4t< float > *)jarg1;
15094 arg1 = (aiColor4t< float > **)&temp1;
15095 arg2 = (int)jarg2;
15096 try {
15097 result = (std::vector< aiColor4t< float > * > *)std_vector_Sl_aiColor4D_Sm__Sg__Repeat((aiColor4t< float > *const &)*arg1,arg2);
15098 }
15099 catch(std::out_of_range &_e) {
15100 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
15101 return 0;
15102 }
15103
15104 jresult = (void *)result;
15105 return jresult;
15106 }
15107
15108
15109 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_Reverse__SWIG_0(void * jarg1) {
1465115110 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14652 int arg2 ;
14653 aiColor4D **arg3 = 0 ;
14654 aiColor4D *temp3 = 0 ;
1465515111
1465615112 arg1 = (std::vector< aiColor4D * > *)jarg1;
14657 arg2 = (int)jarg2;
14658 temp3 = (aiColor4D *)jarg3;
14659 arg3 = (aiColor4D **)&temp3;
14660 try {
14661 std_vector_Sl_aiColor4D_Sm__Sg__Insert(arg1,arg2,(aiColor4D *const &)*arg3);
14662 }
14663 catch(std::out_of_range &_e) {
14664 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14665 return ;
14666 }
14667
14668 }
14669
14670
14671 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_InsertRange(void * jarg1, int jarg2, void * jarg3) {
15113 std_vector_Sl_aiColor4D_Sm__Sg__Reverse__SWIG_0(arg1);
15114 }
15115
15116
15117 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_Reverse__SWIG_1(void * jarg1, int jarg2, int jarg3) {
1467215118 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
1467315119 int arg2 ;
14674 std::vector< aiColor4D * > *arg3 = 0 ;
15120 int arg3 ;
1467515121
1467615122 arg1 = (std::vector< aiColor4D * > *)jarg1;
1467715123 arg2 = (int)jarg2;
14678 arg3 = (std::vector< aiColor4D * > *)jarg3;
14679 if (!arg3) {
14680 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiColor4D * > const & type is null", 0);
14681 return ;
14682 }
14683 try {
14684 std_vector_Sl_aiColor4D_Sm__Sg__InsertRange(arg1,arg2,(std::vector< aiColor4D * > const &)*arg3);
14685 }
14686 catch(std::out_of_range &_e) {
14687 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14688 return ;
14689 }
14690
14691 }
14692
14693
14694 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_RemoveAt(void * jarg1, int jarg2) {
14695 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14696 int arg2 ;
14697
14698 arg1 = (std::vector< aiColor4D * > *)jarg1;
14699 arg2 = (int)jarg2;
14700 try {
14701 std_vector_Sl_aiColor4D_Sm__Sg__RemoveAt(arg1,arg2);
14702 }
14703 catch(std::out_of_range &_e) {
14704 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14705 return ;
14706 }
14707
14708 }
14709
14710
14711 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_RemoveRange(void * jarg1, int jarg2, int jarg3) {
14712 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14713 int arg2 ;
14714 int arg3 ;
14715
14716 arg1 = (std::vector< aiColor4D * > *)jarg1;
14717 arg2 = (int)jarg2;
1471815124 arg3 = (int)jarg3;
1471915125 try {
14720 std_vector_Sl_aiColor4D_Sm__Sg__RemoveRange(arg1,arg2,arg3);
15126 std_vector_Sl_aiColor4D_Sm__Sg__Reverse__SWIG_1(arg1,arg2,arg3);
1472115127 }
1472215128 catch(std::out_of_range &_e) {
1472315129 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
1473115137 }
1473215138
1473315139
14734 SWIGEXPORT void * SWIGSTDCALL CSharp_aiColor4DVector_Repeat(void * jarg1, int jarg2) {
14735 void * jresult ;
14736 aiColor4D **arg1 = 0 ;
14737 int arg2 ;
14738 aiColor4D *temp1 = 0 ;
14739 std::vector< aiColor4D * > *result = 0 ;
14740
14741 temp1 = (aiColor4D *)jarg1;
14742 arg1 = (aiColor4D **)&temp1;
14743 arg2 = (int)jarg2;
14744 try {
14745 result = (std::vector< aiColor4D * > *)std_vector_Sl_aiColor4D_Sm__Sg__Repeat((aiColor4D *const &)*arg1,arg2);
14746 }
14747 catch(std::out_of_range &_e) {
14748 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14749 return 0;
14750 }
14751
14752 jresult = (void *)result;
14753 return jresult;
14754 }
14755
14756
14757 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_Reverse__SWIG_0(void * jarg1) {
14758 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14759
14760 arg1 = (std::vector< aiColor4D * > *)jarg1;
14761 std_vector_Sl_aiColor4D_Sm__Sg__Reverse__SWIG_0(arg1);
14762 }
14763
14764
14765 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_Reverse__SWIG_1(void * jarg1, int jarg2, int jarg3) {
14766 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14767 int arg2 ;
14768 int arg3 ;
14769
14770 arg1 = (std::vector< aiColor4D * > *)jarg1;
14771 arg2 = (int)jarg2;
14772 arg3 = (int)jarg3;
14773 try {
14774 std_vector_Sl_aiColor4D_Sm__Sg__Reverse__SWIG_1(arg1,arg2,arg3);
14775 }
14776 catch(std::out_of_range &_e) {
14777 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
14778 return ;
14779 }
14780 catch(std::invalid_argument &_e) {
14781 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentException, (&_e)->what(), "");
14782 return ;
14783 }
14784
14785 }
14786
14787
1478815140 SWIGEXPORT void SWIGSTDCALL CSharp_aiColor4DVector_SetRange(void * jarg1, int jarg2, void * jarg3) {
1478915141 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
1479015142 int arg2 ;
14791 std::vector< aiColor4D * > *arg3 = 0 ;
15143 std::vector< aiColor4t< float > * > *arg3 = 0 ;
1479215144
1479315145 arg1 = (std::vector< aiColor4D * > *)jarg1;
1479415146 arg2 = (int)jarg2;
14795 arg3 = (std::vector< aiColor4D * > *)jarg3;
15147 arg3 = (std::vector< aiColor4t< float > * > *)jarg3;
1479615148 if (!arg3) {
14797 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiColor4D * > const & type is null", 0);
15149 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiColor4t< float > * > const & type is null", 0);
1479815150 return ;
1479915151 }
1480015152 try {
14801 std_vector_Sl_aiColor4D_Sm__Sg__SetRange(arg1,arg2,(std::vector< aiColor4D * > const &)*arg3);
15153 std_vector_Sl_aiColor4D_Sm__Sg__SetRange(arg1,arg2,(std::vector< aiColor4t< float > * > const &)*arg3);
1480215154 }
1480315155 catch(std::out_of_range &_e) {
1480415156 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
1481115163 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiColor4DVector_Contains(void * jarg1, void * jarg2) {
1481215164 unsigned int jresult ;
1481315165 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14814 aiColor4D **arg2 = 0 ;
14815 aiColor4D *temp2 = 0 ;
15166 aiColor4t< float > **arg2 = 0 ;
15167 aiColor4t< float > *temp2 = 0 ;
1481615168 bool result;
1481715169
1481815170 arg1 = (std::vector< aiColor4D * > *)jarg1;
14819 temp2 = (aiColor4D *)jarg2;
14820 arg2 = (aiColor4D **)&temp2;
14821 result = (bool)std_vector_Sl_aiColor4D_Sm__Sg__Contains(arg1,(aiColor4D *const &)*arg2);
15171 temp2 = (aiColor4t< float > *)jarg2;
15172 arg2 = (aiColor4t< float > **)&temp2;
15173 result = (bool)std_vector_Sl_aiColor4D_Sm__Sg__Contains(arg1,(aiColor4t< float > *const &)*arg2);
1482215174 jresult = result;
1482315175 return jresult;
1482415176 }
1482715179 SWIGEXPORT int SWIGSTDCALL CSharp_aiColor4DVector_IndexOf(void * jarg1, void * jarg2) {
1482815180 int jresult ;
1482915181 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14830 aiColor4D **arg2 = 0 ;
14831 aiColor4D *temp2 = 0 ;
15182 aiColor4t< float > **arg2 = 0 ;
15183 aiColor4t< float > *temp2 = 0 ;
1483215184 int result;
1483315185
1483415186 arg1 = (std::vector< aiColor4D * > *)jarg1;
14835 temp2 = (aiColor4D *)jarg2;
14836 arg2 = (aiColor4D **)&temp2;
14837 result = (int)std_vector_Sl_aiColor4D_Sm__Sg__IndexOf(arg1,(aiColor4D *const &)*arg2);
15187 temp2 = (aiColor4t< float > *)jarg2;
15188 arg2 = (aiColor4t< float > **)&temp2;
15189 result = (int)std_vector_Sl_aiColor4D_Sm__Sg__IndexOf(arg1,(aiColor4t< float > *const &)*arg2);
1483815190 jresult = result;
1483915191 return jresult;
1484015192 }
1484315195 SWIGEXPORT int SWIGSTDCALL CSharp_aiColor4DVector_LastIndexOf(void * jarg1, void * jarg2) {
1484415196 int jresult ;
1484515197 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14846 aiColor4D **arg2 = 0 ;
14847 aiColor4D *temp2 = 0 ;
15198 aiColor4t< float > **arg2 = 0 ;
15199 aiColor4t< float > *temp2 = 0 ;
1484815200 int result;
1484915201
1485015202 arg1 = (std::vector< aiColor4D * > *)jarg1;
14851 temp2 = (aiColor4D *)jarg2;
14852 arg2 = (aiColor4D **)&temp2;
14853 result = (int)std_vector_Sl_aiColor4D_Sm__Sg__LastIndexOf(arg1,(aiColor4D *const &)*arg2);
15203 temp2 = (aiColor4t< float > *)jarg2;
15204 arg2 = (aiColor4t< float > **)&temp2;
15205 result = (int)std_vector_Sl_aiColor4D_Sm__Sg__LastIndexOf(arg1,(aiColor4t< float > *const &)*arg2);
1485415206 jresult = result;
1485515207 return jresult;
1485615208 }
1485915211 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiColor4DVector_Remove(void * jarg1, void * jarg2) {
1486015212 unsigned int jresult ;
1486115213 std::vector< aiColor4D * > *arg1 = (std::vector< aiColor4D * > *) 0 ;
14862 aiColor4D **arg2 = 0 ;
14863 aiColor4D *temp2 = 0 ;
15214 aiColor4t< float > **arg2 = 0 ;
15215 aiColor4t< float > *temp2 = 0 ;
1486415216 bool result;
1486515217
1486615218 arg1 = (std::vector< aiColor4D * > *)jarg1;
14867 temp2 = (aiColor4D *)jarg2;
14868 arg2 = (aiColor4D **)&temp2;
14869 result = (bool)std_vector_Sl_aiColor4D_Sm__Sg__Remove(arg1,(aiColor4D *const &)*arg2);
15219 temp2 = (aiColor4t< float > *)jarg2;
15220 arg2 = (aiColor4t< float > **)&temp2;
15221 result = (bool)std_vector_Sl_aiColor4D_Sm__Sg__Remove(arg1,(aiColor4t< float > *const &)*arg2);
1487015222 jresult = result;
1487115223 return jresult;
1487215224 }
1925019602
1925119603 SWIGEXPORT void SWIGSTDCALL CSharp_aiVector3DVector_Add(void * jarg1, void * jarg2) {
1925219604 std::vector< aiVector3D * > *arg1 = (std::vector< aiVector3D * > *) 0 ;
19253 aiVector3D **arg2 = 0 ;
19254 aiVector3D *temp2 = 0 ;
19605 aiVector3t< float > **arg2 = 0 ;
19606 aiVector3t< float > *temp2 = 0 ;
1925519607
1925619608 arg1 = (std::vector< aiVector3D * > *)jarg1;
19257 temp2 = (aiVector3D *)jarg2;
19258 arg2 = (aiVector3D **)&temp2;
19259 (arg1)->push_back((aiVector3D *const &)*arg2);
19609 temp2 = (aiVector3t< float > *)jarg2;
19610 arg2 = (aiVector3t< float > **)&temp2;
19611 (arg1)->push_back((aiVector3t< float > *const &)*arg2);
1926019612 }
1926119613
1926219614
1926319615 SWIGEXPORT unsigned long SWIGSTDCALL CSharp_aiVector3DVector_size(void * jarg1) {
1926419616 unsigned long jresult ;
1926519617 std::vector< aiVector3D * > *arg1 = (std::vector< aiVector3D * > *) 0 ;
19266 std::vector< aiVector3D * >::size_type result;
19618 std::vector< aiVector3t< float > * >::size_type result;
1926719619
1926819620 arg1 = (std::vector< aiVector3D * > *)jarg1;
1926919621 result = ((std::vector< aiVector3D * > const *)arg1)->size();
1927519627 SWIGEXPORT unsigned long SWIGSTDCALL CSharp_aiVector3DVector_capacity(void * jarg1) {
1927619628 unsigned long jresult ;
1927719629 std::vector< aiVector3D * > *arg1 = (std::vector< aiVector3D * > *) 0 ;
19278 std::vector< aiVector3D * >::size_type result;
19630 std::vector< aiVector3t< float > * >::size_type result;
1927919631
1928019632 arg1 = (std::vector< aiVector3D * > *)jarg1;
1928119633 result = ((std::vector< aiVector3D * > const *)arg1)->capacity();
1928619638
1928719639 SWIGEXPORT void SWIGSTDCALL CSharp_aiVector3DVector_reserve(void * jarg1, unsigned long jarg2) {
1928819640 std::vector< aiVector3D * > *arg1 = (std::vector< aiVector3D * > *) 0 ;
19289 std::vector< aiVector3D * >::size_type arg2 ;
19641 std::vector< aiVector3t< float > * >::size_type arg2 ;
1929019642
1929119643 arg1 = (std::vector< aiVector3D * > *)jarg1;
19292 arg2 = (std::vector< aiVector3D * >::size_type)jarg2;
19644 arg2 = (std::vector< aiVector3t< float > * >::size_type)jarg2;
1929319645 (arg1)->reserve(arg2);
1929419646 }
1929519647
1934319695 void * jresult ;
1934419696 std::vector< aiVector3D * > *arg1 = (std::vector< aiVector3D * > *) 0 ;
1934519697 int arg2 ;
19346 aiVector3D *result = 0 ;
19698 aiVector3t< float > *result = 0 ;
1934719699
1934819700 arg1 = (std::vector< aiVector3D * > *)jarg1;
1934919701 arg2 = (int)jarg2;
1935019702 try {
19351 result = (aiVector3D *)std_vector_Sl_aiVector3D_Sm__Sg__getitemcopy(arg1,arg2);
19703 result = (aiVector3t< float > *)std_vector_Sl_aiVector3D_Sm__Sg__getitemcopy(arg1,arg2);
1935219704 }
1935319705 catch(std::out_of_range &_e) {
1935419706 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
1936419716 void * jresult ;
1936519717 std::vector< aiVector3D * > *arg1 = (std::vector< aiVector3D * > *) 0 ;
1936619718 int arg2 ;
19367 aiVector3D **result = 0 ;
19719 aiVector3t< float > **result = 0 ;
1936819720
1936919721 arg1 = (std::vector< aiVector3D * > *)jarg1;
1937019722 arg2 = (int)jarg2;
1937119723 try {
19372 result = (aiVector3D **) &std_vector_Sl_aiVector3D_Sm__Sg__getitem(arg1,arg2);
19724 result = (aiVector3t< float > **) &std_vector_Sl_aiVector3D_Sm__Sg__getitem(arg1,arg2);
1937319725 }
1937419726 catch(std::out_of_range &_e) {
1937519727 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
1938419736 SWIGEXPORT void SWIGSTDCALL CSharp_aiVector3DVector_setitem(void * jarg1, int jarg2, void * jarg3) {
1938519737 std::vector< aiVector3D * > *arg1 = (std::vector< aiVector3D * > *) 0 ;
1938619738 int arg2 ;
19387 aiVector3D **arg3 = 0 ;
19388 aiVector3D *temp3 = 0 ;
19739 aiVector3t< float > **arg3 = 0 ;
19740 aiVector3t< float > *temp3 = 0 ;
1938919741
1939019742 arg1 = (std::vector< aiVector3D * > *)jarg1;
1939119743 arg2 = (int)jarg2;
19392 temp3 = (aiVector3D *)jarg3;
19393 arg3 = (aiVector3D **)&temp3;
19394 try {
19395 std_vector_Sl_aiVector3D_Sm__Sg__setitem(arg1,arg2,(aiVector3D *const &)*arg3);
19744 temp3 = (aiVector3t< float > *)jarg3;
19745 arg3 = (aiVector3t< float > **)&temp3;
19746 try {
19747 std_vector_Sl_aiVector3D_Sm__Sg__setitem(arg1,arg2,(aiVector3t< float > *const &)*arg3);
1939619748 }
1939719749 catch(std::out_of_range &_e) {
1939819750 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
1940419756
1940519757 SWIGEXPORT void SWIGSTDCALL CSharp_aiVector3DVector_AddRange(void * jarg1, void * jarg2) {
1940619758 std::vector< aiVector3D * > *arg1 = (std::vector< aiVector3D * > *) 0 ;
19407 std::vector< aiVector3D * > *arg2 = 0 ;
19759 std::vector< aiVector3t< float > * > *arg2 = 0 ;
1940819760
1940919761 arg1 = (std::vector< aiVector3D * > *)jarg1;
19410 arg2 = (std::vector< aiVector3D * > *)jarg2;
19762 arg2 = (std::vector< aiVector3t< float > * > *)jarg2;
1941119763 if (!arg2) {
19412 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiVector3D * > const & type is null", 0);
19764 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiVector3t< float > * > const & type is null", 0);
1941319765 return ;
1941419766 }
19415 std_vector_Sl_aiVector3D_Sm__Sg__AddRange(arg1,(std::vector< aiVector3D * > const &)*arg2);
19767 std_vector_Sl_aiVector3D_Sm__Sg__AddRange(arg1,(std::vector< aiVector3t< float > * > const &)*arg2);
1941619768 }
1941719769
1941819770
1942119773 std::vector< aiVector3D * > *arg1 = (std::vector< aiVector3D * > *) 0 ;
1942219774 int arg2 ;
1942319775 int arg3 ;
19424 std::vector< aiVector3D * > *result = 0 ;
19776 std::vector< aiVector3t< float > * > *result = 0 ;
1942519777
1942619778 arg1 = (std::vector< aiVector3D * > *)jarg1;
1942719779 arg2 = (int)jarg2;
1942819780 arg3 = (int)jarg3;
1942919781 try {
19430 result = (std::vector< aiVector3D * > *)std_vector_Sl_aiVector3D_Sm__Sg__GetRange(arg1,arg2,arg3);
19782 result = (std::vector< aiVector3t< float > * > *)std_vector_Sl_aiVector3D_Sm__Sg__GetRange(arg1,arg2,arg3);
1943119783 }
1943219784 catch(std::out_of_range &_e) {
1943319785 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
1944619798 SWIGEXPORT void SWIGSTDCALL CSharp_aiVector3DVector_Insert(void * jarg1, int jarg2, void * jarg3) {
1944719799 std::vector< aiVector3D * > *arg1 = (std::vector< aiVector3D * > *) 0 ;
1944819800 int arg2 ;
19449 aiVector3D **arg3 = 0 ;
19450 aiVector3D *temp3 = 0 ;
19801 aiVector3t< float > **arg3 = 0 ;
19802 aiVector3t< float > *temp3 = 0 ;
1945119803
1945219804 arg1 = (std::vector< aiVector3D * > *)jarg1;
1945319805 arg2 = (int)jarg2;
19454 temp3 = (aiVector3D *)jarg3;
19455 arg3 = (aiVector3D **)&temp3;
19456 try {
19457 std_vector_Sl_aiVector3D_Sm__Sg__Insert(arg1,arg2,(aiVector3D *const &)*arg3);
19806 temp3 = (aiVector3t< float > *)jarg3;
19807 arg3 = (aiVector3t< float > **)&temp3;
19808 try {
19809 std_vector_Sl_aiVector3D_Sm__Sg__Insert(arg1,arg2,(aiVector3t< float > *const &)*arg3);
1945819810 }
1945919811 catch(std::out_of_range &_e) {
1946019812 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
1946719819 SWIGEXPORT void SWIGSTDCALL CSharp_aiVector3DVector_InsertRange(void * jarg1, int jarg2, void * jarg3) {
1946819820 std::vector< aiVector3D * > *arg1 = (std::vector< aiVector3D * > *) 0 ;
1946919821 int arg2 ;
19470 std::vector< aiVector3D * > *arg3 = 0 ;
19822 std::vector< aiVector3t< float > * > *arg3 = 0 ;
1947119823
1947219824 arg1 = (std::vector< aiVector3D * > *)jarg1;
1947319825 arg2 = (int)jarg2;
19474 arg3 = (std::vector< aiVector3D * > *)jarg3;
19826 arg3 = (std::vector< aiVector3t< float > * > *)jarg3;
1947519827 if (!arg3) {
19476 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiVector3D * > const & type is null", 0);
19828 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiVector3t< float > * > const & type is null", 0);
1947719829 return ;
1947819830 }
1947919831 try {
19480 std_vector_Sl_aiVector3D_Sm__Sg__InsertRange(arg1,arg2,(std::vector< aiVector3D * > const &)*arg3);
19832 std_vector_Sl_aiVector3D_Sm__Sg__InsertRange(arg1,arg2,(std::vector< aiVector3t< float > * > const &)*arg3);
1948119833 }
1948219834 catch(std::out_of_range &_e) {
1948319835 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
1952919881
1953019882 SWIGEXPORT void * SWIGSTDCALL CSharp_aiVector3DVector_Repeat(void * jarg1, int jarg2) {
1953119883 void * jresult ;
19532 aiVector3D **arg1 = 0 ;
19533 int arg2 ;
19534 aiVector3D *temp1 = 0 ;
19535 std::vector< aiVector3D * > *result = 0 ;
19536
19537 temp1 = (aiVector3D *)jarg1;
19538 arg1 = (aiVector3D **)&temp1;
19539 arg2 = (int)jarg2;
19540 try {
19541 result = (std::vector< aiVector3D * > *)std_vector_Sl_aiVector3D_Sm__Sg__Repeat((aiVector3D *const &)*arg1,arg2);
19884 aiVector3t< float > **arg1 = 0 ;
19885 int arg2 ;
19886 aiVector3t< float > *temp1 = 0 ;
19887 std::vector< aiVector3t< float > * > *result = 0 ;
19888
19889 temp1 = (aiVector3t< float > *)jarg1;
19890 arg1 = (aiVector3t< float > **)&temp1;
19891 arg2 = (int)jarg2;
19892 try {
19893 result = (std::vector< aiVector3t< float > * > *)std_vector_Sl_aiVector3D_Sm__Sg__Repeat((aiVector3t< float > *const &)*arg1,arg2);
1954219894 }
1954319895 catch(std::out_of_range &_e) {
1954419896 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
1958419936 SWIGEXPORT void SWIGSTDCALL CSharp_aiVector3DVector_SetRange(void * jarg1, int jarg2, void * jarg3) {
1958519937 std::vector< aiVector3D * > *arg1 = (std::vector< aiVector3D * > *) 0 ;
1958619938 int arg2 ;
19587 std::vector< aiVector3D * > *arg3 = 0 ;
19939 std::vector< aiVector3t< float > * > *arg3 = 0 ;
1958819940
1958919941 arg1 = (std::vector< aiVector3D * > *)jarg1;
1959019942 arg2 = (int)jarg2;
19591 arg3 = (std::vector< aiVector3D * > *)jarg3;
19943 arg3 = (std::vector< aiVector3t< float > * > *)jarg3;
1959219944 if (!arg3) {
19593 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiVector3D * > const & type is null", 0);
19945 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< aiVector3t< float > * > const & type is null", 0);
1959419946 return ;
1959519947 }
1959619948 try {
19597 std_vector_Sl_aiVector3D_Sm__Sg__SetRange(arg1,arg2,(std::vector< aiVector3D * > const &)*arg3);
19949 std_vector_Sl_aiVector3D_Sm__Sg__SetRange(arg1,arg2,(std::vector< aiVector3t< float > * > const &)*arg3);
1959819950 }
1959919951 catch(std::out_of_range &_e) {
1960019952 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
1960719959 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiVector3DVector_Contains(void * jarg1, void * jarg2) {
1960819960 unsigned int jresult ;
1960919961 std::vector< aiVector3D * > *arg1 = (std::vector< aiVector3D * > *) 0 ;
19610 aiVector3D **arg2 = 0 ;
19611 aiVector3D *temp2 = 0 ;
19962 aiVector3t< float > **arg2 = 0 ;
19963 aiVector3t< float > *temp2 = 0 ;
1961219964 bool result;
1961319965
1961419966 arg1 = (std::vector< aiVector3D * > *)jarg1;
19615 temp2 = (aiVector3D *)jarg2;
19616 arg2 = (aiVector3D **)&temp2;
19617 result = (bool)std_vector_Sl_aiVector3D_Sm__Sg__Contains(arg1,(aiVector3D *const &)*arg2);
19967 temp2 = (aiVector3t< float > *)jarg2;
19968 arg2 = (aiVector3t< float > **)&temp2;
19969 result = (bool)std_vector_Sl_aiVector3D_Sm__Sg__Contains(arg1,(aiVector3t< float > *const &)*arg2);
1961819970 jresult = result;
1961919971 return jresult;
1962019972 }
1962319975 SWIGEXPORT int SWIGSTDCALL CSharp_aiVector3DVector_IndexOf(void * jarg1, void * jarg2) {
1962419976 int jresult ;
1962519977 std::vector< aiVector3D * > *arg1 = (std::vector< aiVector3D * > *) 0 ;
19626 aiVector3D **arg2 = 0 ;
19627 aiVector3D *temp2 = 0 ;
19978 aiVector3t< float > **arg2 = 0 ;
19979 aiVector3t< float > *temp2 = 0 ;
1962819980 int result;
1962919981
1963019982 arg1 = (std::vector< aiVector3D * > *)jarg1;
19631 temp2 = (aiVector3D *)jarg2;
19632 arg2 = (aiVector3D **)&temp2;
19633 result = (int)std_vector_Sl_aiVector3D_Sm__Sg__IndexOf(arg1,(aiVector3D *const &)*arg2);
19983 temp2 = (aiVector3t< float > *)jarg2;
19984 arg2 = (aiVector3t< float > **)&temp2;
19985 result = (int)std_vector_Sl_aiVector3D_Sm__Sg__IndexOf(arg1,(aiVector3t< float > *const &)*arg2);
1963419986 jresult = result;
1963519987 return jresult;
1963619988 }
1963919991 SWIGEXPORT int SWIGSTDCALL CSharp_aiVector3DVector_LastIndexOf(void * jarg1, void * jarg2) {
1964019992 int jresult ;
1964119993 std::vector< aiVector3D * > *arg1 = (std::vector< aiVector3D * > *) 0 ;
19642 aiVector3D **arg2 = 0 ;
19643 aiVector3D *temp2 = 0 ;
19994 aiVector3t< float > **arg2 = 0 ;
19995 aiVector3t< float > *temp2 = 0 ;
1964419996 int result;
1964519997
1964619998 arg1 = (std::vector< aiVector3D * > *)jarg1;
19647 temp2 = (aiVector3D *)jarg2;
19648 arg2 = (aiVector3D **)&temp2;
19649 result = (int)std_vector_Sl_aiVector3D_Sm__Sg__LastIndexOf(arg1,(aiVector3D *const &)*arg2);
19999 temp2 = (aiVector3t< float > *)jarg2;
20000 arg2 = (aiVector3t< float > **)&temp2;
20001 result = (int)std_vector_Sl_aiVector3D_Sm__Sg__LastIndexOf(arg1,(aiVector3t< float > *const &)*arg2);
1965020002 jresult = result;
1965120003 return jresult;
1965220004 }
1965520007 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_aiVector3DVector_Remove(void * jarg1, void * jarg2) {
1965620008 unsigned int jresult ;
1965720009 std::vector< aiVector3D * > *arg1 = (std::vector< aiVector3D * > *) 0 ;
19658 aiVector3D **arg2 = 0 ;
19659 aiVector3D *temp2 = 0 ;
20010 aiVector3t< float > **arg2 = 0 ;
20011 aiVector3t< float > *temp2 = 0 ;
1966020012 bool result;
1966120013
1966220014 arg1 = (std::vector< aiVector3D * > *)jarg1;
19663 temp2 = (aiVector3D *)jarg2;
19664 arg2 = (aiVector3D **)&temp2;
19665 result = (bool)std_vector_Sl_aiVector3D_Sm__Sg__Remove(arg1,(aiVector3D *const &)*arg2);
20015 temp2 = (aiVector3t< float > *)jarg2;
20016 arg2 = (aiVector3t< float > **)&temp2;
20017 result = (bool)std_vector_Sl_aiVector3D_Sm__Sg__Remove(arg1,(aiVector3t< float > *const &)*arg2);
1966620018 jresult = result;
1966720019 return jresult;
1966820020 }
1970120053 SWIGEXPORT unsigned long SWIGSTDCALL CSharp_aiVector3DVectorVector_size(void * jarg1) {
1970220054 unsigned long jresult ;
1970320055 std::vector< std::vector< aiVector3D * > > *arg1 = (std::vector< std::vector< aiVector3D * > > *) 0 ;
19704 std::vector< std::vector< aiVector3D * > >::size_type result;
20056 std::vector< std::vector< aiVector3t< float > * > >::size_type result;
1970520057
1970620058 arg1 = (std::vector< std::vector< aiVector3D * > > *)jarg1;
1970720059 result = ((std::vector< std::vector< aiVector3D * > > const *)arg1)->size();
1971320065 SWIGEXPORT unsigned long SWIGSTDCALL CSharp_aiVector3DVectorVector_capacity(void * jarg1) {
1971420066 unsigned long jresult ;
1971520067 std::vector< std::vector< aiVector3D * > > *arg1 = (std::vector< std::vector< aiVector3D * > > *) 0 ;
19716 std::vector< std::vector< aiVector3D * > >::size_type result;
20068 std::vector< std::vector< aiVector3t< float > * > >::size_type result;
1971720069
1971820070 arg1 = (std::vector< std::vector< aiVector3D * > > *)jarg1;
1971920071 result = ((std::vector< std::vector< aiVector3D * > > const *)arg1)->capacity();
1972420076
1972520077 SWIGEXPORT void SWIGSTDCALL CSharp_aiVector3DVectorVector_reserve(void * jarg1, unsigned long jarg2) {
1972620078 std::vector< std::vector< aiVector3D * > > *arg1 = (std::vector< std::vector< aiVector3D * > > *) 0 ;
19727 std::vector< std::vector< aiVector3D * > >::size_type arg2 ;
20079 std::vector< std::vector< aiVector3t< float > * > >::size_type arg2 ;
1972820080
1972920081 arg1 = (std::vector< std::vector< aiVector3D * > > *)jarg1;
19730 arg2 = (std::vector< std::vector< aiVector3D * > >::size_type)jarg2;
20082 arg2 = (std::vector< std::vector< aiVector3t< float > * > >::size_type)jarg2;
1973120083 (arg1)->reserve(arg2);
1973220084 }
1973320085
1983220184 return ;
1983320185 }
1983420186 try {
19835 std_vector_Sl_std_vector_Sl_aiVector3D_Sm__Sg__Sg__setitem(arg1,arg2,(std::vector< aiVector3D * > const &)*arg3);
20187 std_vector_Sl_std_vector_Sl_aiVector3D_Sm__Sg__Sg__setitem(arg1,arg2,(std::vector< aiVector3t< float > * > const &)*arg3);
1983620188 }
1983720189 catch(std::out_of_range &_e) {
1983820190 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
1985220204 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentNullException, "std::vector< std::vector< aiVector3D * > > const & type is null", 0);
1985320205 return ;
1985420206 }
19855 std_vector_Sl_std_vector_Sl_aiVector3D_Sm__Sg__Sg__AddRange(arg1,(std::vector< std::vector< aiVector3D * > > const &)*arg2);
20207 std_vector_Sl_std_vector_Sl_aiVector3D_Sm__Sg__Sg__AddRange(arg1,(std::vector< std::vector< aiVector3t< float > * > > const &)*arg2);
1985620208 }
1985720209
1985820210
1989620248 return ;
1989720249 }
1989820250 try {
19899 std_vector_Sl_std_vector_Sl_aiVector3D_Sm__Sg__Sg__Insert(arg1,arg2,(std::vector< aiVector3D * > const &)*arg3);
20251 std_vector_Sl_std_vector_Sl_aiVector3D_Sm__Sg__Sg__Insert(arg1,arg2,(std::vector< aiVector3t< float > * > const &)*arg3);
1990020252 }
1990120253 catch(std::out_of_range &_e) {
1990220254 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
1991920271 return ;
1992020272 }
1992120273 try {
19922 std_vector_Sl_std_vector_Sl_aiVector3D_Sm__Sg__Sg__InsertRange(arg1,arg2,(std::vector< std::vector< aiVector3D * > > const &)*arg3);
20274 std_vector_Sl_std_vector_Sl_aiVector3D_Sm__Sg__Sg__InsertRange(arg1,arg2,(std::vector< std::vector< aiVector3t< float > * > > const &)*arg3);
1992320275 }
1992420276 catch(std::out_of_range &_e) {
1992520277 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
1998220334 }
1998320335 arg2 = (int)jarg2;
1998420336 try {
19985 result = (std::vector< std::vector< aiVector3D * > > *)std_vector_Sl_std_vector_Sl_aiVector3D_Sm__Sg__Sg__Repeat((std::vector< aiVector3D * > const &)*arg1,arg2);
20337 result = (std::vector< std::vector< aiVector3D * > > *)std_vector_Sl_std_vector_Sl_aiVector3D_Sm__Sg__Sg__Repeat((std::vector< aiVector3t< float > * > const &)*arg1,arg2);
1998620338 }
1998720339 catch(std::out_of_range &_e) {
1998820340 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
2003820390 return ;
2003920391 }
2004020392 try {
20041 std_vector_Sl_std_vector_Sl_aiVector3D_Sm__Sg__Sg__SetRange(arg1,arg2,(std::vector< std::vector< aiVector3D * > > const &)*arg3);
20393 std_vector_Sl_std_vector_Sl_aiVector3D_Sm__Sg__Sg__SetRange(arg1,arg2,(std::vector< std::vector< aiVector3t< float > * > > const &)*arg3);
2004220394 }
2004320395 catch(std::out_of_range &_e) {
2004420396 SWIG_CSharpSetPendingExceptionArgument(SWIG_CSharpArgumentOutOfRangeException, 0, (&_e)->what());
22 <PropertyGroup>
33 <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
44 <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
5 <ProductVersion>9.0.30729</ProductVersion>
5 <ProductVersion>9.0.21022</ProductVersion>
66 <SchemaVersion>2.0</SchemaVersion>
77 <ProjectGuid>{A0CE9ED2-A27E-40AE-95F5-FEF94BB7E131}</ProjectGuid>
88 <OutputType>Library</OutputType>
141141 <Compile Include="FloatVector.cs" />
142142 <Compile Include="Importer.cs" />
143143 <Compile Include="ProgressHandler.cs" />
144 <Compile Include="SWIGTYPE_p_aiImporterDesc.cs">
145 <SubType>Code</SubType>
146 </Compile>
147 <Compile Include="SWIGTYPE_p_Assimp__BaseImporter.cs">
148 <SubType>Code</SubType>
149 </Compile>
150 <Compile Include="SWIGTYPE_p_Assimp__ImporterPimpl.cs">
151 <SubType>Code</SubType>
152 </Compile>
153 <Compile Include="SWIGTYPE_p_float.cs">
154 <SubType>Code</SubType>
155 </Compile>
144156 <Compile Include="SWIGTYPE_p_std__string.cs">
157 <SubType>Code</SubType>
158 </Compile>
159 <Compile Include="SWIGTYPE_p_void.cs">
145160 <SubType>Code</SubType>
146161 </Compile>
147162 <Compile Include="UintVector.cs" />
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
4242 return ret;
4343 }
4444
45 public static aiVector2D __add__(aiVector2D v1, aiVector2D v2) {
46 aiVector2D ret = new aiVector2D(AssimpPINVOKE.__add__(aiVector2D.getCPtr(v1), aiVector2D.getCPtr(v2)), true);
47 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
48 return ret;
49 }
50
51 public static aiVector2D __sub__(aiVector2D v1, aiVector2D v2) {
52 aiVector2D ret = new aiVector2D(AssimpPINVOKE.__sub____SWIG_0(aiVector2D.getCPtr(v1), aiVector2D.getCPtr(v2)), true);
53 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
54 return ret;
55 }
56
57 public static float __mul__(aiVector2D v1, aiVector2D v2) {
58 float ret = AssimpPINVOKE.__mul____SWIG_0(aiVector2D.getCPtr(v1), aiVector2D.getCPtr(v2));
59 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
60 return ret;
61 }
62
63 public static aiVector2D __mul__(float f, aiVector2D v) {
64 aiVector2D ret = new aiVector2D(AssimpPINVOKE.__mul____SWIG_1(f, aiVector2D.getCPtr(v)), true);
65 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
66 return ret;
67 }
68
69 public static aiVector2D __mul__(aiVector2D v, float f) {
70 aiVector2D ret = new aiVector2D(AssimpPINVOKE.__mul____SWIG_2(aiVector2D.getCPtr(v), f), true);
71 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
72 return ret;
73 }
74
75 public static aiVector2D __div__(aiVector2D v, float f) {
76 aiVector2D ret = new aiVector2D(AssimpPINVOKE.__div____SWIG_0(aiVector2D.getCPtr(v), f), true);
77 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
78 return ret;
79 }
80
81 public static aiVector2D __div__(aiVector2D v, aiVector2D v2) {
82 aiVector2D ret = new aiVector2D(AssimpPINVOKE.__div____SWIG_1(aiVector2D.getCPtr(v), aiVector2D.getCPtr(v2)), true);
83 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
84 return ret;
85 }
86
87 public static aiVector2D __sub__(aiVector2D v) {
88 aiVector2D ret = new aiVector2D(AssimpPINVOKE.__sub____SWIG_1(aiVector2D.getCPtr(v)), true);
89 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
90 return ret;
91 }
92
93 public static aiScene aiImportFileFromMemory(string arg0, uint arg1, uint arg2, string arg3) {
94 IntPtr cPtr = AssimpPINVOKE.aiImportFileFromMemory(arg0, arg1, arg2, arg3);
95 aiScene ret = (cPtr == IntPtr.Zero) ? null : new aiScene(cPtr, false);
96 return ret;
97 }
98
9945 public static readonly double AI_MATH_PI = AssimpPINVOKE.AI_MATH_PI_get();
10046 public static readonly double AI_MATH_TWO_PI = AssimpPINVOKE.AI_MATH_TWO_PI_get();
10147 public static readonly double AI_MATH_HALF_PI = AssimpPINVOKE.AI_MATH_HALF_PI_get();
10349 public static readonly double AI_MATH_TWO_PI_F = AssimpPINVOKE.AI_MATH_TWO_PI_F_get();
10450 public static readonly double AI_MATH_HALF_PI_F = AssimpPINVOKE.AI_MATH_HALF_PI_F_get();
10551 public static readonly string AI_CONFIG_GLOB_MEASURE_TIME = AssimpPINVOKE.AI_CONFIG_GLOB_MEASURE_TIME_get();
52 public static readonly string AI_CONFIG_PP_SBBC_MAX_BONES = AssimpPINVOKE.AI_CONFIG_PP_SBBC_MAX_BONES_get();
53 public static readonly int AI_SBBC_DEFAULT_MAX_BONES = AssimpPINVOKE.AI_SBBC_DEFAULT_MAX_BONES_get();
10654 public static readonly string AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE = AssimpPINVOKE.AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE_get();
55 public static readonly string AI_CONFIG_PP_CT_TEXTURE_CHANNEL_INDEX = AssimpPINVOKE.AI_CONFIG_PP_CT_TEXTURE_CHANNEL_INDEX_get();
10756 public static readonly string AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE = AssimpPINVOKE.AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE_get();
10857 public static readonly string AI_CONFIG_IMPORT_MDL_COLORMAP = AssimpPINVOKE.AI_CONFIG_IMPORT_MDL_COLORMAP_get();
10958 public static readonly string AI_CONFIG_PP_RRM_EXCLUDE_LIST = AssimpPINVOKE.AI_CONFIG_PP_RRM_EXCLUDE_LIST_get();
11766 public static readonly int AI_SLM_DEFAULT_MAX_VERTICES = AssimpPINVOKE.AI_SLM_DEFAULT_MAX_VERTICES_get();
11867 public static readonly string AI_CONFIG_PP_LBW_MAX_WEIGHTS = AssimpPINVOKE.AI_CONFIG_PP_LBW_MAX_WEIGHTS_get();
11968 public static readonly int AI_LMW_MAX_WEIGHTS = AssimpPINVOKE.AI_LMW_MAX_WEIGHTS_get();
69 public static readonly string AI_CONFIG_PP_DB_THRESHOLD = AssimpPINVOKE.AI_CONFIG_PP_DB_THRESHOLD_get();
70 public static readonly double AI_DEBONE_THRESHOLD = AssimpPINVOKE.AI_DEBONE_THRESHOLD_get();
71 public static readonly string AI_CONFIG_PP_DB_ALL_OR_NONE = AssimpPINVOKE.AI_CONFIG_PP_DB_ALL_OR_NONE_get();
12072 public static readonly int PP_ICL_PTCACHE_SIZE = AssimpPINVOKE.PP_ICL_PTCACHE_SIZE_get();
12173 public static readonly string AI_CONFIG_PP_ICL_PTCACHE_SIZE = AssimpPINVOKE.AI_CONFIG_PP_ICL_PTCACHE_SIZE_get();
12274 public static readonly string AI_CONFIG_PP_RVC_FLAGS = AssimpPINVOKE.AI_CONFIG_PP_RVC_FLAGS_get();
149101 public static readonly string AI_CONFIG_IMPORT_LWS_ANIM_END = AssimpPINVOKE.AI_CONFIG_IMPORT_LWS_ANIM_END_get();
150102 public static readonly string AI_CONFIG_IMPORT_IRR_ANIM_FPS = AssimpPINVOKE.AI_CONFIG_IMPORT_IRR_ANIM_FPS_get();
151103 public static readonly string AI_CONFIG_IMPORT_OGRE_MATERIAL_FILE = AssimpPINVOKE.AI_CONFIG_IMPORT_OGRE_MATERIAL_FILE_get();
104 public static readonly string AI_CONFIG_IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME = AssimpPINVOKE.AI_CONFIG_IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME_get();
105 public static readonly string AI_CONFIG_IMPORT_IFC_SKIP_SPACE_REPRESENTATIONS = AssimpPINVOKE.AI_CONFIG_IMPORT_IFC_SKIP_SPACE_REPRESENTATIONS_get();
106 public static readonly string AI_CONFIG_IMPORT_IFC_SKIP_CURVE_REPRESENTATIONS = AssimpPINVOKE.AI_CONFIG_IMPORT_IFC_SKIP_CURVE_REPRESENTATIONS_get();
107 public static readonly string AI_CONFIG_IMPORT_IFC_CUSTOM_TRIANGULATION = AssimpPINVOKE.AI_CONFIG_IMPORT_IFC_CUSTOM_TRIANGULATION_get();
152108 public static readonly int ASSIMP_CFLAGS_SHARED = AssimpPINVOKE.ASSIMP_CFLAGS_SHARED_get();
153109 public static readonly int ASSIMP_CFLAGS_STLPORT = AssimpPINVOKE.ASSIMP_CFLAGS_STLPORT_get();
154110 public static readonly int ASSIMP_CFLAGS_DEBUG = AssimpPINVOKE.ASSIMP_CFLAGS_DEBUG_get();
161117 public static readonly int AI_MAX_NUMBER_OF_COLOR_SETS = AssimpPINVOKE.AI_MAX_NUMBER_OF_COLOR_SETS_get();
162118 public static readonly int AI_MAX_NUMBER_OF_TEXTURECOORDS = AssimpPINVOKE.AI_MAX_NUMBER_OF_TEXTURECOORDS_get();
163119 public static readonly string AI_DEFAULT_MATERIAL_NAME = AssimpPINVOKE.AI_DEFAULT_MATERIAL_NAME_get();
164 public static readonly string AI_DEFAULT_TEXTURED_MATERIAL_NAME = AssimpPINVOKE.AI_DEFAULT_TEXTURED_MATERIAL_NAME_get();
165120 public static readonly string _AI_MATKEY_TEXTURE_BASE = AssimpPINVOKE._AI_MATKEY_TEXTURE_BASE_get();
166121 public static readonly string _AI_MATKEY_UVWSRC_BASE = AssimpPINVOKE._AI_MATKEY_UVWSRC_BASE_get();
167122 public static readonly string _AI_MATKEY_TEXOP_BASE = AssimpPINVOKE._AI_MATKEY_TEXOP_BASE_get();
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
208208 [DllImport("Assimp", EntryPoint="CSharp_AI_CONFIG_GLOB_MEASURE_TIME_get")]
209209 public static extern string AI_CONFIG_GLOB_MEASURE_TIME_get();
210210
211 [DllImport("Assimp", EntryPoint="CSharp_AI_CONFIG_PP_SBBC_MAX_BONES_get")]
212 public static extern string AI_CONFIG_PP_SBBC_MAX_BONES_get();
213
214 [DllImport("Assimp", EntryPoint="CSharp_AI_SBBC_DEFAULT_MAX_BONES_get")]
215 public static extern int AI_SBBC_DEFAULT_MAX_BONES_get();
216
211217 [DllImport("Assimp", EntryPoint="CSharp_AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE_get")]
212218 public static extern string AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE_get();
213219
220 [DllImport("Assimp", EntryPoint="CSharp_AI_CONFIG_PP_CT_TEXTURE_CHANNEL_INDEX_get")]
221 public static extern string AI_CONFIG_PP_CT_TEXTURE_CHANNEL_INDEX_get();
222
214223 [DllImport("Assimp", EntryPoint="CSharp_AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE_get")]
215224 public static extern string AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE_get();
216225
250259 [DllImport("Assimp", EntryPoint="CSharp_AI_LMW_MAX_WEIGHTS_get")]
251260 public static extern int AI_LMW_MAX_WEIGHTS_get();
252261
262 [DllImport("Assimp", EntryPoint="CSharp_AI_CONFIG_PP_DB_THRESHOLD_get")]
263 public static extern string AI_CONFIG_PP_DB_THRESHOLD_get();
264
265 [DllImport("Assimp", EntryPoint="CSharp_AI_DEBONE_THRESHOLD_get")]
266 public static extern double AI_DEBONE_THRESHOLD_get();
267
268 [DllImport("Assimp", EntryPoint="CSharp_AI_CONFIG_PP_DB_ALL_OR_NONE_get")]
269 public static extern string AI_CONFIG_PP_DB_ALL_OR_NONE_get();
270
253271 [DllImport("Assimp", EntryPoint="CSharp_PP_ICL_PTCACHE_SIZE_get")]
254272 public static extern int PP_ICL_PTCACHE_SIZE_get();
255273
346364 [DllImport("Assimp", EntryPoint="CSharp_AI_CONFIG_IMPORT_OGRE_MATERIAL_FILE_get")]
347365 public static extern string AI_CONFIG_IMPORT_OGRE_MATERIAL_FILE_get();
348366
367 [DllImport("Assimp", EntryPoint="CSharp_AI_CONFIG_IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME_get")]
368 public static extern string AI_CONFIG_IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME_get();
369
370 [DllImport("Assimp", EntryPoint="CSharp_AI_CONFIG_IMPORT_IFC_SKIP_SPACE_REPRESENTATIONS_get")]
371 public static extern string AI_CONFIG_IMPORT_IFC_SKIP_SPACE_REPRESENTATIONS_get();
372
373 [DllImport("Assimp", EntryPoint="CSharp_AI_CONFIG_IMPORT_IFC_SKIP_CURVE_REPRESENTATIONS_get")]
374 public static extern string AI_CONFIG_IMPORT_IFC_SKIP_CURVE_REPRESENTATIONS_get();
375
376 [DllImport("Assimp", EntryPoint="CSharp_AI_CONFIG_IMPORT_IFC_CUSTOM_TRIANGULATION_get")]
377 public static extern string AI_CONFIG_IMPORT_IFC_CUSTOM_TRIANGULATION_get();
378
349379 [DllImport("Assimp", EntryPoint="CSharp_MAXLEN_get")]
350380 public static extern uint MAXLEN_get();
351381
484514 [DllImport("Assimp", EntryPoint="CSharp_aiString___nequal__")]
485515 public static extern bool aiString___nequal__(HandleRef jarg1, HandleRef jarg2);
486516
517 [DllImport("Assimp", EntryPoint="CSharp_aiString_C_Str")]
518 public static extern string aiString_C_Str(HandleRef jarg1);
519
487520 [DllImport("Assimp", EntryPoint="CSharp_aiString_Length_set")]
488521 public static extern void aiString_Length_set(HandleRef jarg1, uint jarg2);
489522
583616 [DllImport("Assimp", EntryPoint="CSharp_aiGetCompileFlags")]
584617 public static extern uint aiGetCompileFlags();
585618
619 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mName_set")]
620 public static extern void aiCamera_mName_set(HandleRef jarg1, HandleRef jarg2);
621
622 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mName_get")]
623 public static extern IntPtr aiCamera_mName_get(HandleRef jarg1);
624
625 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mPosition_set")]
626 public static extern void aiCamera_mPosition_set(HandleRef jarg1, HandleRef jarg2);
627
628 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mPosition_get")]
629 public static extern IntPtr aiCamera_mPosition_get(HandleRef jarg1);
630
631 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mUp_set")]
632 public static extern void aiCamera_mUp_set(HandleRef jarg1, HandleRef jarg2);
633
634 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mUp_get")]
635 public static extern IntPtr aiCamera_mUp_get(HandleRef jarg1);
636
637 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mLookAt_set")]
638 public static extern void aiCamera_mLookAt_set(HandleRef jarg1, HandleRef jarg2);
639
640 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mLookAt_get")]
641 public static extern IntPtr aiCamera_mLookAt_get(HandleRef jarg1);
642
643 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mHorizontalFOV_set")]
644 public static extern void aiCamera_mHorizontalFOV_set(HandleRef jarg1, float jarg2);
645
646 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mHorizontalFOV_get")]
647 public static extern float aiCamera_mHorizontalFOV_get(HandleRef jarg1);
648
649 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mClipPlaneNear_set")]
650 public static extern void aiCamera_mClipPlaneNear_set(HandleRef jarg1, float jarg2);
651
652 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mClipPlaneNear_get")]
653 public static extern float aiCamera_mClipPlaneNear_get(HandleRef jarg1);
654
655 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mClipPlaneFar_set")]
656 public static extern void aiCamera_mClipPlaneFar_set(HandleRef jarg1, float jarg2);
657
658 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mClipPlaneFar_get")]
659 public static extern float aiCamera_mClipPlaneFar_get(HandleRef jarg1);
660
661 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mAspect_set")]
662 public static extern void aiCamera_mAspect_set(HandleRef jarg1, float jarg2);
663
664 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mAspect_get")]
665 public static extern float aiCamera_mAspect_get(HandleRef jarg1);
666
667 [DllImport("Assimp", EntryPoint="CSharp_new_aiCamera")]
668 public static extern IntPtr new_aiCamera();
669
670 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_GetCameraMatrix")]
671 public static extern void aiCamera_GetCameraMatrix(HandleRef jarg1, HandleRef jarg2);
672
673 [DllImport("Assimp", EntryPoint="CSharp_delete_aiCamera")]
674 public static extern void delete_aiCamera(HandleRef jarg1);
675
676 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mName_set")]
677 public static extern void aiLight_mName_set(HandleRef jarg1, HandleRef jarg2);
678
679 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mName_get")]
680 public static extern IntPtr aiLight_mName_get(HandleRef jarg1);
681
682 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mType_set")]
683 public static extern void aiLight_mType_set(HandleRef jarg1, int jarg2);
684
685 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mType_get")]
686 public static extern int aiLight_mType_get(HandleRef jarg1);
687
688 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mPosition_set")]
689 public static extern void aiLight_mPosition_set(HandleRef jarg1, HandleRef jarg2);
690
691 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mPosition_get")]
692 public static extern IntPtr aiLight_mPosition_get(HandleRef jarg1);
693
694 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mDirection_set")]
695 public static extern void aiLight_mDirection_set(HandleRef jarg1, HandleRef jarg2);
696
697 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mDirection_get")]
698 public static extern IntPtr aiLight_mDirection_get(HandleRef jarg1);
699
700 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAttenuationConstant_set")]
701 public static extern void aiLight_mAttenuationConstant_set(HandleRef jarg1, float jarg2);
702
703 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAttenuationConstant_get")]
704 public static extern float aiLight_mAttenuationConstant_get(HandleRef jarg1);
705
706 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAttenuationLinear_set")]
707 public static extern void aiLight_mAttenuationLinear_set(HandleRef jarg1, float jarg2);
708
709 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAttenuationLinear_get")]
710 public static extern float aiLight_mAttenuationLinear_get(HandleRef jarg1);
711
712 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAttenuationQuadratic_set")]
713 public static extern void aiLight_mAttenuationQuadratic_set(HandleRef jarg1, float jarg2);
714
715 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAttenuationQuadratic_get")]
716 public static extern float aiLight_mAttenuationQuadratic_get(HandleRef jarg1);
717
718 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mColorDiffuse_set")]
719 public static extern void aiLight_mColorDiffuse_set(HandleRef jarg1, HandleRef jarg2);
720
721 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mColorDiffuse_get")]
722 public static extern IntPtr aiLight_mColorDiffuse_get(HandleRef jarg1);
723
724 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mColorSpecular_set")]
725 public static extern void aiLight_mColorSpecular_set(HandleRef jarg1, HandleRef jarg2);
726
727 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mColorSpecular_get")]
728 public static extern IntPtr aiLight_mColorSpecular_get(HandleRef jarg1);
729
730 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mColorAmbient_set")]
731 public static extern void aiLight_mColorAmbient_set(HandleRef jarg1, HandleRef jarg2);
732
733 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mColorAmbient_get")]
734 public static extern IntPtr aiLight_mColorAmbient_get(HandleRef jarg1);
735
736 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAngleInnerCone_set")]
737 public static extern void aiLight_mAngleInnerCone_set(HandleRef jarg1, float jarg2);
738
739 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAngleInnerCone_get")]
740 public static extern float aiLight_mAngleInnerCone_get(HandleRef jarg1);
741
742 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAngleOuterCone_set")]
743 public static extern void aiLight_mAngleOuterCone_set(HandleRef jarg1, float jarg2);
744
745 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAngleOuterCone_get")]
746 public static extern float aiLight_mAngleOuterCone_get(HandleRef jarg1);
747
748 [DllImport("Assimp", EntryPoint="CSharp_new_aiLight")]
749 public static extern IntPtr new_aiLight();
750
751 [DllImport("Assimp", EntryPoint="CSharp_delete_aiLight")]
752 public static extern void delete_aiLight(HandleRef jarg1);
753
754 [DllImport("Assimp", EntryPoint="CSharp_aiVectorKey_mTime_set")]
755 public static extern void aiVectorKey_mTime_set(HandleRef jarg1, double jarg2);
756
757 [DllImport("Assimp", EntryPoint="CSharp_aiVectorKey_mTime_get")]
758 public static extern double aiVectorKey_mTime_get(HandleRef jarg1);
759
760 [DllImport("Assimp", EntryPoint="CSharp_aiVectorKey_mValue_set")]
761 public static extern void aiVectorKey_mValue_set(HandleRef jarg1, HandleRef jarg2);
762
763 [DllImport("Assimp", EntryPoint="CSharp_aiVectorKey_mValue_get")]
764 public static extern IntPtr aiVectorKey_mValue_get(HandleRef jarg1);
765
766 [DllImport("Assimp", EntryPoint="CSharp_new_aiVectorKey__SWIG_0")]
767 public static extern IntPtr new_aiVectorKey__SWIG_0();
768
769 [DllImport("Assimp", EntryPoint="CSharp_new_aiVectorKey__SWIG_1")]
770 public static extern IntPtr new_aiVectorKey__SWIG_1(double jarg1, HandleRef jarg2);
771
772 [DllImport("Assimp", EntryPoint="CSharp_aiVectorKey___equal__")]
773 public static extern bool aiVectorKey___equal__(HandleRef jarg1, HandleRef jarg2);
774
775 [DllImport("Assimp", EntryPoint="CSharp_aiVectorKey___nequal__")]
776 public static extern bool aiVectorKey___nequal__(HandleRef jarg1, HandleRef jarg2);
777
778 [DllImport("Assimp", EntryPoint="CSharp_aiVectorKey___smaller__")]
779 public static extern bool aiVectorKey___smaller__(HandleRef jarg1, HandleRef jarg2);
780
781 [DllImport("Assimp", EntryPoint="CSharp_aiVectorKey___greater__")]
782 public static extern bool aiVectorKey___greater__(HandleRef jarg1, HandleRef jarg2);
783
784 [DllImport("Assimp", EntryPoint="CSharp_delete_aiVectorKey")]
785 public static extern void delete_aiVectorKey(HandleRef jarg1);
786
787 [DllImport("Assimp", EntryPoint="CSharp_aiQuatKey_mTime_set")]
788 public static extern void aiQuatKey_mTime_set(HandleRef jarg1, double jarg2);
789
790 [DllImport("Assimp", EntryPoint="CSharp_aiQuatKey_mTime_get")]
791 public static extern double aiQuatKey_mTime_get(HandleRef jarg1);
792
793 [DllImport("Assimp", EntryPoint="CSharp_aiQuatKey_mValue_set")]
794 public static extern void aiQuatKey_mValue_set(HandleRef jarg1, HandleRef jarg2);
795
796 [DllImport("Assimp", EntryPoint="CSharp_aiQuatKey_mValue_get")]
797 public static extern IntPtr aiQuatKey_mValue_get(HandleRef jarg1);
798
799 [DllImport("Assimp", EntryPoint="CSharp_new_aiQuatKey__SWIG_0")]
800 public static extern IntPtr new_aiQuatKey__SWIG_0();
801
802 [DllImport("Assimp", EntryPoint="CSharp_new_aiQuatKey__SWIG_1")]
803 public static extern IntPtr new_aiQuatKey__SWIG_1(double jarg1, HandleRef jarg2);
804
805 [DllImport("Assimp", EntryPoint="CSharp_aiQuatKey___equal__")]
806 public static extern bool aiQuatKey___equal__(HandleRef jarg1, HandleRef jarg2);
807
808 [DllImport("Assimp", EntryPoint="CSharp_aiQuatKey___nequal__")]
809 public static extern bool aiQuatKey___nequal__(HandleRef jarg1, HandleRef jarg2);
810
811 [DllImport("Assimp", EntryPoint="CSharp_aiQuatKey___smaller__")]
812 public static extern bool aiQuatKey___smaller__(HandleRef jarg1, HandleRef jarg2);
813
814 [DllImport("Assimp", EntryPoint="CSharp_aiQuatKey___greater__")]
815 public static extern bool aiQuatKey___greater__(HandleRef jarg1, HandleRef jarg2);
816
817 [DllImport("Assimp", EntryPoint="CSharp_delete_aiQuatKey")]
818 public static extern void delete_aiQuatKey(HandleRef jarg1);
819
820 [DllImport("Assimp", EntryPoint="CSharp_aiMeshKey_mTime_set")]
821 public static extern void aiMeshKey_mTime_set(HandleRef jarg1, double jarg2);
822
823 [DllImport("Assimp", EntryPoint="CSharp_aiMeshKey_mTime_get")]
824 public static extern double aiMeshKey_mTime_get(HandleRef jarg1);
825
826 [DllImport("Assimp", EntryPoint="CSharp_aiMeshKey_mValue_set")]
827 public static extern void aiMeshKey_mValue_set(HandleRef jarg1, uint jarg2);
828
829 [DllImport("Assimp", EntryPoint="CSharp_aiMeshKey_mValue_get")]
830 public static extern uint aiMeshKey_mValue_get(HandleRef jarg1);
831
832 [DllImport("Assimp", EntryPoint="CSharp_new_aiMeshKey__SWIG_0")]
833 public static extern IntPtr new_aiMeshKey__SWIG_0();
834
835 [DllImport("Assimp", EntryPoint="CSharp_new_aiMeshKey__SWIG_1")]
836 public static extern IntPtr new_aiMeshKey__SWIG_1(double jarg1, uint jarg2);
837
838 [DllImport("Assimp", EntryPoint="CSharp_aiMeshKey___equal__")]
839 public static extern bool aiMeshKey___equal__(HandleRef jarg1, HandleRef jarg2);
840
841 [DllImport("Assimp", EntryPoint="CSharp_aiMeshKey___nequal__")]
842 public static extern bool aiMeshKey___nequal__(HandleRef jarg1, HandleRef jarg2);
843
844 [DllImport("Assimp", EntryPoint="CSharp_aiMeshKey___smaller__")]
845 public static extern bool aiMeshKey___smaller__(HandleRef jarg1, HandleRef jarg2);
846
847 [DllImport("Assimp", EntryPoint="CSharp_aiMeshKey___greater__")]
848 public static extern bool aiMeshKey___greater__(HandleRef jarg1, HandleRef jarg2);
849
850 [DllImport("Assimp", EntryPoint="CSharp_delete_aiMeshKey")]
851 public static extern void delete_aiMeshKey(HandleRef jarg1);
852
853 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mNodeName_set")]
854 public static extern void aiNodeAnim_mNodeName_set(HandleRef jarg1, HandleRef jarg2);
855
856 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mNodeName_get")]
857 public static extern IntPtr aiNodeAnim_mNodeName_get(HandleRef jarg1);
858
859 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mNumPositionKeys_set")]
860 public static extern void aiNodeAnim_mNumPositionKeys_set(HandleRef jarg1, uint jarg2);
861
862 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mNumPositionKeys_get")]
863 public static extern uint aiNodeAnim_mNumPositionKeys_get(HandleRef jarg1);
864
865 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mNumRotationKeys_set")]
866 public static extern void aiNodeAnim_mNumRotationKeys_set(HandleRef jarg1, uint jarg2);
867
868 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mNumRotationKeys_get")]
869 public static extern uint aiNodeAnim_mNumRotationKeys_get(HandleRef jarg1);
870
871 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mNumScalingKeys_set")]
872 public static extern void aiNodeAnim_mNumScalingKeys_set(HandleRef jarg1, uint jarg2);
873
874 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mNumScalingKeys_get")]
875 public static extern uint aiNodeAnim_mNumScalingKeys_get(HandleRef jarg1);
876
877 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mPreState_set")]
878 public static extern void aiNodeAnim_mPreState_set(HandleRef jarg1, int jarg2);
879
880 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mPreState_get")]
881 public static extern int aiNodeAnim_mPreState_get(HandleRef jarg1);
882
883 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mPostState_set")]
884 public static extern void aiNodeAnim_mPostState_set(HandleRef jarg1, int jarg2);
885
886 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mPostState_get")]
887 public static extern int aiNodeAnim_mPostState_get(HandleRef jarg1);
888
889 [DllImport("Assimp", EntryPoint="CSharp_new_aiNodeAnim")]
890 public static extern IntPtr new_aiNodeAnim();
891
892 [DllImport("Assimp", EntryPoint="CSharp_delete_aiNodeAnim")]
893 public static extern void delete_aiNodeAnim(HandleRef jarg1);
894
895 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_GetmPositionKeys")]
896 public static extern IntPtr aiNodeAnim_GetmPositionKeys(HandleRef jarg1);
897
898 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_GetmRotationKeys")]
899 public static extern IntPtr aiNodeAnim_GetmRotationKeys(HandleRef jarg1);
900
901 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_GetmScalingKeys")]
902 public static extern IntPtr aiNodeAnim_GetmScalingKeys(HandleRef jarg1);
903
904 [DllImport("Assimp", EntryPoint="CSharp_aiMeshAnim_mName_set")]
905 public static extern void aiMeshAnim_mName_set(HandleRef jarg1, HandleRef jarg2);
906
907 [DllImport("Assimp", EntryPoint="CSharp_aiMeshAnim_mName_get")]
908 public static extern IntPtr aiMeshAnim_mName_get(HandleRef jarg1);
909
910 [DllImport("Assimp", EntryPoint="CSharp_aiMeshAnim_mNumKeys_set")]
911 public static extern void aiMeshAnim_mNumKeys_set(HandleRef jarg1, uint jarg2);
912
913 [DllImport("Assimp", EntryPoint="CSharp_aiMeshAnim_mNumKeys_get")]
914 public static extern uint aiMeshAnim_mNumKeys_get(HandleRef jarg1);
915
916 [DllImport("Assimp", EntryPoint="CSharp_new_aiMeshAnim")]
917 public static extern IntPtr new_aiMeshAnim();
918
919 [DllImport("Assimp", EntryPoint="CSharp_delete_aiMeshAnim")]
920 public static extern void delete_aiMeshAnim(HandleRef jarg1);
921
922 [DllImport("Assimp", EntryPoint="CSharp_aiMeshAnim_GetmKeys")]
923 public static extern IntPtr aiMeshAnim_GetmKeys(HandleRef jarg1);
924
925 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mName_set")]
926 public static extern void aiAnimation_mName_set(HandleRef jarg1, HandleRef jarg2);
927
928 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mName_get")]
929 public static extern IntPtr aiAnimation_mName_get(HandleRef jarg1);
930
931 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mDuration_set")]
932 public static extern void aiAnimation_mDuration_set(HandleRef jarg1, double jarg2);
933
934 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mDuration_get")]
935 public static extern double aiAnimation_mDuration_get(HandleRef jarg1);
936
937 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mTicksPerSecond_set")]
938 public static extern void aiAnimation_mTicksPerSecond_set(HandleRef jarg1, double jarg2);
939
940 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mTicksPerSecond_get")]
941 public static extern double aiAnimation_mTicksPerSecond_get(HandleRef jarg1);
942
943 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mNumChannels_set")]
944 public static extern void aiAnimation_mNumChannels_set(HandleRef jarg1, uint jarg2);
945
946 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mNumChannels_get")]
947 public static extern uint aiAnimation_mNumChannels_get(HandleRef jarg1);
948
949 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mNumMeshChannels_set")]
950 public static extern void aiAnimation_mNumMeshChannels_set(HandleRef jarg1, uint jarg2);
951
952 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mNumMeshChannels_get")]
953 public static extern uint aiAnimation_mNumMeshChannels_get(HandleRef jarg1);
954
955 [DllImport("Assimp", EntryPoint="CSharp_new_aiAnimation")]
956 public static extern IntPtr new_aiAnimation();
957
958 [DllImport("Assimp", EntryPoint="CSharp_delete_aiAnimation")]
959 public static extern void delete_aiAnimation(HandleRef jarg1);
960
961 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_GetmChannels")]
962 public static extern IntPtr aiAnimation_GetmChannels(HandleRef jarg1);
963
964 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_GetmMeshChannels")]
965 public static extern IntPtr aiAnimation_GetmMeshChannels(HandleRef jarg1);
966
967 [DllImport("Assimp", EntryPoint="CSharp_AI_MAX_FACE_INDICES_get")]
968 public static extern int AI_MAX_FACE_INDICES_get();
969
970 [DllImport("Assimp", EntryPoint="CSharp_AI_MAX_BONE_WEIGHTS_get")]
971 public static extern int AI_MAX_BONE_WEIGHTS_get();
972
973 [DllImport("Assimp", EntryPoint="CSharp_AI_MAX_VERTICES_get")]
974 public static extern int AI_MAX_VERTICES_get();
975
976 [DllImport("Assimp", EntryPoint="CSharp_AI_MAX_FACES_get")]
977 public static extern int AI_MAX_FACES_get();
978
979 [DllImport("Assimp", EntryPoint="CSharp_AI_MAX_NUMBER_OF_COLOR_SETS_get")]
980 public static extern int AI_MAX_NUMBER_OF_COLOR_SETS_get();
981
982 [DllImport("Assimp", EntryPoint="CSharp_AI_MAX_NUMBER_OF_TEXTURECOORDS_get")]
983 public static extern int AI_MAX_NUMBER_OF_TEXTURECOORDS_get();
984
985 [DllImport("Assimp", EntryPoint="CSharp_aiFace_mNumIndices_set")]
986 public static extern void aiFace_mNumIndices_set(HandleRef jarg1, uint jarg2);
987
988 [DllImport("Assimp", EntryPoint="CSharp_aiFace_mNumIndices_get")]
989 public static extern uint aiFace_mNumIndices_get(HandleRef jarg1);
990
991 [DllImport("Assimp", EntryPoint="CSharp_new_aiFace__SWIG_0")]
992 public static extern IntPtr new_aiFace__SWIG_0();
993
994 [DllImport("Assimp", EntryPoint="CSharp_delete_aiFace")]
995 public static extern void delete_aiFace(HandleRef jarg1);
996
997 [DllImport("Assimp", EntryPoint="CSharp_new_aiFace__SWIG_1")]
998 public static extern IntPtr new_aiFace__SWIG_1(HandleRef jarg1);
999
1000 [DllImport("Assimp", EntryPoint="CSharp_aiFace___set__")]
1001 public static extern IntPtr aiFace___set__(HandleRef jarg1, HandleRef jarg2);
1002
1003 [DllImport("Assimp", EntryPoint="CSharp_aiFace___equal__")]
1004 public static extern bool aiFace___equal__(HandleRef jarg1, HandleRef jarg2);
1005
1006 [DllImport("Assimp", EntryPoint="CSharp_aiFace___nequal__")]
1007 public static extern bool aiFace___nequal__(HandleRef jarg1, HandleRef jarg2);
1008
1009 [DllImport("Assimp", EntryPoint="CSharp_aiFace_GetmIndices")]
1010 public static extern IntPtr aiFace_GetmIndices(HandleRef jarg1);
1011
1012 [DllImport("Assimp", EntryPoint="CSharp_aiVertexWeight_mVertexId_set")]
1013 public static extern void aiVertexWeight_mVertexId_set(HandleRef jarg1, uint jarg2);
1014
1015 [DllImport("Assimp", EntryPoint="CSharp_aiVertexWeight_mVertexId_get")]
1016 public static extern uint aiVertexWeight_mVertexId_get(HandleRef jarg1);
1017
1018 [DllImport("Assimp", EntryPoint="CSharp_aiVertexWeight_mWeight_set")]
1019 public static extern void aiVertexWeight_mWeight_set(HandleRef jarg1, float jarg2);
1020
1021 [DllImport("Assimp", EntryPoint="CSharp_aiVertexWeight_mWeight_get")]
1022 public static extern float aiVertexWeight_mWeight_get(HandleRef jarg1);
1023
1024 [DllImport("Assimp", EntryPoint="CSharp_new_aiVertexWeight__SWIG_0")]
1025 public static extern IntPtr new_aiVertexWeight__SWIG_0();
1026
1027 [DllImport("Assimp", EntryPoint="CSharp_new_aiVertexWeight__SWIG_1")]
1028 public static extern IntPtr new_aiVertexWeight__SWIG_1(uint jarg1, float jarg2);
1029
1030 [DllImport("Assimp", EntryPoint="CSharp_delete_aiVertexWeight")]
1031 public static extern void delete_aiVertexWeight(HandleRef jarg1);
1032
1033 [DllImport("Assimp", EntryPoint="CSharp_aiBone_mName_set")]
1034 public static extern void aiBone_mName_set(HandleRef jarg1, HandleRef jarg2);
1035
1036 [DllImport("Assimp", EntryPoint="CSharp_aiBone_mName_get")]
1037 public static extern IntPtr aiBone_mName_get(HandleRef jarg1);
1038
1039 [DllImport("Assimp", EntryPoint="CSharp_aiBone_mNumWeights_set")]
1040 public static extern void aiBone_mNumWeights_set(HandleRef jarg1, uint jarg2);
1041
1042 [DllImport("Assimp", EntryPoint="CSharp_aiBone_mNumWeights_get")]
1043 public static extern uint aiBone_mNumWeights_get(HandleRef jarg1);
1044
1045 [DllImport("Assimp", EntryPoint="CSharp_aiBone_mOffsetMatrix_set")]
1046 public static extern void aiBone_mOffsetMatrix_set(HandleRef jarg1, HandleRef jarg2);
1047
1048 [DllImport("Assimp", EntryPoint="CSharp_aiBone_mOffsetMatrix_get")]
1049 public static extern IntPtr aiBone_mOffsetMatrix_get(HandleRef jarg1);
1050
1051 [DllImport("Assimp", EntryPoint="CSharp_new_aiBone__SWIG_0")]
1052 public static extern IntPtr new_aiBone__SWIG_0();
1053
1054 [DllImport("Assimp", EntryPoint="CSharp_new_aiBone__SWIG_1")]
1055 public static extern IntPtr new_aiBone__SWIG_1(HandleRef jarg1);
1056
1057 [DllImport("Assimp", EntryPoint="CSharp_delete_aiBone")]
1058 public static extern void delete_aiBone(HandleRef jarg1);
1059
1060 [DllImport("Assimp", EntryPoint="CSharp_aiBone_GetmWeights")]
1061 public static extern IntPtr aiBone_GetmWeights(HandleRef jarg1);
1062
1063 [DllImport("Assimp", EntryPoint="CSharp_aiAnimMesh_mBitangents_set")]
1064 public static extern void aiAnimMesh_mBitangents_set(HandleRef jarg1, HandleRef jarg2);
1065
1066 [DllImport("Assimp", EntryPoint="CSharp_aiAnimMesh_mBitangents_get")]
1067 public static extern IntPtr aiAnimMesh_mBitangents_get(HandleRef jarg1);
1068
1069 [DllImport("Assimp", EntryPoint="CSharp_aiAnimMesh_mNumVertices_set")]
1070 public static extern void aiAnimMesh_mNumVertices_set(HandleRef jarg1, uint jarg2);
1071
1072 [DllImport("Assimp", EntryPoint="CSharp_aiAnimMesh_mNumVertices_get")]
1073 public static extern uint aiAnimMesh_mNumVertices_get(HandleRef jarg1);
1074
1075 [DllImport("Assimp", EntryPoint="CSharp_new_aiAnimMesh")]
1076 public static extern IntPtr new_aiAnimMesh();
1077
1078 [DllImport("Assimp", EntryPoint="CSharp_delete_aiAnimMesh")]
1079 public static extern void delete_aiAnimMesh(HandleRef jarg1);
1080
1081 [DllImport("Assimp", EntryPoint="CSharp_aiAnimMesh_HasPositions")]
1082 public static extern bool aiAnimMesh_HasPositions(HandleRef jarg1);
1083
1084 [DllImport("Assimp", EntryPoint="CSharp_aiAnimMesh_HasNormals")]
1085 public static extern bool aiAnimMesh_HasNormals(HandleRef jarg1);
1086
1087 [DllImport("Assimp", EntryPoint="CSharp_aiAnimMesh_HasTangentsAndBitangents")]
1088 public static extern bool aiAnimMesh_HasTangentsAndBitangents(HandleRef jarg1);
1089
1090 [DllImport("Assimp", EntryPoint="CSharp_aiAnimMesh_HasVertexColors")]
1091 public static extern bool aiAnimMesh_HasVertexColors(HandleRef jarg1, uint jarg2);
1092
1093 [DllImport("Assimp", EntryPoint="CSharp_aiAnimMesh_HasTextureCoords")]
1094 public static extern bool aiAnimMesh_HasTextureCoords(HandleRef jarg1, uint jarg2);
1095
1096 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mPrimitiveTypes_set")]
1097 public static extern void aiMesh_mPrimitiveTypes_set(HandleRef jarg1, uint jarg2);
1098
1099 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mPrimitiveTypes_get")]
1100 public static extern uint aiMesh_mPrimitiveTypes_get(HandleRef jarg1);
1101
1102 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mNumVertices_set")]
1103 public static extern void aiMesh_mNumVertices_set(HandleRef jarg1, uint jarg2);
1104
1105 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mNumVertices_get")]
1106 public static extern uint aiMesh_mNumVertices_get(HandleRef jarg1);
1107
1108 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mNumFaces_set")]
1109 public static extern void aiMesh_mNumFaces_set(HandleRef jarg1, uint jarg2);
1110
1111 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mNumFaces_get")]
1112 public static extern uint aiMesh_mNumFaces_get(HandleRef jarg1);
1113
1114 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mNumBones_set")]
1115 public static extern void aiMesh_mNumBones_set(HandleRef jarg1, uint jarg2);
1116
1117 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mNumBones_get")]
1118 public static extern uint aiMesh_mNumBones_get(HandleRef jarg1);
1119
1120 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mMaterialIndex_set")]
1121 public static extern void aiMesh_mMaterialIndex_set(HandleRef jarg1, uint jarg2);
1122
1123 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mMaterialIndex_get")]
1124 public static extern uint aiMesh_mMaterialIndex_get(HandleRef jarg1);
1125
1126 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mName_set")]
1127 public static extern void aiMesh_mName_set(HandleRef jarg1, HandleRef jarg2);
1128
1129 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mName_get")]
1130 public static extern IntPtr aiMesh_mName_get(HandleRef jarg1);
1131
1132 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mNumAnimMeshes_set")]
1133 public static extern void aiMesh_mNumAnimMeshes_set(HandleRef jarg1, uint jarg2);
1134
1135 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mNumAnimMeshes_get")]
1136 public static extern uint aiMesh_mNumAnimMeshes_get(HandleRef jarg1);
1137
1138 [DllImport("Assimp", EntryPoint="CSharp_new_aiMesh")]
1139 public static extern IntPtr new_aiMesh();
1140
1141 [DllImport("Assimp", EntryPoint="CSharp_delete_aiMesh")]
1142 public static extern void delete_aiMesh(HandleRef jarg1);
1143
1144 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_HasPositions")]
1145 public static extern bool aiMesh_HasPositions(HandleRef jarg1);
1146
1147 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_HasFaces")]
1148 public static extern bool aiMesh_HasFaces(HandleRef jarg1);
1149
1150 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_HasNormals")]
1151 public static extern bool aiMesh_HasNormals(HandleRef jarg1);
1152
1153 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_HasTangentsAndBitangents")]
1154 public static extern bool aiMesh_HasTangentsAndBitangents(HandleRef jarg1);
1155
1156 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_HasVertexColors")]
1157 public static extern bool aiMesh_HasVertexColors(HandleRef jarg1, uint jarg2);
1158
1159 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_HasTextureCoords")]
1160 public static extern bool aiMesh_HasTextureCoords(HandleRef jarg1, uint jarg2);
1161
1162 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetNumUVChannels")]
1163 public static extern uint aiMesh_GetNumUVChannels(HandleRef jarg1);
1164
1165 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetNumColorChannels")]
1166 public static extern uint aiMesh_GetNumColorChannels(HandleRef jarg1);
1167
1168 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_HasBones")]
1169 public static extern bool aiMesh_HasBones(HandleRef jarg1);
1170
1171 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmAnimMeshes")]
1172 public static extern IntPtr aiMesh_GetmAnimMeshes(HandleRef jarg1);
1173
1174 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmBitangents")]
1175 public static extern IntPtr aiMesh_GetmBitangents(HandleRef jarg1);
1176
1177 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmBones")]
1178 public static extern IntPtr aiMesh_GetmBones(HandleRef jarg1);
1179
1180 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmColors")]
1181 public static extern IntPtr aiMesh_GetmColors(HandleRef jarg1);
1182
1183 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmFaces")]
1184 public static extern IntPtr aiMesh_GetmFaces(HandleRef jarg1);
1185
1186 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmNormals")]
1187 public static extern IntPtr aiMesh_GetmNormals(HandleRef jarg1);
1188
1189 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmTangents")]
1190 public static extern IntPtr aiMesh_GetmTangents(HandleRef jarg1);
1191
1192 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmTextureCoords")]
1193 public static extern IntPtr aiMesh_GetmTextureCoords(HandleRef jarg1);
1194
1195 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmNumUVComponents")]
1196 public static extern IntPtr aiMesh_GetmNumUVComponents(HandleRef jarg1);
1197
1198 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmVertices")]
1199 public static extern IntPtr aiMesh_GetmVertices(HandleRef jarg1);
1200
1201 [DllImport("Assimp", EntryPoint="CSharp_AI_DEFAULT_MATERIAL_NAME_get")]
1202 public static extern string AI_DEFAULT_MATERIAL_NAME_get();
1203
1204 [DllImport("Assimp", EntryPoint="CSharp_aiUVTransform_mTranslation_set")]
1205 public static extern void aiUVTransform_mTranslation_set(HandleRef jarg1, HandleRef jarg2);
1206
1207 [DllImport("Assimp", EntryPoint="CSharp_aiUVTransform_mTranslation_get")]
1208 public static extern IntPtr aiUVTransform_mTranslation_get(HandleRef jarg1);
1209
1210 [DllImport("Assimp", EntryPoint="CSharp_aiUVTransform_mScaling_set")]
1211 public static extern void aiUVTransform_mScaling_set(HandleRef jarg1, HandleRef jarg2);
1212
1213 [DllImport("Assimp", EntryPoint="CSharp_aiUVTransform_mScaling_get")]
1214 public static extern IntPtr aiUVTransform_mScaling_get(HandleRef jarg1);
1215
1216 [DllImport("Assimp", EntryPoint="CSharp_aiUVTransform_mRotation_set")]
1217 public static extern void aiUVTransform_mRotation_set(HandleRef jarg1, float jarg2);
1218
1219 [DllImport("Assimp", EntryPoint="CSharp_aiUVTransform_mRotation_get")]
1220 public static extern float aiUVTransform_mRotation_get(HandleRef jarg1);
1221
1222 [DllImport("Assimp", EntryPoint="CSharp_new_aiUVTransform")]
1223 public static extern IntPtr new_aiUVTransform();
1224
1225 [DllImport("Assimp", EntryPoint="CSharp_delete_aiUVTransform")]
1226 public static extern void delete_aiUVTransform(HandleRef jarg1);
1227
1228 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mKey_set")]
1229 public static extern void aiMaterialProperty_mKey_set(HandleRef jarg1, HandleRef jarg2);
1230
1231 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mKey_get")]
1232 public static extern IntPtr aiMaterialProperty_mKey_get(HandleRef jarg1);
1233
1234 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mSemantic_set")]
1235 public static extern void aiMaterialProperty_mSemantic_set(HandleRef jarg1, uint jarg2);
1236
1237 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mSemantic_get")]
1238 public static extern uint aiMaterialProperty_mSemantic_get(HandleRef jarg1);
1239
1240 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mIndex_set")]
1241 public static extern void aiMaterialProperty_mIndex_set(HandleRef jarg1, uint jarg2);
1242
1243 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mIndex_get")]
1244 public static extern uint aiMaterialProperty_mIndex_get(HandleRef jarg1);
1245
1246 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mDataLength_set")]
1247 public static extern void aiMaterialProperty_mDataLength_set(HandleRef jarg1, uint jarg2);
1248
1249 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mDataLength_get")]
1250 public static extern uint aiMaterialProperty_mDataLength_get(HandleRef jarg1);
1251
1252 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mType_set")]
1253 public static extern void aiMaterialProperty_mType_set(HandleRef jarg1, int jarg2);
1254
1255 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mType_get")]
1256 public static extern int aiMaterialProperty_mType_get(HandleRef jarg1);
1257
1258 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mData_set")]
1259 public static extern void aiMaterialProperty_mData_set(HandleRef jarg1, string jarg2);
1260
1261 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mData_get")]
1262 public static extern string aiMaterialProperty_mData_get(HandleRef jarg1);
1263
1264 [DllImport("Assimp", EntryPoint="CSharp_new_aiMaterialProperty")]
1265 public static extern IntPtr new_aiMaterialProperty();
1266
1267 [DllImport("Assimp", EntryPoint="CSharp_delete_aiMaterialProperty")]
1268 public static extern void delete_aiMaterialProperty(HandleRef jarg1);
1269
1270 [DllImport("Assimp", EntryPoint="CSharp_new_aiMaterial")]
1271 public static extern IntPtr new_aiMaterial();
1272
1273 [DllImport("Assimp", EntryPoint="CSharp_delete_aiMaterial")]
1274 public static extern void delete_aiMaterial(HandleRef jarg1);
1275
1276 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureCount")]
1277 public static extern uint aiMaterial_GetTextureCount(HandleRef jarg1, int jarg2);
1278
1279 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_AddBinaryProperty")]
1280 public static extern int aiMaterial_AddBinaryProperty(HandleRef jarg1, HandleRef jarg2, uint jarg3, string jarg4, uint jarg5, uint jarg6, int jarg7);
1281
1282 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_AddProperty__SWIG_0")]
1283 public static extern int aiMaterial_AddProperty__SWIG_0(HandleRef jarg1, HandleRef jarg2, string jarg3, uint jarg4, uint jarg5);
1284
1285 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_AddProperty__SWIG_1")]
1286 public static extern int aiMaterial_AddProperty__SWIG_1(HandleRef jarg1, HandleRef jarg2, string jarg3, uint jarg4);
1287
1288 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_AddProperty__SWIG_2")]
1289 public static extern int aiMaterial_AddProperty__SWIG_2(HandleRef jarg1, HandleRef jarg2, string jarg3);
1290
1291 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_RemoveProperty__SWIG_0")]
1292 public static extern int aiMaterial_RemoveProperty__SWIG_0(HandleRef jarg1, string jarg2, uint jarg3, uint jarg4);
1293
1294 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_RemoveProperty__SWIG_1")]
1295 public static extern int aiMaterial_RemoveProperty__SWIG_1(HandleRef jarg1, string jarg2, uint jarg3);
1296
1297 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_RemoveProperty__SWIG_2")]
1298 public static extern int aiMaterial_RemoveProperty__SWIG_2(HandleRef jarg1, string jarg2);
1299
1300 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_Clear")]
1301 public static extern void aiMaterial_Clear(HandleRef jarg1);
1302
1303 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_CopyPropertyList")]
1304 public static extern void aiMaterial_CopyPropertyList(HandleRef jarg1, HandleRef jarg2);
1305
1306 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetDiffuse")]
1307 public static extern bool aiMaterial_GetDiffuse(HandleRef jarg1, HandleRef jarg2);
1308
1309 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetSpecular")]
1310 public static extern bool aiMaterial_GetSpecular(HandleRef jarg1, HandleRef jarg2);
1311
1312 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetAmbient")]
1313 public static extern bool aiMaterial_GetAmbient(HandleRef jarg1, HandleRef jarg2);
1314
1315 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetEmissive")]
1316 public static extern bool aiMaterial_GetEmissive(HandleRef jarg1, HandleRef jarg2);
1317
1318 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetOpacity")]
1319 public static extern bool aiMaterial_GetOpacity(HandleRef jarg1, ref float jarg2);
1320
1321 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetShininessStrength")]
1322 public static extern bool aiMaterial_GetShininessStrength(HandleRef jarg1, ref float jarg2);
1323
1324 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetShadingModel")]
1325 public static extern bool aiMaterial_GetShadingModel(HandleRef jarg1, ref int jarg2);
1326
1327 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTexFlagsDiffuse0")]
1328 public static extern bool aiMaterial_GetTexFlagsDiffuse0(HandleRef jarg1, ref int jarg2);
1329
1330 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetMappingModeUDiffuse0")]
1331 public static extern bool aiMaterial_GetMappingModeUDiffuse0(HandleRef jarg1, ref int jarg2);
1332
1333 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetMappingModeVDiffuse0")]
1334 public static extern bool aiMaterial_GetMappingModeVDiffuse0(HandleRef jarg1, ref int jarg2);
1335
1336 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureDiffuse0")]
1337 public static extern bool aiMaterial_GetTextureDiffuse0(HandleRef jarg1, HandleRef jarg2);
1338
1339 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureSpecular0")]
1340 public static extern bool aiMaterial_GetTextureSpecular0(HandleRef jarg1, HandleRef jarg2);
1341
1342 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureOpacity0")]
1343 public static extern bool aiMaterial_GetTextureOpacity0(HandleRef jarg1, HandleRef jarg2);
1344
1345 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureAmbient0")]
1346 public static extern bool aiMaterial_GetTextureAmbient0(HandleRef jarg1, HandleRef jarg2);
1347
1348 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureEmissive0")]
1349 public static extern bool aiMaterial_GetTextureEmissive0(HandleRef jarg1, HandleRef jarg2);
1350
1351 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureShininess0")]
1352 public static extern bool aiMaterial_GetTextureShininess0(HandleRef jarg1, HandleRef jarg2);
1353
1354 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureLightmap0")]
1355 public static extern bool aiMaterial_GetTextureLightmap0(HandleRef jarg1, HandleRef jarg2);
1356
1357 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureNormals0")]
1358 public static extern bool aiMaterial_GetTextureNormals0(HandleRef jarg1, HandleRef jarg2);
1359
1360 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureHeight0")]
1361 public static extern bool aiMaterial_GetTextureHeight0(HandleRef jarg1, HandleRef jarg2);
1362
1363 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetGlobalBackgroundImage")]
1364 public static extern bool aiMaterial_GetGlobalBackgroundImage(HandleRef jarg1, HandleRef jarg2);
1365
1366 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTwoSided")]
1367 public static extern bool aiMaterial_GetTwoSided(HandleRef jarg1, ref int jarg2);
1368
1369 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_TEXTURE_BASE_get")]
1370 public static extern string _AI_MATKEY_TEXTURE_BASE_get();
1371
1372 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_UVWSRC_BASE_get")]
1373 public static extern string _AI_MATKEY_UVWSRC_BASE_get();
1374
1375 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_TEXOP_BASE_get")]
1376 public static extern string _AI_MATKEY_TEXOP_BASE_get();
1377
1378 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_MAPPING_BASE_get")]
1379 public static extern string _AI_MATKEY_MAPPING_BASE_get();
1380
1381 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_TEXBLEND_BASE_get")]
1382 public static extern string _AI_MATKEY_TEXBLEND_BASE_get();
1383
1384 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_MAPPINGMODE_U_BASE_get")]
1385 public static extern string _AI_MATKEY_MAPPINGMODE_U_BASE_get();
1386
1387 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_MAPPINGMODE_V_BASE_get")]
1388 public static extern string _AI_MATKEY_MAPPINGMODE_V_BASE_get();
1389
1390 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_TEXMAP_AXIS_BASE_get")]
1391 public static extern string _AI_MATKEY_TEXMAP_AXIS_BASE_get();
1392
1393 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_UVTRANSFORM_BASE_get")]
1394 public static extern string _AI_MATKEY_UVTRANSFORM_BASE_get();
1395
1396 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_TEXFLAGS_BASE_get")]
1397 public static extern string _AI_MATKEY_TEXFLAGS_BASE_get();
1398
1399 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mName_set")]
1400 public static extern void aiNode_mName_set(HandleRef jarg1, HandleRef jarg2);
1401
1402 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mName_get")]
1403 public static extern IntPtr aiNode_mName_get(HandleRef jarg1);
1404
1405 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mTransformation_set")]
1406 public static extern void aiNode_mTransformation_set(HandleRef jarg1, HandleRef jarg2);
1407
1408 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mTransformation_get")]
1409 public static extern IntPtr aiNode_mTransformation_get(HandleRef jarg1);
1410
1411 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mParent_set")]
1412 public static extern void aiNode_mParent_set(HandleRef jarg1, HandleRef jarg2);
1413
1414 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mParent_get")]
1415 public static extern IntPtr aiNode_mParent_get(HandleRef jarg1);
1416
1417 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mNumChildren_set")]
1418 public static extern void aiNode_mNumChildren_set(HandleRef jarg1, uint jarg2);
1419
1420 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mNumChildren_get")]
1421 public static extern uint aiNode_mNumChildren_get(HandleRef jarg1);
1422
1423 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mNumMeshes_set")]
1424 public static extern void aiNode_mNumMeshes_set(HandleRef jarg1, uint jarg2);
1425
1426 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mNumMeshes_get")]
1427 public static extern uint aiNode_mNumMeshes_get(HandleRef jarg1);
1428
1429 [DllImport("Assimp", EntryPoint="CSharp_new_aiNode__SWIG_0")]
1430 public static extern IntPtr new_aiNode__SWIG_0();
1431
1432 [DllImport("Assimp", EntryPoint="CSharp_new_aiNode__SWIG_1")]
1433 public static extern IntPtr new_aiNode__SWIG_1(string jarg1);
1434
1435 [DllImport("Assimp", EntryPoint="CSharp_delete_aiNode")]
1436 public static extern void delete_aiNode(HandleRef jarg1);
1437
1438 [DllImport("Assimp", EntryPoint="CSharp_aiNode_FindNode__SWIG_0")]
1439 public static extern IntPtr aiNode_FindNode__SWIG_0(HandleRef jarg1, HandleRef jarg2);
1440
1441 [DllImport("Assimp", EntryPoint="CSharp_aiNode_FindNode__SWIG_1")]
1442 public static extern IntPtr aiNode_FindNode__SWIG_1(HandleRef jarg1, string jarg2);
1443
1444 [DllImport("Assimp", EntryPoint="CSharp_aiNode_GetmChildren")]
1445 public static extern IntPtr aiNode_GetmChildren(HandleRef jarg1);
1446
1447 [DllImport("Assimp", EntryPoint="CSharp_aiNode_GetmMeshes")]
1448 public static extern IntPtr aiNode_GetmMeshes(HandleRef jarg1);
1449
1450 [DllImport("Assimp", EntryPoint="CSharp_AI_SCENE_FLAGS_INCOMPLETE_get")]
1451 public static extern int AI_SCENE_FLAGS_INCOMPLETE_get();
1452
1453 [DllImport("Assimp", EntryPoint="CSharp_AI_SCENE_FLAGS_VALIDATED_get")]
1454 public static extern int AI_SCENE_FLAGS_VALIDATED_get();
1455
1456 [DllImport("Assimp", EntryPoint="CSharp_AI_SCENE_FLAGS_VALIDATION_WARNING_get")]
1457 public static extern int AI_SCENE_FLAGS_VALIDATION_WARNING_get();
1458
1459 [DllImport("Assimp", EntryPoint="CSharp_AI_SCENE_FLAGS_NON_VERBOSE_FORMAT_get")]
1460 public static extern int AI_SCENE_FLAGS_NON_VERBOSE_FORMAT_get();
1461
1462 [DllImport("Assimp", EntryPoint="CSharp_AI_SCENE_FLAGS_TERRAIN_get")]
1463 public static extern int AI_SCENE_FLAGS_TERRAIN_get();
1464
1465 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mFlags_set")]
1466 public static extern void aiScene_mFlags_set(HandleRef jarg1, uint jarg2);
1467
1468 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mFlags_get")]
1469 public static extern uint aiScene_mFlags_get(HandleRef jarg1);
1470
1471 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mRootNode_set")]
1472 public static extern void aiScene_mRootNode_set(HandleRef jarg1, HandleRef jarg2);
1473
1474 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mRootNode_get")]
1475 public static extern IntPtr aiScene_mRootNode_get(HandleRef jarg1);
1476
1477 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumMeshes_set")]
1478 public static extern void aiScene_mNumMeshes_set(HandleRef jarg1, uint jarg2);
1479
1480 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumMeshes_get")]
1481 public static extern uint aiScene_mNumMeshes_get(HandleRef jarg1);
1482
1483 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumMaterials_set")]
1484 public static extern void aiScene_mNumMaterials_set(HandleRef jarg1, uint jarg2);
1485
1486 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumMaterials_get")]
1487 public static extern uint aiScene_mNumMaterials_get(HandleRef jarg1);
1488
1489 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumAnimations_set")]
1490 public static extern void aiScene_mNumAnimations_set(HandleRef jarg1, uint jarg2);
1491
1492 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumAnimations_get")]
1493 public static extern uint aiScene_mNumAnimations_get(HandleRef jarg1);
1494
1495 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumTextures_set")]
1496 public static extern void aiScene_mNumTextures_set(HandleRef jarg1, uint jarg2);
1497
1498 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumTextures_get")]
1499 public static extern uint aiScene_mNumTextures_get(HandleRef jarg1);
1500
1501 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumLights_set")]
1502 public static extern void aiScene_mNumLights_set(HandleRef jarg1, uint jarg2);
1503
1504 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumLights_get")]
1505 public static extern uint aiScene_mNumLights_get(HandleRef jarg1);
1506
1507 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumCameras_set")]
1508 public static extern void aiScene_mNumCameras_set(HandleRef jarg1, uint jarg2);
1509
1510 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumCameras_get")]
1511 public static extern uint aiScene_mNumCameras_get(HandleRef jarg1);
1512
1513 [DllImport("Assimp", EntryPoint="CSharp_new_aiScene")]
1514 public static extern IntPtr new_aiScene();
1515
1516 [DllImport("Assimp", EntryPoint="CSharp_delete_aiScene")]
1517 public static extern void delete_aiScene(HandleRef jarg1);
1518
1519 [DllImport("Assimp", EntryPoint="CSharp_aiScene_HasMeshes")]
1520 public static extern bool aiScene_HasMeshes(HandleRef jarg1);
1521
1522 [DllImport("Assimp", EntryPoint="CSharp_aiScene_HasMaterials")]
1523 public static extern bool aiScene_HasMaterials(HandleRef jarg1);
1524
1525 [DllImport("Assimp", EntryPoint="CSharp_aiScene_HasLights")]
1526 public static extern bool aiScene_HasLights(HandleRef jarg1);
1527
1528 [DllImport("Assimp", EntryPoint="CSharp_aiScene_HasTextures")]
1529 public static extern bool aiScene_HasTextures(HandleRef jarg1);
1530
1531 [DllImport("Assimp", EntryPoint="CSharp_aiScene_HasCameras")]
1532 public static extern bool aiScene_HasCameras(HandleRef jarg1);
1533
1534 [DllImport("Assimp", EntryPoint="CSharp_aiScene_HasAnimations")]
1535 public static extern bool aiScene_HasAnimations(HandleRef jarg1);
1536
1537 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mPrivate_set")]
1538 public static extern void aiScene_mPrivate_set(HandleRef jarg1, HandleRef jarg2);
1539
1540 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mPrivate_get")]
1541 public static extern IntPtr aiScene_mPrivate_get(HandleRef jarg1);
1542
1543 [DllImport("Assimp", EntryPoint="CSharp_aiScene_GetmAnimations")]
1544 public static extern IntPtr aiScene_GetmAnimations(HandleRef jarg1);
1545
1546 [DllImport("Assimp", EntryPoint="CSharp_aiScene_GetmCameras")]
1547 public static extern IntPtr aiScene_GetmCameras(HandleRef jarg1);
1548
1549 [DllImport("Assimp", EntryPoint="CSharp_aiScene_GetmLights")]
1550 public static extern IntPtr aiScene_GetmLights(HandleRef jarg1);
1551
1552 [DllImport("Assimp", EntryPoint="CSharp_aiScene_GetmMaterials")]
1553 public static extern IntPtr aiScene_GetmMaterials(HandleRef jarg1);
1554
1555 [DllImport("Assimp", EntryPoint="CSharp_aiScene_GetmMeshes")]
1556 public static extern IntPtr aiScene_GetmMeshes(HandleRef jarg1);
1557
1558 [DllImport("Assimp", EntryPoint="CSharp_aiScene_GetmTextures")]
1559 public static extern IntPtr aiScene_GetmTextures(HandleRef jarg1);
1560
1561 [DllImport("Assimp", EntryPoint="CSharp_aiTexel_b_set")]
1562 public static extern void aiTexel_b_set(HandleRef jarg1, byte jarg2);
1563
1564 [DllImport("Assimp", EntryPoint="CSharp_aiTexel_b_get")]
1565 public static extern byte aiTexel_b_get(HandleRef jarg1);
1566
1567 [DllImport("Assimp", EntryPoint="CSharp_aiTexel_g_set")]
1568 public static extern void aiTexel_g_set(HandleRef jarg1, byte jarg2);
1569
1570 [DllImport("Assimp", EntryPoint="CSharp_aiTexel_g_get")]
1571 public static extern byte aiTexel_g_get(HandleRef jarg1);
1572
1573 [DllImport("Assimp", EntryPoint="CSharp_aiTexel_r_set")]
1574 public static extern void aiTexel_r_set(HandleRef jarg1, byte jarg2);
1575
1576 [DllImport("Assimp", EntryPoint="CSharp_aiTexel_r_get")]
1577 public static extern byte aiTexel_r_get(HandleRef jarg1);
1578
1579 [DllImport("Assimp", EntryPoint="CSharp_aiTexel_a_set")]
1580 public static extern void aiTexel_a_set(HandleRef jarg1, byte jarg2);
1581
1582 [DllImport("Assimp", EntryPoint="CSharp_aiTexel_a_get")]
1583 public static extern byte aiTexel_a_get(HandleRef jarg1);
1584
1585 [DllImport("Assimp", EntryPoint="CSharp_aiTexel___equal__")]
1586 public static extern bool aiTexel___equal__(HandleRef jarg1, HandleRef jarg2);
1587
1588 [DllImport("Assimp", EntryPoint="CSharp_aiTexel___nequal__")]
1589 public static extern bool aiTexel___nequal__(HandleRef jarg1, HandleRef jarg2);
1590
1591 [DllImport("Assimp", EntryPoint="CSharp_new_aiTexel")]
1592 public static extern IntPtr new_aiTexel();
1593
1594 [DllImport("Assimp", EntryPoint="CSharp_delete_aiTexel")]
1595 public static extern void delete_aiTexel(HandleRef jarg1);
1596
1597 [DllImport("Assimp", EntryPoint="CSharp_aiTexture_mWidth_set")]
1598 public static extern void aiTexture_mWidth_set(HandleRef jarg1, uint jarg2);
1599
1600 [DllImport("Assimp", EntryPoint="CSharp_aiTexture_mWidth_get")]
1601 public static extern uint aiTexture_mWidth_get(HandleRef jarg1);
1602
1603 [DllImport("Assimp", EntryPoint="CSharp_aiTexture_mHeight_set")]
1604 public static extern void aiTexture_mHeight_set(HandleRef jarg1, uint jarg2);
1605
1606 [DllImport("Assimp", EntryPoint="CSharp_aiTexture_mHeight_get")]
1607 public static extern uint aiTexture_mHeight_get(HandleRef jarg1);
1608
1609 [DllImport("Assimp", EntryPoint="CSharp_aiTexture_achFormatHint_set")]
1610 public static extern void aiTexture_achFormatHint_set(HandleRef jarg1, string jarg2);
1611
1612 [DllImport("Assimp", EntryPoint="CSharp_aiTexture_achFormatHint_get")]
1613 public static extern string aiTexture_achFormatHint_get(HandleRef jarg1);
1614
1615 [DllImport("Assimp", EntryPoint="CSharp_aiTexture_pcData_set")]
1616 public static extern void aiTexture_pcData_set(HandleRef jarg1, HandleRef jarg2);
1617
1618 [DllImport("Assimp", EntryPoint="CSharp_aiTexture_pcData_get")]
1619 public static extern IntPtr aiTexture_pcData_get(HandleRef jarg1);
1620
1621 [DllImport("Assimp", EntryPoint="CSharp_aiTexture_CheckFormat")]
1622 public static extern bool aiTexture_CheckFormat(HandleRef jarg1, string jarg2);
1623
1624 [DllImport("Assimp", EntryPoint="CSharp_new_aiTexture")]
1625 public static extern IntPtr new_aiTexture();
1626
1627 [DllImport("Assimp", EntryPoint="CSharp_delete_aiTexture")]
1628 public static extern void delete_aiTexture(HandleRef jarg1);
1629
1630 [DllImport("Assimp", EntryPoint="CSharp_AI_PROPERTY_WAS_NOT_EXISTING_get")]
1631 public static extern int AI_PROPERTY_WAS_NOT_EXISTING_get();
1632
1633 [DllImport("Assimp", EntryPoint="CSharp_new_Importer__SWIG_0")]
1634 public static extern IntPtr new_Importer__SWIG_0();
1635
1636 [DllImport("Assimp", EntryPoint="CSharp_new_Importer__SWIG_1")]
1637 public static extern IntPtr new_Importer__SWIG_1(HandleRef jarg1);
1638
1639 [DllImport("Assimp", EntryPoint="CSharp_delete_Importer")]
1640 public static extern void delete_Importer(HandleRef jarg1);
1641
1642 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetPropertyInteger__SWIG_0")]
1643 public static extern int Importer_GetPropertyInteger__SWIG_0(HandleRef jarg1, string jarg2, int jarg3);
1644
1645 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetPropertyInteger__SWIG_1")]
1646 public static extern int Importer_GetPropertyInteger__SWIG_1(HandleRef jarg1, string jarg2);
1647
1648 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetPropertyBool__SWIG_0")]
1649 public static extern bool Importer_GetPropertyBool__SWIG_0(HandleRef jarg1, string jarg2, bool jarg3);
1650
1651 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetPropertyBool__SWIG_1")]
1652 public static extern bool Importer_GetPropertyBool__SWIG_1(HandleRef jarg1, string jarg2);
1653
1654 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetPropertyFloat__SWIG_0")]
1655 public static extern float Importer_GetPropertyFloat__SWIG_0(HandleRef jarg1, string jarg2, float jarg3);
1656
1657 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetPropertyFloat__SWIG_1")]
1658 public static extern float Importer_GetPropertyFloat__SWIG_1(HandleRef jarg1, string jarg2);
1659
1660 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetPropertyString__SWIG_0")]
1661 public static extern string Importer_GetPropertyString__SWIG_0(HandleRef jarg1, string jarg2, string jarg3);
1662
1663 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetPropertyString__SWIG_1")]
1664 public static extern string Importer_GetPropertyString__SWIG_1(HandleRef jarg1, string jarg2);
1665
1666 [DllImport("Assimp", EntryPoint="CSharp_Importer_IsDefaultIOHandler")]
1667 public static extern bool Importer_IsDefaultIOHandler(HandleRef jarg1);
1668
1669 [DllImport("Assimp", EntryPoint="CSharp_Importer_SetProgressHandler")]
1670 public static extern void Importer_SetProgressHandler(HandleRef jarg1, HandleRef jarg2);
1671
1672 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetProgressHandler")]
1673 public static extern IntPtr Importer_GetProgressHandler(HandleRef jarg1);
1674
1675 [DllImport("Assimp", EntryPoint="CSharp_Importer_IsDefaultProgressHandler")]
1676 public static extern bool Importer_IsDefaultProgressHandler(HandleRef jarg1);
1677
1678 [DllImport("Assimp", EntryPoint="CSharp_Importer_ValidateFlags")]
1679 public static extern bool Importer_ValidateFlags(HandleRef jarg1, uint jarg2);
1680
1681 [DllImport("Assimp", EntryPoint="CSharp_Importer_ReadFile__SWIG_0")]
1682 public static extern IntPtr Importer_ReadFile__SWIG_0(HandleRef jarg1, string jarg2, uint jarg3);
1683
1684 [DllImport("Assimp", EntryPoint="CSharp_Importer_FreeScene")]
1685 public static extern void Importer_FreeScene(HandleRef jarg1);
1686
1687 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetErrorString")]
1688 public static extern string Importer_GetErrorString(HandleRef jarg1);
1689
1690 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetScene")]
1691 public static extern IntPtr Importer_GetScene(HandleRef jarg1);
1692
1693 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetOrphanedScene")]
1694 public static extern IntPtr Importer_GetOrphanedScene(HandleRef jarg1);
1695
1696 [DllImport("Assimp", EntryPoint="CSharp_Importer_IsExtensionSupported__SWIG_0")]
1697 public static extern bool Importer_IsExtensionSupported__SWIG_0(HandleRef jarg1, string jarg2);
1698
1699 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetExtensionList__SWIG_0")]
1700 public static extern void Importer_GetExtensionList__SWIG_0(HandleRef jarg1, HandleRef jarg2);
1701
1702 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetExtensionList__SWIG_1")]
1703 public static extern void Importer_GetExtensionList__SWIG_1(HandleRef jarg1, HandleRef jarg2);
1704
1705 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetImporterCount")]
1706 public static extern uint Importer_GetImporterCount(HandleRef jarg1);
1707
1708 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetImporterInfo")]
1709 public static extern IntPtr Importer_GetImporterInfo(HandleRef jarg1, uint jarg2);
1710
1711 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetImporter__SWIG_0")]
1712 public static extern IntPtr Importer_GetImporter__SWIG_0(HandleRef jarg1, uint jarg2);
1713
1714 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetImporter__SWIG_1")]
1715 public static extern IntPtr Importer_GetImporter__SWIG_1(HandleRef jarg1, string jarg2);
1716
1717 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetImporterIndex")]
1718 public static extern uint Importer_GetImporterIndex(HandleRef jarg1, string jarg2);
1719
1720 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetMemoryRequirements")]
1721 public static extern void Importer_GetMemoryRequirements(HandleRef jarg1, HandleRef jarg2);
1722
1723 [DllImport("Assimp", EntryPoint="CSharp_Importer_SetExtraVerbose")]
1724 public static extern void Importer_SetExtraVerbose(HandleRef jarg1, bool jarg2);
1725
1726 [DllImport("Assimp", EntryPoint="CSharp_Importer_Pimpl__SWIG_0")]
1727 public static extern IntPtr Importer_Pimpl__SWIG_0(HandleRef jarg1);
1728
1729 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetExtensionList__SWIG_2")]
1730 public static extern string Importer_GetExtensionList__SWIG_2(HandleRef jarg1);
1731
1732 [DllImport("Assimp", EntryPoint="CSharp_delete_ProgressHandler")]
1733 public static extern void delete_ProgressHandler(HandleRef jarg1);
1734
1735 [DllImport("Assimp", EntryPoint="CSharp_ProgressHandler_Update__SWIG_0")]
1736 public static extern bool ProgressHandler_Update__SWIG_0(HandleRef jarg1, float jarg2);
1737
1738 [DllImport("Assimp", EntryPoint="CSharp_ProgressHandler_Update__SWIG_1")]
1739 public static extern bool ProgressHandler_Update__SWIG_1(HandleRef jarg1);
1740
1741 [DllImport("Assimp", EntryPoint="CSharp_new_aiColor4D__SWIG_0")]
1742 public static extern IntPtr new_aiColor4D__SWIG_0();
1743
1744 [DllImport("Assimp", EntryPoint="CSharp_new_aiColor4D__SWIG_1")]
1745 public static extern IntPtr new_aiColor4D__SWIG_1(float jarg1, float jarg2, float jarg3, float jarg4);
1746
1747 [DllImport("Assimp", EntryPoint="CSharp_new_aiColor4D__SWIG_2")]
1748 public static extern IntPtr new_aiColor4D__SWIG_2(float jarg1);
1749
1750 [DllImport("Assimp", EntryPoint="CSharp_new_aiColor4D__SWIG_3")]
1751 public static extern IntPtr new_aiColor4D__SWIG_3(HandleRef jarg1);
1752
1753 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D___addnset__")]
1754 public static extern IntPtr aiColor4D___addnset__(HandleRef jarg1, HandleRef jarg2);
1755
1756 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D___subnset__")]
1757 public static extern IntPtr aiColor4D___subnset__(HandleRef jarg1, HandleRef jarg2);
1758
1759 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D___mulnset__")]
1760 public static extern IntPtr aiColor4D___mulnset__(HandleRef jarg1, float jarg2);
1761
1762 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D___divnset__")]
1763 public static extern IntPtr aiColor4D___divnset__(HandleRef jarg1, float jarg2);
1764
1765 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D___equal__")]
1766 public static extern bool aiColor4D___equal__(HandleRef jarg1, HandleRef jarg2);
1767
1768 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D___nequal__")]
1769 public static extern bool aiColor4D___nequal__(HandleRef jarg1, HandleRef jarg2);
1770
1771 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D___idx____SWIG_0")]
1772 public static extern float aiColor4D___idx____SWIG_0(HandleRef jarg1, uint jarg2);
1773
1774 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D_IsBlack")]
1775 public static extern bool aiColor4D_IsBlack(HandleRef jarg1);
1776
1777 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D_r_set")]
1778 public static extern void aiColor4D_r_set(HandleRef jarg1, float jarg2);
1779
1780 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D_r_get")]
1781 public static extern float aiColor4D_r_get(HandleRef jarg1);
1782
1783 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D_g_set")]
1784 public static extern void aiColor4D_g_set(HandleRef jarg1, float jarg2);
1785
1786 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D_g_get")]
1787 public static extern float aiColor4D_g_get(HandleRef jarg1);
1788
1789 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D_b_set")]
1790 public static extern void aiColor4D_b_set(HandleRef jarg1, float jarg2);
1791
1792 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D_b_get")]
1793 public static extern float aiColor4D_b_get(HandleRef jarg1);
1794
1795 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D_a_set")]
1796 public static extern void aiColor4D_a_set(HandleRef jarg1, float jarg2);
1797
1798 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D_a_get")]
1799 public static extern float aiColor4D_a_get(HandleRef jarg1);
1800
1801 [DllImport("Assimp", EntryPoint="CSharp_delete_aiColor4D")]
1802 public static extern void delete_aiColor4D(HandleRef jarg1);
1803
1804 [DllImport("Assimp", EntryPoint="CSharp_new_aiVector3D__SWIG_0")]
1805 public static extern IntPtr new_aiVector3D__SWIG_0();
1806
1807 [DllImport("Assimp", EntryPoint="CSharp_new_aiVector3D__SWIG_1")]
1808 public static extern IntPtr new_aiVector3D__SWIG_1(float jarg1, float jarg2, float jarg3);
1809
1810 [DllImport("Assimp", EntryPoint="CSharp_new_aiVector3D__SWIG_2")]
1811 public static extern IntPtr new_aiVector3D__SWIG_2(float jarg1);
1812
1813 [DllImport("Assimp", EntryPoint="CSharp_new_aiVector3D__SWIG_3")]
1814 public static extern IntPtr new_aiVector3D__SWIG_3(HandleRef jarg1);
1815
1816 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D___addnset__")]
1817 public static extern IntPtr aiVector3D___addnset__(HandleRef jarg1, HandleRef jarg2);
1818
1819 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D___subnset__")]
1820 public static extern IntPtr aiVector3D___subnset__(HandleRef jarg1, HandleRef jarg2);
1821
1822 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D___mulnset____SWIG_0")]
1823 public static extern IntPtr aiVector3D___mulnset____SWIG_0(HandleRef jarg1, float jarg2);
1824
1825 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D___divnset__")]
1826 public static extern IntPtr aiVector3D___divnset__(HandleRef jarg1, float jarg2);
1827
1828 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D___mulnset____SWIG_1")]
1829 public static extern IntPtr aiVector3D___mulnset____SWIG_1(HandleRef jarg1, HandleRef jarg2);
1830
1831 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D___mulnset____SWIG_2")]
1832 public static extern IntPtr aiVector3D___mulnset____SWIG_2(HandleRef jarg1, HandleRef jarg2);
1833
1834 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D___idx____SWIG_0")]
1835 public static extern float aiVector3D___idx____SWIG_0(HandleRef jarg1, uint jarg2);
1836
1837 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D___equal__")]
1838 public static extern bool aiVector3D___equal__(HandleRef jarg1, HandleRef jarg2);
1839
1840 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D___nequal__")]
1841 public static extern bool aiVector3D___nequal__(HandleRef jarg1, HandleRef jarg2);
1842
1843 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_Set")]
1844 public static extern void aiVector3D_Set(HandleRef jarg1, float jarg2, float jarg3, float jarg4);
1845
1846 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_SquareLength")]
1847 public static extern float aiVector3D_SquareLength(HandleRef jarg1);
1848
1849 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_Length")]
1850 public static extern float aiVector3D_Length(HandleRef jarg1);
1851
1852 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_Normalize")]
1853 public static extern IntPtr aiVector3D_Normalize(HandleRef jarg1);
1854
1855 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_SymMul")]
1856 public static extern IntPtr aiVector3D_SymMul(HandleRef jarg1, HandleRef jarg2);
1857
1858 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_x_set")]
1859 public static extern void aiVector3D_x_set(HandleRef jarg1, float jarg2);
1860
1861 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_x_get")]
1862 public static extern float aiVector3D_x_get(HandleRef jarg1);
1863
1864 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_y_set")]
1865 public static extern void aiVector3D_y_set(HandleRef jarg1, float jarg2);
1866
1867 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_y_get")]
1868 public static extern float aiVector3D_y_get(HandleRef jarg1);
1869
1870 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_z_set")]
1871 public static extern void aiVector3D_z_set(HandleRef jarg1, float jarg2);
1872
1873 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_z_get")]
1874 public static extern float aiVector3D_z_get(HandleRef jarg1);
1875
1876 [DllImport("Assimp", EntryPoint="CSharp_delete_aiVector3D")]
1877 public static extern void delete_aiVector3D(HandleRef jarg1);
1878
5861879 [DllImport("Assimp", EntryPoint="CSharp_new_aiVector2D__SWIG_0")]
5871880 public static extern IntPtr new_aiVector2D__SWIG_0();
5881881
6491942 [DllImport("Assimp", EntryPoint="CSharp_delete_aiVector2D")]
6501943 public static extern void delete_aiVector2D(HandleRef jarg1);
6511944
652 [DllImport("Assimp", EntryPoint="CSharp___add__")]
653 public static extern IntPtr __add__(HandleRef jarg1, HandleRef jarg2);
654
655 [DllImport("Assimp", EntryPoint="CSharp___sub____SWIG_0")]
656 public static extern IntPtr __sub____SWIG_0(HandleRef jarg1, HandleRef jarg2);
657
658 [DllImport("Assimp", EntryPoint="CSharp___mul____SWIG_0")]
659 public static extern float __mul____SWIG_0(HandleRef jarg1, HandleRef jarg2);
660
661 [DllImport("Assimp", EntryPoint="CSharp___mul____SWIG_1")]
662 public static extern IntPtr __mul____SWIG_1(float jarg1, HandleRef jarg2);
663
664 [DllImport("Assimp", EntryPoint="CSharp___mul____SWIG_2")]
665 public static extern IntPtr __mul____SWIG_2(HandleRef jarg1, float jarg2);
666
667 [DllImport("Assimp", EntryPoint="CSharp___div____SWIG_0")]
668 public static extern IntPtr __div____SWIG_0(HandleRef jarg1, float jarg2);
669
670 [DllImport("Assimp", EntryPoint="CSharp___div____SWIG_1")]
671 public static extern IntPtr __div____SWIG_1(HandleRef jarg1, HandleRef jarg2);
672
673 [DllImport("Assimp", EntryPoint="CSharp___sub____SWIG_1")]
674 public static extern IntPtr __sub____SWIG_1(HandleRef jarg1);
675
676 [DllImport("Assimp", EntryPoint="CSharp_new_aiVector3D__SWIG_0")]
677 public static extern IntPtr new_aiVector3D__SWIG_0();
678
679 [DllImport("Assimp", EntryPoint="CSharp_new_aiVector3D__SWIG_1")]
680 public static extern IntPtr new_aiVector3D__SWIG_1(float jarg1, float jarg2, float jarg3);
681
682 [DllImport("Assimp", EntryPoint="CSharp_new_aiVector3D__SWIG_2")]
683 public static extern IntPtr new_aiVector3D__SWIG_2(float jarg1);
684
685 [DllImport("Assimp", EntryPoint="CSharp_new_aiVector3D__SWIG_3")]
686 public static extern IntPtr new_aiVector3D__SWIG_3(HandleRef jarg1);
687
688 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D___addnset__")]
689 public static extern IntPtr aiVector3D___addnset__(HandleRef jarg1, HandleRef jarg2);
690
691 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D___subnset__")]
692 public static extern IntPtr aiVector3D___subnset__(HandleRef jarg1, HandleRef jarg2);
693
694 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D___mulnset____SWIG_0")]
695 public static extern IntPtr aiVector3D___mulnset____SWIG_0(HandleRef jarg1, float jarg2);
696
697 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D___divnset__")]
698 public static extern IntPtr aiVector3D___divnset__(HandleRef jarg1, float jarg2);
699
700 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D___mulnset____SWIG_1")]
701 public static extern IntPtr aiVector3D___mulnset____SWIG_1(HandleRef jarg1, HandleRef jarg2);
702
703 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D___mulnset____SWIG_2")]
704 public static extern IntPtr aiVector3D___mulnset____SWIG_2(HandleRef jarg1, HandleRef jarg2);
705
706 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D___idx____SWIG_0")]
707 public static extern float aiVector3D___idx____SWIG_0(HandleRef jarg1, uint jarg2);
708
709 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D___equal__")]
710 public static extern bool aiVector3D___equal__(HandleRef jarg1, HandleRef jarg2);
711
712 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D___nequal__")]
713 public static extern bool aiVector3D___nequal__(HandleRef jarg1, HandleRef jarg2);
714
715 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_Set")]
716 public static extern void aiVector3D_Set(HandleRef jarg1, float jarg2, float jarg3, float jarg4);
717
718 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_SquareLength")]
719 public static extern float aiVector3D_SquareLength(HandleRef jarg1);
720
721 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_Length")]
722 public static extern float aiVector3D_Length(HandleRef jarg1);
723
724 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_Normalize")]
725 public static extern IntPtr aiVector3D_Normalize(HandleRef jarg1);
726
727 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_SymMul")]
728 public static extern IntPtr aiVector3D_SymMul(HandleRef jarg1, HandleRef jarg2);
729
730 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_x_set")]
731 public static extern void aiVector3D_x_set(HandleRef jarg1, float jarg2);
732
733 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_x_get")]
734 public static extern float aiVector3D_x_get(HandleRef jarg1);
735
736 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_y_set")]
737 public static extern void aiVector3D_y_set(HandleRef jarg1, float jarg2);
738
739 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_y_get")]
740 public static extern float aiVector3D_y_get(HandleRef jarg1);
741
742 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_z_set")]
743 public static extern void aiVector3D_z_set(HandleRef jarg1, float jarg2);
744
745 [DllImport("Assimp", EntryPoint="CSharp_aiVector3D_z_get")]
746 public static extern float aiVector3D_z_get(HandleRef jarg1);
747
748 [DllImport("Assimp", EntryPoint="CSharp_delete_aiVector3D")]
749 public static extern void delete_aiVector3D(HandleRef jarg1);
750
751 [DllImport("Assimp", EntryPoint="CSharp_new_aiColor4D__SWIG_0")]
752 public static extern IntPtr new_aiColor4D__SWIG_0();
753
754 [DllImport("Assimp", EntryPoint="CSharp_new_aiColor4D__SWIG_1")]
755 public static extern IntPtr new_aiColor4D__SWIG_1(float jarg1, float jarg2, float jarg3, float jarg4);
756
757 [DllImport("Assimp", EntryPoint="CSharp_new_aiColor4D__SWIG_2")]
758 public static extern IntPtr new_aiColor4D__SWIG_2(float jarg1);
759
760 [DllImport("Assimp", EntryPoint="CSharp_new_aiColor4D__SWIG_3")]
761 public static extern IntPtr new_aiColor4D__SWIG_3(HandleRef jarg1);
762
763 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D___addnset__")]
764 public static extern IntPtr aiColor4D___addnset__(HandleRef jarg1, HandleRef jarg2);
765
766 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D___subnset__")]
767 public static extern IntPtr aiColor4D___subnset__(HandleRef jarg1, HandleRef jarg2);
768
769 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D___mulnset__")]
770 public static extern IntPtr aiColor4D___mulnset__(HandleRef jarg1, float jarg2);
771
772 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D___divnset__")]
773 public static extern IntPtr aiColor4D___divnset__(HandleRef jarg1, float jarg2);
774
775 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D___equal__")]
776 public static extern bool aiColor4D___equal__(HandleRef jarg1, HandleRef jarg2);
777
778 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D___nequal__")]
779 public static extern bool aiColor4D___nequal__(HandleRef jarg1, HandleRef jarg2);
780
781 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D___idx____SWIG_0")]
782 public static extern float aiColor4D___idx____SWIG_0(HandleRef jarg1, uint jarg2);
783
784 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D_IsBlack")]
785 public static extern bool aiColor4D_IsBlack(HandleRef jarg1);
786
787 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D_r_set")]
788 public static extern void aiColor4D_r_set(HandleRef jarg1, float jarg2);
789
790 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D_r_get")]
791 public static extern float aiColor4D_r_get(HandleRef jarg1);
792
793 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D_g_set")]
794 public static extern void aiColor4D_g_set(HandleRef jarg1, float jarg2);
795
796 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D_g_get")]
797 public static extern float aiColor4D_g_get(HandleRef jarg1);
798
799 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D_b_set")]
800 public static extern void aiColor4D_b_set(HandleRef jarg1, float jarg2);
801
802 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D_b_get")]
803 public static extern float aiColor4D_b_get(HandleRef jarg1);
804
805 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D_a_set")]
806 public static extern void aiColor4D_a_set(HandleRef jarg1, float jarg2);
807
808 [DllImport("Assimp", EntryPoint="CSharp_aiColor4D_a_get")]
809 public static extern float aiColor4D_a_get(HandleRef jarg1);
810
811 [DllImport("Assimp", EntryPoint="CSharp_delete_aiColor4D")]
812 public static extern void delete_aiColor4D(HandleRef jarg1);
1945 [DllImport("Assimp", EntryPoint="CSharp_new_aiQuaternion__SWIG_0")]
1946 public static extern IntPtr new_aiQuaternion__SWIG_0();
1947
1948 [DllImport("Assimp", EntryPoint="CSharp_new_aiQuaternion__SWIG_1")]
1949 public static extern IntPtr new_aiQuaternion__SWIG_1(float jarg1, float jarg2, float jarg3, float jarg4);
1950
1951 [DllImport("Assimp", EntryPoint="CSharp_new_aiQuaternion__SWIG_2")]
1952 public static extern IntPtr new_aiQuaternion__SWIG_2(HandleRef jarg1);
1953
1954 [DllImport("Assimp", EntryPoint="CSharp_new_aiQuaternion__SWIG_3")]
1955 public static extern IntPtr new_aiQuaternion__SWIG_3(float jarg1, float jarg2, float jarg3);
1956
1957 [DllImport("Assimp", EntryPoint="CSharp_new_aiQuaternion__SWIG_4")]
1958 public static extern IntPtr new_aiQuaternion__SWIG_4(HandleRef jarg1, float jarg2);
1959
1960 [DllImport("Assimp", EntryPoint="CSharp_new_aiQuaternion__SWIG_5")]
1961 public static extern IntPtr new_aiQuaternion__SWIG_5(HandleRef jarg1);
1962
1963 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_GetMatrix")]
1964 public static extern IntPtr aiQuaternion_GetMatrix(HandleRef jarg1);
1965
1966 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion___equal__")]
1967 public static extern bool aiQuaternion___equal__(HandleRef jarg1, HandleRef jarg2);
1968
1969 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion___nequal__")]
1970 public static extern bool aiQuaternion___nequal__(HandleRef jarg1, HandleRef jarg2);
1971
1972 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_Normalize")]
1973 public static extern IntPtr aiQuaternion_Normalize(HandleRef jarg1);
1974
1975 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_Conjugate")]
1976 public static extern IntPtr aiQuaternion_Conjugate(HandleRef jarg1);
1977
1978 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_Rotate")]
1979 public static extern IntPtr aiQuaternion_Rotate(HandleRef jarg1, HandleRef jarg2);
1980
1981 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion___mul__")]
1982 public static extern IntPtr aiQuaternion___mul__(HandleRef jarg1, HandleRef jarg2);
1983
1984 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_Interpolate")]
1985 public static extern void aiQuaternion_Interpolate(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, float jarg4);
1986
1987 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_w_set")]
1988 public static extern void aiQuaternion_w_set(HandleRef jarg1, float jarg2);
1989
1990 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_w_get")]
1991 public static extern float aiQuaternion_w_get(HandleRef jarg1);
1992
1993 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_x_set")]
1994 public static extern void aiQuaternion_x_set(HandleRef jarg1, float jarg2);
1995
1996 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_x_get")]
1997 public static extern float aiQuaternion_x_get(HandleRef jarg1);
1998
1999 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_y_set")]
2000 public static extern void aiQuaternion_y_set(HandleRef jarg1, float jarg2);
2001
2002 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_y_get")]
2003 public static extern float aiQuaternion_y_get(HandleRef jarg1);
2004
2005 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_z_set")]
2006 public static extern void aiQuaternion_z_set(HandleRef jarg1, float jarg2);
2007
2008 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_z_get")]
2009 public static extern float aiQuaternion_z_get(HandleRef jarg1);
2010
2011 [DllImport("Assimp", EntryPoint="CSharp_delete_aiQuaternion")]
2012 public static extern void delete_aiQuaternion(HandleRef jarg1);
8132013
8142014 [DllImport("Assimp", EntryPoint="CSharp_new_aiMatrix3x3__SWIG_0")]
8152015 public static extern IntPtr new_aiMatrix3x3__SWIG_0();
8172017 [DllImport("Assimp", EntryPoint="CSharp_new_aiMatrix3x3__SWIG_1")]
8182018 public static extern IntPtr new_aiMatrix3x3__SWIG_1(float jarg1, float jarg2, float jarg3, float jarg4, float jarg5, float jarg6, float jarg7, float jarg8, float jarg9);
8192019
2020 [DllImport("Assimp", EntryPoint="CSharp_aiMatrix3x3___mulnset__")]
2021 public static extern IntPtr aiMatrix3x3___mulnset__(HandleRef jarg1, HandleRef jarg2);
2022
2023 [DllImport("Assimp", EntryPoint="CSharp_aiMatrix3x3___mul__")]
2024 public static extern IntPtr aiMatrix3x3___mul__(HandleRef jarg1, HandleRef jarg2);
2025
2026 [DllImport("Assimp", EntryPoint="CSharp_aiMatrix3x3___idx____SWIG_0")]
2027 public static extern IntPtr aiMatrix3x3___idx____SWIG_0(HandleRef jarg1, uint jarg2);
2028
2029 [DllImport("Assimp", EntryPoint="CSharp_aiMatrix3x3___equal__")]
2030 public static extern bool aiMatrix3x3___equal__(HandleRef jarg1, HandleRef jarg2);
2031
2032 [DllImport("Assimp", EntryPoint="CSharp_aiMatrix3x3___nequal__")]
2033 public static extern bool aiMatrix3x3___nequal__(HandleRef jarg1, HandleRef jarg2);
2034
8202035 [DllImport("Assimp", EntryPoint="CSharp_new_aiMatrix3x3__SWIG_2")]
8212036 public static extern IntPtr new_aiMatrix3x3__SWIG_2(HandleRef jarg1);
8222037
9072122 [DllImport("Assimp", EntryPoint="CSharp_new_aiMatrix4x4__SWIG_2")]
9082123 public static extern IntPtr new_aiMatrix4x4__SWIG_2(HandleRef jarg1);
9092124
2125 [DllImport("Assimp", EntryPoint="CSharp_aiMatrix4x4___idx____SWIG_0")]
2126 public static extern IntPtr aiMatrix4x4___idx____SWIG_0(HandleRef jarg1, uint jarg2);
2127
2128 [DllImport("Assimp", EntryPoint="CSharp_aiMatrix4x4___equal__")]
2129 public static extern bool aiMatrix4x4___equal__(HandleRef jarg1, HandleRef jarg2);
2130
2131 [DllImport("Assimp", EntryPoint="CSharp_aiMatrix4x4___nequal__")]
2132 public static extern bool aiMatrix4x4___nequal__(HandleRef jarg1, HandleRef jarg2);
2133
2134 [DllImport("Assimp", EntryPoint="CSharp_aiMatrix4x4___mulnset__")]
2135 public static extern IntPtr aiMatrix4x4___mulnset__(HandleRef jarg1, HandleRef jarg2);
2136
2137 [DllImport("Assimp", EntryPoint="CSharp_aiMatrix4x4___mul__")]
2138 public static extern IntPtr aiMatrix4x4___mul__(HandleRef jarg1, HandleRef jarg2);
2139
9102140 [DllImport("Assimp", EntryPoint="CSharp_aiMatrix4x4_Transpose")]
9112141 public static extern IntPtr aiMatrix4x4_Transpose(HandleRef jarg1);
9122142
10502280
10512281 [DllImport("Assimp", EntryPoint="CSharp_delete_aiMatrix4x4")]
10522282 public static extern void delete_aiMatrix4x4(HandleRef jarg1);
1053
1054 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mName_set")]
1055 public static extern void aiCamera_mName_set(HandleRef jarg1, HandleRef jarg2);
1056
1057 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mName_get")]
1058 public static extern IntPtr aiCamera_mName_get(HandleRef jarg1);
1059
1060 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mPosition_set")]
1061 public static extern void aiCamera_mPosition_set(HandleRef jarg1, HandleRef jarg2);
1062
1063 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mPosition_get")]
1064 public static extern IntPtr aiCamera_mPosition_get(HandleRef jarg1);
1065
1066 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mUp_set")]
1067 public static extern void aiCamera_mUp_set(HandleRef jarg1, HandleRef jarg2);
1068
1069 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mUp_get")]
1070 public static extern IntPtr aiCamera_mUp_get(HandleRef jarg1);
1071
1072 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mLookAt_set")]
1073 public static extern void aiCamera_mLookAt_set(HandleRef jarg1, HandleRef jarg2);
1074
1075 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mLookAt_get")]
1076 public static extern IntPtr aiCamera_mLookAt_get(HandleRef jarg1);
1077
1078 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mHorizontalFOV_set")]
1079 public static extern void aiCamera_mHorizontalFOV_set(HandleRef jarg1, float jarg2);
1080
1081 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mHorizontalFOV_get")]
1082 public static extern float aiCamera_mHorizontalFOV_get(HandleRef jarg1);
1083
1084 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mClipPlaneNear_set")]
1085 public static extern void aiCamera_mClipPlaneNear_set(HandleRef jarg1, float jarg2);
1086
1087 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mClipPlaneNear_get")]
1088 public static extern float aiCamera_mClipPlaneNear_get(HandleRef jarg1);
1089
1090 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mClipPlaneFar_set")]
1091 public static extern void aiCamera_mClipPlaneFar_set(HandleRef jarg1, float jarg2);
1092
1093 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mClipPlaneFar_get")]
1094 public static extern float aiCamera_mClipPlaneFar_get(HandleRef jarg1);
1095
1096 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mAspect_set")]
1097 public static extern void aiCamera_mAspect_set(HandleRef jarg1, float jarg2);
1098
1099 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_mAspect_get")]
1100 public static extern float aiCamera_mAspect_get(HandleRef jarg1);
1101
1102 [DllImport("Assimp", EntryPoint="CSharp_new_aiCamera")]
1103 public static extern IntPtr new_aiCamera();
1104
1105 [DllImport("Assimp", EntryPoint="CSharp_aiCamera_GetCameraMatrix")]
1106 public static extern void aiCamera_GetCameraMatrix(HandleRef jarg1, HandleRef jarg2);
1107
1108 [DllImport("Assimp", EntryPoint="CSharp_delete_aiCamera")]
1109 public static extern void delete_aiCamera(HandleRef jarg1);
1110
1111 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mName_set")]
1112 public static extern void aiLight_mName_set(HandleRef jarg1, HandleRef jarg2);
1113
1114 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mName_get")]
1115 public static extern IntPtr aiLight_mName_get(HandleRef jarg1);
1116
1117 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mType_set")]
1118 public static extern void aiLight_mType_set(HandleRef jarg1, int jarg2);
1119
1120 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mType_get")]
1121 public static extern int aiLight_mType_get(HandleRef jarg1);
1122
1123 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mPosition_set")]
1124 public static extern void aiLight_mPosition_set(HandleRef jarg1, HandleRef jarg2);
1125
1126 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mPosition_get")]
1127 public static extern IntPtr aiLight_mPosition_get(HandleRef jarg1);
1128
1129 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mDirection_set")]
1130 public static extern void aiLight_mDirection_set(HandleRef jarg1, HandleRef jarg2);
1131
1132 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mDirection_get")]
1133 public static extern IntPtr aiLight_mDirection_get(HandleRef jarg1);
1134
1135 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAttenuationConstant_set")]
1136 public static extern void aiLight_mAttenuationConstant_set(HandleRef jarg1, float jarg2);
1137
1138 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAttenuationConstant_get")]
1139 public static extern float aiLight_mAttenuationConstant_get(HandleRef jarg1);
1140
1141 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAttenuationLinear_set")]
1142 public static extern void aiLight_mAttenuationLinear_set(HandleRef jarg1, float jarg2);
1143
1144 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAttenuationLinear_get")]
1145 public static extern float aiLight_mAttenuationLinear_get(HandleRef jarg1);
1146
1147 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAttenuationQuadratic_set")]
1148 public static extern void aiLight_mAttenuationQuadratic_set(HandleRef jarg1, float jarg2);
1149
1150 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAttenuationQuadratic_get")]
1151 public static extern float aiLight_mAttenuationQuadratic_get(HandleRef jarg1);
1152
1153 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mColorDiffuse_set")]
1154 public static extern void aiLight_mColorDiffuse_set(HandleRef jarg1, HandleRef jarg2);
1155
1156 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mColorDiffuse_get")]
1157 public static extern IntPtr aiLight_mColorDiffuse_get(HandleRef jarg1);
1158
1159 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mColorSpecular_set")]
1160 public static extern void aiLight_mColorSpecular_set(HandleRef jarg1, HandleRef jarg2);
1161
1162 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mColorSpecular_get")]
1163 public static extern IntPtr aiLight_mColorSpecular_get(HandleRef jarg1);
1164
1165 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mColorAmbient_set")]
1166 public static extern void aiLight_mColorAmbient_set(HandleRef jarg1, HandleRef jarg2);
1167
1168 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mColorAmbient_get")]
1169 public static extern IntPtr aiLight_mColorAmbient_get(HandleRef jarg1);
1170
1171 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAngleInnerCone_set")]
1172 public static extern void aiLight_mAngleInnerCone_set(HandleRef jarg1, float jarg2);
1173
1174 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAngleInnerCone_get")]
1175 public static extern float aiLight_mAngleInnerCone_get(HandleRef jarg1);
1176
1177 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAngleOuterCone_set")]
1178 public static extern void aiLight_mAngleOuterCone_set(HandleRef jarg1, float jarg2);
1179
1180 [DllImport("Assimp", EntryPoint="CSharp_aiLight_mAngleOuterCone_get")]
1181 public static extern float aiLight_mAngleOuterCone_get(HandleRef jarg1);
1182
1183 [DllImport("Assimp", EntryPoint="CSharp_new_aiLight")]
1184 public static extern IntPtr new_aiLight();
1185
1186 [DllImport("Assimp", EntryPoint="CSharp_delete_aiLight")]
1187 public static extern void delete_aiLight(HandleRef jarg1);
1188
1189 [DllImport("Assimp", EntryPoint="CSharp_aiVectorKey_mTime_set")]
1190 public static extern void aiVectorKey_mTime_set(HandleRef jarg1, double jarg2);
1191
1192 [DllImport("Assimp", EntryPoint="CSharp_aiVectorKey_mTime_get")]
1193 public static extern double aiVectorKey_mTime_get(HandleRef jarg1);
1194
1195 [DllImport("Assimp", EntryPoint="CSharp_aiVectorKey_mValue_set")]
1196 public static extern void aiVectorKey_mValue_set(HandleRef jarg1, HandleRef jarg2);
1197
1198 [DllImport("Assimp", EntryPoint="CSharp_aiVectorKey_mValue_get")]
1199 public static extern IntPtr aiVectorKey_mValue_get(HandleRef jarg1);
1200
1201 [DllImport("Assimp", EntryPoint="CSharp_new_aiVectorKey__SWIG_0")]
1202 public static extern IntPtr new_aiVectorKey__SWIG_0();
1203
1204 [DllImport("Assimp", EntryPoint="CSharp_new_aiVectorKey__SWIG_1")]
1205 public static extern IntPtr new_aiVectorKey__SWIG_1(double jarg1, HandleRef jarg2);
1206
1207 [DllImport("Assimp", EntryPoint="CSharp_aiVectorKey___equal__")]
1208 public static extern bool aiVectorKey___equal__(HandleRef jarg1, HandleRef jarg2);
1209
1210 [DllImport("Assimp", EntryPoint="CSharp_aiVectorKey___nequal__")]
1211 public static extern bool aiVectorKey___nequal__(HandleRef jarg1, HandleRef jarg2);
1212
1213 [DllImport("Assimp", EntryPoint="CSharp_aiVectorKey___smaller__")]
1214 public static extern bool aiVectorKey___smaller__(HandleRef jarg1, HandleRef jarg2);
1215
1216 [DllImport("Assimp", EntryPoint="CSharp_aiVectorKey___greater__")]
1217 public static extern bool aiVectorKey___greater__(HandleRef jarg1, HandleRef jarg2);
1218
1219 [DllImport("Assimp", EntryPoint="CSharp_delete_aiVectorKey")]
1220 public static extern void delete_aiVectorKey(HandleRef jarg1);
1221
1222 [DllImport("Assimp", EntryPoint="CSharp_aiQuatKey_mTime_set")]
1223 public static extern void aiQuatKey_mTime_set(HandleRef jarg1, double jarg2);
1224
1225 [DllImport("Assimp", EntryPoint="CSharp_aiQuatKey_mTime_get")]
1226 public static extern double aiQuatKey_mTime_get(HandleRef jarg1);
1227
1228 [DllImport("Assimp", EntryPoint="CSharp_aiQuatKey_mValue_set")]
1229 public static extern void aiQuatKey_mValue_set(HandleRef jarg1, HandleRef jarg2);
1230
1231 [DllImport("Assimp", EntryPoint="CSharp_aiQuatKey_mValue_get")]
1232 public static extern IntPtr aiQuatKey_mValue_get(HandleRef jarg1);
1233
1234 [DllImport("Assimp", EntryPoint="CSharp_new_aiQuatKey__SWIG_0")]
1235 public static extern IntPtr new_aiQuatKey__SWIG_0();
1236
1237 [DllImport("Assimp", EntryPoint="CSharp_new_aiQuatKey__SWIG_1")]
1238 public static extern IntPtr new_aiQuatKey__SWIG_1(double jarg1, HandleRef jarg2);
1239
1240 [DllImport("Assimp", EntryPoint="CSharp_aiQuatKey___equal__")]
1241 public static extern bool aiQuatKey___equal__(HandleRef jarg1, HandleRef jarg2);
1242
1243 [DllImport("Assimp", EntryPoint="CSharp_aiQuatKey___nequal__")]
1244 public static extern bool aiQuatKey___nequal__(HandleRef jarg1, HandleRef jarg2);
1245
1246 [DllImport("Assimp", EntryPoint="CSharp_aiQuatKey___smaller__")]
1247 public static extern bool aiQuatKey___smaller__(HandleRef jarg1, HandleRef jarg2);
1248
1249 [DllImport("Assimp", EntryPoint="CSharp_aiQuatKey___greater__")]
1250 public static extern bool aiQuatKey___greater__(HandleRef jarg1, HandleRef jarg2);
1251
1252 [DllImport("Assimp", EntryPoint="CSharp_delete_aiQuatKey")]
1253 public static extern void delete_aiQuatKey(HandleRef jarg1);
1254
1255 [DllImport("Assimp", EntryPoint="CSharp_aiMeshKey_mTime_set")]
1256 public static extern void aiMeshKey_mTime_set(HandleRef jarg1, double jarg2);
1257
1258 [DllImport("Assimp", EntryPoint="CSharp_aiMeshKey_mTime_get")]
1259 public static extern double aiMeshKey_mTime_get(HandleRef jarg1);
1260
1261 [DllImport("Assimp", EntryPoint="CSharp_aiMeshKey_mValue_set")]
1262 public static extern void aiMeshKey_mValue_set(HandleRef jarg1, uint jarg2);
1263
1264 [DllImport("Assimp", EntryPoint="CSharp_aiMeshKey_mValue_get")]
1265 public static extern uint aiMeshKey_mValue_get(HandleRef jarg1);
1266
1267 [DllImport("Assimp", EntryPoint="CSharp_new_aiMeshKey__SWIG_0")]
1268 public static extern IntPtr new_aiMeshKey__SWIG_0();
1269
1270 [DllImport("Assimp", EntryPoint="CSharp_new_aiMeshKey__SWIG_1")]
1271 public static extern IntPtr new_aiMeshKey__SWIG_1(double jarg1, uint jarg2);
1272
1273 [DllImport("Assimp", EntryPoint="CSharp_aiMeshKey___equal__")]
1274 public static extern bool aiMeshKey___equal__(HandleRef jarg1, HandleRef jarg2);
1275
1276 [DllImport("Assimp", EntryPoint="CSharp_aiMeshKey___nequal__")]
1277 public static extern bool aiMeshKey___nequal__(HandleRef jarg1, HandleRef jarg2);
1278
1279 [DllImport("Assimp", EntryPoint="CSharp_aiMeshKey___smaller__")]
1280 public static extern bool aiMeshKey___smaller__(HandleRef jarg1, HandleRef jarg2);
1281
1282 [DllImport("Assimp", EntryPoint="CSharp_aiMeshKey___greater__")]
1283 public static extern bool aiMeshKey___greater__(HandleRef jarg1, HandleRef jarg2);
1284
1285 [DllImport("Assimp", EntryPoint="CSharp_delete_aiMeshKey")]
1286 public static extern void delete_aiMeshKey(HandleRef jarg1);
1287
1288 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mNodeName_set")]
1289 public static extern void aiNodeAnim_mNodeName_set(HandleRef jarg1, HandleRef jarg2);
1290
1291 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mNodeName_get")]
1292 public static extern IntPtr aiNodeAnim_mNodeName_get(HandleRef jarg1);
1293
1294 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mNumPositionKeys_set")]
1295 public static extern void aiNodeAnim_mNumPositionKeys_set(HandleRef jarg1, uint jarg2);
1296
1297 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mNumPositionKeys_get")]
1298 public static extern uint aiNodeAnim_mNumPositionKeys_get(HandleRef jarg1);
1299
1300 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mNumRotationKeys_set")]
1301 public static extern void aiNodeAnim_mNumRotationKeys_set(HandleRef jarg1, uint jarg2);
1302
1303 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mNumRotationKeys_get")]
1304 public static extern uint aiNodeAnim_mNumRotationKeys_get(HandleRef jarg1);
1305
1306 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mNumScalingKeys_set")]
1307 public static extern void aiNodeAnim_mNumScalingKeys_set(HandleRef jarg1, uint jarg2);
1308
1309 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mNumScalingKeys_get")]
1310 public static extern uint aiNodeAnim_mNumScalingKeys_get(HandleRef jarg1);
1311
1312 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mPreState_set")]
1313 public static extern void aiNodeAnim_mPreState_set(HandleRef jarg1, int jarg2);
1314
1315 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mPreState_get")]
1316 public static extern int aiNodeAnim_mPreState_get(HandleRef jarg1);
1317
1318 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mPostState_set")]
1319 public static extern void aiNodeAnim_mPostState_set(HandleRef jarg1, int jarg2);
1320
1321 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_mPostState_get")]
1322 public static extern int aiNodeAnim_mPostState_get(HandleRef jarg1);
1323
1324 [DllImport("Assimp", EntryPoint="CSharp_new_aiNodeAnim")]
1325 public static extern IntPtr new_aiNodeAnim();
1326
1327 [DllImport("Assimp", EntryPoint="CSharp_delete_aiNodeAnim")]
1328 public static extern void delete_aiNodeAnim(HandleRef jarg1);
1329
1330 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_GetmPositionKeys")]
1331 public static extern IntPtr aiNodeAnim_GetmPositionKeys(HandleRef jarg1);
1332
1333 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_GetmRotationKeys")]
1334 public static extern IntPtr aiNodeAnim_GetmRotationKeys(HandleRef jarg1);
1335
1336 [DllImport("Assimp", EntryPoint="CSharp_aiNodeAnim_GetmScalingKeys")]
1337 public static extern IntPtr aiNodeAnim_GetmScalingKeys(HandleRef jarg1);
1338
1339 [DllImport("Assimp", EntryPoint="CSharp_aiMeshAnim_mName_set")]
1340 public static extern void aiMeshAnim_mName_set(HandleRef jarg1, HandleRef jarg2);
1341
1342 [DllImport("Assimp", EntryPoint="CSharp_aiMeshAnim_mName_get")]
1343 public static extern IntPtr aiMeshAnim_mName_get(HandleRef jarg1);
1344
1345 [DllImport("Assimp", EntryPoint="CSharp_aiMeshAnim_mNumKeys_set")]
1346 public static extern void aiMeshAnim_mNumKeys_set(HandleRef jarg1, uint jarg2);
1347
1348 [DllImport("Assimp", EntryPoint="CSharp_aiMeshAnim_mNumKeys_get")]
1349 public static extern uint aiMeshAnim_mNumKeys_get(HandleRef jarg1);
1350
1351 [DllImport("Assimp", EntryPoint="CSharp_new_aiMeshAnim")]
1352 public static extern IntPtr new_aiMeshAnim();
1353
1354 [DllImport("Assimp", EntryPoint="CSharp_delete_aiMeshAnim")]
1355 public static extern void delete_aiMeshAnim(HandleRef jarg1);
1356
1357 [DllImport("Assimp", EntryPoint="CSharp_aiMeshAnim_GetmKeys")]
1358 public static extern IntPtr aiMeshAnim_GetmKeys(HandleRef jarg1);
1359
1360 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mName_set")]
1361 public static extern void aiAnimation_mName_set(HandleRef jarg1, HandleRef jarg2);
1362
1363 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mName_get")]
1364 public static extern IntPtr aiAnimation_mName_get(HandleRef jarg1);
1365
1366 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mDuration_set")]
1367 public static extern void aiAnimation_mDuration_set(HandleRef jarg1, double jarg2);
1368
1369 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mDuration_get")]
1370 public static extern double aiAnimation_mDuration_get(HandleRef jarg1);
1371
1372 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mTicksPerSecond_set")]
1373 public static extern void aiAnimation_mTicksPerSecond_set(HandleRef jarg1, double jarg2);
1374
1375 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mTicksPerSecond_get")]
1376 public static extern double aiAnimation_mTicksPerSecond_get(HandleRef jarg1);
1377
1378 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mNumChannels_set")]
1379 public static extern void aiAnimation_mNumChannels_set(HandleRef jarg1, uint jarg2);
1380
1381 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mNumChannels_get")]
1382 public static extern uint aiAnimation_mNumChannels_get(HandleRef jarg1);
1383
1384 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mNumMeshChannels_set")]
1385 public static extern void aiAnimation_mNumMeshChannels_set(HandleRef jarg1, uint jarg2);
1386
1387 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_mNumMeshChannels_get")]
1388 public static extern uint aiAnimation_mNumMeshChannels_get(HandleRef jarg1);
1389
1390 [DllImport("Assimp", EntryPoint="CSharp_new_aiAnimation")]
1391 public static extern IntPtr new_aiAnimation();
1392
1393 [DllImport("Assimp", EntryPoint="CSharp_delete_aiAnimation")]
1394 public static extern void delete_aiAnimation(HandleRef jarg1);
1395
1396 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_GetmChannels")]
1397 public static extern IntPtr aiAnimation_GetmChannels(HandleRef jarg1);
1398
1399 [DllImport("Assimp", EntryPoint="CSharp_aiAnimation_GetmMeshChannels")]
1400 public static extern IntPtr aiAnimation_GetmMeshChannels(HandleRef jarg1);
1401
1402 [DllImport("Assimp", EntryPoint="CSharp_AI_MAX_FACE_INDICES_get")]
1403 public static extern int AI_MAX_FACE_INDICES_get();
1404
1405 [DllImport("Assimp", EntryPoint="CSharp_AI_MAX_BONE_WEIGHTS_get")]
1406 public static extern int AI_MAX_BONE_WEIGHTS_get();
1407
1408 [DllImport("Assimp", EntryPoint="CSharp_AI_MAX_VERTICES_get")]
1409 public static extern int AI_MAX_VERTICES_get();
1410
1411 [DllImport("Assimp", EntryPoint="CSharp_AI_MAX_FACES_get")]
1412 public static extern int AI_MAX_FACES_get();
1413
1414 [DllImport("Assimp", EntryPoint="CSharp_AI_MAX_NUMBER_OF_COLOR_SETS_get")]
1415 public static extern int AI_MAX_NUMBER_OF_COLOR_SETS_get();
1416
1417 [DllImport("Assimp", EntryPoint="CSharp_AI_MAX_NUMBER_OF_TEXTURECOORDS_get")]
1418 public static extern int AI_MAX_NUMBER_OF_TEXTURECOORDS_get();
1419
1420 [DllImport("Assimp", EntryPoint="CSharp_aiFace_mNumIndices_set")]
1421 public static extern void aiFace_mNumIndices_set(HandleRef jarg1, uint jarg2);
1422
1423 [DllImport("Assimp", EntryPoint="CSharp_aiFace_mNumIndices_get")]
1424 public static extern uint aiFace_mNumIndices_get(HandleRef jarg1);
1425
1426 [DllImport("Assimp", EntryPoint="CSharp_new_aiFace__SWIG_0")]
1427 public static extern IntPtr new_aiFace__SWIG_0();
1428
1429 [DllImport("Assimp", EntryPoint="CSharp_delete_aiFace")]
1430 public static extern void delete_aiFace(HandleRef jarg1);
1431
1432 [DllImport("Assimp", EntryPoint="CSharp_new_aiFace__SWIG_1")]
1433 public static extern IntPtr new_aiFace__SWIG_1(HandleRef jarg1);
1434
1435 [DllImport("Assimp", EntryPoint="CSharp_aiFace___set__")]
1436 public static extern IntPtr aiFace___set__(HandleRef jarg1, HandleRef jarg2);
1437
1438 [DllImport("Assimp", EntryPoint="CSharp_aiFace___equal__")]
1439 public static extern bool aiFace___equal__(HandleRef jarg1, HandleRef jarg2);
1440
1441 [DllImport("Assimp", EntryPoint="CSharp_aiFace___nequal__")]
1442 public static extern bool aiFace___nequal__(HandleRef jarg1, HandleRef jarg2);
1443
1444 [DllImport("Assimp", EntryPoint="CSharp_aiFace_GetmIndices")]
1445 public static extern IntPtr aiFace_GetmIndices(HandleRef jarg1);
1446
1447 [DllImport("Assimp", EntryPoint="CSharp_aiVertexWeight_mVertexId_set")]
1448 public static extern void aiVertexWeight_mVertexId_set(HandleRef jarg1, uint jarg2);
1449
1450 [DllImport("Assimp", EntryPoint="CSharp_aiVertexWeight_mVertexId_get")]
1451 public static extern uint aiVertexWeight_mVertexId_get(HandleRef jarg1);
1452
1453 [DllImport("Assimp", EntryPoint="CSharp_aiVertexWeight_mWeight_set")]
1454 public static extern void aiVertexWeight_mWeight_set(HandleRef jarg1, float jarg2);
1455
1456 [DllImport("Assimp", EntryPoint="CSharp_aiVertexWeight_mWeight_get")]
1457 public static extern float aiVertexWeight_mWeight_get(HandleRef jarg1);
1458
1459 [DllImport("Assimp", EntryPoint="CSharp_new_aiVertexWeight__SWIG_0")]
1460 public static extern IntPtr new_aiVertexWeight__SWIG_0();
1461
1462 [DllImport("Assimp", EntryPoint="CSharp_new_aiVertexWeight__SWIG_1")]
1463 public static extern IntPtr new_aiVertexWeight__SWIG_1(uint jarg1, float jarg2);
1464
1465 [DllImport("Assimp", EntryPoint="CSharp_delete_aiVertexWeight")]
1466 public static extern void delete_aiVertexWeight(HandleRef jarg1);
1467
1468 [DllImport("Assimp", EntryPoint="CSharp_aiBone_mName_set")]
1469 public static extern void aiBone_mName_set(HandleRef jarg1, HandleRef jarg2);
1470
1471 [DllImport("Assimp", EntryPoint="CSharp_aiBone_mName_get")]
1472 public static extern IntPtr aiBone_mName_get(HandleRef jarg1);
1473
1474 [DllImport("Assimp", EntryPoint="CSharp_aiBone_mNumWeights_set")]
1475 public static extern void aiBone_mNumWeights_set(HandleRef jarg1, uint jarg2);
1476
1477 [DllImport("Assimp", EntryPoint="CSharp_aiBone_mNumWeights_get")]
1478 public static extern uint aiBone_mNumWeights_get(HandleRef jarg1);
1479
1480 [DllImport("Assimp", EntryPoint="CSharp_aiBone_mOffsetMatrix_set")]
1481 public static extern void aiBone_mOffsetMatrix_set(HandleRef jarg1, HandleRef jarg2);
1482
1483 [DllImport("Assimp", EntryPoint="CSharp_aiBone_mOffsetMatrix_get")]
1484 public static extern IntPtr aiBone_mOffsetMatrix_get(HandleRef jarg1);
1485
1486 [DllImport("Assimp", EntryPoint="CSharp_new_aiBone__SWIG_0")]
1487 public static extern IntPtr new_aiBone__SWIG_0();
1488
1489 [DllImport("Assimp", EntryPoint="CSharp_new_aiBone__SWIG_1")]
1490 public static extern IntPtr new_aiBone__SWIG_1(HandleRef jarg1);
1491
1492 [DllImport("Assimp", EntryPoint="CSharp_delete_aiBone")]
1493 public static extern void delete_aiBone(HandleRef jarg1);
1494
1495 [DllImport("Assimp", EntryPoint="CSharp_aiBone_GetmWeights")]
1496 public static extern IntPtr aiBone_GetmWeights(HandleRef jarg1);
1497
1498 [DllImport("Assimp", EntryPoint="CSharp_aiAnimMesh_mBitangents_set")]
1499 public static extern void aiAnimMesh_mBitangents_set(HandleRef jarg1, HandleRef jarg2);
1500
1501 [DllImport("Assimp", EntryPoint="CSharp_aiAnimMesh_mBitangents_get")]
1502 public static extern IntPtr aiAnimMesh_mBitangents_get(HandleRef jarg1);
1503
1504 [DllImport("Assimp", EntryPoint="CSharp_aiAnimMesh_mNumVertices_set")]
1505 public static extern void aiAnimMesh_mNumVertices_set(HandleRef jarg1, uint jarg2);
1506
1507 [DllImport("Assimp", EntryPoint="CSharp_aiAnimMesh_mNumVertices_get")]
1508 public static extern uint aiAnimMesh_mNumVertices_get(HandleRef jarg1);
1509
1510 [DllImport("Assimp", EntryPoint="CSharp_new_aiAnimMesh")]
1511 public static extern IntPtr new_aiAnimMesh();
1512
1513 [DllImport("Assimp", EntryPoint="CSharp_delete_aiAnimMesh")]
1514 public static extern void delete_aiAnimMesh(HandleRef jarg1);
1515
1516 [DllImport("Assimp", EntryPoint="CSharp_aiAnimMesh_HasPositions")]
1517 public static extern bool aiAnimMesh_HasPositions(HandleRef jarg1);
1518
1519 [DllImport("Assimp", EntryPoint="CSharp_aiAnimMesh_HasNormals")]
1520 public static extern bool aiAnimMesh_HasNormals(HandleRef jarg1);
1521
1522 [DllImport("Assimp", EntryPoint="CSharp_aiAnimMesh_HasTangentsAndBitangents")]
1523 public static extern bool aiAnimMesh_HasTangentsAndBitangents(HandleRef jarg1);
1524
1525 [DllImport("Assimp", EntryPoint="CSharp_aiAnimMesh_HasVertexColors")]
1526 public static extern bool aiAnimMesh_HasVertexColors(HandleRef jarg1, uint jarg2);
1527
1528 [DllImport("Assimp", EntryPoint="CSharp_aiAnimMesh_HasTextureCoords")]
1529 public static extern bool aiAnimMesh_HasTextureCoords(HandleRef jarg1, uint jarg2);
1530
1531 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mPrimitiveTypes_set")]
1532 public static extern void aiMesh_mPrimitiveTypes_set(HandleRef jarg1, uint jarg2);
1533
1534 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mPrimitiveTypes_get")]
1535 public static extern uint aiMesh_mPrimitiveTypes_get(HandleRef jarg1);
1536
1537 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mNumVertices_set")]
1538 public static extern void aiMesh_mNumVertices_set(HandleRef jarg1, uint jarg2);
1539
1540 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mNumVertices_get")]
1541 public static extern uint aiMesh_mNumVertices_get(HandleRef jarg1);
1542
1543 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mNumFaces_set")]
1544 public static extern void aiMesh_mNumFaces_set(HandleRef jarg1, uint jarg2);
1545
1546 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mNumFaces_get")]
1547 public static extern uint aiMesh_mNumFaces_get(HandleRef jarg1);
1548
1549 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mNumBones_set")]
1550 public static extern void aiMesh_mNumBones_set(HandleRef jarg1, uint jarg2);
1551
1552 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mNumBones_get")]
1553 public static extern uint aiMesh_mNumBones_get(HandleRef jarg1);
1554
1555 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mMaterialIndex_set")]
1556 public static extern void aiMesh_mMaterialIndex_set(HandleRef jarg1, uint jarg2);
1557
1558 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mMaterialIndex_get")]
1559 public static extern uint aiMesh_mMaterialIndex_get(HandleRef jarg1);
1560
1561 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mName_set")]
1562 public static extern void aiMesh_mName_set(HandleRef jarg1, HandleRef jarg2);
1563
1564 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mName_get")]
1565 public static extern IntPtr aiMesh_mName_get(HandleRef jarg1);
1566
1567 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mNumAnimMeshes_set")]
1568 public static extern void aiMesh_mNumAnimMeshes_set(HandleRef jarg1, uint jarg2);
1569
1570 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_mNumAnimMeshes_get")]
1571 public static extern uint aiMesh_mNumAnimMeshes_get(HandleRef jarg1);
1572
1573 [DllImport("Assimp", EntryPoint="CSharp_new_aiMesh")]
1574 public static extern IntPtr new_aiMesh();
1575
1576 [DllImport("Assimp", EntryPoint="CSharp_delete_aiMesh")]
1577 public static extern void delete_aiMesh(HandleRef jarg1);
1578
1579 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_HasPositions")]
1580 public static extern bool aiMesh_HasPositions(HandleRef jarg1);
1581
1582 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_HasFaces")]
1583 public static extern bool aiMesh_HasFaces(HandleRef jarg1);
1584
1585 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_HasNormals")]
1586 public static extern bool aiMesh_HasNormals(HandleRef jarg1);
1587
1588 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_HasTangentsAndBitangents")]
1589 public static extern bool aiMesh_HasTangentsAndBitangents(HandleRef jarg1);
1590
1591 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_HasVertexColors")]
1592 public static extern bool aiMesh_HasVertexColors(HandleRef jarg1, uint jarg2);
1593
1594 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_HasTextureCoords")]
1595 public static extern bool aiMesh_HasTextureCoords(HandleRef jarg1, uint jarg2);
1596
1597 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetNumUVChannels")]
1598 public static extern uint aiMesh_GetNumUVChannels(HandleRef jarg1);
1599
1600 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetNumColorChannels")]
1601 public static extern uint aiMesh_GetNumColorChannels(HandleRef jarg1);
1602
1603 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_HasBones")]
1604 public static extern bool aiMesh_HasBones(HandleRef jarg1);
1605
1606 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmAnimMeshes")]
1607 public static extern IntPtr aiMesh_GetmAnimMeshes(HandleRef jarg1);
1608
1609 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmBitangents")]
1610 public static extern IntPtr aiMesh_GetmBitangents(HandleRef jarg1);
1611
1612 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmBones")]
1613 public static extern IntPtr aiMesh_GetmBones(HandleRef jarg1);
1614
1615 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmColors")]
1616 public static extern IntPtr aiMesh_GetmColors(HandleRef jarg1);
1617
1618 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmFaces")]
1619 public static extern IntPtr aiMesh_GetmFaces(HandleRef jarg1);
1620
1621 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmNormals")]
1622 public static extern IntPtr aiMesh_GetmNormals(HandleRef jarg1);
1623
1624 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmTangents")]
1625 public static extern IntPtr aiMesh_GetmTangents(HandleRef jarg1);
1626
1627 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmTextureCoords")]
1628 public static extern IntPtr aiMesh_GetmTextureCoords(HandleRef jarg1);
1629
1630 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmNumUVComponents")]
1631 public static extern IntPtr aiMesh_GetmNumUVComponents(HandleRef jarg1);
1632
1633 [DllImport("Assimp", EntryPoint="CSharp_aiMesh_GetmVertices")]
1634 public static extern IntPtr aiMesh_GetmVertices(HandleRef jarg1);
1635
1636 [DllImport("Assimp", EntryPoint="CSharp_AI_DEFAULT_MATERIAL_NAME_get")]
1637 public static extern string AI_DEFAULT_MATERIAL_NAME_get();
1638
1639 [DllImport("Assimp", EntryPoint="CSharp_AI_DEFAULT_TEXTURED_MATERIAL_NAME_get")]
1640 public static extern string AI_DEFAULT_TEXTURED_MATERIAL_NAME_get();
1641
1642 [DllImport("Assimp", EntryPoint="CSharp_aiUVTransform_mTranslation_set")]
1643 public static extern void aiUVTransform_mTranslation_set(HandleRef jarg1, HandleRef jarg2);
1644
1645 [DllImport("Assimp", EntryPoint="CSharp_aiUVTransform_mTranslation_get")]
1646 public static extern IntPtr aiUVTransform_mTranslation_get(HandleRef jarg1);
1647
1648 [DllImport("Assimp", EntryPoint="CSharp_aiUVTransform_mScaling_set")]
1649 public static extern void aiUVTransform_mScaling_set(HandleRef jarg1, HandleRef jarg2);
1650
1651 [DllImport("Assimp", EntryPoint="CSharp_aiUVTransform_mScaling_get")]
1652 public static extern IntPtr aiUVTransform_mScaling_get(HandleRef jarg1);
1653
1654 [DllImport("Assimp", EntryPoint="CSharp_aiUVTransform_mRotation_set")]
1655 public static extern void aiUVTransform_mRotation_set(HandleRef jarg1, float jarg2);
1656
1657 [DllImport("Assimp", EntryPoint="CSharp_aiUVTransform_mRotation_get")]
1658 public static extern float aiUVTransform_mRotation_get(HandleRef jarg1);
1659
1660 [DllImport("Assimp", EntryPoint="CSharp_new_aiUVTransform")]
1661 public static extern IntPtr new_aiUVTransform();
1662
1663 [DllImport("Assimp", EntryPoint="CSharp_delete_aiUVTransform")]
1664 public static extern void delete_aiUVTransform(HandleRef jarg1);
1665
1666 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mKey_set")]
1667 public static extern void aiMaterialProperty_mKey_set(HandleRef jarg1, HandleRef jarg2);
1668
1669 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mKey_get")]
1670 public static extern IntPtr aiMaterialProperty_mKey_get(HandleRef jarg1);
1671
1672 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mSemantic_set")]
1673 public static extern void aiMaterialProperty_mSemantic_set(HandleRef jarg1, uint jarg2);
1674
1675 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mSemantic_get")]
1676 public static extern uint aiMaterialProperty_mSemantic_get(HandleRef jarg1);
1677
1678 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mIndex_set")]
1679 public static extern void aiMaterialProperty_mIndex_set(HandleRef jarg1, uint jarg2);
1680
1681 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mIndex_get")]
1682 public static extern uint aiMaterialProperty_mIndex_get(HandleRef jarg1);
1683
1684 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mDataLength_set")]
1685 public static extern void aiMaterialProperty_mDataLength_set(HandleRef jarg1, uint jarg2);
1686
1687 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mDataLength_get")]
1688 public static extern uint aiMaterialProperty_mDataLength_get(HandleRef jarg1);
1689
1690 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mType_set")]
1691 public static extern void aiMaterialProperty_mType_set(HandleRef jarg1, int jarg2);
1692
1693 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mType_get")]
1694 public static extern int aiMaterialProperty_mType_get(HandleRef jarg1);
1695
1696 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mData_set")]
1697 public static extern void aiMaterialProperty_mData_set(HandleRef jarg1, string jarg2);
1698
1699 [DllImport("Assimp", EntryPoint="CSharp_aiMaterialProperty_mData_get")]
1700 public static extern string aiMaterialProperty_mData_get(HandleRef jarg1);
1701
1702 [DllImport("Assimp", EntryPoint="CSharp_new_aiMaterialProperty")]
1703 public static extern IntPtr new_aiMaterialProperty();
1704
1705 [DllImport("Assimp", EntryPoint="CSharp_delete_aiMaterialProperty")]
1706 public static extern void delete_aiMaterialProperty(HandleRef jarg1);
1707
1708 [DllImport("Assimp", EntryPoint="CSharp_new_aiMaterial")]
1709 public static extern IntPtr new_aiMaterial();
1710
1711 [DllImport("Assimp", EntryPoint="CSharp_delete_aiMaterial")]
1712 public static extern void delete_aiMaterial(HandleRef jarg1);
1713
1714 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureCount")]
1715 public static extern uint aiMaterial_GetTextureCount(HandleRef jarg1, int jarg2);
1716
1717 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetDiffuse")]
1718 public static extern bool aiMaterial_GetDiffuse(HandleRef jarg1, HandleRef jarg2);
1719
1720 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetSpecular")]
1721 public static extern bool aiMaterial_GetSpecular(HandleRef jarg1, HandleRef jarg2);
1722
1723 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetAmbient")]
1724 public static extern bool aiMaterial_GetAmbient(HandleRef jarg1, HandleRef jarg2);
1725
1726 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetEmissive")]
1727 public static extern bool aiMaterial_GetEmissive(HandleRef jarg1, HandleRef jarg2);
1728
1729 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetOpacity")]
1730 public static extern bool aiMaterial_GetOpacity(HandleRef jarg1, ref float jarg2);
1731
1732 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetShininessStrength")]
1733 public static extern bool aiMaterial_GetShininessStrength(HandleRef jarg1, ref float jarg2);
1734
1735 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetShadingModel")]
1736 public static extern bool aiMaterial_GetShadingModel(HandleRef jarg1, ref int jarg2);
1737
1738 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTexFlagsDiffuse0")]
1739 public static extern bool aiMaterial_GetTexFlagsDiffuse0(HandleRef jarg1, ref int jarg2);
1740
1741 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetMappingModeUDiffuse0")]
1742 public static extern bool aiMaterial_GetMappingModeUDiffuse0(HandleRef jarg1, ref int jarg2);
1743
1744 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetMappingModeVDiffuse0")]
1745 public static extern bool aiMaterial_GetMappingModeVDiffuse0(HandleRef jarg1, ref int jarg2);
1746
1747 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureDiffuse0")]
1748 public static extern bool aiMaterial_GetTextureDiffuse0(HandleRef jarg1, HandleRef jarg2);
1749
1750 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureSpecular0")]
1751 public static extern bool aiMaterial_GetTextureSpecular0(HandleRef jarg1, HandleRef jarg2);
1752
1753 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureOpacity0")]
1754 public static extern bool aiMaterial_GetTextureOpacity0(HandleRef jarg1, HandleRef jarg2);
1755
1756 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureAmbient0")]
1757 public static extern bool aiMaterial_GetTextureAmbient0(HandleRef jarg1, HandleRef jarg2);
1758
1759 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureEmissive0")]
1760 public static extern bool aiMaterial_GetTextureEmissive0(HandleRef jarg1, HandleRef jarg2);
1761
1762 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureShininess0")]
1763 public static extern bool aiMaterial_GetTextureShininess0(HandleRef jarg1, HandleRef jarg2);
1764
1765 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureLightmap0")]
1766 public static extern bool aiMaterial_GetTextureLightmap0(HandleRef jarg1, HandleRef jarg2);
1767
1768 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureNormals0")]
1769 public static extern bool aiMaterial_GetTextureNormals0(HandleRef jarg1, HandleRef jarg2);
1770
1771 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTextureHeight0")]
1772 public static extern bool aiMaterial_GetTextureHeight0(HandleRef jarg1, HandleRef jarg2);
1773
1774 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetGlobalBackgroundImage")]
1775 public static extern bool aiMaterial_GetGlobalBackgroundImage(HandleRef jarg1, HandleRef jarg2);
1776
1777 [DllImport("Assimp", EntryPoint="CSharp_aiMaterial_GetTwoSided")]
1778 public static extern bool aiMaterial_GetTwoSided(HandleRef jarg1, ref int jarg2);
1779
1780 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_TEXTURE_BASE_get")]
1781 public static extern string _AI_MATKEY_TEXTURE_BASE_get();
1782
1783 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_UVWSRC_BASE_get")]
1784 public static extern string _AI_MATKEY_UVWSRC_BASE_get();
1785
1786 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_TEXOP_BASE_get")]
1787 public static extern string _AI_MATKEY_TEXOP_BASE_get();
1788
1789 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_MAPPING_BASE_get")]
1790 public static extern string _AI_MATKEY_MAPPING_BASE_get();
1791
1792 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_TEXBLEND_BASE_get")]
1793 public static extern string _AI_MATKEY_TEXBLEND_BASE_get();
1794
1795 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_MAPPINGMODE_U_BASE_get")]
1796 public static extern string _AI_MATKEY_MAPPINGMODE_U_BASE_get();
1797
1798 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_MAPPINGMODE_V_BASE_get")]
1799 public static extern string _AI_MATKEY_MAPPINGMODE_V_BASE_get();
1800
1801 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_TEXMAP_AXIS_BASE_get")]
1802 public static extern string _AI_MATKEY_TEXMAP_AXIS_BASE_get();
1803
1804 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_UVTRANSFORM_BASE_get")]
1805 public static extern string _AI_MATKEY_UVTRANSFORM_BASE_get();
1806
1807 [DllImport("Assimp", EntryPoint="CSharp__AI_MATKEY_TEXFLAGS_BASE_get")]
1808 public static extern string _AI_MATKEY_TEXFLAGS_BASE_get();
1809
1810 [DllImport("Assimp", EntryPoint="CSharp_new_aiQuaternion__SWIG_0")]
1811 public static extern IntPtr new_aiQuaternion__SWIG_0();
1812
1813 [DllImport("Assimp", EntryPoint="CSharp_new_aiQuaternion__SWIG_1")]
1814 public static extern IntPtr new_aiQuaternion__SWIG_1(float jarg1, float jarg2, float jarg3, float jarg4);
1815
1816 [DllImport("Assimp", EntryPoint="CSharp_new_aiQuaternion__SWIG_2")]
1817 public static extern IntPtr new_aiQuaternion__SWIG_2(HandleRef jarg1);
1818
1819 [DllImport("Assimp", EntryPoint="CSharp_new_aiQuaternion__SWIG_3")]
1820 public static extern IntPtr new_aiQuaternion__SWIG_3(float jarg1, float jarg2, float jarg3);
1821
1822 [DllImport("Assimp", EntryPoint="CSharp_new_aiQuaternion__SWIG_4")]
1823 public static extern IntPtr new_aiQuaternion__SWIG_4(HandleRef jarg1, float jarg2);
1824
1825 [DllImport("Assimp", EntryPoint="CSharp_new_aiQuaternion__SWIG_5")]
1826 public static extern IntPtr new_aiQuaternion__SWIG_5(HandleRef jarg1);
1827
1828 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_GetMatrix")]
1829 public static extern IntPtr aiQuaternion_GetMatrix(HandleRef jarg1);
1830
1831 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion___equal__")]
1832 public static extern bool aiQuaternion___equal__(HandleRef jarg1, HandleRef jarg2);
1833
1834 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion___nequal__")]
1835 public static extern bool aiQuaternion___nequal__(HandleRef jarg1, HandleRef jarg2);
1836
1837 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_Normalize")]
1838 public static extern IntPtr aiQuaternion_Normalize(HandleRef jarg1);
1839
1840 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_Conjugate")]
1841 public static extern IntPtr aiQuaternion_Conjugate(HandleRef jarg1);
1842
1843 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_Rotate")]
1844 public static extern IntPtr aiQuaternion_Rotate(HandleRef jarg1, HandleRef jarg2);
1845
1846 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion___mul__")]
1847 public static extern IntPtr aiQuaternion___mul__(HandleRef jarg1, HandleRef jarg2);
1848
1849 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_Interpolate")]
1850 public static extern void aiQuaternion_Interpolate(HandleRef jarg1, HandleRef jarg2, HandleRef jarg3, float jarg4);
1851
1852 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_w_set")]
1853 public static extern void aiQuaternion_w_set(HandleRef jarg1, float jarg2);
1854
1855 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_w_get")]
1856 public static extern float aiQuaternion_w_get(HandleRef jarg1);
1857
1858 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_x_set")]
1859 public static extern void aiQuaternion_x_set(HandleRef jarg1, float jarg2);
1860
1861 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_x_get")]
1862 public static extern float aiQuaternion_x_get(HandleRef jarg1);
1863
1864 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_y_set")]
1865 public static extern void aiQuaternion_y_set(HandleRef jarg1, float jarg2);
1866
1867 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_y_get")]
1868 public static extern float aiQuaternion_y_get(HandleRef jarg1);
1869
1870 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_z_set")]
1871 public static extern void aiQuaternion_z_set(HandleRef jarg1, float jarg2);
1872
1873 [DllImport("Assimp", EntryPoint="CSharp_aiQuaternion_z_get")]
1874 public static extern float aiQuaternion_z_get(HandleRef jarg1);
1875
1876 [DllImport("Assimp", EntryPoint="CSharp_delete_aiQuaternion")]
1877 public static extern void delete_aiQuaternion(HandleRef jarg1);
1878
1879 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mName_set")]
1880 public static extern void aiNode_mName_set(HandleRef jarg1, HandleRef jarg2);
1881
1882 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mName_get")]
1883 public static extern IntPtr aiNode_mName_get(HandleRef jarg1);
1884
1885 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mTransformation_set")]
1886 public static extern void aiNode_mTransformation_set(HandleRef jarg1, HandleRef jarg2);
1887
1888 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mTransformation_get")]
1889 public static extern IntPtr aiNode_mTransformation_get(HandleRef jarg1);
1890
1891 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mParent_set")]
1892 public static extern void aiNode_mParent_set(HandleRef jarg1, HandleRef jarg2);
1893
1894 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mParent_get")]
1895 public static extern IntPtr aiNode_mParent_get(HandleRef jarg1);
1896
1897 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mNumChildren_set")]
1898 public static extern void aiNode_mNumChildren_set(HandleRef jarg1, uint jarg2);
1899
1900 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mNumChildren_get")]
1901 public static extern uint aiNode_mNumChildren_get(HandleRef jarg1);
1902
1903 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mNumMeshes_set")]
1904 public static extern void aiNode_mNumMeshes_set(HandleRef jarg1, uint jarg2);
1905
1906 [DllImport("Assimp", EntryPoint="CSharp_aiNode_mNumMeshes_get")]
1907 public static extern uint aiNode_mNumMeshes_get(HandleRef jarg1);
1908
1909 [DllImport("Assimp", EntryPoint="CSharp_new_aiNode__SWIG_0")]
1910 public static extern IntPtr new_aiNode__SWIG_0();
1911
1912 [DllImport("Assimp", EntryPoint="CSharp_new_aiNode__SWIG_1")]
1913 public static extern IntPtr new_aiNode__SWIG_1(string jarg1);
1914
1915 [DllImport("Assimp", EntryPoint="CSharp_delete_aiNode")]
1916 public static extern void delete_aiNode(HandleRef jarg1);
1917
1918 [DllImport("Assimp", EntryPoint="CSharp_aiNode_FindNode__SWIG_0")]
1919 public static extern IntPtr aiNode_FindNode__SWIG_0(HandleRef jarg1, HandleRef jarg2);
1920
1921 [DllImport("Assimp", EntryPoint="CSharp_aiNode_FindNode__SWIG_1")]
1922 public static extern IntPtr aiNode_FindNode__SWIG_1(HandleRef jarg1, string jarg2);
1923
1924 [DllImport("Assimp", EntryPoint="CSharp_aiNode_GetmChildren")]
1925 public static extern IntPtr aiNode_GetmChildren(HandleRef jarg1);
1926
1927 [DllImport("Assimp", EntryPoint="CSharp_aiNode_GetmMeshes")]
1928 public static extern IntPtr aiNode_GetmMeshes(HandleRef jarg1);
1929
1930 [DllImport("Assimp", EntryPoint="CSharp_AI_SCENE_FLAGS_INCOMPLETE_get")]
1931 public static extern int AI_SCENE_FLAGS_INCOMPLETE_get();
1932
1933 [DllImport("Assimp", EntryPoint="CSharp_AI_SCENE_FLAGS_VALIDATED_get")]
1934 public static extern int AI_SCENE_FLAGS_VALIDATED_get();
1935
1936 [DllImport("Assimp", EntryPoint="CSharp_AI_SCENE_FLAGS_VALIDATION_WARNING_get")]
1937 public static extern int AI_SCENE_FLAGS_VALIDATION_WARNING_get();
1938
1939 [DllImport("Assimp", EntryPoint="CSharp_AI_SCENE_FLAGS_NON_VERBOSE_FORMAT_get")]
1940 public static extern int AI_SCENE_FLAGS_NON_VERBOSE_FORMAT_get();
1941
1942 [DllImport("Assimp", EntryPoint="CSharp_AI_SCENE_FLAGS_TERRAIN_get")]
1943 public static extern int AI_SCENE_FLAGS_TERRAIN_get();
1944
1945 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mFlags_set")]
1946 public static extern void aiScene_mFlags_set(HandleRef jarg1, uint jarg2);
1947
1948 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mFlags_get")]
1949 public static extern uint aiScene_mFlags_get(HandleRef jarg1);
1950
1951 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mRootNode_set")]
1952 public static extern void aiScene_mRootNode_set(HandleRef jarg1, HandleRef jarg2);
1953
1954 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mRootNode_get")]
1955 public static extern IntPtr aiScene_mRootNode_get(HandleRef jarg1);
1956
1957 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumMeshes_set")]
1958 public static extern void aiScene_mNumMeshes_set(HandleRef jarg1, uint jarg2);
1959
1960 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumMeshes_get")]
1961 public static extern uint aiScene_mNumMeshes_get(HandleRef jarg1);
1962
1963 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumMaterials_set")]
1964 public static extern void aiScene_mNumMaterials_set(HandleRef jarg1, uint jarg2);
1965
1966 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumMaterials_get")]
1967 public static extern uint aiScene_mNumMaterials_get(HandleRef jarg1);
1968
1969 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumAnimations_set")]
1970 public static extern void aiScene_mNumAnimations_set(HandleRef jarg1, uint jarg2);
1971
1972 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumAnimations_get")]
1973 public static extern uint aiScene_mNumAnimations_get(HandleRef jarg1);
1974
1975 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumTextures_set")]
1976 public static extern void aiScene_mNumTextures_set(HandleRef jarg1, uint jarg2);
1977
1978 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumTextures_get")]
1979 public static extern uint aiScene_mNumTextures_get(HandleRef jarg1);
1980
1981 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumLights_set")]
1982 public static extern void aiScene_mNumLights_set(HandleRef jarg1, uint jarg2);
1983
1984 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumLights_get")]
1985 public static extern uint aiScene_mNumLights_get(HandleRef jarg1);
1986
1987 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumCameras_set")]
1988 public static extern void aiScene_mNumCameras_set(HandleRef jarg1, uint jarg2);
1989
1990 [DllImport("Assimp", EntryPoint="CSharp_aiScene_mNumCameras_get")]
1991 public static extern uint aiScene_mNumCameras_get(HandleRef jarg1);
1992
1993 [DllImport("Assimp", EntryPoint="CSharp_new_aiScene")]
1994 public static extern IntPtr new_aiScene();
1995
1996 [DllImport("Assimp", EntryPoint="CSharp_delete_aiScene")]
1997 public static extern void delete_aiScene(HandleRef jarg1);
1998
1999 [DllImport("Assimp", EntryPoint="CSharp_aiScene_HasMeshes")]
2000 public static extern bool aiScene_HasMeshes(HandleRef jarg1);
2001
2002 [DllImport("Assimp", EntryPoint="CSharp_aiScene_HasMaterials")]
2003 public static extern bool aiScene_HasMaterials(HandleRef jarg1);
2004
2005 [DllImport("Assimp", EntryPoint="CSharp_aiScene_HasLights")]
2006 public static extern bool aiScene_HasLights(HandleRef jarg1);
2007
2008 [DllImport("Assimp", EntryPoint="CSharp_aiScene_HasTextures")]
2009 public static extern bool aiScene_HasTextures(HandleRef jarg1);
2010
2011 [DllImport("Assimp", EntryPoint="CSharp_aiScene_HasCameras")]
2012 public static extern bool aiScene_HasCameras(HandleRef jarg1);
2013
2014 [DllImport("Assimp", EntryPoint="CSharp_aiScene_HasAnimations")]
2015 public static extern bool aiScene_HasAnimations(HandleRef jarg1);
2016
2017 [DllImport("Assimp", EntryPoint="CSharp_aiScene_GetmAnimations")]
2018 public static extern IntPtr aiScene_GetmAnimations(HandleRef jarg1);
2019
2020 [DllImport("Assimp", EntryPoint="CSharp_aiScene_GetmCameras")]
2021 public static extern IntPtr aiScene_GetmCameras(HandleRef jarg1);
2022
2023 [DllImport("Assimp", EntryPoint="CSharp_aiScene_GetmLights")]
2024 public static extern IntPtr aiScene_GetmLights(HandleRef jarg1);
2025
2026 [DllImport("Assimp", EntryPoint="CSharp_aiScene_GetmMaterials")]
2027 public static extern IntPtr aiScene_GetmMaterials(HandleRef jarg1);
2028
2029 [DllImport("Assimp", EntryPoint="CSharp_aiScene_GetmMeshes")]
2030 public static extern IntPtr aiScene_GetmMeshes(HandleRef jarg1);
2031
2032 [DllImport("Assimp", EntryPoint="CSharp_aiScene_GetmTextures")]
2033 public static extern IntPtr aiScene_GetmTextures(HandleRef jarg1);
2034
2035 [DllImport("Assimp", EntryPoint="CSharp_aiTexel_b_set")]
2036 public static extern void aiTexel_b_set(HandleRef jarg1, byte jarg2);
2037
2038 [DllImport("Assimp", EntryPoint="CSharp_aiTexel_b_get")]
2039 public static extern byte aiTexel_b_get(HandleRef jarg1);
2040
2041 [DllImport("Assimp", EntryPoint="CSharp_aiTexel_g_set")]
2042 public static extern void aiTexel_g_set(HandleRef jarg1, byte jarg2);
2043
2044 [DllImport("Assimp", EntryPoint="CSharp_aiTexel_g_get")]
2045 public static extern byte aiTexel_g_get(HandleRef jarg1);
2046
2047 [DllImport("Assimp", EntryPoint="CSharp_aiTexel_r_set")]
2048 public static extern void aiTexel_r_set(HandleRef jarg1, byte jarg2);
2049
2050 [DllImport("Assimp", EntryPoint="CSharp_aiTexel_r_get")]
2051 public static extern byte aiTexel_r_get(HandleRef jarg1);
2052
2053 [DllImport("Assimp", EntryPoint="CSharp_aiTexel_a_set")]
2054 public static extern void aiTexel_a_set(HandleRef jarg1, byte jarg2);
2055
2056 [DllImport("Assimp", EntryPoint="CSharp_aiTexel_a_get")]
2057 public static extern byte aiTexel_a_get(HandleRef jarg1);
2058
2059 [DllImport("Assimp", EntryPoint="CSharp_aiTexel___equal__")]
2060 public static extern bool aiTexel___equal__(HandleRef jarg1, HandleRef jarg2);
2061
2062 [DllImport("Assimp", EntryPoint="CSharp_aiTexel___nequal__")]
2063 public static extern bool aiTexel___nequal__(HandleRef jarg1, HandleRef jarg2);
2064
2065 [DllImport("Assimp", EntryPoint="CSharp_new_aiTexel")]
2066 public static extern IntPtr new_aiTexel();
2067
2068 [DllImport("Assimp", EntryPoint="CSharp_delete_aiTexel")]
2069 public static extern void delete_aiTexel(HandleRef jarg1);
2070
2071 [DllImport("Assimp", EntryPoint="CSharp_aiTexture_mWidth_set")]
2072 public static extern void aiTexture_mWidth_set(HandleRef jarg1, uint jarg2);
2073
2074 [DllImport("Assimp", EntryPoint="CSharp_aiTexture_mWidth_get")]
2075 public static extern uint aiTexture_mWidth_get(HandleRef jarg1);
2076
2077 [DllImport("Assimp", EntryPoint="CSharp_aiTexture_mHeight_set")]
2078 public static extern void aiTexture_mHeight_set(HandleRef jarg1, uint jarg2);
2079
2080 [DllImport("Assimp", EntryPoint="CSharp_aiTexture_mHeight_get")]
2081 public static extern uint aiTexture_mHeight_get(HandleRef jarg1);
2082
2083 [DllImport("Assimp", EntryPoint="CSharp_aiTexture_achFormatHint_set")]
2084 public static extern void aiTexture_achFormatHint_set(HandleRef jarg1, string jarg2);
2085
2086 [DllImport("Assimp", EntryPoint="CSharp_aiTexture_achFormatHint_get")]
2087 public static extern string aiTexture_achFormatHint_get(HandleRef jarg1);
2088
2089 [DllImport("Assimp", EntryPoint="CSharp_aiTexture_pcData_set")]
2090 public static extern void aiTexture_pcData_set(HandleRef jarg1, HandleRef jarg2);
2091
2092 [DllImport("Assimp", EntryPoint="CSharp_aiTexture_pcData_get")]
2093 public static extern IntPtr aiTexture_pcData_get(HandleRef jarg1);
2094
2095 [DllImport("Assimp", EntryPoint="CSharp_aiTexture_CheckFormat")]
2096 public static extern bool aiTexture_CheckFormat(HandleRef jarg1, string jarg2);
2097
2098 [DllImport("Assimp", EntryPoint="CSharp_new_aiTexture")]
2099 public static extern IntPtr new_aiTexture();
2100
2101 [DllImport("Assimp", EntryPoint="CSharp_delete_aiTexture")]
2102 public static extern void delete_aiTexture(HandleRef jarg1);
2103
2104 [DllImport("Assimp", EntryPoint="CSharp_AI_PROPERTY_WAS_NOT_EXISTING_get")]
2105 public static extern int AI_PROPERTY_WAS_NOT_EXISTING_get();
2106
2107 [DllImport("Assimp", EntryPoint="CSharp_aiImportFileFromMemory")]
2108 public static extern IntPtr aiImportFileFromMemory(string jarg1, uint jarg2, uint jarg3, string jarg4);
2109
2110 [DllImport("Assimp", EntryPoint="CSharp_new_Importer__SWIG_0")]
2111 public static extern IntPtr new_Importer__SWIG_0();
2112
2113 [DllImport("Assimp", EntryPoint="CSharp_new_Importer__SWIG_1")]
2114 public static extern IntPtr new_Importer__SWIG_1(HandleRef jarg1);
2115
2116 [DllImport("Assimp", EntryPoint="CSharp_delete_Importer")]
2117 public static extern void delete_Importer(HandleRef jarg1);
2118
2119 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetPropertyInteger__SWIG_0")]
2120 public static extern int Importer_GetPropertyInteger__SWIG_0(HandleRef jarg1, string jarg2, int jarg3);
2121
2122 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetPropertyInteger__SWIG_1")]
2123 public static extern int Importer_GetPropertyInteger__SWIG_1(HandleRef jarg1, string jarg2);
2124
2125 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetPropertyBool__SWIG_0")]
2126 public static extern bool Importer_GetPropertyBool__SWIG_0(HandleRef jarg1, string jarg2, bool jarg3);
2127
2128 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetPropertyBool__SWIG_1")]
2129 public static extern bool Importer_GetPropertyBool__SWIG_1(HandleRef jarg1, string jarg2);
2130
2131 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetPropertyFloat__SWIG_0")]
2132 public static extern float Importer_GetPropertyFloat__SWIG_0(HandleRef jarg1, string jarg2, float jarg3);
2133
2134 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetPropertyFloat__SWIG_1")]
2135 public static extern float Importer_GetPropertyFloat__SWIG_1(HandleRef jarg1, string jarg2);
2136
2137 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetPropertyString__SWIG_0")]
2138 public static extern string Importer_GetPropertyString__SWIG_0(HandleRef jarg1, string jarg2, string jarg3);
2139
2140 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetPropertyString__SWIG_1")]
2141 public static extern string Importer_GetPropertyString__SWIG_1(HandleRef jarg1, string jarg2);
2142
2143 [DllImport("Assimp", EntryPoint="CSharp_Importer_IsDefaultIOHandler")]
2144 public static extern bool Importer_IsDefaultIOHandler(HandleRef jarg1);
2145
2146 [DllImport("Assimp", EntryPoint="CSharp_Importer_SetProgressHandler")]
2147 public static extern void Importer_SetProgressHandler(HandleRef jarg1, HandleRef jarg2);
2148
2149 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetProgressHandler")]
2150 public static extern IntPtr Importer_GetProgressHandler(HandleRef jarg1);
2151
2152 [DllImport("Assimp", EntryPoint="CSharp_Importer_IsDefaultProgressHandler")]
2153 public static extern bool Importer_IsDefaultProgressHandler(HandleRef jarg1);
2154
2155 [DllImport("Assimp", EntryPoint="CSharp_Importer_ValidateFlags")]
2156 public static extern bool Importer_ValidateFlags(HandleRef jarg1, uint jarg2);
2157
2158 [DllImport("Assimp", EntryPoint="CSharp_Importer_ReadFile__SWIG_0")]
2159 public static extern IntPtr Importer_ReadFile__SWIG_0(HandleRef jarg1, string jarg2, uint jarg3);
2160
2161 [DllImport("Assimp", EntryPoint="CSharp_Importer_FreeScene")]
2162 public static extern void Importer_FreeScene(HandleRef jarg1);
2163
2164 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetErrorString")]
2165 public static extern string Importer_GetErrorString(HandleRef jarg1);
2166
2167 [DllImport("Assimp", EntryPoint="CSharp_Importer_IsExtensionSupported__SWIG_0")]
2168 public static extern bool Importer_IsExtensionSupported__SWIG_0(HandleRef jarg1, string jarg2);
2169
2170 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetExtensionList__SWIG_0")]
2171 public static extern void Importer_GetExtensionList__SWIG_0(HandleRef jarg1, HandleRef jarg2);
2172
2173 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetExtensionList__SWIG_1")]
2174 public static extern void Importer_GetExtensionList__SWIG_1(HandleRef jarg1, HandleRef jarg2);
2175
2176 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetScene")]
2177 public static extern IntPtr Importer_GetScene(HandleRef jarg1);
2178
2179 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetOrphanedScene")]
2180 public static extern IntPtr Importer_GetOrphanedScene(HandleRef jarg1);
2181
2182 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetMemoryRequirements")]
2183 public static extern void Importer_GetMemoryRequirements(HandleRef jarg1, HandleRef jarg2);
2184
2185 [DllImport("Assimp", EntryPoint="CSharp_Importer_SetExtraVerbose")]
2186 public static extern void Importer_SetExtraVerbose(HandleRef jarg1, bool jarg2);
2187
2188 [DllImport("Assimp", EntryPoint="CSharp_Importer_GetExtensionList__SWIG_2")]
2189 public static extern string Importer_GetExtensionList__SWIG_2(HandleRef jarg1);
2190
2191 [DllImport("Assimp", EntryPoint="CSharp_delete_ProgressHandler")]
2192 public static extern void delete_ProgressHandler(HandleRef jarg1);
2193
2194 [DllImport("Assimp", EntryPoint="CSharp_ProgressHandler_Update__SWIG_0")]
2195 public static extern bool ProgressHandler_Update__SWIG_0(HandleRef jarg1, float jarg2);
2196
2197 [DllImport("Assimp", EntryPoint="CSharp_ProgressHandler_Update__SWIG_1")]
2198 public static extern bool ProgressHandler_Update__SWIG_1(HandleRef jarg1);
21992283
22002284 [DllImport("Assimp", EntryPoint="CSharp_FloatVector_Clear")]
22012285 public static extern void FloatVector_Clear(HandleRef jarg1);
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
127127 return ret;
128128 }
129129
130 public bool IsExtensionSupported(string szExtension) {
131 bool ret = AssimpPINVOKE.Importer_IsExtensionSupported__SWIG_0(swigCPtr, szExtension);
132 return ret;
133 }
134
135 public void GetExtensionList(aiString szOut) {
136 AssimpPINVOKE.Importer_GetExtensionList__SWIG_0(swigCPtr, aiString.getCPtr(szOut));
137 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
138 }
139
140 public void GetExtensionList(SWIGTYPE_p_std__string szOut) {
141 AssimpPINVOKE.Importer_GetExtensionList__SWIG_1(swigCPtr, SWIGTYPE_p_std__string.getCPtr(szOut));
142 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
143 }
144
145130 public aiScene GetScene() {
146131 IntPtr cPtr = AssimpPINVOKE.Importer_GetScene(swigCPtr);
147132 aiScene ret = (cPtr == IntPtr.Zero) ? null : new aiScene(cPtr, false);
154139 return ret;
155140 }
156141
142 public bool IsExtensionSupported(string szExtension) {
143 bool ret = AssimpPINVOKE.Importer_IsExtensionSupported__SWIG_0(swigCPtr, szExtension);
144 return ret;
145 }
146
147 public void GetExtensionList(aiString szOut) {
148 AssimpPINVOKE.Importer_GetExtensionList__SWIG_0(swigCPtr, aiString.getCPtr(szOut));
149 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
150 }
151
152 public void GetExtensionList(SWIGTYPE_p_std__string szOut) {
153 AssimpPINVOKE.Importer_GetExtensionList__SWIG_1(swigCPtr, SWIGTYPE_p_std__string.getCPtr(szOut));
154 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
155 }
156
157 public uint GetImporterCount() {
158 uint ret = AssimpPINVOKE.Importer_GetImporterCount(swigCPtr);
159 return ret;
160 }
161
162 public SWIGTYPE_p_aiImporterDesc GetImporterInfo(uint index) {
163 IntPtr cPtr = AssimpPINVOKE.Importer_GetImporterInfo(swigCPtr, index);
164 SWIGTYPE_p_aiImporterDesc ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_aiImporterDesc(cPtr, false);
165 return ret;
166 }
167
168 public SWIGTYPE_p_Assimp__BaseImporter GetImporter(uint index) {
169 IntPtr cPtr = AssimpPINVOKE.Importer_GetImporter__SWIG_0(swigCPtr, index);
170 SWIGTYPE_p_Assimp__BaseImporter ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_Assimp__BaseImporter(cPtr, false);
171 return ret;
172 }
173
174 public SWIGTYPE_p_Assimp__BaseImporter GetImporter(string szExtension) {
175 IntPtr cPtr = AssimpPINVOKE.Importer_GetImporter__SWIG_1(swigCPtr, szExtension);
176 SWIGTYPE_p_Assimp__BaseImporter ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_Assimp__BaseImporter(cPtr, false);
177 return ret;
178 }
179
180 public uint GetImporterIndex(string szExtension) {
181 uint ret = AssimpPINVOKE.Importer_GetImporterIndex(swigCPtr, szExtension);
182 return ret;
183 }
184
157185 public void GetMemoryRequirements(aiMemoryInfo arg0) {
158186 AssimpPINVOKE.Importer_GetMemoryRequirements(swigCPtr, aiMemoryInfo.getCPtr(arg0));
159187 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
163191 AssimpPINVOKE.Importer_SetExtraVerbose(swigCPtr, bDo);
164192 }
165193
194 public SWIGTYPE_p_Assimp__ImporterPimpl Pimpl() {
195 IntPtr cPtr = AssimpPINVOKE.Importer_Pimpl__SWIG_0(swigCPtr);
196 SWIGTYPE_p_Assimp__ImporterPimpl ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_Assimp__ImporterPimpl(cPtr, false);
197 return ret;
198 }
199
166200 public string GetExtensionList() {
167201 string ret = AssimpPINVOKE.Importer_GetExtensionList__SWIG_2(swigCPtr);
168202 return ret;
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
0 /* ----------------------------------------------------------------------------
1 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.8
3 *
4 * Do not make changes to this file unless you know what you are doing--modify
5 * the SWIG interface file instead.
6 * ----------------------------------------------------------------------------- */
7
8
9 using System;
10 using System.Runtime.InteropServices;
11
12 public class SWIGTYPE_p_Assimp__BaseImporter {
13 private HandleRef swigCPtr;
14
15 internal SWIGTYPE_p_Assimp__BaseImporter(IntPtr cPtr, bool futureUse) {
16 swigCPtr = new HandleRef(this, cPtr);
17 }
18
19 protected SWIGTYPE_p_Assimp__BaseImporter() {
20 swigCPtr = new HandleRef(null, IntPtr.Zero);
21 }
22
23 internal static HandleRef getCPtr(SWIGTYPE_p_Assimp__BaseImporter obj) {
24 return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
25 }
26 }
0 /* ----------------------------------------------------------------------------
1 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.8
3 *
4 * Do not make changes to this file unless you know what you are doing--modify
5 * the SWIG interface file instead.
6 * ----------------------------------------------------------------------------- */
7
8
9 using System;
10 using System.Runtime.InteropServices;
11
12 public class SWIGTYPE_p_Assimp__ImporterPimpl {
13 private HandleRef swigCPtr;
14
15 internal SWIGTYPE_p_Assimp__ImporterPimpl(IntPtr cPtr, bool futureUse) {
16 swigCPtr = new HandleRef(this, cPtr);
17 }
18
19 protected SWIGTYPE_p_Assimp__ImporterPimpl() {
20 swigCPtr = new HandleRef(null, IntPtr.Zero);
21 }
22
23 internal static HandleRef getCPtr(SWIGTYPE_p_Assimp__ImporterPimpl obj) {
24 return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
25 }
26 }
0 /* ----------------------------------------------------------------------------
1 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.8
3 *
4 * Do not make changes to this file unless you know what you are doing--modify
5 * the SWIG interface file instead.
6 * ----------------------------------------------------------------------------- */
7
8
9 using System;
10 using System.Runtime.InteropServices;
11
12 public class SWIGTYPE_p_aiImporterDesc {
13 private HandleRef swigCPtr;
14
15 internal SWIGTYPE_p_aiImporterDesc(IntPtr cPtr, bool futureUse) {
16 swigCPtr = new HandleRef(this, cPtr);
17 }
18
19 protected SWIGTYPE_p_aiImporterDesc() {
20 swigCPtr = new HandleRef(null, IntPtr.Zero);
21 }
22
23 internal static HandleRef getCPtr(SWIGTYPE_p_aiImporterDesc obj) {
24 return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
25 }
26 }
0 /* ----------------------------------------------------------------------------
1 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.8
3 *
4 * Do not make changes to this file unless you know what you are doing--modify
5 * the SWIG interface file instead.
6 * ----------------------------------------------------------------------------- */
7
8
9 using System;
10 using System.Runtime.InteropServices;
11
12 public class SWIGTYPE_p_float {
13 private HandleRef swigCPtr;
14
15 internal SWIGTYPE_p_float(IntPtr cPtr, bool futureUse) {
16 swigCPtr = new HandleRef(this, cPtr);
17 }
18
19 protected SWIGTYPE_p_float() {
20 swigCPtr = new HandleRef(null, IntPtr.Zero);
21 }
22
23 internal static HandleRef getCPtr(SWIGTYPE_p_float obj) {
24 return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
25 }
26 }
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
0 /* ----------------------------------------------------------------------------
1 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.8
3 *
4 * Do not make changes to this file unless you know what you are doing--modify
5 * the SWIG interface file instead.
6 * ----------------------------------------------------------------------------- */
7
8
9 using System;
10 using System.Runtime.InteropServices;
11
12 public class SWIGTYPE_p_void {
13 private HandleRef swigCPtr;
14
15 internal SWIGTYPE_p_void(IntPtr cPtr, bool futureUse) {
16 swigCPtr = new HandleRef(this, cPtr);
17 }
18
19 protected SWIGTYPE_p_void() {
20 swigCPtr = new HandleRef(null, IntPtr.Zero);
21 }
22
23 internal static HandleRef getCPtr(SWIGTYPE_p_void obj) {
24 return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
25 }
26 }
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
7575 return ret;
7676 }
7777
78 public aiReturn AddBinaryProperty(SWIGTYPE_p_void pInput, uint pSizeInBytes, string pKey, uint type, uint index, aiPropertyTypeInfo pType) {
79 aiReturn ret = (aiReturn)AssimpPINVOKE.aiMaterial_AddBinaryProperty(swigCPtr, SWIGTYPE_p_void.getCPtr(pInput), pSizeInBytes, pKey, type, index, (int)pType);
80 return ret;
81 }
82
83 public aiReturn AddProperty(aiString pInput, string pKey, uint type, uint index) {
84 aiReturn ret = (aiReturn)AssimpPINVOKE.aiMaterial_AddProperty__SWIG_0(swigCPtr, aiString.getCPtr(pInput), pKey, type, index);
85 return ret;
86 }
87
88 public aiReturn AddProperty(aiString pInput, string pKey, uint type) {
89 aiReturn ret = (aiReturn)AssimpPINVOKE.aiMaterial_AddProperty__SWIG_1(swigCPtr, aiString.getCPtr(pInput), pKey, type);
90 return ret;
91 }
92
93 public aiReturn AddProperty(aiString pInput, string pKey) {
94 aiReturn ret = (aiReturn)AssimpPINVOKE.aiMaterial_AddProperty__SWIG_2(swigCPtr, aiString.getCPtr(pInput), pKey);
95 return ret;
96 }
97
98 public aiReturn RemoveProperty(string pKey, uint type, uint index) {
99 aiReturn ret = (aiReturn)AssimpPINVOKE.aiMaterial_RemoveProperty__SWIG_0(swigCPtr, pKey, type, index);
100 return ret;
101 }
102
103 public aiReturn RemoveProperty(string pKey, uint type) {
104 aiReturn ret = (aiReturn)AssimpPINVOKE.aiMaterial_RemoveProperty__SWIG_1(swigCPtr, pKey, type);
105 return ret;
106 }
107
108 public aiReturn RemoveProperty(string pKey) {
109 aiReturn ret = (aiReturn)AssimpPINVOKE.aiMaterial_RemoveProperty__SWIG_2(swigCPtr, pKey);
110 return ret;
111 }
112
113 public void Clear() {
114 AssimpPINVOKE.aiMaterial_Clear(swigCPtr);
115 }
116
117 public static void CopyPropertyList(aiMaterial pcDest, aiMaterial pcSrc) {
118 AssimpPINVOKE.aiMaterial_CopyPropertyList(aiMaterial.getCPtr(pcDest), aiMaterial.getCPtr(pcSrc));
119 }
120
78121 public bool GetDiffuse(aiColor4D INOUT) {
79122 bool ret = AssimpPINVOKE.aiMaterial_GetDiffuse(swigCPtr, aiColor4D.getCPtr(INOUT));
80123 return ret;
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
4545 public aiMatrix3x3(float _a1, float _a2, float _a3, float _b1, float _b2, float _b3, float _c1, float _c2, float _c3) : this(AssimpPINVOKE.new_aiMatrix3x3__SWIG_1(_a1, _a2, _a3, _b1, _b2, _b3, _c1, _c2, _c3), true) {
4646 }
4747
48 public aiMatrix3x3 __mulnset__(aiMatrix3x3 m) {
49 aiMatrix3x3 ret = new aiMatrix3x3(AssimpPINVOKE.aiMatrix3x3___mulnset__(swigCPtr, aiMatrix3x3.getCPtr(m)), false);
50 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
51 return ret;
52 }
53
54 public aiMatrix3x3 __mul__(aiMatrix3x3 m) {
55 aiMatrix3x3 ret = new aiMatrix3x3(AssimpPINVOKE.aiMatrix3x3___mul__(swigCPtr, aiMatrix3x3.getCPtr(m)), true);
56 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
57 return ret;
58 }
59
60 public SWIGTYPE_p_float __idx__(uint p_iIndex) {
61 IntPtr cPtr = AssimpPINVOKE.aiMatrix3x3___idx____SWIG_0(swigCPtr, p_iIndex);
62 SWIGTYPE_p_float ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_float(cPtr, false);
63 return ret;
64 }
65
66 public bool __equal__(aiMatrix4x4 m) {
67 bool ret = AssimpPINVOKE.aiMatrix3x3___equal__(swigCPtr, aiMatrix4x4.getCPtr(m));
68 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
69 return ret;
70 }
71
72 public bool __nequal__(aiMatrix4x4 m) {
73 bool ret = AssimpPINVOKE.aiMatrix3x3___nequal__(swigCPtr, aiMatrix4x4.getCPtr(m));
74 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
75 return ret;
76 }
77
4878 public aiMatrix3x3(aiMatrix4x4 pMatrix) : this(AssimpPINVOKE.new_aiMatrix3x3__SWIG_2(aiMatrix4x4.getCPtr(pMatrix)), true) {
4979 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
5080 }
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
4949 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
5050 }
5151
52 public SWIGTYPE_p_float __idx__(uint p_iIndex) {
53 IntPtr cPtr = AssimpPINVOKE.aiMatrix4x4___idx____SWIG_0(swigCPtr, p_iIndex);
54 SWIGTYPE_p_float ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_float(cPtr, false);
55 return ret;
56 }
57
58 public bool __equal__(aiMatrix4x4 m) {
59 bool ret = AssimpPINVOKE.aiMatrix4x4___equal__(swigCPtr, aiMatrix4x4.getCPtr(m));
60 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
61 return ret;
62 }
63
64 public bool __nequal__(aiMatrix4x4 m) {
65 bool ret = AssimpPINVOKE.aiMatrix4x4___nequal__(swigCPtr, aiMatrix4x4.getCPtr(m));
66 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
67 return ret;
68 }
69
70 public aiMatrix4x4 __mulnset__(aiMatrix4x4 m) {
71 aiMatrix4x4 ret = new aiMatrix4x4(AssimpPINVOKE.aiMatrix4x4___mulnset__(swigCPtr, aiMatrix4x4.getCPtr(m)), false);
72 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
73 return ret;
74 }
75
76 public aiMatrix4x4 __mul__(aiMatrix4x4 m) {
77 aiMatrix4x4 ret = new aiMatrix4x4(AssimpPINVOKE.aiMatrix4x4___mul__(swigCPtr, aiMatrix4x4.getCPtr(m)), true);
78 if (AssimpPINVOKE.SWIGPendingException.Pending) throw AssimpPINVOKE.SWIGPendingException.Retrieve();
79 return ret;
80 }
81
5282 public aiMatrix4x4 Transpose() {
5383 aiMatrix4x4 ret = new aiMatrix4x4(AssimpPINVOKE.aiMatrix4x4_Transpose(swigCPtr), false);
5484 return ret;
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
3030 aiProcess_OptimizeMeshes = 0x200000,
3131 aiProcess_OptimizeGraph = 0x400000,
3232 aiProcess_FlipUVs = 0x800000,
33 aiProcess_FlipWindingOrder = 0x1000000
33 aiProcess_FlipWindingOrder = 0x1000000,
34 aiProcess_SplitByBoneCount = 0x2000000,
35 aiProcess_Debone = 0x4000000
3436
3537 , aiProcess_ConvertToLeftHanded = aiProcess_MakeLeftHanded|aiProcess_FlipUVs|aiProcess_FlipWindingOrder,
3638 }
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
4242 public aiQuaternion() : this(AssimpPINVOKE.new_aiQuaternion__SWIG_0(), true) {
4343 }
4444
45 public aiQuaternion(float _w, float _x, float _y, float _z) : this(AssimpPINVOKE.new_aiQuaternion__SWIG_1(_w, _x, _y, _z), true) {
45 public aiQuaternion(float w, float x, float y, float z) : this(AssimpPINVOKE.new_aiQuaternion__SWIG_1(w, x, y, z), true) {
4646 }
4747
4848 public aiQuaternion(aiMatrix3x3 pRotMatrix) : this(AssimpPINVOKE.new_aiQuaternion__SWIG_2(aiMatrix3x3.getCPtr(pRotMatrix)), true) {
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
160160 return ret;
161161 }
162162
163 public SWIGTYPE_p_void mPrivate {
164 set {
165 AssimpPINVOKE.aiScene_mPrivate_set(swigCPtr, SWIGTYPE_p_void.getCPtr(value));
166 }
167 get {
168 IntPtr cPtr = AssimpPINVOKE.aiScene_mPrivate_get(swigCPtr);
169 SWIGTYPE_p_void ret = (cPtr == IntPtr.Zero) ? null : new SWIGTYPE_p_void(cPtr, false);
170 return ret;
171 }
172 }
173
163174 private aiAnimationVector GetmAnimations() {
164175 IntPtr cPtr = AssimpPINVOKE.aiScene_GetmAnimations(swigCPtr);
165176 aiAnimationVector ret = (cPtr == IntPtr.Zero) ? null : new aiAnimationVector(cPtr, true);
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
6969 return ret;
7070 }
7171
72 public string C_Str() {
73 string ret = AssimpPINVOKE.aiString_C_Str(swigCPtr);
74 return ret;
75 }
76
7277 public uint Length {
7378 set {
7479 AssimpPINVOKE.aiString_Length_set(swigCPtr, value);
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
00 /* ----------------------------------------------------------------------------
11 * This file was automatically generated by SWIG (http://www.swig.org).
2 * Version 2.0.1
2 * Version 2.0.8
33 *
44 * Do not make changes to this file unless you know what you are doing--modify
55 * the SWIG interface file instead.
183183 (aiPostProcessSteps)0);
184184
185185 // default model
186 var path = "../../../../../../test/models/3DS/test1.3ds";
186 var path = "../../../../../test/models/3DS/test1.3ds";
187187
188188 importer = new Importer();
189189 string[] args = Environment.GetCommandLineArgs();
+0
-66
port/PyAssimp/README less more
0 PyAssimp Readme
1 ---------------
2
3
4 -- a simple Python wrapper for Assimp using ctypes to access
5 the library. Tested for Python 2.6. Known not to work with
6 Python 2.4.
7
8
9 Note that pyassimp is by no means considered mature. It works,
10 but it is far away from wrapping Assimp perfectly.
11
12
13 USAGE
14 =====
15
16 To get started with pyAssimp, examine the sample.py script, which
17 illustrates the basic usage. All Assimp data structures are
18 wrapped using ctypes. All the data+length fields in Assimp's
19 data structures (such as 'aiMesh::mNumVertices','aiMesh::mVertices')
20 are replaced by simple python lists, so you can call len() on
21 them to get their respective size and access members using
22 [].
23
24 For example, to load a file named 'hello.3ds' and print the first
25 vertex of the first mesh, you would do (proper error handling
26 substituted by assertions ...):
27
28 > from pyassimp import pyassimp, errors
29 >
30 > try:
31 > scene = pyassimp.load('hello.3ds')
32 > except AssimpError, msg:
33 > print(msg)
34 > return
35
36 > assert len(scene.meshes)
37 > mesh = scene.meshes[0]
38
39 > assert len(mesh.vertices)
40 > print(mesh.vertices[0])
41
42 > # don't forget this one, or you will leak!
43 > pyassimp.release(scene)
44
45
46 INSTALL
47 =======
48
49 PyAssimp requires a assimp dynamic library (DLL on windows,
50 so on linux :-) in order to work. The default search directories
51 are:
52
53 - the current directory
54 - on linux additionally: /usr/local/lib
55
56 To build that library, refer to the Assimp master INSTALL
57 instructions. To look in more places, edit ./pyassimp/helper.py.
58 There's an 'additional_dirs' list waiting for your entries.
59
60
61
62
63
64
65
0 PyAssimp Readme
1 ===============
2
3 A simple Python wrapper for Assimp using `ctypes` to access the library.
4 Requires Python >= 2.6.
5
6 Python 3 support is mostly here, but not well tested.
7
8 Note that pyassimp is not complete. Many ASSIMP features are missing. In
9 particular, only loading of models is currently supported (no export).
10
11 USAGE
12 -----
13
14 To get started with pyAssimp, examine the `sample.py` script in `scripts/`,
15 which illustrates the basic usage. All Assimp data structures are wrapped using
16 ctypes. All the data+length fields in Assimp's data structures (such as
17 `aiMesh::mNumVertices`, `aiMesh::mVertices`) are replaced by simple python
18 lists, so you can call len() on them to get their respective size and access
19 members using [].
20
21 For example, to load a file named 'hello.3ds' and print the first
22 vertex of the first mesh, you would do (proper error handling
23 substituted by assertions ...):
24
25 ```python
26
27 from pyassimp import *
28 scene = load('hello.3ds')
29
30 assert len(scene.meshes)
31 mesh = scene.meshes[0]
32
33 assert len(mesh.vertices)
34 print(mesh.vertices[0])
35
36 # don't forget this one, or you will leak!
37 release(scene)
38
39 ```
40
41 Another example to list the 'top nodes' in a
42 scene:
43
44 ```python
45
46 from pyassimp import *
47 scene = load('hello.3ds')
48
49 for c in scene.rootnode.children:
50 print(str(c))
51
52 release(scene)
53
54 ```
55
56 INSTALL
57 -------
58
59 Install `pyassimp` by running:
60
61 > python setup.py install
62
63 PyAssimp requires a assimp dynamic library (`DLL` on windows,
64 `.so` on linux :-) in order to work. The default search directories
65 are:
66
67 - the current directory
68 - on linux additionally: `/usr/lib` and `/usr/local/lib`
69
70 To build that library, refer to the Assimp master INSTALL
71 instructions. To look in more places, edit `./pyassimp/helper.py`.
72 There's an `additional_dirs` list waiting for your entries.
73
4040 # ---------------------------------------------------------------------------
4141
4242 """Update PyAssimp's data structures to keep up with the
43 C/C++ headers."""
43 C/C++ headers.
44
45 This script is meant to be executed in the source tree, directly from
46 port/PyAssimp/gen
47 """
4448
4549 import os
4650 import re
9599 return None
96100
97101 t = t.strip()
98 types = {'unsigned int':'uint', 'unsigned char':'ubyte', 'size_t':'uint',}
102 types = {'unsigned int':'uint', 'unsigned char':'ubyte',}
99103 if t in types:
100104 t = types[t]
101105 t = prefix + t
209213
210214 # Restructure
211215 text = RErestruc.sub(restructure, text)
212
213216 # Replace comments
214 text = RErpcom.sub('#\g<line>', text)
217 text = RErpcom.sub('# \g<line>', text)
218 text = text.replace("),#", "),\n#")
219 text = text.replace("#", "\n#")
220 text = "".join([l for l in text.splitlines(True) if not l.strip().endswith("#")]) # remove empty comment lines
215221
216222 # Whether it's selfreferencing: ex. struct Node { Node* parent; };
217223 selfreferencing = text.find('POINTER('+name+')') != -1
244250 text = text.replace('$DEFINES$', defines)
245251 else:
246252 text = text.replace('$DEFINES$', '')
253
247254
248255 result.append((primitive, selfreferencing, complex, text))
249256
250257 return result
251258
252259 text = "#-*- coding: UTF-8 -*-\n\n"
253 text += "from ctypes import POINTER, c_int, c_uint, c_char, c_float, Structure, c_char_p, c_double, c_ubyte\n\n"
260 text += "from ctypes import POINTER, c_int, c_uint, c_size_t, c_char, c_float, Structure, c_char_p, c_double, c_ubyte\n\n"
254261
255262 structs1 = ""
256263 structs2 = ""
257264 structs3 = ""
258265 structs4 = ""
259266
260 path = '../include/'
267 path = '../../../include/assimp'
261268 files = os.listdir (path)
262269 #files = ["aiScene.h", "aiTypes.h"]
263270 for fileName in files:
275282
276283 text += structs1 + structs2 + structs3 + structs4
277284
278 file = open('structs.txt', 'w')
285 file = open('structs.py', 'w')
279286 file.write(text)
280287 file.close()
288
289 print("Generation done. You can now review the file 'structs.py' and merge it.")
0 #-*- coding: UTF-8 -*-
0 from .core import *
0 #-*- coding: UTF-8 -*-
1
2 """
3 PyAssimp
4
5 This is the main-module of PyAssimp.
6 """
7
8 import sys
9 if sys.version_info < (2,6):
10 raise 'pyassimp: need python 2.6 or newer'
11
12
13 import ctypes
14 import os
15 import numpy
16
17 import logging; logger = logging.getLogger("pyassimp")
18
19 # Attach a default, null handler, to the logger.
20 # applications can easily get log messages from pyassimp
21 # by calling for instance
22 # >>> logging.basicConfig(level=logging.DEBUG)
23 # before importing pyassimp
24 class NullHandler(logging.Handler):
25 def emit(self, record):
26 pass
27 h = NullHandler()
28 logger.addHandler(h)
29
30 from . import structs
31 from .errors import AssimpError
32 from . import helper
33
34
35 assimp_structs_as_tuple = (
36 structs.Matrix4x4,
37 structs.Matrix3x3,
38 structs.Vector2D,
39 structs.Vector3D,
40 structs.Color3D,
41 structs.Color4D,
42 structs.Quaternion,
43 structs.Plane,
44 structs.Texel)
45
46 def make_tuple(ai_obj, type = None):
47 res = None
48
49 if isinstance(ai_obj, structs.Matrix4x4):
50 res = numpy.array([getattr(ai_obj, e[0]) for e in ai_obj._fields_]).reshape((4,4))
51 #import pdb;pdb.set_trace()
52 elif isinstance(ai_obj, structs.Matrix3x3):
53 res = numpy.array([getattr(ai_obj, e[0]) for e in ai_obj._fields_]).reshape((3,3))
54 else:
55 res = numpy.array([getattr(ai_obj, e[0]) for e in ai_obj._fields_])
56
57 return res
58
59 # It is faster and more correct to have an init function for each assimp class
60 def _init_face(aiFace):
61 aiFace.indices = [aiFace.mIndices[i] for i in range(aiFace.mNumIndices)]
62
63 assimp_struct_inits = \
64 { structs.Face : _init_face }
65
66 def call_init(obj, caller = None):
67 if helper.hasattr_silent(obj,'contents'): #pointer
68 _init(obj.contents, obj, caller)
69 else:
70 _init(obj,parent=caller)
71
72 def _is_init_type(obj):
73 if helper.hasattr_silent(obj,'contents'): #pointer
74 return _is_init_type(obj[0])
75 # null-pointer case that arises when we reach a mesh attribute
76 # like mBitangents which use mNumVertices rather than mNumBitangents
77 # so it breaks the 'is iterable' check.
78 # Basically:
79 # FIXME!
80 elif not bool(obj):
81 return False
82 tname = obj.__class__.__name__
83 return not (tname[:2] == 'c_' or tname == 'Structure' \
84 or tname == 'POINTER') and not isinstance(obj,int)
85
86 def _init(self, target = None, parent = None):
87 """
88 Custom initialize() for C structs, adds safely accessable member functionality.
89
90 :param target: set the object which receive the added methods. Useful when manipulating
91 pointers, to skip the intermediate 'contents' deferencing.
92 """
93 if not target:
94 target = self
95
96 dirself = dir(self)
97 for m in dirself:
98
99 if m.startswith("_"):
100 continue
101
102 if m.startswith('mNum'):
103 if 'm' + m[4:] in dirself:
104 continue # will be processed later on
105 else:
106 name = m[1:].lower()
107
108 obj = getattr(self, m)
109 setattr(target, name, obj)
110 continue
111
112 if m == 'mName':
113 obj = self.mName
114 target.name = str(obj.data.decode("utf-8"))
115 target.__class__.__repr__ = lambda x: str(x.__class__) + "(" + x.name + ")"
116 target.__class__.__str__ = lambda x: x.name
117 continue
118
119 name = m[1:].lower()
120
121 obj = getattr(self, m)
122
123 # Create tuples
124 if isinstance(obj, assimp_structs_as_tuple):
125 setattr(target, name, make_tuple(obj))
126 logger.debug(str(self) + ": Added array " + str(getattr(target, name)) + " as self." + name.lower())
127 continue
128
129 if m.startswith('m'):
130
131 if name == "parent":
132 setattr(target, name, parent)
133 logger.debug("Added a parent as self." + name)
134 continue
135
136 if helper.hasattr_silent(self, 'mNum' + m[1:]):
137
138 length = getattr(self, 'mNum' + m[1:])
139
140 # -> special case: properties are
141 # stored as a dict.
142 if m == 'mProperties':
143 setattr(target, name, _get_properties(obj, length))
144 continue
145
146
147 if not length: # empty!
148 setattr(target, name, [])
149 logger.debug(str(self) + ": " + name + " is an empty list.")
150 continue
151
152
153 try:
154 if obj._type_ in assimp_structs_as_tuple:
155 setattr(target, name, numpy.array([make_tuple(obj[i]) for i in range(length)], dtype=numpy.float32))
156
157 logger.debug(str(self) + ": Added an array of numpy arrays (type "+ str(type(obj)) + ") as self." + name)
158
159 else:
160 setattr(target, name, [obj[i] for i in range(length)]) #TODO: maybe not necessary to recreate an array?
161
162 logger.debug(str(self) + ": Added list of " + str(obj) + " " + name + " as self." + name + " (type: " + str(type(obj)) + ")")
163
164 # initialize array elements
165 try:
166 init = assimp_struct_inits[type(obj[0])]
167 except KeyError:
168 if _is_init_type(obj[0]):
169 for e in getattr(target, name):
170 call_init(e, target)
171 else:
172 for e in getattr(target, name):
173 init(e)
174
175
176 except IndexError:
177 logger.error("in " + str(self) +" : mismatch between mNum" + name + " and the actual amount of data in m" + name + ". This may be due to version mismatch between libassimp and pyassimp. Quitting now.")
178 sys.exit(1)
179
180 except ValueError as e:
181
182 logger.error("In " + str(self) + "->" + name + ": " + str(e) + ". Quitting now.")
183 if "setting an array element with a sequence" in str(e):
184 logger.error("Note that pyassimp does not currently "
185 "support meshes with mixed triangles "
186 "and quads. Try to load your mesh with"
187 " a post-processing to triangulate your"
188 " faces.")
189 sys.exit(1)
190
191
192 else: # starts with 'm' but not iterable
193
194 setattr(target, name, obj)
195 logger.debug("Added " + name + " as self." + name + " (type: " + str(type(obj)) + ")")
196
197 if _is_init_type(obj):
198 call_init(obj, target)
199
200
201
202
203 if isinstance(self, structs.Mesh):
204 _finalize_mesh(self, target)
205
206 if isinstance(self, structs.Texture):
207 _finalize_texture(self, target)
208
209
210 return self
211
212 class AssimpLib(object):
213 """
214 Assimp-Singleton
215 """
216 load, release, dll = helper.search_library()
217
218 #the loader as singleton
219 _assimp_lib = AssimpLib()
220
221 def pythonize_assimp(type, obj, scene):
222 """ This method modify the Assimp data structures
223 to make them easier to work with in Python.
224
225 Supported operations:
226 - MESH: replace a list of mesh IDs by reference to these meshes
227 - ADDTRANSFORMATION: add a reference to an object's transformation taken from their associated node.
228
229 :param type: the type of modification to operate (cf above)
230 :param obj: the input object to modify
231 :param scene: a reference to the whole scene
232 """
233
234 if type == "MESH":
235 meshes = []
236 for i in obj:
237 meshes.append(scene.meshes[i])
238 return meshes
239
240 if type == "ADDTRANSFORMATION":
241
242 def getnode(node, name):
243 if node.name == name: return node
244 for child in node.children:
245 n = getnode(child, name)
246 if n: return n
247
248 node = getnode(scene.rootnode, obj.name)
249 if not node:
250 raise AssimpError("Object " + str(obj) + " has no associated node!")
251 setattr(obj, "transformation", node.transformation)
252
253
254 def recur_pythonize(node, scene):
255 """ Recursively call pythonize_assimp on
256 nodes tree to apply several post-processing to
257 pythonize the assimp datastructures.
258 """
259
260 node.meshes = pythonize_assimp("MESH", node.meshes, scene)
261
262 for mesh in node.meshes:
263 mesh.material = scene.materials[mesh.materialindex]
264
265 for cam in scene.cameras:
266 pythonize_assimp("ADDTRANSFORMATION", cam, scene)
267
268 #for light in scene.lights:
269 # pythonize_assimp("ADDTRANSFORMATION", light, scene)
270
271 for c in node.children:
272 recur_pythonize(c, scene)
273
274
275 def load(filename, processing=0):
276 """
277 Loads the model with some specific processing parameters.
278
279 filename - file to load model from
280 processing - processing parameters
281
282 result Scene-object with model-data
283
284 throws AssimpError - could not open file
285 """
286 #read pure data
287 #from ctypes import c_char_p, c_uint
288 #model = _assimp_lib.load(c_char_p(filename), c_uint(processing))
289 model = _assimp_lib.load(filename.encode("ascii"), processing)
290 if not model:
291 #Uhhh, something went wrong!
292 raise AssimpError("could not import file: %s" % filename)
293
294 scene = _init(model.contents)
295
296 recur_pythonize(scene.rootnode, scene)
297
298 return scene
299
300 def release(scene):
301 from ctypes import pointer
302 _assimp_lib.release(pointer(scene))
303
304 def _finalize_texture(tex, target):
305 setattr(target, "achformathint", tex.achFormatHint)
306 data = numpy.array([make_tuple(getattr(tex, "pcData")[i]) for i in range(tex.mWidth * tex.mHeight)])
307 setattr(target, "data", data)
308
309 def _finalize_mesh(mesh, target):
310 """ Building of meshes is a bit specific.
311
312 We override here the various datasets that can
313 not be process as regular fields.
314
315 For instance, the length of the normals array is
316 mNumVertices (no mNumNormals is available)
317 """
318 nb_vertices = getattr(mesh, "mNumVertices")
319
320 def fill(name):
321 mAttr = getattr(mesh, name)
322 if mAttr:
323 data = numpy.array([make_tuple(getattr(mesh, name)[i]) for i in range(nb_vertices)], dtype=numpy.float32)
324 setattr(target, name[1:].lower(), data)
325 else:
326 setattr(target, name[1:].lower(), numpy.array([], dtype="float32"))
327
328 def fillarray(name):
329 mAttr = getattr(mesh, name)
330
331 data = []
332 for index, mSubAttr in enumerate(mAttr):
333 if mSubAttr:
334 data.append([make_tuple(getattr(mesh, name)[index][i]) for i in range(nb_vertices)])
335
336 setattr(target, name[1:].lower(), numpy.array(data, dtype=numpy.float32))
337
338 fill("mNormals")
339 fill("mTangents")
340 fill("mBitangents")
341
342 fillarray("mColors")
343 fillarray("mTextureCoords")
344
345 # prepare faces
346 faces = numpy.array([f.indices for f in target.faces], dtype=numpy.int32)
347 setattr(target, 'faces', faces)
348
349
350 class PropertyGetter(dict):
351 def __getitem__(self, key):
352 semantic = 0
353 if isinstance(key, tuple):
354 key, semantic = key
355
356 return dict.__getitem__(self, (key, semantic))
357
358 def keys(self):
359 for k in dict.keys(self):
360 yield k[0]
361
362 def __iter__(self):
363 return self.keys()
364
365 def items(self):
366 for k, v in dict.items(self):
367 yield k[0], v
368
369
370 def _get_properties(properties, length):
371 """
372 Convenience Function to get the material properties as a dict
373 and values in a python format.
374 """
375 result = {}
376 #read all properties
377 for p in [properties[i] for i in range(length)]:
378 #the name
379 p = p.contents
380 key = (str(p.mKey.data.decode("utf-8")).split('.')[1], p.mSemantic)
381
382 #the data
383 from ctypes import POINTER, cast, c_int, c_float, sizeof
384 if p.mType == 1:
385 arr = cast(p.mData, POINTER(c_float * int(p.mDataLength/sizeof(c_float)) )).contents
386 value = [x for x in arr]
387 elif p.mType == 3: #string can't be an array
388 value = cast(p.mData, POINTER(structs.MaterialPropertyString)).contents.data.decode("utf-8")
389 elif p.mType == 4:
390 arr = cast(p.mData, POINTER(c_int * int(p.mDataLength/sizeof(c_int)) )).contents
391 value = [x for x in arr]
392 else:
393 value = p.mData[:p.mDataLength]
394
395 if len(value) == 1:
396 [value] = value
397
398 result[key] = value
399
400 return PropertyGetter(result)
401
402 def decompose_matrix(matrix):
403 if not isinstance(matrix, structs.Matrix4x4):
404 raise AssimpError("pyassimp.decompose_matrix failed: Not a Matrix4x4!")
405
406 scaling = structs.Vector3D()
407 rotation = structs.Quaternion()
408 position = structs.Vector3D()
409
410 from ctypes import byref, pointer
411 _assimp_lib.dll.aiDecomposeMatrix(pointer(matrix), byref(scaling), byref(rotation), byref(position))
412 return scaling._init(), rotation._init(), position._init()
55
66 import os
77 import ctypes
8 import structs
8 from ctypes import POINTER
99 import operator
10 import numpy
11 from numpy import linalg
1012
11 from errors import AssimpError
12 from ctypes import POINTER
13 import logging;logger = logging.getLogger("pyassimp")
14
15 from .errors import AssimpError
1316
1417 additional_dirs, ext_whitelist = [],[]
1518
1619 # populate search directories and lists of allowed file extensions
1720 # depending on the platform we're running on.
1821 if os.name=='posix':
22 additional_dirs.append('/usr/lib/')
1923 additional_dirs.append('/usr/local/lib/')
2024
2125 # note - this won't catch libassimp.so.N.n, but
2226 # currently there's always a symlink called
2327 # libassimp.so in /usr/local/lib.
2428 ext_whitelist.append('.so')
29 # libassimp.dylib in /usr/local/lib
30 ext_whitelist.append('.dylib')
2531
2632 elif os.name=='nt':
2733 ext_whitelist.append('.dll')
28
29 print(additional_dirs)
34 path_dirs = os.environ['PATH'].split(';')
35 for dir_candidate in path_dirs:
36 if 'assimp' in dir_candidate.lower():
37 additional_dirs.append(dir_candidate)
38
39 #print(additional_dirs)
3040 def vec2tuple(x):
3141 """ Converts a VECTOR3D to a Tuple """
3242 return (x.x, x.y, x.z)
43
44 def transform(vector3, matrix4x4):
45 """ Apply a transformation matrix on a 3D vector.
46
47 :param vector3: a numpy array with 3 elements
48 :param matrix4x4: a numpy 4x4 matrix
49 """
50 return numpy.dot(matrix4x4, numpy.append(vector3, 1.))
51
52
53 def get_bounding_box(scene):
54 bb_min = [1e10, 1e10, 1e10] # x,y,z
55 bb_max = [-1e10, -1e10, -1e10] # x,y,z
56 return get_bounding_box_for_node(scene.rootnode, bb_min, bb_max, linalg.inv(scene.rootnode.transformation))
57
58 def get_bounding_box_for_node(node, bb_min, bb_max, transformation):
59
60 transformation = numpy.dot(transformation, node.transformation)
61 for mesh in node.meshes:
62 for v in mesh.vertices:
63 v = transform(v, transformation)
64 bb_min[0] = min(bb_min[0], v[0])
65 bb_min[1] = min(bb_min[1], v[1])
66 bb_min[2] = min(bb_min[2], v[2])
67 bb_max[0] = max(bb_max[0], v[0])
68 bb_max[1] = max(bb_max[1], v[1])
69 bb_max[2] = max(bb_max[2], v[2])
70
71
72 for child in node.children:
73 bb_min, bb_max = get_bounding_box_for_node(child, bb_min, bb_max, transformation)
74
75 return bb_min, bb_max
76
3377
3478
3579 def try_load_functions(library,dll,candidates):
5397 pass
5498 else:
5599 #Library found!
56 load.restype = POINTER(structs.Scene)
100 from .structs import Scene
101 load.restype = POINTER(Scene)
57102
58103 candidates.append((library, load, release, dll))
59104
87132 continue
88133
89134 library = os.path.join(curfolder, filename)
90 print 'Try ',library
135 logger.debug('Try ' + library)
91136 try:
92137 dll = ctypes.cdll.LoadLibrary(library)
93 except:
138 except Exception as e:
139 logger.warning(str(e))
94140 # OK, this except is evil. But different OSs will throw different
95141 # errors. So just ignore any errors.
96142 continue
99145
100146 if not candidates:
101147 # no library found
102 raise AssimpError, "assimp library not found"
148 raise AssimpError("assimp library not found")
103149 else:
104150 # get the newest library
105151 candidates = map(lambda x: (os.lstat(x[0])[-2], x), candidates)
106152 res = max(candidates, key=operator.itemgetter(0))[1]
107 print 'Taking ',res[0]
153 logger.debug('Using assimp library located at ' + res[0])
108154
109155 # XXX: if there are 1000 dll/so files containing 'assimp'
110156 # in their name, do we have all of them in our address
113159 # XXX: take version postfix of the .so on linux?
114160 return res[1:]
115161
116
117
162 def hasattr_silent(object, name):
163 """
164 Calls hasttr() with the given parameters and preserves the legacy (pre-Python 3.2)
165 functionality of silently catching exceptions.
166
167 Returns the result of hasatter() or False if an exception was raised.
168 """
169
170 try:
171 return hasattr(object, name)
172 except:
173 return False
0 # <hr>Calculates the tangents and bitangents for the imported meshes.
1 #
2 # Does nothing if a mesh does not have normals. You might want this post
3 # processing step to be executed if you plan to use tangent space calculations
4 # such as normal mapping applied to the meshes. There's a config setting,
5 # <tt>#AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE<tt>, which allows you to specify
6 # a maximum smoothing angle for the algorithm. However, usually you'll
7 # want to leave it at the default value.
8 #
9 aiProcess_CalcTangentSpace = 0x1
10
11 ## <hr>Identifies and joins identical vertex data sets within all
12 # imported meshes.
13 #
14 # After this step is run, each mesh contains unique vertices,
15 # so a vertex may be used by multiple faces. You usually want
16 # to use this post processing step. If your application deals with
17 # indexed geometry, this step is compulsory or you'll just waste rendering
18 # time. <b>If this flag is not specified<b>, no vertices are referenced by
19 # more than one face and <b>no index buffer is required<b> for rendering.
20 #
21 aiProcess_JoinIdenticalVertices = 0x2
22
23 ## <hr>Converts all the imported data to a left-handed coordinate space.
24 #
25 # By default the data is returned in a right-handed coordinate space (which
26 # OpenGL prefers). In this space, +X points to the right,
27 # +Z points towards the viewer, and +Y points upwards. In the DirectX
28 # coordinate space +X points to the right, +Y points upwards, and +Z points
29 # away from the viewer.
30 #
31 # You'll probably want to consider this flag if you use Direct3D for
32 # rendering. The #aiProcess_ConvertToLeftHanded flag supersedes this
33 # setting and bundles all conversions typically required for D3D-based
34 # applications.
35 #
36 aiProcess_MakeLeftHanded = 0x4
37
38 ## <hr>Triangulates all faces of all meshes.
39 #
40 # By default the imported mesh data might contain faces with more than 3
41 # indices. For rendering you'll usually want all faces to be triangles.
42 # This post processing step splits up faces with more than 3 indices into
43 # triangles. Line and point primitives are #not# modified! If you want
44 # 'triangles only' with no other kinds of primitives, try the following
45 # solution:
46 # <ul>
47 # <li>Specify both #aiProcess_Triangulate and #aiProcess_SortByPType <li>
48 # <li>Ignore all point and line meshes when you process assimp's output<li>
49 # <ul>
50 #
51 aiProcess_Triangulate = 0x8
52
53 ## <hr>Removes some parts of the data structure (animations, materials,
54 # light sources, cameras, textures, vertex components).
55 #
56 # The components to be removed are specified in a separate
57 # configuration option, <tt>#AI_CONFIG_PP_RVC_FLAGS<tt>. This is quite useful
58 # if you don't need all parts of the output structure. Vertex colors
59 # are rarely used today for example... Calling this step to remove unneeded
60 # data from the pipeline as early as possible results in increased
61 # performance and a more optimized output data structure.
62 # This step is also useful if you want to force Assimp to recompute
63 # normals or tangents. The corresponding steps don't recompute them if
64 # they're already there (loaded from the source asset). By using this
65 # step you can make sure they are NOT there.
66 #
67 # This flag is a poor one, mainly because its purpose is usually
68 # misunderstood. Consider the following case: a 3D model has been exported
69 # from a CAD app, and it has per-face vertex colors. Vertex positions can't be
70 # shared, thus the #aiProcess_JoinIdenticalVertices step fails to
71 # optimize the data because of these nasty little vertex colors.
72 # Most apps don't even process them, so it's all for nothing. By using
73 # this step, unneeded components are excluded as early as possible
74 # thus opening more room for internal optimizations.
75 #
76 aiProcess_RemoveComponent = 0x10
77
78 ## <hr>Generates normals for all faces of all meshes.
79 #
80 # This is ignored if normals are already there at the time this flag
81 # is evaluated. Model importers try to load them from the source file, so
82 # they're usually already there. Face normals are shared between all points
83 # of a single face, so a single point can have multiple normals, which
84 # forces the library to duplicate vertices in some cases.
85 # #aiProcess_JoinIdenticalVertices is #senseless# then.
86 #
87 # This flag may not be specified together with #aiProcess_GenSmoothNormals.
88 #
89 aiProcess_GenNormals = 0x20
90
91 ## <hr>Generates smooth normals for all vertices in the mesh.
92 #
93 # This is ignored if normals are already there at the time this flag
94 # is evaluated. Model importers try to load them from the source file, so
95 # they're usually already there.
96 #
97 # This flag may not be specified together with
98 # #aiProcess_GenNormals. There's a configuration option,
99 # <tt>#AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE<tt> which allows you to specify
100 # an angle maximum for the normal smoothing algorithm. Normals exceeding
101 # this limit are not smoothed, resulting in a 'hard' seam between two faces.
102 # Using a decent angle here (e.g. 80 degrees) results in very good visual
103 # appearance.
104 #
105 aiProcess_GenSmoothNormals = 0x40
106
107 ## <hr>Splits large meshes into smaller sub-meshes.
108 #
109 # This is quite useful for real-time rendering, where the number of triangles
110 # which can be maximally processed in a single draw-call is limited
111 # by the video driverhardware. The maximum vertex buffer is usually limited
112 # too. Both requirements can be met with this step: you may specify both a
113 # triangle and vertex limit for a single mesh.
114 #
115 # The split limits can (and should!) be set through the
116 # <tt>#AI_CONFIG_PP_SLM_VERTEX_LIMIT<tt> and <tt>#AI_CONFIG_PP_SLM_TRIANGLE_LIMIT<tt>
117 # settings. The default values are <tt>#AI_SLM_DEFAULT_MAX_VERTICES<tt> and
118 # <tt>#AI_SLM_DEFAULT_MAX_TRIANGLES<tt>.
119 #
120 # Note that splitting is generally a time-consuming task, but only if there's
121 # something to split. The use of this step is recommended for most users.
122 #
123 aiProcess_SplitLargeMeshes = 0x80
124
125 ## <hr>Removes the node graph and pre-transforms all vertices with
126 # the local transformation matrices of their nodes.
127 #
128 # The output scene still contains nodes, however there is only a
129 # root node with children, each one referencing only one mesh,
130 # and each mesh referencing one material. For rendering, you can
131 # simply render all meshes in order - you don't need to pay
132 # attention to local transformations and the node hierarchy.
133 # Animations are removed during this step.
134 # This step is intended for applications without a scenegraph.
135 # The step CAN cause some problems: if e.g. a mesh of the asset
136 # contains normals and another, using the same material index, does not,
137 # they will be brought together, but the first meshes's part of
138 # the normal list is zeroed. However, these artifacts are rare.
139 # @note The <tt>#AI_CONFIG_PP_PTV_NORMALIZE<tt> configuration property
140 # can be set to normalize the scene's spatial dimension to the -1...1
141 # range.
142 #
143 aiProcess_PreTransformVertices = 0x100
144
145 ## <hr>Limits the number of bones simultaneously affecting a single vertex
146 # to a maximum value.
147 #
148 # If any vertex is affected by more than the maximum number of bones, the least
149 # important vertex weights are removed and the remaining vertex weights are
150 # renormalized so that the weights still sum up to 1.
151 # The default bone weight limit is 4 (defined as <tt>#AI_LMW_MAX_WEIGHTS<tt> in
152 # config.h), but you can use the <tt>#AI_CONFIG_PP_LBW_MAX_WEIGHTS<tt> setting to
153 # supply your own limit to the post processing step.
154 #
155 # If you intend to perform the skinning in hardware, this post processing
156 # step might be of interest to you.
157 #
158 aiProcess_LimitBoneWeights = 0x200
159
160 ## <hr>Validates the imported scene data structure.
161 # This makes sure that all indices are valid, all animations and
162 # bones are linked correctly, all material references are correct .. etc.
163 #
164 # It is recommended that you capture Assimp's log output if you use this flag,
165 # so you can easily find out what's wrong if a file fails the
166 # validation. The validator is quite strict and will find #all#
167 # inconsistencies in the data structure... It is recommended that plugin
168 # developers use it to debug their loaders. There are two types of
169 # validation failures:
170 # <ul>
171 # <li>Error: There's something wrong with the imported data. Further
172 # postprocessing is not possible and the data is not usable at all.
173 # The import fails. #Importer::GetErrorString() or #aiGetErrorString()
174 # carry the error message around.<li>
175 # <li>Warning: There are some minor issues (e.g. 1000000 animation
176 # keyframes with the same time), but further postprocessing and use
177 # of the data structure is still safe. Warning details are written
178 # to the log file, <tt>#AI_SCENE_FLAGS_VALIDATION_WARNING<tt> is set
179 # in #aiScene::mFlags<li>
180 # <ul>
181 #
182 # This post-processing step is not time-consuming. Its use is not
183 # compulsory, but recommended.
184 #
185 aiProcess_ValidateDataStructure = 0x400
186
187 ## <hr>Reorders triangles for better vertex cache locality.
188 #
189 # The step tries to improve the ACMR (average post-transform vertex cache
190 # miss ratio) for all meshes. The implementation runs in O(n) and is
191 # roughly based on the 'tipsify' algorithm (see <a href="
192 # http:www.cs.princeton.edugfxpubsSander_2007_%3ETRtipsy.pdf">this
193 # paper<a>).
194 #
195 # If you intend to render huge models in hardware, this step might
196 # be of interest to you. The <tt>#AI_CONFIG_PP_ICL_PTCACHE_SIZE<tt>config
197 # setting can be used to fine-tune the cache optimization.
198 #
199 aiProcess_ImproveCacheLocality = 0x800
200
201 ## <hr>Searches for redundantunreferenced materials and removes them.
202 #
203 # This is especially useful in combination with the
204 # #aiProcess_PretransformVertices and #aiProcess_OptimizeMeshes flags.
205 # Both join small meshes with equal characteristics, but they can't do
206 # their work if two meshes have different materials. Because several
207 # material settings are lost during Assimp's import filters,
208 # (and because many exporters don't check for redundant materials), huge
209 # models often have materials which are are defined several times with
210 # exactly the same settings.
211 #
212 # Several material settings not contributing to the final appearance of
213 # a surface are ignored in all comparisons (e.g. the material name).
214 # So, if you're passing additional information through the
215 # content pipeline (probably using #magic# material names), don't
216 # specify this flag. Alternatively take a look at the
217 # <tt>#AI_CONFIG_PP_RRM_EXCLUDE_LIST<tt> setting.
218 #
219 aiProcess_RemoveRedundantMaterials = 0x1000
220
221 ## <hr>This step tries to determine which meshes have normal vectors
222 # that are facing inwards and inverts them.
223 #
224 # The algorithm is simple but effective:
225 # the bounding box of all vertices + their normals is compared against
226 # the volume of the bounding box of all vertices without their normals.
227 # This works well for most objects, problems might occur with planar
228 # surfaces. However, the step tries to filter such cases.
229 # The step inverts all in-facing normals. Generally it is recommended
230 # to enable this step, although the result is not always correct.
231 #
232 aiProcess_FixInfacingNormals = 0x2000
233
234 ## <hr>This step splits meshes with more than one primitive type in
235 # homogeneous sub-meshes.
236 #
237 # The step is executed after the triangulation step. After the step
238 # returns, just one bit is set in aiMesh::mPrimitiveTypes. This is
239 # especially useful for real-time rendering where point and line
240 # primitives are often ignored or rendered separately.
241 # You can use the <tt>#AI_CONFIG_PP_SBP_REMOVE<tt> option to specify which
242 # primitive types you need. This can be used to easily exclude
243 # lines and points, which are rarely used, from the import.
244 #
245 aiProcess_SortByPType = 0x8000
246
247 ## <hr>This step searches all meshes for degenerate primitives and
248 # converts them to proper lines or points.
249 #
250 # A face is 'degenerate' if one or more of its points are identical.
251 # To have the degenerate stuff not only detected and collapsed but
252 # removed, try one of the following procedures:
253 # <br><b>1.<b> (if you support lines and points for rendering but don't
254 # want the degenerates)<br>
255 # <ul>
256 # <li>Specify the #aiProcess_FindDegenerates flag.
257 # <li>
258 # <li>Set the <tt>AI_CONFIG_PP_FD_REMOVE<tt> option to 1. This will
259 # cause the step to remove degenerate triangles from the import
260 # as soon as they're detected. They won't pass any further
261 # pipeline steps.
262 # <li>
263 # <ul>
264 # <br><b>2.<b>(if you don't support lines and points at all)<br>
265 # <ul>
266 # <li>Specify the #aiProcess_FindDegenerates flag.
267 # <li>
268 # <li>Specify the #aiProcess_SortByPType flag. This moves line and
269 # point primitives to separate meshes.
270 # <li>
271 # <li>Set the <tt>AI_CONFIG_PP_SBP_REMOVE<tt> option to
272 # @code aiPrimitiveType_POINTS | aiPrimitiveType_LINES
273 # @endcode to cause SortByPType to reject point
274 # and line meshes from the scene.
275 # <li>
276 # <ul>
277 # @note Degenerate polygons are not necessarily evil and that's why
278 # they're not removed by default. There are several file formats which
279 # don't support lines or points, and some exporters bypass the
280 # format specification and write them as degenerate triangles instead.
281 #
282 aiProcess_FindDegenerates = 0x10000
283
284 ## <hr>This step searches all meshes for invalid data, such as zeroed
285 # normal vectors or invalid UV coords and removesfixes them. This is
286 # intended to get rid of some common exporter errors.
287 #
288 # This is especially useful for normals. If they are invalid, and
289 # the step recognizes this, they will be removed and can later
290 # be recomputed, i.e. by the #aiProcess_GenSmoothNormals flag.<br>
291 # The step will also remove meshes that are infinitely small and reduce
292 # animation tracks consisting of hundreds if redundant keys to a single
293 # key. The <tt>AI_CONFIG_PP_FID_ANIM_ACCURACY<tt> config property decides
294 # the accuracy of the check for duplicate animation tracks.
295 #
296 aiProcess_FindInvalidData = 0x20000
297
298 ## <hr>This step converts non-UV mappings (such as spherical or
299 # cylindrical mapping) to proper texture coordinate channels.
300 #
301 # Most applications will support UV mapping only, so you will
302 # probably want to specify this step in every case. Note that Assimp is not
303 # always able to match the original mapping implementation of the
304 # 3D app which produced a model perfectly. It's always better to let the
305 # modelling app compute the UV channels - 3ds max, Maya, Blender,
306 # LightWave, and Modo do this for example.
307 #
308 # @note If this step is not requested, you'll need to process the
309 # <tt>#AI_MATKEY_MAPPING<tt> material property in order to display all assets
310 # properly.
311 #
312 aiProcess_GenUVCoords = 0x40000
313
314 ## <hr>This step applies per-texture UV transformations and bakes
315 # them into stand-alone vtexture coordinate channels.
316 #
317 # UV transformations are specified per-texture - see the
318 # <tt>#AI_MATKEY_UVTRANSFORM<tt> material key for more information.
319 # This step processes all textures with
320 # transformed input UV coordinates and generates a new (pre-transformed) UV channel
321 # which replaces the old channel. Most applications won't support UV
322 # transformations, so you will probably want to specify this step.
323 #
324 # @note UV transformations are usually implemented in real-time apps by
325 # transforming texture coordinates at vertex shader stage with a 3x3
326 # (homogenous) transformation matrix.
327 #
328 aiProcess_TransformUVCoords = 0x80000
329
330 ## <hr>This step searches for duplicate meshes and replaces them
331 # with references to the first mesh.
332 #
333 # This step takes a while, so don't use it if speed is a concern.
334 # Its main purpose is to workaround the fact that many export
335 # file formats don't support instanced meshes, so exporters need to
336 # duplicate meshes. This step removes the duplicates again. Please
337 # note that Assimp does not currently support per-node material
338 # assignment to meshes, which means that identical meshes with
339 # different materials are currently #not# joined, although this is
340 # planned for future versions.
341 #
342 aiProcess_FindInstances = 0x100000
343
344 ## <hr>A postprocessing step to reduce the number of meshes.
345 #
346 # This will, in fact, reduce the number of draw calls.
347 #
348 # This is a very effective optimization and is recommended to be used
349 # together with #aiProcess_OptimizeGraph, if possible. The flag is fully
350 # compatible with both #aiProcess_SplitLargeMeshes and #aiProcess_SortByPType.
351 #
352 aiProcess_OptimizeMeshes = 0x200000
353
354
355 ## <hr>A postprocessing step to optimize the scene hierarchy.
356 #
357 # Nodes without animations, bones, lights or cameras assigned are
358 # collapsed and joined.
359 #
360 # Node names can be lost during this step. If you use special 'tag nodes'
361 # to pass additional information through your content pipeline, use the
362 # <tt>#AI_CONFIG_PP_OG_EXCLUDE_LIST<tt> setting to specify a list of node
363 # names you want to be kept. Nodes matching one of the names in this list won't
364 # be touched or modified.
365 #
366 # Use this flag with caution. Most simple files will be collapsed to a
367 # single node, so complex hierarchies are usually completely lost. This is not
368 # useful for editor environments, but probably a very effective
369 # optimization if you just want to get the model data, convert it to your
370 # own format, and render it as fast as possible.
371 #
372 # This flag is designed to be used with #aiProcess_OptimizeMeshes for best
373 # results.
374 #
375 # @note 'Crappy' scenes with thousands of extremely small meshes packed
376 # in deeply nested nodes exist for almost all file formats.
377 # #aiProcess_OptimizeMeshes in combination with #aiProcess_OptimizeGraph
378 # usually fixes them all and makes them renderable.
379 #
380 aiProcess_OptimizeGraph = 0x400000
381
382 ## <hr>This step flips all UV coordinates along the y-axis and adjusts
383 # material settings and bitangents accordingly.
384 #
385 # <b>Output UV coordinate system:<b>
386 # @code
387 # 0y|0y ---------- 1x|0y
388 # | |
389 # | |
390 # | |
391 # 0x|1y ---------- 1x|1y
392 # @endcode
393 #
394 # You'll probably want to consider this flag if you use Direct3D for
395 # rendering. The #aiProcess_ConvertToLeftHanded flag supersedes this
396 # setting and bundles all conversions typically required for D3D-based
397 # applications.
398 #
399 aiProcess_FlipUVs = 0x800000
400
401 ## <hr>This step adjusts the output face winding order to be CW.
402 #
403 # The default face winding order is counter clockwise (CCW).
404 #
405 # <b>Output face order:<b>
406 # @code
407 # x2
408 #
409 # x0
410 # x1
411 # @endcode
412 #
413 aiProcess_FlipWindingOrder = 0x1000000
414
415 ## <hr>This step splits meshes with many bones into sub-meshes so that each
416 # su-bmesh has fewer or as many bones as a given limit.
417 #
418 aiProcess_SplitByBoneCount = 0x2000000
419
420 ## <hr>This step removes bones losslessly or according to some threshold.
421 #
422 # In some cases (i.e. formats that require it) exporters are forced to
423 # assign dummy bone weights to otherwise static meshes assigned to
424 # animated meshes. Full, weight-based skinning is expensive while
425 # animating nodes is extremely cheap, so this step is offered to clean up
426 # the data in that regard.
427 #
428 # Use <tt>#AI_CONFIG_PP_DB_THRESHOLD<tt> to control this.
429 # Use <tt>#AI_CONFIG_PP_DB_ALL_OR_NONE<tt> if you want bones removed if and
430 # only if all bones within the scene qualify for removal.
431 #
432 aiProcess_Debone = 0x4000000
433
434 aiProcess_GenEntityMeshes = 0x100000
435 aiProcess_OptimizeAnimations = 0x200000
436 aiProcess_FixTexturePaths = 0x200000
437
438 ## @def aiProcess_ConvertToLeftHanded
439 # @brief Shortcut flag for Direct3D-based applications.
440 #
441 # Supersedes the #aiProcess_MakeLeftHanded and #aiProcess_FlipUVs and
442 # #aiProcess_FlipWindingOrder flags.
443 # The output data matches Direct3D's conventions: left-handed geometry, upper-left
444 # origin for UV coordinates and finally clockwise face order, suitable for CCW culling.
445 #
446 # @deprecated
447 #
448 aiProcess_ConvertToLeftHanded = ( \
449 aiProcess_MakeLeftHanded | \
450 aiProcess_FlipUVs | \
451 aiProcess_FlipWindingOrder | \
452 0 )
453
454
455 ## @def aiProcessPreset_TargetRealtimeUse_Fast
456 # @brief Default postprocess configuration optimizing the data for real-time rendering.
457 #
458 # Applications would want to use this preset to load models on end-user PCs,
459 # maybe for direct use in game.
460 #
461 # If you're using DirectX, don't forget to combine this value with
462 # the #aiProcess_ConvertToLeftHanded step. If you don't support UV transformations
463 # in your application apply the #aiProcess_TransformUVCoords step, too.
464 # @note Please take the time to read the docs for the steps enabled by this preset.
465 # Some of them offer further configurable properties, while some of them might not be of
466 # use for you so it might be better to not specify them.
467 #
468 aiProcessPreset_TargetRealtime_Fast = ( \
469 aiProcess_CalcTangentSpace | \
470 aiProcess_GenNormals | \
471 aiProcess_JoinIdenticalVertices | \
472 aiProcess_Triangulate | \
473 aiProcess_GenUVCoords | \
474 aiProcess_SortByPType | \
475 0 )
476
477 ## @def aiProcessPreset_TargetRealtime_Quality
478 # @brief Default postprocess configuration optimizing the data for real-time rendering.
479 #
480 # Unlike #aiProcessPreset_TargetRealtime_Fast, this configuration
481 # performs some extra optimizations to improve rendering speed and
482 # to minimize memory usage. It could be a good choice for a level editor
483 # environment where import speed is not so important.
484 #
485 # If you're using DirectX, don't forget to combine this value with
486 # the #aiProcess_ConvertToLeftHanded step. If you don't support UV transformations
487 # in your application apply the #aiProcess_TransformUVCoords step, too.
488 # @note Please take the time to read the docs for the steps enabled by this preset.
489 # Some of them offer further configurable properties, while some of them might not be
490 # of use for you so it might be better to not specify them.
491 #
492 aiProcessPreset_TargetRealtime_Quality = ( \
493 aiProcess_CalcTangentSpace | \
494 aiProcess_GenSmoothNormals | \
495 aiProcess_JoinIdenticalVertices | \
496 aiProcess_ImproveCacheLocality | \
497 aiProcess_LimitBoneWeights | \
498 aiProcess_RemoveRedundantMaterials | \
499 aiProcess_SplitLargeMeshes | \
500 aiProcess_Triangulate | \
501 aiProcess_GenUVCoords | \
502 aiProcess_SortByPType | \
503 aiProcess_FindDegenerates | \
504 aiProcess_FindInvalidData | \
505 0 )
506
507 ## @def aiProcessPreset_TargetRealtime_MaxQuality
508 # @brief Default postprocess configuration optimizing the data for real-time rendering.
509 #
510 # This preset enables almost every optimization step to achieve perfectly
511 # optimized data. It's your choice for level editor environments where import speed
512 # is not important.
513 #
514 # If you're using DirectX, don't forget to combine this value with
515 # the #aiProcess_ConvertToLeftHanded step. If you don't support UV transformations
516 # in your application, apply the #aiProcess_TransformUVCoords step, too.
517 # @note Please take the time to read the docs for the steps enabled by this preset.
518 # Some of them offer further configurable properties, while some of them might not be
519 # of use for you so it might be better to not specify them.
520 #
521 aiProcessPreset_TargetRealtime_MaxQuality = ( \
522 aiProcessPreset_TargetRealtime_Quality | \
523 aiProcess_FindInstances | \
524 aiProcess_ValidateDataStructure | \
525 aiProcess_OptimizeMeshes | \
526 0 )
527
528
+0
-276
port/PyAssimp/pyassimp/pyassimp.py less more
0 #-*- coding: UTF-8 -*-
1
2 """
3 PyAssimp
4
5 This is the main-module of PyAssimp.
6 """
7
8 import sys
9 if sys.version_info < (2,5):
10 raise 'pyassimp: need python 2.5 or newer'
11
12 import structs
13 import ctypes
14 import os
15 import helper
16 from errors import AssimpError
17
18 class aiArray:
19 """
20 A python class to 'safely' access C arrays.
21 For m<Name> and mNum<Name> assimp class members.
22 """
23 def __init__(self, instance, dataName, sizeName, i=None):
24 self.instance = instance
25 self.dataName = dataName
26 self.sizeName = sizeName
27 self.i = i
28 self.count = 0
29
30 def _GetSize(self):
31 return getattr(self.instance, self.sizeName)
32
33 def _GetData(self, index):
34 if self.i != None:
35 if not bool(getattr(self.instance, self.dataName)[self.i]):
36 return None
37 item = getattr(self.instance, self.dataName)[self.i][index]
38 else:
39 item = getattr(self.instance, self.dataName)[index]
40 if hasattr(item, 'contents'):
41 return item.contents._init()
42 elif hasattr(item, '_init'):
43 return item._init()
44 else:
45 return item
46
47 def next(self):
48 if self.count >= self._GetSize():
49 self.count = 0
50 raise StopIteration
51 else:
52 c = self.count
53 self.count += 1
54 return self._GetData(c)
55
56 def __getitem__(self, index):
57 if isinstance(index, slice):
58 indices = index.indices(len(self))
59 return [self.__getitem__(i) for i in range(*indices)]
60
61 if index < 0 or index >= self._GetSize():
62 raise IndexError("aiArray index out of range")
63 return self._GetData(index)
64
65 def __iter__(self):
66 return self
67
68 def __len__(self):
69 return int(self._GetSize())
70
71 def __str__(self):
72 return str([x for x in self])
73
74 def __repr__(self):
75 return str([x for x in self])
76
77 class aiTuple:
78 """
79 A python class to 'safely' access C structs in a python tuple fashion.
80 For C structs like vectors, matrices, colors, ...
81 """
82 def __init__(self, instance):
83 self.instance = instance
84 self.count = 0
85
86 def _GetSize(self):
87 return len(self.instance._fields_)
88
89 def _GetData(self, index):
90 return getattr(self.instance, self.instance._fields_[index][0])
91
92 def next(self):
93 if self.count >= self._GetSize():
94 self.count = 0
95 raise StopIteration
96 else:
97 c = self.count
98 self.count += 1
99 return self._GetData(c)
100
101 def __getitem__(self, index):
102 if isinstance(index, slice):
103 indices = index.indices(len(self))
104 return [self.__getitem__(i) for i in range(*indices)]
105
106 if index < 0 or index >= self._GetSize():
107 raise IndexError("aiTuple index out of range")
108 return self._GetData(index)
109
110 def __iter__(self):
111 return self
112
113 def __len__(self):
114 return int(self._GetSize())
115
116 def __str__(self):
117 return str([x for x in self])
118
119 def __repr__(self):
120 return str([x for x in self])
121
122 def _init(self):
123 """
124 Custom initialize() for C structs, adds safely accessable member functionality.
125 """
126 if hasattr(self, '_is_init'):
127 return self
128 self._is_init = True
129
130 if str(self.__class__.__name__) == "MaterialProperty":
131 self.mKey._init()
132
133 for m in self.__class__.__dict__.keys():
134 if m.startswith('mNum'):
135 name = m.split('mNum')[1]
136 if 'm'+name in self.__class__.__dict__.keys():
137 setattr(self.__class__, name.lower(), aiArray(self, 'm'+name , m))
138 if name.lower() == "vertices":
139 setattr(self.__class__, "normals", aiArray(self, 'mNormals' , m))
140 setattr(self.__class__, "tangents", aiArray(self, 'mTangents' , m))
141 setattr(self.__class__, "bitangets", aiArray(self, 'mBitangents' , m))
142 setattr(self.__class__, "colors", [aiArray(self, 'mColors' , m, o) for o in xrange(len(self.mColors))])
143 setattr(self.__class__, "texcoords", [aiArray(self, 'mTextureCoords' , m, o) for o in xrange(len(self.mColors))])
144
145 elif m == "x" or m == "a1" or m == "b": # Vector, matrix, quat, color
146 self._tuple = aiTuple(self)
147 setattr(self.__class__, '__getitem__', lambda x, y: x._tuple.__getitem__(y))
148 setattr(self.__class__, '__iter__', lambda x: x._tuple)
149 setattr(self.__class__, 'next', lambda x: x._tuple.next)
150 setattr(self.__class__, '__repr__', lambda x: str([c for c in x]))
151 break
152 elif m == "data": #String
153 setattr(self.__class__, '__repr__', lambda x: str(x.data))
154 setattr(self.__class__, '__str__', lambda x: str(x.data))
155 break
156
157 if hasattr(getattr(self, m), '_init'):
158 getattr(self, m)._init()
159
160 return self
161
162 """
163 Python magic to add the _init() function to all C struct classes.
164 """
165 for struct in dir(structs):
166 if not (struct.startswith('_') or struct.startswith('c_') or struct == "Structure" or struct == "POINTER") and not isinstance(getattr(structs, struct),int):
167 setattr(getattr(structs, struct), '_init', _init)
168
169
170 class AssimpLib(object):
171 """
172 Assimp-Singleton
173 """
174 load, release, dll = helper.search_library()
175
176 #the loader as singleton
177 _assimp_lib = AssimpLib()
178
179
180 def load(filename, processing=0):
181 """
182 Loads the model with some specific processing parameters.
183
184 filename - file to load model from
185 processing - processing parameters
186
187 result Scene-object with model-data
188
189 throws AssimpError - could not open file
190 """
191 #read pure data
192 model = _assimp_lib.load(filename, processing)
193 if not model:
194 #Uhhh, something went wrong!
195 raise AssimpError, ("could not import file: %s" % filename)
196
197 return model.contents._init()
198
199 def release(scene):
200 from ctypes import pointer
201 _assimp_lib.release(pointer(scene))
202
203 def aiGetMaterialFloatArray(material, key):
204 AI_SUCCESS = 0
205 from ctypes import byref, pointer, cast, c_float, POINTER, sizeof, c_uint
206 out = structs.Color4D()
207 max = c_uint(sizeof(structs.Color4D))
208 r=_assimp_lib.dll.aiGetMaterialFloatArray(pointer(material),
209 key[0],
210 key[1],
211 key[2],
212 byref(out),
213 byref(max))
214
215 if (r != AI_SUCCESS):
216 raise AssimpError("aiGetMaterialFloatArray failed!")
217
218 out._init()
219 return [out[i] for i in xrange(max.value)]
220
221 def aiGetMaterialString(material, key):
222 AI_SUCCESS = 0
223 from ctypes import byref, pointer, cast, c_float, POINTER, sizeof, c_uint
224 out = structs.String()
225 r=_assimp_lib.dll.aiGetMaterialString(pointer(material),
226 key[0],
227 key[1],
228 key[2],
229 byref(out))
230
231 if (r != AI_SUCCESS):
232 raise AssimpError("aiGetMaterialString failed!")
233
234 return str(out.data)
235
236 def GetMaterialProperties(material):
237 """
238 Convenience Function to get the material properties as a dict
239 and values in a python format.
240 """
241 result = {}
242 #read all properties
243 for p in material.properties:
244 #the name
245 key = p.mKey.data
246
247 #the data
248 from ctypes import POINTER, cast, c_int, c_float, sizeof
249 if p.mType == 1:
250 arr = cast(p.mData, POINTER(c_float*(p.mDataLength/sizeof(c_float)) )).contents
251 value = [x for x in arr]
252 elif p.mType == 3: #string can't be an array
253 value = cast(p.mData, POINTER(structs.String)).contents.data
254 elif p.mType == 4:
255 arr = cast(p.mData, POINTER(c_int*(p.mDataLength/sizeof(c_int)) )).contents
256 value = [x for x in arr]
257 else:
258 value = p.mData[:p.mDataLength]
259
260 result[key] = value
261
262 return result
263
264
265 def aiDecomposeMatrix(matrix):
266 if not isinstance(matrix, structs.Matrix4x4):
267 raise AssimpError("aiDecomposeMatrix failed: Not a aiMatrix4x4!")
268
269 scaling = structs.Vector3D()
270 rotation = structs.Quaternion()
271 position = structs.Vector3D()
272
273 from ctypes import byref, pointer
274 _assimp_lib.dll.aiDecomposeMatrix(pointer(matrix), byref(scaling), byref(rotation), byref(position))
275 return scaling._init(), rotation._init(), position._init()
0 #-*- coding: UTF-8 -*-
1
2 from ctypes import POINTER, c_int, c_uint, c_char, c_float, Structure, c_char_p, c_double, c_ubyte, c_size_t
3
4
5 class Vector2D(Structure):
6 """
7 See 'aiVector2D.h' for details.
8 """
9
10
11 _fields_ = [
12 ("x", c_float),("y", c_float),
13 ]
14
15 class Texel(Structure):
16 """
17 See 'aiTexture.h' for details.
18 """
19
20 _fields_ = [
21 ("b", c_ubyte),("g", c_ubyte),("r", c_ubyte),("a", c_ubyte),
22 ]
23
24 class Plane(Structure):
25 """
26 See 'aiTypes.h' for details.
27 """
28
29 _fields_ = [
30 # Plane equation
31 ("a", c_float),("b", c_float),("c", c_float),("d", c_float),
32 ]
33
34 class Color3D(Structure):
35 """
36 See 'aiTypes.h' for details.
37 """
38
39 _fields_ = [
40 # Red, green and blue color values
41 ("r", c_float),("g", c_float),("b", c_float),
42 ]
43
44 class String(Structure):
45 """
46 See 'aiTypes.h' for details.
47 """
48
0 #-*- coding: UTF-8 -*-
1
2 from ctypes import POINTER, c_void_p, c_int, c_uint, c_char, c_float, Structure, c_char_p, c_double, c_ubyte, c_size_t, c_uint32
3
4
5 class Vector2D(Structure):
6 """
7 See 'aiVector2D.h' for details.
8 """
9
10
11 _fields_ = [
12 ("x", c_float),("y", c_float),
13 ]
14
15 class Matrix3x3(Structure):
16 """
17 See 'aiMatrix3x3.h' for details.
18 """
19
20
21 _fields_ = [
22 ("a1", c_float),("a2", c_float),("a3", c_float),
23 ("b1", c_float),("b2", c_float),("b3", c_float),
24 ("c1", c_float),("c2", c_float),("c3", c_float),
25 ]
26
27 class Texel(Structure):
28 """
29 See 'aiTexture.h' for details.
30 """
31
32 _fields_ = [
33 ("b", c_ubyte),("g", c_ubyte),("r", c_ubyte),("a", c_ubyte),
34 ]
35
36 class Color4D(Structure):
37 """
38 See 'aiColor4D.h' for details.
39 """
40
41
42 _fields_ = [
43 # Red, green, blue and alpha color values
44 ("r", c_float),("g", c_float),("b", c_float),("a", c_float),
45 ]
46
47 class Plane(Structure):
48 """
49 See 'aiTypes.h' for details.
50 """
51
52 _fields_ = [
53 # Plane equation
54 ("a", c_float),("b", c_float),("c", c_float),("d", c_float),
55 ]
56
57 class Color3D(Structure):
58 """
59 See 'aiTypes.h' for details.
60 """
61
62 _fields_ = [
63 # Red, green and blue color values
64 ("r", c_float),("g", c_float),("b", c_float),
65 ]
66
67 class String(Structure):
68 """
69 See 'aiTypes.h' for details.
70 """
71
4972 MAXLEN = 1024
50
51 _fields_ = [
52 #Binary length of the string excluding the terminal 0. This is NOT the# logical length of strings containing UTF-8 multibyte sequences! It's# the number of bytes from the beginning of the string to its end.#
53 ("length", c_size_t),#String buffer. Size limit is MAXLEN#
54 ("data", c_char*MAXLEN),
55 ]
56
57 class MemoryInfo(Structure):
58 """
59 See 'aiTypes.h' for details.
60 """
61
62 _fields_ = [
63 #Storage allocated for texture data#
64 ("textures", c_uint),#Storage allocated for material data#
65 ("materials", c_uint),#Storage allocated for mesh data#
66 ("meshes", c_uint),#Storage allocated for node data#
67 ("nodes", c_uint),#Storage allocated for animation data#
68 ("animations", c_uint),#Storage allocated for camera data#
69 ("cameras", c_uint),#Storage allocated for light data#
70 ("lights", c_uint),#Total storage allocated for the full import.#
71 ("total", c_uint),
72 ]
73
74 class Matrix3x3(Structure):
75 """
76 See 'aiMatrix3x3.h' for details.
77 """
78
79
80 _fields_ = [
81 ("a1", c_float),("a2", c_float),("a3", c_float),
82 ("b1", c_float),("b2", c_float),("b3", c_float),
83 ("c1", c_float),("c2", c_float),("c3", c_float),
84 ]
85
86 class Color4D(Structure):
87 """
88 See 'aiColor4D.h' for details.
89 """
90
91
92 _fields_ = [
93 # Red, green, blue and alpha color values
94 ("r", c_float),("g", c_float),("b", c_float),("a", c_float),
95 ]
96
97 class ExportFormatDesc(Structure):
98 """
99 See 'export.h' for details.
100 """
101
102 _fields_ = [
103 # a short string ID to uniquely identify the export format. Use this ID string to# specify which file format you want to export to when calling aiExportScene().# Example: "dae" or "obj"
104 ("id", POINTER(c_char)),# A short description of the file format to present to users. Useful if you want# to allow the user to select an export format.
105 ("description", POINTER(c_char)),# Recommended file extension for the exported file in lower case.
106 ("fileExtension", POINTER(c_char)),
107 ]
108
109 class Quaternion(Structure):
110 """
111 See 'aiQuaternion.h' for details.
112 """
113
114
115 _fields_ = [
116 # w,x,y,z components of the quaternion
117 ("w", c_float),("x", c_float),("y", c_float),("z", c_float),
118 ]
119
120 class Vector3D(Structure):
121 """
122 See 'aiVector3D.h' for details.
123 """
124
125
126 _fields_ = [
127 ("x", c_float),("y", c_float),("z", c_float),
128 ]
129
130 class Face(Structure):
131 """
132 See 'aiMesh.h' for details.
133 """
134
135 _fields_ = [
136 # Number of indices defining this face.# The maximum value for this member is #AI_MAX_FACE_INDICES.
137 ("mNumIndices", c_uint),# Pointer to the indices array. Size of the array is given in numIndices.
138 ("mIndices", POINTER(c_uint)),
139 ]
140
141 class VertexWeight(Structure):
142 """
143 See 'aiMesh.h' for details.
144 """
145
146 _fields_ = [
147 # Index of the vertex which is influenced by the bone.
148 ("mVertexId", c_uint),# The strength of the influence in the range (0...1).# The influence from all bones at one vertex amounts to 1.
149 ("mWeight", c_float),
150 ]
151
152 class MeshKey(Structure):
153 """
154 See 'aiAnim.h' for details.
155 """
156
157 _fields_ = [
158 #The time of this key#
159 ("mTime", c_double),#Index into the aiMesh::mAnimMeshes array of the# mesh coresponding to the #aiMeshAnim hosting this# key frame. The referenced anim mesh is evaluated# according to the rules defined in the docs for #aiAnimMesh.#
160 ("mValue", c_uint),
161 ]
162
163 class Matrix4x4(Structure):
164 """
165 See 'aiMatrix4x4.h' for details.
166 """
167
168
169 _fields_ = [
170 ("a1", c_float),("a2", c_float),("a3", c_float),("a4", c_float),
171 ("b1", c_float),("b2", c_float),("b3", c_float),("b4", c_float),
172 ("c1", c_float),("c2", c_float),("c3", c_float),("c4", c_float),
173 ("d1", c_float),("d2", c_float),("d3", c_float),("d4", c_float),
174 ]
175
176 class Node(Structure):
177 """
178 See 'aiScene.h' for details.
179 """
180
181
182 Node._fields_ = [
183 #The name of the node.##The name might be empty (length of zero) but all nodes which#need to be accessed afterwards by bones or anims are usually named.#Multiple nodes may have the same name, but nodes which are accessed#by bones (see #aiBone and #aiMesh::mBones) *must* be unique.##Cameras and lights are assigned to a specific node name - if there#are multiple nodes with this name, they're assigned to each of them.#<br>#There are no limitations regarding the characters contained in#this text. You should be able to handle stuff like whitespace, tabs,#linefeeds, quotation marks, ampersands, ... .#
184 ("mName", String),#The transformation relative to the node's parent.#
185 ("mTransformation", Matrix4x4),#Parent node. NULL if this node is the root node.#
186 ("mParent", POINTER(Node)),#The number of child nodes of this node.#
187 ("mNumChildren", c_uint),#The child nodes of this node. NULL if mNumChildren is 0.#
188 ("mChildren", POINTER(POINTER(Node))),#The number of meshes of this node.#
189 ("mNumMeshes", c_uint),#The meshes of this node. Each entry is an index into the mesh#
190 ("mMeshes", POINTER(c_uint)),
191 ]
192
193 class Camera(Structure):
194 """
195 See 'aiCamera.h' for details.
196 """
197
198
199 _fields_ = [
200 #The name of the camera.## There must be a node in the scenegraph with the same name.# This node specifies the position of the camera in the scene# hierarchy and can be animated.#
201 ("mName", String),#Position of the camera relative to the coordinate space# defined by the corresponding node.## The default value is 0|0|0.#
202 ("mPosition", Vector3D),#'Up' - vector of the camera coordinate system relative to# the coordinate space defined by the corresponding node.## The 'right' vector of the camera coordinate system is# the cross product of the up and lookAt vectors.# The default value is 0|1|0. The vector# may be normalized, but it needn't.#
203 ("mUp", Vector3D),#'LookAt' - vector of the camera coordinate system relative to# the coordinate space defined by the corresponding node.## This is the viewing direction of the user.# The default value is 0|0|1. The vector# may be normalized, but it needn't.#
204 ("mLookAt", Vector3D),#Half horizontal field of view angle, in radians.## The field of view angle is the angle between the center# line of the screen and the left or right border.# The default value is 1/4PI.#
205 ("mHorizontalFOV", c_float),#Distance of the near clipping plane from the camera.##The value may not be 0.f (for arithmetic reasons to prevent#a division through zero). The default value is 0.1f.#
206 ("mClipPlaneNear", c_float),#Distance of the far clipping plane from the camera.##The far clipping plane must, of course, be further away than the#near clipping plane. The default value is 1000.f. The ratio#between the near and the far plane should not be too#large (between 1000-10000 should be ok) to avoid floating-point#inaccuracies which could lead to z-fighting.#
207 ("mClipPlaneFar", c_float),#Screen aspect ratio.##This is the ration between the width and the height of the#screen. Typical values are 4/3, 1/2 or 1/1. This value is#0 if the aspect ratio is not defined in the source file.#0 is also the default value.#
208 ("mAspect", c_float),
209 ]
210
211 class Texture(Structure):
212 """
213 See 'aiTexture.h' for details.
214 """
215
216
217 _fields_ = [
218 #Width of the texture, in pixels##If mHeight is zero the texture is compressed in a format#like JPEG. In this case mWidth specifies the size of the#memory area pcData is pointing to, in bytes.#
219 ("mWidth", c_uint),#Height of the texture, in pixels##If this value is zero, pcData points to an compressed texture#in any format (e.g. JPEG).#
220 ("mHeight", c_uint),#A hint from the loader to make it easier for applications# to determine the type of embedded compressed textures.##If mHeight != 0 this member is undefined. Otherwise it#is set set to '\\0\\0\\0\\0' if the loader has no additional#information about the texture file format used OR the#file extension of the format without a trailing dot. If there#are multiple file extensions for a format, the shortest#extension is chosen (JPEG maps to 'jpg', not to 'jpeg').#E.g. 'dds\\0', 'pcx\\0', 'jpg\\0'. All characters are lower-case.#The fourth character will always be '\\0'.#
221 ("achFormatHint", c_char*4),#Data of the texture.##Points to an array of mWidth#mHeight aiTexel's.#The format of the texture data is always ARGB8888 to#make the implementation for user of the library as easy#as possible. If mHeight = 0 this is a pointer to a memory#buffer of size mWidth containing the compressed texture#data. Good luck, have fun!#
222 ("pcData", POINTER(Texel)),
223 ]
224
225 class Ray(Structure):
226 """
227 See 'aiTypes.h' for details.
228 """
229
230 _fields_ = [
231 # Position and direction of the ray
232 ("pos", Vector3D),("dir", Vector3D),
233 ]
234
235 class Light(Structure):
236 """
237 See 'aiLight.h' for details.
238 """
239
240
241 _fields_ = [
242 #The name of the light source.## There must be a node in the scenegraph with the same name.# This node specifies the position of the light in the scene# hierarchy and can be animated.#
243 ("mName", String),#The type of the light source.##aiLightSource_UNDEFINED is not a valid value for this member.#
244 ("mType", c_uint),#Position of the light source in space. Relative to the# transformation of the node corresponding to the light.## The position is undefined for directional lights.#
245 ("mPosition", Vector3D),#Direction of the light source in space. Relative to the# transformation of the node corresponding to the light.## The direction is undefined for point lights. The vector# may be normalized, but it needn't.#
246 ("mDirection", Vector3D),#Constant light attenuation factor.## The intensity of the light source at a given distance 'd' from# the light's position is# @code# Atten = 1/( att0 + att1#d + att2#d*d)# @endcode# This member corresponds to the att0 variable in the equation.# Naturally undefined for directional lights.#
247 ("mAttenuationConstant", c_float),#Linear light attenuation factor.## The intensity of the light source at a given distance 'd' from# the light's position is# @code# Atten = 1/( att0 + att1#d + att2#d*d)# @endcode# This member corresponds to the att1 variable in the equation.# Naturally undefined for directional lights.#
248 ("mAttenuationLinear", c_float),#Quadratic light attenuation factor.## The intensity of the light source at a given distance 'd' from# the light's position is# @code# Atten = 1/( att0 + att1#d + att2#d*d)# @endcode# This member corresponds to the att2 variable in the equation.# Naturally undefined for directional lights.#
249 ("mAttenuationQuadratic", c_float),#Diffuse color of the light source## The diffuse light color is multiplied with the diffuse# material color to obtain the final color that contributes# to the diffuse shading term.#
250 ("mColorDiffuse", Color3D),#Specular color of the light source## The specular light color is multiplied with the specular# material color to obtain the final color that contributes# to the specular shading term.#
251 ("mColorSpecular", Color3D),#Ambient color of the light source## The ambient light color is multiplied with the ambient# material color to obtain the final color that contributes# to the ambient shading term. Most renderers will ignore# this value it, is just a remaining of the fixed-function pipeline# that is still supported by quite many file formats.#
252 ("mColorAmbient", Color3D),#Inner angle of a spot light's light cone.## The spot light has maximum influence on objects inside this# angle. The angle is given in radians. It is 2PI for point# lights and undefined for directional lights.#
253 ("mAngleInnerCone", c_float),#Outer angle of a spot light's light cone.## The spot light does not affect objects outside this angle.# The angle is given in radians. It is 2PI for point lights and# undefined for directional lights. The outer angle must be# greater than or equal to the inner angle.# It is assumed that the application uses a smooth# interpolation between the inner and the outer cone of the# spot light.#
254 ("mAngleOuterCone", c_float),
255 ]
256
257 class Bone(Structure):
258 """
259 See 'aiMesh.h' for details.
260 """
261
262 _fields_ = [
263 # The name of the bone.
264 ("mName", String),# The number of vertices affected by this bone# The maximum value for this member is #AI_MAX_BONE_WEIGHTS.
265 ("mNumWeights", c_uint),# The vertices affected by this bone
266 ("mWeights", POINTER(VertexWeight)),# Matrix that transforms from mesh space to bone space in bind pose
267 ("mOffsetMatrix", Matrix4x4),
268 ]
269
270 class Mesh(Structure):
271 """
272 See 'aiMesh.h' for details.
273 """
274
73
74 _fields_ = [
75 # Binary length of the string excluding the terminal 0. This is NOT the
76 # logical length of strings containing UTF-8 multibyte sequences! It's
77 # the number of bytes from the beginning of the string to its end.
78 ("length", c_size_t),
79
80 # String buffer. Size limit is MAXLEN
81 ("data", c_char*MAXLEN),
82 ]
83
84 class MaterialPropertyString(Structure):
85 """
86 See 'aiTypes.h' for details.
87
88 The size of length is truncated to 4 bytes on 64-bit platforms when used as a
89 material property (see MaterialSystem.cpp aiMaterial::AddProperty() for details).
90 """
91
92 MAXLEN = 1024
93
94 _fields_ = [
95 # Binary length of the string excluding the terminal 0. This is NOT the
96 # logical length of strings containing UTF-8 multibyte sequences! It's
97 # the number of bytes from the beginning of the string to its end.
98 ("length", c_uint32),
99
100 # String buffer. Size limit is MAXLEN
101 ("data", c_char*MAXLEN),
102 ]
103
104 class MemoryInfo(Structure):
105 """
106 See 'aiTypes.h' for details.
107 """
108
109 _fields_ = [
110 # Storage allocated for texture data
111 ("textures", c_uint),
112
113 # Storage allocated for material data
114 ("materials", c_uint),
115
116 # Storage allocated for mesh data
117 ("meshes", c_uint),
118
119 # Storage allocated for node data
120 ("nodes", c_uint),
121
122 # Storage allocated for animation data
123 ("animations", c_uint),
124
125 # Storage allocated for camera data
126 ("cameras", c_uint),
127
128 # Storage allocated for light data
129 ("lights", c_uint),
130
131 # Total storage allocated for the full import.
132 ("total", c_uint),
133 ]
134
135 class Quaternion(Structure):
136 """
137 See 'aiQuaternion.h' for details.
138 """
139
140
141 _fields_ = [
142 # w,x,y,z components of the quaternion
143 ("w", c_float),("x", c_float),("y", c_float),("z", c_float),
144 ]
145
146 class Face(Structure):
147 """
148 See 'aiMesh.h' for details.
149 """
150
151 _fields_ = [
152 # Number of indices defining this face.
153 # The maximum value for this member is
154 #AI_MAX_FACE_INDICES.
155 ("mNumIndices", c_uint),
156
157 # Pointer to the indices array. Size of the array is given in numIndices.
158 ("mIndices", POINTER(c_uint)),
159 ]
160
161 class VertexWeight(Structure):
162 """
163 See 'aiMesh.h' for details.
164 """
165
166 _fields_ = [
167 # Index of the vertex which is influenced by the bone.
168 ("mVertexId", c_uint),
169
170 # The strength of the influence in the range (0...1).
171 # The influence from all bones at one vertex amounts to 1.
172 ("mWeight", c_float),
173 ]
174
175 class Matrix4x4(Structure):
176 """
177 See 'aiMatrix4x4.h' for details.
178 """
179
180
181 _fields_ = [
182 ("a1", c_float),("a2", c_float),("a3", c_float),("a4", c_float),
183 ("b1", c_float),("b2", c_float),("b3", c_float),("b4", c_float),
184 ("c1", c_float),("c2", c_float),("c3", c_float),("c4", c_float),
185 ("d1", c_float),("d2", c_float),("d3", c_float),("d4", c_float),
186 ]
187
188 class Vector3D(Structure):
189 """
190 See 'aiVector3D.h' for details.
191 """
192
193
194 _fields_ = [
195 ("x", c_float),("y", c_float),("z", c_float),
196 ]
197
198 class MeshKey(Structure):
199 """
200 See 'aiAnim.h' for details.
201 """
202
203 _fields_ = [
204 # The time of this key
205 ("mTime", c_double),
206
207 # Index into the aiMesh::mAnimMeshes array of the
208 # mesh coresponding to the
209 #aiMeshAnim hosting this
210 # key frame. The referenced anim mesh is evaluated
211 # according to the rules defined in the docs for
212 #aiAnimMesh.
213 ("mValue", c_uint),
214 ]
215
216 class Node(Structure):
217 """
218 See 'aiScene.h' for details.
219 """
220
221
222 Node._fields_ = [
223 # The name of the node.
224 # The name might be empty (length of zero) but all nodes which
225 # need to be accessed afterwards by bones or anims are usually named.
226 # Multiple nodes may have the same name, but nodes which are accessed
227 # by bones (see
228 #aiBone and
229 #aiMesh::mBones) *must* be unique.
230 # Cameras and lights are assigned to a specific node name - if there
231 # are multiple nodes with this name, they're assigned to each of them.
232 # <br>
233 # There are no limitations regarding the characters contained in
234 # this text. You should be able to handle stuff like whitespace, tabs,
235 # linefeeds, quotation marks, ampersands, ... .
236 ("mName", String),
237
238 # The transformation relative to the node's parent.
239 ("mTransformation", Matrix4x4),
240
241 # Parent node. NULL if this node is the root node.
242 ("mParent", POINTER(Node)),
243
244 # The number of child nodes of this node.
245 ("mNumChildren", c_uint),
246
247 # The child nodes of this node. NULL if mNumChildren is 0.
248 ("mChildren", POINTER(POINTER(Node))),
249
250 # The number of meshes of this node.
251 ("mNumMeshes", c_uint),
252
253 # The meshes of this node. Each entry is an index into the mesh
254 ("mMeshes", POINTER(c_uint)),
255 ]
256
257 class Light(Structure):
258 """
259 See 'aiLight.h' for details.
260 """
261
262
263 _fields_ = [
264 # The name of the light source.
265 # There must be a node in the scenegraph with the same name.
266 # This node specifies the position of the light in the scene
267 # hierarchy and can be animated.
268 ("mName", String),
269
270 # The type of the light source.
271 # aiLightSource_UNDEFINED is not a valid value for this member.
272 ("mType", c_uint),
273
274 # Position of the light source in space. Relative to the
275 # transformation of the node corresponding to the light.
276 # The position is undefined for directional lights.
277 ("mPosition", Vector3D),
278
279 # Direction of the light source in space. Relative to the
280 # transformation of the node corresponding to the light.
281 # The direction is undefined for point lights. The vector
282 # may be normalized, but it needn't.
283 ("mDirection", Vector3D),
284
285 # Constant light attenuation factor.
286 # The intensity of the light source at a given distance 'd' from
287 # the light's position is
288 # @code
289 # Atten = 1/( att0 + att1
290 # d + att2
291 # d*d)
292 # @endcode
293 # This member corresponds to the att0 variable in the equation.
294 # Naturally undefined for directional lights.
295 ("mAttenuationConstant", c_float),
296
297 # Linear light attenuation factor.
298 # The intensity of the light source at a given distance 'd' from
299 # the light's position is
300 # @code
301 # Atten = 1/( att0 + att1
302 # d + att2
303 # d*d)
304 # @endcode
305 # This member corresponds to the att1 variable in the equation.
306 # Naturally undefined for directional lights.
307 ("mAttenuationLinear", c_float),
308
309 # Quadratic light attenuation factor.
310 # The intensity of the light source at a given distance 'd' from
311 # the light's position is
312 # @code
313 # Atten = 1/( att0 + att1
314 # d + att2
315 # d*d)
316 # @endcode
317 # This member corresponds to the att2 variable in the equation.
318 # Naturally undefined for directional lights.
319 ("mAttenuationQuadratic", c_float),
320
321 # Diffuse color of the light source
322 # The diffuse light color is multiplied with the diffuse
323 # material color to obtain the final color that contributes
324 # to the diffuse shading term.
325 ("mColorDiffuse", Color3D),
326
327 # Specular color of the light source
328 # The specular light color is multiplied with the specular
329 # material color to obtain the final color that contributes
330 # to the specular shading term.
331 ("mColorSpecular", Color3D),
332
333 # Ambient color of the light source
334 # The ambient light color is multiplied with the ambient
335 # material color to obtain the final color that contributes
336 # to the ambient shading term. Most renderers will ignore
337 # this value it, is just a remaining of the fixed-function pipeline
338 # that is still supported by quite many file formats.
339 ("mColorAmbient", Color3D),
340
341 # Inner angle of a spot light's light cone.
342 # The spot light has maximum influence on objects inside this
343 # angle. The angle is given in radians. It is 2PI for point
344 # lights and undefined for directional lights.
345 ("mAngleInnerCone", c_float),
346
347 # Outer angle of a spot light's light cone.
348 # The spot light does not affect objects outside this angle.
349 # The angle is given in radians. It is 2PI for point lights and
350 # undefined for directional lights. The outer angle must be
351 # greater than or equal to the inner angle.
352 # It is assumed that the application uses a smooth
353 # interpolation between the inner and the outer cone of the
354 # spot light.
355 ("mAngleOuterCone", c_float),
356 ]
357
358 class Texture(Structure):
359 """
360 See 'aiTexture.h' for details.
361 """
362
363
364 _fields_ = [
365 # Width of the texture, in pixels
366 # If mHeight is zero the texture is compressed in a format
367 # like JPEG. In this case mWidth specifies the size of the
368 # memory area pcData is pointing to, in bytes.
369 ("mWidth", c_uint),
370
371 # Height of the texture, in pixels
372 # If this value is zero, pcData points to an compressed texture
373 # in any format (e.g. JPEG).
374 ("mHeight", c_uint),
375
376 # A hint from the loader to make it easier for applications
377 # to determine the type of embedded compressed textures.
378 # If mHeight != 0 this member is undefined. Otherwise it
379 # is set set to '\\0\\0\\0\\0' if the loader has no additional
380 # information about the texture file format used OR the
381 # file extension of the format without a trailing dot. If there
382 # are multiple file extensions for a format, the shortest
383 # extension is chosen (JPEG maps to 'jpg', not to 'jpeg').
384 # E.g. 'dds\\0', 'pcx\\0', 'jpg\\0'. All characters are lower-case.
385 # The fourth character will always be '\\0'.
386 ("achFormatHint", c_char*4),
387
388 # Data of the texture.
389 # Points to an array of mWidth
390 # mHeight aiTexel's.
391 # The format of the texture data is always ARGB8888 to
392 # make the implementation for user of the library as easy
393 # as possible. If mHeight = 0 this is a pointer to a memory
394 # buffer of size mWidth containing the compressed texture
395 # data. Good luck, have fun!
396 ("pcData", POINTER(Texel)),
397 ]
398
399 class Ray(Structure):
400 """
401 See 'aiTypes.h' for details.
402 """
403
404 _fields_ = [
405 # Position and direction of the ray
406 ("pos", Vector3D),("dir", Vector3D),
407 ]
408
409 class UVTransform(Structure):
410 """
411 See 'aiMaterial.h' for details.
412 """
413
414 _fields_ = [
415 # Translation on the u and v axes.
416 # The default value is (0|0).
417 ("mTranslation", Vector2D),
418
419 # Scaling on the u and v axes.
420 # The default value is (1|1).
421 ("mScaling", Vector2D),
422
423 # Rotation - in counter-clockwise direction.
424 # The rotation angle is specified in radians. The
425 # rotation center is 0.5f|0.5f. The default value
426 # 0.f.
427 ("mRotation", c_float),
428 ]
429
430 class MaterialProperty(Structure):
431 """
432 See 'aiMaterial.h' for details.
433 """
434
435 _fields_ = [
436 # Specifies the name of the property (key)
437 # Keys are generally case insensitive.
438 ("mKey", String),
439
440 # Textures: Specifies their exact usage semantic.
441 # For non-texture properties, this member is always 0
442 # (or, better-said,
443 #aiTextureType_NONE).
444 ("mSemantic", c_uint),
445
446 # Textures: Specifies the index of the texture.
447 # For non-texture properties, this member is always 0.
448 ("mIndex", c_uint),
449
450 # Size of the buffer mData is pointing to, in bytes.
451 # This value may not be 0.
452 ("mDataLength", c_uint),
453
454 # Type information for the property.
455 # Defines the data layout inside the data buffer. This is used
456 # by the library internally to perform debug checks and to
457 # utilize proper type conversions.
458 # (It's probably a hacky solution, but it works.)
459 ("mType", c_uint),
460
461 # Binary buffer to hold the property's value.
462 # The size of the buffer is always mDataLength.
463 ("mData", POINTER(c_char)),
464 ]
465
466 class Material(Structure):
467 """
468 See 'aiMaterial.h' for details.
469 """
470
471 _fields_ = [
472 # List of all material properties loaded.
473 ("mProperties", POINTER(POINTER(MaterialProperty))),
474
475 # Number of properties in the data base
476 ("mNumProperties", c_uint),
477
478 # Storage allocated
479 ("mNumAllocated", c_uint),
480 ]
481
482 class Bone(Structure):
483 """
484 See 'aiMesh.h' for details.
485 """
486
487 _fields_ = [
488 # The name of the bone.
489 ("mName", String),
490
491 # The number of vertices affected by this bone
492 # The maximum value for this member is
493 #AI_MAX_BONE_WEIGHTS.
494 ("mNumWeights", c_uint),
495
496 # The vertices affected by this bone
497 ("mWeights", POINTER(VertexWeight)),
498
499 # Matrix that transforms from mesh space to bone space in bind pose
500 ("mOffsetMatrix", Matrix4x4),
501 ]
502
503 class Mesh(Structure):
504 """
505 See 'aiMesh.h' for details.
506 """
507
275508 AI_MAX_FACE_INDICES = 0x7fff
276509 AI_MAX_BONE_WEIGHTS = 0x7fffffff
277510 AI_MAX_VERTICES = 0x7fffffff
278511 AI_MAX_FACES = 0x7fffffff
279512 AI_MAX_NUMBER_OF_COLOR_SETS = 0x8
280513 AI_MAX_NUMBER_OF_TEXTURECOORDS = 0x8
281
282 _fields_ = [
283 #Bitwise combination of the members of the #aiPrimitiveType enum.#This specifies which types of primitives are present in the mesh.#The "SortByPrimitiveType"-Step can be used to make sure the#output meshes consist of one primitive type each.#
284 ("mPrimitiveTypes", c_uint),#The number of vertices in this mesh.#This is also the size of all of the per-vertex data arrays.#The maximum value for this member is #AI_MAX_VERTICES.#
285 ("mNumVertices", c_uint),#The number of primitives (triangles, polygons, lines) in this mesh.#This is also the size of the mFaces array.#The maximum value for this member is #AI_MAX_FACES.#
286 ("mNumFaces", c_uint),#Vertex positions.#This array is always present in a mesh. The array is#mNumVertices in size.#
287 ("mVertices", POINTER(Vector3D)),#Vertex normals.#The array contains normalized vectors, NULL if not present.#The array is mNumVertices in size. Normals are undefined for#point and line primitives. A mesh consisting of points and#lines only may not have normal vectors. Meshes with mixed#primitive types (i.e. lines and triangles) may have normals,#but the normals for vertices that are only referenced by#point or line primitives are undefined and set to QNaN (WARN:#qNaN compares to inequal to *everything*, even to qNaN itself.#Using code like this to check whether a field is qnan is:#@code##define IS_QNAN(f) (f != f)#@endcode#still dangerous because even 1.f == 1.f could evaluate to false! (#remember the subtleties of IEEE754 artithmetics). Use stuff like#@c fpclassify instead.#@note Normal vectors computed by Assimp are always unit-length.#However, this needn't apply for normals that have been taken# directly from the model file.#
288 ("mNormals", POINTER(Vector3D)),#Vertex tangents.#The tangent of a vertex points in the direction of the positive#X texture axis. The array contains normalized vectors, NULL if#not present. The array is mNumVertices in size. A mesh consisting#of points and lines only may not have normal vectors. Meshes with#mixed primitive types (i.e. lines and triangles) may have#normals, but the normals for vertices that are only referenced by#point or line primitives are undefined and set to qNaN. See#the #mNormals member for a detailled discussion of qNaNs.#@note If the mesh contains tangents, it automatically also#contains bitangents.#
289 ("mTangents", POINTER(Vector3D)),#Vertex bitangents.#The bitangent of a vertex points in the direction of the positive#Y texture axis. The array contains normalized vectors, NULL if not#present. The array is mNumVertices in size.#@note If the mesh contains tangents, it automatically also contains#bitangents.#
290 ("mBitangents", POINTER(Vector3D)),#Vertex color sets.#A mesh may contain 0 to #AI_MAX_NUMBER_OF_COLOR_SETS vertex#colors per vertex. NULL if not present. Each array is#mNumVertices in size if present.#
291 ("mColors", POINTER(Color4D)*AI_MAX_NUMBER_OF_COLOR_SETS),#Vertex texture coords, also known as UV channels.#A mesh may contain 0 to AI_MAX_NUMBER_OF_TEXTURECOORDS per#vertex. NULL if not present. The array is mNumVertices in size.#
292 ("mTextureCoords", POINTER(Vector3D)*AI_MAX_NUMBER_OF_TEXTURECOORDS),#Specifies the number of components for a given UV channel.#Up to three channels are supported (UVW, for accessing volume#or cube maps). If the value is 2 for a given channel n, the#component p.z of mTextureCoords[n][p] is set to 0.0f.#If the value is 1 for a given channel, p.y is set to 0.0f, too.#@note 4D coords are not supported#
293 ("mNumUVComponents", c_uint*AI_MAX_NUMBER_OF_TEXTURECOORDS),#The faces the mesh is constructed from.#Each face refers to a number of vertices by their indices.#This array is always present in a mesh, its size is given#in mNumFaces. If the #AI_SCENE_FLAGS_NON_VERBOSE_FORMAT#is NOT set each face references an unique set of vertices.#
294 ("mFaces", POINTER(Face)),#The number of bones this mesh contains.#Can be 0, in which case the mBones array is NULL.#
295 ("mNumBones", c_uint),#The bones of this mesh.#A bone consists of a name by which it can be found in the#frame hierarchy and a set of vertex weights.#
296 ("mBones", POINTER(POINTER(Bone))),#The material used by this mesh.#A mesh does use only a single material. If an imported model uses#multiple materials, the import splits up the mesh. Use this value#as index into the scene's material list.#
297 ("mMaterialIndex", c_uint),#Name of the mesh. Meshes can be named, but this is not a# requirement and leaving this field empty is totally fine.# There are mainly three uses for mesh names:# - some formats name nodes and meshes independently.# - importers tend to split meshes up to meet the# one-material-per-mesh requirement. Assigning# the same (dummy) name to each of the result meshes# aids the caller at recovering the original mesh# partitioning.# - Vertex animations refer to meshes by their names.#
298 ("mName", String),#NOT CURRENTLY IN USE. The number of attachment meshes#
299 ("mNumAnimMeshes", c_uint),#NOT CURRENTLY IN USE. Attachment meshes for this mesh, for vertex-based animation.# Attachment meshes carry replacement data for some of the# mesh'es vertex components (usually positions, normals).#
300 ]
301
302 class VectorKey(Structure):
303 """
304 See 'aiAnim.h' for details.
305 """
306
307 _fields_ = [
308 #The time of this key#
309 ("mTime", c_double),#The value of this key#
310 ("mValue", Vector3D),
311 ]
312
313 class QuatKey(Structure):
314 """
315 See 'aiAnim.h' for details.
316 """
317
318 _fields_ = [
319 #The time of this key#
320 ("mTime", c_double),#The value of this key#
321 ("mValue", Quaternion),
322 ]
323
324 class NodeAnim(Structure):
325 """
326 See 'aiAnim.h' for details.
327 """
328
329 _fields_ = [
330 #The name of the node affected by this animation. The node# must exist and it must be unique.#
331 ("mNodeName", String),#The number of position keys#
332 ("mNumPositionKeys", c_uint),#The position keys of this animation channel. Positions are#specified as 3D vector. The array is mNumPositionKeys in size.##If there are position keys, there will also be at least one#scaling and one rotation key.#
333 ("mPositionKeys", POINTER(VectorKey)),#The number of rotation keys#
334 ("mNumRotationKeys", c_uint),#The rotation keys of this animation channel. Rotations are# given as quaternions, which are 4D vectors. The array is# mNumRotationKeys in size.##If there are rotation keys, there will also be at least one#scaling and one position key.#
335 ("mRotationKeys", POINTER(QuatKey)),#The number of scaling keys#
336 ("mNumScalingKeys", c_uint),#The scaling keys of this animation channel. Scalings are# specified as 3D vector. The array is mNumScalingKeys in size.##If there are scaling keys, there will also be at least one#position and one rotation key.#
337 ("mScalingKeys", POINTER(VectorKey)),#Defines how the animation behaves before the first# key is encountered.## The default value is aiAnimBehaviour_DEFAULT (the original# transformation matrix of the affected node is used).#
338 ("mPreState", c_uint),#Defines how the animation behaves after the last# key was processed.## The default value is aiAnimBehaviour_DEFAULT (the original# transformation matrix of the affected node is taken).#
339 ("mPostState", c_uint),
340 ]
341
342 class Animation(Structure):
343 """
344 See 'aiAnim.h' for details.
345 """
346
347 _fields_ = [
348 #The name of the animation. If the modeling package this data was# exported from does support only a single animation channel, this# name is usually empty (length is zero).#
349 ("mName", String),#Duration of the animation in ticks.#
350 ("mDuration", c_double),#Ticks per second. 0 if not specified in the imported file#
351 ("mTicksPerSecond", c_double),#The number of bone animation channels. Each channel affects# a single node.#
352 ("mNumChannels", c_uint),#The node animation channels. Each channel affects a single node.# The array is mNumChannels in size.#
353 ("mChannels", POINTER(POINTER(NodeAnim))),#The number of mesh animation channels. Each channel affects# a single mesh and defines vertex-based animation.#
354 ("mNumMeshChannels", c_uint),#The mesh animation channels. Each channel affects a single mesh.# The array is mNumMeshChannels in size.#
355 ]
356
357 class UVTransform(Structure):
358 """
359 See 'aiMaterial.h' for details.
360 """
361
362 _fields_ = [
363 #Translation on the u and v axes.## The default value is (0|0).#
364 ("mTranslation", Vector2D),#Scaling on the u and v axes.## The default value is (1|1).#
365 ("mScaling", Vector2D),#Rotation - in counter-clockwise direction.## The rotation angle is specified in radians. The# rotation center is 0.5f|0.5f. The default value# 0.f.#
366 ("mRotation", c_float),
367 ]
368
369 class MaterialProperty(Structure):
370 """
371 See 'aiMaterial.h' for details.
372 """
373
374 _fields_ = [
375 #Specifies the name of the property (key)# Keys are generally case insensitive.#
376 ("mKey", String),#Textures: Specifies their exact usage semantic.#For non-texture properties, this member is always 0#(or, better-said, #aiTextureType_NONE).#
377 ("mSemantic", c_uint),#Textures: Specifies the index of the texture.# For non-texture properties, this member is always 0.#
378 ("mIndex", c_uint),#Size of the buffer mData is pointing to, in bytes.# This value may not be 0.#
379 ("mDataLength", c_uint),#Type information for the property.##Defines the data layout inside the data buffer. This is used#by the library internally to perform debug checks and to#utilize proper type conversions.#(It's probably a hacky solution, but it works.)#
380 ("mType", c_uint),#Binary buffer to hold the property's value.#The size of the buffer is always mDataLength.#
381 ("mData", POINTER(c_char)),
382 ]
383
384 class Material(Structure):
385 """
386 See 'aiMaterial.h' for details.
387 """
388
389 _fields_ = [
390 #List of all material properties loaded.#
391 ("mProperties", POINTER(POINTER(MaterialProperty))),#Number of properties in the data base#
392 ("mNumProperties", c_uint),#Storage allocated#
393 ("mNumAllocated", c_uint),
394 ]
395
396 class Scene(Structure):
397 """
398 See 'aiScene.h' for details.
399 """
400
514
515 _fields_ = [
516 # Bitwise combination of the members of the
517 #aiPrimitiveType enum.
518 # This specifies which types of primitives are present in the mesh.
519 # The "SortByPrimitiveType"-Step can be used to make sure the
520 # output meshes consist of one primitive type each.
521 ("mPrimitiveTypes", c_uint),
522
523 # The number of vertices in this mesh.
524 # This is also the size of all of the per-vertex data arrays.
525 # The maximum value for this member is
526 #AI_MAX_VERTICES.
527 ("mNumVertices", c_uint),
528
529 # The number of primitives (triangles, polygons, lines) in this mesh.
530 # This is also the size of the mFaces array.
531 # The maximum value for this member is
532 #AI_MAX_FACES.
533 ("mNumFaces", c_uint),
534
535 # Vertex positions.
536 # This array is always present in a mesh. The array is
537 # mNumVertices in size.
538 ("mVertices", POINTER(Vector3D)),
539
540 # Vertex normals.
541 # The array contains normalized vectors, NULL if not present.
542 # The array is mNumVertices in size. Normals are undefined for
543 # point and line primitives. A mesh consisting of points and
544 # lines only may not have normal vectors. Meshes with mixed
545 # primitive types (i.e. lines and triangles) may have normals,
546 # but the normals for vertices that are only referenced by
547 # point or line primitives are undefined and set to QNaN (WARN:
548 # qNaN compares to inequal to *everything*, even to qNaN itself.
549 # Using code like this to check whether a field is qnan is:
550 # @code
551 #define IS_QNAN(f) (f != f)
552 # @endcode
553 # still dangerous because even 1.f == 1.f could evaluate to false! (
554 # remember the subtleties of IEEE754 artithmetics). Use stuff like
555 # @c fpclassify instead.
556 # @note Normal vectors computed by Assimp are always unit-length.
557 # However, this needn't apply for normals that have been taken
558 # directly from the model file.
559 ("mNormals", POINTER(Vector3D)),
560
561 # Vertex tangents.
562 # The tangent of a vertex points in the direction of the positive
563 # X texture axis. The array contains normalized vectors, NULL if
564 # not present. The array is mNumVertices in size. A mesh consisting
565 # of points and lines only may not have normal vectors. Meshes with
566 # mixed primitive types (i.e. lines and triangles) may have
567 # normals, but the normals for vertices that are only referenced by
568 # point or line primitives are undefined and set to qNaN. See
569 # the
570 #mNormals member for a detailled discussion of qNaNs.
571 # @note If the mesh contains tangents, it automatically also
572 # contains bitangents (the bitangent is just the cross product of
573 # tangent and normal vectors).
574 ("mTangents", POINTER(Vector3D)),
575
576 # Vertex bitangents.
577 # The bitangent of a vertex points in the direction of the positive
578 # Y texture axis. The array contains normalized vectors, NULL if not
579 # present. The array is mNumVertices in size.
580 # @note If the mesh contains tangents, it automatically also contains
581 # bitangents.
582 ("mBitangents", POINTER(Vector3D)),
583
584 # Vertex color sets.
585 # A mesh may contain 0 to
586 #AI_MAX_NUMBER_OF_COLOR_SETS vertex
587 # colors per vertex. NULL if not present. Each array is
588 # mNumVertices in size if present.
589 ("mColors", POINTER(Color4D)*AI_MAX_NUMBER_OF_COLOR_SETS),
590
591 # Vertex texture coords, also known as UV channels.
592 # A mesh may contain 0 to AI_MAX_NUMBER_OF_TEXTURECOORDS per
593 # vertex. NULL if not present. The array is mNumVertices in size.
594 ("mTextureCoords", POINTER(Vector3D)*AI_MAX_NUMBER_OF_TEXTURECOORDS),
595
596 # Specifies the number of components for a given UV channel.
597 # Up to three channels are supported (UVW, for accessing volume
598 # or cube maps). If the value is 2 for a given channel n, the
599 # component p.z of mTextureCoords[n][p] is set to 0.0f.
600 # If the value is 1 for a given channel, p.y is set to 0.0f, too.
601 # @note 4D coords are not supported
602 ("mNumUVComponents", c_uint*AI_MAX_NUMBER_OF_TEXTURECOORDS),
603
604 # The faces the mesh is constructed from.
605 # Each face refers to a number of vertices by their indices.
606 # This array is always present in a mesh, its size is given
607 # in mNumFaces. If the
608 #AI_SCENE_FLAGS_NON_VERBOSE_FORMAT
609 # is NOT set each face references an unique set of vertices.
610 ("mFaces", POINTER(Face)),
611
612 # The number of bones this mesh contains.
613 # Can be 0, in which case the mBones array is NULL.
614 ("mNumBones", c_uint),
615
616 # The bones of this mesh.
617 # A bone consists of a name by which it can be found in the
618 # frame hierarchy and a set of vertex weights.
619 ("mBones", POINTER(POINTER(Bone))),
620
621 # The material used by this mesh.
622 # A mesh does use only a single material. If an imported model uses
623 # multiple materials, the import splits up the mesh. Use this value
624 # as index into the scene's material list.
625 ("mMaterialIndex", c_uint),
626
627 # Name of the mesh. Meshes can be named, but this is not a
628 # requirement and leaving this field empty is totally fine.
629 # There are mainly three uses for mesh names:
630 # - some formats name nodes and meshes independently.
631 # - importers tend to split meshes up to meet the
632 # one-material-per-mesh requirement. Assigning
633 # the same (dummy) name to each of the result meshes
634 # aids the caller at recovering the original mesh
635 # partitioning.
636 # - Vertex animations refer to meshes by their names.
637 ("mName", String),
638
639 # NOT CURRENTLY IN USE. The number of attachment meshes
640 ("mNumAnimMeshes", c_uint),
641
642 # NOT CURRENTLY IN USE. Attachment meshes for this mesh, for vertex-based animation.
643 # Attachment meshes carry replacement data for some of the
644 # mesh'es vertex components (usually positions, normals).
645 ]
646
647 class Camera(Structure):
648 """
649 See 'aiCamera.h' for details.
650 """
651
652
653 _fields_ = [
654 # The name of the camera.
655 # There must be a node in the scenegraph with the same name.
656 # This node specifies the position of the camera in the scene
657 # hierarchy and can be animated.
658 ("mName", String),
659
660 # Position of the camera relative to the coordinate space
661 # defined by the corresponding node.
662 # The default value is 0|0|0.
663 ("mPosition", Vector3D),
664
665 # 'Up' - vector of the camera coordinate system relative to
666 # the coordinate space defined by the corresponding node.
667 # The 'right' vector of the camera coordinate system is
668 # the cross product of the up and lookAt vectors.
669 # The default value is 0|1|0. The vector
670 # may be normalized, but it needn't.
671 ("mUp", Vector3D),
672
673 # 'LookAt' - vector of the camera coordinate system relative to
674 # the coordinate space defined by the corresponding node.
675 # This is the viewing direction of the user.
676 # The default value is 0|0|1. The vector
677 # may be normalized, but it needn't.
678 ("mLookAt", Vector3D),
679
680 # Half horizontal field of view angle, in radians.
681 # The field of view angle is the angle between the center
682 # line of the screen and the left or right border.
683 # The default value is 1/4PI.
684 ("mHorizontalFOV", c_float),
685
686 # Distance of the near clipping plane from the camera.
687 # The value may not be 0.f (for arithmetic reasons to prevent
688 # a division through zero). The default value is 0.1f.
689 ("mClipPlaneNear", c_float),
690
691 # Distance of the far clipping plane from the camera.
692 # The far clipping plane must, of course, be further away than the
693 # near clipping plane. The default value is 1000.f. The ratio
694 # between the near and the far plane should not be too
695 # large (between 1000-10000 should be ok) to avoid floating-point
696 # inaccuracies which could lead to z-fighting.
697 ("mClipPlaneFar", c_float),
698
699 # Screen aspect ratio.
700 # This is the ration between the width and the height of the
701 # screen. Typical values are 4/3, 1/2 or 1/1. This value is
702 # 0 if the aspect ratio is not defined in the source file.
703 # 0 is also the default value.
704 ("mAspect", c_float),
705 ]
706
707 class VectorKey(Structure):
708 """
709 See 'aiAnim.h' for details.
710 """
711
712 _fields_ = [
713 # The time of this key
714 ("mTime", c_double),
715
716 # The value of this key
717 ("mValue", Vector3D),
718 ]
719
720 class QuatKey(Structure):
721 """
722 See 'aiAnim.h' for details.
723 """
724
725 _fields_ = [
726 # The time of this key
727 ("mTime", c_double),
728
729 # The value of this key
730 ("mValue", Quaternion),
731 ]
732
733 class NodeAnim(Structure):
734 """
735 See 'aiAnim.h' for details.
736 """
737
738 _fields_ = [
739 # The name of the node affected by this animation. The node
740 # must exist and it must be unique.
741 ("mNodeName", String),
742
743 # The number of position keys
744 ("mNumPositionKeys", c_uint),
745
746 # The position keys of this animation channel. Positions are
747 # specified as 3D vector. The array is mNumPositionKeys in size.
748 # If there are position keys, there will also be at least one
749 # scaling and one rotation key.
750 ("mPositionKeys", POINTER(VectorKey)),
751
752 # The number of rotation keys
753 ("mNumRotationKeys", c_uint),
754
755 # The rotation keys of this animation channel. Rotations are
756 # given as quaternions, which are 4D vectors. The array is
757 # mNumRotationKeys in size.
758 # If there are rotation keys, there will also be at least one
759 # scaling and one position key.
760 ("mRotationKeys", POINTER(QuatKey)),
761
762 # The number of scaling keys
763 ("mNumScalingKeys", c_uint),
764
765 # The scaling keys of this animation channel. Scalings are
766 # specified as 3D vector. The array is mNumScalingKeys in size.
767 # If there are scaling keys, there will also be at least one
768 # position and one rotation key.
769 ("mScalingKeys", POINTER(VectorKey)),
770
771 # Defines how the animation behaves before the first
772 # key is encountered.
773 # The default value is aiAnimBehaviour_DEFAULT (the original
774 # transformation matrix of the affected node is used).
775 ("mPreState", c_uint),
776
777 # Defines how the animation behaves after the last
778 # key was processed.
779 # The default value is aiAnimBehaviour_DEFAULT (the original
780 # transformation matrix of the affected node is taken).
781 ("mPostState", c_uint),
782 ]
783
784 class Animation(Structure):
785 """
786 See 'aiAnim.h' for details.
787 """
788
789 _fields_ = [
790 # The name of the animation. If the modeling package this data was
791 # exported from does support only a single animation channel, this
792 # name is usually empty (length is zero).
793 ("mName", String),
794
795 # Duration of the animation in ticks.
796 ("mDuration", c_double),
797
798 # Ticks per second. 0 if not specified in the imported file
799 ("mTicksPerSecond", c_double),
800
801 # The number of bone animation channels. Each channel affects
802 # a single node.
803 ("mNumChannels", c_uint),
804
805 # The node animation channels. Each channel affects a single node.
806 # The array is mNumChannels in size.
807 ("mChannels", POINTER(POINTER(NodeAnim))),
808
809 # The number of mesh animation channels. Each channel affects
810 # a single mesh and defines vertex-based animation.
811 ("mNumMeshChannels", c_uint),
812
813 # The mesh animation channels. Each channel affects a single mesh.
814 # The array is mNumMeshChannels in size.
815 ]
816
817 class Scene(Structure):
818 """
819 See 'aiScene.h' for details.
820 """
821
401822 AI_SCENE_FLAGS_INCOMPLETE = 0x1
402823 AI_SCENE_FLAGS_VALIDATED = 0x2
403824 AI_SCENE_FLAGS_VALIDATION_WARNING = 0x4
404825 AI_SCENE_FLAGS_NON_VERBOSE_FORMAT = 0x8
405826 AI_SCENE_FLAGS_TERRAIN = 0x10
406
407 _fields_ = [
408 #Any combination of the AI_SCENE_FLAGS_XXX flags. By default#this value is 0, no flags are set. Most applications will#want to reject all scenes with the AI_SCENE_FLAGS_INCOMPLETE#bit set.#
409 ("mFlags", c_uint),#The root node of the hierarchy.##There will always be at least the root node if the import#was successful (and no special flags have been set).#Presence of further nodes depends on the format and content#of the imported file.#
410 ("mRootNode", POINTER(Node)),#The number of meshes in the scene.#
411 ("mNumMeshes", c_uint),#The array of meshes.##Use the indices given in the aiNode structure to access#this array. The array is mNumMeshes in size. If the#AI_SCENE_FLAGS_INCOMPLETE flag is not set there will always#be at least ONE material.#
412 ("mMeshes", POINTER(POINTER(Mesh))),#The number of materials in the scene.#
413 ("mNumMaterials", c_uint),#The array of materials.##Use the index given in each aiMesh structure to access this#array. The array is mNumMaterials in size. If the#AI_SCENE_FLAGS_INCOMPLETE flag is not set there will always#be at least ONE material.#
414 ("mMaterials", POINTER(POINTER(Material))),#The number of animations in the scene.#
415 ("mNumAnimations", c_uint),#The array of animations.##All animations imported from the given file are listed here.#The array is mNumAnimations in size.#
416 ("mAnimations", POINTER(POINTER(Animation))),#The number of textures embedded into the file#
417 ("mNumTextures", c_uint),#The array of embedded textures.##Not many file formats embed their textures into the file.#An example is Quake's MDL format (which is also used by#some GameStudio versions)#
418 ("mTextures", POINTER(POINTER(Texture))),#The number of light sources in the scene. Light sources#are fully optional, in most cases this attribute will be 0#
419 ("mNumLights", c_uint),#The array of light sources.##All light sources imported from the given file are#listed here. The array is mNumLights in size.#
420 ("mLights", POINTER(POINTER(Light))),#The number of cameras in the scene. Cameras#are fully optional, in most cases this attribute will be 0#
421 ("mNumCameras", c_uint),#The array of cameras.##All cameras imported from the given file are listed here.#The array is mNumCameras in size. The first camera in the#array (if existing) is the default camera view into#the scene.#
422 ("mCameras", POINTER(POINTER(Camera))),
423 ]
827
828 _fields_ = [
829 # Any combination of the AI_SCENE_FLAGS_XXX flags. By default
830 # this value is 0, no flags are set. Most applications will
831 # want to reject all scenes with the AI_SCENE_FLAGS_INCOMPLETE
832 # bit set.
833 ("mFlags", c_uint),
834
835 # The root node of the hierarchy.
836 # There will always be at least the root node if the import
837 # was successful (and no special flags have been set).
838 # Presence of further nodes depends on the format and content
839 # of the imported file.
840 ("mRootNode", POINTER(Node)),
841
842 # The number of meshes in the scene.
843 ("mNumMeshes", c_uint),
844
845 # The array of meshes.
846 # Use the indices given in the aiNode structure to access
847 # this array. The array is mNumMeshes in size. If the
848 # AI_SCENE_FLAGS_INCOMPLETE flag is not set there will always
849 # be at least ONE material.
850 ("mMeshes", POINTER(POINTER(Mesh))),
851
852 # The number of materials in the scene.
853 ("mNumMaterials", c_uint),
854
855 # The array of materials.
856 # Use the index given in each aiMesh structure to access this
857 # array. The array is mNumMaterials in size. If the
858 # AI_SCENE_FLAGS_INCOMPLETE flag is not set there will always
859 # be at least ONE material.
860 ("mMaterials", POINTER(POINTER(Material))),
861
862 # The number of animations in the scene.
863 ("mNumAnimations", c_uint),
864
865 # The array of animations.
866 # All animations imported from the given file are listed here.
867 # The array is mNumAnimations in size.
868 ("mAnimations", POINTER(POINTER(Animation))),
869
870 # The number of textures embedded into the file
871 ("mNumTextures", c_uint),
872
873 # The array of embedded textures.
874 # Not many file formats embed their textures into the file.
875 # An example is Quake's MDL format (which is also used by
876 # some GameStudio versions)
877 ("mTextures", POINTER(POINTER(Texture))),
878
879 # The number of light sources in the scene. Light sources
880 # are fully optional, in most cases this attribute will be 0
881 ("mNumLights", c_uint),
882
883 # The array of light sources.
884 # All light sources imported from the given file are
885 # listed here. The array is mNumLights in size.
886 ("mLights", POINTER(POINTER(Light))),
887
888 # The number of cameras in the scene. Cameras
889 # are fully optional, in most cases this attribute will be 0
890 ("mNumCameras", c_uint),
891
892 # The array of cameras.
893 # All cameras imported from the given file are listed here.
894 # The array is mNumCameras in size. The first camera in the
895 # array (if existing) is the default camera view into
896 # the scene.
897 ("mCameras", POINTER(POINTER(Camera))),
898 ]
+0
-45
port/PyAssimp/quicktest.py less more
0 #!/usr/bin/env python
1 #-*- coding: UTF-8 -*-
2
3 """
4 This module uses the sample.py script to load all test models it finds.
5
6 Note: this is not an exhaustive test suite, it does not check the
7 data structures in detail. It just verifies whether basic
8 loading and querying of 3d models using pyassimp works.
9 """
10
11
12 import sys,os
13 import sample
14 from pyassimp import pyassimp,errors
15
16 # paths to be walkd recursively
17 basepaths = [os.path.join('..','..','test','models'), os.path.join('..','..','test','models-nonbsd')]
18
19 # file extensions to be considered
20 extensions = ['.3ds','.x','.lwo','.obj','.md5mesh','.dxf','.ply','.stl','.dae','.md5anim','.lws','.irrmesh','.nff','.off','.blend']
21
22 def run_tests():
23 ok,err = 0,0
24 for path in basepaths:
25 for root, dirs, files in os.walk(path):
26 for afile in files:
27 base,ext = os.path.splitext(afile)
28 if ext in extensions:
29 try:
30 sample.main(os.path.join(root,afile))
31 ok += 1
32 except errors.AssimpError as error:
33 # assimp error is fine, this is a controlled case
34 print error
35 err += 1
36 print '** Loaded %s models, got controlled errors for %s files' % (ok,err)
37
38
39 if __name__ == '__main__':
40 run_tests()
41
42
43
44
+0
-71
port/PyAssimp/sample.py less more
0 #!/usr/bin/env python
1 #-*- coding: UTF-8 -*-
2
3 """
4 This module demonstrates the functionality of PyAssimp.
5 """
6
7
8 from pyassimp import pyassimp
9 import os, sys
10
11 #get a model out of assimp's test-data if none is provided on the command line
12 DEFAULT_MODEL = os.path.join(os.path.dirname(__file__),
13 "..", "..",
14 "test", "models", "MDL", "MDL3 (3DGS A4)", "minigun.MDL")
15
16 def main(filename=None):
17 filename = filename or DEFAULT_MODEL
18 scene = pyassimp.load(filename)
19
20 #the model we load
21 print "MODEL:", filename
22 print
23
24 #write some statistics
25 print "SCENE:"
26 print " meshes:", len(scene.meshes)
27 print " materials:", len(scene.materials)
28 print " textures:", len(scene.textures)
29 print
30
31 print "MESHES:"
32 for index, mesh in enumerate(scene.meshes):
33 print " MESH", index+1
34 print " material:", mesh.mMaterialIndex+1
35 print " vertices:", len(mesh.vertices)
36 print " first 3 verts:", mesh.vertices[:3]
37 #if len(mesh.normals):
38 # print " first 3 normals:", mesh.normals[:3]
39 print " colors:", len(mesh.colors)
40 tc = mesh.texcoords
41 print " texture-coords 1:", len(tc[0]), "first3:", tc[0][:3]
42 print " texture-coords 2:", len(tc[1]), "first3:", tc[1][:3]
43 print " texture-coords 3:", len(tc[2]), "first3:", tc[2][:3]
44 print " texture-coords 4:", len(tc[3]), "first3:", tc[3][:3]
45 print " uv-component-count:", len(mesh.mNumUVComponents)
46 print " faces:", len(mesh.faces), "first:", [f.indices for f in mesh.faces[:3]]
47 print " bones:", len(mesh.bones), "first:", [b.mName for b in mesh.bones[:3]]
48 print
49
50 print "MATERIALS:"
51 for index, material in enumerate(scene.materials):
52 print " MATERIAL", index+1
53 properties = pyassimp.GetMaterialProperties(material)
54 for key in properties:
55 print " %s: %s" % (key, properties[key])
56 print
57
58 print "TEXTURES:"
59 for index, texture in enumerate(scene.textures):
60 print " TEXTURE", index+1
61 print " width:", texture.mWidth
62 print " height:", texture.mHeight
63 print " hint:", texture.achFormatHint
64 print " data (size):", texture.mWidth*texture.mHeight
65
66 # Finally release the model
67 pyassimp.release(scene)
68
69 if __name__ == "__main__":
70 main(sys.argv[1] if len(sys.argv)>1 else None)
0 #!/usr/bin/env python
1 #-*- coding: UTF-8 -*-
2
3 """ This program loads a model with PyASSIMP, and display it.
4
5 It make a large use of shaders to illustrate a 'modern' OpenGL pipeline.
6
7 Based on:
8 - pygame + mouselook code from http://3dengine.org/Spectator_%28PyOpenGL%29
9 - http://www.lighthouse3d.com/tutorials
10 - http://www.songho.ca/opengl/gl_transform.html
11 - http://code.activestate.com/recipes/325391/
12 - ASSIMP's C++ SimpleOpenGL viewer
13
14 Authors: Séverin Lemaignan, 2012-2013
15 """
16 import sys
17
18 import logging
19 logger = logging.getLogger("pyassimp")
20 gllogger = logging.getLogger("OpenGL")
21 gllogger.setLevel(logging.WARNING)
22 logging.basicConfig(level=logging.INFO)
23
24 import OpenGL
25 OpenGL.ERROR_CHECKING=False
26 OpenGL.ERROR_LOGGING = False
27 #OpenGL.ERROR_ON_COPY = True
28 #OpenGL.FULL_LOGGING = True
29 from OpenGL.GL import *
30 from OpenGL.error import GLError
31 from OpenGL.GLU import *
32 from OpenGL.GLUT import *
33 from OpenGL.arrays import vbo
34 from OpenGL.GL import shaders
35
36 import pygame
37
38 import math, random
39 import numpy
40 from numpy import linalg
41
42 import pyassimp
43 from pyassimp.postprocess import *
44 from pyassimp.helper import *
45
46 class DefaultCamera:
47 def __init__(self, w, h, fov):
48 self.clipplanenear = 0.001
49 self.clipplanefar = 100000.0
50 self.aspect = w/h
51 self.horizontalfov = fov * math.pi/180
52 self.transformation = [[ 0.68, -0.32, 0.65, 7.48],
53 [ 0.73, 0.31, -0.61, -6.51],
54 [-0.01, 0.89, 0.44, 5.34],
55 [ 0., 0., 0., 1. ]]
56 self.lookat = [0.0,0.0,-1.0]
57
58 def __str__(self):
59 return "Default camera"
60
61 class PyAssimp3DViewer:
62
63 base_name = "PyASSIMP 3D viewer"
64
65 def __init__(self, model, w=1024, h=768, fov=75):
66
67 pygame.init()
68 pygame.display.set_caption(self.base_name)
69 pygame.display.set_mode((w,h), pygame.OPENGL | pygame.DOUBLEBUF)
70
71 self.prepare_shaders()
72
73 self.cameras = [DefaultCamera(w,h,fov)]
74 self.current_cam_index = 0
75
76 self.load_model(model)
77
78 # for FPS computation
79 self.frames = 0
80 self.last_fps_time = glutGet(GLUT_ELAPSED_TIME)
81
82
83 self.cycle_cameras()
84
85 def prepare_shaders(self):
86
87 phong_weightCalc = """
88 float phong_weightCalc(
89 in vec3 light_pos, // light position
90 in vec3 frag_normal // geometry normal
91 ) {
92 // returns vec2( ambientMult, diffuseMult )
93 float n_dot_pos = max( 0.0, dot(
94 frag_normal, light_pos
95 ));
96 return n_dot_pos;
97 }
98 """
99
100 vertex = shaders.compileShader( phong_weightCalc +
101 """
102 uniform vec4 Global_ambient;
103 uniform vec4 Light_ambient;
104 uniform vec4 Light_diffuse;
105 uniform vec3 Light_location;
106 uniform vec4 Material_ambient;
107 uniform vec4 Material_diffuse;
108 attribute vec3 Vertex_position;
109 attribute vec3 Vertex_normal;
110 varying vec4 baseColor;
111 void main() {
112 gl_Position = gl_ModelViewProjectionMatrix * vec4(
113 Vertex_position, 1.0
114 );
115 vec3 EC_Light_location = gl_NormalMatrix * Light_location;
116 float diffuse_weight = phong_weightCalc(
117 normalize(EC_Light_location),
118 normalize(gl_NormalMatrix * Vertex_normal)
119 );
120 baseColor = clamp(
121 (
122 // global component
123 (Global_ambient * Material_ambient)
124 // material's interaction with light's contribution
125 // to the ambient lighting...
126 + (Light_ambient * Material_ambient)
127 // material's interaction with the direct light from
128 // the light.
129 + (Light_diffuse * Material_diffuse * diffuse_weight)
130 ), 0.0, 1.0);
131 }""", GL_VERTEX_SHADER)
132
133 fragment = shaders.compileShader("""
134 varying vec4 baseColor;
135 void main() {
136 gl_FragColor = baseColor;
137 }
138 """, GL_FRAGMENT_SHADER)
139
140 self.shader = shaders.compileProgram(vertex,fragment)
141 self.set_shader_accessors( (
142 'Global_ambient',
143 'Light_ambient','Light_diffuse','Light_location',
144 'Material_ambient','Material_diffuse',
145 ), (
146 'Vertex_position','Vertex_normal',
147 ), self.shader)
148
149 def set_shader_accessors(self, uniforms, attributes, shader):
150 # add accessors to the shaders uniforms and attributes
151 for uniform in uniforms:
152 location = glGetUniformLocation( shader, uniform )
153 if location in (None,-1):
154 logger.warning('No uniform: %s'%( uniform ))
155 setattr( shader, uniform, location )
156
157 for attribute in attributes:
158 location = glGetAttribLocation( shader, attribute )
159 if location in (None,-1):
160 logger.warning('No attribute: %s'%( attribute ))
161 setattr( shader, attribute, location )
162
163
164 def prepare_gl_buffers(self, mesh):
165
166 mesh.gl = {}
167
168 # Fill the buffer for vertex and normals positions
169 v = numpy.array(mesh.vertices, 'f')
170 n = numpy.array(mesh.normals, 'f')
171
172 mesh.gl["vbo"] = vbo.VBO(numpy.hstack((v,n)))
173
174 # Fill the buffer for vertex positions
175 mesh.gl["faces"] = glGenBuffers(1)
176 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mesh.gl["faces"])
177 glBufferData(GL_ELEMENT_ARRAY_BUFFER,
178 mesh.faces,
179 GL_STATIC_DRAW)
180 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0)
181
182
183 def load_model(self, path, postprocess = aiProcessPreset_TargetRealtime_MaxQuality):
184 logger.info("Loading model:" + path + "...")
185
186 if postprocess:
187 self.scene = pyassimp.load(path, postprocess)
188 else:
189 self.scene = pyassimp.load(path)
190 logger.info("Done.")
191
192 scene = self.scene
193 #log some statistics
194 logger.info(" meshes: %d" % len(scene.meshes))
195 logger.info(" total faces: %d" % sum([len(mesh.faces) for mesh in scene.meshes]))
196 logger.info(" materials: %d" % len(scene.materials))
197 self.bb_min, self.bb_max = get_bounding_box(self.scene)
198 logger.info(" bounding box:" + str(self.bb_min) + " - " + str(self.bb_max))
199
200 self.scene_center = [(a + b) / 2. for a, b in zip(self.bb_min, self.bb_max)]
201
202 for index, mesh in enumerate(scene.meshes):
203 self.prepare_gl_buffers(mesh)
204
205 # Finally release the model
206 pyassimp.release(scene)
207
208 logger.info("Ready for 3D rendering!")
209
210 def cycle_cameras(self):
211 if not self.cameras:
212 logger.info("No camera in the scene")
213 return None
214 self.current_cam_index = (self.current_cam_index + 1) % len(self.cameras)
215 self.current_cam = self.cameras[self.current_cam_index]
216 self.set_camera(self.current_cam)
217 logger.info("Switched to camera <%s>" % self.current_cam)
218
219 def set_camera_projection(self, camera = None):
220
221 if not camera:
222 camera = self.cameras[self.current_cam_index]
223
224 znear = camera.clipplanenear
225 zfar = camera.clipplanefar
226 aspect = camera.aspect
227 fov = camera.horizontalfov
228
229 glMatrixMode(GL_PROJECTION)
230 glLoadIdentity()
231
232 # Compute gl frustrum
233 tangent = math.tan(fov/2.)
234 h = znear * tangent
235 w = h * aspect
236
237 # params: left, right, bottom, top, near, far
238 glFrustum(-w, w, -h, h, znear, zfar)
239 # equivalent to:
240 #gluPerspective(fov * 180/math.pi, aspect, znear, zfar)
241 glMatrixMode(GL_MODELVIEW)
242 glLoadIdentity()
243
244
245 def set_camera(self, camera):
246
247 self.set_camera_projection(camera)
248
249 glMatrixMode(GL_MODELVIEW)
250 glLoadIdentity()
251
252 cam = transform([0.0, 0.0, 0.0], camera.transformation)
253 at = transform(camera.lookat, camera.transformation)
254 gluLookAt(cam[0], cam[2], -cam[1],
255 at[0], at[2], -at[1],
256 0, 1, 0)
257
258 def render(self, wireframe = False, twosided = False):
259
260 glEnable(GL_DEPTH_TEST)
261 glDepthFunc(GL_LEQUAL)
262
263
264 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE if wireframe else GL_FILL)
265 glDisable(GL_CULL_FACE) if twosided else glEnable(GL_CULL_FACE)
266
267 shader = self.shader
268
269 glUseProgram(shader)
270 glUniform4f( shader.Global_ambient, .4,.2,.2,.1 )
271 glUniform4f( shader.Light_ambient, .4,.4,.4, 1.0 )
272 glUniform4f( shader.Light_diffuse, 1,1,1,1 )
273 glUniform3f( shader.Light_location, 2,2,10 )
274
275 self.recursive_render(self.scene.rootnode, shader)
276
277
278 glUseProgram( 0 )
279
280 def recursive_render(self, node, shader):
281 """ Main recursive rendering method.
282 """
283
284 # save model matrix and apply node transformation
285 glPushMatrix()
286 m = node.transformation.transpose() # OpenGL row major
287 glMultMatrixf(m)
288
289 for mesh in node.meshes:
290
291 stride = 24 # 6 * 4 bytes
292
293 diffuse = mesh.material.properties["diffuse"]
294 if len(diffuse) == 3: diffuse.append(1.0)
295 ambient = mesh.material.properties["ambient"]
296 if len(ambient) == 3: ambient.append(1.0)
297
298 glUniform4f( shader.Material_diffuse, *diffuse )
299 glUniform4f( shader.Material_ambient, *ambient )
300
301 vbo = mesh.gl["vbo"]
302 vbo.bind()
303
304 glEnableVertexAttribArray( shader.Vertex_position )
305 glEnableVertexAttribArray( shader.Vertex_normal )
306
307 glVertexAttribPointer(
308 shader.Vertex_position,
309 3, GL_FLOAT,False, stride, vbo
310 )
311
312 glVertexAttribPointer(
313 shader.Vertex_normal,
314 3, GL_FLOAT,False, stride, vbo+12
315 )
316
317 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mesh.gl["faces"])
318 glDrawElements(GL_TRIANGLES, len(mesh.faces) * 3, GL_UNSIGNED_INT, None)
319
320
321 vbo.unbind()
322 glDisableVertexAttribArray( shader.Vertex_position )
323
324 glDisableVertexAttribArray( shader.Vertex_normal )
325
326
327 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)
328
329 for child in node.children:
330 self.recursive_render(child, shader)
331
332 glPopMatrix()
333
334
335 def loop(self):
336
337 pygame.display.flip()
338 pygame.event.pump()
339 self.keys = [k for k, pressed in enumerate(pygame.key.get_pressed()) if pressed]
340
341 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
342
343 # Compute FPS
344 gl_time = glutGet(GLUT_ELAPSED_TIME)
345 self.frames += 1
346 if gl_time - self.last_fps_time >= 1000:
347 current_fps = self.frames * 1000 / (gl_time - self.last_fps_time)
348 pygame.display.set_caption(self.base_name + " - %.0f fps" % current_fps)
349 self.frames = 0
350 self.last_fps_time = gl_time
351
352
353 return True
354
355 def controls_3d(self,
356 mouse_button=1, \
357 up_key=pygame.K_UP, \
358 down_key=pygame.K_DOWN, \
359 left_key=pygame.K_LEFT, \
360 right_key=pygame.K_RIGHT):
361 """ The actual camera setting cycle """
362 mouse_dx,mouse_dy = pygame.mouse.get_rel()
363 if pygame.mouse.get_pressed()[mouse_button]:
364 look_speed = .2
365 buffer = glGetDoublev(GL_MODELVIEW_MATRIX)
366 c = (-1 * numpy.mat(buffer[:3,:3]) * \
367 numpy.mat(buffer[3,:3]).T).reshape(3,1)
368 # c is camera center in absolute coordinates,
369 # we need to move it back to (0,0,0)
370 # before rotating the camera
371 glTranslate(c[0],c[1],c[2])
372 m = buffer.flatten()
373 glRotate(mouse_dx * look_speed, m[1],m[5],m[9])
374 glRotate(mouse_dy * look_speed, m[0],m[4],m[8])
375
376 # compensate roll
377 glRotated(-math.atan2(-m[4],m[5]) * \
378 57.295779513082320876798154814105 ,m[2],m[6],m[10])
379 glTranslate(-c[0],-c[1],-c[2])
380
381 # move forward-back or right-left
382 if up_key in self.keys:
383 fwd = .1
384 elif down_key in self.keys:
385 fwd = -.1
386 else:
387 fwd = 0
388
389 if left_key in self.keys:
390 strafe = .1
391 elif right_key in self.keys:
392 strafe = -.1
393 else:
394 strafe = 0
395
396 if abs(fwd) or abs(strafe):
397 m = glGetDoublev(GL_MODELVIEW_MATRIX).flatten()
398 glTranslate(fwd*m[2],fwd*m[6],fwd*m[10])
399 glTranslate(strafe*m[0],strafe*m[4],strafe*m[8])
400
401 if __name__ == '__main__':
402 if not len(sys.argv) > 1:
403 print("Usage: " + __file__ + " <model>")
404 sys.exit(2)
405
406 app = PyAssimp3DViewer(model = sys.argv[1], w = 1024, h = 768, fov = 75)
407
408 while app.loop():
409 app.render()
410 app.controls_3d(0)
411 if pygame.K_f in app.keys: pygame.display.toggle_fullscreen()
412 if pygame.K_TAB in app.keys: app.cycle_cameras()
413 if pygame.K_ESCAPE in app.keys:
414 break
0 pyassimp examples
1 =================
2
3 - `sample.py`: shows how to load a model with pyassimp, and display some statistics.
4 - `3d_viewer.py`: an OpenGL 3D viewer that requires shaders
5 - `fixed_pipeline_3d_viewer`: an OpenGL 3D viewer using the old fixed-pipeline.
6 Only for illustration example. Base new projects on `3d_viewer.py`.
7
8
9 Requirements for the 3D viewers:
10
11 - `pyopengl` (on Ubuntu/Debian, `sudo apt-get install python-opengl`)
12 - `pygame` (on Ubuntu/Debian, `sudo apt-get install python-pygame`)
0 #!/usr/bin/env python
1 #-*- coding: UTF-8 -*-
2
3 """ This program demonstrates the use of pyassimp to load and
4 render objects with OpenGL.
5
6 'c' cycles between cameras (if any available)
7 'q' to quit
8
9 This example mixes 'old' OpenGL fixed-function pipeline with
10 Vertex Buffer Objects.
11
12 Materials are supported but textures are currently ignored.
13
14 For a more advanced example (with shaders + keyboard/mouse
15 controls), check scripts/sdl_viewer.py
16
17 Author: Séverin Lemaignan, 2012
18
19 This sample is based on several sources, including:
20 - http://www.lighthouse3d.com/tutorials
21 - http://www.songho.ca/opengl/gl_transform.html
22 - http://code.activestate.com/recipes/325391/
23 - ASSIMP's C++ SimpleOpenGL viewer
24 """
25
26 import os, sys
27 from OpenGL.GLUT import *
28 from OpenGL.GLU import *
29 from OpenGL.GL import *
30
31 import logging;logger = logging.getLogger("pyassimp_opengl")
32 logging.basicConfig(level=logging.INFO)
33
34 import math
35 import numpy
36
37 import pyassimp
38 from pyassimp.postprocess import *
39 from pyassimp.helper import *
40
41
42 name = 'pyassimp OpenGL viewer'
43 height = 600
44 width = 900
45
46 class GLRenderer():
47 def __init__(self):
48
49 self.scene = None
50
51 self.using_fixed_cam = False
52 self.current_cam_index = 0
53
54 # store the global scene rotation
55 self.angle = 0.
56
57 # for FPS calculation
58 self.prev_time = 0
59 self.prev_fps_time = 0
60 self.frames = 0
61
62 def prepare_gl_buffers(self, mesh):
63 """ Creates 3 buffer objets for each mesh,
64 to store the vertices, the normals, and the faces
65 indices.
66 """
67
68 mesh.gl = {}
69
70 # Fill the buffer for vertex positions
71 mesh.gl["vertices"] = glGenBuffers(1)
72 glBindBuffer(GL_ARRAY_BUFFER, mesh.gl["vertices"])
73 glBufferData(GL_ARRAY_BUFFER,
74 mesh.vertices,
75 GL_STATIC_DRAW)
76
77 # Fill the buffer for normals
78 mesh.gl["normals"] = glGenBuffers(1)
79 glBindBuffer(GL_ARRAY_BUFFER, mesh.gl["normals"])
80 glBufferData(GL_ARRAY_BUFFER,
81 mesh.normals,
82 GL_STATIC_DRAW)
83
84
85 # Fill the buffer for vertex positions
86 mesh.gl["triangles"] = glGenBuffers(1)
87 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mesh.gl["triangles"])
88 glBufferData(GL_ELEMENT_ARRAY_BUFFER,
89 mesh.faces,
90 GL_STATIC_DRAW)
91
92 # Unbind buffers
93 glBindBuffer(GL_ARRAY_BUFFER,0)
94 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0)
95
96 def load_model(self, path, postprocess = None):
97 logger.info("Loading model:" + path + "...")
98
99 if postprocess:
100 self.scene = pyassimp.load(path, postprocess)
101 else:
102 self.scene = pyassimp.load(path)
103 logger.info("Done.")
104
105 scene = self.scene
106 #log some statistics
107 logger.info(" meshes: %d" % len(scene.meshes))
108 logger.info(" total faces: %d" % sum([len(mesh.faces) for mesh in scene.meshes]))
109 logger.info(" materials: %d" % len(scene.materials))
110 self.bb_min, self.bb_max = get_bounding_box(self.scene)
111 logger.info(" bounding box:" + str(self.bb_min) + " - " + str(self.bb_max))
112
113 self.scene_center = [(a + b) / 2. for a, b in zip(self.bb_min, self.bb_max)]
114
115 for index, mesh in enumerate(scene.meshes):
116 self.prepare_gl_buffers(mesh)
117
118 # Finally release the model
119 pyassimp.release(scene)
120
121 def cycle_cameras(self):
122 self.current_cam_index
123 if not self.scene.cameras:
124 return None
125 self.current_cam_index = (self.current_cam_index + 1) % len(self.scene.cameras)
126 cam = self.scene.cameras[self.current_cam_index]
127 logger.info("Switched to camera " + str(cam))
128 return cam
129
130 def set_default_camera(self):
131
132 if not self.using_fixed_cam:
133 glLoadIdentity()
134
135 gluLookAt(0.,0.,3.,
136 0.,0.,-5.,
137 0.,1.,0.)
138
139
140
141 def set_camera(self, camera):
142
143 if not camera:
144 return
145
146 self.using_fixed_cam = True
147
148 znear = camera.clipplanenear
149 zfar = camera.clipplanefar
150 aspect = camera.aspect
151 fov = camera.horizontalfov
152
153 glMatrixMode(GL_PROJECTION)
154 glLoadIdentity()
155
156 # Compute gl frustrum
157 tangent = math.tan(fov/2.)
158 h = znear * tangent
159 w = h * aspect
160
161 # params: left, right, bottom, top, near, far
162 glFrustum(-w, w, -h, h, znear, zfar)
163 # equivalent to:
164 #gluPerspective(fov * 180/math.pi, aspect, znear, zfar)
165
166 glMatrixMode(GL_MODELVIEW)
167 glLoadIdentity()
168
169 cam = transform(camera.position, camera.transformation)
170 at = transform(camera.lookat, camera.transformation)
171 gluLookAt(cam[0], cam[2], -cam[1],
172 at[0], at[2], -at[1],
173 0, 1, 0)
174
175 def fit_scene(self, restore = False):
176 """ Compute a scale factor and a translation to fit and center
177 the whole geometry on the screen.
178 """
179
180 x_max = self.bb_max[0] - self.bb_min[0]
181 y_max = self.bb_max[1] - self.bb_min[1]
182 tmp = max(x_max, y_max)
183 z_max = self.bb_max[2] - self.bb_min[2]
184 tmp = max(z_max, tmp)
185
186 if not restore:
187 tmp = 1. / tmp
188
189 logger.info("Scaling the scene by %.03f" % tmp)
190 glScalef(tmp, tmp, tmp)
191
192 # center the model
193 direction = -1 if not restore else 1
194 glTranslatef( direction * self.scene_center[0],
195 direction * self.scene_center[1],
196 direction * self.scene_center[2] )
197
198 return x_max, y_max, z_max
199
200 def apply_material(self, mat):
201 """ Apply an OpenGL, using one OpenGL display list per material to cache
202 the operation.
203 """
204
205 if not hasattr(mat, "gl_mat"): # evaluate once the mat properties, and cache the values in a glDisplayList.
206 diffuse = numpy.array(mat.properties.get("diffuse", [0.8, 0.8, 0.8, 1.0]))
207 specular = numpy.array(mat.properties.get("specular", [0., 0., 0., 1.0]))
208 ambient = numpy.array(mat.properties.get("ambient", [0.2, 0.2, 0.2, 1.0]))
209 emissive = numpy.array(mat.properties.get("emissive", [0., 0., 0., 1.0]))
210 shininess = min(mat.properties.get("shininess", 1.0), 128)
211 wireframe = mat.properties.get("wireframe", 0)
212 twosided = mat.properties.get("twosided", 1)
213
214 setattr(mat, "gl_mat", glGenLists(1))
215 glNewList(mat.gl_mat, GL_COMPILE)
216
217 glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, diffuse)
218 glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular)
219 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, ambient)
220 glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, emissive)
221 glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess)
222 glPolygonMode(GL_FRONT_AND_BACK, GL_LINE if wireframe else GL_FILL)
223 glDisable(GL_CULL_FACE) if twosided else glEnable(GL_CULL_FACE)
224
225 glEndList()
226
227 glCallList(mat.gl_mat)
228
229
230
231 def do_motion(self):
232
233 gl_time = glutGet(GLUT_ELAPSED_TIME)
234
235 self.angle = (gl_time - self.prev_time) * 0.1
236
237 self.prev_time = gl_time
238
239 # Compute FPS
240 self.frames += 1
241 if gl_time - self.prev_fps_time >= 1000:
242 current_fps = self.frames * 1000 / (gl_time - self.prev_fps_time)
243 logger.info('%.0f fps' % current_fps)
244 self.frames = 0
245 self.prev_fps_time = gl_time
246
247 glutPostRedisplay()
248
249 def recursive_render(self, node):
250 """ Main recursive rendering method.
251 """
252
253 # save model matrix and apply node transformation
254 glPushMatrix()
255 m = node.transformation.transpose() # OpenGL row major
256 glMultMatrixf(m)
257
258 for mesh in node.meshes:
259 self.apply_material(mesh.material)
260
261 glBindBuffer(GL_ARRAY_BUFFER, mesh.gl["vertices"])
262 glEnableClientState(GL_VERTEX_ARRAY)
263 glVertexPointer(3, GL_FLOAT, 0, None)
264
265 glBindBuffer(GL_ARRAY_BUFFER, mesh.gl["normals"])
266 glEnableClientState(GL_NORMAL_ARRAY)
267 glNormalPointer(GL_FLOAT, 0, None)
268
269 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mesh.gl["triangles"])
270 glDrawElements(GL_TRIANGLES,len(mesh.faces) * 3, GL_UNSIGNED_INT, None)
271
272 glDisableClientState(GL_VERTEX_ARRAY)
273 glDisableClientState(GL_NORMAL_ARRAY)
274
275 glBindBuffer(GL_ARRAY_BUFFER, 0)
276 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)
277
278 for child in node.children:
279 self.recursive_render(child)
280
281 glPopMatrix()
282
283
284 def display(self):
285 """ GLUT callback to redraw OpenGL surface
286 """
287 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
288
289 glRotatef(self.angle,0.,1.,0.)
290 self.recursive_render(self.scene.rootnode)
291
292 glutSwapBuffers()
293 self.do_motion()
294 return
295
296 ####################################################################
297 ## GLUT keyboard and mouse callbacks ##
298 ####################################################################
299 def onkeypress(self, key, x, y):
300 if key == 'c':
301 self.fit_scene(restore = True)
302 self.set_camera(self.cycle_cameras())
303 if key == 'q':
304 sys.exit(0)
305
306 def render(self, filename=None, fullscreen = False, autofit = True, postprocess = None):
307 """
308
309 :param autofit: if true, scale the scene to fit the whole geometry
310 in the viewport.
311 """
312
313 # First initialize the openGL context
314 glutInit(sys.argv)
315 glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH)
316 if not fullscreen:
317 glutInitWindowSize(width, height)
318 glutCreateWindow(name)
319 else:
320 glutGameModeString("1024x768")
321 if glutGameModeGet(GLUT_GAME_MODE_POSSIBLE):
322 glutEnterGameMode()
323 else:
324 print("Fullscreen mode not available!")
325 sys.exit(1)
326
327 self.load_model(filename, postprocess = postprocess)
328
329
330 glClearColor(0.1,0.1,0.1,1.)
331 #glShadeModel(GL_SMOOTH)
332
333 glEnable(GL_LIGHTING)
334
335 glEnable(GL_CULL_FACE)
336 glEnable(GL_DEPTH_TEST)
337
338 glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, GL_TRUE)
339 glEnable(GL_NORMALIZE)
340 glEnable(GL_LIGHT0)
341
342 glutDisplayFunc(self.display)
343
344
345 glMatrixMode(GL_PROJECTION)
346 glLoadIdentity()
347 gluPerspective(35.0, width/float(height) , 0.10, 100.0)
348 glMatrixMode(GL_MODELVIEW)
349 self.set_default_camera()
350
351 if autofit:
352 # scale the whole asset to fit into our view frustum·
353 self.fit_scene()
354
355 glPushMatrix()
356
357 glutKeyboardFunc(self.onkeypress)
358 glutIgnoreKeyRepeat(1)
359
360 glutMainLoop()
361
362
363 if __name__ == '__main__':
364 if not len(sys.argv) > 1:
365 print("Usage: " + __file__ + " <model>")
366 sys.exit(0)
367
368 glrender = GLRenderer()
369 glrender.render(sys.argv[1], fullscreen = False, postprocess = aiProcessPreset_TargetRealtime_MaxQuality)
370
0 #!/usr/bin/env python
1 #-*- coding: UTF-8 -*-
2
3 """
4 This module uses the sample.py script to load all test models it finds.
5
6 Note: this is not an exhaustive test suite, it does not check the
7 data structures in detail. It just verifies whether basic
8 loading and querying of 3d models using pyassimp works.
9 """
10
11
12 import sys,os
13 import sample
14 from pyassimp import errors
15
16 # paths to be walkd recursively
17 basepaths = [os.path.join('..','..','..','test','models'), os.path.join('..','..','..','test','models-nonbsd')]
18
19 # file extensions to be considered
20 extensions = ['.3ds','.x','.lwo','.obj','.md5mesh','.dxf','.ply','.stl','.dae','.md5anim','.lws','.irrmesh','.nff','.off','.blend']
21
22 def run_tests():
23 ok,err = 0,0
24 for path in basepaths:
25 print("Looking for models in %s..." % path)
26 for root, dirs, files in os.walk(path):
27 for afile in files:
28 base,ext = os.path.splitext(afile)
29 if ext in extensions:
30 try:
31 sample.main(os.path.join(root,afile))
32 ok += 1
33 except errors.AssimpError as error:
34 # assimp error is fine, this is a controlled case
35 print error
36 err += 1
37 except Exception:
38 print("Error encountered while loading <%s>"%os.path.join(root,afile))
39 print('** Loaded %s models, got controlled errors for %s files' % (ok,err))
40
41
42 if __name__ == '__main__':
43 run_tests()
44
45
46
47
0 #!/usr/bin/env python
1 #-*- coding: UTF-8 -*-
2
3 """
4 This module demonstrates the functionality of PyAssimp.
5 """
6
7 import os, sys
8 import logging
9 logging.basicConfig(level=logging.INFO)
10
11 import pyassimp
12 import pyassimp.postprocess
13
14 def recur_node(node,level = 0):
15 print(" " + "\t" * level + "- " + str(node))
16 for child in node.children:
17 recur_node(child, level + 1)
18
19
20 def main(filename=None):
21
22 scene = pyassimp.load(filename, pyassimp.postprocess.aiProcess_Triangulate)
23
24 #the model we load
25 print("MODEL:" + filename)
26 print
27
28 #write some statistics
29 print("SCENE:")
30 print(" meshes:" + str(len(scene.meshes)))
31 print(" materials:" + str(len(scene.materials)))
32 print(" textures:" + str(len(scene.textures)))
33 print
34
35 print("NODES:")
36 recur_node(scene.rootnode)
37
38 print
39 print("MESHES:")
40 for index, mesh in enumerate(scene.meshes):
41 print(" MESH" + str(index+1))
42 print(" material id:" + str(mesh.materialindex+1))
43 print(" vertices:" + str(len(mesh.vertices)))
44 print(" first 3 verts:\n" + str(mesh.vertices[:3]))
45 if mesh.normals.any():
46 print(" first 3 normals:\n" + str(mesh.normals[:3]))
47 else:
48 print(" no normals")
49 print(" colors:" + str(len(mesh.colors)))
50 tcs = mesh.texturecoords
51 if tcs.any():
52 for index, tc in enumerate(tcs):
53 print(" texture-coords "+ str(index) + ":" + str(len(tcs[index])) + "first3:" + str(tcs[index][:3]))
54
55 else:
56 print(" no texture coordinates")
57 print(" uv-component-count:" + str(len(mesh.numuvcomponents)))
58 print(" faces:" + str(len(mesh.faces)) + " -> first:\n" + str(mesh.faces[:3]))
59 print(" bones:" + str(len(mesh.bones)) + " -> first:" + str([str(b) for b in mesh.bones[:3]]))
60 print
61
62 print("MATERIALS:")
63 for index, material in enumerate(scene.materials):
64 print(" MATERIAL (id:" + str(index+1) + ")")
65 for key, value in material.properties.items():
66 print(" %s: %s" % (key, value))
67 print
68
69 print("TEXTURES:")
70 for index, texture in enumerate(scene.textures):
71 print(" TEXTURE" + str(index+1))
72 print(" width:" + str(texture.width))
73 print(" height:" + str(texture.height))
74 print(" hint:" + str(texture.achformathint))
75 print(" data (size):" + str(len(texture.data)))
76
77 # Finally release the model
78 pyassimp.release(scene)
79
80 def usage():
81 print("Usage: sample.py <3d model>")
82
83 if __name__ == "__main__":
84
85 if len(sys.argv) != 2:
86 usage()
87 else:
88 main(sys.argv[1])
0 # -*- coding: utf-8 -*-
1 import os
2 from distutils.core import setup
3
4 setup(name='pyassimp',
5 version='0.1',
6 license='ISC',
7 description='Python bindings for the Open Asset Import Library (ASSIMP)',
8 url='http://assimp.sourceforge.net/',
9 packages=['pyassimp'],
10 data_files=[('share/pyassimp', ['README.md']),
11 ('share/examples/pyassimp', ['scripts/' + f for f in os.listdir('scripts/')])]
12 )
+0
-65
port/PyAssimp3/README less more
0 PyAssimp3 Readme
1 ---------------
2
3
4 -- a simple Python3 wrapper for Assimp using ctypes to access
5 the library. Works with Python 3 upwards.
6
7
8 Note that pyassimp is by no means considered mature. It works,
9 but it is far away from wrapping Assimp perfectly.
10
11
12 USAGE
13 =====
14
15 To get started with pyAssimp, examine the sample.py script, which
16 illustrates the basic usage. All Assimp data structures are
17 wrapped using ctypes. All the data+length fields in Assimp's
18 data structures (such as 'aiMesh::mNumVertices','aiMesh::mVertices')
19 are replaced by simple python lists, so you can call len() on
20 them to get their respective size and access members using
21 [].
22
23 For example, to load a file named 'hello.3ds' and print the first
24 vertex of the first mesh, you would do (proper error handling
25 substituted by assertions ...):
26
27 > from pyassimp import pyassimp, errors
28 >
29 > try:
30 > scene = pyassimp.load('hello.3ds')
31 > except AssimpError, msg:
32 > print(msg)
33 > return
34
35 > assert len(scene.meshes)
36 > mesh = scene.meshes[0]
37
38 > assert len(mesh.vertices)
39 > print(mesh.vertices[0])
40
41 > # don't forget this one, or you will leak!
42 > pyassimp.release(scene)
43
44
45 INSTALL
46 =======
47
48 PyAssimp requires a assimp dynamic library (DLL on windows,
49 so on linux :-) in order to work. The default search directories
50 are:
51
52 - the current directory
53 - on linux additionally: /usr/local/lib
54
55 To build that library, refer to the Assimp master INSTALL
56 instructions. To look in more places, edit ./pyassimp/helper.py.
57 There's an 'additional_dirs' list waiting for your entries.
58
59
60
61
62
63
64
+0
-1
port/PyAssimp3/pyassimp/__init__.py less more
0 #-*- coding: UTF-8 -*-
+0
-11
port/PyAssimp3/pyassimp/errors.py less more
0 #-*- coding: UTF-8 -*-
1
2 """
3 All possible errors.
4 """
5
6 class AssimpError(BaseException):
7 """
8 If an internal error occures.
9 """
10 pass
+0
-119
port/PyAssimp3/pyassimp/helper.py less more
0 #-*- coding: UTF-8 -*-
1
2 """
3 Some fancy helper functions.
4 """
5
6 import os, sys
7 import ctypes
8 from . import structs
9 import operator
10
11 from .errors import AssimpError
12 from ctypes import POINTER
13
14 additional_dirs, ext_whitelist = [],[]
15
16 # populate search directories and lists of allowed file extensions
17 # depending on the platform we're running on.
18 if os.name=='posix':
19 additional_dirs.append('/usr/local/lib/')
20
21 if sys.platform.lower() == 'darwin':
22 ext_whitelist.append('.dylib')
23
24 # note - this won't catch libassimp.so.N.n, but
25 # currently there's always a symlink called
26 # libassimp.so in /usr/local/lib.
27 ext_whitelist.append('.so')
28
29 elif os.name=='nt':
30 ext_whitelist.append('.dll')
31
32 def vec2tuple(x):
33 """ Converts a VECTOR3D to a Tuple """
34 return (x.x, x.y, x.z)
35
36
37 def try_load_functions(library,dll,candidates):
38 """try to functbind to aiImportFile and aiReleaseImport
39
40 library - path to current lib
41 dll - ctypes handle to it
42 candidates - receives matching candidates
43
44 They serve as signal functions to detect assimp,
45 also they're currently the only functions we need.
46 insert (library,aiImportFile,aiReleaseImport,dll)
47 into 'candidates' if successful.
48
49 """
50 try:
51 load = dll.aiImportFile
52 release = dll.aiReleaseImport
53 except AttributeError:
54 #OK, this is a library, but it has not the functions we need
55 pass
56 else:
57 #Library found!
58 load.restype = POINTER(structs.Scene)
59 candidates.append((library, load, release, dll))
60
61
62 def search_library():
63 """Loads the assimp-Library.
64
65 result (load-function, release-function)
66 exception AssimpError if no library is found
67
68 """
69 #this path
70 folder = os.path.dirname(__file__)
71
72 # silence 'DLL not found' message boxes on win
73 try:
74 ctypes.windll.kernel32.SetErrorMode(0x8007)
75 except AttributeError:
76 pass
77
78 candidates = []
79
80 # test every file
81 for curfolder in [folder]+additional_dirs:
82 for filename in os.listdir(curfolder):
83 # our minimum requirement for candidates is that
84 # they should contain 'assimp' somewhere in
85 # their name
86 if filename.lower().find('assimp')==-1 or\
87 os.path.splitext(filename)[-1].lower() not in ext_whitelist:
88 continue
89
90 library = os.path.join(curfolder, filename)
91 print('PyAssimp3: trying ',library)
92 try:
93 dll = ctypes.cdll.LoadLibrary(library)
94 except:
95 # OK, this except is evil. But different OSs will throw different
96 # errors. So just ignore any errors.
97 continue
98
99 try_load_functions(library,dll,candidates)
100
101 if not candidates:
102 # no library found
103 raise AssimpError("assimp library not found")
104 else:
105 # get the newest library
106 candidates = [(os.lstat(x[0])[-2], x) for x in candidates]
107 res = max(candidates, key=operator.itemgetter(0))[1]
108 print('PyAssimp3: taking ',res[0])
109
110 # XXX: if there are 1000 dll/so files containing 'assimp'
111 # in their name, do we have all of them in our address
112 # space now until gc kicks in?
113
114 # XXX: take version postfix of the .so on linux?
115 return res[1:]
116
117
118
+0
-314
port/PyAssimp3/pyassimp/pyassimp.py less more
0 #-*- coding: UTF-8 -*-
1
2 """
3 PyAssimp
4
5 This is the main-module of PyAssimp.
6 """
7
8 import sys
9 if sys.version_info < (3,0):
10 raise Exception('pyassimp: need python 3.0 or newer')
11
12 from . import structs
13 import ctypes
14 import os
15 from . import helper
16 from .errors import AssimpError
17
18 class aiArray:
19 """
20 A python class to 'safely' access C arrays.
21 For m<Name> and mNum<Name> assimp class members.
22 """
23 def __init__(self, instance, dataName, sizeName, i=None):
24 self.instance = instance
25 self.dataName = dataName
26 self.sizeName = sizeName
27 self.i = i
28 self.count = 0
29
30 def _GetSize(self):
31 return getattr(self.instance, self.sizeName)
32
33 def _GetData(self, index):
34 if self.i != None:
35 if not bool(getattr(self.instance, self.dataName)[self.i]):
36 return None
37 item = getattr(self.instance, self.dataName)[self.i][index]
38 else:
39 item = getattr(self.instance, self.dataName)[index]
40 if hasattr(item, 'contents'):
41 return item.contents._init()
42 elif hasattr(item, '_init'):
43 return item._init()
44 else:
45 return item
46
47 def __next__(self):
48 if self.count >= self._GetSize():
49 self.count = 0
50 raise StopIteration
51 else:
52 c = self.count
53 self.count += 1
54 return self._GetData(c)
55
56 def __getitem__(self, index):
57 if isinstance(index, slice):
58 indices = index.indices(len(self))
59 return [self.__getitem__(i) for i in range(*indices)]
60
61 if index < 0 or index >= self._GetSize():
62 raise IndexError("aiArray index out of range")
63 return self._GetData(index)
64
65 def __iter__(self):
66 return self
67
68 def __len__(self):
69 return int(self._GetSize())
70
71 def __str__(self):
72 return str([x for x in self])
73
74 def __repr__(self):
75 return str([x for x in self])
76
77 class aiTuple:
78 """
79 A python class to 'safely' access C structs in a python tuple fashion.
80 For C structs like vectors, matrices, colors, ...
81 """
82 def __init__(self, instance):
83 self.instance = instance
84 self.count = 0
85
86 def _GetSize(self):
87 return len(self.instance._fields_)
88
89 def _GetData(self, index):
90 return getattr(self.instance, self.instance._fields_[index][0])
91
92 def __next__(self):
93 if self.count >= self._GetSize():
94 self.count = 0
95 raise StopIteration
96 else:
97 c = self.count
98 self.count += 1
99 return self._GetData(c)
100
101 def __getitem__(self, index):
102 if isinstance(index, slice):
103 indices = index.indices(len(self))
104 return [self.__getitem__(i) for i in range(*indices)]
105
106 if index < 0 or index >= self._GetSize():
107 raise IndexError("aiTuple index out of range")
108 return self._GetData(index)
109
110 def __iter__(self):
111 return self
112
113 def __len__(self):
114 return int(self._GetSize())
115
116 def __str__(self):
117 return str([x for x in self])
118
119 def __repr__(self):
120 return str([x for x in self])
121
122 class StringUInt32(ctypes.Structure):
123 """
124 A ctypes structure used for material strings.
125 This is a workaround for a type mismatch for the length field between strings used for materials and elsewhere.
126 """
127
128 MAXLEN = 1024
129
130 _fields_ = [
131 ("length", ctypes.c_uint32),
132 ("data", ctypes.c_char*MAXLEN),
133 ]
134
135 def _init(self):
136 """
137 Custom initialize() for C structs, adds safely accessable member functionality.
138 """
139 if hasattr(self, '_is_init'):
140 return self
141 self._is_init = True
142
143 if str(self.__class__.__name__) == "MaterialProperty":
144 self.mKey._init()
145
146 for m in list(self.__class__.__dict__.keys()):
147 if m.startswith('mNum'):
148 name = m.split('mNum')[1]
149 if 'm'+name in list(self.__class__.__dict__.keys()):
150 setattr(self.__class__, name.lower(), aiArray(self, 'm'+name , m))
151 if name.lower() == "vertices":
152 setattr(self.__class__, "normals", aiArray(self, 'mNormals' , m))
153 setattr(self.__class__, "tangents", aiArray(self, 'mTangents' , m))
154 setattr(self.__class__, "bitangets", aiArray(self, 'mBitangents' , m))
155 setattr(self.__class__, "colors", [aiArray(self, 'mColors' , m, o) for o in range(len(self.mColors))])
156 setattr(self.__class__, "texcoords", [aiArray(self, 'mTextureCoords' , m, o) for o in range(len(self.mColors))])
157
158 elif m == "x" or m == "a1" or m == "b": # Vector, matrix, quat, color
159 self._tuple = aiTuple(self)
160 setattr(self.__class__, '__getitem__', lambda x, y: x._tuple.__getitem__(y))
161 setattr(self.__class__, '__iter__', lambda x: x._tuple)
162 setattr(self.__class__, 'next', lambda x: x._tuple.__next__)
163 setattr(self.__class__, '__repr__', lambda x: str([c for c in x]))
164 break
165 elif m == "data": #String
166 setattr(self.__class__, '__repr__', lambda x: str(x.data))
167 setattr(self.__class__, '__str__', lambda x: str(x.data))
168 break
169
170 if hasattr(getattr(self, m), '_init'):
171 getattr(self, m)._init()
172
173 return self
174
175 """
176 Python magic to add the _init() function to all C struct classes.
177 """
178 for struct in dir(structs):
179 if not (struct.startswith('_') or struct.startswith('c_') or struct == "Structure" or struct == "POINTER") and not isinstance(getattr(structs, struct),int):
180 setattr(getattr(structs, struct), '_init', _init)
181
182
183 class AssimpLib(object):
184 """
185 Assimp-Singleton
186 """
187 load, release, dll = helper.search_library()
188
189 #the loader as singleton
190 _assimp_lib = AssimpLib()
191
192
193 def load(filename, processing=0):
194 """
195 Loads the model with some specific processing parameters.
196
197 filename - file to load model from
198 processing - processing parameters
199
200 result Scene-object with model-data
201
202 throws AssimpError - could not open file
203 """
204 #read pure data
205 from ctypes import c_char_p, c_uint
206 model = _assimp_lib.load(c_char_p(filename), c_uint(processing))
207 if not model:
208 #Uhhh, something went wrong!
209 raise AssimpError("could not import file: %s" % filename)
210
211 return model.contents._init()
212
213 def release(scene):
214 from ctypes import pointer
215 _assimp_lib.release(pointer(scene))
216
217 def aiGetMaterialFloatArray(material, key):
218 AI_SUCCESS = 0
219 from ctypes import byref, pointer, cast, c_float, POINTER, sizeof, c_uint
220 out = structs.Color4D()
221 max = c_uint(sizeof(structs.Color4D))
222 r=_assimp_lib.dll.aiGetMaterialFloatArray(pointer(material),
223 key[0],
224 key[1],
225 key[2],
226 byref(out),
227 byref(max))
228
229 if (r != AI_SUCCESS):
230 raise AssimpError("aiGetMaterialFloatArray failed!")
231
232 out._init()
233 return [out[i] for i in range(max.value)]
234
235 def aiGetMaterialString(material, key):
236 AI_SUCCESS = 0
237 from ctypes import byref, pointer, cast, c_float, POINTER, sizeof, c_uint
238 out = structs.String()
239 r=_assimp_lib.dll.aiGetMaterialString(pointer(material),
240 key[0],
241 key[1],
242 key[2],
243 byref(out))
244
245 if (r != AI_SUCCESS):
246 raise AssimpError("aiGetMaterialString failed!")
247
248 return str(out.data)
249
250 def GetMaterialProperties(material):
251 """
252 Convenience Function to get the material properties.
253 This function returns the following tuple: (name, clr, mat, tex) where:
254 name: is the name of the material
255 clr: is a dictionary of color parameters
256 mat: is a dictionary of material parameters
257 tex: is a triply nested dictionary than can be indexed by index, semantic, and then key:
258 tex[index][semantic][key]
259 """
260 name = ""
261 clr = {}
262 mat = {}
263 tex = {}
264 #read all properties
265 for p in material.properties:
266 #the name
267 key = p.mKey.data
268
269 #the data
270 from ctypes import POINTER, cast, c_int, c_float, sizeof
271 if p.mType == 1:
272 arr = cast(p.mData, POINTER(c_float*(p.mDataLength//sizeof(c_float)) )).contents
273 value = [x for x in arr]
274 elif p.mType == 3: #string can't be an array
275 try:
276 value = cast(p.mData, POINTER(StringUInt32)).contents.data
277 except UnicodeDecodeError:
278 print('UnicodeDecodeError reading material property, ignoring.')
279 continue
280 elif p.mType == 4:
281 arr = cast(p.mData, POINTER(c_int*(p.mDataLength//sizeof(c_int)) )).contents
282 value = [x for x in arr]
283 else:
284 value = p.mData[:p.mDataLength]
285
286 #store in the appropriate dict
287 if key == b'?mat.name':
288 name = value
289 elif key[:5] == b'$mat.':
290 mat[key[5:]] = value
291 elif key[:5] == b'$clr.':
292 clr[key[5:]] = value
293 elif key[:5] == b'$tex.':
294 if p.mIndex not in tex:
295 tex[p.mIndex] = {}
296 if p.mSemantic not in tex[p.mIndex]:
297 tex[p.mIndex][p.mSemantic] = {}
298 tex[p.mIndex][p.mSemantic][key[5:]] = value
299
300 return (name, clr, mat, tex)
301
302
303 def aiDecomposeMatrix(matrix):
304 if not isinstance(matrix, structs.Matrix4x4):
305 raise AssimpError("aiDecomposeMatrix failed: Not a aiMatrix4x4!")
306
307 scaling = structs.Vector3D()
308 rotation = structs.Quaternion()
309 position = structs.Vector3D()
310
311 from ctypes import byref, pointer
312 _assimp_lib.dll.aiDecomposeMatrix(pointer(matrix), byref(scaling), byref(rotation), byref(position))
313 return scaling._init(), rotation._init(), position._init()
+0
-424
port/PyAssimp3/pyassimp/structs.py less more
0 #-*- coding: UTF-8 -*-
1
2 from ctypes import POINTER, c_int, c_uint, c_char, c_float, Structure, c_char_p, c_double, c_ubyte, c_size_t
3
4
5 class Vector2D(Structure):
6 """
7 See 'aiVector2D.h' for details.
8 """
9
10
11 _fields_ = [
12 ("x", c_float),("y", c_float),
13 ]
14
15 class Texel(Structure):
16 """
17 See 'aiTexture.h' for details.
18 """
19
20 _fields_ = [
21 ("b", c_ubyte),("g", c_ubyte),("r", c_ubyte),("a", c_ubyte),
22 ]
23
24 class Plane(Structure):
25 """
26 See 'aiTypes.h' for details.
27 """
28
29 _fields_ = [
30 # Plane equation
31 ("a", c_float),("b", c_float),("c", c_float),("d", c_float),
32 ]
33
34 class Color3D(Structure):
35 """
36 See 'aiTypes.h' for details.
37 """
38
39 _fields_ = [
40 # Red, green and blue color values
41 ("r", c_float),("g", c_float),("b", c_float),
42 ]
43
44 class String(Structure):
45 """
46 See 'aiTypes.h' for details.
47 """
48
49 MAXLEN = 1024
50
51 _fields_ = [
52 #Binary length of the string excluding the terminal 0. This is NOT the# logical length of strings containing UTF-8 multibyte sequences! It's# the number of bytes from the beginning of the string to its end.#
53 ("length", c_size_t),#String buffer. Size limit is MAXLEN#
54 ("data", c_char*MAXLEN),
55 ]
56
57 class MemoryInfo(Structure):
58 """
59 See 'aiTypes.h' for details.
60 """
61
62 _fields_ = [
63 #Storage allocated for texture data#
64 ("textures", c_uint),#Storage allocated for material data#
65 ("materials", c_uint),#Storage allocated for mesh data#
66 ("meshes", c_uint),#Storage allocated for node data#
67 ("nodes", c_uint),#Storage allocated for animation data#
68 ("animations", c_uint),#Storage allocated for camera data#
69 ("cameras", c_uint),#Storage allocated for light data#
70 ("lights", c_uint),#Total storage allocated for the full import.#
71 ("total", c_uint),
72 ]
73
74 class Matrix3x3(Structure):
75 """
76 See 'aiMatrix3x3.h' for details.
77 """
78
79
80 _fields_ = [
81 ("a1", c_float),("a2", c_float),("a3", c_float),
82 ("b1", c_float),("b2", c_float),("b3", c_float),
83 ("c1", c_float),("c2", c_float),("c3", c_float),
84 ]
85
86 class Color4D(Structure):
87 """
88 See 'aiColor4D.h' for details.
89 """
90
91
92 _fields_ = [
93 # Red, green, blue and alpha color values
94 ("r", c_float),("g", c_float),("b", c_float),("a", c_float),
95 ]
96
97 class ExportFormatDesc(Structure):
98 """
99 See 'export.h' for details.
100 """
101
102 _fields_ = [
103 # a short string ID to uniquely identify the export format. Use this ID string to# specify which file format you want to export to when calling aiExportScene().# Example: "dae" or "obj"
104 ("id", POINTER(c_char)),# A short description of the file format to present to users. Useful if you want# to allow the user to select an export format.
105 ("description", POINTER(c_char)),# Recommended file extension for the exported file in lower case.
106 ("fileExtension", POINTER(c_char)),
107 ]
108
109 class Quaternion(Structure):
110 """
111 See 'aiQuaternion.h' for details.
112 """
113
114
115 _fields_ = [
116 # w,x,y,z components of the quaternion
117 ("w", c_float),("x", c_float),("y", c_float),("z", c_float),
118 ]
119
120 class Vector3D(Structure):
121 """
122 See 'aiVector3D.h' for details.
123 """
124
125
126 _fields_ = [
127 ("x", c_float),("y", c_float),("z", c_float),
128 ]
129
130 class Face(Structure):
131 """
132 See 'aiMesh.h' for details.
133 """
134
135 _fields_ = [
136 # Number of indices defining this face.# The maximum value for this member is #AI_MAX_FACE_INDICES.
137 ("mNumIndices", c_uint),# Pointer to the indices array. Size of the array is given in numIndices.
138 ("mIndices", POINTER(c_uint)),
139 ]
140
141 class VertexWeight(Structure):
142 """
143 See 'aiMesh.h' for details.
144 """
145
146 _fields_ = [
147 # Index of the vertex which is influenced by the bone.
148 ("mVertexId", c_uint),# The strength of the influence in the range (0...1).# The influence from all bones at one vertex amounts to 1.
149 ("mWeight", c_float),
150 ]
151
152 class MeshKey(Structure):
153 """
154 See 'aiAnim.h' for details.
155 """
156
157 _fields_ = [
158 #The time of this key#
159 ("mTime", c_double),#Index into the aiMesh::mAnimMeshes array of the# mesh coresponding to the #aiMeshAnim hosting this# key frame. The referenced anim mesh is evaluated# according to the rules defined in the docs for #aiAnimMesh.#
160 ("mValue", c_uint),
161 ]
162
163 class Matrix4x4(Structure):
164 """
165 See 'aiMatrix4x4.h' for details.
166 """
167
168
169 _fields_ = [
170 ("a1", c_float),("a2", c_float),("a3", c_float),("a4", c_float),
171 ("b1", c_float),("b2", c_float),("b3", c_float),("b4", c_float),
172 ("c1", c_float),("c2", c_float),("c3", c_float),("c4", c_float),
173 ("d1", c_float),("d2", c_float),("d3", c_float),("d4", c_float),
174 ]
175
176 class Node(Structure):
177 """
178 See 'aiScene.h' for details.
179 """
180
181
182 Node._fields_ = [
183 #The name of the node.##The name might be empty (length of zero) but all nodes which#need to be accessed afterwards by bones or anims are usually named.#Multiple nodes may have the same name, but nodes which are accessed#by bones (see #aiBone and #aiMesh::mBones) *must* be unique.##Cameras and lights are assigned to a specific node name - if there#are multiple nodes with this name, they're assigned to each of them.#<br>#There are no limitations regarding the characters contained in#this text. You should be able to handle stuff like whitespace, tabs,#linefeeds, quotation marks, ampersands, ... .#
184 ("mName", String),#The transformation relative to the node's parent.#
185 ("mTransformation", Matrix4x4),#Parent node. NULL if this node is the root node.#
186 ("mParent", POINTER(Node)),#The number of child nodes of this node.#
187 ("mNumChildren", c_uint),#The child nodes of this node. NULL if mNumChildren is 0.#
188 ("mChildren", POINTER(POINTER(Node))),#The number of meshes of this node.#
189 ("mNumMeshes", c_uint),#The meshes of this node. Each entry is an index into the mesh#
190 ("mMeshes", POINTER(c_uint)),
191 ]
192
193 class Camera(Structure):
194 """
195 See 'aiCamera.h' for details.
196 """
197
198
199 _fields_ = [
200 #The name of the camera.## There must be a node in the scenegraph with the same name.# This node specifies the position of the camera in the scene# hierarchy and can be animated.#
201 ("mName", String),#Position of the camera relative to the coordinate space# defined by the corresponding node.## The default value is 0|0|0.#
202 ("mPosition", Vector3D),#'Up' - vector of the camera coordinate system relative to# the coordinate space defined by the corresponding node.## The 'right' vector of the camera coordinate system is# the cross product of the up and lookAt vectors.# The default value is 0|1|0. The vector# may be normalized, but it needn't.#
203 ("mUp", Vector3D),#'LookAt' - vector of the camera coordinate system relative to# the coordinate space defined by the corresponding node.## This is the viewing direction of the user.# The default value is 0|0|1. The vector# may be normalized, but it needn't.#
204 ("mLookAt", Vector3D),#Half horizontal field of view angle, in radians.## The field of view angle is the angle between the center# line of the screen and the left or right border.# The default value is 1/4PI.#
205 ("mHorizontalFOV", c_float),#Distance of the near clipping plane from the camera.##The value may not be 0.f (for arithmetic reasons to prevent#a division through zero). The default value is 0.1f.#
206 ("mClipPlaneNear", c_float),#Distance of the far clipping plane from the camera.##The far clipping plane must, of course, be further away than the#near clipping plane. The default value is 1000.f. The ratio#between the near and the far plane should not be too#large (between 1000-10000 should be ok) to avoid floating-point#inaccuracies which could lead to z-fighting.#
207 ("mClipPlaneFar", c_float),#Screen aspect ratio.##This is the ration between the width and the height of the#screen. Typical values are 4/3, 1/2 or 1/1. This value is#0 if the aspect ratio is not defined in the source file.#0 is also the default value.#
208 ("mAspect", c_float),
209 ]
210
211 class Texture(Structure):
212 """
213 See 'aiTexture.h' for details.
214 """
215
216
217 _fields_ = [
218 #Width of the texture, in pixels##If mHeight is zero the texture is compressed in a format#like JPEG. In this case mWidth specifies the size of the#memory area pcData is pointing to, in bytes.#
219 ("mWidth", c_uint),#Height of the texture, in pixels##If this value is zero, pcData points to an compressed texture#in any format (e.g. JPEG).#
220 ("mHeight", c_uint),#A hint from the loader to make it easier for applications# to determine the type of embedded compressed textures.##If mHeight != 0 this member is undefined. Otherwise it#is set set to '\\0\\0\\0\\0' if the loader has no additional#information about the texture file format used OR the#file extension of the format without a trailing dot. If there#are multiple file extensions for a format, the shortest#extension is chosen (JPEG maps to 'jpg', not to 'jpeg').#E.g. 'dds\\0', 'pcx\\0', 'jpg\\0'. All characters are lower-case.#The fourth character will always be '\\0'.#
221 ("achFormatHint", c_char*4),#Data of the texture.##Points to an array of mWidth#mHeight aiTexel's.#The format of the texture data is always ARGB8888 to#make the implementation for user of the library as easy#as possible. If mHeight = 0 this is a pointer to a memory#buffer of size mWidth containing the compressed texture#data. Good luck, have fun!#
222 ("pcData", POINTER(Texel)),
223 ]
224
225 class Ray(Structure):
226 """
227 See 'aiTypes.h' for details.
228 """
229
230 _fields_ = [
231 # Position and direction of the ray
232 ("pos", Vector3D),("dir", Vector3D),
233 ]
234
235 class Light(Structure):
236 """
237 See 'aiLight.h' for details.
238 """
239
240
241 _fields_ = [
242 #The name of the light source.## There must be a node in the scenegraph with the same name.# This node specifies the position of the light in the scene# hierarchy and can be animated.#
243 ("mName", String),#The type of the light source.##aiLightSource_UNDEFINED is not a valid value for this member.#
244 ("mType", c_uint),#Position of the light source in space. Relative to the# transformation of the node corresponding to the light.## The position is undefined for directional lights.#
245 ("mPosition", Vector3D),#Direction of the light source in space. Relative to the# transformation of the node corresponding to the light.## The direction is undefined for point lights. The vector# may be normalized, but it needn't.#
246 ("mDirection", Vector3D),#Constant light attenuation factor.## The intensity of the light source at a given distance 'd' from# the light's position is# @code# Atten = 1/( att0 + att1#d + att2#d*d)# @endcode# This member corresponds to the att0 variable in the equation.# Naturally undefined for directional lights.#
247 ("mAttenuationConstant", c_float),#Linear light attenuation factor.## The intensity of the light source at a given distance 'd' from# the light's position is# @code# Atten = 1/( att0 + att1#d + att2#d*d)# @endcode# This member corresponds to the att1 variable in the equation.# Naturally undefined for directional lights.#
248 ("mAttenuationLinear", c_float),#Quadratic light attenuation factor.## The intensity of the light source at a given distance 'd' from# the light's position is# @code# Atten = 1/( att0 + att1#d + att2#d*d)# @endcode# This member corresponds to the att2 variable in the equation.# Naturally undefined for directional lights.#
249 ("mAttenuationQuadratic", c_float),#Diffuse color of the light source## The diffuse light color is multiplied with the diffuse# material color to obtain the final color that contributes# to the diffuse shading term.#
250 ("mColorDiffuse", Color3D),#Specular color of the light source## The specular light color is multiplied with the specular# material color to obtain the final color that contributes# to the specular shading term.#
251 ("mColorSpecular", Color3D),#Ambient color of the light source## The ambient light color is multiplied with the ambient# material color to obtain the final color that contributes# to the ambient shading term. Most renderers will ignore# this value it, is just a remaining of the fixed-function pipeline# that is still supported by quite many file formats.#
252 ("mColorAmbient", Color3D),#Inner angle of a spot light's light cone.## The spot light has maximum influence on objects inside this# angle. The angle is given in radians. It is 2PI for point# lights and undefined for directional lights.#
253 ("mAngleInnerCone", c_float),#Outer angle of a spot light's light cone.## The spot light does not affect objects outside this angle.# The angle is given in radians. It is 2PI for point lights and# undefined for directional lights. The outer angle must be# greater than or equal to the inner angle.# It is assumed that the application uses a smooth# interpolation between the inner and the outer cone of the# spot light.#
254 ("mAngleOuterCone", c_float),
255 ]
256
257 class Bone(Structure):
258 """
259 See 'aiMesh.h' for details.
260 """
261
262 _fields_ = [
263 # The name of the bone.
264 ("mName", String),# The number of vertices affected by this bone# The maximum value for this member is #AI_MAX_BONE_WEIGHTS.
265 ("mNumWeights", c_uint),# The vertices affected by this bone
266 ("mWeights", POINTER(VertexWeight)),# Matrix that transforms from mesh space to bone space in bind pose
267 ("mOffsetMatrix", Matrix4x4),
268 ]
269
270 class Mesh(Structure):
271 """
272 See 'aiMesh.h' for details.
273 """
274
275 AI_MAX_FACE_INDICES = 0x7fff
276 AI_MAX_BONE_WEIGHTS = 0x7fffffff
277 AI_MAX_VERTICES = 0x7fffffff
278 AI_MAX_FACES = 0x7fffffff
279 AI_MAX_NUMBER_OF_COLOR_SETS = 0x8
280 AI_MAX_NUMBER_OF_TEXTURECOORDS = 0x8
281
282 _fields_ = [
283 #Bitwise combination of the members of the #aiPrimitiveType enum.#This specifies which types of primitives are present in the mesh.#The "SortByPrimitiveType"-Step can be used to make sure the#output meshes consist of one primitive type each.#
284 ("mPrimitiveTypes", c_uint),#The number of vertices in this mesh.#This is also the size of all of the per-vertex data arrays.#The maximum value for this member is #AI_MAX_VERTICES.#
285 ("mNumVertices", c_uint),#The number of primitives (triangles, polygons, lines) in this mesh.#This is also the size of the mFaces array.#The maximum value for this member is #AI_MAX_FACES.#
286 ("mNumFaces", c_uint),#Vertex positions.#This array is always present in a mesh. The array is#mNumVertices in size.#
287 ("mVertices", POINTER(Vector3D)),#Vertex normals.#The array contains normalized vectors, NULL if not present.#The array is mNumVertices in size. Normals are undefined for#point and line primitives. A mesh consisting of points and#lines only may not have normal vectors. Meshes with mixed#primitive types (i.e. lines and triangles) may have normals,#but the normals for vertices that are only referenced by#point or line primitives are undefined and set to QNaN (WARN:#qNaN compares to inequal to *everything*, even to qNaN itself.#Using code like this to check whether a field is qnan is:#@code##define IS_QNAN(f) (f != f)#@endcode#still dangerous because even 1.f == 1.f could evaluate to false! (#remember the subtleties of IEEE754 artithmetics). Use stuff like#@c fpclassify instead.#@note Normal vectors computed by Assimp are always unit-length.#However, this needn't apply for normals that have been taken# directly from the model file.#
288 ("mNormals", POINTER(Vector3D)),#Vertex tangents.#The tangent of a vertex points in the direction of the positive#X texture axis. The array contains normalized vectors, NULL if#not present. The array is mNumVertices in size. A mesh consisting#of points and lines only may not have normal vectors. Meshes with#mixed primitive types (i.e. lines and triangles) may have#normals, but the normals for vertices that are only referenced by#point or line primitives are undefined and set to qNaN. See#the #mNormals member for a detailled discussion of qNaNs.#@note If the mesh contains tangents, it automatically also#contains bitangents.#
289 ("mTangents", POINTER(Vector3D)),#Vertex bitangents.#The bitangent of a vertex points in the direction of the positive#Y texture axis. The array contains normalized vectors, NULL if not#present. The array is mNumVertices in size.#@note If the mesh contains tangents, it automatically also contains#bitangents.#
290 ("mBitangents", POINTER(Vector3D)),#Vertex color sets.#A mesh may contain 0 to #AI_MAX_NUMBER_OF_COLOR_SETS vertex#colors per vertex. NULL if not present. Each array is#mNumVertices in size if present.#
291 ("mColors", POINTER(Color4D)*AI_MAX_NUMBER_OF_COLOR_SETS),#Vertex texture coords, also known as UV channels.#A mesh may contain 0 to AI_MAX_NUMBER_OF_TEXTURECOORDS per#vertex. NULL if not present. The array is mNumVertices in size.#
292 ("mTextureCoords", POINTER(Vector3D)*AI_MAX_NUMBER_OF_TEXTURECOORDS),#Specifies the number of components for a given UV channel.#Up to three channels are supported (UVW, for accessing volume#or cube maps). If the value is 2 for a given channel n, the#component p.z of mTextureCoords[n][p] is set to 0.0f.#If the value is 1 for a given channel, p.y is set to 0.0f, too.#@note 4D coords are not supported#
293 ("mNumUVComponents", c_uint*AI_MAX_NUMBER_OF_TEXTURECOORDS),#The faces the mesh is constructed from.#Each face refers to a number of vertices by their indices.#This array is always present in a mesh, its size is given#in mNumFaces. If the #AI_SCENE_FLAGS_NON_VERBOSE_FORMAT#is NOT set each face references an unique set of vertices.#
294 ("mFaces", POINTER(Face)),#The number of bones this mesh contains.#Can be 0, in which case the mBones array is NULL.#
295 ("mNumBones", c_uint),#The bones of this mesh.#A bone consists of a name by which it can be found in the#frame hierarchy and a set of vertex weights.#
296 ("mBones", POINTER(POINTER(Bone))),#The material used by this mesh.#A mesh does use only a single material. If an imported model uses#multiple materials, the import splits up the mesh. Use this value#as index into the scene's material list.#
297 ("mMaterialIndex", c_uint),#Name of the mesh. Meshes can be named, but this is not a# requirement and leaving this field empty is totally fine.# There are mainly three uses for mesh names:# - some formats name nodes and meshes independently.# - importers tend to split meshes up to meet the# one-material-per-mesh requirement. Assigning# the same (dummy) name to each of the result meshes# aids the caller at recovering the original mesh# partitioning.# - Vertex animations refer to meshes by their names.#
298 ("mName", String),#NOT CURRENTLY IN USE. The number of attachment meshes#
299 ("mNumAnimMeshes", c_uint),#NOT CURRENTLY IN USE. Attachment meshes for this mesh, for vertex-based animation.# Attachment meshes carry replacement data for some of the# mesh'es vertex components (usually positions, normals).#
300 ]
301
302 class VectorKey(Structure):
303 """
304 See 'aiAnim.h' for details.
305 """
306
307 _fields_ = [
308 #The time of this key#
309 ("mTime", c_double),#The value of this key#
310 ("mValue", Vector3D),
311 ]
312
313 class QuatKey(Structure):
314 """
315 See 'aiAnim.h' for details.
316 """
317
318 _fields_ = [
319 #The time of this key#
320 ("mTime", c_double),#The value of this key#
321 ("mValue", Quaternion),
322 ]
323
324 class NodeAnim(Structure):
325 """
326 See 'aiAnim.h' for details.
327 """
328
329 _fields_ = [
330 #The name of the node affected by this animation. The node# must exist and it must be unique.#
331 ("mNodeName", String),#The number of position keys#
332 ("mNumPositionKeys", c_uint),#The position keys of this animation channel. Positions are#specified as 3D vector. The array is mNumPositionKeys in size.##If there are position keys, there will also be at least one#scaling and one rotation key.#
333 ("mPositionKeys", POINTER(VectorKey)),#The number of rotation keys#
334 ("mNumRotationKeys", c_uint),#The rotation keys of this animation channel. Rotations are# given as quaternions, which are 4D vectors. The array is# mNumRotationKeys in size.##If there are rotation keys, there will also be at least one#scaling and one position key.#
335 ("mRotationKeys", POINTER(QuatKey)),#The number of scaling keys#
336 ("mNumScalingKeys", c_uint),#The scaling keys of this animation channel. Scalings are# specified as 3D vector. The array is mNumScalingKeys in size.##If there are scaling keys, there will also be at least one#position and one rotation key.#
337 ("mScalingKeys", POINTER(VectorKey)),#Defines how the animation behaves before the first# key is encountered.## The default value is aiAnimBehaviour_DEFAULT (the original# transformation matrix of the affected node is used).#
338 ("mPreState", c_uint),#Defines how the animation behaves after the last# key was processed.## The default value is aiAnimBehaviour_DEFAULT (the original# transformation matrix of the affected node is taken).#
339 ("mPostState", c_uint),
340 ]
341
342 class Animation(Structure):
343 """
344 See 'aiAnim.h' for details.
345 """
346
347 _fields_ = [
348 #The name of the animation. If the modeling package this data was# exported from does support only a single animation channel, this# name is usually empty (length is zero).#
349 ("mName", String),#Duration of the animation in ticks.#
350 ("mDuration", c_double),#Ticks per second. 0 if not specified in the imported file#
351 ("mTicksPerSecond", c_double),#The number of bone animation channels. Each channel affects# a single node.#
352 ("mNumChannels", c_uint),#The node animation channels. Each channel affects a single node.# The array is mNumChannels in size.#
353 ("mChannels", POINTER(POINTER(NodeAnim))),#The number of mesh animation channels. Each channel affects# a single mesh and defines vertex-based animation.#
354 ("mNumMeshChannels", c_uint),#The mesh animation channels. Each channel affects a single mesh.# The array is mNumMeshChannels in size.#
355 ]
356
357 class UVTransform(Structure):
358 """
359 See 'aiMaterial.h' for details.
360 """
361
362 _fields_ = [
363 #Translation on the u and v axes.## The default value is (0|0).#
364 ("mTranslation", Vector2D),#Scaling on the u and v axes.## The default value is (1|1).#
365 ("mScaling", Vector2D),#Rotation - in counter-clockwise direction.## The rotation angle is specified in radians. The# rotation center is 0.5f|0.5f. The default value# 0.f.#
366 ("mRotation", c_float),
367 ]
368
369 class MaterialProperty(Structure):
370 """
371 See 'aiMaterial.h' for details.
372 """
373
374 _fields_ = [
375 #Specifies the name of the property (key)# Keys are generally case insensitive.#
376 ("mKey", String),#Textures: Specifies their exact usage semantic.#For non-texture properties, this member is always 0#(or, better-said, #aiTextureType_NONE).#
377 ("mSemantic", c_uint),#Textures: Specifies the index of the texture.# For non-texture properties, this member is always 0.#
378 ("mIndex", c_uint),#Size of the buffer mData is pointing to, in bytes.# This value may not be 0.#
379 ("mDataLength", c_uint),#Type information for the property.##Defines the data layout inside the data buffer. This is used#by the library internally to perform debug checks and to#utilize proper type conversions.#(It's probably a hacky solution, but it works.)#
380 ("mType", c_uint),#Binary buffer to hold the property's value.#The size of the buffer is always mDataLength.#
381 ("mData", POINTER(c_char)),
382 ]
383
384 class Material(Structure):
385 """
386 See 'aiMaterial.h' for details.
387 """
388
389 _fields_ = [
390 #List of all material properties loaded.#
391 ("mProperties", POINTER(POINTER(MaterialProperty))),#Number of properties in the data base#
392 ("mNumProperties", c_uint),#Storage allocated#
393 ("mNumAllocated", c_uint),
394 ]
395
396 class Scene(Structure):
397 """
398 See 'aiScene.h' for details.
399 """
400
401 AI_SCENE_FLAGS_INCOMPLETE = 0x1
402 AI_SCENE_FLAGS_VALIDATED = 0x2
403 AI_SCENE_FLAGS_VALIDATION_WARNING = 0x4
404 AI_SCENE_FLAGS_NON_VERBOSE_FORMAT = 0x8
405 AI_SCENE_FLAGS_TERRAIN = 0x10
406
407 _fields_ = [
408 #Any combination of the AI_SCENE_FLAGS_XXX flags. By default#this value is 0, no flags are set. Most applications will#want to reject all scenes with the AI_SCENE_FLAGS_INCOMPLETE#bit set.#
409 ("mFlags", c_uint),#The root node of the hierarchy.##There will always be at least the root node if the import#was successful (and no special flags have been set).#Presence of further nodes depends on the format and content#of the imported file.#
410 ("mRootNode", POINTER(Node)),#The number of meshes in the scene.#
411 ("mNumMeshes", c_uint),#The array of meshes.##Use the indices given in the aiNode structure to access#this array. The array is mNumMeshes in size. If the#AI_SCENE_FLAGS_INCOMPLETE flag is not set there will always#be at least ONE material.#
412 ("mMeshes", POINTER(POINTER(Mesh))),#The number of materials in the scene.#
413 ("mNumMaterials", c_uint),#The array of materials.##Use the index given in each aiMesh structure to access this#array. The array is mNumMaterials in size. If the#AI_SCENE_FLAGS_INCOMPLETE flag is not set there will always#be at least ONE material.#
414 ("mMaterials", POINTER(POINTER(Material))),#The number of animations in the scene.#
415 ("mNumAnimations", c_uint),#The array of animations.##All animations imported from the given file are listed here.#The array is mNumAnimations in size.#
416 ("mAnimations", POINTER(POINTER(Animation))),#The number of textures embedded into the file#
417 ("mNumTextures", c_uint),#The array of embedded textures.##Not many file formats embed their textures into the file.#An example is Quake's MDL format (which is also used by#some GameStudio versions)#
418 ("mTextures", POINTER(POINTER(Texture))),#The number of light sources in the scene. Light sources#are fully optional, in most cases this attribute will be 0#
419 ("mNumLights", c_uint),#The array of light sources.##All light sources imported from the given file are#listed here. The array is mNumLights in size.#
420 ("mLights", POINTER(POINTER(Light))),#The number of cameras in the scene. Cameras#are fully optional, in most cases this attribute will be 0#
421 ("mNumCameras", c_uint),#The array of cameras.##All cameras imported from the given file are listed here.#The array is mNumCameras in size. The first camera in the#array (if existing) is the default camera view into#the scene.#
422 ("mCameras", POINTER(POINTER(Camera))),
423 ]
+0
-45
port/PyAssimp3/quicktest.py less more
0 #!/usr/bin/env python3
1 #-*- coding: UTF-8 -*-
2
3 """
4 This module uses the sample.py script to load all test models it finds.
5
6 Note: this is not an exhaustive test suite, it does not check the
7 data structures in detail. It just verifies whether basic
8 loading and querying of 3d models using pyassimp works.
9 """
10
11
12 import sys,os
13 import sample
14 from pyassimp import pyassimp,errors
15
16 # paths to be walkd recursively
17 basepaths = [os.path.join('..','..','test','models'), os.path.join('..','..','test','models-nonbsd')]
18
19 # file extensions to be considered
20 extensions = ['.3ds','.x','.lwo','.obj','.md5mesh','.dxf','.ply','.stl','.dae','.md5anim','.lws','.irrmesh','.nff','.off','.blend']
21
22 def run_tests():
23 ok,err = 0,0
24 for path in basepaths:
25 for root, dirs, files in os.walk(path):
26 for afile in files:
27 base,ext = os.path.splitext(afile)
28 if ext in extensions:
29 try:
30 sample.main(os.path.join(root,afile))
31 ok += 1
32 except errors.AssimpError as error:
33 # assimp error is fine, this is a controlled case
34 print(error)
35 err += 1
36 print(('** Loaded %s models, got controlled errors for %s files' % (ok,err)))
37
38
39 if __name__ == '__main__':
40 run_tests()
41
42
43
44
+0
-71
port/PyAssimp3/sample.py less more
0 #!/usr/bin/env python3
1 #-*- coding: UTF-8 -*-
2
3 """
4 This module demonstrates the functionality of PyAssimp.
5 """
6
7
8 from pyassimp import pyassimp
9 import os, sys
10
11 #get a model out of assimp's test-data if none is provided on the command line
12 DEFAULT_MODEL = os.path.join(os.path.dirname(__file__),
13 "..", "..",
14 "test", "models", "Collada", "duck.dae")
15
16 def main(filename=None):
17 filename = filename or DEFAULT_MODEL
18 scene = pyassimp.load(filename)
19
20 #the model we load
21 print("MODEL:", filename)
22 print()
23
24 #write some statistics
25 print("SCENE:")
26 print(" meshes:", len(scene.meshes))
27 print(" materials:", len(scene.materials))
28 print(" textures:", len(scene.textures))
29 print()
30
31 print("MESHES:")
32 for index, mesh in enumerate(scene.meshes):
33 print(" MESH", index+1)
34 print(" material:", mesh.mMaterialIndex+1)
35 print(" vertices:", len(mesh.vertices))
36 print(" first 3 verts:", mesh.vertices[:3])
37 #if len(mesh.normals):
38 # print " first 3 normals:", mesh.normals[:3]
39 print(" colors:", len(mesh.colors))
40 tc = mesh.texcoords
41 print(" texture-coords 1:", len(tc[0]), "first3:", tc[0][:3])
42 print(" texture-coords 2:", len(tc[1]), "first3:", tc[1][:3])
43 print(" texture-coords 3:", len(tc[2]), "first3:", tc[2][:3])
44 print(" texture-coords 4:", len(tc[3]), "first3:", tc[3][:3])
45 print(" uv-component-count:", len(mesh.mNumUVComponents))
46 print(" faces:", len(mesh.faces), "first:", [f.indices for f in mesh.faces[:3]])
47 print(" bones:", len(mesh.bones), "first:", [b.mName for b in mesh.bones[:3]])
48 print()
49
50 print("MATERIALS:")
51 for index, material in enumerate(scene.materials):
52 print(" MATERIAL", index+1)
53 properties = pyassimp.GetMaterialProperties(material)
54 for key in properties:
55 print(" %s: %s" % (key, properties[key]))
56 print()
57
58 print("TEXTURES:")
59 for index, texture in enumerate(scene.textures):
60 print(" TEXTURE", index+1)
61 print(" width:", texture.mWidth)
62 print(" height:", texture.mHeight)
63 print(" hint:", texture.achFormatHint)
64 print(" data (size):", texture.mWidth*texture.mHeight)
65
66 # Finally release the model
67 pyassimp.release(scene)
68
69 if __name__ == "__main__":
70 main(sys.argv[1] if len(sys.argv)>1 else None)
0 D bindings for the Assimp library (http://assimp.sf.net).
1 ---
2
3 These bindings provide access to Assimp's C API. They were directly created
4 from the C header files.
5
6 You should be able to create sufficient DDoc documentation for the bindings
7 using your favourite build tool (such as Rebuild). Please refer to the main
8 (Doxygen-generated) documentation for general topics.
9
10 Please note that the bindings have only been tested on 32 bit systems, they have
11 yet to be adapted for the different size of the integer types in 64 bit builds
12 of Assimp.
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * The data structures which are used to store the imported animation data.
43 */
44 module assimp.animation;
45
46 import assimp.math;
47 import assimp.types;
48
49 extern ( C ) {
50 /**
51 * A time-value pair specifying a certain 3D vector for the given time.
52 */
53 struct aiVectorKey {
54 /**
55 * The time of this key.
56 */
57 double mTime;
58
59 /**
60 * The value of this key.
61 */
62 aiVector3D mValue;
63 }
64
65 /**
66 * A time-value pair specifying a rotation for the given time. For joint
67 * animations, the rotation is usually expressed using a quaternion.
68 */
69 struct aiQuatKey {
70 /**
71 * The time of this key.
72 */
73 double mTime;
74
75 /**
76 * The value of this key.
77 */
78 aiQuaternion mValue;
79 }
80
81 /**
82 * Defines how an animation channel behaves outside the defined time
83 * range. This corresponds to <code>aiNodeAnim.mPreState</code> and
84 * <code>aiNodeAnim.mPostState</code>.
85 */
86 enum aiAnimBehaviour : uint {
87 /**
88 * The value from the default node transformation is used.
89 */
90 DEFAULT = 0x0,
91
92 /**
93 * The nearest key value is used without interpolation.
94 */
95 CONSTANT = 0x1,
96
97 /**
98 * The value of the nearest two keys is linearly extrapolated for the
99 * current time value.
100 */
101 LINEAR = 0x2,
102
103 /**
104 * The animation is repeated.
105 *
106 * If the animation key go from n to m and the current time is t, use the
107 * value at (t-n) % (|m-n|).
108 */
109 REPEAT = 0x3
110 }
111
112 /**
113 * Describes the animation of a single node.
114 *
115 * The name specifies the bone/node which is affected by this animation
116 * channel. The keyframes are given in three separate series of values, one
117 * each for position, rotation and scaling. The transformation matrix
118 * computed from these values replaces the node's original transformation
119 * matrix at a specific time. This means all keys are absolute and not
120 * relative to the bone default pose.
121 *
122 * The order in which the transformations are applied is –
123 * as usual – scaling, rotation, translation.
124 *
125 * Note: All keys are returned in their correct, chronological order.
126 * Duplicate keys don't pass the validation step. Most likely there will
127 * be no negative time values, but they are not forbidden (so
128 * implementations need to cope with them!).
129 */
130 struct aiNodeAnim {
131 /**
132 * The name of the node affected by this animation. The node must exist
133 * and it must be unique.
134 */
135 aiString mNodeName;
136
137 /**
138 * The number of position keys.
139 */
140 uint mNumPositionKeys;
141
142 /**
143 * The position keys of this animation channel. Positions are specified
144 * as 3D vectors. The array is <code>mNumPositionKeys</code> in size.
145 *
146 * If there are position keys, there will also be at least one scaling
147 * and one rotation key.
148 */
149 aiVectorKey* mPositionKeys;
150
151 /**
152 * The number of rotation keys.
153 */
154 uint mNumRotationKeys;
155
156 /**
157 * The rotation keys of this animation channel. Rotations are given as
158 * quaternions. The array is <code>mNumRotationKeys</code> in size.
159 *
160 * If there are rotation keys, there will also be at least one scaling
161 * and one position key.
162 */
163 aiQuatKey* mRotationKeys;
164
165
166 /**
167 * The number of scaling keys.
168 */
169 uint mNumScalingKeys;
170
171 /**
172 * The scaling keys of this animation channel. Scalings are specified as
173 * 3D vectors. The array is <code>mNumScalingKeys</code> in size.
174 *
175 * If there are scaling keys, there will also be at least one position
176 * and one rotation key.
177 */
178 aiVectorKey* mScalingKeys;
179
180
181 /**
182 * Defines how the animation behaves before the first key is encountered.
183 *
184 * The default value is <code>aiAnimBehaviour.DEFAULT</code> (the original
185 * transformation matrix of the affected node is used).
186 */
187 aiAnimBehaviour mPreState;
188
189 /**
190 * Defines how the animation behaves after the last key was processed.
191 *
192 * The default value is <code>aiAnimBehaviour.DEFAULT</code> (the original
193 * transformation matrix of the affected node is used).
194 */
195 aiAnimBehaviour mPostState;
196 }
197
198 /**
199 * An animation consists of keyframe data for a number of nodes.
200 *
201 * For each node affected by the animation, a separate series of data is
202 * given.
203 */
204 struct aiAnimation {
205 /**
206 * The name of the animation.
207 *
208 * If the modeling package this data was
209 * exported from does support only a single animation channel, this
210 * name is usually empty (length is zero).
211 */
212 aiString mName;
213
214 /**
215 * Duration of the animation in ticks.
216 */
217 double mDuration;
218
219 /**
220 * Ticks per second. 0 if not specified in the imported file.
221 */
222 double mTicksPerSecond;
223
224 /**
225 * The number of bone animation channels.
226 *
227 * Each channel affects a single node.
228 */
229 uint mNumChannels;
230
231 /**
232 * The node animation channels. The array is <code>mNumChannels</code>
233 * in size.
234 *
235 * Each channel affects a single node.
236 */
237 aiNodeAnim** mChannels;
238 }
239 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * The C-style interface to the Open Asset import library.
43 *
44 * All functions of the C API have been collected in this module as function
45 * pointers, which are set by the dynamic library loader
46 * (<code>assimp.loader</code>).
47 */
48 module assimp.api;
49
50 import assimp.fileIO;
51 import assimp.material;
52 import assimp.math;
53 import assimp.scene;
54 import assimp.types;
55
56 extern ( C ) {
57 /**
58 * Reads the given file and returns its content.
59 *
60 * If the call succeeds, the imported data is returned in an <code>aiScene</code>
61 * structure. The data is intended to be read-only, it stays property of the
62 * Assimp library and will be stable until <code>aiReleaseImport()</code> is
63 * called. After you're done with it, call <code>aiReleaseImport()</code> to
64 * free the resources associated with this file.
65 *
66 * If an error is encountered, null is returned instead. Call
67 * <code>aiGetErrorString()</code> to retrieve a human-readable error
68 * description.
69 *
70 * Params:
71 * pFile = Path and filename of the file to be imported,
72 * expected to be a null-terminated C-string. null is not a valid value.
73 * pFlags = Optional post processing steps to be executed after a
74 * successful import. Provide a bitwise combination of the
75 * <code>aiPostProcessSteps</code> flags. If you wish to inspect the
76 * imported scene first in order to fine-tune your post-processing
77 * setup, consider to use <code>aiApplyPostProcessing()</code>.
78 *
79 * Returns:
80 * A pointer to the imported data, null if the import failed.
81 */
82 aiScene* function( char* pFile, uint pFile ) aiImportFile;
83
84 /**
85 * Reads the given file using user-defined I/O functions and returns its
86 * content.
87 *
88 * If the call succeeds, the imported data is returned in an <code>aiScene</code>
89 * structure. The data is intended to be read-only, it stays property of the
90 * Assimp library and will be stable until <code>aiReleaseImport()</code> is
91 * called. After you're done with it, call <code>aiReleaseImport()</code> to
92 * free the resources associated with this file.
93 *
94 * If an error is encountered, null is returned instead. Call
95 * <code>aiGetErrorString()</code> to retrieve a human-readable error
96 * description.
97 *
98 * Params:
99 * pFile = Path and filename of the file to be imported,
100 * expected to be a null-terminated C-string. null is not a valid value.
101 * pFlags = Optional post processing steps to be executed after a
102 * successful import. Provide a bitwise combination of the
103 * <code>aiPostProcessSteps</code> flags. If you wish to inspect the
104 * imported scene first in order to fine-tune your post-processing
105 * setup, consider to use <code>aiApplyPostProcessing()</code>.
106 * pFS = An aiFileIO which will be used to open the model file itself
107 * and any other files the loader needs to open.
108 *
109 * Returns:
110 * A pointer to the imported data, null if the import failed.
111 */
112 aiScene* function( char* pFile, uint pFlags, aiFileIO* pFS ) aiImportFileEx;
113
114 /**
115 * Reads the scene from the given memory buffer.
116 *
117 * Reads the given file using user-defined I/O functions and returns its
118 * content.
119 *
120 * If the call succeeds, the imported data is returned in an <code>aiScene</code>
121 * structure. The data is intended to be read-only, it stays property of the
122 * Assimp library and will be stable until <code>aiReleaseImport()</code> is
123 * called. After you're done with it, call <code>aiReleaseImport()</code> to
124 * free the resources associated with this file.
125 *
126 * If an error is encountered, null is returned instead. Call
127 * <code>aiGetErrorString()</code> to retrieve a human-readable error
128 * description.
129 *
130 * Params:
131 * pBuffer = Pointer to the scene data.
132 * pLength = Size of pBuffer in bytes.
133 * pFlags = Optional post processing steps to be executed after a
134 * successful import. Provide a bitwise combination of the
135 * <code>aiPostProcessSteps</code> flags. If you wish to inspect the
136 * imported scene first in order to fine-tune your post-processing
137 * setup, consider to use <code>aiApplyPostProcessing()</code>.
138 * pHint = An additional hint to the library. If this is a non empty
139 * string, the library looks for a loader to support the file
140 * extension specified and passes the file to the first matching
141 * loader. If this loader is unable to complete the request, the
142 * library continues and tries to determine the file format on its
143 * own, a task that may or may not be successful.
144 *
145 * Returns:
146 * A pointer to the imported data, null if the import failed.
147 *
148 * Note:
149 * This is a straightforward way to decode models from memory buffers,
150 * but it doesn't handle model formats spreading their data across
151 * multiple files or even directories. Examples include OBJ or MD3, which
152 * outsource parts of their material stuff into external scripts. If you
153 * need the full functionality, provide a custom IOSystem to make Assimp
154 * find these files.
155 */
156 aiScene* function(
157 char* pBuffer,
158 uint pLength,
159 uint pFlags,
160 char* pHint
161 ) aiImportFileFromMemory;
162
163 /**
164 * Apply post-processing to an already-imported scene.
165 *
166 * This is strictly equivalent to calling <code>aiImportFile()</code> or
167 * <code>aiImportFileEx()</code> with the same flags. However, you can use
168 * this separate function to inspect the imported scene first to fine-tune
169 * your post-processing setup.
170 *
171 * Params:
172 * pScene = Scene to work on.
173 * pFlags = Provide a bitwise combination of the
174 * <code>aiPostProcessSteps</code> flags.
175 *
176 * Returns:
177 * A pointer to the post-processed data. Post processing is done in-place,
178 * meaning this is still the same <code>aiScene</code> which you passed
179 * for pScene. However, if post-processing failed, the scene could now be
180 * null. That's quite a rare case, post processing steps are not really
181 * designed to fail. To be exact, <code>aiProcess.ValidateDS</code> is
182 * currently the only post processing step which can actually cause the
183 * scene to be reset to null.
184 */
185 aiScene* function( aiScene* pScene, uint pFlags ) aiApplyPostProcessing;
186
187 /**
188 * Get one of the predefined log streams. This is the quick'n'easy solution
189 * to access Assimp's log system. Attaching a log stream can slightly reduce
190 * Assimp's overall import performance.
191 *
192 * Examples:
193 * ---
194 * aiLogStream stream = aiGetPredefinedLogStream(
195 * aiDefaultLogStream.FILE, "assimp.log.txt" );
196 * if ( stream.callback !is null ) {
197 * aiAttachLogStream( &stream );
198 * }
199 * ---
200 *
201 * Params:
202 * pStreams = The log stream destination.
203 * file = Solely for the <code>aiDefaultLogStream.FILE</code> flag:
204 * specifies the file to write to. Pass null for all other flags.
205 *
206 * Returns:
207 * The log stream, null if something went wrong.
208 */
209 aiLogStream function( aiDefaultLogStream pStreams, char* file ) aiGetPredefinedLogStream;
210
211 /**
212 * Attach a custom log stream to the libraries' logging system.
213 *
214 * Attaching a log stream can slightly reduce Assimp's overall import
215 * performance. Multiple log-streams can be attached.
216 *
217 * Params:
218 * stream = Describes the new log stream.
219 *
220 * Note: To ensure proper destruction of the logging system, you need to
221 * manually call <code>aiDetachLogStream()</code> on every single log
222 * stream you attach. Alternatively, <code>aiDetachAllLogStreams()</code>
223 * is provided.
224 */
225 void function( aiLogStream* stream ) aiAttachLogStream;
226
227 /**
228 * Enable verbose logging.
229 *
230 * Verbose logging includes debug-related stuff and detailed import
231 * statistics. This can have severe impact on import performance and memory
232 * consumption. However, it might be useful to find out why a file is not
233 * read correctly.
234 *
235 * Param:
236 * d = Whether verbose logging should be enabled.
237 */
238 void function( aiBool d ) aiEnableVerboseLogging;
239
240 /**
241 * Detach a custom log stream from the libraries' logging system.
242 *
243 * This is the counterpart of #aiAttachPredefinedLogStream. If you attached a stream,
244 * don't forget to detach it again.
245 *
246 * Params:
247 * stream = The log stream to be detached.
248 *
249 * Returns:
250 * <code>aiReturn.SUCCESS</code> if the log stream has been detached
251 * successfully.
252 *
253 * See: <code>aiDetachAllLogStreams</code>
254 */
255 aiReturn function( aiLogStream* stream ) aiDetachLogStream;
256
257 /**
258 * Detach all active log streams from the libraries' logging system.
259 *
260 * This ensures that the logging system is terminated properly and all
261 * resources allocated by it are actually freed. If you attached a stream,
262 * don't forget to detach it again.
263 *
264 * See: <code>aiAttachLogStream</code>, <code>aiDetachLogStream</code>
265 */
266 void function() aiDetachAllLogStreams;
267
268 /**
269 * Releases all resources associated with the given import process.
270 *
271 * Call this function after you're done with the imported data.
272 *
273 * Params:
274 * pScene = The imported data to release. null is a valid value.
275 */
276 void function( aiScene* pScene ) aiReleaseImport;
277
278 /**
279 * Returns the error text of the last failed import process.
280 *
281 * Returns:
282 * A textual description of the error that occurred at the last importing
283 * process. null if there was no error. There can't be an error if you
284 * got a non-null <code>aiScene</code> from
285 * <code>aiImportFile()/aiImportFileEx()/aiApplyPostProcessing()</code>.
286 */
287 char* function() aiGetErrorString;
288
289 /**
290 * Returns whether a given file extension is supported by this Assimp build.
291 *
292 * Params:
293 * szExtension = Extension for which to query support. Must include a
294 * leading dot '.'. Example: ".3ds", ".md3"
295 *
296 * Returns:
297 * <code>TRUE</code> if the file extension is supported.
298 */
299 aiBool function( char* szExtension ) aiIsExtensionSupported;
300
301 /**
302 * Gets a list of all file extensions supported by ASSIMP.
303 *
304 * Format of the list: "*.3ds;*.obj;*.dae".
305 *
306 * If a file extension is contained in the list this does, of course, not
307 * mean that Assimp is able to load all files with this extension.
308 *
309 * Params:
310 * szOut = String to receive the extension list. null is not a valid
311 * parameter.
312 */
313 void function( aiString* szOut ) aiGetExtensionList;
314
315 /**
316 * Gets the storage required by an imported asset
317 *
318 * Params:
319 * pIn = Asset to query storage size for.
320 * info = Data structure to be filled.
321 */
322 void function( aiScene* pIn, aiMemoryInfo* info ) aiGetMemoryRequirements;
323
324 /**
325 * Sets an integer property.
326 *
327 * Properties are always shared by all imports. It is not possible to
328 * specify them per import.
329 *
330 * Params:
331 * szName = Name of the configuration property to be set. All supported
332 * public properties are defined in the <code>config</code> module.
333 * value = New value for the property.
334 */
335 void function( char* szName, int value ) aiSetImportPropertyInteger;
336
337 /**
338 * Sets a floating-point property.
339 *
340 * Properties are always shared by all imports. It is not possible to
341 * specify them per import.
342 *
343 * Params:
344 * szName = Name of the configuration property to be set. All supported
345 * public properties are defined in the <code>config</code> module.
346 * value = New value for the property.
347 */
348 void function( char* szName, float value ) aiSetImportPropertyFloat;
349
350 /**
351 * Sets a string property.
352 *
353 * Properties are always shared by all imports. It is not possible to
354 * specify them per import.
355 *
356 * Params:
357 * szName = Name of the configuration property to be set. All supported
358 * public properties are defined in the <code>config</code> module.
359 * st = New value for the property.
360 */
361 void function( char* szName, aiString* st ) aiSetImportPropertyString;
362
363
364 /*
365 * Mathematical helper functions.
366 */
367
368 /**
369 * Constructs a quaternion from a 3x3 rotation matrix.
370 *
371 * Params:
372 * quat = Receives the output quaternion.
373 * mat = Matrix to 'quaternionize'.
374 */
375 void function( aiQuaternion* quat, aiMatrix3x3* mat ) aiCreateQuaternionFromMatrix;
376
377 /**
378 * Decomposes a transformation matrix into its rotational, translational and
379 * scaling components.
380 *
381 * Params:
382 * mat = Matrix to decompose.
383 * scaling = Receives the scaling component.
384 * rotation = Receives the rotational component.
385 * position = Receives the translational component.
386 */
387 void function(
388 aiMatrix4x4* mat,
389 aiVector3D* scaling,
390 aiQuaternion* rotation,
391 aiVector3D* position
392 ) aiDecomposeMatrix;
393
394 /**
395 * Transposes a 4x4 matrix (in-place).
396 *
397 * Params:
398 * mat = The matrix to be transposed.
399 */
400 void function( aiMatrix4x4* mat ) aiTransposeMatrix4;
401
402 /**
403 * Transposes a 3x3 matrix (in-place).
404 *
405 * Params:
406 * mat = The matrix to be transposed.
407 */
408 void function( aiMatrix3x3* mat ) aiTransposeMatrix3;
409
410 /**
411 * Transforms a vector by a 3x3 matrix (in-place).
412 *
413 * Params:
414 * vec = Vector to be transformed.
415 * mat = Matrix to transform the vector with.
416 */
417 void function( aiVector3D* vec, aiMatrix3x3* mat ) aiTransformVecByMatrix3;
418
419 /**
420 * Transforms a vector by a 4x4 matrix (in-place).
421 *
422 * Params:
423 * vec = Vector to be transformed.
424 * mat = Matrix to transform the vector with.
425 */
426 void function( aiVector3D* vec, aiMatrix4x4* mat ) aiTransformVecByMatrix4;
427
428 /**
429 * Multiplies two 4x4 matrices.
430 *
431 * Params:
432 * dst = First factor, receives result.
433 * src = Matrix to be multiplied with 'dst'.
434 */
435 void function( aiMatrix4x4* dst, aiMatrix4x4* src ) aiMultiplyMatrix4;
436
437 /**
438 * Multiplies two 3x3 matrices.
439 *
440 * Params:
441 * dst = First factor, receives result.
442 * src = Matrix to be multiplied with 'dst'.
443 */
444 void function( aiMatrix3x3* dst, aiMatrix3x3* src ) aiMultiplyMatrix3;
445
446 /**
447 * Constructs a 3x3 identity matrix.
448 *
449 * Params:
450 * mat = Matrix to receive its personal identity.
451 */
452 void function( aiMatrix3x3* mat ) aiIdentityMatrix3;
453
454 /**
455 * Constructs a 4x4 identity matrix.
456 *
457 * Params:
458 * mat = Matrix to receive its personal identity.
459 */
460 void function( aiMatrix4x4* mat ) aiIdentityMatrix4;
461
462
463 /*
464 * Material system functions.
465 */
466
467 /**
468 * Retrieves a material property with a specific key from the material.
469 *
470 * Params:
471 * pMat = Pointer to the input material. May not be null.
472 * pKey = Key to search for. One of the <code>AI_MATKEY_XXX</code>
473 * constants.
474 * type = Specifies the <code>aiTextureType</code> of the texture to be
475 * retrieved, 0 for non-texture properties.
476 * index = Index of the texture to be retrieved,
477 * 0 for non-texture properties.
478 * pPropOut = Pointer to receive a pointer to a valid
479 * <code>aiMaterialProperty</code> structure or null if the key has
480 * not been found.
481 */
482 aiReturn function(
483 aiMaterial* pMat,
484 char* pKey,
485 uint type,
486 uint index,
487 aiMaterialProperty** pPropOut
488 ) aiGetMaterialProperty;
489
490 /**
491 * Retrieves a single float value or an array of float values from the
492 * material.
493 *
494 * Examples:
495 * ---
496 * const FLOATS_IN_UV_TRANSFORM = ( aiUVTransform.sizeof / float.sizeof );
497 * uint valuesRead = FLOATS_IN_UV_TRANSFORM;
498 * bool success =
499 * ( aiGetMaterialFloatArray( &material, AI_MATKEY_UVTRANSFORM,
500 * aiTextureType.DIFFUSE, 0, cast( float* ) &trafo, &valuesRead ) ==
501 * aiReturn.SUCCESS ) &&
502 * ( valuesRead == FLOATS_IN_UV_TRANSFORM );
503 * ---
504 *
505 * Params:
506 * pMat = Pointer to the input material. May not be null.
507 * pKey = Key to search for. One of the AI_MATKEY_XXX constants.
508 * type = Specifies the <code>aiTextureType</code> of the texture to be
509 * retrieved, 0 for non-texture properties.
510 * index = Index of the texture to be retrieved,
511 * 0 for non-texture properties.
512 * pOut = Pointer to a buffer to receive the result.
513 * pMax = Specifies the size of the given buffer in floats. Receives the
514 * number of values (not bytes!) read. null to read a scalar property.
515 *
516 * Returns:
517 * Specifies whether the key has been found. If not, the output arrays
518 * remains unmodified and pMax is set to 0.
519 */
520 aiReturn function(
521 aiMaterial* pMat,
522 char* pKey,
523 uint type,
524 uint index,
525 float* pOut,
526 uint* pMax = null
527 ) aiGetMaterialFloatArray;
528
529 /**
530 * Convenience alias for <code>aiGetMaterialFloatArray()</code>.
531 */
532 alias aiGetMaterialFloatArray aiGetMaterialFloat;
533
534 /**
535 * Retrieves a single integer value or an array of integer values from the
536 * material.
537 *
538 * See: <code>aiGetMaterialFloatArray()</code>
539 */
540 aiReturn function(
541 aiMaterial* pMat,
542 char* pKey,
543 uint type,
544 uint index,
545 int* pOut,
546 uint* pMax = null
547 ) aiGetMaterialIntegerArray;
548
549 /**
550 * Convenience alias for <code>aiGetMaterialIntegerArray()</code>.
551 */
552 alias aiGetMaterialIntegerArray aiGetMaterialInteger;
553
554 /**
555 * Retrieves a color value from the material.
556 *
557 * See: <code>aiGetMaterialFloatArray()</code>
558 */
559 aiReturn function(
560 aiMaterial* pMat,
561 char* pKey,
562 uint type,
563 uint index,
564 aiColor4D* pOut
565 ) aiGetMaterialColor;
566
567 /**
568 * Retrieves a string value from the material.
569 *
570 * See: <code>aiGetMaterialFloatArray()</code>
571 */
572 aiReturn function(
573 aiMaterial* pMat,
574 char* pKey,
575 uint type,
576 uint index,
577 aiString* pOut
578 ) aiGetMaterialString;
579
580 /**
581 * Get the number of textures for a particular texture type.
582 *
583 * Params:
584 * pMat = Pointer to the input material. May not be NULL
585 * type = Texture type to check for
586 *
587 * Returns:
588 * Number of textures for this type.
589 */
590 uint function( aiMaterial* pMat, aiTextureType type ) aiGetMaterialTextureCount;
591
592 /**
593 * Helper function to get all values pertaining to a particular texture slot
594 * from a material structure.
595 *
596 * This function is provided just for convenience. You could also read the
597 * texture by parsing all of its properties manually. This function bundles
598 * all of them in a huge function monster.
599 *
600 * Params:
601 * mat = Pointer to the input material. May not be null.
602 * type = Specifies the texture stack (<code>aiTextureType</code>) to
603 * read from.
604 * index = Index of the texture. The function fails if the requested
605 * index is not available for this texture type.
606 * <code>aiGetMaterialTextureCount()</code> can be used to determine
607 * the number of textures in a particular texture stack.
608 * path = Receives the output path. null is not a valid value.
609 * mapping = Recieves the texture mapping mode to be used.
610 * Pass null if you are not interested in this information.
611 * uvindex = For UV-mapped textures: receives the index of the UV source
612 * channel. Unmodified otherwise. Pass null if you are not interested
613 * in this information.
614 * blend = Receives the blend factor for the texture.
615 * Pass null if you are not interested in this information.
616 * op = Receives the texture blend operation to be perform between this
617 * texture and the previous texture. Pass null if you are not
618 * interested in this information.
619 * mapmode = Receives the mapping modes to be used for the texture. Pass
620 * a pointer to an array of two aiTextureMapMode's (one for each axis,
621 * UV order) or null if you are not interested in this information.
622 *
623 * Returns:
624 * <code>aiReturn.SUCCESS</code> on success, otherwise something else.
625 */
626 aiReturn function(
627 aiMaterial* mat,
628 aiTextureType type,
629 uint index,
630 aiString* path,
631 aiTextureMapping* mapping = null,
632 uint* uvindex = null,
633 float* blend = null,
634 aiTextureOp* op = null,
635 aiTextureMapMode* mapmode = null
636 ) aiGetMaterialTexture;
637
638
639 /*
640 * Versioning functions.
641 */
642
643 /**
644 * Returns a string with legal copyright and licensing information about
645 * Assimp.
646 *
647 * The string may include multiple lines.
648 *
649 * Returns:
650 * Pointer to static string.
651 */
652 char* function() aiGetLegalString;
653
654 /**
655 * Returns the current minor version number of the Assimp library.
656 *
657 * Returns:
658 * Minor version of the Assimp library.
659 */
660 uint function() aiGetVersionMinor;
661
662 /**
663 * Returns the current major version number of the Assimp library.
664 *
665 * Returns:
666 * Major version of the Assimp library.
667 */
668 uint function() aiGetVersionMajor;
669
670 /**
671 * Returns the repository revision of the Assimp library.
672 *
673 * Returns:
674 * SVN Repository revision number of the Assimp library.
675 */
676 uint function() aiGetVersionRevision;
677
678 /**
679 * Returns the flags Assimp was compiled with.
680 *
681 * Returns:
682 * Any bitwise combination of the ASSIMP_CFLAGS_xxx constants.
683 */
684 uint function() aiGetCompileFlags;
685 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Include-all module provided for convenience.
43 */
44 module assimp.assimp;
45
46 public {
47 import assimp.animation;
48 import assimp.api;
49 import assimp.camera;
50 import assimp.config;
51 import assimp.fileIO;
52 import assimp.light;
53 import assimp.loader;
54 import assimp.material;
55 import assimp.math;
56 import assimp.mesh;
57 import assimp.postprocess;
58 import assimp.scene;
59 import assimp.texture;
60 import assimp.types;
61 import assimp.versionInfo;
62 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Contains the data structure which is used to store the imported information
43 * about the virtual cameras in the scene.
44 */
45 module assimp.camera;
46
47 import assimp.math;
48 import assimp.types;
49
50 extern ( C ) {
51 /**
52 * Helper structure to describe a virtual camera.
53 *
54 * Cameras have a representation in the node graph and can be animated.
55 * An important aspect is that the camera itself is also part of the
56 * scenegraph. This means, any values such as the look-at vector are not
57 * absolute, they're <em>relative</em> to the coordinate system defined
58 * by the node which corresponds to the camera. This allows for camera
59 * animations. Static cameras parameters like the look-at or up vectors are
60 * usually specified directly in the class members, but beware, they could
61 * also be encoded in the node transformation. The following (pseudo)code
62 * sample shows how to do it.
63 *
64 * Examples:
65 * ---
66 * // Get the camera matrix for a camera at a specific time
67 * // if the node hierarchy for the camera does not contain
68 * // at least one animated node this is a static computation
69 * get-camera-matrix (node sceneRoot, camera cam) : matrix
70 * {
71 * node cnd = find-node-for-camera(cam)
72 * matrix cmt = identity()
73 *
74 * // as usual - get the absolute camera transformation for this frame
75 * for each node nd in hierarchy from sceneRoot to cnd
76 * matrix cur
77 * if (is-animated(nd))
78 * cur = eval-animation(nd)
79 * else cur = nd->mTransformation;
80 * cmt = mult-matrices( cmt, cur )
81 * end for
82 *
83 * // now multiply with the camera's own local transform
84 * cam = mult-matrices (cam, get-camera-matrix(cmt) )
85 * }
86 * ---
87 *
88 * Note: Some file formats (such as 3DS, ASE) export a "target point" – the
89 * point the camera is looking at (it can even be animated). Assimp
90 * writes the target point as a subnode of the camera's main node, called
91 * "<camName>.Target". However, this is just additional information; the
92 * transformation applied to the main camera node already makes the
93 * camera face the right direction.
94 */
95 struct aiCamera {
96 /**
97 * The name of the camera.
98 *
99 * There must be a node in the scenegraph with the same name. This node
100 * specifies the position of the camera in the scene hierarchy and can
101 * be animated.
102 */
103 aiString mName;
104
105
106 /**
107 * Position of the camera relative to the coordinate space defined by the
108 * corresponding node.
109 *
110 * The default value is 0|0|0.
111 */
112 aiVector3D mPosition;
113
114 /**
115 * Up vector of the camera coordinate system relative to the
116 * coordinate space defined by the corresponding node.
117 *
118 * The right vector of the camera coordinate system is the cross
119 * product of the up and lookAt vectors.
120 *
121 * The default value is 0|1|0. The vector may be normalized, but it
122 * needn't.
123 */
124 aiVector3D mUp;
125
126 /**
127 * Look-at vector of the camera coordinate system relative to the
128 * coordinate space defined by the corresponding node.
129 *
130 * This is the viewing direction of the user.
131 *
132 * The default value is 0|0|1. The vector may be normalized, but it
133 * needn't.
134 */
135 aiVector3D mLookAt;
136
137
138 /**
139 * Half horizontal field of view angle, in radians.
140 *
141 * The field of view angle is the angle between the center line of the
142 * screen and the left or right border.
143 *
144 * The default value is PI/4.
145 */
146 float mHorizontalFOV;
147
148 /**
149 * Distance of the near clipping plane from the camera.
150 *
151 * The value may not be 0.f (for arithmetic reasons to prevent
152 * a division through zero).
153 *
154 * The default value is 0.1f.
155 */
156 float mClipPlaneNear;
157
158 /**
159 * Distance of the far clipping plane from the camera.
160 *
161 * The far clipping plane must, of course, be further away than the
162 * near clipping plane. The ratio between the near and the far plane
163 * should not be too large (between 1000-10000 should be ok) to avoid
164 * floating-point inaccuracies which could lead to z-fighting.
165 *
166 * The default value is 1000.f.
167 */
168 float mClipPlaneFar;
169
170 /**
171 * Screen aspect ratio.
172 *
173 * This is the ration between the width and the height of the
174 * screen. Typical values are 4/3, 1/2 or 1/1. This value is
175 * 0 if the aspect ratio is not defined in the source file.
176 *
177 * 0 is also the default value.
178 */
179 float mAspect;
180 }
181 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Defines constants for configurable properties for the library.
43 *
44 * These are set via <code>aiSetImportPropertyInteger()</code>,
45 * <code>aiSetImportPropertyFloat()</code> and
46 * <code>aiSetImportPropertyString()</code>.
47 */
48 module assimp.config;
49
50 extern ( C ) {
51 /*
52 * Library settings.
53 *
54 * General, global settings.
55 */
56
57 /**
58 * Enables time measurements.
59 *
60 * If enabled, measures the time needed for each part of the loading
61 * process (i.e. IO time, importing, postprocessing, ..) and dumps these
62 * timings to the DefaultLogger. See the performance page in the main
63 * Assimp docs information on this topic.
64 *
65 * Property type: bool. Default value: false.
66 */
67 const char* AI_CONFIG_GLOB_MEASURE_TIME = "GLOB_MEASURE_TIME";
68
69 version( none ) { // not implemented yet
70 /**
71 * Set Assimp's multithreading policy.
72 *
73 * This setting is ignored if Assimp was built without boost.thread support
74 * (<code>ASSIMP_BUILD_NO_THREADING</code>, which is implied by
75 * <code>ASSIMP_BUILD_BOOST_WORKAROUND</code>).
76 *
77 * Possible values are: -1 to let Assimp decide what to do, 0 to disable
78 * multithreading entirely and any number larger than 0 to force a specific
79 * number of threads. Assimp is always free to ignore this settings, which
80 * is merely a hint. Usually, the default value (-1) will be fine. However,
81 * if Assimp is used concurrently from multiple user threads, it might be
82 * useful to limit each Importer instance to a specific number of cores.
83 *
84 * For more information, see the threading page in the main Assimp docs.
85 *
86 * Property type: int, default value: -1.
87 */
88 const char* AI_CONFIG_GLOB_MULTITHREADING = "GLOB_MULTITHREADING";
89 }
90
91
92 /*
93 * Post processing settings.
94 *
95 * Various options to fine-tune the behavior of a specific post processing step.
96 */
97
98 /**
99 * Specifies the maximum angle that may be between two vertex tangents that
100 * their tangents and bitangents are smoothed.
101 *
102 * This applies to the <code>CalcTangentSpace</code> step. The angle is
103 * specified in degrees, so 180 corresponds to PI radians.
104 *
105 * The default value is 45, the maximum value is 175.
106 *
107 * Property type: float.
108 */
109 const char* AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE = "PP_CT_MAX_SMOOTHING_ANGLE";
110
111 /**
112 * Specifies the maximum angle that may be between two face normals at the
113 * same vertex position that their are smoothed together. Sometimes referred
114 * to as 'crease angle'.
115 *
116 * This applies to the <code>GenSmoothNormals</code> step. The angle is
117 * specified in degrees, so 180 corresponds to PI radians.
118 *
119 * The default value is 175 degrees (all vertex normals are smoothed), the
120 * maximum value is 175, too.
121 *
122 * Property type: float.
123 *
124 * Warning:
125 * Setting this option may cause a severe loss of performance. The
126 * performance is unaffected if the <code>AI_CONFIG_FAVOUR_SPEED</code>
127 * flag is set but the output quality may be reduced.
128 */
129 const char* AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE = "PP_GSN_MAX_SMOOTHING_ANGLE";
130
131 /**
132 * Sets the colormap (= palette) to be used to decode embedded textures in
133 * MDL (Quake or 3DGS) files.
134 *
135 * This must be a valid path to a file. The file is 768 (256*3) bytes large
136 * and contains RGB triplets for each of the 256 palette entries. The
137 * default value is colormap.lmp. If the file is not found, a default
138 * palette (from Quake 1) is used.
139 *
140 * Property type: string.
141 */
142 const char* AI_CONFIG_IMPORT_MDL_COLORMAP = "IMPORT_MDL_COLORMAP";
143
144 /**
145 * Configures the <code>RemoveRedundantMaterials</code> step to keep
146 * materials matching a name in a given list.
147 *
148 * This is a list of 1 to n strings, ' ' serves as delimiter character.
149 * Identifiers containing whitespaces must be enclosed in <em>single</em>
150 * quotation marks. For example: <code>
151 * "keep-me and_me_to anotherMaterialToBeKept \'name with whitespace\'"</code>.
152 * Linefeeds, tabs or carriage returns are treated as whitespace.
153 *
154 * If a material matches on of these names, it will not be modified or
155 * removed by the postprocessing step nor will other materials be replaced
156 * by a reference to it.
157 *
158 * This option might be useful if you are using some magic material names
159 * to pass additional semantics through the content pipeline. This ensures
160 * they won't be optimized away, but a general optimization is still
161 * performed for materials not contained in the list.
162 *
163 * Default value: n/a
164 *
165 * Property type: string.
166 *
167 * Note: Material names are case sensitive.
168 */
169 const char* AI_CONFIG_PP_RRM_EXCLUDE_LIST = "PP_RRM_EXCLUDE_LIST";
170
171 /**
172 * Configures the <code>PretransformVertices</code> step to keep the scene
173 * hierarchy. Meshes are moved to worldspace, but no optimization is
174 * performed (meshes with equal materials are not joined, the total number
175 * of meshes will not change).
176 *
177 * This option could be of use for you if the scene hierarchy contains
178 * important additional information which you intend to parse.
179 * For rendering, you can still render all meshes in the scene without
180 * any transformations.
181 *
182 * Default value: false.
183 *
184 * Property type: bool.
185 */
186 const char* AI_CONFIG_PP_PTV_KEEP_HIERARCHY = "PP_PTV_KEEP_HIERARCHY";
187
188 /**
189 * Configures the <code>PretransformVertices</code> step to normalize all
190 * vertex components into the -1...1 range. That is, a bounding box for the
191 * whole scene is computed, the maximum component is taken and all meshes
192 * are scaled appropriately (uniformly of course!).
193 *
194 * This might be useful if you don't know the spatial dimension of the input
195 * data.
196 */
197 const char* AI_CONFIG_PP_PTV_NORMALIZE = "PP_PTV_NORMALIZE";
198
199 /**
200 * Configures the <code>FindDegenerates</code> step to remove degenerated
201 * primitives from the import – immediately.
202 *
203 * The default behaviour converts degenerated triangles to lines and
204 * degenerated lines to points. See the documentation to the
205 * <code>FindDegenerates</code> step for a detailed example of the various
206 * ways to get rid of these lines and points if you don't want them.
207 *
208 * Default value: false.
209 *
210 * Property type: bool.
211 */
212 const char* AI_CONFIG_PP_FD_REMOVE = "PP_FD_REMOVE";
213
214 /**
215 * Configures the <code>OptimizeGraph</code> step to preserve nodes matching
216 * a name in a given list.
217 *
218 * This is a list of 1 to n strings, ' ' serves as delimiter character.
219 * Identifiers containing whitespaces must be enclosed in <em>single</em>
220 * quotation marks. For example: <code>
221 * "keep-me and_me_to anotherMaterialToBeKept \'name with whitespace\'"</code>.
222 * Linefeeds, tabs or carriage returns are treated as whitespace.
223 *
224 * If a node matches on of these names, it will not be modified or
225 * removed by the postprocessing step.
226 *
227 * This option might be useful if you are using some magic node names
228 * to pass additional semantics through the content pipeline. This ensures
229 * they won't be optimized away, but a general optimization is still
230 * performed for nodes not contained in the list.
231 *
232 * Default value: n/a
233 *
234 * Property type: string.
235 *
236 * Note: Node names are case sensitive.
237 */
238 const char* AI_CONFIG_PP_OG_EXCLUDE_LIST = "PP_OG_EXCLUDE_LIST";
239
240 /**
241 * Sets the maximum number of triangles in a mesh.
242 *
243 * This is used by the <code>SplitLargeMeshes</code> step to determine
244 * whether a mesh must be split or not.
245 *
246 * Default value: AI_SLM_DEFAULT_MAX_TRIANGLES.
247 *
248 * Property type: integer.
249 */
250 const char* AI_CONFIG_PP_SLM_TRIANGLE_LIMIT = "PP_SLM_TRIANGLE_LIMIT";
251
252 /**
253 * The default value for the AI_CONFIG_PP_SLM_TRIANGLE_LIMIT setting.
254 */
255 const AI_SLM_DEFAULT_MAX_TRIANGLES = 1000000;
256
257 /**
258 * Sets the maximum number of vertices in a mesh.
259 *
260 * This is used by the <code>SplitLargeMeshes</code> step to determine
261 * whether a mesh must be split or not.
262 *
263 * Default value: AI_SLM_DEFAULT_MAX_VERTICES
264 *
265 * Property type: integer.
266 */
267 const char* AI_CONFIG_PP_SLM_VERTEX_LIMIT = "PP_SLM_VERTEX_LIMIT";
268
269 /**
270 * The default value for the AI_CONFIG_PP_SLM_VERTEX_LIMIT setting.
271 */
272 const AI_SLM_DEFAULT_MAX_VERTICES = 1000000;
273
274 /**
275 * Sets the maximum number of bones affecting a single vertex.
276 *
277 * This is used by the <code>LimitBoneWeights</code> step.
278 *
279 * Default value: AI_LBW_MAX_WEIGHTS
280 *
281 * Property type: integer.
282 */
283 const char* AI_CONFIG_PP_LBW_MAX_WEIGHTS = "PP_LBW_MAX_WEIGHTS";
284
285 /**
286 * The default value for the AI_CONFIG_PP_LBW_MAX_WEIGHTS setting.
287 */
288 const AI_LMW_MAX_WEIGHTS = 0x4;
289
290 /**
291 * Sets the size of the post-transform vertex cache to optimize the
292 * vertices for. This configures the <code>ImproveCacheLocality</code> step.
293 *
294 * The size is given in vertices. Of course you can't know how the vertex
295 * format will exactly look like after the import returns, but you can still
296 * guess what your meshes will probably have.
297 *
298 * The default value results in slight performance improvements for most
299 * nVidia/AMD cards since 2002.
300 *
301 * Default value: PP_ICL_PTCACHE_SIZE
302 *
303 * Property type: integer.
304 */
305 const char* AI_CONFIG_PP_ICL_PTCACHE_SIZE = "PP_ICL_PTCACHE_SIZE";
306
307 /**
308 * The default value for the AI_CONFIG_PP_ICL_PTCACHE_SIZE config option.
309 */
310 const PP_ICL_PTCACHE_SIZE = 12;
311
312 /**
313 * Components of the <code>aiScene</code> and <code>aiMesh</code> data
314 * structures that can be excluded from the import by using the
315 * <code>RemoveComponent</code> step.
316 *
317 * See the documentation to <code>RemoveComponent</code> for more details.
318 */
319 enum aiComponent : uint {
320 /**
321 * Normal vectors.
322 */
323 NORMALS = 0x2,
324
325 /**
326 * Tangents and bitangents.
327 */
328 TANGENTS_AND_BITANGENTS = 0x4,
329
330 /**
331 * <em>All</em> color sets.
332 *
333 * Use aiComponent_COLORSn( N ) to specify the N'th set.
334 */
335 COLORS = 0x8,
336
337 /**
338 * <em>All</em> texture UV coordinate sets.
339 *
340 * Use aiComponent_TEXCOORDn( N ) to specify the N'th set.
341 */
342 TEXCOORDS = 0x10,
343
344 /**
345 * Bone weights from all meshes.
346 *
347 * The corresponding scenegraph nodes are <em>not</em> removed. Use the
348 * <code>OptimizeGraph</code> step to do this.
349 */
350 BONEWEIGHTS = 0x20,
351
352 /**
353 * Node animations (<code>aiScene.mAnimations</code>).
354 *
355 * The corresponding scenegraph nodes are <em>not</em> removed. Use the
356 * <code>OptimizeGraph</code> step to do this.
357 */
358 ANIMATIONS = 0x40,
359
360 /**
361 * Embedded textures (<code>aiScene.mTextures</code>).
362 */
363 TEXTURES = 0x80,
364
365 /**
366 * Light sources (<code>aiScene.mLights</code>).
367 *
368 * The corresponding scenegraph nodes are <em>not</em> removed. Use the
369 * <code>OptimizeGraph</code> step to do this.
370 */
371 LIGHTS = 0x100,
372
373 /**
374 * Cameras (<code>aiScene.mCameras</code>).
375 *
376 * The corresponding scenegraph nodes are <em>not</em> removed. Use the
377 * <code>OptimizeGraph</code> step to do this.
378 */
379 CAMERAS = 0x200,
380
381 /**
382 * Meshes (<code>aiScene.mMeshes</code>).
383 */
384 MESHES = 0x400,
385
386 /** Materials.
387 *
388 * One default material will be generated, so
389 * <code>aiScene.mNumMaterials</code> will be 1.
390 */
391 MATERIALS = 0x800
392 }
393
394 /**
395 * Specifies a certain color channel to remove.
396 */
397 uint aiComponent_COLORSn( uint n ) { return 1u << ( n + 20u ); }
398
399 /**
400 * Specifies a certain UV coordinate channel to remove.
401 */
402 uint aiComponent_TEXCOORDSn( uint n ) { return 1u << ( n + 25u ); }
403
404 /**
405 * Input parameter to the <code>RemoveComponent</code> step:
406 * Specifies the parts of the data structure to be removed.
407 *
408 * See the documentation to this step for further details.
409 *
410 * Default value: 0
411 *
412 * Property type: integer (bitwise combination of <code>aiComponent</code>
413 * flags).
414 *
415 * Note: If no valid mesh is remaining after the step has been executed, the
416 * import <em>fails</em>, because there is no data to work on anymore.
417 */
418 const char* AI_CONFIG_PP_RVC_FLAGS = "PP_RVC_FLAGS";
419
420 /**
421 * Input parameter to the <code>SortByPType</code> step:
422 * Specifies which primitive types are removed by the step.
423 *
424 * This is a bitwise combination of the <code>aiPrimitiveType</code> flags.
425 * Specifying all of them is illegal, of course. A typical use would be to
426 * exclude all line and point meshes from the import.
427 *
428 * Default value: 0
429 *
430 * Property type: integer.
431 */
432 const char* AI_CONFIG_PP_SBP_REMOVE = "PP_SBP_REMOVE";
433
434 /**
435 * Input parameter to the <code>FindInvalidData</code> step:
436 * Specifies the floating-point accuracy for animation values.
437 *
438 * The step checks for animation tracks where all frame values are
439 * absolutely equal and removes them. This tweakable controls the epsilon
440 * for floating-point comparisons – two keys are considered equal if the
441 * invariant abs(n0-n1) > epsilon holds true for all vector respectively
442 * quaternion components.
443 *
444 * Default value: 0 (exact comparison).
445 *
446 * Property type: float.
447 */
448 const char* AI_CONFIG_PP_FID_ANIM_ACCURACY = "PP_FID_ANIM_ACCURACY";
449
450 /**
451 * The <code>TransformUVCoords</code> step evaluates UV scalings.
452 */
453 const AI_UVTRAFO_SCALING = 0x1;
454
455 /**
456 * The <code>TransformUVCoords</code> step evaluates UV rotations.
457 */
458 const AI_UVTRAFO_ROTATION = 0x2;
459
460 /**
461 * The <code>TransformUVCoords</code> step evaluates UV translation.
462 */
463 const AI_UVTRAFO_TRANSLATION = 0x4;
464
465 /**
466 * The <code>TransformUVCoords</code> step evaluates all UV translations.
467 */
468 const AI_UVTRAFO_ALL =
469 AI_UVTRAFO_SCALING
470 | AI_UVTRAFO_ROTATION
471 | AI_UVTRAFO_TRANSLATION;
472
473 /**
474 * Input parameter to the <code>TransformUVCoords</code> step: Specifies
475 * which UV transformations are evaluated.
476 *
477 * Default value: AI_UVTRAFO_ALL.
478 *
479 * Property type: integer (bitwise combination of the
480 * <code>AI_UVTRAFO_XXX<code> flag).
481 */
482 const char* AI_CONFIG_PP_TUV_EVALUATE = "PP_TUV_EVALUATE";
483
484 /**
485 * A hint to assimp to favour speed against import quality.
486 *
487 * Enabling this option may result in faster loading, but it needn't.
488 * It represents just a hint to loaders and post-processing steps to use
489 * faster code paths, if possible.
490 *
491 * Default value: false.
492 *
493 * Property type: bool.
494 */
495 const char* AI_CONFIG_FAVOUR_SPEED = "FAVOUR_SPEED";
496
497
498 /*
499 * Importer settings.
500 *
501 * Various stuff to fine-tune the behaviour of specific importer plugins.
502 */
503
504 /**
505 * Set the vertex animation keyframe to be imported.
506 *
507 * Assimp does not support vertex keyframes (only bone animation is
508 * supported). The library reads only one frame of models with vertex
509 * animations.
510 *
511 * Default value: 0 (first frame).
512 *
513 * Property type: integer.
514 *
515 * Note: This option applies to all importers. However, it is also possible
516 * to override the global setting for a specific loader. You can use the
517 * AI_CONFIG_IMPORT_XXX_KEYFRAME options (where XXX is a placeholder for
518 * the file format for which you want to override the global setting).
519 */
520 const char* AI_CONFIG_IMPORT_GLOBAL_KEYFRAME = "IMPORT_GLOBAL_KEYFRAME";
521
522 const char* AI_CONFIG_IMPORT_MD3_KEYFRAME = "IMPORT_MD3_KEYFRAME";
523 const char* AI_CONFIG_IMPORT_MD2_KEYFRAME = "IMPORT_MD2_KEYFRAME";
524 const char* AI_CONFIG_IMPORT_MDL_KEYFRAME = "IMPORT_MDL_KEYFRAME";
525 const char* AI_CONFIG_IMPORT_MDC_KEYFRAME = "IMPORT_MDC_KEYFRAME";
526 const char* AI_CONFIG_IMPORT_SMD_KEYFRAME = "IMPORT_SMD_KEYFRAME";
527 const char* AI_CONFIG_IMPORT_UNREAL_KEYFRAME = "IMPORT_UNREAL_KEYFRAME";
528
529
530 /**
531 * Configures the AC loader to collect all surfaces which have the
532 * "Backface cull" flag set in separate meshes.
533 *
534 * Default value: true.
535 *
536 * Property type: bool.
537 */
538 const char* AI_CONFIG_IMPORT_AC_SEPARATE_BFCULL = "IMPORT_AC_SEPARATE_BFCULL";
539
540 /**
541 * Configures the UNREAL 3D loader to separate faces with different surface
542 * flags (e.g. two-sided vs. single-sided).
543 *
544 * Default value: true.
545 *
546 * Property type: bool.
547 */
548 const char* AI_CONFIG_IMPORT_UNREAL_HANDLE_FLAGS = "UNREAL_HANDLE_FLAGS";
549
550 /**
551 * Configures the terragen import plugin to compute uv's for terrains, if
552 * not given. Furthermore, a default texture is assigned.
553 *
554 * UV coordinates for terrains are so simple to compute that you'll usually
555 * want to compute them on your own, if you need them. This option is intended
556 * for model viewers which want to offer an easy way to apply textures to
557 * terrains.
558 *
559 * Default value: false.
560 *
561 * Property type: bool.
562 */
563 const char* AI_CONFIG_IMPORT_TER_MAKE_UVS = "IMPORT_TER_MAKE_UVS";
564
565 /**
566 * Configures the ASE loader to always reconstruct normal vectors basing on
567 * the smoothing groups loaded from the file.
568 *
569 * Many ASE files have invalid normals (they're not orthonormal).
570 *
571 * Default value: true.
572 *
573 * Property type: bool.
574 */
575 const char* AI_CONFIG_IMPORT_ASE_RECONSTRUCT_NORMALS = "IMPORT_ASE_RECONSTRUCT_NORMALS";
576
577 /**
578 * Configures the M3D loader to detect and process multi-part Quake player
579 * models.
580 *
581 * These models usually consist of three files, <code>lower.md3</code>,
582 * <code>upper.md3</code> and <code>head.md3</code>. If this property is set
583 * to true, Assimp will try to load and combine all three files if one of
584 * them is loaded.
585 *
586 * Default value: true.
587 *
588 * Property type: bool.
589 */
590 const char* AI_CONFIG_IMPORT_MD3_HANDLE_MULTIPART = "IMPORT_MD3_HANDLE_MULTIPART";
591
592 /**
593 * Tells the MD3 loader which skin files to load.
594 *
595 * When loading MD3 files, Assimp checks whether a file
596 * <code><md3_file_name>_<skin_name>.skin</code> is existing. These files
597 * are used by Quake 3 to be able to assign different skins (e.g. red and
598 * blue team) to models. 'default', 'red', 'blue' are typical skin names.
599 *
600 * Default value: "default".
601 *
602 * Property type: string.
603 */
604 const char* AI_CONFIG_IMPORT_MD3_SKIN_NAME = "IMPORT_MD3_SKIN_NAME";
605
606 /**
607 * Specify the Quake 3 shader file to be used for a particular MD3 file.
608 * This can also be a search path.
609 *
610 * By default Assimp's behaviour is as follows: If a MD3 file
611 * <code>[any_path]/models/[any_q3_subdir]/[model_name]/[file_name].md3</code>
612 * is loaded, the library tries to locate the corresponding shader file in
613 * <code>[any_path]/scripts/[model_name].shader</code>. This property
614 * overrides this behaviour. It can either specify a full path to the shader
615 * to be loaded or alternatively the path (relative or absolute) to the
616 * directory where the shaders for all MD3s to be loaded reside. Assimp
617 * attempts to open <code>[dir]/[model_name].shader</code> first,
618 * <code>[dir]/[file_name].shader</code> is the fallback file. Note that
619 * <code>[dir]</code> should have a terminal (back)slash.
620 *
621 * Default value: n/a.
622 *
623 * Property type: string.
624 */
625 const char* AI_CONFIG_IMPORT_MD3_SHADER_SRC = "IMPORT_MD3_SHADER_SRC";
626
627 /**
628 * Configures the LWO loader to load just one layer from the model.
629 *
630 * LWO files consist of layers and in some cases it could be useful to load
631 * only one of them. This property can be either a string – which specifies
632 * the name of the layer – or an integer – the index of the layer. If the
633 * property is not set the whole LWO model is loaded. Loading fails if the
634 * requested layer is not available. The layer index is zero-based and the
635 * layer name may not be empty.
636 *
637 * Default value: all layers are loaded.
638 *
639 * Property type: integer/string.
640 */
641 const char* AI_CONFIG_IMPORT_LWO_ONE_LAYER_ONLY = "IMPORT_LWO_ONE_LAYER_ONLY";
642
643 /**
644 * Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file
645 * automatically.
646 *
647 * The default strategy is to look for a file with the same name but the
648 * MD5ANIM extension in the same directory. If it is found, it is loaded
649 * and combined with the MD5MESH file. This configuration option can be
650 * used to disable this behaviour.
651 *
652 * Default value: false.
653 *
654 * Property type: bool.
655 */
656 const char* AI_CONFIG_IMPORT_MD5_NO_ANIM_AUTOLOAD = "IMPORT_MD5_NO_ANIM_AUTOLOAD";
657
658 /**
659 * Defines the begin of the time range for which the LWS loader evaluates
660 * animations and computes <code>aiNodeAnim</code>s.
661 *
662 * Assimp provides full conversion of LightWave's envelope system, including
663 * pre and post conditions. The loader computes linearly subsampled animation
664 * chanels with the frame rate given in the LWS file. This property defines
665 * the start time. Note: animation channels are only generated if a node
666 * has at least one envelope with more tan one key assigned. This property.
667 * is given in frames, '0' is the first frame. By default, if this property
668 * is not set, the importer takes the animation start from the input LWS
669 * file ('FirstFrame' line).
670 *
671 * Default value: read from file.
672 *
673 * Property type: integer.
674 *
675 * See: <code>AI_CONFIG_IMPORT_LWS_ANIM_END</code> – end of the imported
676 * time range
677 */
678 const char* AI_CONFIG_IMPORT_LWS_ANIM_START = "IMPORT_LWS_ANIM_START";
679 const char* AI_CONFIG_IMPORT_LWS_ANIM_END = "IMPORT_LWS_ANIM_END";
680
681 /**
682 * Defines the output frame rate of the IRR loader.
683 *
684 * IRR animations are difficult to convert for Assimp and there will always
685 * be a loss of quality. This setting defines how many keys per second are
686 * returned by the converter.
687 *
688 * Default value: 100.
689 *
690 * Property type: integer.
691 */
692 const char* AI_CONFIG_IMPORT_IRR_ANIM_FPS = "IMPORT_IRR_ANIM_FPS";
693
694 /**
695 * Ogre Importer will try to load this material file.
696 *
697 * Ogre Mehs contain only the material name, not the material file. If there
698 * is no material file with the same name as the material, Ogre Importer
699 * will try to load this file and search the material in it.
700 *
701 * Property type: string. Default value: "Scene.material".
702 */
703 const char* AI_CONFIG_IMPORT_OGRE_MATERIAL_FILE = "IMPORT_OGRE_MATERIAL_FILE";
704 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * The data structures necessary to use Assimip with a custom IO system.
43 */
44 module assimp.fileIO;
45
46 import assimp.types;
47
48 extern ( C ) {
49 // aiFile callbacks
50 alias size_t function( aiFile*, char*, size_t, size_t ) aiFileWriteProc;
51 alias size_t function( aiFile*, char*, size_t, size_t ) aiFileReadProc;
52 alias size_t function( aiFile* ) aiFileTellProc;
53 alias void function( aiFile* ) aiFileFlushProc;
54 alias aiReturn function( aiFile*, size_t, aiOrigin ) aiFileSeek;
55
56 // aiFileIO callbacks
57 alias aiFile* function( aiFileIO*, char*, char* ) aiFileOpenProc;
58 alias void function( aiFileIO*, aiFile* ) aiFileCloseProc;
59
60 /**
61 * Represents user-defined data.
62 */
63 alias char* aiUserData;
64
65 /**
66 * File system callbacks.
67 *
68 * Provided are functions to open and close files. Supply a custom structure
69 * to the import function. If you don't, a default implementation is used.
70 * Use custom file systems to enable reading from other sources, such as
71 * ZIPs or memory locations.
72 */
73 struct aiFileIO {
74 /**
75 * Function used to open a new file
76 */
77 aiFileOpenProc OpenProc;
78
79 /**
80 * Function used to close an existing file
81 */
82 aiFileCloseProc CloseProc;
83
84 /**
85 * User-defined, opaque data.
86 */
87 aiUserData UserData;
88 }
89
90 /**
91 * File callbacks.
92 *
93 * Actually, it's a data structure to wrap a set of <code>fXXXX</code>
94 * (e.g <code>fopen()</code>) replacement functions.
95 *
96 * The default implementation of the functions utilizes the <code>fXXX</code>
97 * functions from the CRT. However, you can supply a custom implementation
98 * to Assimp by passing a custom <code>aiFileIO</code>. Use this to enable
99 * reading from other sources such as ZIP archives or memory locations.
100 */
101 struct aiFile {
102 /**
103 * Callback to read from a file.
104 */
105 aiFileReadProc ReadProc;
106
107 /**
108 * Callback to write to a file.
109 */
110 aiFileWriteProc WriteProc;
111
112 /**
113 * Callback to retrieve the current position of the file cursor
114 * (<code>ftell()</code>).
115 */
116 aiFileTellProc TellProc;
117
118 /**
119 * Callback to retrieve the size of the file, in bytes.
120 */
121 aiFileTellProc FileSizeProc;
122
123 /**
124 * Callback to set the current position of the file cursor
125 * (<code>fseek()</code>).
126 */
127 aiFileSeek SeekProc;
128
129 /**
130 * Callback to flush the file contents.
131 */
132 aiFileFlushProc FlushProc;
133
134 /**
135 * User-defined, opaque data.
136 */
137 aiUserData UserData;
138 }
139 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Contains the data structures which are used to store the imported information
43 * about the light sources in the scene.
44 */
45 module assimp.light;
46
47 import assimp.math;
48 import assimp.types;
49
50 extern ( C ) {
51 /**
52 * Enumerates all supported types of light sources.
53 */
54 enum aiLightSourceType : uint {
55 UNDEFINED = 0x0,
56
57 /**
58 * A directional light source has a well-defined direction but is
59 * infinitely far away. That's quite a good approximation for sun light.
60 */
61 DIRECTIONAL = 0x1,
62
63 /**
64 * A point light source has a well-defined position in space but no
65 * direction – it emits light in all directions. A normal bulb is a point
66 * light.
67 */
68 POINT = 0x2,
69
70 /**
71 * A spot light source emits light in a specific angle. It has a position
72 * and a direction it is pointing to. A good example for a spot light is
73 * a light spot in sport arenas.
74 */
75 SPOT = 0x3
76 }
77
78 /**
79 * Helper structure to describe a light source.
80 *
81 * Assimp supports multiple sorts of light sources, including directional,
82 * point and spot lights. All of them are defined with just a single
83 * structure and distinguished by their parameters.
84 *
85 * Note: Some file formats (such as 3DS, ASE) export a "target point" – the
86 * point a spot light is looking at (it can even be animated). Assimp
87 * writes the target point as a subnode of a spotlights's main node, called
88 * <code>[spotName].Target</code>. However, this is just additional
89 * information then, the transformation tracks of the main node make the
90 * spot light already point in the right direction.
91 */
92 struct aiLight {
93 /**
94 * The name of the light source.
95 *
96 * There must be a node in the scenegraph with the same name. This node
97 * specifies the position of the light in the scenehierarchy and can be
98 * animated.
99 */
100 aiString mName;
101
102 /**
103 * The type of the light source.
104 *
105 * <code>aiLightSource.UNDEFINED</code> is not a valid value for this
106 * member.
107 */
108 aiLightSourceType mType;
109
110 /**
111 * Position of the light source in space. Relative to the transformation
112 * of the node corresponding to the light.
113 *
114 * The position is undefined for directional lights.
115 */
116 aiVector3D mPosition;
117
118 /**
119 * Direction of the light source in space. Relative to the transformation
120 * of the node corresponding to the light.
121 *
122 * The direction is undefined for point lights. The vector may be
123 * normalized, but it needn't.
124 */
125 aiVector3D mDirection;
126
127 /**
128 * Constant light attenuation factor.
129 *
130 * The intensity of the light source at a given distance
131 * <code>d</code> from the light's position is
132 * <code>1/( att0 + att1 * d + att2 * d * d )</code>. This member
133 * corresponds to the <code>att0</code> variable in the equation.
134 *
135 * Naturally undefined for directional lights.
136 */
137 float mAttenuationConstant;
138
139 /**
140 * Linear light attenuation factor.
141 *
142 * The intensity of the light source at a given distance
143 * <code>d</code> from the light's position is
144 * <code>1/( att0 + att1 * d + att2 * d * d )</code>. This member
145 * corresponds to the <code>att1</code> variable in the equation.
146 *
147 * Naturally undefined for directional lights.
148 */
149 float mAttenuationLinear;
150
151 /**
152 * Quadratic light attenuation factor.
153 *
154 * The intensity of the light source at a given distance
155 * <code>d</code> from the light's position is
156 * <code>1/( att0 + att1 * d + att2 * d * d )</code>. This member
157 * corresponds to the <code>att2</code> variable in the equation.
158 *
159 * Naturally undefined for directional lights.
160 */
161 float mAttenuationQuadratic;
162
163 /**
164 * Diffuse color of the light source
165 *
166 * The diffuse light color is multiplied with the diffuse material color
167 * to obtain the final color that contributes to the diffuse shading term.
168 */
169 aiColor3D mColorDiffuse;
170
171 /**
172 * Specular color of the light source
173 *
174 * The specular light color is multiplied with the specular material
175 * color to obtain the final color that contributes to the specular
176 * shading term.
177 */
178 aiColor3D mColorSpecular;
179
180 /**
181 * Ambient color of the light source
182 *
183 * The ambient light color is multiplied with the ambient material color
184 * to obtain the final color that contributes to the ambient shading term.
185 *
186 * Most renderers will ignore this value it, is just a remaining of the
187 * fixed-function pipeline that is still supported by quite many file
188 * formats.
189 */
190 aiColor3D mColorAmbient;
191
192 /**
193 * Inner angle of a spot light's light cone.
194 *
195 * The spot light has maximum influence on objects inside this angle. The
196 * angle is given in radians. It is 2PI for point lights and undefined
197 * for directional lights.
198 */
199 float mAngleInnerCone;
200
201 /**
202 * Outer angle of a spot light's light cone.
203 *
204 * The spot light does not affect objects outside this angle. The angle
205 * is given in radians. It is 2PI for point lights and undefined for
206 * directional lights. The outer angle must be greater than or equal to
207 * the inner angle.
208 *
209 * It is assumed that the application uses a smooth interpolation between
210 * the inner and the outer cone of the spot light.
211 */
212 float mAngleOuterCone;
213 }
214 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Provides facilities for dynamically loading the Assimp library.
43 *
44 * Currently requires Tango, but there is no reason why Phobos could not be
45 * supported too.
46 */
47 module assimp.loader;
48
49 import assimp.api;
50 import tango.io.Stdout;
51 import tango.sys.SharedLib;
52
53 const uint ASSIMP_BINDINGS_MAJOR = 2;
54 const uint ASSIMP_BINDINGS_MINOR = 0;
55
56 /**
57 * Loader class for dynamically loading the Assimp library.
58 *
59 * The library is »reference-counted«, meaning that the library is not
60 * unloaded on a call to <code>unload()</code> if there are still other
61 * references to it.
62 */
63 struct Assimp {
64 public:
65 /**
66 * Loads the library if it is not already loaded and increases the
67 * reference counter.
68 *
69 * The library file (<code>libassimp.so</code> on POSIX systems,
70 * <code>Assimp32.dll</code> on Win32) is loaded via Tango's SharedLib
71 * class.
72 */
73 static void load() {
74 if ( m_sRefCount == 0 ) {
75 version ( Posix ) {
76 version ( OSX ) {
77 m_sLibrary = SharedLib.load( "libassimp.dylib" );
78 } else {
79 m_sLibrary = SharedLib.load( "libassimp.so" );
80 }
81 }
82 version ( Win32 ) {
83 m_sLibrary = SharedLib.load( "Assimp32.dll" );
84 }
85
86 // Versioning
87 mixin( bindCode( "aiGetLegalString" ) );
88 mixin( bindCode( "aiGetVersionMinor" ) );
89 mixin( bindCode( "aiGetVersionMajor" ) );
90 mixin( bindCode( "aiGetVersionRevision" ) );
91 mixin( bindCode( "aiGetCompileFlags" ) );
92
93 // Check for version mismatch between the external, dynamically loaded
94 // library and the version the bindings were created against.
95 uint libMajor = aiGetVersionMajor();
96 uint libMinor = aiGetVersionMinor();
97
98 if ( ( libMajor < ASSIMP_BINDINGS_MAJOR ) ||
99 ( libMinor < ASSIMP_BINDINGS_MINOR ) ) {
100 Stdout.format(
101 "WARNING: Assimp version too old (loaded library: {}.{}, " ~
102 "bindings: {}.{})!",
103 libMajor,
104 libMinor,
105 ASSIMP_BINDINGS_MAJOR,
106 ASSIMP_BINDINGS_MINOR
107 ).newline;
108 }
109
110 if ( libMajor > ASSIMP_BINDINGS_MAJOR ) {
111 Stdout.format(
112 "WARNING: Assimp version too new (loaded library: {}.{}, " ~
113 "bindings: {}.{})!",
114 libMajor,
115 libMinor,
116 ASSIMP_BINDINGS_MAJOR,
117 ASSIMP_BINDINGS_MINOR
118 ).newline;
119 }
120
121 // General API
122 mixin( bindCode( "aiImportFile" ) );
123 mixin( bindCode( "aiImportFileEx" ) );
124 mixin( bindCode( "aiImportFileFromMemory" ) );
125 mixin( bindCode( "aiApplyPostProcessing" ) );
126 mixin( bindCode( "aiGetPredefinedLogStream" ) );
127 mixin( bindCode( "aiAttachLogStream" ) );
128 mixin( bindCode( "aiEnableVerboseLogging" ) );
129 mixin( bindCode( "aiDetachLogStream" ) );
130 mixin( bindCode( "aiDetachAllLogStreams" ) );
131 mixin( bindCode( "aiReleaseImport" ) );
132 mixin( bindCode( "aiGetErrorString" ) );
133 mixin( bindCode( "aiIsExtensionSupported" ) );
134 mixin( bindCode( "aiGetExtensionList" ) );
135 mixin( bindCode( "aiGetMemoryRequirements" ) );
136 mixin( bindCode( "aiSetImportPropertyInteger" ) );
137 mixin( bindCode( "aiSetImportPropertyFloat" ) );
138 mixin( bindCode( "aiSetImportPropertyString" ) );
139
140 // Mathematical functions
141 mixin( bindCode( "aiCreateQuaternionFromMatrix" ) );
142 mixin( bindCode( "aiDecomposeMatrix" ) );
143 mixin( bindCode( "aiTransposeMatrix4" ) );
144 mixin( bindCode( "aiTransposeMatrix3" ) );
145 mixin( bindCode( "aiTransformVecByMatrix3" ) );
146 mixin( bindCode( "aiTransformVecByMatrix4" ) );
147 mixin( bindCode( "aiMultiplyMatrix4" ) );
148 mixin( bindCode( "aiMultiplyMatrix3" ) );
149 mixin( bindCode( "aiIdentityMatrix3" ) );
150 mixin( bindCode( "aiIdentityMatrix4" ) );
151
152 // Material system
153 mixin( bindCode( "aiGetMaterialProperty" ) );
154 mixin( bindCode( "aiGetMaterialFloatArray" ) );
155 mixin( bindCode( "aiGetMaterialIntegerArray" ) );
156 mixin( bindCode( "aiGetMaterialColor" ) );
157 mixin( bindCode( "aiGetMaterialString" ) );
158 mixin( bindCode( "aiGetMaterialTextureCount" ) );
159 mixin( bindCode( "aiGetMaterialTexture" ) );
160 }
161 ++m_sRefCount;
162 }
163
164 /**
165 * Decreases the reference counter and unloads the library if this was the
166 * last reference.
167 */
168 static void unload() {
169 assert( m_sRefCount > 0 );
170 --m_sRefCount;
171
172 if ( m_sRefCount == 0 ) {
173 m_sLibrary.unload();
174 }
175 }
176
177 private:
178 /// Current number of references to the library.
179 static uint m_sRefCount;
180
181 /// Library handle.
182 static SharedLib m_sLibrary;
183 }
184
185 /**
186 * Private helper function which constructs the bind command for a symbol to
187 * keep the code DRY.
188 */
189 private char[] bindCode( char[] symbol ) {
190 return symbol ~ " = cast( typeof( " ~ symbol ~
191 " ) )m_sLibrary.getSymbol( `" ~ symbol ~ "` );";
192 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Contains the material system which stores the imported material information.
43 */
44 module assimp.material;
45
46 import assimp.math;
47 import assimp.types;
48
49 extern ( C ) {
50 /**
51 * Default material names for meshes without UV coordinates.
52 */
53 const char* AI_DEFAULT_MATERIAL_NAME = "aiDefaultMat";
54
55 /**
56 * Default material names for meshes with UV coordinates.
57 */
58 const char* AI_DEFAULT_TEXTURED_MATERIAL_NAME = "TexturedDefaultMaterial";
59
60 /**
61 * Defines how the Nth texture of a specific type is combined with the
62 * result of all previous layers.
63 *
64 * Example (left: key, right: value):
65 * <pre> DiffColor0 - gray
66 * DiffTextureOp0 - aiTextureOpMultiply
67 * DiffTexture0 - tex1.png
68 * DiffTextureOp0 - aiTextureOpAdd
69 * DiffTexture1 - tex2.png</pre>
70 * Written as equation, the final diffuse term for a specific pixel would be:
71 * <pre>diffFinal = DiffColor0 * sampleTex( DiffTexture0, UV0 ) +
72 * sampleTex( DiffTexture1, UV0 ) * diffContrib;</pre>
73 * where <code>diffContrib</code> is the intensity of the incoming light for
74 * that pixel.
75 */
76 enum aiTextureOp : uint {
77 /**
78 * <code>T = T1 * T2</code>
79 */
80 Multiply = 0x0,
81
82 /**
83 * <code>T = T1 + T2</code>
84 */
85 Add = 0x1,
86
87 /**
88 * <code>T = T1 - T2</code>
89 */
90 Subtract = 0x2,
91
92 /**
93 * <code>T = T1 / T2</code>
94 */
95 Divide = 0x3,
96
97 /**
98 * <code>T = ( T1 + T2 ) - ( T1 * T2 )</code>
99 */
100 SmoothAdd = 0x4,
101
102 /**
103 * <code>T = T1 + ( T2 - 0.5 )</code>
104 */
105 SignedAdd = 0x5
106 }
107
108 /**
109 * Defines how UV coordinates outside the <code>[0..1]</code> range are
110 * handled.
111 *
112 * Commonly refered to as 'wrapping mode'.
113 */
114 enum aiTextureMapMode : uint {
115 /**
116 * A texture coordinate <code>u | v</code> is translated to
117 * <code>(u%1) | (v%1)</code>.
118 */
119 Wrap = 0x0,
120
121 /**
122 * Texture coordinates are clamped to the nearest valid value.
123 */
124 Clamp = 0x1,
125
126 /**
127 * If the texture coordinates for a pixel are outside
128 * <code>[0..1]</code>, the texture is not applied to that pixel.
129 */
130 Decal = 0x3,
131
132 /**
133 * A texture coordinate <code>u | v</code> becomes
134 * <code>(u%1) | (v%1)</code> if <code>(u-(u%1))%2</code> is
135 * zero and <code>(1-(u%1)) | (1-(v%1))</code> otherwise.
136 */
137 Mirror = 0x2
138 }
139
140 /**
141 * Defines how the mapping coords for a texture are generated.
142 *
143 * Real-time applications typically require full UV coordinates, so the use of
144 * the <code>aiProcess.GenUVCoords</code> step is highly recommended. It
145 * generates proper UV channels for non-UV mapped objects, as long as an
146 * accurate description how the mapping should look like (e.g spherical) is
147 * given. See the <code>AI_MATKEY_MAPPING</code> property for more details.
148 */
149 enum aiTextureMapping : uint {
150 /**
151 * The mapping coordinates are taken from an UV channel.
152 *
153 * The <code>AI_MATKEY_UVSRC</code> key specifies from which (remember,
154 * meshes can have more than one UV channel).
155 */
156 UV = 0x0,
157
158 /**
159 * Spherical mapping.
160 */
161 SPHERE = 0x1,
162
163 /**
164 * Cylindrical mapping.
165 */
166 CYLINDER = 0x2,
167
168 /**
169 * Cubic mapping.
170 */
171 BOX = 0x3,
172
173 /**
174 * Planar mapping.
175 */
176 PLANE = 0x4,
177
178 /**
179 * Undefined mapping.
180 */
181 OTHER = 0x5
182 }
183
184 /**
185 * Defines the purpose of a texture
186 *
187 * This is a very difficult topic. Different 3D packages support different
188 * kinds of textures. For very common texture types, such as bumpmaps, the
189 * rendering results depend on implementation details in the rendering
190 * pipelines of these applications. Assimp loads all texture references from
191 * the model file and tries to determine which of the predefined texture
192 * types below is the best choice to match the original use of the texture
193 * as closely as possible.
194 *
195 * In content pipelines you'll usually define how textures have to be
196 * handled, and the artists working on models have to conform to this
197 * specification, regardless which 3D tool they're using.
198 */
199 enum aiTextureType : uint {
200 /**
201 * No texture, but the value to be used for
202 * <code>aiMaterialProperty.mSemantic</code> for all material properties
203 * <em>not</em> related to textures.
204 */
205 NONE = 0x0,
206
207 /**
208 * The texture is combined with the result of the diffuse lighting
209 * equation.
210 */
211 DIFFUSE = 0x1,
212
213 /**
214 * The texture is combined with the result of the specular lighting
215 * equation.
216 */
217 SPECULAR = 0x2,
218
219 /**
220 * The texture is combined with the result of the ambient lighting
221 * equation.
222 */
223 AMBIENT = 0x3,
224
225 /**
226 * The texture is added to the result of the lighting calculation. It
227 * isn't influenced by incoming light.
228 */
229 EMISSIVE = 0x4,
230
231 /**
232 * The texture is a height map.
233 *
234 * By convention, higher grey-scale values stand for higher elevations
235 * from the base height.
236 */
237 HEIGHT = 0x5,
238
239 /**
240 * The texture is a (tangent space) normal-map.
241 *
242 * Again, there are several conventions for tangent-space normal maps.
243 * Assimp does (intentionally) not differenciate here.
244 */
245 NORMALS = 0x6,
246
247 /**
248 * The texture defines the glossiness of the material.
249 *
250 * The glossiness is in fact the exponent of the specular (phong)
251 * lighting equation. Usually there is a conversion function defined to
252 * map the linear color values in the texture to a suitable exponent.
253 */
254 SHININESS = 0x7,
255
256 /**
257 * The texture defines per-pixel opacity.
258 *
259 * Usually white means opaque and black means transparent.
260 */
261 OPACITY = 0x8,
262
263 /**
264 * Displacement texture.
265 *
266 * The exact purpose and format is application-dependent. Higher color
267 * values stand for higher vertex displacements.
268 */
269 DISPLACEMENT = 0x9,
270
271 /**
272 * Lightmap or ambient occlusion texture.
273 *
274 * Both lightmaps and dedicated ambient occlusion maps are covered by
275 * this material property. The texture contains a scaling value for the
276 * final color value of a pixel. Its intensity is not affected by
277 * incoming light.
278 */
279 LIGHTMAP = 0xA,
280
281 /**
282 * Reflection texture.
283 *
284 * Contains the color of a perfect mirror reflection. Rarely used, almost
285 * never for real-time applications.
286 */
287 REFLECTION = 0xB,
288
289 /**
290 * Unknown texture.
291 *
292 * A texture reference that does not match any of the definitions above is
293 * considered to be 'unknown'. It is still imported, but is excluded from
294 * any further postprocessing.
295 */
296 UNKNOWN = 0xC
297 }
298
299 /**
300 * Defines all shading models supported by the library
301 *
302 * The list of shading modes has been taken from Blender. See Blender
303 * documentation for more information. The API does not distinguish between
304 * "specular" and "diffuse" shaders (thus the specular term for diffuse
305 * shading models like Oren-Nayar remains undefined).
306 *
307 * Again, this value is just a hint. Assimp tries to select the shader whose
308 * most common implementation matches the original rendering results of the
309 * 3D modeller which wrote a particular model as closely as possible.
310 */
311 enum aiShadingMode : uint {
312 /**
313 * Flat shading.
314 *
315 * Shading is done on per-face base diffuse only. Also known as
316 * »faceted shading«.
317 */
318 Flat = 0x1,
319
320 /**
321 * Simple Gouraud shading.
322 */
323 Gouraud = 0x2,
324
325 /**
326 * Phong-Shading.
327 */
328 Phong = 0x3,
329
330 /**
331 * Phong-Blinn-Shading.
332 */
333 Blinn = 0x4,
334
335 /**
336 * Per-pixel toon shading.
337 *
338 * Often referred to as »comic shading«.
339 */
340 Toon = 0x5,
341
342 /**
343 * Per-pixel Oren-Nayar shading.
344 *
345 * Extension to standard Lambertian shading, taking the roughness of the
346 * material into account.
347 */
348 OrenNayar = 0x6,
349
350 /**
351 * Per-pixel Minnaert shading.
352 *
353 * Extension to standard Lambertian shading, taking the "darkness" of the
354 * material into account.
355 */
356 Minnaert = 0x7,
357
358 /**
359 * Per-pixel Cook-Torrance shading.
360 *
361 * Special shader for metallic surfaces.
362 */
363 CookTorrance = 0x8,
364
365 /**
366 * No shading at all.
367 *
368 * Constant light influence of 1.
369 */
370 NoShading = 0x9,
371
372 /**
373 * Fresnel shading.
374 */
375 Fresnel = 0xa
376 }
377
378 /**
379 * Defines some mixed flags for a particular texture.
380 *
381 * Usually you'll instruct your cg artists how textures have to look like
382 * and how they will be processed in your application. However, if you use
383 * Assimp for completely generic loading purposes you might also need to
384 * process these flags in order to display as many 'unknown' 3D models as
385 * possible correctly.
386 *
387 * This corresponds to the <code>AI_MATKEY_TEXFLAGS</code> property.
388 */
389 enum aiTextureFlags : uint {
390 /**
391 * The texture's color values have to be inverted (i.e. <code>1-n</code>
392 * component-wise).
393 */
394 Invert = 0x1,
395
396 /**
397 * Explicit request to the application to process the alpha channel of the
398 * texture.
399 *
400 * Mutually exclusive with <code>IgnoreAlpha</code>. These flags are
401 * set if the library can say for sure that the alpha channel is used/is
402 * not used. If the model format does not define this, it is left to the
403 * application to decide whether the texture alpha channel – if any – is
404 * evaluated or not.
405 */
406 UseAlpha = 0x2,
407
408 /**
409 * Explicit request to the application to ignore the alpha channel of the
410 * texture.
411 *
412 * Mutually exclusive with <code>UseAlpha</code>.
413 */
414 IgnoreAlpha = 0x4
415 }
416
417
418 /**
419 * Defines alpha-blend flags.
420 *
421 * If you're familiar with OpenGL or D3D, these flags aren't new to you.
422 * They define how the final color value of a pixel is computed, based on
423 * the previous color at that pixel and the new color value from the
424 * material.
425 *
426 * The basic blending formula is
427 * <code>SourceColor * SourceBlend + DestColor * DestBlend</code>,
428 * where <code>DestColor</code> is the previous color in the framebuffer at
429 * this position and <code>SourceColor</code> is the material color before
430 * the transparency calculation.
431 *
432 * This corresponds to the <code>AI_MATKEY_BLEND_FUNC</code> property.
433 */
434 enum aiBlendMode :uint {
435 /**
436 * Formula:
437 * <code>SourceColor * SourceAlpha + DestColor * (1 - SourceAlpha)</code>
438 */
439 Default = 0x0,
440
441 /**
442 * Additive blending.
443 *
444 * Formula: <code>SourceColor*1 + DestColor*1</code>
445 */
446 Additive = 0x1
447 }
448
449 /**
450 * Defines how an UV channel is transformed.
451 *
452 * This is just a helper structure for the <code>AI_MATKEY_UVTRANSFORM</code>
453 * key. See its documentation for more details.
454 */
455 struct aiUVTransform {
456 align ( 1 ) :
457 /**
458 * Translation on the u and v axes.
459 *
460 * The default value is (0|0).
461 */
462 aiVector2D mTranslation;
463
464 /**
465 * Scaling on the u and v axes.
466 *
467 * The default value is (1|1).
468 */
469 aiVector2D mScaling;
470
471 /**
472 * Rotation - in counter-clockwise direction.
473 *
474 * The rotation angle is specified in radians. The rotation center is
475 * 0.5|0.5. The default value is 0.
476 */
477 float mRotation;
478 }
479
480 /**
481 * A very primitive RTTI system to store the data type of a material
482 * property.
483 */
484 enum aiPropertyTypeInfo : uint {
485 /**
486 * Array of single-precision (32 bit) floats.
487 *
488 * It is possible to use <code>aiGetMaterialInteger[Array]()</code> to
489 * query properties stored in floating-point format. The material system
490 * performs the type conversion automatically.
491 */
492 Float = 0x1,
493
494 /**
495 * aiString property.
496 *
497 * Arrays of strings aren't possible, <code>aiGetMaterialString()</code>
498 * must be used to query a string property.
499 */
500 String = 0x3,
501
502 /**
503 * Array of (32 bit) integers.
504 *
505 * It is possible to use <code>aiGetMaterialFloat[Array]()</code> to
506 * query properties stored in integer format. The material system
507 * performs the type conversion automatically.
508 */
509 Integer = 0x4,
510
511 /**
512 * Simple binary buffer, content undefined. Not convertible to anything.
513 */
514 Buffer = 0x5
515 }
516
517 /**
518 * Data structure for a single material property.
519 *
520 * As an user, you'll probably never need to deal with this data structure.
521 * Just use the provided <code>aiGetMaterialXXX()</code> functions to query
522 * material properties easily. Processing them manually is faster, but it is
523 * not the recommended way. It isn't worth the effort.
524 *
525 * Material property names follow a simple scheme:
526 *
527 * <code>$[name]</code>: A public property, there must be a corresponding
528 * AI_MATKEY_XXX constant.
529 *
530 * <code>?[name]</code>: Also public, but ignored by the
531 * <code>aiProcess.RemoveRedundantMaterials</code> post-processing step.
532 *
533 * <code>~[name]</code>: A temporary property for internal use.
534 */
535 struct aiMaterialProperty {
536 /**
537 * Specifies the name of the property (key).
538 *
539 * Keys are generally case insensitive.
540 */
541 aiString mKey;
542
543 /**
544 * For texture properties, this specifies the exact usage semantic.
545 *
546 * For non-texture properties, this member is always 0 (or rather
547 * <code>aiTextureType.NONE</code>).
548 */
549 uint mSemantic;
550
551 /**
552 * For texture properties, this specifies the index of the texture.
553 *
554 * For non-texture properties, this member is always 0.
555 */
556 uint mIndex;
557
558 /**
559 * Size of the buffer <code>mData</code> is pointing to (in bytes).
560 *
561 * This value may not be 0.
562 */
563 uint mDataLength;
564
565 /**
566 * Type information for the property.
567 *
568 * Defines the data layout inside the data buffer. This is used by the
569 * library internally to perform debug checks and to utilize proper type
570 * conversions.
571 */
572 aiPropertyTypeInfo mType;
573
574 /**
575 * Binary buffer to hold the property's value.
576 *
577 * The size of the buffer is always <code>mDataLength</code>.
578 */
579 char* mData;
580 }
581
582 /**
583 * Data structure for a material
584 *
585 * Material data is stored using a key-value structure. A single key-value
586 * pair is called a <em>material property</em>. The properties can be
587 * queried using the <code>aiMaterialGetXXX</code> family of functions. The
588 * library defines a set of standard keys (AI_MATKEY_XXX).
589 */
590 struct aiMaterial {
591 /**
592 * List of all material properties loaded.
593 */
594 aiMaterialProperty** mProperties;
595
596 /**
597 * Number of properties loaded.
598 */
599 uint mNumProperties;
600 uint mNumAllocated; /// ditto
601 }
602
603 /**
604 * Standard material property keys. Always pass 0 for texture type and index
605 * when querying these keys.
606 */
607 const char* AI_MATKEY_NAME = "?mat.name";
608 const char* AI_MATKEY_TWOSIDED = "$mat.twosided"; /// ditto
609 const char* AI_MATKEY_SHADING_MODEL = "$mat.shadingm"; /// ditto
610 const char* AI_MATKEY_ENABLE_WIREFRAME = "$mat.wireframe"; /// ditto
611 const char* AI_MATKEY_BLEND_FUNC = "$mat.blend"; /// ditto
612 const char* AI_MATKEY_OPACITY = "$mat.opacity"; /// ditto
613 const char* AI_MATKEY_BUMPSCALING = "$mat.bumpscaling"; /// ditto
614 const char* AI_MATKEY_SHININESS = "$mat.shininess"; /// ditto
615 const char* AI_MATKEY_REFLECTIVITY = "$mat.reflectivity"; /// ditto
616 const char* AI_MATKEY_SHININESS_STRENGTH = "$mat.shinpercent"; /// ditto
617 const char* AI_MATKEY_REFRACTI = "$mat.refracti"; /// ditto
618 const char* AI_MATKEY_COLOR_DIFFUSE = "$clr.diffuse"; /// ditto
619 const char* AI_MATKEY_COLOR_AMBIENT = "$clr.ambient"; /// ditto
620 const char* AI_MATKEY_COLOR_SPECULAR = "$clr.specular"; /// ditto
621 const char* AI_MATKEY_COLOR_EMISSIVE = "$clr.emissive"; /// ditto
622 const char* AI_MATKEY_COLOR_TRANSPARENT = "$clr.transparent"; /// ditto
623 const char* AI_MATKEY_COLOR_REFLECTIVE = "$clr.reflective"; /// ditto
624 const char* AI_MATKEY_GLOBAL_BACKGROUND_IMAGE = "?bg.global"; /// ditto
625
626 /**
627 * Texture material property keys. Do not forget to specify texture type and
628 * index for these keys.
629 */
630 const char* AI_MATKEY_TEXTURE = "$tex.file";
631 const char* AI_MATKEY_UVWSRC = "$tex.uvwsrc"; /// ditto
632 const char* AI_MATKEY_TEXOP = "$tex.op"; /// ditto
633 const char* AI_MATKEY_MAPPING = "$tex.mapping"; /// ditto
634 const char* AI_MATKEY_TEXBLEND = "$tex.blend"; /// ditto
635 const char* AI_MATKEY_MAPPINGMODE_U = "$tex.mapmodeu"; /// ditto
636 const char* AI_MATKEY_MAPPINGMODE_V = "$tex.mapmodev"; /// ditto
637 const char* AI_MATKEY_TEXMAP_AXIS = "$tex.mapaxis"; /// ditto
638 const char* AI_MATKEY_UVTRANSFORM = "$tex.uvtrafo"; /// ditto
639 const char* AI_MATKEY_TEXFLAGS = "$tex.flags"; /// ditto
640 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Mathematical structures in which the imported data is stored.
43 */
44 module assimp.math;
45
46 extern( C ) {
47 /**
48 * Represents a two-dimensional vector.
49 */
50 struct aiVector2D {
51 align ( 1 ):
52 float x, y;
53 }
54
55 /**
56 * Represents a three-dimensional vector.
57 */
58 struct aiVector3D {
59 align ( 1 ):
60 float x, y, z;
61 }
62
63 /**
64 * Represents a quaternion.
65 */
66 struct aiQuaternion {
67 float w, x, y, z;
68 }
69
70 /**
71 * Represents a row-major 3x3 matrix
72 *
73 * There is much confusion about matrix layouts (colum vs. row order). This
74 * is <em>always</em> a row-major matrix, even when using the
75 * <code>ConvertToLeftHanded</code> post processing step.
76 */
77 struct aiMatrix3x3 {
78 float a1, a2, a3;
79 float b1, b2, b3;
80 float c1, c2, c3;
81 }
82
83 /**
84 * Represents a row-major 3x3 matrix
85 *
86 * There is much confusion about matrix layouts (colum vs. row order). This
87 * is <em>always</em> a row-major matrix, even when using the
88 * <code>ConvertToLeftHanded</code> post processing step.
89 */
90 struct aiMatrix4x4 {
91 align ( 1 ):
92 float a1, a2, a3, a4;
93 float b1, b2, b3, b4;
94 float c1, c2, c3, c4;
95 float d1, d2, d3, d4;
96 }
97
98 /**
99 * Represents a plane in a three-dimensional, euclidean space
100 */
101 struct aiPlane {
102 align ( 1 ):
103 /**
104 * Coefficients of the plane equation (<code>ax + by + cz = d</code>).
105 */
106 float a;
107 float b; /// ditto
108 float c; /// ditto
109 float d; /// ditto
110 }
111
112 /**
113 * Represents a ray.
114 */
115 struct aiRay {
116 align ( 1 ):
117 /**
118 * Origin of the ray.
119 */
120 aiVector3D pos;
121
122 /**
123 * Direction of the ray.
124 */
125 aiVector3D dir;
126 }
127
128 /**
129 * Represents a color in RGB space.
130 */
131 struct aiColor3D {
132 align ( 1 ):
133 /**
134 * Red, green and blue values.
135 */
136 float r;
137 float g; /// ditto
138 float b; /// ditto
139 }
140
141 /**
142 * Represents a color in RGB space including an alpha component.
143 */
144 struct aiColor4D {
145 align ( 1 ):
146 /**
147 * Red, green, blue and alpha values.
148 */
149 float r;
150 float g; /// ditto
151 float b; /// ditto
152 float a; /// ditto
153 }
154 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Contains the data structures in which the imported geometry is returned by
43 * Assimp.
44 */
45 module assimp.mesh;
46
47 import assimp.math;
48 import assimp.types;
49
50 extern ( C ) {
51 /*
52 * These limits are required to match the settings Assimp was compiled
53 * against. Therfore, do not redefine them unless you build the library
54 * from source using the same definitions.
55 */
56
57 /**
58 * Maximum number of indices per face (polygon).
59 */
60 const AI_MAX_FACE_INDICES = 0x7fff;
61
62 /**
63 * Maximum number of indices per face (polygon).
64 */
65 const AI_MAX_BONE_WEIGHTS = 0x7fffffff;
66
67 /**
68 * Maximum number of vertices per mesh.
69 */
70 const AI_MAX_VERTICES = 0x7fffffff;
71
72 /**
73 * Maximum number of faces per mesh.
74 */
75 const AI_MAX_FACES = 0x7fffffff;
76
77 /**
78 * Supported number of vertex color sets per mesh.
79 */
80 const AI_MAX_NUMBER_OF_COLOR_SETS = 0x4;
81
82 /**
83 * Supported number of texture coord sets (UV(W) channels) per mesh.
84 */
85 const AI_MAX_NUMBER_OF_TEXTURECOORDS = 0x4;
86
87
88 /**
89 * A single face in a mesh, referring to multiple vertices.
90 *
91 * If <code>mNumIndices</code> is 3, we call the face <em>triangle</em>, for
92 * for <code>mNumIndices > 3</code> it's called <em>polygon</em>.
93 *
94 * <code>aiMesh.mPrimitiveTypes</code> can be queried to quickly examine
95 * which types of primitive are actually present in a mesh. The
96 * <code>aiProcess.SortByPType</code> flag post-processing step splits
97 * meshes containing different primitive types (e.g. lines and triangles) in
98 * several "clean" submeshes.
99 *
100 * Furthermore, there is a configuration option
101 * (<code>AI_CONFIG_PP_SBP_REMOVE</code>) to force <code>SortByPType</code>
102 * to completely remove specific kinds of primitives from the imported scene.
103 * In many cases you'll probably want to set this setting to
104 * <code>aiPrimitiveType.LINE | aiPrimitiveType.POINT</code>. Together with
105 * the <code>aiProcess.Triangulate</code> flag you can then be sure that
106 * <code>mNumIndices</code> is always 3.
107 */
108 struct aiFace {
109 /**
110 * Number of indices defining this face.
111 *
112 * The maximum value for this member is <code>AI_MAX_FACE_INDICES</code>.
113 */
114 uint mNumIndices;
115
116 /**
117 * Array of the indicies defining the face.
118 *
119 * The size is given in <code>mNumIndices</code>.
120 */
121 uint* mIndices;
122 }
123
124 /**
125 * A single influence of a bone on a vertex.
126 */
127 struct aiVertexWeight {
128 /**
129 * Index of the vertex which is influenced by the bone.
130 */
131 uint mVertexId;
132
133 /**
134 * The strength of the influence in the range <code>[0..1]</code>.
135 *
136 * The influence from all bones at one vertex sums up to 1.
137 */
138 float mWeight;
139 }
140
141 /**
142 * A single bone of a mesh.
143 *
144 * A bone has a name by which it can be found in the frame hierarchy and by
145 * which it can be addressed by animations. In addition it has a number of
146 * influences on vertices.
147 */
148 struct aiBone {
149 /**
150 * The name of the bone.
151 */
152 aiString mName;
153
154 /**
155 * The number of vertices affected by this bone.
156 *
157 * The maximum value for this member is <code>AI_MAX_BONE_WEIGHTS</code>.
158 */
159 uint mNumWeights;
160
161 /**
162 * The vertices affected by this bone.
163 *
164 * This array is <code>mNumWeights</code> entries in size.
165 */
166 aiVertexWeight* mWeights;
167
168 /**
169 * Matrix that transforms from mesh space to bone space (in the bind
170 * pose).
171 */
172 aiMatrix4x4 mOffsetMatrix;
173 }
174
175 /**
176 * Enumerates the types of geometric primitives supported by Assimp.
177 *
178 * See: <code>aiFace</code>, <code>aiProcess.SortByPType</code>,
179 * <code>aiProcess.Triangulate</code>,
180 * <code>AI_CONFIG_PP_SBP_REMOVE</code>.
181 */
182 enum aiPrimitiveType : uint {
183 /** A point primitive.
184 *
185 * This is just a single vertex in the virtual world,
186 * <code>aiFace</code> contains just one index for such a primitive.
187 */
188 POINT = 0x1,
189
190 /** A line primitive.
191 *
192 * This is a line defined through a start and an end position.
193 * <code>aiFace</code> contains exactly two indices for such a primitive.
194 */
195 LINE = 0x2,
196
197 /** A triangular primitive.
198 *
199 * A triangle consists of three indices.
200 */
201 TRIANGLE = 0x4,
202
203 /** A higher-level polygon with more than 3 edges.
204 *
205 * A triangle is a polygon, but in this context, polygon means
206 * "all polygons that are not triangles". The <code>Triangulate</code>
207 * post processing step is provided for your convinience, it splits all
208 * polygons in triangles (which are much easier to handle).
209 */
210 POLYGON = 0x8
211 }
212
213 // Note: The AI_PRIMITIVE_TYPE_FOR_N_INDICES(n) macro from the C headers is
214 // missing since there is probably not much use for it when just reading
215 // scene files.
216
217 /**
218 * NOT CURRENTLY IN USE. An AnimMesh is an attachment to an #aiMesh stores
219 * per-vertex animations for a particular frame.
220 *
221 * You may think of an <code>aiAnimMesh</code> as a `patch` for the host
222 * mesh, which replaces only certain vertex data streams at a particular
223 * time.
224 *
225 * Each mesh stores n attached attached meshes (<code>aiMesh.mAnimMeshes</code>).
226 * The actual relationship between the time line and anim meshes is
227 * established by #aiMeshAnim, which references singular mesh attachments
228 * by their ID and binds them to a time offset.
229 */
230 struct aiAnimMesh {
231 /**
232 * Replacement for aiMesh.mVertices.
233 *
234 * If this array is non-null, it *must* contain mNumVertices entries.
235 * The corresponding array in the host mesh must be non-null as well -
236 * animation meshes may neither add or nor remove vertex components (if
237 * a replacement array is NULL and the corresponding source array is
238 * not, the source data is taken instead).
239 */
240 aiVector3D* mVertices;
241
242 /// Replacement for <code>aiMesh.mNormals</code>.
243 aiVector3D* mNormals;
244
245 /// Replacement for <code>aiMesh.mTangents</code>.
246 aiVector3D* mTangents;
247
248 /// Replacement for <code>aiMesh.mBitangents</code>.
249 aiVector3D* mBitangents;
250
251 /// Replacement for <code>aiMesh.mColors</code>.
252 aiColor4D* mColors[ AI_MAX_NUMBER_OF_COLOR_SETS ];
253
254 /// Replacement for <code>aiMesh.mTextureCoords</code>.
255 aiVector3D* mTextureCoords[ AI_MAX_NUMBER_OF_TEXTURECOORDS ];
256
257 /**
258 * The number of vertices in the aiAnimMesh, and thus the length of all
259 * the member arrays.
260 *
261 * This has always the same value as the mNumVertices property in the
262 * corresponding aiMesh. It is duplicated here merely to make the length
263 * of the member arrays accessible even if the aiMesh is not known, e.g.
264 * from language bindings.
265 */
266 uint mNumVertices;
267 }
268
269 /**
270 * A mesh represents a geometry or model with a single material.
271 *
272 * It usually consists of a number of vertices and a series
273 * primitives/faces referencing the vertices. In addition there might be a
274 * series of bones, each of them addressing a number of vertices with a
275 * certain weight. Vertex data is presented in channels with each channel
276 * containing a single per-vertex information such as a set of texture
277 * coords or a normal vector. If a data pointer is non-null, the
278 * corresponding data stream is present.
279 *
280 * A mesh uses only a single material which is referenced by a material ID.
281 *
282 * Note: The <code>mPositions</code> member is usually not optional.
283 * However, vertex positions <em>could</em> be missing if the
284 * <code>AI_SCENE_FLAGS_INCOMPLETE</code> flag is set in
285 * <code>aiScene.mFlags</code>.
286 */
287 struct aiMesh {
288 /**
289 * Bitwise combination of <code>aiPrimitiveType</code> members.
290 *
291 * This specifies which types of primitives are present in the mesh.
292 * The <code>SortByPrimitiveType</code> post processing step can be used
293 * to make sure the output meshes consist of one primitive type each.
294 */
295 uint mPrimitiveTypes;
296
297 /**
298 * The number of vertices in this mesh.
299 *
300 * This is also the size of all of the per-vertex data arrays. The
301 * maximum value for this member is <code>AI_MAX_VERTICES</code>.
302 */
303 uint mNumVertices;
304
305 /**
306 * The number of primitives (triangles, polygons, lines) in this mesh.
307 *
308 * This is also the size of the <code>mFaces</code> array. The maximum
309 * value for this member is <code>AI_MAX_FACES</code>.
310 */
311 uint mNumFaces;
312
313 /**
314 * Vertex positions.
315 *
316 * This array is always present in a mesh. The array is
317 * <code>mNumVertices</code> in size.
318 */
319 aiVector3D* mVertices;
320
321 /**
322 * Vertex normals.
323 *
324 * The array contains normalized vectors, null if not present.
325 * The array is <code>mNumVertices</code> in size.
326 *
327 * Normals are undefined for point and line primitives. A mesh
328 * consisting of points and lines only may not have normal vectors.
329 * Meshes with mixed primitive types (i.e. lines and triangles) may have
330 * normals, but the normals for vertices that are only referenced by
331 * point or line primitives are undefined and set to <code>QNAN</code>.
332 *
333 * Note: Normal vectors computed by Assimp are always unit-length.
334 * However, this needn't apply for normals that have been taken
335 * directly from the model file.
336 */
337 aiVector3D* mNormals;
338
339 /**
340 * Vertex tangents.
341 *
342 * The tangent of a vertex points in the direction of the positive x
343 * texture axis. The array contains normalized vectors, null if
344 * not present. The array is <code>mNumVertices</code> in size.
345 *
346 * A mesh consisting of points and lines only may not have normal
347 * vectors. Meshes with mixed primitive types (i.e. lines and triangles)
348 * may have normals, but the normals for vertices that are only
349 * referenced by point or line primitives are undefined and set to
350 * <code>QNAN</code>.
351 *
352 * Note: If the mesh contains tangents, it automatically also contains
353 * bitangents (the bitangent is just the cross product of tangent and
354 * normal vectors).
355 */
356 aiVector3D* mTangents;
357
358 /**
359 * Vertex bitangents.
360 *
361 * The bitangent of a vertex points in the direction of the positive Y
362 * texture axis. The array contains normalized vectors, null if not
363 * present. The array is <code>mNumVertices</code> in size.
364 *
365 * Note: If the mesh contains tangents, it automatically also contains
366 * bitangents.
367 */
368 aiVector3D* mBitangents;
369
370 /**
371 * Vertex color sets.
372 *
373 * A mesh may contain 0 to <code>AI_MAX_NUMBER_OF_COLOR_SETS</code>
374 * vertex colors per vertex. null if not present.
375 *
376 * Each array is <code>mNumVertices</code> in size if present.
377 */
378 aiColor4D* mColors[ AI_MAX_NUMBER_OF_COLOR_SETS ];
379
380 /**
381 * Vertex texture coords, also known as UV channels.
382 * A mesh may contain 0 to <code>AI_MAX_NUMBER_OF_TEXTURECOORDS</code>
383 * per vertex. null if not present.
384 *
385 * Each array is <code>mNumVertices</code> in size.
386 */
387 aiVector3D* mTextureCoords[ AI_MAX_NUMBER_OF_TEXTURECOORDS ];
388
389 /**
390 * Specifies the number of components for a given UV channel.
391 *
392 * Up to three channels are supported (UVW, for accessing volume or cube
393 * maps). If the value is 2 for a given channel <code>n</code>, the
394 * component <code>p.z</code> of <code>mTextureCoords[n][p]</code> is set
395 * to 0. If the value is 1 for a given channel, <code>p.y</code> is set
396 * to 0, too. If this value is 0, 2 should be assumed.
397 *
398 * Note: 4D coords are not supported.
399 */
400 uint mNumUVComponents[ AI_MAX_NUMBER_OF_TEXTURECOORDS ];
401
402 /**
403 * The faces the mesh is contstructed from.
404 *
405 * Each face referrs to a number of vertices by their indices.
406 * This array is always present in a mesh, its size is given
407 * in <code>mNumFaces</code>. If the
408 * <code>AI_SCENE_FLAGS_NON_VERBOSE_FORMAT</code> is <em>not</em> set,
409 * each face references an unique set of vertices.
410 */
411 aiFace* mFaces;
412
413 /**
414 * The number of bones this mesh contains.
415 *
416 * Can be 0, in which case the <code>mBones</code> array is null.
417 */
418 uint mNumBones;
419
420 /**
421 * The bones of this mesh.
422 *
423 * A bone consists of a name by which it can be found in the frame
424 * hierarchy and a set of vertex weights.
425 */
426 aiBone** mBones;
427
428 /**
429 * The material used by this mesh.
430 *
431 * A mesh does use only a single material. If an imported model uses
432 * multiple materials, the import splits up the mesh. Use this value as
433 * index into the scene's material list.
434 */
435 uint mMaterialIndex;
436
437 /**
438 * Name of the mesh.
439 *
440 * Meshes can be named, but this is not a requirement and leaving this
441 * field empty is totally fine.
442 *
443 * There are mainly three uses for mesh names:
444 * - Some formats name nodes and meshes independently.
445 * - Importers tend to split meshes up to meet the one-material-per-mesh
446 * requirement. Assigning the same (dummy) name to each of the result
447 * meshes aids the caller at recovering the original mesh partitioning.
448 * - Vertex animations refer to meshes by their names.
449 */
450 aiString mName;
451
452 /// NOT CURRENTLY IN USE. The number of attachment meshes.
453 uint mNumAnimMeshes;
454
455 /**
456 * NOT CURRENTLY IN USE. Attachment meshes for this mesh, for vertex-
457 * based animation.
458 *
459 * Attachment meshes carry replacement data for some of the mesh's
460 * vertex components (usually positions, normals).
461 */
462 aiAnimMesh** mAnimMeshes;
463 }
464 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Definitions for import post processing steps.
43 */
44 module assimp.postprocess;
45
46 extern ( C ) {
47 /**
48 * Defines the flags for all possible post processing steps.
49 *
50 * See: <code>aiImportFile</code>, <code>aiImportFileEx</code>
51 */
52 enum aiPostProcessSteps {
53 /**
54 * Calculates the tangents and bitangents for the imported meshes.
55 *
56 * Does nothing if a mesh does not have normals. You might want this post
57 * processing step to be executed if you plan to use tangent space
58 * calculations such as normal mapping applied to the meshes. There is a
59 * config setting, <code>AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE</code>,
60 * which allows you to specify a maximum smoothing angle for the
61 * algorithm. However, usually you will want to use the default value.
62 */
63 CalcTangentSpace = 0x1,
64
65 /**
66 * Identifies and joins identical vertex data sets within all imported
67 * meshes.
68 *
69 * After this step is run each mesh does contain only unique vertices
70 * anymore, so a vertex is possibly used by multiple faces. You usually
71 * want to use this post processing step. If your application deals with
72 * indexed geometry, this step is compulsory or you will just waste
73 * rendering time. <em>If this flag is not specified</em>, no vertices
74 * are referenced by more than one face and <em>no index buffer is
75 * required</em> for rendering.
76 */
77 JoinIdenticalVertices = 0x2,
78
79 /**
80 * Converts all the imported data to a left-handed coordinate space.
81 *
82 * By default the data is returned in a right-handed coordinate space
83 * which for example OpenGL prefers. In this space, +X points to the
84 * right, +Z points towards the viewer and and +Y points upwards. In the
85 * DirectX coordinate space +X points to the right, +Y points upwards and
86 * +Z points away from the viewer.
87 *
88 * You will probably want to consider this flag if you use Direct3D for
89 * rendering. The <code>ConvertToLeftHanded</code> flag supersedes this
90 * setting and bundles all conversions typically required for D3D-based
91 * applications.
92 */
93 MakeLeftHanded = 0x4,
94
95 /**
96 * Triangulates all faces of all meshes.
97 *
98 * By default the imported mesh data might contain faces with more than 3
99 * indices. For rendering you'll usually want all faces to be triangles.
100 * This post processing step splits up all higher faces to triangles.
101 * Line and point primitives are <em>not</em> modified!.
102 *
103 * If you want »triangles only« with no other kinds of primitives,
104 * specify both <code>Triangulate</code> and <code>SortByPType</code> and
105 * ignore all point and line meshes when you process Assimp's output.
106 */
107 Triangulate = 0x8,
108
109 /**
110 * Removes some parts of the data structure (animations, materials, light
111 * sources, cameras, textures, vertex components).
112 *
113 * The components to be removed are specified in a separate configuration
114 * option, <code>AI_CONFIG_PP_RVC_FLAGS</code>. This is quite useful if
115 * you don't need all parts of the output structure. Especially vertex
116 * colors are rarely used today.
117 *
118 * Calling this step to remove unrequired stuff from the pipeline as
119 * early as possible results in an increased performance and a better
120 * optimized output data structure.
121 *
122 * This step is also useful if you want to force Assimp to recompute
123 * normals or tangents since the corresponding steps don't recompute them
124 * if they have already been loaded from the source asset.
125 *
126 * This flag is a poor one, mainly because its purpose is usually
127 * misunderstood. Consider the following case: a 3d model has been exported
128 * from a CAD app, it has per-face vertex colors. Because of the vertex
129 * colors (which are not even used by most apps),
130 * <code>JoinIdenticalVertices</code> cannot join vertices at the same
131 * position. By using this step, unneeded components are excluded as
132 * early as possible thus opening more room for internal optimzations.
133 */
134 RemoveComponent = 0x10,
135
136 /**
137 * Generates normals for all faces of all meshes.
138 *
139 * This is ignored if normals are already there at the time where this
140 * flag is evaluated. Model importers try to load them from the source
141 * file, so they are usually already there. Face normals are shared
142 * between all points of a single face, so a single point can have
143 * multiple normals, which, in other words, enforces the library to
144 * duplicate vertices in some cases. <code>JoinIdenticalVertices</code>
145 * is <em>useless</em> then.
146 *
147 * This flag may not be specified together with
148 * <code>GenSmoothNormals</code>.
149 */
150 GenNormals = 0x20,
151
152 /**
153 * Generates smooth normals for all vertices in the mesh.
154 *
155 * This is ignored if normals are already there at the time where this
156 * flag is evaluated. Model importers try to load them from the source file, so
157 * they are usually already there.
158 *
159 * There is a configuration option,
160 * <code>AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE</code> which allows you to
161 * specify an angle maximum for the normal smoothing algorithm. Normals
162 * exceeding this limit are not smoothed, resulting in a »hard« seam
163 * between two faces. Using a decent angle here (e.g. 80°) results in
164 * very good visual appearance.
165 */
166 GenSmoothNormals = 0x40,
167
168 /**
169 * Splits large meshes into smaller submeshes.
170 *
171 * This is quite useful for realtime rendering where the number of triangles
172 * which can be maximally processed in a single draw-call is usually limited
173 * by the video driver/hardware. The maximum vertex buffer is usually limited,
174 * too. Both requirements can be met with this step: you may specify both a
175 * triangle and vertex limit for a single mesh.
176 *
177 * The split limits can (and should!) be set through the
178 * <code>AI_CONFIG_PP_SLM_VERTEX_LIMIT</code> and
179 * <code>AI_CONFIG_PP_SLM_TRIANGLE_LIMIT</code> settings. The default
180 * values are <code>AI_SLM_DEFAULT_MAX_VERTICES</code> and
181 * <code>AI_SLM_DEFAULT_MAX_TRIANGLES</code>.
182 *
183 * Note that splitting is generally a time-consuming task, but not if
184 * there's nothing to split. The use of this step is recommended for most
185 * users.
186 */
187 SplitLargeMeshes = 0x80,
188
189 /**
190 * Removes the node graph and pre-transforms all vertices with the local
191 * transformation matrices of their nodes.
192 *
193 * The output scene does still contain nodes, however, there is only a
194 * root node with children, each one referencing only one mesh, each
195 * mesh referencing one material. For rendering, you can simply render
196 * all meshes in order, you don't need to pay attention to local
197 * transformations and the node hierarchy. Animations are removed during
198 * this step.
199 *
200 * This step is intended for applications that have no scenegraph.
201 *
202 * The step <em>can</em> cause some problems: if e.g. a mesh of the asset
203 * contains normals and another, using the same material index, does not,
204 * they will be brought together, but the first meshes's part of the
205 * normal list is zeroed. However, these artifacts are rare.
206 *
207 * Note: The <code>AI_CONFIG_PP_PTV_NORMALIZE</code> configuration
208 * property can be set to normalize the scene's spatial dimension
209 * to the -1...1 range.
210 */
211 PreTransformVertices = 0x100,
212
213 /**
214 * Limits the number of bones simultaneously affecting a single vertex to
215 * a maximum value.
216 *
217 * If any vertex is affected by more than that number of bones, the least
218 * important vertex weights are removed and the remaining vertex weights
219 * are renormalized so that the weights still sum up to 1.
220 *
221 * The default bone weight limit is 4 (<code>AI_LMW_MAX_WEIGHTS</code>),
222 * but you can use the <code>#AI_CONFIG_PP_LBW_MAX_WEIGHTS</code> setting
223 * to supply your own limit to the post processing step.
224 *
225 * If you intend to perform the skinning in hardware, this post processing
226 * step might be of interest for you.
227 */
228 LimitBoneWeights = 0x200,
229
230 /**
231 * Validates the imported scene data structure.
232 *
233 * This makes sure that all indices are valid, all animations and
234 * bones are linked correctly, all material references are correct, etc.
235 *
236 * It is recommended to capture Assimp's log output if you use this flag,
237 * so you can easily find ot what's actually wrong if a file fails the
238 * validation. The validator is quite rude and will find <em>all</em>
239 * inconsistencies in the data structure.
240 *
241 * Plugin developers are recommended to use it to debug their loaders.
242 *
243 * There are two types of validation failures:
244 * <ul>
245 * <li>Error: There's something wrong with the imported data. Further
246 * postprocessing is not possible and the data is not usable at all.
247 * The import fails, see <code>aiGetErrorString()</code> for the
248 * error message.</li>
249 * <li>Warning: There are some minor issues (e.g. 1000000 animation
250 * keyframes with the same time), but further postprocessing and use
251 * of the data structure is still safe. Warning details are written
252 * to the log file, <code>AI_SCENE_FLAGS_VALIDATION_WARNING</code> is
253 * set in <code>aiScene::mFlags</code></li>
254 * </ul>
255 *
256 * This post-processing step is not time-consuming. It's use is not
257 * compulsory, but recommended.
258 */
259 ValidateDataStructure = 0x400,
260
261 /**
262 * Reorders triangles for better vertex cache locality.
263 *
264 * The step tries to improve the ACMR (average post-transform vertex cache
265 * miss ratio) for all meshes. The implementation runs in O(n) and is
266 * roughly based on the 'tipsify' algorithm (see
267 * <tt>http://www.cs.princeton.edu/gfx/pubs/Sander_2007_%3ETR/tipsy.pdf</tt>).
268 *
269 * If you intend to render huge models in hardware, this step might
270 * be of interest for you. The <code>AI_CONFIG_PP_ICL_PTCACHE_SIZE</code>
271 * config setting can be used to fine-tune the cache optimization.
272 */
273 ImproveCacheLocality = 0x800,
274
275 /**
276 * Searches for redundant/unreferenced materials and removes them.
277 *
278 * This is especially useful in combination with the
279 * <code>PretransformVertices</code> and <code>OptimizeMeshes</code>
280 * flags. Both join small meshes with equal characteristics, but they
281 * can't do their work if two meshes have different materials. Because
282 * several material settings are always lost during Assimp's import
283 * filters, (and because many exporters don't check for redundant
284 * materials), huge models often have materials which are are defined
285 * several times with exactly the same settings.
286 *
287 * Several material settings not contributing to the final appearance of
288 * a surface are ignored in all comparisons; the material name is one of
289 * them. So, if you are passing additional information through the
290 * content pipeline (probably using »magic« material names), don't
291 * specify this flag. Alternatively take a look at the
292 * <code>AI_CONFIG_PP_RRM_EXCLUDE_LIST</code> setting.
293 */
294 RemoveRedundantMaterials = 0x1000,
295
296 /**
297 * This step tries to determine which meshes have normal vectors that are
298 * acing inwards.
299 *
300 * The algorithm is simple but effective: The bounding box of all
301 * vertices and their normals is compared against the volume of the
302 * bounding box of all vertices without their normals. This works well
303 * for most objects, problems might occur with planar surfaces. However,
304 * the step tries to filter such cases.
305 *
306 * The step inverts all in-facing normals. Generally it is recommended to
307 * enable this step, although the result is not always correct.
308 */
309 FixInfacingNormals = 0x2000,
310
311 /**
312 * This step splits meshes with more than one primitive type in
313 * homogeneous submeshes.
314 *
315 * The step is executed after the triangulation step. After the step
316 * returns, just one bit is set in <code>aiMesh.mPrimitiveTypes</code>.
317 * This is especially useful for real-time rendering where point and line
318 * primitives are often ignored or rendered separately.
319 *
320 * You can use the <code>AI_CONFIG_PP_SBP_REMOVE</code> option to
321 * specify which primitive types you need. This can be used to easily
322 * exclude lines and points, which are rarely used, from the import.
323 */
324 SortByPType = 0x8000,
325
326 /**
327 * This step searches all meshes for degenerated primitives and converts
328 * them to proper lines or points.
329 *
330 * A face is »degenerated« if one or more of its points are identical.
331 * To have the degenerated stuff not only detected and collapsed but also
332 * removed, try one of the following procedures:
333 *
334 * <b>1.</b> (if you support lines and points for rendering but don't
335 * want the degenerates)
336 * <ul>
337 * <li>Specify the <code>FindDegenerates</code> flag.</li>
338 * <li>Set the <code>AI_CONFIG_PP_FD_REMOVE</code> option to 1. This will
339 * cause the step to remove degenerated triangles from the import
340 * as soon as they're detected. They won't pass any further
341 * pipeline steps.</li>
342 * </ul>
343 *
344 * <b>2.</b>(if you don't support lines and points at all ...)
345 * <ul>
346 * <li>Specify the <code>FindDegenerates</code> flag.</li>
347 * <li>Specify the <code>SortByPType</code> flag. This moves line and
348 * point primitives to separate meshes.</li>
349 * <li>Set the <code>AI_CONFIG_PP_SBP_REMOVE</codet> option to
350 * <code>aiPrimitiveType_POINTS | aiPrimitiveType_LINES</code>
351 * to cause SortByPType to reject point and line meshes from the
352 * scene.</li>
353 * </ul>
354 *
355 * Note: Degenerated polygons are not necessarily bad and that's why
356 * they're not removed by default. There are several file formats
357 * which don't support lines or points. Some exporters bypass the
358 * format specification and write them as degenerated triangle
359 * instead.
360 */
361 FindDegenerates = 0x10000,
362
363 /**
364 * This step searches all meshes for invalid data, such as zeroed normal
365 * vectors or invalid UV coords and removes/fixes them. This is intended
366 * to get rid of some common exporter errors.
367 *
368 * This is especially useful for normals. If they are invalid, and the
369 * step recognizes this, they will be removed and can later be
370 * recomputed, e.g. by the <code>GenSmoothNormals</code> step.
371 *
372 * The step will also remove meshes that are infinitely small and reduce
373 * animation tracks consisting of hundreds if redundant keys to a single
374 * key. The <code>AI_CONFIG_PP_FID_ANIM_ACCURACY</code> config property
375 * decides the accuracy of the check for duplicate animation tracks.
376 */
377 FindInvalidData = 0x20000,
378
379 /**
380 * This step converts non-UV mappings (such as spherical or cylindrical
381 * mapping) to proper texture coordinate channels.
382 *
383 * Most applications will support UV mapping only, so you will probably
384 * want to specify this step in every case. Note tha Assimp is not always
385 * able to match the original mapping implementation of the 3d app which
386 * produced a model perfectly. It's always better to let the father app
387 * compute the UV channels, at least 3ds max, maja, blender, lightwave,
388 * modo, ... are able to achieve this.
389 *
390 * Note: If this step is not requested, you'll need to process the
391 * <code>AI_MATKEY_MAPPING</code> material property in order to
392 * display all assets properly.
393 */
394 GenUVCoords = 0x40000,
395
396 /**
397 * This step applies per-texture UV transformations and bakes them to
398 * stand-alone vtexture coordinate channelss.
399 *
400 * UV transformations are specified per-texture – see the
401 * <code>AI_MATKEY_UVTRANSFORM</code> material key for more information.
402 * This step processes all textures with transformed input UV coordinates
403 * and generates new (pretransformed) UV channel which replace the old
404 * channel. Most applications won't support UV transformations, so you
405 * will probably want to specify this step.
406 *
407 * Note: UV transformations are usually implemented in realtime apps by
408 * transforming texture coordinates at vertex shader stage with a 3x3
409 * (homogenous) transformation matrix.
410 */
411 TransformUVCoords = 0x80000,
412
413 /**
414 * This step searches for duplicate meshes and replaces duplicates with
415 * references to the first mesh.
416 *
417 * This step takes a while, don't use it if you have no time. Its main
418 * purpose is to workaround the limitation that many export file formats
419 * don't support instanced meshes, so exporters need to duplicate meshes.
420 * This step removes the duplicates again. Please note that Assimp does
421 * currently not support per-node material assignment to meshes, which
422 * means that identical meshes with differnent materials are currently
423 * <em>not</em> joined, although this is planned for future versions.
424 */
425 FindInstances = 0x100000,
426
427 /**
428 * A postprocessing step to reduce the number of meshes.
429 *
430 * In fact, it will reduce the number of drawcalls.
431 *
432 * This is a very effective optimization and is recommended to be used
433 * together with <code>OptimizeGraph</code>, if possible. The flag is
434 * fully compatible with both <code>SplitLargeMeshes</code> and
435 * <code>SortByPType</code>.
436 */
437 OptimizeMeshes = 0x200000,
438
439 /**
440 * A postprocessing step to optimize the scene hierarchy.
441 *
442 * Nodes with no animations, bones, lights or cameras assigned are
443 * collapsed and joined.
444 *
445 * Node names can be lost during this step. If you use special tag nodes
446 * to pass additional information through your content pipeline, use the
447 * <code>AI_CONFIG_PP_OG_EXCLUDE_LIST</code> setting to specify a list of
448 * node names you want to be kept. Nodes matching one of the names in
449 * this list won't be touched or modified.
450 *
451 * Use this flag with caution. Most simple files will be collapsed to a
452 * single node, complex hierarchies are usually completely lost. That's
453 * note the right choice for editor environments, but probably a very
454 * effective optimization if you just want to get the model data, convert
455 * it to your own format and render it as fast as possible.
456 *
457 * This flag is designed to be used with <code>OptimizeMeshes</code> for
458 * best results.
459 *
460 * Note: »Crappy« scenes with thousands of extremely small meshes packed
461 * in deeply nested nodes exist for almost all file formats.
462 * <code>OptimizeMeshes</code> in combination with
463 * <code>OptimizeGraph</code> usually fixes them all and makes them
464 * renderable.
465 */
466 OptimizeGraph = 0x400000,
467
468 /** This step flips all UV coordinates along the y-axis and adjusts
469 * material settings and bitangents accordingly.
470 *
471 * Output UV coordinate system:
472 * <pre> 0y|0y ---------- 1x|0y
473 * | |
474 * | |
475 * | |
476 * 0x|1y ---------- 1x|1y</pre>
477 * You'll probably want to consider this flag if you use Direct3D for
478 * rendering. The <code>AI_PROCESS_CONVERT_TO_LEFT_HANDED</code> flag
479 * supersedes this setting and bundles all conversions typically required
480 * for D3D-based applications.
481 */
482 FlipUVs = 0x800000,
483
484 /**
485 * This step adjusts the output face winding order to be clockwise.
486 *
487 * The default face winding order is counter clockwise.
488 *
489 * Output face order:
490 * <pre> x2
491 *
492 * x0
493 * x1</pre>
494 */
495 FlipWindingOrder = 0x1000000
496 }
497
498 /**
499 * Abbrevation for convenience.
500 */
501 alias aiPostProcessSteps aiProcess;
502
503 /**
504 * Shortcut flag for Direct3D-based applications.
505 *
506 * Combines the <code>MakeLeftHanded</code>, <code>FlipUVs</code> and
507 * <code>FlipWindingOrder</code> flags. The output data matches Direct3D's
508 * conventions: left-handed geometry, upper-left origin for UV coordinates
509 * and clockwise face order, suitable for CCW culling.
510 */
511 const aiPostProcessSteps AI_PROCESS_CONVERT_TO_LEFT_HANDED =
512 aiProcess.MakeLeftHanded |
513 aiProcess.FlipUVs |
514 aiProcess.FlipWindingOrder;
515
516 /**
517 * Default postprocess configuration optimizing the data for real-time rendering.
518 *
519 * Applications would want to use this preset to load models on end-user
520 * PCs, maybe for direct use in game.
521 *
522 * If you're using DirectX, don't forget to combine this value with
523 * the <code>ConvertToLeftHanded</code> step. If you don't support UV
524 * transformations in your application, apply the
525 * <code>TransformUVCoords</code> step, too.
526 *
527 * Note: Please take the time to read the doc for the steps enabled by this
528 * preset. Some of them offer further configurable properties, some of
529 * them might not be of use for you so it might be better to not specify
530 * them.
531 */
532 const aiPostProcessSteps AI_PROCESS_PRESET_TARGET_REALTIME_FAST =
533 aiProcess.CalcTangentSpace |
534 aiProcess.GenNormals |
535 aiProcess.JoinIdenticalVertices |
536 aiProcess.Triangulate |
537 aiProcess.GenUVCoords |
538 aiProcess.SortByPType;
539
540 /**
541 * Default postprocess configuration optimizing the data for real-time
542 * rendering.
543 *
544 * Unlike <code>AI_PROCESS_PRESET_TARGET_REALTIME_FAST</code>, this
545 * configuration performs some extra optimizations to improve rendering
546 * speed and to minimize memory usage. It could be a good choice for a
547 * level editor environment where import speed is not so important.
548 *
549 * If you're using DirectX, don't forget to combine this value with
550 * the <code>ConvertToLeftHanded</code> step. If you don't support UV
551 * transformations in your application, apply the
552 * <code>TransformUVCoords</code> step, too.
553 *
554 * Note: Please take the time to read the doc for the steps enabled by this
555 * preset. Some of them offer further configurable properties, some of
556 * them might not be of use for you so it might be better to not specify
557 * them.
558 */
559 const aiPostProcessSteps AI_PROCESS_PRESET_TARGET_REALTIME_QUALITY =
560 aiProcess.CalcTangentSpace |
561 aiProcess.GenSmoothNormals |
562 aiProcess.JoinIdenticalVertices |
563 aiProcess.ImproveCacheLocality |
564 aiProcess.LimitBoneWeights |
565 aiProcess.RemoveRedundantMaterials |
566 aiProcess.SplitLargeMeshes |
567 aiProcess.Triangulate |
568 aiProcess.GenUVCoords |
569 aiProcess.SortByPType |
570 aiProcess.FindDegenerates |
571 aiProcess.FindInvalidData;
572
573 /**
574 * Default postprocess configuration optimizing the data for real-time
575 * rendering.
576 *
577 * This preset enables almost every optimization step to achieve perfectly
578 * optimized data. It's your choice for level editor environments where
579 * import speed is not important.
580 *
581 * If you're using DirectX, don't forget to combine this value with
582 * the <code>ConvertToLeftHanded</code> step. If you don't support UV
583 * transformations in your application, apply the
584 * <code>TransformUVCoords</code> step, too.
585 *
586 * Note: Please take the time to read the doc for the steps enabled by this
587 * preset. Some of them offer further configurable properties, some of
588 * them might not be of use for you so it might be better to not specify
589 * them.
590 */
591 const aiPostProcessSteps AI_PROCESS_PRESET_TARGET_REALTIME_MAX_QUALITY =
592 AI_PROCESS_PRESET_TARGET_REALTIME_QUALITY |
593 aiProcess.FindInstances |
594 aiProcess.ValidateDataStructure |
595 aiProcess.OptimizeMeshes;
596 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Contains the data structures which store the hierarchy fo the imported data.
43 */
44 module assimp.scene;
45
46 import assimp.animation;
47 import assimp.camera;
48 import assimp.light;
49 import assimp.math;
50 import assimp.mesh;
51 import assimp.material;
52 import assimp.texture;
53 import assimp.types;
54
55 extern ( C ) {
56 /**
57 * A node in the imported hierarchy.
58 *
59 * Each node has name, a parent node (except for the root node), a
60 * transformation relative to its parent and possibly several child nodes.
61 * Simple file formats don't support hierarchical structures, for these
62 * formats the imported scene does consist of only a single root node with
63 * no childs.
64 */
65 struct aiNode {
66 /**
67 * The name of the node.
68 *
69 * The name might be empty (length of zero) but all nodes which need to
70 * be accessed afterwards by bones or animations are usually named.
71 * Multiple nodes may have the same name, but nodes which are accessed
72 * by bones (see <code>aiBone</code> and <code>aiMesh.mBones</code>)
73 * <em>must</em> be unique.
74 *
75 * Cameras and lights are assigned to a specific node name – if there are
76 * multiple nodes with this name, they are assigned to each of them.
77 *
78 * There are no limitations regarding the characters contained in this
79 * string. You should be able to handle stuff like whitespace, tabs,
80 * linefeeds, quotation marks, ampersands, …
81 */
82 aiString mName;
83
84 /**
85 * The transformation relative to the node's parent.
86 */
87 aiMatrix4x4 mTransformation;
88
89 /**
90 * Parent node.
91 *
92 * null if this node is the root node.
93 */
94 aiNode* mParent;
95
96 /**
97 * The number of child nodes of this node.
98 */
99 uint mNumChildren;
100
101 /**
102 * The child nodes of this node.
103 *
104 * null if <code>mNumChildren</code> is 0.
105 */
106 aiNode** mChildren;
107
108 /**
109 * The number of meshes of this node.
110 */
111 int mNumMeshes;
112
113 /**
114 * The meshes of this node.
115 *
116 * Each entry is an index for <code>aiScene.mMeshes</code>.
117 */
118 uint* mMeshes;
119 }
120
121 /**
122 * Flags which are combinated in <code>aiScene.mFlags</code> to store
123 * auxiliary information about the imported scene.
124 */
125 enum aiSceneFlags : uint {
126 /**
127 * Specifies that the scene data structure that was imported is not
128 * complete.
129 *
130 * This flag bypasses some internal validations and allows the import of
131 * animation skeletons, material libraries or camera animation paths
132 * using Assimp. Most applications won't support such data.
133 */
134 INCOMPLETE = 0x1,
135
136 /**
137 * This flag is set by the validation post-processing step
138 * (<code>aiProcess.ValidateDS</code>) if the validation was successful.
139 *
140 * In a validated scene you can be sure that any cross references in the
141 * data structure (e.g. vertex indices) are valid.
142 */
143 VALIDATED = 0x2,
144
145 /**
146 * This flag is set by the validation post-processing step
147 * (<code>aiProcess.ValidateDS</code>) if the validation is successful
148 * but some issues have been found.
149 *
150 * This can for example mean that a texture that does not exist is
151 * referenced by a material or that the bone weights for a vertex don't
152 * sum to 1. In most cases you should still be able to use the import.
153 *
154 * This flag could be useful for applications which don't capture
155 * Assimp's log output.
156 */
157 VALIDATION_WARNING = 0x4,
158
159 /**
160 * This flag is currently only set by the
161 * <code>aiProcess.JoinIdenticalVertices</code> post-processing step. It
162 * indicates that the vertices of the output meshes aren't in the
163 * internal verbose format anymore. In the verbose format all vertices
164 * are unique, no vertex is ever referenced by more than one face.
165 */
166 NON_VERBOSE_FORMAT = 0x8,
167
168 /**
169 * Denotes pure height-map terrain data. Pure terrains usually consist of
170 * quads, sometimes triangles, in a regular grid. The x,y coordinates of
171 * all vertex positions refer to the x,y coordinates on the terrain
172 * height map, the z-axis stores the elevation at a specific point.
173 *
174 * TER (Terragen) and HMP (3D Game Studio) are height map formats.
175 *
176 * Note: Assimp is probably not the best choice for loading <em>huge</em>
177 * terrains – fully triangulated data takes extremely much storage
178 * space and should be avoided as long as possible (typically you will
179 * perform the triangulation when you actually need to render it).
180 */
181 FLAGS_TERRAIN = 0x10
182 }
183
184 /**
185 * The root structure of the imported data.
186 *
187 * Everything that was imported from the given file can be accessed from here.
188 * Objects of this class are generally maintained and owned by Assimp, not
189 * by the caller. You shouldn't want to instance it, nor should you ever try to
190 * delete a given scene on your own.
191 */
192 struct aiScene {
193 /**
194 * Any combination of the <code>aiSceneFlags</code>. By default, this
195 * value is 0, no flags are set.
196 *
197 * Most applications will want to reject all scenes with the
198 * <code>aiSceneFlags.INCOMPLETE</code> bit set.
199 */
200 uint mFlags;
201
202 /**
203 * The root node of the hierarchy.
204 *
205 * There will always be at least the root node if the import was
206 * successful (and no special flags have been set). Presence of further
207 * nodes depends on the format and contents of the imported file.
208 */
209 aiNode* mRootNode;
210
211 /**
212 * The number of meshes in the scene.
213 */
214 uint mNumMeshes;
215
216 /**
217 * The array of meshes.
218 *
219 * Use the indices given in the <code>aiNode</code> structure to access
220 * this array. The array is <code>mNumMeshes</code> in size.
221 *
222 * If the <code>aiSceneFlags.INCOMPLETE</code> flag is not set, there
223 * will always be at least one mesh.
224 */
225 aiMesh** mMeshes;
226
227 /**
228 * The number of materials in the scene.
229 */
230 uint mNumMaterials;
231
232 /**
233 * The array of meshes.
234 *
235 * Use the indices given in the <code>aiMesh</code> structure to access
236 * this array. The array is <code>mNumMaterials</code> in size.
237 *
238 * If the <code>aiSceneFlags.INCOMPLETE</code> flag is not set, there
239 * will always be at least one material.
240 */
241 aiMaterial** mMaterials;
242
243 /**
244 * The number of animations in the scene.
245 */
246 uint mNumAnimations;
247
248 /**
249 * The array of animations.
250 *
251 * All animations imported from the given file are listed here. The array
252 * is <code>mNumAnimations</code> in size.
253 */
254 aiAnimation** mAnimations;
255
256 /**
257 * The number of textures embedded into the file.
258 */
259 uint mNumTextures;
260
261 /**
262 * The array of embedded textures.
263 *
264 * Not many file formats embed their textures into the file. An example
265 * is Quake's <code>MDL</code> format (which is also used by some
266 * GameStudio versions).
267 */
268 aiTexture** mTextures;
269
270 /**
271 * The number of light sources in the scene.
272 *
273 * Light sources are fully optional, in most cases this attribute will be
274 * 0.
275 */
276 uint mNumLights;
277
278 /**
279 * The array of light sources.
280 *
281 * All light sources imported from the given file are listed here. The
282 * array is <code>mNumLights</code> in size.
283 */
284 aiLight** mLights;
285
286 /**
287 * The number of cameras in the scene.
288 *
289 * Cameras are fully optional, in most cases this attribute
290 * will be 0.
291 */
292 uint mNumCameras;
293
294 /**
295 * The array of cameras.
296 *
297 * All cameras imported from the given file are listed here. The array is
298 * <code>mNumCameras</code> in size.
299 *
300 * The first camera in the array (if existing) is the default camera view
301 * at the scene.
302 */
303 aiCamera** mCameras;
304 }
305 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Contains helper structures to handle textures in Assimp.
43 *
44 * Used for file formats which embed their textures into the model file.
45 * Supported are both normal textures, which are stored as uncompressed pixels,
46 * and "compressed" textures, which are stored in a file format such as PNG or
47 * TGA.
48 */
49 module assimp.texture;
50
51 extern ( C ) {
52 /**
53 * Helper structure to represent a texel in a ARGB8888 format.
54 *
55 * Used by aiTexture.
56 */
57 struct aiTexel {
58 align ( 1 ):
59 ubyte b, g, r, a;
60 }
61
62 /**
63 * Helper structure to describe an embedded texture.
64 *
65 * Usually textures are contained in external files but some file formats
66 * embed them directly in the model file. There are two types of
67 * embedded textures:
68 *
69 * <em>1. Uncompressed textures</em>: The color data is given in an
70 * uncompressed format.
71 *
72 * <em>2. Compressed textures</em> stored in a file format like PNG or JPEG.
73 * The raw file bytes are given so the application must utilize an image
74 * decoder (e.g. DevIL) to get access to the actual color data.
75 */
76 struct aiTexture {
77 /**
78 * Width of the texture, in pixels.
79 *
80 * If <code>mHeight</code> is zero the texture is compressed in a format
81 * like JPEG. In this case, this value specifies the size of the memory
82 * area <code>pcData</code> is pointing to, in bytes.
83 */
84 uint mWidth;
85
86 /**
87 * Height of the texture, in pixels.
88 *
89 * If this value is zero, <code>pcData</code> points to an compressed
90 * texture in any format (e.g. JPEG).
91 */
92 uint mHeight;
93
94 /**
95 * A hint from the loader to make it easier for applications to determine
96 * the type of embedded compressed textures.
97 *
98 * If <code>mHeight</code> is not 0, this member is undefined. Otherwise
99 * it is set set to '\0\0\0\0' if the loader has no additional
100 * information about the texture file format used, or the file extension
101 * of the format without a trailing dot. If there are multiple file
102 * extensions for a format, the shortest extension is chosen (JPEG maps
103 * to 'jpg', not to 'jpeg'). E.g. 'dds\0', 'pcx\0', 'jpg\0'. All
104 * characters are lower-case. The fourth byte will always be '\0'.
105 */
106 char achFormatHint[4];
107
108 /**
109 * Data of the texture.
110 *
111 * Points to an array of <code>mWidth * mHeight</code>
112 * <code>aiTexel</code>s. The format of the texture data is always
113 * ARGB8888 to make the implementation for user of the library as easy as
114 * possible.
115 *
116 * If <code>mHeight</code> is 0, this is a pointer to a memory buffer of
117 * size <code>mWidth</code> containing the compressed texture data.
118 */
119 aiTexel* pcData;
120 }
121 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Contains miscellaneous types used in Assimp's C API.
43 */
44 module assimp.types;
45
46 extern ( C ) {
47 /**
48 * Our own C boolean type.
49 */
50 enum aiBool : int {
51 FALSE = 0,
52 TRUE = 1
53 }
54
55 /**
56 * Type definition for log stream callback function pointers.
57 */
58 alias void function( char* message, char* user ) aiLogStreamCallback;
59
60 /**
61 * Represents a log stream. A log stream receives all log messages and
62 * streams them somewhere.
63 *
64 * See: <code>aiGetPredefinedLogStream</code>,
65 * <code>aiAttachLogStream</code> and <code>aiDetachLogStream</code>.
66 */
67 struct aiLogStream {
68 /**
69 * Callback function to be called when a new message arrives.
70 */
71 aiLogStreamCallback callback;
72
73 /**
74 * User data to be passed to the callback.
75 */
76 char* user;
77 }
78
79 /**
80 * Maximum dimension for <code>aiString</code>s.
81 *
82 * Assimp strings are zero terminated.
83 */
84 const size_t MAXLEN = 1024;
85
86 /**
87 * Represents an UTF-8 string, zero byte terminated.
88 *
89 * The length of such a string is limited to <code>MAXLEN</code> bytes
90 * (excluding the terminal \0).
91 *
92 * The character set of an aiString is explicitly defined to be UTF-8. This
93 * Unicode transformation was chosen in the belief that most strings in 3d
94 * model files are limited to ASCII characters, thus the character set
95 * needed to be ASCII compatible.
96 *
97 * Most text file loaders provide proper Unicode input file handling,
98 * special unicode characters are correctly transcoded to UTF-8 and are kept
99 * throughout the libraries' import pipeline.
100 *
101 * For most applications, it will be absolutely sufficient to interpret the
102 * aiString as ASCII data and work with it as one would work with a plain
103 * char[].
104 *
105 * To access an aiString from D you might want to use something like the
106 * following piece of code:
107 * ---
108 * char[] importAiString( aiString* s ) {
109 * return s.data[ 0 .. s.length ];
110 * }
111 * ---
112 */
113 struct aiString {
114 /**
115 * Length of the string (excluding the terminal \0).
116 *
117 * This is <em>not</em> the logical length of strings containing UTF-8
118 * multibyte sequences, but the number of bytes from the beginning of the
119 * string to its end.
120 */
121 size_t length;
122
123 /**
124 * String buffer.
125 *
126 * Size limit is <code>MAXLEN</code>.
127 */
128 char data[ MAXLEN ];
129 }
130
131 /**
132 * Standard return type for some library functions.
133 */
134 enum aiReturn : uint {
135 /**
136 * Indicates that a function was successful.
137 */
138 SUCCESS = 0x0,
139
140 /**
141 * Indicates that a function failed.
142 */
143 FAILURE = -0x1,
144
145 /**
146 * Indicates that not enough memory was available to perform the
147 * requested operation.
148 */
149 OUTOFMEMORY = -0x3
150 }
151
152 /**
153 * Seek origins (for the virtual file system API).
154 */
155 enum aiOrigin : uint {
156 /**
157 * Beginning of the file.
158 */
159 SET = 0x0,
160
161 /**
162 * Current position of the file pointer.
163 */
164 CUR = 0x1,
165
166 /**
167 * End of the file.
168 *
169 * Offsets must be negative.
170 */
171 END = 0x2
172 }
173
174 /**
175 * Enumerates predefined log streaming destinations.
176 *
177 * Logging to these streams can be enabled with a single call to
178 * <code>aiAttachPredefinedLogStream()</code>.
179 */
180 enum aiDefaultLogStream :uint {
181 /**
182 * Stream the log to a file.
183 */
184 FILE = 0x1,
185
186 /**
187 * Stream the log to standard output.
188 */
189 STDOUT = 0x2,
190
191 /**
192 * Stream the log to standard error.
193 */
194 STDERR = 0x4,
195
196 /**
197 * MSVC only: Stream the log the the debugger (this relies on
198 * <code>OutputDebugString</code> from the Win32 SDK).
199 */
200 DEBUGGER = 0x8
201 }
202
203 /**
204 * Stores the memory requirements for different components (e.g. meshes,
205 * materials, animations) of an import. All sizes are in bytes.
206 */
207 struct aiMemoryInfo {
208 /**
209 * Storage allocated for texture data.
210 */
211 uint textures;
212
213 /**
214 * Storage allocated for material data.
215 */
216 uint materials;
217
218 /**
219 * Storage allocated for mesh data.
220 */
221 uint meshes;
222
223 /**
224 * Storage allocated for node data.
225 */
226 uint nodes;
227
228 /**
229 * Storage allocated for animation data.
230 */
231 uint animations;
232
233 /**
234 * Storage allocated for camera data.
235 */
236 uint cameras;
237
238 /**
239 * Storage allocated for light data.
240 */
241 uint lights;
242
243 /**
244 * Total storage allocated for the full import.
245 */
246 uint total;
247 }
248 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Flags returned by <code>aiGetCompileFlags()</code>.
43 */
44 module assimp.versionInfo;
45
46 extern ( C ) {
47 /**
48 * Assimp was compiled as a shared object (Windows: DLL).
49 */
50 const uint ASSIMP_CFLAGS_SHARED = 0x1;
51
52 /**
53 * Assimp was compiled against STLport.
54 */
55 const uint ASSIMP_CFLAGS_STLPORT = 0x2;
56
57 /**
58 * Assimp was compiled as a debug build.
59 */
60 const uint ASSIMP_CFLAGS_DEBUG = 0x4;
61
62 /**
63 * Assimp was compiled with ASSIMP_BUILD_BOOST_WORKAROUND defined.
64 */
65 const uint ASSIMP_CFLAGS_NOBOOST = 0x8;
66
67 /**
68 * Assimp was compiled with ASSIMP_BUILD_SINGLETHREADED defined.
69 */
70 const uint ASSIMP_CFLAGS_SINGLETHREADED = 0x10;
71 }
0 INCLUDE(CMakeForceCompiler)
1
2 SET (CMAKE_CROSSCOMPILING TRUE)
3 SET (CMAKE_SYSTEM_NAME "Darwin")
4 SET (CMAKE_SYSTEM_PROCESSOR "arm64")
5
6 SET (SDKVER "7.1")
7 SET (DEVROOT "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain")
8 SET (SDKROOT "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVER}.sdk")
9 SET (CC "${DEVROOT}/usr/bin/llvm-gcc")
10 SET (CXX "${DEVROOT}/usr/bin/llvm-g++")
11
12 CMAKE_FORCE_C_COMPILER (${CC} LLVM)
13 CMAKE_FORCE_CXX_COMPILER (${CXX} LLVM)
14
15 SET (CMAKE_FIND_ROOT_PATH "${SDKROOT}" "${DEVROOT}")
16 SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
17 SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
18 SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+0
-19
port/iOS/IPHONEOS_ARM6_TOOLCHAIN.cmake less more
0 INCLUDE(CMakeForceCompiler)
1
2 SET (CMAKE_CROSSCOMPILING TRUE)
3 SET (CMAKE_SYSTEM_NAME "Darwin")
4 SET (CMAKE_SYSTEM_PROCESSOR "armv6")
5
6 SET (SDKVER "5.0")
7 SET (DEVROOT "/Developer/Platforms/iPhoneOS.platform/Developer")
8 SET (SDKROOT "/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVER}.sdk")
9 SET (CC "${DEVROOT}/usr/bin/llvm-gcc")
10 SET (CXX "${DEVROOT}/usr/bin/llvm-g++")
11
12 CMAKE_FORCE_C_COMPILER (${CC} LLVM)
13 CMAKE_FORCE_CXX_COMPILER (${CXX} LLVM)
14
15 SET (CMAKE_FIND_ROOT_PATH "${SDKROOT}" "${DEVROOT}")
16 SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
17 SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
18 SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+0
-19
port/iOS/IPHONEOS_ARM7_TOOLCHAIN.cmake less more
0 INCLUDE(CMakeForceCompiler)
1
2 SET (CMAKE_CROSSCOMPILING TRUE)
3 SET (CMAKE_SYSTEM_NAME "Darwin")
4 SET (CMAKE_SYSTEM_PROCESSOR "armv7")
5
6 SET (SDKVER "5.0")
7 SET (DEVROOT "/Developer/Platforms/iPhoneOS.platform/Developer")
8 SET (SDKROOT "/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVER}.sdk")
9 SET (CC "${DEVROOT}/usr/bin/llvm-gcc")
10 SET (CXX "${DEVROOT}/usr/bin/llvm-g++")
11
12 CMAKE_FORCE_C_COMPILER (${CC} LLVM)
13 CMAKE_FORCE_CXX_COMPILER (${CXX} LLVM)
14
15 SET (CMAKE_FIND_ROOT_PATH "${SDKROOT}" "${DEVROOT}")
16 SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
17 SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
18 SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
0 INCLUDE(CMakeForceCompiler)
1
2 SET (CMAKE_CROSSCOMPILING TRUE)
3 SET (CMAKE_SYSTEM_NAME "Darwin")
4 SET (CMAKE_SYSTEM_PROCESSOR "armv6")
5
6 SET (SDKVER "7.1")
7 SET (DEVROOT "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain")
8 SET (SDKROOT "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVER}.sdk")
9 SET (CC "${DEVROOT}/usr/bin/clang")
10 SET (CXX "${DEVROOT}/usr/bin/clang++")
11
12 CMAKE_FORCE_C_COMPILER (${CC} LLVM)
13 CMAKE_FORCE_CXX_COMPILER (${CXX} LLVM)
14
15 SET (CMAKE_FIND_ROOT_PATH "${SDKROOT}" "${DEVROOT}")
16 SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
17 SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
18 SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
0 INCLUDE(CMakeForceCompiler)
1
2 SET (CMAKE_CROSSCOMPILING TRUE)
3 SET (CMAKE_SYSTEM_NAME "Darwin")
4 SET (CMAKE_SYSTEM_PROCESSOR "armv7s")
5
6 SET (SDKVER "7.1")
7 SET (DEVROOT "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain")
8 SET (SDKROOT "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVER}.sdk")
9 SET (CC "${DEVROOT}/usr/bin/clang")
10 SET (CXX "${DEVROOT}/usr/bin/clang++")
11
12 CMAKE_FORCE_C_COMPILER (${CC} LLVM)
13 CMAKE_FORCE_CXX_COMPILER (${CXX} LLVM)
14
15 SET (CMAKE_FIND_ROOT_PATH "${SDKROOT}" "${DEVROOT}")
16 SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
17 SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
18 SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
0 INCLUDE(CMakeForceCompiler)
1
2 SET (CMAKE_CROSSCOMPILING TRUE)
3 SET (CMAKE_SYSTEM_NAME "Darwin")
4 SET (CMAKE_SYSTEM_PROCESSOR "armv7")
5
6 SET (SDKVER "7.1")
7 SET (DEVROOT "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain")
8 SET (SDKROOT "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVER}.sdk")
9 SET (CC "${DEVROOT}/usr/bin/clang")
10 SET (CXX "${DEVROOT}/usr/bin/clang++")
11
12 CMAKE_FORCE_C_COMPILER (${CC} LLVM)
13 CMAKE_FORCE_CXX_COMPILER (${CXX} LLVM)
14
15 SET (CMAKE_FIND_ROOT_PATH "${SDKROOT}" "${DEVROOT}")
16 SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
17 SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
18 SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
0 INCLUDE(CMakeForceCompiler)
1
2 SET (CMAKE_CROSSCOMPILING TRUE)
3 SET (CMAKE_SYSTEM_NAME "Darwin")
4 SET (CMAKE_SYSTEM_PROCESSOR "i386")
5
6 SET (SDKVER "7.1")
7
8 SET (DEVROOT "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain")
9 SET (SDKROOT "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator${SDKVER}.sdk")
10 SET (CC "${DEVROOT}/usr/bin/clang")
11 SET (CXX "${DEVROOT}/usr/bin/clang++")
12
13 CMAKE_FORCE_C_COMPILER (${CC} LLVM)
14 CMAKE_FORCE_CXX_COMPILER (${CXX} LLVM)
15
16 SET (CMAKE_FIND_ROOT_PATH "${SDKROOT}" "${DEVROOT}")
17 SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
18 SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
19 SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
0 INCLUDE(CMakeForceCompiler)
1
2 SET (CMAKE_CROSSCOMPILING TRUE)
3 SET (CMAKE_SYSTEM_NAME "Darwin")
4 SET (CMAKE_SYSTEM_PROCESSOR "x86_64")
5
6 SET (SDKVER "7.1")
7
8 SET (DEVROOT "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain")
9 SET (SDKROOT "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator${SDKVER}.sdk")
10 SET (CC "${DEVROOT}/usr/bin/clang")
11 SET (CXX "${DEVROOT}/usr/bin/clang++")
12
13 CMAKE_FORCE_C_COMPILER (${CC} LLVM)
14 CMAKE_FORCE_CXX_COMPILER (${CXX} LLVM)
15
16 SET (CMAKE_FIND_ROOT_PATH "${SDKROOT}" "${DEVROOT}")
17 SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
18 SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
19 SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+0
-19
port/iOS/IPHONEOS_i386_TOOLCHAIN.cmake less more
0 INCLUDE(CMakeForceCompiler)
1
2 SET (CMAKE_CROSSCOMPILING TRUE)
3 SET (CMAKE_SYSTEM_NAME "Darwin")
4 SET (CMAKE_SYSTEM_PROCESSOR "i386")
5
6 SET (SDKVER "5.0")
7 SET (DEVROOT "/Developer/Platforms/iPhoneOS.platform/Developer")
8 SET (SDKROOT "/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS${SDKVER}.sdk")
9 SET (CC "${DEVROOT}/usr/bin/llvm-gcc")
10 SET (CXX "${DEVROOT}/usr/bin/llvm-g++")
11
12 CMAKE_FORCE_C_COMPILER (${CC} LLVM)
13 CMAKE_FORCE_CXX_COMPILER (${CXX} LLVM)
14
15 SET (CMAKE_FIND_ROOT_PATH "${SDKROOT}" "${DEVROOT}")
16 SET (CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
17 SET (CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
18 SET (CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
0 # assimp for iOS-SDK 7.1
1 (deployment target 6.0+, 32/64bit)
2
3 Builds assimp libraries for several iOS CPU architectures at once, and outputs a fat binary from the result.
4
5 Run the **build.sh** script from the ```./port/iOS/``` directory. See **./build.sh --help** for information about command line options.
6
7 ```bash
8 shadeds-Mac:iOS arul$ ./build.sh --help
9 [!] ./build.sh - assimp iOS build script
10 - don't build fat library (--no-fat)
11 - supported architectures(--archs): armv7, armv7s, arm64, i386, x86_64
12 - supported C++ STD libs.(--stdlib): libc++, libstdc++
13 ```
14 Example:
15 ```bash
16 cd ./port/iOS/
17 ./build.sh --stdlib=libc++ --archs="armv7 arm64 i386"
18 ```
19 Supported architectures/devices:
20
21 ### Simulator
22 - i386
23 - x86_64
24
25 ### Device
26 - ~~ARMv6 (dropped after iOS 6.0)~~
27 - ARMv7
28 - ARMv7-s
29 - ARM64
+0
-13
port/iOS/README.txt less more
0 To build for iOS simply execute "./build_ios.sh" from this folder. Currently this script requires the latest SDK (5.0) from Apple in order to build properly. In the future I will add support for specifying the SDK version on the command line.
1
2 Once the build is completed you will see a "ios" folder under /lib. This folder has sub folders for each of the following architectures:
3
4 * armv6 (Older Devices)
5 * armv7 (New Devices)
6 * i386 (Simulator)
7
8 Each of these folders contains a single static library for that architecture. In addition the libassimp.a file in the root of this folder is a combined archive (fat binary) library for all of the above architectures.
9
10 This port is being maintained by Matt Mathias <mmathias01@gmail.com> please contact him with any questions or comments.
11
12
0 #!/bin/bash
1
2 #
3 # Written and maintained by the.arul@gmail.com (2014)
4 #
5
6 BUILD_DIR="./lib/iOS"
7
8 IOS_SDK_VERSION=7.1
9 IOS_SDK_TARGET=6.0
10 #(iPhoneOS iPhoneSimulator) -- determined from arch
11 IOS_SDK_DEVICE=
12
13 XCODE_ROOT_DIR=/Applications/Xcode.app/Contents
14 TOOLCHAIN=$XCODE_ROOT_DIR//Developer/Toolchains/XcodeDefault.xctoolchain
15
16 BUILD_ARCHS_DEVICE="armv7 armv7s arm64"
17 BUILD_ARCHS_SIMULATOR="i386 x86_64"
18 BUILD_ARCHS_ALL=(armv7 armv7s arm64 i386 x86_64)
19
20 CPP_DEV_TARGET_LIST=(miphoneos-version-min mios-simulator-version-min)
21 CPP_DEV_TARGET=
22 CPP_STD_LIB_LIST=(libc++ libstdc++)
23 CPP_STD_LIB=
24
25 function join { local IFS="$1"; shift; echo "$*"; }
26
27 build_arch()
28 {
29 IOS_SDK_DEVICE=iPhoneOS
30 CPP_DEV_TARGET=${CPP_DEV_TARGET_LIST[0]}
31
32 if [[ "$BUILD_ARCHS_SIMULATOR" =~ "$1" ]]
33 then
34 echo '[!] Target SDK set to SIMULATOR.'
35 IOS_SDK_DEVICE=iPhoneSimulator
36 CPP_DEV_TARGET=${CPP_DEV_TARGET_LIST[1]}
37 else
38 echo '[!] Target SDK set to DEVICE.'
39 fi
40
41 unset DEVROOT SDKROOT CFLAGS LDFLAGS CPPFLAGS CXXFLAGS
42
43 export DEVROOT=$XCODE_ROOT_DIR/Developer/Platforms/$IOS_SDK_DEVICE.platform/Developer
44 export SDKROOT=$DEVROOT/SDKs/$IOS_SDK_DEVICE$IOS_SDK_VERSION.sdk
45 export CFLAGS="-arch $1 -pipe -no-cpp-precomp -stdlib=$CPP_STD_LIB -isysroot $SDKROOT -$CPP_DEV_TARGET=$IOS_SDK_TARGET -I$SDKROOT/usr/include/"
46 export LDFLAGS="-L$SDKROOT/usr/lib/"
47 export CPPFLAGS=$CFLAGS
48 export CXXFLAGS=$CFLAGS
49
50 rm CMakeCache.txt
51
52 cmake -G 'Unix Makefiles' -DCMAKE_TOOLCHAIN_FILE=./port/iOS/IPHONEOS_$(echo $1 | tr '[:lower:]' '[:upper:]')_TOOLCHAIN.cmake -DENABLE_BOOST_WORKAROUND=ON -DASSIMP_BUILD_STATIC_LIB=ON
53
54 echo "[!] Building $1 library"
55
56 $XCODE_ROOT_DIR/Developer/usr/bin/make clean
57 $XCODE_ROOT_DIR/Developer/usr/bin/make assimp -j 8 -l
58
59 echo "[!] Moving built library into: $BUILD_DIR/$1/"
60
61 mv ./lib/libassimp.a $BUILD_DIR/$1/
62 }
63
64 echo "[!] $0 - assimp iOS build script"
65
66 CPP_STD_LIB=${CPP_STD_LIB_LIST[0]}
67 DEPLOY_ARCHS=${BUILD_ARCHS_ALL[*]}
68 DEPLOY_FAT=1
69
70 for i in "$@"; do
71 case $i in
72 -l=*|--stdlib=*)
73 CPP_STD_LIB=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
74 echo "[!] Selecting c++ std lib: $CPP_STD_LIB"
75 ;;
76 -a=*|--archs=*)
77 DEPLOY_ARCHS=`echo $i | sed 's/[-a-zA-Z0-9]*=//'`
78 echo "[!] Selecting architectures: $DEPLOY_ARCHS"
79 ;;
80 -n|--no-fat)
81 DEPLOY_FAT=0
82 echo "[!] Fat binary will not be created."
83 ;;
84 -h|--help)
85 echo " - don't build fat library (--no-fat)."
86 echo " - supported architectures (--archs): $(echo $(join , ${BUILD_ARCHS_ALL[*]}) | sed 's/,/, /g')"
87 echo " - supported C++ STD libs. (--stdlib): $(echo $(join , ${CPP_STD_LIB_LIST[*]}) | sed 's/,/, /g')"
88 exit
89 ;;
90 *)
91 ;;
92 esac
93 done
94
95 cd ../../
96 rm -rf $BUILD_DIR
97
98 for ARCH_TARGET in $DEPLOY_ARCHS; do
99 mkdir -p $BUILD_DIR/$ARCH_TARGET
100 build_arch $ARCH_TARGET
101 #rm ./lib/libassimp.a
102 done
103
104 if [[ "$DEPLOY_FAT" -eq 1 ]]; then
105 echo '[+] Creating fat binary ...'
106 for ARCH_TARGET in $DEPLOY_ARCHS; do
107 LIPO_ARGS="$LIPO_ARGS-arch $ARCH_TARGET $BUILD_DIR/$ARCH_TARGET/libassimp.a "
108 done
109 LIPO_ARGS="$LIPO_ARGS-create -output $BUILD_DIR/libassimp-fat.a"
110 lipo $LIPO_ARGS
111 echo "[!] Done! The fat binary can be found at $BUILD_DIR"
112 fi
113
114
+0
-104
port/iOS/build_ios.sh less more
0 #!/bin/sh
1 # build.sh
2
3 #######################
4 # BUILD ASSIMP for iOS and iOS Simulator
5 #######################
6
7 BUILD_DIR="./lib/ios"
8
9 IOS_BASE_SDK="5.0"
10 IOS_DEPLOY_TGT="3.2"
11
12 setenv_all()
13 {
14 # Add internal libs
15 export CFLAGS="$CFLAGS"
16 export CPP="$DEVROOT/usr/bin/llvm-cpp-4.2"
17 export CXX="$DEVROOT/usr/bin/llvm-g++-4.2"
18 export CXXCPP="$DEVROOT/usr/bin/llvm-cpp-4.2"
19 export CC="$DEVROOT/usr/bin/llvm-gcc-4.2"
20 export LD=$DEVROOT/usr/bin/ld
21 export AR=$DEVROOT/usr/bin/ar
22 export AS=$DEVROOT/usr/bin/as
23 export NM=$DEVROOT/usr/bin/nm
24 export RANLIB=$DEVROOT/usr/bin/ranlib
25 export LDFLAGS="-L$SDKROOT/usr/lib/"
26
27 export CPPFLAGS=$CFLAGS
28 export CXXFLAGS=$CFLAGS
29 }
30
31 setenv_arm6()
32 {
33 unset DEVROOT SDKROOT CFLAGS CC LD CPP CXX AR AS NM CXXCPP RANLIB LDFLAGS CPPFLAGS CXXFLAGS
34 export DEVROOT=/Developer/Platforms/iPhoneOS.platform/Developer
35 export SDKROOT=$DEVROOT/SDKs/iPhoneOS$IOS_BASE_SDK.sdk
36 export CFLAGS="-arch armv6 -pipe -no-cpp-precomp -isysroot $SDKROOT -miphoneos-version-min=$IOS_DEPLOY_TGT -I$SDKROOT/usr/include/"
37 setenv_all
38 rm CMakeCache.txt
39 cmake -G 'Unix Makefiles' -DCMAKE_TOOLCHAIN_FILE=./port/iOS/IPHONEOS_ARM6_TOOLCHAIN.cmake -DENABLE_BOOST_WORKAROUND=ON -DBUILD_STATIC_LIB=ON
40 }
41
42 setenv_arm7()
43 {
44 unset DEVROOT SDKROOT CFLAGS CC LD CPP CXX AR AS NM CXXCPP RANLIB LDFLAGS CPPFLAGS CXXFLAGS
45 export DEVROOT=/Developer/Platforms/iPhoneOS.platform/Developer
46 export SDKROOT=$DEVROOT/SDKs/iPhoneOS$IOS_BASE_SDK.sdk
47 export CFLAGS="-arch armv7 -pipe -no-cpp-precomp -isysroot $SDKROOT -miphoneos-version-min=$IOS_DEPLOY_TGT -I$SDKROOT/usr/include/"
48 setenv_all
49 rm CMakeCache.txt
50 cmake -G 'Unix Makefiles' -DCMAKE_TOOLCHAIN_FILE=./port/iOS/IPHONEOS_ARM7_TOOLCHAIN.cmake -DENABLE_BOOST_WORKAROUND=ON -DBUILD_STATIC_LIB=ON
51 }
52
53 setenv_i386()
54 {
55 unset DEVROOT SDKROOT CFLAGS CC LD CPP CXX AR AS NM CXXCPP RANLIB LDFLAGS CPPFLAGS CXXFLAGS
56 export DEVROOT=/Developer/Platforms/iPhoneSimulator.platform/Developer
57 export SDKROOT=$DEVROOT/SDKs/iPhoneSimulator$IOS_BASE_SDK.sdk
58 export CFLAGS="-arch i386 -pipe -no-cpp-precomp -isysroot $SDKROOT -miphoneos-version-min=$IOS_DEPLOY_TGT"
59 setenv_all
60 rm CMakeCache.txt
61 cmake -G 'Unix Makefiles' -DCMAKE_TOOLCHAIN_FILE=./port/iOS/IPHONEOS_i386_TOOLCHAIN.cmake -DENABLE_BOOST_WORKAROUND=ON -DBUILD_STATIC_LIB=ON
62 }
63
64 create_outdir()
65 {
66 for lib_i386 in `find $BUILD_DIR/i386 -name "lib*\.a"`; do
67 lib_arm6=`echo $lib_i386 | sed "s/i386/arm6/g"`
68 lib_arm7=`echo $lib_i386 | sed "s/i386/arm7/g"`
69 lib=`echo $lib_i386 | sed "s/i386\///g"`
70 echo 'Creating fat binary...'
71 lipo -arch armv6 $lib_arm6 -arch armv7 $lib_arm7 -arch i386 $lib_i386 -create -output $lib
72 done
73 echo 'Done! You will find the libaries and fat binary library in /lib/ios'
74 }
75 cd ../../
76
77 rm -rf $BUILD_DIR
78 mkdir -p $BUILD_DIR/arm6 $BUILD_DIR/arm7 $BUILD_DIR/i386
79
80 setenv_arm6
81 echo 'Building armv6 library'
82 make clean
83 make assimp -j 8 -l
84 cp ./lib/libassimp.a $BUILD_DIR/arm6/
85
86 setenv_arm7
87 echo 'Building armv7 library'
88 make clean
89 make assimp -j 8 -l
90 cp ./lib/libassimp.a $BUILD_DIR/arm7/
91
92
93 setenv_i386
94 echo 'Building i386 library'
95 make clean
96 make assimp -j 8 -l
97 cp ./lib/libassimp.a $BUILD_DIR/i386/
98
99 rm ./lib/libassimp.a
100
101 create_outdir
102
103
0 jassimp
1 -------
2
3 Java binding for assimp.
4
5 The class model used by jassimp is not a one-to-one mapping of assimps class/
6 structure model (due to performance considerations). Please read the javadoc
7 descriptions of AiMesh and AiWrapperProvider.
8
9 The jassimp.lwjgl package contains a LWJGL specific wrapper provider and some
10 application examples using this wrapper
11
12
13
14 How To Build
15 ------------
16
17 I) native library
18
19 II) Java binding
20 The java library is built using ant. Executing "ant" in the port/jassimp
21 directory should be sufficient to build the library including docs. You
22 still need to build the native library separately, see above
23
24 The java build is configured to create java 1.6 classes
25
26
27
28 Limitations
29 -----------
30
31 Not all data imports have been tested yet, especially the countless texture
32 parameters. If you find bugs please report them.
33
34 jassimp supports most of assimps features. Current limitations are
35 * only importing scenes is supported. There are some methods that allow a
36 modification of the returned objects, but these should be considered as
37 work in progress. Full blown export support is planned for a future release
38 * no support for mesh animations
39 * no support for embedded textures
40 * no support for importer configurations
41 * no support for the custom I/O API of assimp
42 * some texture related material properties are not exposed via the API but only
43 accessible by traversing the list of properties. However this limitation is
44 also present in the c-API ...
45
46
47 License
48 -------
49
50 The license for jassimp is the same as the main Assimp license.
51
0 <project name="jassimp" basedir="." default="all">
1 <property name="native-src.dir" value="jassimp-native/src" />
2 <property name="src.dir" value="jassimp/src" />
3 <property name="jassimp.lwjgl-src.dir" value="jassimp.lwjgl/src" />
4 <property name="build.dir" value="jassimp/bin" />
5 <property name="dist.dir" value="dist" />
6 <property name="doc.dir" value="doc" />
7
8 <path id="classpath">
9 </path>
10
11 <target name="compile">
12 <delete dir="${build.dir}" />
13 <mkdir dir="${build.dir}" />
14 <javac classpathref="classpath" destdir="${build.dir}" srcdir="${src.dir}"
15 source="1.6" target="1.6" includeantruntime="false">
16 </javac>
17 </target>
18
19 <target name="jni_header">
20 <mkdir dir="${native-src.dir}" />
21 <javah outputfile="${native-src.dir}/jassimp.h" force="yes">
22 <classpath>
23 <pathelement path="${build.dir}" />
24 </classpath>
25 <class name="jassimp.Jassimp" />
26 </javah>
27 </target>
28
29 <target name="package" depends="compile">
30 <jar destfile="${dist.dir}/jassimp.jar" basedir="${build.dir}">
31 </jar>
32 </target>
33
34
35 <target name="doc">
36 <delete dir="${doc.dir}" />
37 <javadoc access="public" author="false" destdir="${doc.dir}"
38 sourcepath="${src.dir}">
39 </javadoc>
40 </target>
41
42 <target name="all" depends="package, doc">
43 </target>
44 </project>
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42
43 /**
44 * Defines how an animation channel behaves outside the defined time range.
45 */
46 public enum AiAnimBehavior {
47 /**
48 * The value from the default node transformation is taken.
49 */
50 DEFAULT(0x0),
51
52
53 /**
54 * The nearest key value is used without interpolation.
55 */
56 CONSTANT(0x1),
57
58
59 /**
60 * The value of the nearest two keys is linearly extrapolated for the
61 * current time value.
62 */
63 LINEAR(0x2),
64
65
66 /**
67 * The animation is repeated.<p>
68 *
69 * If the animation key go from n to m and the current time is t, use the
70 * value at (t-n) % (|m-n|).
71 */
72 REPEAT(0x3);
73
74
75 /**
76 * Utility method for converting from c/c++ based integer enums to java
77 * enums.<p>
78 *
79 * This method is intended to be used from JNI and my change based on
80 * implementation needs.
81 *
82 * @param rawValue an integer based enum value (as defined by assimp)
83 * @return the enum value corresponding to rawValue
84 */
85 static AiAnimBehavior fromRawValue(int rawValue) {
86 for (AiAnimBehavior type : AiAnimBehavior.values()) {
87 if (type.m_rawValue == rawValue) {
88 return type;
89 }
90 }
91
92 throw new IllegalArgumentException("unexptected raw value: " +
93 rawValue);
94 }
95
96
97 /**
98 * Constructor.
99 *
100 * @param rawValue maps java enum to c/c++ integer enum values
101 */
102 private AiAnimBehavior(int rawValue) {
103 m_rawValue = rawValue;
104 }
105
106
107 /**
108 * The mapped c/c++ integer enum value.
109 */
110 private final int m_rawValue;
111 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42 import java.util.ArrayList;
43 import java.util.List;
44
45 /**
46 * An animation.<p>
47 *
48 * An animation consists of keyframe data for a number of nodes. For
49 * each node affected by the animation a separate series of data is given.<p>
50 *
51 * Like {@link AiMesh}, the animation related classes offer a Buffer API, a
52 * Direct API and a wrapped API. Please consult the documentation of
53 * {@link AiMesh} for a description and comparison of these APIs.
54 */
55 public final class AiAnimation {
56 /**
57 * Constructor.
58 *
59 * @param name name
60 * @param duration duration
61 * @param ticksPerSecond ticks per second
62 */
63 AiAnimation(String name, double duration, double ticksPerSecond) {
64 m_name = name;
65 m_duration = duration;
66 m_ticksPerSecond = ticksPerSecond;
67 }
68
69
70 /**
71 * Returns the name of the animation.<p>
72 *
73 * If the modeling package this data was exported from does support only
74 * a single animation channel, this name is usually empty (length is zero).
75 *
76 * @return the name
77 */
78 public String getName() {
79 return m_name;
80 }
81
82
83 /**
84 * Returns the duration of the animation in ticks.
85 *
86 * @return the duration
87 */
88 public double getDuration() {
89 return m_duration;
90 }
91
92
93 /**
94 * Returns the ticks per second.<p>
95 *
96 * 0 if not specified in the imported file
97 *
98 * @return the number of ticks per second
99 */
100 public double getTicksPerSecond() {
101 return m_ticksPerSecond;
102 }
103
104
105 /**
106 * Returns the number of bone animation channels.<p>
107 *
108 * Each channel affects a single node. This method will return the same
109 * value as <code>getChannels().size()</code>
110 *
111 * @return the number of bone animation channels
112 */
113 public int getNumChannels() {
114 return m_nodeAnims.size();
115 }
116
117
118 /**
119 * Returns the list of bone animation channels.<p>
120 *
121 * Each channel affects a single node. The array is mNumChannels in size.
122 *
123 * @return the list of bone animation channels
124 */
125 public List<AiNodeAnim> getChannels() {
126 return m_nodeAnims;
127 }
128
129
130 /**
131 * Returns the number of mesh animation channels.<p>
132 *
133 * Each channel affects a single mesh and defines vertex-based animation.
134 * This method will return the same value as
135 * <code>getMeshChannels().size()</code>
136 *
137 * @return the number of mesh animation channels
138 */
139 public int getNumMeshChannels() {
140 throw new UnsupportedOperationException("not implemented yet");
141 }
142
143
144 /**
145 * Returns the list of mesh animation channels.<p>
146 *
147 * Each channel affects a single mesh.
148 *
149 * @return the list of mesh animation channels
150 */
151 public List<AiMeshAnim> getMeshChannels() {
152 throw new UnsupportedOperationException("not implemented yet");
153 }
154
155
156 /**
157 * Name.
158 */
159 private final String m_name;
160
161
162 /**
163 * Duration.
164 */
165 private final double m_duration;
166
167
168 /**
169 * Ticks per second.
170 */
171 private final double m_ticksPerSecond;
172
173
174 /**
175 * Bone animation channels.
176 */
177 private final List<AiNodeAnim> m_nodeAnims = new ArrayList<AiNodeAnim>();
178 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42
43 /**
44 * Defines alpha-blend flags.<p>
45 *
46 * If you're familiar with OpenGL or D3D, these flags aren't new to you.
47 * They define *how* the final color value of a pixel is computed, basing
48 * on the previous color at that pixel and the new color value from the
49 * material. The blend formula is:
50 * <br><code>
51 * SourceColor * SourceBlend + DestColor * DestBlend
52 * </code><br>
53 * where <code>DestColor</code> is the previous color in the framebuffer at
54 * this position and <code>SourceColor</code> is the material color before the
55 * transparency calculation.
56 */
57 public enum AiBlendMode {
58 /**
59 * Default blending.<p>
60 *
61 * Formula:
62 * <code>
63 * SourceColor*SourceAlpha + DestColor*(1-SourceAlpha)
64 * </code>
65 */
66 DEFAULT(0x0),
67
68
69 /**
70 * Additive blending.<p>
71 *
72 * Formula:
73 * <code>
74 * SourceColor*1 + DestColor*1
75 * </code>
76 */
77 ADDITIVE(0x1);
78
79
80 /**
81 * Utility method for converting from c/c++ based integer enums to java
82 * enums.<p>
83 *
84 * This method is intended to be used from JNI and my change based on
85 * implementation needs.
86 *
87 * @param rawValue an integer based enum value (as defined by assimp)
88 * @return the enum value corresponding to rawValue
89 */
90 static AiBlendMode fromRawValue(int rawValue) {
91 for (AiBlendMode type : AiBlendMode.values()) {
92 if (type.m_rawValue == rawValue) {
93 return type;
94 }
95 }
96
97 throw new IllegalArgumentException("unexptected raw value: " +
98 rawValue);
99 }
100
101
102 /**
103 * Constructor.
104 *
105 * @param rawValue maps java enum to c/c++ integer enum values
106 */
107 private AiBlendMode(int rawValue) {
108 m_rawValue = rawValue;
109 }
110
111
112 /**
113 * The mapped c/c++ integer enum value.
114 */
115 private final int m_rawValue;
116 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42 import java.util.ArrayList;
43 import java.util.List;
44
45
46 /**
47 * A single bone of a mesh.<p>
48 *
49 * A bone has a name by which it can be found in the frame hierarchy and by
50 * which it can be addressed by animations. In addition it has a number of
51 * influences on vertices.<p>
52 *
53 * This class is designed to be mutable, i.e., the returned collections are
54 * writable and may be modified.
55 */
56 public final class AiBone {
57 /**
58 * Constructor.
59 */
60 AiBone() {
61 /* nothing to do */
62 }
63
64
65 /**
66 * Returns the name of the bone.
67 *
68 * @return the name
69 */
70 public String getName() {
71 return m_name;
72 }
73
74
75 /**
76 * Returns the number of bone weights.<p>
77 *
78 * This method exists for compatibility with the native assimp API.
79 * The returned value is identical to <code>getBoneWeights().size()</code>
80 *
81 * @return the number of weights
82 */
83 public int getNumWeights() {
84 return m_boneWeights.size();
85 }
86
87
88 /**
89 * Returns a list of bone weights.
90 *
91 * @return the bone weights
92 */
93 public List<AiBoneWeight> getBoneWeights() {
94 return m_boneWeights;
95 }
96
97
98 /**
99 * Returns the offset matrix.<p>
100 *
101 * The offset matrix is a 4x4 matrix that transforms from mesh space to
102 * bone space in bind pose.<p>
103 *
104 * This method is part of the wrapped API (see {@link AiWrapperProvider}
105 * for details on wrappers).
106 *
107 * @param wrapperProvider the wrapper provider (used for type inference)
108 *
109 * @return the offset matrix
110 */
111 @SuppressWarnings("unchecked")
112 public <V3, M4, C, N, Q> M4 getOffsetMatrix(
113 AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
114
115 return (M4) m_offsetMatrix;
116 }
117
118
119 /**
120 * Name of the bone.
121 */
122 private String m_name;
123
124
125 /**
126 * Bone weights.
127 */
128 private final List<AiBoneWeight> m_boneWeights =
129 new ArrayList<AiBoneWeight>();
130
131
132 /**
133 * Offset matrix.
134 */
135 private Object m_offsetMatrix;
136 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42
43 /**
44 * A single influence of a bone on a vertex.
45 */
46 public final class AiBoneWeight {
47 /**
48 * Constructor.
49 */
50 AiBoneWeight() {
51 /* nothing to do */
52 }
53
54
55 /**
56 * Index of the vertex which is influenced by the bone.
57 *
58 * @return the vertex index
59 */
60 public int getVertexId() {
61 return m_vertexId;
62 }
63
64
65 /**
66 * The strength of the influence in the range (0...1).<p>
67 *
68 * The influence from all bones at one vertex amounts to 1
69 *
70 * @return the influence
71 */
72 public float getWeight() {
73 return m_weight;
74 }
75
76
77 /**
78 * Vertex index.
79 */
80 private int m_vertexId;
81
82
83 /**
84 * Influence of bone on vertex.
85 */
86 private float m_weight;
87 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42 import java.nio.ByteBuffer;
43
44
45 /**
46 * Wrapper provider using jassimp built in types.
47 */
48 public final class AiBuiltInWrapperProvider implements AiWrapperProvider<
49 AiVector, AiMatrix4f, AiColor, AiNode, AiQuaternion> {
50
51 @Override
52 public AiVector wrapVector3f(ByteBuffer buffer, int offset,
53 int numComponents) {
54
55 return new AiVector(buffer, offset, numComponents);
56 }
57
58
59 @Override
60 public AiMatrix4f wrapMatrix4f(float[] data) {
61 return new AiMatrix4f(data);
62 }
63
64
65 @Override
66 public AiColor wrapColor(ByteBuffer buffer, int offset) {
67 return new AiColor(buffer, offset);
68 }
69
70
71 @Override
72 public AiNode wrapSceneNode(Object parent, Object matrix,
73 int[] meshReferences, String name) {
74
75 return new AiNode((AiNode) parent, matrix, meshReferences, name);
76 }
77
78
79 @Override
80 public AiQuaternion wrapQuaternion(ByteBuffer buffer, int offset) {
81 return new AiQuaternion(buffer, offset);
82 }
83 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42
43 /**
44 * Helper structure to describe a virtual camera.<p>
45 *
46 * Cameras have a representation in the node graph and can be animated.
47 * An important aspect is that the camera itself is also part of the
48 * scenegraph. This means, any values such as the look-at vector are not
49 * *absolute*, they're <b>relative</b> to the coordinate system defined
50 * by the node which corresponds to the camera. This allows for camera
51 * animations. For static cameras parameters like the 'look-at' or 'up' vectors
52 * are usually specified directly in aiCamera, but beware, they could also
53 * be encoded in the node transformation. The following (pseudo)code sample
54 * shows how to do it: <p>
55 * <code><pre>
56 * // Get the camera matrix for a camera at a specific time
57 * // if the node hierarchy for the camera does not contain
58 * // at least one animated node this is a static computation
59 * get-camera-matrix (node sceneRoot, camera cam) : matrix
60 * {
61 * node cnd = find-node-for-camera(cam)
62 * matrix cmt = identity()
63 *
64 * // as usual - get the absolute camera transformation for this frame
65 * for each node nd in hierarchy from sceneRoot to cnd
66 * matrix cur
67 * if (is-animated(nd))
68 * cur = eval-animation(nd)
69 * else cur = nd->mTransformation;
70 * cmt = mult-matrices( cmt, cur )
71 * end for
72 *
73 * // now multiply with the camera's own local transform
74 * cam = mult-matrices (cam, get-camera-matrix(cmt) )
75 * }
76 * </pre></code>
77 *
78 * <b>Note:</b> some file formats (such as 3DS, ASE) export a "target point" -
79 * the point the camera is looking at (it can even be animated). Assimp
80 * writes the target point as a subnode of the camera's main node,
81 * called "<camName>.Target". However this is just additional information
82 * then the transformation tracks of the camera main node make the
83 * camera already look in the right direction.
84 */
85 public final class AiCamera {
86 /**
87 * Constructor.
88 *
89 * @param name name
90 * @param position position
91 * @param up up vector
92 * @param lookAt look-at vector
93 * @param horizontalFOV field of view
94 * @param clipNear near clip plane
95 * @param clipFar far clip plane
96 * @param aspect aspect ratio
97 */
98 AiCamera(String name, Object position, Object up, Object lookAt,
99 float horizontalFOV, float clipNear, float clipFar, float aspect) {
100
101 m_name = name;
102 m_position = position;
103 m_up = up;
104 m_lookAt = lookAt;
105 m_horizontalFOV = horizontalFOV;
106 m_clipNear = clipNear;
107 m_clipFar = clipFar;
108 m_aspect = aspect;
109 }
110
111
112 /**
113 * Returns the name of the camera.<p>
114 *
115 * There must be a node in the scenegraph with the same name.
116 * This node specifies the position of the camera in the scene
117 * hierarchy and can be animated.
118 */
119 public String getName() {
120 return m_name;
121 }
122
123
124 /**
125 * Returns the position of the camera.<p>
126 *
127 * The returned position is relative to the coordinate space defined by the
128 * corresponding node.<p>
129 *
130 * The default value is 0|0|0.<p>
131 *
132 * This method is part of the wrapped API (see {@link AiWrapperProvider}
133 * for details on wrappers).<p>
134 *
135 * The built-in behavior is to return a {@link AiVector}.
136 *
137 * @param wrapperProvider the wrapper provider (used for type inference)
138 * @return the position vector
139 */
140 @SuppressWarnings("unchecked")
141 public <V3, M4, C, N, Q> V3 getPosition(AiWrapperProvider<V3, M4, C, N, Q>
142 wrapperProvider) {
143
144 return (V3) m_position;
145 }
146
147
148 /**
149 * Returns the 'Up' - vector of the camera coordinate system.
150 *
151 * The returned vector is relative to the coordinate space defined by the
152 * corresponding node.<p>
153 *
154 * The 'right' vector of the camera coordinate system is the cross product
155 * of the up and lookAt vectors. The default value is 0|1|0. The vector
156 * may be normalized, but it needn't.<p>
157 *
158 * This method is part of the wrapped API (see {@link AiWrapperProvider}
159 * for details on wrappers).<p>
160 *
161 * The built-in behavior is to return a {@link AiVector}.
162 *
163 * @param wrapperProvider the wrapper provider (used for type inference)
164 * @return the 'Up' vector
165 */
166 @SuppressWarnings("unchecked")
167 public <V3, M4, C, N, Q> V3 getUp(AiWrapperProvider<V3, M4, C, N, Q>
168 wrapperProvider) {
169
170 return (V3) m_up;
171 }
172
173
174 /**
175 * Returns the 'LookAt' - vector of the camera coordinate system.<p>
176 *
177 * The returned vector is relative to the coordinate space defined by the
178 * corresponding node.<p>
179 *
180 * This is the viewing direction of the user. The default value is 0|0|1.
181 * The vector may be normalized, but it needn't.<p>
182 *
183 * This method is part of the wrapped API (see {@link AiWrapperProvider}
184 * for details on wrappers).<p>
185 *
186 * The built-in behavior is to return a {@link AiVector}.
187 *
188 * @param wrapperProvider the wrapper provider (used for type inference)
189 * @return the 'LookAt' vector
190 */
191 @SuppressWarnings("unchecked")
192 public <V3, M4, C, N, Q> V3 getLookAt(AiWrapperProvider<V3, M4, C, N, Q>
193 wrapperProvider) {
194
195 return (V3) m_lookAt;
196 }
197
198
199 /**
200 * Returns the half horizontal field of view angle, in radians.<p>
201 *
202 * The field of view angle is the angle between the center line of the
203 * screen and the left or right border. The default value is 1/4PI.
204 *
205 * @return the half horizontal field of view angle
206 */
207 public float getHorizontalFOV() {
208 return m_horizontalFOV;
209 }
210
211
212 /**
213 * Returns the distance of the near clipping plane from the camera.<p>
214 *
215 * The value may not be 0.f (for arithmetic reasons to prevent a division
216 * through zero). The default value is 0.1f.
217 *
218 * @return the distance of the near clipping plane
219 */
220 public float getClipPlaneNear() {
221 return m_clipNear;
222 }
223
224
225 /**
226 * Returns the distance of the far clipping plane from the camera.<p>
227 *
228 * The far clipping plane must, of course, be further away than the
229 * near clipping plane. The default value is 1000.0f. The ratio
230 * between the near and the far plane should not be too
231 * large (between 1000-10000 should be ok) to avoid floating-point
232 * inaccuracies which could lead to z-fighting.
233 *
234 * @return the distance of the far clipping plane
235 */
236 public float getClipPlaneFar() {
237 return m_clipFar;
238 }
239
240
241 /**
242 * Returns the screen aspect ratio.<p>
243 *
244 * This is the ration between the width and the height of the
245 * screen. Typical values are 4/3, 1/2 or 1/1. This value is
246 * 0 if the aspect ratio is not defined in the source file.
247 * 0 is also the default value.
248 *
249 * @return the screen aspect ratio
250 */
251 public float getAspect() {
252 return m_aspect;
253 }
254
255
256 /**
257 * Name.
258 */
259 private final String m_name;
260
261
262 /**
263 * Position.
264 */
265 private final Object m_position;
266
267
268 /**
269 * Up vector.
270 */
271 private final Object m_up;
272
273
274 /**
275 * Look-At vector.
276 */
277 private final Object m_lookAt;
278
279
280 /**
281 * FOV.
282 */
283 private final float m_horizontalFOV;
284
285
286 /**
287 * Near clipping plane.
288 */
289 private final float m_clipNear;
290
291
292 /**
293 * Far clipping plane.
294 */
295 private final float m_clipFar;
296
297
298 /**
299 * Aspect ratio.
300 */
301 private final float m_aspect;
302 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42 import java.nio.ByteBuffer;
43
44
45 /**
46 * Wrapper for colors.<p>
47 *
48 * The wrapper is writable, i.e., changes performed via the set-methods will
49 * modify the underlying mesh.
50 */
51 public final class AiColor {
52 /**
53 * Constructor.
54 *
55 * @param buffer the buffer to wrap
56 * @param offset offset into buffer
57 */
58 public AiColor(ByteBuffer buffer, int offset) {
59 m_buffer = buffer;
60 m_offset = offset;
61 }
62
63
64 /**
65 * Returns the red color component.
66 *
67 * @return the red component
68 */
69 public float getRed() {
70 return m_buffer.getFloat(m_offset);
71 }
72
73
74 /**
75 * Returns the green color component.
76 *
77 * @return the green component
78 */
79 public float getGreen() {
80 return m_buffer.getFloat(m_offset + 4);
81 }
82
83
84 /**
85 * Returns the blue color component.
86 *
87 * @return the blue component
88 */
89 public float getBlue() {
90 return m_buffer.getFloat(m_offset + 8);
91 }
92
93
94 /**
95 * Returns the alpha color component.
96 *
97 * @return the alpha component
98 */
99 public float getAlpha() {
100 return m_buffer.getFloat(m_offset + 12);
101 }
102
103
104 /**
105 * Sets the red color component.
106 *
107 * @param red the new value
108 */
109 public void setRed(float red) {
110 m_buffer.putFloat(m_offset, red);
111 }
112
113
114 /**
115 * Sets the green color component.
116 *
117 * @param green the new value
118 */
119 public void setGreen(float green) {
120 m_buffer.putFloat(m_offset + 4, green);
121 }
122
123
124 /**
125 * Sets the blue color component.
126 *
127 * @param blue the new value
128 */
129 public void setBlue(float blue) {
130 m_buffer.putFloat(m_offset + 8, blue);
131 }
132
133
134 /**
135 * Sets the alpha color component.
136 *
137 * @param alpha the new value
138 */
139 public void setAlpha(float alpha) {
140 m_buffer.putFloat(m_offset + 12, alpha);
141 }
142
143
144 @Override
145 public String toString() {
146 return "[" + getRed() + ", " + getGreen() + ", " + getBlue() + ", " +
147 getAlpha() + "]";
148 }
149
150
151 /**
152 * Wrapped buffer.
153 */
154 private final ByteBuffer m_buffer;
155
156
157 /**
158 * Offset into m_buffer.
159 */
160 private final int m_offset;
161 }
0 /*
1 * $Revision$
2 * $Date$
3 */
4 package jassimp;
5
6
7 /**
8 * Configuration interface for assimp importer.<p>
9 *
10 * This class is work-in-progress
11 */
12 public class AiConfig {
13
14 }
0 /*
1 * $Revision$
2 * $Date$
3 */
4 package jassimp;
5
6
7 /**
8 * Lists all possible configuration options.<p>
9 *
10 * This class is work-in-progress
11 */
12 public enum AiConfigOptions {
13 /**
14 * Maximum bone count per mesh for the SplitbyBoneCount step.<p>
15 *
16 * Meshes are split until the maximum number of bones is reached. The
17 * default value is AI_SBBC_DEFAULT_MAX_BONES, which may be altered at
18 * compile-time. This limit is imposed by the native jassimp library
19 * and typically is 60.<p>
20 *
21 * Property data type: integer.
22 */
23 PP_SBBC_MAX_BONES("PP_SBBC_MAX_BONES"),
24
25
26 /**
27 * Specifies the maximum angle that may be between two vertex tangents
28 * that their tangents and bi-tangents are smoothed.<p>
29 *
30 * This applies to the CalcTangentSpace-Step. The angle is specified
31 * in degrees. The maximum value is 175.<p>
32 *
33 * Property type: float. Default value: 45 degrees
34 */
35 PP_CT_MAX_SMOOTHING_ANGLE("PP_CT_MAX_SMOOTHING_ANGLE"),
36
37
38 /**
39 * Source UV channel for tangent space computation.<p>
40 *
41 * The specified channel must exist or an error will be raised.<p>
42 *
43 * Property type: integer. Default value: 0
44 */
45 PP_CT_TEXTURE_CHANNEL_INDEX("PP_CT_TEXTURE_CHANNEL_INDEX"),
46
47
48 /**
49 * Specifies the maximum angle that may be between two face normals
50 * at the same vertex position that their are smoothed together.<p>
51 *
52 * Sometimes referred to as 'crease angle'. This applies to the
53 * GenSmoothNormals-Step. The angle is specified in degrees, so 180 is PI.
54 * The default value is 175 degrees (all vertex normals are smoothed). The
55 * maximum value is 175, too.<p>
56 *
57 * Property type: float.<p>
58 *
59 * Warning: setting this option may cause a severe loss of performance. The
60 * performance is unaffected if the {@link #CONFIG_FAVOUR_SPEED} flag is
61 * set but the output quality may be reduced.
62 */
63 PP_GSN_MAX_SMOOTHING_ANGLE("PP_GSN_MAX_SMOOTHING_ANGLE"),
64
65
66 /**
67 * Sets the colormap (= palette) to be used to decode embedded textures in
68 * MDL (Quake or 3DGS) files.<p>
69 *
70 * This must be a valid path to a file. The file is 768 (256*3) bytes
71 * large and contains RGB triplets for each of the 256 palette entries.
72 * The default value is colormap.lmp. If the file is not found,
73 * a default palette (from Quake 1) is used.<p>
74 *
75 * Property type: string.
76 */
77 IMPORT_MDL_COLORMAP("IMPORT_MDL_COLORMAP"),
78
79
80 /**
81 * Configures the #aiProcess_RemoveRedundantMaterials step to keep
82 * materials matching a name in a given list.<p>
83 *
84 * This is a list of 1 to n strings, ' ' serves as delimiter character.
85 * Identifiers containing whitespaces must be enclosed in *single*
86 * quotation marks. For example:<tt>
87 * "keep-me and_me_to anotherMaterialToBeKept \'name with whitespace\'"</tt>.
88 * If a material matches on of these names, it will not be modified or
89 * removed by the postprocessing step nor will other materials be replaced
90 * by a reference to it.<p>
91 *
92 * This option might be useful if you are using some magic material names
93 * to pass additional semantics through the content pipeline. This ensures
94 * they won't be optimized away, but a general optimization is still
95 * performed for materials not contained in the list.<p>
96 *
97 * Property type: String. Default value: n/a<p>
98 *
99 * <b>Note:</b>Linefeeds, tabs or carriage returns are treated as
100 * whitespace. Material names are case sensitive.
101 */
102 PP_RRM_EXCLUDE_LIST("PP_RRM_EXCLUDE_LIST"),
103
104
105 /**
106 * Configures the {@link AiPostProcessSteps#PRE_TRANSFORM_VERTICES} step
107 * to keep the scene hierarchy. Meshes are moved to worldspace, but no
108 * optimization is performed (read: meshes with equal materials are not
109 * joined. The total number of meshes won't change).<p>
110 *
111 * This option could be of use for you if the scene hierarchy contains
112 * important additional information which you intend to parse.
113 * For rendering, you can still render all meshes in the scene without
114 * any transformations.<p>
115 *
116 * Property type: bool. Default value: false.
117 */
118 PP_PTV_KEEP_HIERARCHY("PP_PTV_KEEP_HIERARCHY"),
119
120
121 /**
122 * Configures the {@link AiPostProcessSteps#PRE_TRANSFORM_VERTICES} step
123 * to normalize all vertex components into the [-1,1] range.<p>
124 *
125 * That is, a bounding box for the whole scene is computed, the maximum
126 * component is taken and all meshes are scaled appropriately (uniformly
127 * of course!). This might be useful if you don't know the spatial
128 * dimension of the input data.<p>
129 *
130 * Property type: bool. Default value: false.
131 */
132 PP_PTV_NORMALIZE("PP_PTV_NORMALIZE"),
133
134
135 /**
136 * Configures the {@link AiPostProcessSteps#FIND_DEGENERATES} step to
137 * remove degenerated primitives from the import - immediately.<p>
138 *
139 * The default behaviour converts degenerated triangles to lines and
140 * degenerated lines to points. See the documentation to the
141 * {@link AiPostProcessSteps#FIND_DEGENERATES} step for a detailed example
142 * of the various ways to get rid of these lines and points if you don't
143 * want them.<p>
144 *
145 * Property type: bool. Default value: false.
146 */
147 PP_FD_REMOVE("PP_FD_REMOVE")
148
149
150 // // ---------------------------------------------------------------------------
151 // /** @brief Configures the #aiProcess_OptimizeGraph step to preserve nodes
152 // * matching a name in a given list.
153 // *
154 // * This is a list of 1 to n strings, ' ' serves as delimiter character.
155 // * Identifiers containing whitespaces must be enclosed in *single*
156 // * quotation marks. For example:<tt>
157 // * "keep-me and_me_to anotherNodeToBeKept \'name with whitespace\'"</tt>.
158 // * If a node matches on of these names, it will not be modified or
159 // * removed by the postprocessing step.<br>
160 // * This option might be useful if you are using some magic node names
161 // * to pass additional semantics through the content pipeline. This ensures
162 // * they won't be optimized away, but a general optimization is still
163 // * performed for nodes not contained in the list.
164 // * Property type: String. Default value: n/a
165 // * @note Linefeeds, tabs or carriage returns are treated as whitespace.
166 // * Node names are case sensitive.
167 // */
168 // #define AI_CONFIG_PP_OG_EXCLUDE_LIST \
169 // "PP_OG_EXCLUDE_LIST"
170 //
171 // // ---------------------------------------------------------------------------
172 // /** @brief Set the maximum number of triangles in a mesh.
173 // *
174 // * This is used by the "SplitLargeMeshes" PostProcess-Step to determine
175 // * whether a mesh must be split or not.
176 // * @note The default value is AI_SLM_DEFAULT_MAX_TRIANGLES
177 // * Property type: integer.
178 // */
179 // #define AI_CONFIG_PP_SLM_TRIANGLE_LIMIT \
180 // "PP_SLM_TRIANGLE_LIMIT"
181 //
182 // // default value for AI_CONFIG_PP_SLM_TRIANGLE_LIMIT
183 // #if (!defined AI_SLM_DEFAULT_MAX_TRIANGLES)
184 // # define AI_SLM_DEFAULT_MAX_TRIANGLES 1000000
185 // #endif
186 //
187 // // ---------------------------------------------------------------------------
188 // /** @brief Set the maximum number of vertices in a mesh.
189 // *
190 // * This is used by the "SplitLargeMeshes" PostProcess-Step to determine
191 // * whether a mesh must be split or not.
192 // * @note The default value is AI_SLM_DEFAULT_MAX_VERTICES
193 // * Property type: integer.
194 // */
195 // #define AI_CONFIG_PP_SLM_VERTEX_LIMIT \
196 // "PP_SLM_VERTEX_LIMIT"
197 //
198 // // default value for AI_CONFIG_PP_SLM_VERTEX_LIMIT
199 // #if (!defined AI_SLM_DEFAULT_MAX_VERTICES)
200 // # define AI_SLM_DEFAULT_MAX_VERTICES 1000000
201 // #endif
202 //
203 // // ---------------------------------------------------------------------------
204 // /** @brief Set the maximum number of bones affecting a single vertex
205 // *
206 // * This is used by the #aiProcess_LimitBoneWeights PostProcess-Step.
207 // * @note The default value is AI_LBW_MAX_WEIGHTS
208 // * Property type: integer.*/
209 // #define AI_CONFIG_PP_LBW_MAX_WEIGHTS \
210 // "PP_LBW_MAX_WEIGHTS"
211 //
212 // // default value for AI_CONFIG_PP_LBW_MAX_WEIGHTS
213 // #if (!defined AI_LMW_MAX_WEIGHTS)
214 // # define AI_LMW_MAX_WEIGHTS 0x4
215 // #endif // !! AI_LMW_MAX_WEIGHTS
216 //
217 // // ---------------------------------------------------------------------------
218 // /** @brief Lower the deboning threshold in order to remove more bones.
219 // *
220 // * This is used by the #aiProcess_Debone PostProcess-Step.
221 // * @note The default value is AI_DEBONE_THRESHOLD
222 // * Property type: float.*/
223 // #define AI_CONFIG_PP_DB_THRESHOLD \
224 // "PP_DB_THRESHOLD"
225 //
226 // // default value for AI_CONFIG_PP_LBW_MAX_WEIGHTS
227 // #if (!defined AI_DEBONE_THRESHOLD)
228 // # define AI_DEBONE_THRESHOLD 1.0f
229 // #endif // !! AI_DEBONE_THRESHOLD
230 //
231 // // ---------------------------------------------------------------------------
232 // /** @brief Require all bones qualify for deboning before removing any
233 // *
234 // * This is used by the #aiProcess_Debone PostProcess-Step.
235 // * @note The default value is 0
236 // * Property type: bool.*/
237 // #define AI_CONFIG_PP_DB_ALL_OR_NONE \
238 // "PP_DB_ALL_OR_NONE"
239 //
240 // /** @brief Default value for the #AI_CONFIG_PP_ICL_PTCACHE_SIZE property
241 // */
242 // #ifndef PP_ICL_PTCACHE_SIZE
243 // # define PP_ICL_PTCACHE_SIZE 12
244 // #endif
245 //
246 // // ---------------------------------------------------------------------------
247 // /** @brief Set the size of the post-transform vertex cache to optimize the
248 // * vertices for. This configures the #aiProcess_ImproveCacheLocality step.
249 // *
250 // * The size is given in vertices. Of course you can't know how the vertex
251 // * format will exactly look like after the import returns, but you can still
252 // * guess what your meshes will probably have.
253 // * @note The default value is #PP_ICL_PTCACHE_SIZE. That results in slight
254 // * performance improvements for most nVidia/AMD cards since 2002.
255 // * Property type: integer.
256 // */
257 // #define AI_CONFIG_PP_ICL_PTCACHE_SIZE "PP_ICL_PTCACHE_SIZE"
258 //
259 // // ---------------------------------------------------------------------------
260 // /** @brief Enumerates components of the aiScene and aiMesh data structures
261 // * that can be excluded from the import using the #aiPrpcess_RemoveComponent step.
262 // *
263 // * See the documentation to #aiProcess_RemoveComponent for more details.
264 // */
265 // enum aiComponent
266 // {
267 // /** Normal vectors */
268 // #ifdef SWIG
269 // aiComponent_NORMALS = 0x2,
270 // #else
271 // aiComponent_NORMALS = 0x2u,
272 // #endif
273 //
274 // /** Tangents and bitangents go always together ... */
275 // #ifdef SWIG
276 // aiComponent_TANGENTS_AND_BITANGENTS = 0x4,
277 // #else
278 // aiComponent_TANGENTS_AND_BITANGENTS = 0x4u,
279 // #endif
280 //
281 // /** ALL color sets
282 // * Use aiComponent_COLORn(N) to specify the N'th set */
283 // aiComponent_COLORS = 0x8,
284 //
285 // /** ALL texture UV sets
286 // * aiComponent_TEXCOORDn(N) to specify the N'th set */
287 // aiComponent_TEXCOORDS = 0x10,
288 //
289 // /** Removes all bone weights from all meshes.
290 // * The scenegraph nodes corresponding to the bones are NOT removed.
291 // * use the #aiProcess_OptimizeGraph step to do this */
292 // aiComponent_BONEWEIGHTS = 0x20,
293 //
294 // /** Removes all node animations (aiScene::mAnimations).
295 // * The corresponding scenegraph nodes are NOT removed.
296 // * use the #aiProcess_OptimizeGraph step to do this */
297 // aiComponent_ANIMATIONS = 0x40,
298 //
299 // /** Removes all embedded textures (aiScene::mTextures) */
300 // aiComponent_TEXTURES = 0x80,
301 //
302 // /** Removes all light sources (aiScene::mLights).
303 // * The corresponding scenegraph nodes are NOT removed.
304 // * use the #aiProcess_OptimizeGraph step to do this */
305 // aiComponent_LIGHTS = 0x100,
306 //
307 // /** Removes all light sources (aiScene::mCameras).
308 // * The corresponding scenegraph nodes are NOT removed.
309 // * use the #aiProcess_OptimizeGraph step to do this */
310 // aiComponent_CAMERAS = 0x200,
311 //
312 // /** Removes all meshes (aiScene::mMeshes). */
313 // aiComponent_MESHES = 0x400,
314 //
315 // /** Removes all materials. One default material will
316 // * be generated, so aiScene::mNumMaterials will be 1. */
317 // aiComponent_MATERIALS = 0x800,
318 //
319 //
320 // /** This value is not used. It is just there to force the
321 // * compiler to map this enum to a 32 Bit integer. */
322 // #ifndef SWIG
323 // _aiComponent_Force32Bit = 0x9fffffff
324 // #endif
325 // };
326 //
327 // // Remove a specific color channel 'n'
328 // #define aiComponent_COLORSn(n) (1u << (n+20u))
329 //
330 // // Remove a specific UV channel 'n'
331 // #define aiComponent_TEXCOORDSn(n) (1u << (n+25u))
332 //
333 // // ---------------------------------------------------------------------------
334 // /** @brief Input parameter to the #aiProcess_RemoveComponent step:
335 // * Specifies the parts of the data structure to be removed.
336 // *
337 // * See the documentation to this step for further details. The property
338 // * is expected to be an integer, a bitwise combination of the
339 // * #aiComponent flags defined above in this header. The default
340 // * value is 0. Important: if no valid mesh is remaining after the
341 // * step has been executed (e.g you thought it was funny to specify ALL
342 // * of the flags defined above) the import FAILS. Mainly because there is
343 // * no data to work on anymore ...
344 // */
345 // #define AI_CONFIG_PP_RVC_FLAGS \
346 // "PP_RVC_FLAGS"
347 //
348 // // ---------------------------------------------------------------------------
349 // /** @brief Input parameter to the #aiProcess_SortByPType step:
350 // * Specifies which primitive types are removed by the step.
351 // *
352 // * This is a bitwise combination of the aiPrimitiveType flags.
353 // * Specifying all of them is illegal, of course. A typical use would
354 // * be to exclude all line and point meshes from the import. This
355 // * is an integer property, its default value is 0.
356 // */
357 // #define AI_CONFIG_PP_SBP_REMOVE \
358 // "PP_SBP_REMOVE"
359 //
360 // // ---------------------------------------------------------------------------
361 // /** @brief Input parameter to the #aiProcess_FindInvalidData step:
362 // * Specifies the floating-point accuracy for animation values. The step
363 // * checks for animation tracks where all frame values are absolutely equal
364 // * and removes them. This tweakable controls the epsilon for floating-point
365 // * comparisons - two keys are considered equal if the invariant
366 // * abs(n0-n1)>epsilon holds true for all vector respectively quaternion
367 // * components. The default value is 0.f - comparisons are exact then.
368 // */
369 // #define AI_CONFIG_PP_FID_ANIM_ACCURACY \
370 // "PP_FID_ANIM_ACCURACY"
371 //
372 //
373 // // TransformUVCoords evaluates UV scalings
374 // #define AI_UVTRAFO_SCALING 0x1
375 //
376 // // TransformUVCoords evaluates UV rotations
377 // #define AI_UVTRAFO_ROTATION 0x2
378 //
379 // // TransformUVCoords evaluates UV translation
380 // #define AI_UVTRAFO_TRANSLATION 0x4
381 //
382 // // Everything baked together -> default value
383 // #define AI_UVTRAFO_ALL (AI_UVTRAFO_SCALING | AI_UVTRAFO_ROTATION | AI_UVTRAFO_TRANSLATION)
384 //
385 // // ---------------------------------------------------------------------------
386 // /** @brief Input parameter to the #aiProcess_TransformUVCoords step:
387 // * Specifies which UV transformations are evaluated.
388 // *
389 // * This is a bitwise combination of the AI_UVTRAFO_XXX flags (integer
390 // * property, of course). By default all transformations are enabled
391 // * (AI_UVTRAFO_ALL).
392 // */
393 // #define AI_CONFIG_PP_TUV_EVALUATE \
394 // "PP_TUV_EVALUATE"
395 //
396 // // ---------------------------------------------------------------------------
397 // /** @brief A hint to assimp to favour speed against import quality.
398 // *
399 // * Enabling this option may result in faster loading, but it needn't.
400 // * It represents just a hint to loaders and post-processing steps to use
401 // * faster code paths, if possible.
402 // * This property is expected to be an integer, != 0 stands for true.
403 // * The default value is 0.
404 // */
405 // #define AI_CONFIG_FAVOUR_SPEED \
406 // "FAVOUR_SPEED"
407 //
408 //
409 // // ###########################################################################
410 // // IMPORTER SETTINGS
411 // // Various stuff to fine-tune the behaviour of specific importer plugins.
412 // // ###########################################################################
413 //
414 //
415 // // ---------------------------------------------------------------------------
416 // /** @brief Set the vertex animation keyframe to be imported
417 // *
418 // * ASSIMP does not support vertex keyframes (only bone animation is supported).
419 // * The library reads only one frame of models with vertex animations.
420 // * By default this is the first frame.
421 // * \note The default value is 0. This option applies to all importers.
422 // * However, it is also possible to override the global setting
423 // * for a specific loader. You can use the AI_CONFIG_IMPORT_XXX_KEYFRAME
424 // * options (where XXX is a placeholder for the file format for which you
425 // * want to override the global setting).
426 // * Property type: integer.
427 // */
428 // #define AI_CONFIG_IMPORT_GLOBAL_KEYFRAME "IMPORT_GLOBAL_KEYFRAME"
429 //
430 // #define AI_CONFIG_IMPORT_MD3_KEYFRAME "IMPORT_MD3_KEYFRAME"
431 // #define AI_CONFIG_IMPORT_MD2_KEYFRAME "IMPORT_MD2_KEYFRAME"
432 // #define AI_CONFIG_IMPORT_MDL_KEYFRAME "IMPORT_MDL_KEYFRAME"
433 // #define AI_CONFIG_IMPORT_MDC_KEYFRAME "IMPORT_MDC_KEYFRAME"
434 // #define AI_CONFIG_IMPORT_SMD_KEYFRAME "IMPORT_SMD_KEYFRAME"
435 // #define AI_CONFIG_IMPORT_UNREAL_KEYFRAME "IMPORT_UNREAL_KEYFRAME"
436 //
437 //
438 // // ---------------------------------------------------------------------------
439 // /** @brief Configures the AC loader to collect all surfaces which have the
440 // * "Backface cull" flag set in separate meshes.
441 // *
442 // * Property type: bool. Default value: true.
443 // */
444 // #define AI_CONFIG_IMPORT_AC_SEPARATE_BFCULL \
445 // "IMPORT_AC_SEPARATE_BFCULL"
446 //
447 // // ---------------------------------------------------------------------------
448 // /** @brief Configures whether the AC loader evaluates subdivision surfaces (
449 // * indicated by the presence of the 'subdiv' attribute in the file). By
450 // * default, Assimp performs the subdivision using the standard
451 // * Catmull-Clark algorithm
452 // *
453 // * * Property type: bool. Default value: true.
454 // */
455 // #define AI_CONFIG_IMPORT_AC_EVAL_SUBDIVISION \
456 // "IMPORT_AC_EVAL_SUBDIVISION"
457 //
458 // // ---------------------------------------------------------------------------
459 // /** @brief Configures the UNREAL 3D loader to separate faces with different
460 // * surface flags (e.g. two-sided vs. single-sided).
461 // *
462 // * * Property type: bool. Default value: true.
463 // */
464 // #define AI_CONFIG_IMPORT_UNREAL_HANDLE_FLAGS \
465 // "UNREAL_HANDLE_FLAGS"
466 //
467 // // ---------------------------------------------------------------------------
468 // /** @brief Configures the terragen import plugin to compute uv's for
469 // * terrains, if not given. Furthermore a default texture is assigned.
470 // *
471 // * UV coordinates for terrains are so simple to compute that you'll usually
472 // * want to compute them on your own, if you need them. This option is intended
473 // * for model viewers which want to offer an easy way to apply textures to
474 // * terrains.
475 // * * Property type: bool. Default value: false.
476 // */
477 // #define AI_CONFIG_IMPORT_TER_MAKE_UVS \
478 // "IMPORT_TER_MAKE_UVS"
479 //
480 // // ---------------------------------------------------------------------------
481 // /** @brief Configures the ASE loader to always reconstruct normal vectors
482 // * basing on the smoothing groups loaded from the file.
483 // *
484 // * Some ASE files have carry invalid normals, other don't.
485 // * * Property type: bool. Default value: true.
486 // */
487 // #define AI_CONFIG_IMPORT_ASE_RECONSTRUCT_NORMALS \
488 // "IMPORT_ASE_RECONSTRUCT_NORMALS"
489 //
490 // // ---------------------------------------------------------------------------
491 // /** @brief Configures the M3D loader to detect and process multi-part
492 // * Quake player models.
493 // *
494 // * These models usually consist of 3 files, lower.md3, upper.md3 and
495 // * head.md3. If this property is set to true, Assimp will try to load and
496 // * combine all three files if one of them is loaded.
497 // * Property type: bool. Default value: true.
498 // */
499 // #define AI_CONFIG_IMPORT_MD3_HANDLE_MULTIPART \
500 // "IMPORT_MD3_HANDLE_MULTIPART"
501 //
502 // // ---------------------------------------------------------------------------
503 // /** @brief Tells the MD3 loader which skin files to load.
504 // *
505 // * When loading MD3 files, Assimp checks whether a file
506 // * <md3_file_name>_<skin_name>.skin is existing. These files are used by
507 // * Quake III to be able to assign different skins (e.g. red and blue team)
508 // * to models. 'default', 'red', 'blue' are typical skin names.
509 // * Property type: String. Default value: "default".
510 // */
511 // #define AI_CONFIG_IMPORT_MD3_SKIN_NAME \
512 // "IMPORT_MD3_SKIN_NAME"
513 //
514 // // ---------------------------------------------------------------------------
515 // /** @brief Specify the Quake 3 shader file to be used for a particular
516 // * MD3 file. This can also be a search path.
517 // *
518 // * By default Assimp's behaviour is as follows: If a MD3 file
519 // * <tt><any_path>/models/<any_q3_subdir>/<model_name>/<file_name>.md3</tt> is
520 // * loaded, the library tries to locate the corresponding shader file in
521 // * <tt><any_path>/scripts/<model_name>.shader</tt>. This property overrides this
522 // * behaviour. It can either specify a full path to the shader to be loaded
523 // * or alternatively the path (relative or absolute) to the directory where
524 // * the shaders for all MD3s to be loaded reside. Assimp attempts to open
525 // * <tt><dir>/<model_name>.shader</tt> first, <tt><dir>/<file_name>.shader</tt>
526 // * is the fallback file. Note that <dir> should have a terminal (back)slash.
527 // * Property type: String. Default value: n/a.
528 // */
529 // #define AI_CONFIG_IMPORT_MD3_SHADER_SRC \
530 // "IMPORT_MD3_SHADER_SRC"
531 //
532 // // ---------------------------------------------------------------------------
533 // /** @brief Configures the LWO loader to load just one layer from the model.
534 // *
535 // * LWO files consist of layers and in some cases it could be useful to load
536 // * only one of them. This property can be either a string - which specifies
537 // * the name of the layer - or an integer - the index of the layer. If the
538 // * property is not set the whole LWO model is loaded. Loading fails if the
539 // * requested layer is not available. The layer index is zero-based and the
540 // * layer name may not be empty.<br>
541 // * Property type: Integer. Default value: all layers are loaded.
542 // */
543 // #define AI_CONFIG_IMPORT_LWO_ONE_LAYER_ONLY \
544 // "IMPORT_LWO_ONE_LAYER_ONLY"
545 //
546 // // ---------------------------------------------------------------------------
547 // /** @brief Configures the MD5 loader to not load the MD5ANIM file for
548 // * a MD5MESH file automatically.
549 // *
550 // * The default strategy is to look for a file with the same name but the
551 // * MD5ANIM extension in the same directory. If it is found, it is loaded
552 // * and combined with the MD5MESH file. This configuration option can be
553 // * used to disable this behaviour.
554 // *
555 // * * Property type: bool. Default value: false.
556 // */
557 // #define AI_CONFIG_IMPORT_MD5_NO_ANIM_AUTOLOAD \
558 // "IMPORT_MD5_NO_ANIM_AUTOLOAD"
559 //
560 // // ---------------------------------------------------------------------------
561 // /** @brief Defines the begin of the time range for which the LWS loader
562 // * evaluates animations and computes aiNodeAnim's.
563 // *
564 // * Assimp provides full conversion of LightWave's envelope system, including
565 // * pre and post conditions. The loader computes linearly subsampled animation
566 // * chanels with the frame rate given in the LWS file. This property defines
567 // * the start time. Note: animation channels are only generated if a node
568 // * has at least one envelope with more tan one key assigned. This property.
569 // * is given in frames, '0' is the first frame. By default, if this property
570 // * is not set, the importer takes the animation start from the input LWS
571 // * file ('FirstFrame' line)<br>
572 // * Property type: Integer. Default value: taken from file.
573 // *
574 // * @see AI_CONFIG_IMPORT_LWS_ANIM_END - end of the imported time range
575 // */
576 // #define AI_CONFIG_IMPORT_LWS_ANIM_START \
577 // "IMPORT_LWS_ANIM_START"
578 // #define AI_CONFIG_IMPORT_LWS_ANIM_END \
579 // "IMPORT_LWS_ANIM_END"
580 //
581 // // ---------------------------------------------------------------------------
582 // /** @brief Defines the output frame rate of the IRR loader.
583 // *
584 // * IRR animations are difficult to convert for Assimp and there will
585 // * always be a loss of quality. This setting defines how many keys per second
586 // * are returned by the converter.<br>
587 // * Property type: integer. Default value: 100
588 // */
589 // #define AI_CONFIG_IMPORT_IRR_ANIM_FPS \
590 // "IMPORT_IRR_ANIM_FPS"
591 //
592 //
593 // // ---------------------------------------------------------------------------
594 // /** @brief Ogre Importer will try to load this Materialfile.
595 // *
596 // * Ogre Meshes contain only the MaterialName, not the MaterialFile. If there
597 // * is no material file with the same name as the material, Ogre Importer will
598 // * try to load this file and search the material in it.
599 // * <br>
600 // * Property type: String. Default value: guessed.
601 // */
602 // #define AI_CONFIG_IMPORT_OGRE_MATERIAL_FILE "IMPORT_OGRE_MATERIAL_FILE"
603 //
604 //
605 // // ---------------------------------------------------------------------------
606 // /** @brief Ogre Importer detect the texture usage from its filename
607 // *
608 // * Normally, a texture is loaded as a colormap, if no target is specified in the
609 // * materialfile. Is this switch is enabled, texture names ending with _n, _l, _s
610 // * are used as normalmaps, lightmaps or specularmaps.
611 // * <br>
612 // * Property type: Bool. Default value: false.
613 // */
614 // #define AI_CONFIG_IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME "IMPORT_OGRE_TEXTURETYPE_FROM_FILENAME"
615 //
616 //
617 //
618 // // ---------------------------------------------------------------------------
619 // /** @brief Specifies whether the IFC loader skips over IfcSpace elements.
620 // *
621 // * IfcSpace elements (and their geometric representations) are used to
622 // * represent, well, free space in a building storey.<br>
623 // * Property type: Bool. Default value: true.
624 // */
625 // #define AI_CONFIG_IMPORT_IFC_SKIP_SPACE_REPRESENTATIONS "IMPORT_IFC_SKIP_SPACE_REPRESENTATIONS"
626 //
627 //
628 // // ---------------------------------------------------------------------------
629 // /** @brief Specifies whether the IFC loader skips over
630 // * shape representations of type 'Curve2D'.
631 // *
632 // * A lot of files contain both a faceted mesh representation and a outline
633 // * with a presentation type of 'Curve2D'. Currently Assimp doesn't convert those,
634 // * so turning this option off just clutters the log with errors.<br>
635 // * Property type: Bool. Default value: true.
636 // */
637 // #define AI_CONFIG_IMPORT_IFC_SKIP_CURVE_REPRESENTATIONS "IMPORT_IFC_SKIP_CURVE_REPRESENTATIONS"
638 //
639 // // ---------------------------------------------------------------------------
640 // /** @brief Specifies whether the IFC loader will use its own, custom triangulation
641 // * algorithm to triangulate wall and floor meshes.
642 // *
643 // * If this property is set to false, walls will be either triangulated by
644 // * #aiProcess_Triangulate or will be passed through as huge polygons with
645 // * faked holes (i.e. holes that are connected with the outer boundary using
646 // * a dummy edge). It is highly recommended to set this property to true
647 // * if you want triangulated data because #aiProcess_Triangulate is known to
648 // * have problems with the kind of polygons that the IFC loader spits out for
649 // * complicated meshes.
650 // * Property type: Bool. Default value: true.
651 // */
652 // #define AI_CONFIG_IMPORT_IFC_CUSTOM_TRIANGULATION "IMPORT_IFC_CUSTOM_TRIANGULATION"
653 //
654 ;
655
656 private AiConfigOptions(String name) {
657 m_name = name;
658 }
659
660
661 private final String m_name;
662 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42
43 /**
44 * Describes a light source.<p>
45 *
46 * Assimp supports multiple sorts of light sources, including
47 * directional, point and spot lights. All of them are defined with just
48 * a single structure and distinguished by their parameters.
49 * Note - some file formats (such as 3DS, ASE) export a "target point" -
50 * the point a spot light is looking at (it can even be animated). Assimp
51 * writes the target point as a subnode of a spotlights's main node,
52 * called "&lt;spotName&gt;.Target". However, this is just additional
53 * information then, the transformation tracks of the main node make the
54 * spot light already point in the right direction.
55 */
56 public final class AiLight {
57 /**
58 * Constructor.
59 *
60 * @param name
61 * @param type
62 * @param position
63 * @param direction
64 * @param attenuationConstant
65 * @param attenuationLinear
66 * @param attenuationQuadratic
67 * @param diffuse
68 * @param specular
69 * @param ambient
70 * @param innerCone
71 * @param outerCone
72 */
73 AiLight(String name, int type, Object position, Object direction,
74 float attenuationConstant, float attenuationLinear,
75 float attenuationQuadratic, Object diffuse, Object specular,
76 Object ambient, float innerCone, float outerCone) {
77
78 m_name = name;
79 m_type = AiLightType.fromRawValue(type);
80 m_position = position;
81 m_direction = direction;
82 m_attenuationConstant = attenuationConstant;
83 m_attenuationLinear = attenuationLinear;
84 m_attenuationQuadratic = attenuationQuadratic;
85 m_diffuse = diffuse;
86 m_specular = specular;
87 m_ambient = ambient;
88 m_innerCone = innerCone;
89 m_outerCone = outerCone;
90 }
91
92
93 /**
94 * Returns the name of the light source.<p>
95 *
96 * There must be a node in the scenegraph with the same name.
97 * This node specifies the position of the light in the scene
98 * hierarchy and can be animated.
99 *
100 * @return the name
101 */
102 public String getName() {
103 return m_name;
104 }
105
106
107 /**
108 * Returns The type of the light source.
109 *
110 * @return the type
111 */
112 public AiLightType getType() {
113 return m_type;
114 }
115
116
117 /**
118 * Returns the position of the light.<p>
119 *
120 * The position is relative to the transformation of the scene graph node
121 * corresponding to the light. The position is undefined for directional
122 * lights.<p>
123 *
124 * This method is part of the wrapped API (see {@link AiWrapperProvider}
125 * for details on wrappers).<p>
126 *
127 * The built in behavior is to return an {@link AiVector}.
128 *
129 *
130 * @param wrapperProvider the wrapper provider (used for type inference)
131 *
132 * @return the position
133 */
134 @SuppressWarnings("unchecked")
135 public <V3, M4, C, N, Q> V3 getPosition(AiWrapperProvider<V3, M4, C, N, Q>
136 wrapperProvider) {
137
138 return (V3) m_position;
139 }
140
141
142 /**
143 * Returns the direction of the light.<p>
144 *
145 * The direction is relative to the transformation of the scene graph node
146 * corresponding to the light. The direction is undefined for point lights.
147 * The vector may be normalized, but it needn't..<p>
148 *
149 * This method is part of the wrapped API (see {@link AiWrapperProvider}
150 * for details on wrappers).<p>
151 *
152 * The built in behavior is to return an {@link AiVector}.
153 *
154 * @param wrapperProvider the wrapper provider (used for type inference)
155 * @return the position
156 */
157 @SuppressWarnings("unchecked")
158 public <V3, M4, C, N, Q> V3 getDirection(AiWrapperProvider<V3, M4, C, N, Q>
159 wrapperProvider) {
160
161 return (V3) m_direction;
162 }
163
164
165 /**
166 * Constant light attenuation factor.<p>
167 *
168 * The intensity of the light source at a given distance 'd' from
169 * the light's position is
170 * <code>Atten = 1/( att0 + att1 * d + att2 * d*d)</code>
171 * This member corresponds to the att0 variable in the equation.
172 * Naturally undefined for directional lights.
173 *
174 * @return the constant light attenuation factor
175 */
176 public float getAttenuationConstant() {
177 return m_attenuationConstant;
178 }
179
180
181 /**
182 * Linear light attenuation factor.<p>
183 *
184 * The intensity of the light source at a given distance 'd' from
185 * the light's position is
186 * <code>Atten = 1/( att0 + att1 * d + att2 * d*d)</code>
187 * This member corresponds to the att1 variable in the equation.
188 * Naturally undefined for directional lights.
189 *
190 * @return the linear light attenuation factor
191 */
192 public float getAttenuationLinear() {
193 return m_attenuationLinear;
194 }
195
196
197 /**
198 * Quadratic light attenuation factor.<p>
199 *
200 * The intensity of the light source at a given distance 'd' from
201 * the light's position is
202 * <code>Atten = 1/( att0 + att1 * d + att2 * d*d)</code>
203 * This member corresponds to the att2 variable in the equation.
204 * Naturally undefined for directional lights.
205 *
206 * @return the quadratic light attenuation factor
207 */
208 public float getAttenuationQuadratic() {
209 return m_attenuationQuadratic;
210 }
211
212
213 /**
214 * Diffuse color of the light source.<p>
215 *
216 * The diffuse light color is multiplied with the diffuse
217 * material color to obtain the final color that contributes
218 * to the diffuse shading term.<p>
219 *
220 * This method is part of the wrapped API (see {@link AiWrapperProvider}
221 * for details on wrappers).<p>
222 *
223 * The built in behavior is to return an {@link AiColor}.
224 *
225 * @param wrapperProvider the wrapper provider (used for type inference)
226 * @return the diffuse color (alpha will be 1)
227 */
228 @SuppressWarnings("unchecked")
229 public <V3, M4, C, N, Q> C getColorDiffuse(
230 AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
231
232 return (C) m_diffuse;
233 }
234
235
236 /**
237 * Specular color of the light source.<p>
238 *
239 * The specular light color is multiplied with the specular
240 * material color to obtain the final color that contributes
241 * to the specular shading term.<p>
242 *
243 * This method is part of the wrapped API (see {@link AiWrapperProvider}
244 * for details on wrappers).<p>
245 *
246 * The built in behavior is to return an {@link AiColor}.
247 *
248 * @param wrapperProvider the wrapper provider (used for type inference)
249 * @return the specular color (alpha will be 1)
250 */
251 @SuppressWarnings("unchecked")
252 public <V3, M4, C, N, Q> C getColorSpecular(
253 AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
254
255 return (C) m_specular;
256 }
257
258
259 /**
260 * Ambient color of the light source.<p>
261 *
262 * The ambient light color is multiplied with the ambient
263 * material color to obtain the final color that contributes
264 * to the ambient shading term. Most renderers will ignore
265 * this value it, is just a remaining of the fixed-function pipeline
266 * that is still supported by quite many file formats.<p>
267 *
268 * This method is part of the wrapped API (see {@link AiWrapperProvider}
269 * for details on wrappers).<p>
270 *
271 * The built in behavior is to return an {@link AiColor}.
272 *
273 * @param wrapperProvider the wrapper provider (used for type inference)
274 * @return the ambient color (alpha will be 1)
275 */
276 @SuppressWarnings("unchecked")
277 public <V3, M4, C, N, Q> C getColorAmbient(
278 AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
279
280 return (C) m_ambient;
281 }
282
283
284 /**
285 * Inner angle of a spot light's light cone.<p>
286 *
287 * The spot light has maximum influence on objects inside this
288 * angle. The angle is given in radians. It is 2PI for point
289 * lights and undefined for directional lights.
290 *
291 * @return the inner angle
292 */
293 public float getAngleInnerCone() {
294 return m_innerCone;
295 }
296
297
298 /**
299 * Outer angle of a spot light's light cone.<p>
300 *
301 * The spot light does not affect objects outside this angle.
302 * The angle is given in radians. It is 2PI for point lights and
303 * undefined for directional lights. The outer angle must be
304 * greater than or equal to the inner angle.
305 * It is assumed that the application uses a smooth
306 * interpolation between the inner and the outer cone of the
307 * spot light.
308 *
309 * @return the outer angle
310 */
311 public float getAngleOuterCone() {
312 return m_outerCone;
313 }
314
315
316 /**
317 * Name.
318 */
319 private final String m_name;
320
321
322 /**
323 * Type.
324 */
325 private final AiLightType m_type;
326
327
328 /**
329 * Position.
330 */
331 private final Object m_position;
332
333
334 /**
335 * Direction.
336 */
337 private final Object m_direction;
338
339
340 /**
341 * Constant attenuation.
342 */
343 private final float m_attenuationConstant;
344
345
346 /**
347 * Linear attenuation.
348 */
349 private final float m_attenuationLinear;
350
351
352 /**
353 * Quadratic attenuation.
354 */
355 private final float m_attenuationQuadratic;
356
357
358 /**
359 * Diffuse color.
360 */
361 private final Object m_diffuse;
362
363
364 /**
365 * Specular color.
366 */
367 private final Object m_specular;
368
369
370 /**
371 * Ambient color.
372 */
373 private final Object m_ambient;
374
375
376 /**
377 * Inner cone of spotlight.
378 */
379 private final float m_innerCone;
380
381
382 /**
383 * Outer cone of spotlight.
384 */
385 private final float m_outerCone;
386 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42
43 /**
44 * List of light types supported by {@link AiLight}.
45 */
46 public enum AiLightType {
47 /**
48 * A directional light source.<p>
49 *
50 * A directional light has a well-defined direction but is infinitely far
51 * away. That's quite a good approximation for sun light.
52 */
53 DIRECTIONAL(0x1),
54
55
56 /**
57 * A point light source.<p>
58 *
59 * A point light has a well-defined position in space but no direction -
60 * it emits light in all directions. A normal bulb is a point light.
61 */
62 POINT(0x2),
63
64
65 /**
66 * A spot light source.<p>
67 *
68 * A spot light emits light in a specific angle. It has a position and a
69 * direction it is pointing to. A good example for a spot light is a light
70 * spot in sport arenas.
71 */
72 SPOT(0x3);
73
74
75 /**
76 * Utility method for converting from c/c++ based integer enums to java
77 * enums.<p>
78 *
79 * This method is intended to be used from JNI and my change based on
80 * implementation needs.
81 *
82 * @param rawValue an integer based enum value (as defined by assimp)
83 * @return the enum value corresponding to rawValue
84 */
85 static AiLightType fromRawValue(int rawValue) {
86 for (AiLightType type : AiLightType.values()) {
87 if (type.m_rawValue == rawValue) {
88 return type;
89 }
90 }
91
92 throw new IllegalArgumentException("unexptected raw value: " +
93 rawValue);
94 }
95
96
97 /**
98 * Constructor.
99 *
100 * @param rawValue maps java enum to c/c++ integer enum values
101 */
102 private AiLightType(int rawValue) {
103 m_rawValue = rawValue;
104 }
105
106
107 /**
108 * The mapped c/c++ integer enum value.
109 */
110 private final int m_rawValue;
111 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42 import java.nio.ByteBuffer;
43 import java.nio.ByteOrder;
44 import java.util.ArrayList;
45 import java.util.EnumMap;
46 import java.util.List;
47 import java.util.Map;
48 import java.util.Set;
49
50
51 /**
52 * Data structure for a material.<p>
53 *
54 * Depending on the imported scene and scene format, individual properties
55 * might be present or not. A list of all imported properties can be retrieved
56 * via {@link #getProperties()}.<p>
57 *
58 * This class offers <code>getXXX()</code> for all supported properties. These
59 * methods are fail-save, i.e., will return a default value when the
60 * corresponding property is not set. To change the built in default values,
61 * use the <code>setDefaultXXX()</code> methods.<p>
62 *
63 * If your application expects a certain set of properties to be available,
64 * the {@link #hasProperties(Set)} method can be used to check whether all
65 * these properties are actually set. If this check fails, you can still
66 * use this material via the <code>getXXX()</code> methods without special
67 * error handling code as the implementation guarantees to return default
68 * values for missing properties. This check will not work on texture related
69 * properties (i.e., properties starting with <code>TEX_</code>).
70 */
71 public final class AiMaterial {
72 /**
73 * Enumerates all supported material properties.
74 */
75 public static enum PropertyKey {
76 /**
77 * Name.
78 */
79 NAME("?mat.name", String.class),
80
81 /**
82 * Two-sided flag.
83 */
84 TWO_SIDED("$mat.twosided", Integer.class),
85
86 /**
87 * Shading mode.
88 */
89 SHADING_MODE("$mat.shadingm", AiShadingMode.class),
90
91 /**
92 * Wireframe flag.
93 */
94 WIREFRAME("$mat.wireframe", Integer.class),
95
96 /**
97 * Blend mode.
98 */
99 BLEND_MODE("$mat.blend", AiBlendMode.class),
100
101 /**
102 * Opacity.
103 */
104 OPACITY("$mat.opacity", Float.class),
105
106 /**
107 * Bump scaling.
108 */
109 BUMP_SCALING("$mat.bumpscaling", Float.class),
110
111
112 /**
113 * Shininess.
114 */
115 SHININESS("$mat.shininess", Float.class),
116
117
118 /**
119 * Reflectivity.
120 */
121 REFLECTIVITY("$mat.reflectivity", Float.class),
122
123
124 /**
125 * Shininess strength.
126 */
127 SHININESS_STRENGTH("$mat.shinpercent", Float.class),
128
129
130 /**
131 * Refract index.
132 */
133 REFRACTI("$mat.refracti", Float.class),
134
135
136 /**
137 * Diffuse color.
138 */
139 COLOR_DIFFUSE("$clr.diffuse", Object.class),
140
141
142 /**
143 * Ambient color.
144 */
145 COLOR_AMBIENT("$clr.ambient", Object.class),
146
147
148 /**
149 * Ambient color.
150 */
151 COLOR_SPECULAR("$clr.specular", Object.class),
152
153
154 /**
155 * Emissive color.
156 */
157 COLOR_EMISSIVE("$clr.emissive", Object.class),
158
159
160 /**
161 * Transparent color.
162 */
163 COLOR_TRANSPARENT("$clr.transparent", Object.class),
164
165
166 /**
167 * Reflective color.
168 */
169 COLOR_REFLECTIVE("$clr.reflective", Object.class),
170
171
172 /**
173 * Global background image.
174 */
175 GLOBAL_BACKGROUND_IMAGE("?bg.global", String.class),
176
177
178 /**
179 * Texture file path.
180 */
181 TEX_FILE("$tex.file", String.class),
182
183
184 /**
185 * Texture uv index.
186 */
187 TEX_UV_INDEX("$tex.uvwsrc", Integer.class),
188
189
190 /**
191 * Texture blend factor.
192 */
193 TEX_BLEND("$tex.blend", Float.class),
194
195
196 /**
197 * Texture operation.
198 */
199 TEX_OP("$tex.op", AiTextureOp.class),
200
201
202 /**
203 * Texture map mode for u axis.
204 */
205 TEX_MAP_MODE_U("$tex.mapmodeu", AiTextureMapMode.class),
206
207
208 /**
209 * Texture map mode for v axis.
210 */
211 TEX_MAP_MODE_V("$tex.mapmodev", AiTextureMapMode.class),
212
213
214 /**
215 * Texture map mode for w axis.
216 */
217 TEX_MAP_MODE_W("$tex.mapmodew", AiTextureMapMode.class);
218
219 /**
220 * Constructor.
221 *
222 * @param key key name as used by assimp
223 * @param type key type, used for casts and checks
224 */
225 private PropertyKey(String key, Class<?> type) {
226 m_key = key;
227 m_type = type;
228 }
229
230
231 /**
232 * Key.
233 */
234 private final String m_key;
235
236
237 /**
238 * Type.
239 */
240 private final Class<?> m_type;
241 }
242
243
244 /**
245 * A very primitive RTTI system for the contents of material properties.
246 */
247 public static enum PropertyType {
248 /**
249 * Array of single-precision (32 Bit) floats.
250 */
251 FLOAT(0x1),
252
253
254 /**
255 * The material property is a string.
256 */
257 STRING(0x3),
258
259
260 /**
261 * Array of (32 Bit) integers.
262 */
263 INTEGER(0x4),
264
265
266 /**
267 * Simple binary buffer, content undefined. Not convertible to anything.
268 */
269 BUFFER(0x5);
270
271
272 /**
273 * Utility method for converting from c/c++ based integer enums to java
274 * enums.<p>
275 *
276 * This method is intended to be used from JNI and my change based on
277 * implementation needs.
278 *
279 * @param rawValue an integer based enum value (as defined by assimp)
280 * @return the enum value corresponding to rawValue
281 */
282 static PropertyType fromRawValue(int rawValue) {
283 for (PropertyType type : PropertyType.values()) {
284 if (type.m_rawValue == rawValue) {
285 return type;
286 }
287 }
288
289 throw new IllegalArgumentException("unexptected raw value: " +
290 rawValue);
291 }
292
293
294 /**
295 * Constructor.
296 *
297 * @param rawValue maps java enum to c/c++ integer enum values
298 */
299 private PropertyType(int rawValue) {
300 m_rawValue = rawValue;
301 }
302
303
304 /**
305 * The mapped c/c++ integer enum value.
306 */
307 private final int m_rawValue;
308 }
309
310
311 /**
312 * Data structure for a single material property.<p>
313 *
314 * As an user, you'll probably never need to deal with this data structure.
315 * Just use the provided get() family of functions to query material
316 * properties easily.
317 */
318 public static final class Property {
319 /**
320 * Constructor.
321 *
322 * @param key
323 * @param semantic
324 * @param index
325 * @param type
326 * @param data
327 */
328 Property(String key, int semantic, int index, int type,
329 Object data) {
330
331 m_key = key;
332 m_semantic = semantic;
333 m_index = index;
334 m_type = PropertyType.fromRawValue(type);
335 m_data = data;
336 }
337
338
339 /**
340 * Constructor.
341 *
342 * @param key
343 * @param semantic
344 * @param index
345 * @param type
346 * @param dataLen
347 */
348 Property(String key, int semantic, int index, int type,
349 int dataLen) {
350
351 m_key = key;
352 m_semantic = semantic;
353 m_index = index;
354 m_type = PropertyType.fromRawValue(type);
355
356 ByteBuffer b = ByteBuffer.allocateDirect(dataLen);
357 b.order(ByteOrder.nativeOrder());
358
359 m_data = b;
360 }
361
362
363 /**
364 * Returns the key of the property.<p>
365 *
366 * Keys are generally case insensitive.
367 *
368 * @return the key
369 */
370 public String getKey() {
371 return m_key;
372 }
373
374
375 /**
376 * Textures: Specifies their exact usage semantic.
377 * For non-texture properties, this member is always 0
378 * (or, better-said, #aiTextureType_NONE).
379 *
380 * @return the semantic
381 */
382 public int getSemantic() {
383 return m_semantic;
384 }
385
386
387 /**
388 * Textures: Specifies the index of the texture.
389 * For non-texture properties, this member is always 0.
390 *
391 * @return the index
392 */
393 public int getIndex() {
394 return m_index;
395 }
396
397
398 /**
399 * Type information for the property.<p>
400 *
401 * Defines the data layout inside the data buffer. This is used
402 * by the library internally to perform debug checks and to
403 * utilize proper type conversions.
404 * (It's probably a hacky solution, but it works.)
405 *
406 * @return the type
407 */
408 public PropertyType getType() {
409 return m_type;
410 }
411
412
413 /**
414 * Binary buffer to hold the property's value.
415 * The size of the buffer is always mDataLength.
416 *
417 * @return the data
418 */
419 Object getData() {
420 return m_data;
421 }
422
423
424 /**
425 * Key.
426 */
427 private final String m_key;
428
429
430 /**
431 * Semantic.
432 */
433 private final int m_semantic;
434
435
436 /**
437 * Index.
438 */
439 private final int m_index;
440
441
442 /**
443 * Type.
444 */
445 private final PropertyType m_type;
446
447
448 /**
449 * Data.
450 */
451 private final Object m_data;
452 }
453
454
455 /**
456 * Constructor.
457 */
458 AiMaterial() {
459 /* nothing to do */
460 }
461
462
463 /**
464 * Checks whether the given set of properties is available.
465 *
466 * @param keys the keys to check
467 * @return true if all properties are available, false otherwise
468 */
469 public boolean hasProperties(Set<PropertyKey> keys) {
470 for (PropertyKey key : keys) {
471 if (null == getProperty(key.m_key)) {
472 return false;
473 }
474 }
475
476 return true;
477 }
478
479
480 /**
481 * Sets a default value.<p>
482 *
483 * The passed in Object must match the type of the key as returned by
484 * the corresponding <code>getXXX()</code> method.
485 *
486 * @param key the key
487 * @param defaultValue the new default, may not be null
488 * @throws IllegalArgumentException if defaultValue is null or has a wrong
489 * type
490 */
491 public void setDefault(PropertyKey key, Object defaultValue) {
492 if (null == defaultValue) {
493 throw new IllegalArgumentException("defaultValue may not be null");
494 }
495 if (key.m_type != defaultValue.getClass()) {
496 throw new IllegalArgumentException(
497 "defaultValue has wrong type, " +
498 "expected: " + key.m_type + ", found: " +
499 defaultValue.getClass());
500 }
501
502 m_defaults.put(key, defaultValue);
503 }
504
505
506 // {{ Fail-save Getters
507 /**
508 * Returns the name of the material.<p>
509 *
510 * If missing, defaults to empty string
511 *
512 * @return the name
513 */
514 public String getName() {
515 return getTyped(PropertyKey.NAME, String.class);
516 }
517
518
519 /**
520 * Returns the two-sided flag.<p>
521 *
522 * If missing, defaults to 0
523 *
524 * @return the two-sided flag
525 */
526 public int getTwoSided() {
527 return getTyped(PropertyKey.TWO_SIDED, Integer.class);
528 }
529
530
531 /**
532 * Returns the shading mode.<p>
533 *
534 * If missing, defaults to {@link AiShadingMode#FLAT}
535 *
536 * @return the shading mode
537 */
538 public AiShadingMode getShadingMode() {
539 Property p = getProperty(PropertyKey.SHADING_MODE.m_key);
540
541 if (null == p || null == p.getData()) {
542 return (AiShadingMode) m_defaults.get(PropertyKey.SHADING_MODE);
543 }
544
545 return AiShadingMode.fromRawValue((Integer) p.getData());
546 }
547
548
549 /**
550 * Returns the wireframe flag.<p>
551 *
552 * If missing, defaults to 0
553 *
554 * @return the wireframe flag
555 */
556 public int getWireframe() {
557 return getTyped(PropertyKey.WIREFRAME, Integer.class);
558 }
559
560
561 /**
562 * Returns the blend mode.<p>
563 *
564 * If missing, defaults to {@link AiBlendMode#DEFAULT}
565 *
566 * @return the blend mode
567 */
568 public AiBlendMode getBlendMode() {
569 Property p = getProperty(PropertyKey.BLEND_MODE.m_key);
570
571 if (null == p || null == p.getData()) {
572 return (AiBlendMode) m_defaults.get(PropertyKey.BLEND_MODE);
573 }
574
575 return AiBlendMode.fromRawValue((Integer) p.getData());
576 }
577
578
579 /**
580 * Returns the opacity.<p>
581 *
582 * If missing, defaults to 1.0
583 *
584 * @return the opacity
585 */
586 public float getOpacity() {
587 return getTyped(PropertyKey.OPACITY, Float.class);
588 }
589
590
591 /**
592 * Returns the bump scaling factor.<p>
593 *
594 * If missing, defaults to 1.0
595 *
596 * @return the bump scaling factor
597 */
598 public float getBumpScaling() {
599 return getTyped(PropertyKey.BUMP_SCALING, Float.class);
600 }
601
602
603 /**
604 * Returns the shininess.<p>
605 *
606 * If missing, defaults to 1.0
607 *
608 * @return the shininess
609 */
610 public float getShininess() {
611 return getTyped(PropertyKey.SHININESS, Float.class);
612 }
613
614
615 /**
616 * Returns the reflectivity.<p>
617 *
618 * If missing, defaults to 0.0
619 *
620 * @return the reflectivity
621 */
622 public float getReflectivity() {
623 return getTyped(PropertyKey.REFLECTIVITY, Float.class);
624 }
625
626
627 /**
628 * Returns the shininess strength.<p>
629 *
630 * If missing, defaults to 0.0
631 *
632 * @return the shininess strength
633 */
634 public float getShininessStrength() {
635 return getTyped(PropertyKey.SHININESS_STRENGTH, Float.class);
636 }
637
638
639 /**
640 * Returns the refract index.<p>
641 *
642 * If missing, defaults to 0.0
643 *
644 * @return the refract index
645 */
646 public float getRefractIndex() {
647 return getTyped(PropertyKey.REFRACTI, Float.class);
648 }
649
650
651 /**
652 * Returns the diffuse color.<p>
653 *
654 * If missing, defaults to opaque white (1.0, 1.0, 1.0, 1.0)<p>
655 *
656 * This method is part of the wrapped API (see {@link AiWrapperProvider}
657 * for details on wrappers).<p>
658 *
659 * The built-in behavior is to return a {@link AiVector}.
660 *
661 * @param wrapperProvider the wrapper provider (used for type inference)
662 * @return the diffuse color
663 */
664 @SuppressWarnings("unchecked")
665 public <V3, M4, C, N, Q> C getDiffuseColor(
666 AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
667
668 Property p = getProperty(PropertyKey.COLOR_DIFFUSE.m_key);
669
670 if (null == p || null == p.getData()) {
671 Object def = m_defaults.get(PropertyKey.COLOR_DIFFUSE);
672 if (def == null) {
673 return (C) Jassimp.wrapColor4(1.0f, 1.0f, 1.0f, 1.0f);
674 }
675
676 return (C) def;
677 }
678
679 return (C) p.getData();
680 }
681
682
683 /**
684 * Returns the ambient color.<p>
685 *
686 * If missing, defaults to opaque white (1.0, 1.0, 1.0, 1.0)<p>
687 *
688 * This method is part of the wrapped API (see {@link AiWrapperProvider}
689 * for details on wrappers).<p>
690 *
691 * The built-in behavior is to return a {@link AiVector}.
692 *
693 * @param wrapperProvider the wrapper provider (used for type inference)
694 * @return the ambient color
695 */
696 @SuppressWarnings("unchecked")
697 public <V3, M4, C, N, Q> C getAmbientColor(
698 AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
699
700 Property p = getProperty(PropertyKey.COLOR_AMBIENT.m_key);
701
702 if (null == p || null == p.getData()) {
703 Object def = m_defaults.get(PropertyKey.COLOR_AMBIENT);
704 if (def == null) {
705 return (C) Jassimp.wrapColor4(1.0f, 1.0f, 1.0f, 1.0f);
706 }
707
708 return (C) def;
709 }
710
711 return (C) p.getData();
712 }
713
714
715 /**
716 * Returns the specular color.<p>
717 *
718 * If missing, defaults to opaque white (1.0, 1.0, 1.0, 1.0)<p>
719 *
720 * This method is part of the wrapped API (see {@link AiWrapperProvider}
721 * for details on wrappers).<p>
722 *
723 * The built-in behavior is to return a {@link AiVector}.
724 *
725 * @param wrapperProvider the wrapper provider (used for type inference)
726 * @return the specular color
727 */
728 @SuppressWarnings("unchecked")
729 public <V3, M4, C, N, Q> C getSpecularColor(
730 AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
731
732 Property p = getProperty(PropertyKey.COLOR_SPECULAR.m_key);
733
734 if (null == p || null == p.getData()) {
735 Object def = m_defaults.get(PropertyKey.COLOR_SPECULAR);
736 if (def == null) {
737 return (C) Jassimp.wrapColor4(1.0f, 1.0f, 1.0f, 1.0f);
738 }
739
740 return (C) def;
741 }
742
743 return (C) p.getData();
744 }
745
746
747 /**
748 * Returns the emissive color.<p>
749 *
750 * If missing, defaults to opaque white (1.0, 1.0, 1.0, 1.0)<p>
751 *
752 * This method is part of the wrapped API (see {@link AiWrapperProvider}
753 * for details on wrappers).<p>
754 *
755 * The built-in behavior is to return a {@link AiVector}.
756 *
757 * @param wrapperProvider the wrapper provider (used for type inference)
758 * @return the emissive color
759 */
760 @SuppressWarnings("unchecked")
761 public <V3, M4, C, N, Q> C getEmissiveColor(
762 AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
763
764 Property p = getProperty(PropertyKey.COLOR_EMISSIVE.m_key);
765
766 if (null == p || null == p.getData()) {
767 Object def = m_defaults.get(PropertyKey.COLOR_EMISSIVE);
768 if (def == null) {
769 return (C) Jassimp.wrapColor4(1.0f, 1.0f, 1.0f, 1.0f);
770 }
771
772 return (C) def;
773 }
774
775 return (C) p.getData();
776 }
777
778
779 /**
780 * Returns the transparent color.<p>
781 *
782 * If missing, defaults to opaque white (1.0, 1.0, 1.0, 1.0)<p>
783 *
784 * This method is part of the wrapped API (see {@link AiWrapperProvider}
785 * for details on wrappers).<p>
786 *
787 * The built-in behavior is to return a {@link AiVector}.
788 *
789 * @param wrapperProvider the wrapper provider (used for type inference)
790 * @return the transparent color
791 */
792 @SuppressWarnings("unchecked")
793 public <V3, M4, C, N, Q> C getTransparentColor(
794 AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
795
796 Property p = getProperty(PropertyKey.COLOR_TRANSPARENT.m_key);
797
798 if (null == p || null == p.getData()) {
799 Object def = m_defaults.get(PropertyKey.COLOR_TRANSPARENT);
800 if (def == null) {
801 return (C) Jassimp.wrapColor4(1.0f, 1.0f, 1.0f, 1.0f);
802 }
803
804 return (C) def;
805 }
806
807 return (C) p.getData();
808 }
809
810
811 /**
812 * Returns the reflective color.<p>
813 *
814 * If missing, defaults to opaque white (1.0, 1.0, 1.0, 1.0)<p>
815 *
816 * This method is part of the wrapped API (see {@link AiWrapperProvider}
817 * for details on wrappers).<p>
818 *
819 * The built-in behavior is to return a {@link AiVector}.
820 *
821 * @param wrapperProvider the wrapper provider (used for type inference)
822 * @return the reflective color
823 */
824 @SuppressWarnings("unchecked")
825 public <V3, M4, C, N, Q> C getReflectiveColor(
826 AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
827
828 Property p = getProperty(PropertyKey.COLOR_REFLECTIVE.m_key);
829
830 if (null == p || null == p.getData()) {
831 Object def = m_defaults.get(PropertyKey.COLOR_REFLECTIVE);
832 if (def == null) {
833 return (C) Jassimp.wrapColor4(1.0f, 1.0f, 1.0f, 1.0f);
834 }
835
836 return (C) def;
837 }
838
839 return (C) p.getData();
840 }
841
842
843 /**
844 * Returns the global background image.<p>
845 *
846 * If missing, defaults to empty string
847 *
848 * @return the global background image
849 */
850 public String getGlobalBackgroundImage() {
851 return getTyped(PropertyKey.GLOBAL_BACKGROUND_IMAGE, String.class);
852 }
853
854
855 /**
856 * Returns the number of textures of the given type.
857 *
858 * @param type the type
859 * @return the number of textures
860 */
861 public int getNumTextures(AiTextureType type) {
862 return m_numTextures.get(type);
863 }
864
865
866 /**
867 * Returns the texture file.<p>
868 *
869 * If missing, defaults to empty string
870 *
871 * @param type the texture type
872 * @param index the index in the texture stack
873 * @return the file
874 * @throws IndexOutOfBoundsException if index is invalid
875 */
876 public String getTextureFile(AiTextureType type, int index) {
877 checkTexRange(type, index);
878
879 return getTyped(PropertyKey.TEX_FILE, type, index, String.class);
880 }
881
882
883 /**
884 * Returns the index of the UV coordinate set used by the texture.<p>
885 *
886 * If missing, defaults to 0
887 *
888 * @param type the texture type
889 * @param index the index in the texture stack
890 * @return the UV index
891 * @throws IndexOutOfBoundsException if index is invalid
892 */
893 public int getTextureUVIndex(AiTextureType type, int index) {
894 checkTexRange(type, index);
895
896 return getTyped(PropertyKey.TEX_UV_INDEX, type, index, Integer.class);
897 }
898
899
900 /**
901 * Returns the blend factor of the texture.<p>
902 *
903 * If missing, defaults to 1.0
904 *
905 * @param type the texture type
906 * @param index the index in the texture stack
907 * @return the blend factor
908 */
909 public float getBlendFactor(AiTextureType type, int index) {
910 checkTexRange(type, index);
911
912 return getTyped(PropertyKey.TEX_BLEND, type, index, Float.class);
913 }
914
915
916 /**
917 * Returns the texture operation.<p>
918 *
919 * If missing, defaults to {@link AiTextureOp#ADD}
920 *
921 * @param type the texture type
922 * @param index the index in the texture stack
923 * @return the texture operation
924 */
925 public AiTextureOp getTextureOp(AiTextureType type, int index) {
926 checkTexRange(type, index);
927
928 Property p = getProperty(PropertyKey.TEX_OP.m_key);
929
930 if (null == p || null == p.getData()) {
931 return (AiTextureOp) m_defaults.get(PropertyKey.TEX_OP);
932 }
933
934 return AiTextureOp.fromRawValue((Integer) p.getData());
935 }
936
937
938 /**
939 * Returns the texture mapping mode for the u axis.<p>
940 *
941 * If missing, defaults to {@link AiTextureMapMode#CLAMP}
942 *
943 * @param type the texture type
944 * @param index the index in the texture stack
945 * @return the texture mapping mode
946 */
947 public AiTextureMapMode getTextureMapModeU(AiTextureType type, int index) {
948 checkTexRange(type, index);
949
950 Property p = getProperty(PropertyKey.TEX_MAP_MODE_U.m_key);
951
952 if (null == p || null == p.getData()) {
953 return (AiTextureMapMode) m_defaults.get(
954 PropertyKey.TEX_MAP_MODE_U);
955 }
956
957 return AiTextureMapMode.fromRawValue((Integer) p.getData());
958 }
959
960
961 /**
962 * Returns the texture mapping mode for the v axis.<p>
963 *
964 * If missing, defaults to {@link AiTextureMapMode#CLAMP}
965 *
966 * @param type the texture type
967 * @param index the index in the texture stack
968 * @return the texture mapping mode
969 */
970 public AiTextureMapMode getTextureMapModeV(AiTextureType type, int index) {
971 checkTexRange(type, index);
972
973 Property p = getProperty(PropertyKey.TEX_MAP_MODE_V.m_key);
974
975 if (null == p || null == p.getData()) {
976 return (AiTextureMapMode) m_defaults.get(
977 PropertyKey.TEX_MAP_MODE_V);
978 }
979
980 return AiTextureMapMode.fromRawValue((Integer) p.getData());
981 }
982
983
984 /**
985 * Returns the texture mapping mode for the w axis.<p>
986 *
987 * If missing, defaults to {@link AiTextureMapMode#CLAMP}
988 *
989 * @param type the texture type
990 * @param index the index in the texture stack
991 * @return the texture mapping mode
992 */
993 public AiTextureMapMode getTextureMapModeW(AiTextureType type, int index) {
994 checkTexRange(type, index);
995
996 Property p = getProperty(PropertyKey.TEX_MAP_MODE_W.m_key);
997
998 if (null == p || null == p.getData()) {
999 return (AiTextureMapMode) m_defaults.get(
1000 PropertyKey.TEX_MAP_MODE_W);
1001 }
1002
1003 return AiTextureMapMode.fromRawValue((Integer) p.getData());
1004 }
1005
1006
1007 /**
1008 * Returns all information related to a single texture.
1009 *
1010 * @param type the texture type
1011 * @param index the index in the texture stack
1012 * @return the texture information
1013 */
1014 public AiTextureInfo getTextureInfo(AiTextureType type, int index) {
1015 return new AiTextureInfo(type, index, getTextureFile(type, index),
1016 getTextureUVIndex(type, index), getBlendFactor(type, index),
1017 getTextureOp(type, index), getTextureMapModeW(type, index),
1018 getTextureMapModeW(type, index),
1019 getTextureMapModeW(type, index));
1020 }
1021 // }}
1022
1023 // {{ Generic Getters
1024 /**
1025 * Returns a single property based on its key.
1026 *
1027 * @param key the key
1028 * @return the property or null if the property is not set
1029 */
1030 public Property getProperty(String key) {
1031 for (Property property : m_properties) {
1032 if (property.getKey().equals(key)) {
1033 return property;
1034 }
1035 }
1036
1037 return null;
1038 }
1039
1040
1041 /**
1042 * Returns a single property based on its key.
1043 *
1044 * @param key the key
1045 * @param semantic the semantic type (texture type)
1046 * @param index the index
1047 * @return the property or null if the property is not set
1048 */
1049 public Property getProperty(String key, int semantic, int index) {
1050 for (Property property : m_properties) {
1051 if (property.getKey().equals(key) &&
1052 property.m_semantic == semantic &&
1053 property.m_index == index) {
1054
1055 return property;
1056 }
1057 }
1058
1059 return null;
1060 }
1061
1062
1063 /**
1064 * Returns all properties of the material.
1065 *
1066 * @return the list of properties
1067 */
1068 public List<Property> getProperties() {
1069 return m_properties;
1070 }
1071 // }}
1072
1073
1074 /**
1075 * Helper method. Returns typed property data.
1076 *
1077 * @param <T> type
1078 * @param key the key
1079 * @param clazz type
1080 * @return the data
1081 */
1082 private <T> T getTyped(PropertyKey key, Class<T> clazz) {
1083 Property p = getProperty(key.m_key);
1084
1085 if (null == p || null == p.getData()) {
1086 return clazz.cast(m_defaults.get(key));
1087 }
1088
1089 return clazz.cast(p.getData());
1090 }
1091
1092
1093 /**
1094 * Helper method. Returns typed property data.
1095 *
1096 * @param <T> type
1097 * @param key the key
1098 * @param type the texture type
1099 * @param index the texture index
1100 * @param clazz type
1101 * @return the data
1102 */
1103 private <T> T getTyped(PropertyKey key, AiTextureType type, int index,
1104 Class<T> clazz) {
1105
1106 Property p = getProperty(key.m_key, AiTextureType.toRawValue(type),
1107 index);
1108
1109 if (null == p || null == p.getData()) {
1110 return clazz.cast(m_defaults.get(key));
1111 }
1112
1113 return clazz.cast(p.getData());
1114 }
1115
1116
1117 /**
1118 * Checks that index is valid an throw an exception if not.
1119 *
1120 * @param type the type
1121 * @param index the index to check
1122 */
1123 private void checkTexRange(AiTextureType type, int index) {
1124 if (index < 0 || index > m_numTextures.get(type)) {
1125 throw new IndexOutOfBoundsException("Index: " + index + ", Size: " +
1126 m_numTextures.get(type));
1127 }
1128 }
1129
1130
1131 /**
1132 * Defaults for missing properties.
1133 */
1134 private Map<PropertyKey, Object> m_defaults =
1135 new EnumMap<PropertyKey, Object>(PropertyKey.class);
1136
1137 {
1138 setDefault(PropertyKey.NAME, "");
1139 setDefault(PropertyKey.TWO_SIDED, 0);
1140 setDefault(PropertyKey.SHADING_MODE, AiShadingMode.FLAT);
1141 setDefault(PropertyKey.WIREFRAME, 0);
1142 setDefault(PropertyKey.BLEND_MODE, AiBlendMode.DEFAULT);
1143 setDefault(PropertyKey.OPACITY, 1.0f);
1144 setDefault(PropertyKey.BUMP_SCALING, 1.0f);
1145 setDefault(PropertyKey.SHININESS, 1.0f);
1146 setDefault(PropertyKey.REFLECTIVITY, 0.0f);
1147 setDefault(PropertyKey.SHININESS_STRENGTH, 0.0f);
1148 setDefault(PropertyKey.REFRACTI, 0.0f);
1149
1150 /* bypass null checks for colors */
1151 m_defaults.put(PropertyKey.COLOR_DIFFUSE, null);
1152 m_defaults.put(PropertyKey.COLOR_AMBIENT, null);
1153 m_defaults.put(PropertyKey.COLOR_SPECULAR, null);
1154 m_defaults.put(PropertyKey.COLOR_EMISSIVE, null);
1155 m_defaults.put(PropertyKey.COLOR_TRANSPARENT, null);
1156 m_defaults.put(PropertyKey.COLOR_REFLECTIVE, null);
1157
1158 setDefault(PropertyKey.GLOBAL_BACKGROUND_IMAGE, "");
1159
1160 /* texture related values */
1161 setDefault(PropertyKey.TEX_FILE, "");
1162 setDefault(PropertyKey.TEX_UV_INDEX, 0);
1163 setDefault(PropertyKey.TEX_BLEND, 1.0f);
1164 setDefault(PropertyKey.TEX_OP, AiTextureOp.ADD);
1165 setDefault(PropertyKey.TEX_MAP_MODE_U, AiTextureMapMode.CLAMP);
1166 setDefault(PropertyKey.TEX_MAP_MODE_V, AiTextureMapMode.CLAMP);
1167 setDefault(PropertyKey.TEX_MAP_MODE_W, AiTextureMapMode.CLAMP);
1168
1169 /* ensure we have defaults for everything */
1170 for (PropertyKey key : PropertyKey.values()) {
1171 if (!m_defaults.containsKey(key)) {
1172 throw new IllegalStateException("missing default for: " + key);
1173 }
1174 }
1175 }
1176
1177
1178 /**
1179 * This method is used by JNI, do not call or modify.
1180 *
1181 * @param type the type
1182 * @param number the number
1183 */
1184 @SuppressWarnings("unused")
1185 private void setTextureNumber(int type, int number) {
1186 m_numTextures.put(AiTextureType.fromRawValue(type), number);
1187 }
1188
1189
1190 /**
1191 * List of properties.
1192 */
1193 private final List<Property> m_properties = new ArrayList<Property>();
1194
1195
1196 /**
1197 * Number of textures for each type.
1198 */
1199 private final Map<AiTextureType, Integer> m_numTextures =
1200 new EnumMap<AiTextureType, Integer>(AiTextureType.class);
1201 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42 import java.nio.ByteBuffer;
43 import java.nio.ByteOrder;
44 import java.nio.FloatBuffer;
45
46 /**
47 * Simple 4x4 matrix of floats.
48 */
49 public final class AiMatrix4f {
50 /**
51 * Wraps the given array of floats as matrix.
52 * <p>
53 *
54 * The array must have exactly 16 entries. The data in the array must be in
55 * row-major order.
56 *
57 * @param data
58 * the array to wrap, may not be null
59 */
60 public AiMatrix4f(float[] data) {
61 if (data == null) {
62 throw new IllegalArgumentException("data may not be null");
63 }
64 if (data.length != 16) {
65 throw new IllegalArgumentException("array length is not 16");
66 }
67
68 m_data = data;
69 }
70
71 /**
72 * Gets an element of the matrix.
73 *
74 * @param row
75 * the row
76 * @param col
77 * the column
78 * @return the element at the given position
79 */
80 public float get(int row, int col) {
81 if (row < 0 || row > 3) {
82 throw new IndexOutOfBoundsException("Index: " + row + ", Size: 4");
83 }
84 if (col < 0 || col > 3) {
85 throw new IndexOutOfBoundsException("Index: " + col + ", Size: 4");
86 }
87
88 return m_data[row * 4 + col];
89 }
90
91 /**
92 * Stores the matrix in a new direct ByteBuffer with native byte order.
93 * <p>
94 *
95 * The returned buffer can be passed to rendering APIs such as LWJGL, e.g.,
96 * as parameter for <code>GL20.glUniformMatrix4()</code>. Be sure to set
97 * <code>transpose</code> to <code>true</code> in this case, as OpenGL
98 * expects the matrix in column order.
99 *
100 * @return a new native order, direct ByteBuffer
101 */
102 public FloatBuffer toByteBuffer() {
103 ByteBuffer bbuf = ByteBuffer.allocateDirect(16 * 4);
104 bbuf.order(ByteOrder.nativeOrder());
105 FloatBuffer fbuf = bbuf.asFloatBuffer();
106 fbuf.put(m_data);
107 fbuf.flip();
108
109 return fbuf;
110 }
111
112
113 @Override
114 public String toString() {
115 StringBuilder buf = new StringBuilder();
116
117 for (int row = 0; row < 4; row++) {
118 for (int col = 0; col < 4; col++) {
119 buf.append(m_data[row * 4 + col]).append(" ");
120 }
121 buf.append("\n");
122 }
123
124 return buf.toString();
125 }
126
127
128 /**
129 * Data buffer.
130 */
131 private final float[] m_data;
132 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42 import java.nio.ByteBuffer;
43 import java.nio.ByteOrder;
44 import java.nio.FloatBuffer;
45 import java.nio.IntBuffer;
46 import java.util.ArrayList;
47 import java.util.EnumSet;
48 import java.util.List;
49 import java.util.Set;
50
51
52 /**
53 * A mesh represents a geometry or model with a single material.
54 * <p>
55 *
56 * <h3>Data</h3>
57 * Meshes usually consist of a number of vertices and a series of faces
58 * referencing the vertices. In addition there might be a series of bones, each
59 * of them addressing a number of vertices with a certain weight. Vertex data is
60 * presented in channels with each channel containing a single per-vertex
61 * information such as a set of texture coordinates or a normal vector.<p>
62 *
63 * Faces consist of one or more references to vertices, called vertex indices.
64 * The {@link #getPrimitiveTypes()} method can be used to check what
65 * face types are present in the mesh. Note that a single mesh can possess
66 * faces of different types. The number of indices used by a specific face can
67 * be retrieved with the {@link #getFaceNumIndices(int)} method.
68 *
69 *
70 * <h3>API for vertex and face data</h3>
71 * The jassimp interface for accessing vertex and face data is not a one-to-one
72 * mapping of the c/c++ interface. The c/c++ interface uses an object-oriented
73 * approach to represent data, which provides a considerable
74 * overhead using a naive java based realization (cache locality would be
75 * unpredictable and most likely bad, bulk data transfer would be impossible).
76 * <p>
77 *
78 * The jassimp interface uses flat byte buffers to store vertex and face data.
79 * This data can be accessed through three APIs:
80 * <ul>
81 * <li><b>Buffer API:</b> the <code>getXXXBuffer()</code> methods return
82 * raw data buffers.
83 * <li><b>Direct API:</b> the <code>getXXX()</code> methods allow reading
84 * and writing of individual data values.
85 * <li><b>Wrapped API:</b> the <code>getWrappedXXX()</code> methods provide
86 * an object oriented view on the data.
87 * </ul>
88 *
89 * The Buffer API is optimized for use in conjunction with rendering APIs
90 * such as LWJGL. The returned buffers are guaranteed to have native byte order
91 * and to be direct byte buffers. They can be passed directly to LWJGL
92 * methods, e.g., to fill VBOs with data. Each invocation of a
93 * <code>getXXXBuffer()</code> method will return a new view of the internal
94 * buffer, i.e., if is safe to use the relative byte buffer operations.
95 * The Buffer API provides the best performance of all three APIs, especially
96 * if large data volumes have to be processed.<p>
97 *
98 * The Direct API provides an easy to use interface for reading and writing
99 * individual data values. Its performance is comparable to the Buffer API's
100 * performance for these operations. The main difference to the Buffer API is
101 * the missing support for bulk operations. If you intend to retrieve or modify
102 * large subsets of the raw data consider using the Buffer API, especially
103 * if the subsets are contiguous.
104 * <p>
105 *
106 * The Wrapped API offers an object oriented interface for accessing
107 * and modifying mesh data. As the name implies, this interface is realized
108 * through wrapper objects that provide a view on the raw data. For each
109 * invocation of a <code>getWrappedXXX()</code> method, a new wrapper object
110 * is created. Iterating over mesh data via this interface will create many
111 * short-lived wrapper objects which -depending on usage and virtual machine-
112 * may cause considerable garbage collection overhead. The Wrapped API provides
113 * the worst performance of all three APIs, which may nevertheless still be
114 * good enough to warrant its usage. See {@link AiWrapperProvider} for more
115 * details on wrappers.
116 *
117 *
118 * <h3>API for bones</h3>
119 * As there is no standardized way for doing skinning in different graphics
120 * engines, bones are not represented as flat buffers but as object structure.
121 * Users of this library should convert this structure to the format required
122 * by the specific graphics engine.
123 *
124 *
125 * <h3>Changing Data</h3>
126 * This class is designed to be mutable, i.e., the returned objects and buffers
127 * may be modified. It is not possible to add/remove vertices as this would
128 * require reallocation of the data buffers. Wrapped objects may or may not
129 * propagate changes to the underlying data buffers. Consult the documentation
130 * of your wrapper provider for details. The built in wrappers will propagate
131 * changes.
132 * <p>
133 * Modification of face data is theoretically possible by modifying the face
134 * buffer and the faceOffset buffer however it is strongly disadvised to do so
135 * because it might break all algorithms that depend on the internal consistency
136 * of these two data structures.
137 */
138 public final class AiMesh {
139 /**
140 * Number of bytes per float value.
141 */
142 private static final int SIZEOF_FLOAT = 4;
143
144
145 /**
146 * Number of bytes per int value.
147 */
148 private static final int SIZEOF_INT = 4;
149
150
151 /**
152 * This class is instantiated via JNI, no accessible constructor.
153 */
154 private AiMesh() {
155 /* nothing to do */
156 }
157
158
159 /**
160 * Returns the primitive types used by this mesh.
161 *
162 * @return a set of primitive types used by this mesh
163 */
164 public Set<AiPrimitiveType> getPrimitiveTypes() {
165 return m_primitiveTypes;
166 }
167
168
169 /**
170 * Tells whether the mesh is a pure triangle mesh, i.e., contains only
171 * triangular faces.<p>
172 *
173 * To automatically triangulate meshes the
174 * {@link AiPostProcessSteps#TRIANGULATE} post processing option can be
175 * used when loading the scene
176 *
177 * @return true if the mesh is a pure triangle mesh, false otherwise
178 */
179 public boolean isPureTriangle() {
180 return m_primitiveTypes.contains(AiPrimitiveType.TRIANGLE) &&
181 m_primitiveTypes.size() == 1;
182 }
183
184
185 /**
186 * Tells whether the mesh has vertex positions.<p>
187 *
188 * Meshes almost always contain position data
189 *
190 * @return true if positions are available
191 */
192 public boolean hasPositions() {
193 return m_vertices != null;
194 }
195
196
197 /**
198 * Tells whether the mesh has faces.<p>
199 *
200 * Meshes almost always contain faces
201 *
202 * @return true if faces are available
203 */
204 public boolean hasFaces() {
205 return m_faces != null;
206 }
207
208
209 /**
210 * Tells whether the mesh has normals.
211 *
212 * @return true if normals are available
213 */
214 public boolean hasNormals() {
215 return m_normals != null;
216 }
217
218
219 /**
220 * Tells whether the mesh has tangents and bitangents.<p>
221 *
222 * It is not possible that it contains tangents and no bitangents (or the
223 * other way round). The existence of one of them implies that the second
224 * is there, too.
225 *
226 * @return true if tangents and bitangents are available
227 */
228 public boolean hasTangentsAndBitangents() {
229 return m_tangents != null && m_tangents != null;
230 }
231
232
233 /**
234 * Tells whether the mesh has a vertex color set.
235 *
236 * @param colorset index of the color set
237 * @return true if colors are available
238 */
239 public boolean hasColors(int colorset) {
240 return m_colorsets[colorset] != null;
241 }
242
243
244 /**
245 * Tells whether the mesh has any vertex colors.<p>
246 *
247 * Use {@link #hasColors(int)} to check which color sets are
248 * available.
249 *
250 * @return true if any colors are available
251 */
252 public boolean hasVertexColors() {
253 for (ByteBuffer buf : m_colorsets) {
254 if (buf != null) {
255 return true;
256 }
257 }
258
259 return false;
260 }
261
262
263 /**
264 * Tells whether the mesh has a texture coordinate set.
265 *
266 * @param coords index of the texture coordinate set
267 * @return true if texture coordinates are available
268 */
269 public boolean hasTexCoords(int coords) {
270 return m_texcoords[coords] != null;
271 }
272
273
274 /**
275 * Tells whether the mesh has any texture coordinate sets.<p>
276 *
277 * Use {@link #hasTexCoords(int)} to check which texture coordinate
278 * sets are available
279 *
280 * @return true if any texture coordinates are available
281 */
282 public boolean hasTexCoords() {
283 for (ByteBuffer buf : m_texcoords) {
284 if (buf != null) {
285 return true;
286 }
287 }
288
289 return false;
290 }
291
292
293 /**
294 * Tells whether the mesh has bones.
295 *
296 * @return true if bones are available
297 */
298 public boolean hasBones() {
299 return !m_bones.isEmpty();
300 }
301
302
303 /**
304 * Returns the bones of this mesh.
305 *
306 * @return a list of bones
307 */
308 public List<AiBone> getBones() {
309 return m_bones;
310 }
311
312
313 /**
314 * Returns the number of vertices in this mesh.
315 *
316 * @return the number of vertices.
317 */
318 public int getNumVertives() {
319 return m_numVertices;
320 }
321
322
323 /**
324 * Returns the number of faces in the mesh.
325 *
326 * @return the number of faces
327 */
328 public int getNumFaces() {
329 return m_numFaces;
330 }
331
332
333 /**
334 * Returns the number of vertex indices for a single face.
335 *
336 * @param face the face
337 * @return the number of indices
338 */
339 public int getFaceNumIndices(int face) {
340 if (null == m_faceOffsets) {
341 if (face >= m_numFaces || face < 0) {
342 throw new IndexOutOfBoundsException("Index: " + face +
343 ", Size: " + m_numFaces);
344 }
345 return 3;
346 }
347 else {
348 /*
349 * no need to perform bound checks here as the array access will
350 * throw IndexOutOfBoundsExceptions if the index is invalid
351 */
352
353 if (face == m_numFaces - 1) {
354 return m_faces.capacity() / 4 - m_faceOffsets.getInt(face * 4);
355 }
356
357 return m_faceOffsets.getInt((face + 1) * 4) -
358 m_faceOffsets.getInt(face * 4);
359 }
360 }
361
362
363 /**
364 * Returns the number of UV components for a texture coordinate set.<p>
365 *
366 * Possible values range from 1 to 3 (1D to 3D texture coordinates)
367 *
368 * @param coords the coordinate set
369 * @return the number of components
370 */
371 public int getNumUVComponents(int coords) {
372 return m_numUVComponents[coords];
373 }
374
375
376 /**
377 * Returns the material used by this mesh.<p>
378 *
379 * A mesh does use only a single material. If an imported model uses
380 * multiple materials, the import splits up the mesh. Use this value
381 * as index into the scene's material list.
382 *
383 * @return the material index
384 */
385 public int getMaterialIndex() {
386 return m_materialIndex;
387 }
388
389
390 /**
391 * Returns the name of the mesh.<p>
392 *
393 * Not all meshes have a name, if no name is set an empty string is
394 * returned.
395 *
396 * @return the name or an empty string if no name is set
397 */
398 public String getName() {
399 return m_name;
400 }
401
402
403 // CHECKSTYLE:OFF
404 @Override
405 public String toString() {
406 StringBuilder buf = new StringBuilder();
407 buf.append("Mesh(").append(m_numVertices).append(" vertices, ").
408 append(m_numFaces).append(" faces");
409
410 if (hasNormals()) {
411 buf.append(", normals");
412 }
413 if (hasTangentsAndBitangents()) {
414 buf.append(", (bi-)tangents");
415 }
416 if (hasVertexColors()) {
417 buf.append(", colors");
418 }
419 if (hasTexCoords()) {
420 buf.append(", texCoords");
421 }
422
423 buf.append(")");
424 return buf.toString();
425 }
426 // CHECKSTYLE:ON
427
428
429 // {{ Buffer API
430 /**
431 * Returns a buffer containing vertex positions.<p>
432 *
433 * A vertex position consists of a triple of floats, the buffer will
434 * therefore contain <code>3 * getNumVertives()</code> floats
435 *
436 * @return a native-order direct buffer, or null if no data is available
437 */
438 public FloatBuffer getPositionBuffer() {
439 if (m_vertices == null) {
440 return null;
441 }
442
443 return m_vertices.asFloatBuffer();
444 }
445
446
447 /**
448 * Returns a buffer containing face data.<p>
449 *
450 * You should use the {@link #getIndexBuffer()} method if you are
451 * interested in getting an index buffer used by graphics APIs such as
452 * LWJGL.<p>
453 *
454 * The buffer contains all vertex indices from all faces as a flat list. If
455 * the mesh is a pure triangle mesh, the buffer returned by this method is
456 * identical to the buffer returned by {@link #getIndexBuffer()}. For other
457 * meshes, the {@link #getFaceOffsets()} method can be used to retrieve
458 * an index structure that allows addressing individual faces in the list.
459 *
460 * @return a native-order direct buffer, or null if no data is available
461 */
462 public IntBuffer getFaceBuffer() {
463 if (m_faces == null) {
464 return null;
465 }
466
467 return m_faces.asIntBuffer();
468 }
469
470
471 /**
472 * Returns an index structure for the buffer returned by
473 * {@link #getFaceBuffer()}.<p>
474 *
475 * You should use the {@link #getIndexBuffer()} method if you are
476 * interested in getting an index buffer used by graphics APIs such as
477 * LWJGL.<p>
478 *
479 * The returned buffer contains one integer entry for each face. This entry
480 * specifies the offset at which the face's data is located inside the
481 * face buffer. The difference between two subsequent entries can be used
482 * to determine how many vertices belong to a given face (the last face
483 * contains all entries between the offset and the end of the face buffer).
484 *
485 * @return a native-order direct buffer, or null if no data is available
486 */
487 public IntBuffer getFaceOffsets() {
488 if (m_faceOffsets == null) {
489 return null;
490 }
491
492 return m_faceOffsets.asIntBuffer();
493 }
494
495
496
497 /**
498 * Returns a buffer containing vertex indices for the mesh's faces.<p>
499 *
500 * This method may only be called on pure triangle meshes, i.e., meshes
501 * containing only triangles. The {@link #isPureTriangle()} method can be
502 * used to check whether this is the case.<p>
503 *
504 * Indices are stored as integers, the buffer will therefore contain
505 * <code>3 * getNumVertives()</code> integers (3 indices per triangle)
506 *
507 * @return a native-order direct buffer
508 * @throws UnsupportedOperationException
509 * if the mesh is not a pure triangle mesh
510 */
511 public IntBuffer getIndexBuffer() {
512 if (!isPureTriangle()) {
513 throw new UnsupportedOperationException(
514 "mesh is not a pure triangle mesh");
515 }
516
517 return getFaceBuffer();
518 }
519
520
521 /**
522 * Returns a buffer containing normals.<p>
523 *
524 * A normal consists of a triple of floats, the buffer will
525 * therefore contain <code>3 * getNumVertives()</code> floats
526 *
527 * @return a native-order direct buffer
528 */
529 public FloatBuffer getNormalBuffer() {
530 if (m_normals == null) {
531 return null;
532 }
533
534 return m_normals.asFloatBuffer();
535 }
536
537
538 /**
539 * Returns a buffer containing tangents.<p>
540 *
541 * A tangent consists of a triple of floats, the buffer will
542 * therefore contain <code>3 * getNumVertives()</code> floats
543 *
544 * @return a native-order direct buffer
545 */
546 public FloatBuffer getTangentBuffer() {
547 if (m_tangents == null) {
548 return null;
549 }
550
551 return m_tangents.asFloatBuffer();
552 }
553
554
555 /**
556 * Returns a buffer containing bitangents.<p>
557 *
558 * A bitangent consists of a triple of floats, the buffer will
559 * therefore contain <code>3 * getNumVertives()</code> floats
560 *
561 * @return a native-order direct buffer
562 */
563 public FloatBuffer getBitangentBuffer() {
564 if (m_bitangents == null) {
565 return null;
566 }
567
568 return m_bitangents.asFloatBuffer();
569 }
570
571
572 /**
573 * Returns a buffer containing vertex colors for a color set.<p>
574 *
575 * A vertex color consists of 4 floats (red, green, blue and alpha), the
576 * buffer will therefore contain <code>4 * getNumVertives()</code> floats
577 *
578 * @param colorset the color set
579 *
580 * @return a native-order direct buffer, or null if no data is available
581 */
582 public FloatBuffer getColorBuffer(int colorset) {
583 if (m_colorsets[colorset] == null) {
584 return null;
585 }
586
587 return m_colorsets[colorset].asFloatBuffer();
588 }
589
590
591 /**
592 * Returns a buffer containing coordinates for a texture coordinate set.<p>
593 *
594 * A texture coordinate consists of up to 3 floats (u, v, w). The actual
595 * number can be queried via {@link #getNumUVComponents(int)}. The
596 * buffer will contain
597 * <code>getNumUVComponents(coords) * getNumVertives()</code> floats
598 *
599 * @param coords the texture coordinate set
600 *
601 * @return a native-order direct buffer, or null if no data is available
602 */
603 public FloatBuffer getTexCoordBuffer(int coords) {
604 if (m_texcoords[coords] == null) {
605 return null;
606 }
607
608 return m_texcoords[coords].asFloatBuffer();
609 }
610 // }}
611
612
613 // {{ Direct API
614 /**
615 * Returns the x-coordinate of a vertex position.
616 *
617 * @param vertex the vertex index
618 * @return the x coordinate
619 */
620 public float getPositionX(int vertex) {
621 if (!hasPositions()) {
622 throw new IllegalStateException("mesh has no positions");
623 }
624
625 checkVertexIndexBounds(vertex);
626
627 return m_vertices.getFloat(vertex * 3 * SIZEOF_FLOAT);
628 }
629
630
631 /**
632 * Returns the y-coordinate of a vertex position.
633 *
634 * @param vertex the vertex index
635 * @return the y coordinate
636 */
637 public float getPositionY(int vertex) {
638 if (!hasPositions()) {
639 throw new IllegalStateException("mesh has no positions");
640 }
641
642 checkVertexIndexBounds(vertex);
643
644 return m_vertices.getFloat((vertex * 3 + 1) * SIZEOF_FLOAT);
645 }
646
647 /**
648 * Returns the z-coordinate of a vertex position.
649 *
650 * @param vertex the vertex index
651 * @return the z coordinate
652 */
653 public float getPositionZ(int vertex) {
654 if (!hasPositions()) {
655 throw new IllegalStateException("mesh has no positions");
656 }
657
658 checkVertexIndexBounds(vertex);
659
660 return m_vertices.getFloat((vertex * 3 + 2) * SIZEOF_FLOAT);
661 }
662
663
664 /**
665 * Returns a vertex reference from a face.<p>
666 *
667 * A face contains <code>getFaceNumIndices(face)</code> vertex references.
668 * This method returns the n'th of these. The returned index can be passed
669 * directly to the vertex oriented methods, such as
670 * <code>getPosition()</code> etc.
671 *
672 * @param face the face
673 * @param n the reference
674 * @return a vertex index
675 */
676 public int getFaceVertex(int face, int n) {
677 if (!hasFaces()) {
678 throw new IllegalStateException("mesh has no faces");
679 }
680
681 if (face >= m_numFaces || face < 0) {
682 throw new IndexOutOfBoundsException("Index: " + face + ", Size: " +
683 m_numFaces);
684 }
685 if (n >= getFaceNumIndices(face) || n < 0) {
686 throw new IndexOutOfBoundsException("Index: " + n + ", Size: " +
687 getFaceNumIndices(face));
688 }
689
690 int faceOffset = 0;
691 if (m_faceOffsets == null) {
692 faceOffset = 3 * face * SIZEOF_INT;
693 }
694 else {
695 faceOffset = m_faceOffsets.getInt(face * SIZEOF_INT) * SIZEOF_INT;
696 }
697
698 return m_faces.getInt(faceOffset + n * SIZEOF_INT);
699 }
700
701
702 /**
703 * Returns the x-coordinate of a vertex normal.
704 *
705 * @param vertex the vertex index
706 * @return the x coordinate
707 */
708 public float getNormalX(int vertex) {
709 if (!hasNormals()) {
710 throw new IllegalStateException("mesh has no normals");
711 }
712
713 checkVertexIndexBounds(vertex);
714
715 return m_normals.getFloat(vertex * 3 * SIZEOF_FLOAT);
716 }
717
718
719 /**
720 * Returns the y-coordinate of a vertex normal.
721 *
722 * @param vertex the vertex index
723 * @return the y coordinate
724 */
725 public float getNormalY(int vertex) {
726 if (!hasNormals()) {
727 throw new IllegalStateException("mesh has no normals");
728 }
729
730 checkVertexIndexBounds(vertex);
731
732 return m_normals.getFloat((vertex * 3 + 1) * SIZEOF_FLOAT);
733 }
734
735
736 /**
737 * Returns the z-coordinate of a vertex normal.
738 *
739 * @param vertex the vertex index
740 * @return the z coordinate
741 */
742 public float getNormalZ(int vertex) {
743 if (!hasNormals()) {
744 throw new IllegalStateException("mesh has no normals");
745 }
746
747 checkVertexIndexBounds(vertex);
748
749 return m_normals.getFloat((vertex * 3 + 2) * SIZEOF_FLOAT);
750 }
751
752
753 /**
754 * Returns the x-coordinate of a vertex tangent.
755 *
756 * @param vertex the vertex index
757 * @return the x coordinate
758 */
759 public float getTangentX(int vertex) {
760 if (!hasTangentsAndBitangents()) {
761 throw new IllegalStateException("mesh has no tangents");
762 }
763
764 checkVertexIndexBounds(vertex);
765
766 return m_tangents.getFloat(vertex * 3 * SIZEOF_FLOAT);
767 }
768
769
770 /**
771 * Returns the y-coordinate of a vertex bitangent.
772 *
773 * @param vertex the vertex index
774 * @return the y coordinate
775 */
776 public float getTangentY(int vertex) {
777 if (!hasTangentsAndBitangents()) {
778 throw new IllegalStateException("mesh has no bitangents");
779 }
780
781 checkVertexIndexBounds(vertex);
782
783 return m_tangents.getFloat((vertex * 3 + 1) * SIZEOF_FLOAT);
784 }
785
786
787 /**
788 * Returns the z-coordinate of a vertex tangent.
789 *
790 * @param vertex the vertex index
791 * @return the z coordinate
792 */
793 public float getTangentZ(int vertex) {
794 if (!hasTangentsAndBitangents()) {
795 throw new IllegalStateException("mesh has no tangents");
796 }
797
798 checkVertexIndexBounds(vertex);
799
800 return m_tangents.getFloat((vertex * 3 + 2) * SIZEOF_FLOAT);
801 }
802
803
804 /**
805 * Returns the x-coordinate of a vertex tangent.
806 *
807 * @param vertex the vertex index
808 * @return the x coordinate
809 */
810 public float getBitangentX(int vertex) {
811 if (!hasTangentsAndBitangents()) {
812 throw new IllegalStateException("mesh has no bitangents");
813 }
814
815 checkVertexIndexBounds(vertex);
816
817 return m_bitangents.getFloat(vertex * 3 * SIZEOF_FLOAT);
818 }
819
820
821 /**
822 * Returns the y-coordinate of a vertex tangent.
823 *
824 * @param vertex the vertex index
825 * @return the y coordinate
826 */
827 public float getBitangentY(int vertex) {
828 if (!hasTangentsAndBitangents()) {
829 throw new IllegalStateException("mesh has no bitangents");
830 }
831
832 checkVertexIndexBounds(vertex);
833
834 return m_bitangents.getFloat((vertex * 3 + 1) * SIZEOF_FLOAT);
835 }
836
837
838 /**
839 * Returns the z-coordinate of a vertex tangent.
840 *
841 * @param vertex the vertex index
842 * @return the z coordinate
843 */
844 public float getBitangentZ(int vertex) {
845 if (!hasTangentsAndBitangents()) {
846 throw new IllegalStateException("mesh has no bitangents");
847 }
848
849 checkVertexIndexBounds(vertex);
850
851 return m_bitangents.getFloat((vertex * 3 + 2) * SIZEOF_FLOAT);
852 }
853
854
855 /**
856 * Returns the red color component of a color from a vertex color set.
857 *
858 * @param vertex the vertex index
859 * @param colorset the color set
860 * @return the red color component
861 */
862 public float getColorR(int vertex, int colorset) {
863 if (!hasColors(colorset)) {
864 throw new IllegalStateException("mesh has no colorset " + colorset);
865 }
866
867 checkVertexIndexBounds(vertex);
868 /* bound checks for colorset are done by java for us */
869
870 return m_colorsets[colorset].getFloat(vertex * 4 * SIZEOF_FLOAT);
871 }
872
873
874 /**
875 * Returns the green color component of a color from a vertex color set.
876 *
877 * @param vertex the vertex index
878 * @param colorset the color set
879 * @return the green color component
880 */
881 public float getColorG(int vertex, int colorset) {
882 if (!hasColors(colorset)) {
883 throw new IllegalStateException("mesh has no colorset " + colorset);
884 }
885
886 checkVertexIndexBounds(vertex);
887 /* bound checks for colorset are done by java for us */
888
889 return m_colorsets[colorset].getFloat((vertex * 4 + 1) * SIZEOF_FLOAT);
890 }
891
892
893 /**
894 * Returns the blue color component of a color from a vertex color set.
895 *
896 * @param vertex the vertex index
897 * @param colorset the color set
898 * @return the blue color component
899 */
900 public float getColorB(int vertex, int colorset) {
901 if (!hasColors(colorset)) {
902 throw new IllegalStateException("mesh has no colorset " + colorset);
903 }
904
905 checkVertexIndexBounds(vertex);
906 /* bound checks for colorset are done by java for us */
907
908 return m_colorsets[colorset].getFloat((vertex * 4 + 2) * SIZEOF_FLOAT);
909 }
910
911
912 /**
913 * Returns the alpha color component of a color from a vertex color set.
914 *
915 * @param vertex the vertex index
916 * @param colorset the color set
917 * @return the alpha color component
918 */
919 public float getColorA(int vertex, int colorset) {
920 if (!hasColors(colorset)) {
921 throw new IllegalStateException("mesh has no colorset " + colorset);
922 }
923
924 checkVertexIndexBounds(vertex);
925 /* bound checks for colorset are done by java for us */
926
927 return m_colorsets[colorset].getFloat((vertex * 4 + 3) * SIZEOF_FLOAT);
928 }
929
930
931 /**
932 * Returns the u component of a coordinate from a texture coordinate set.
933 *
934 * @param vertex the vertex index
935 * @param coords the texture coordinate set
936 * @return the u component
937 */
938 public float getTexCoordU(int vertex, int coords) {
939 if (!hasTexCoords(coords)) {
940 throw new IllegalStateException(
941 "mesh has no texture coordinate set " + coords);
942 }
943
944 checkVertexIndexBounds(vertex);
945 /* bound checks for coords are done by java for us */
946
947 return m_texcoords[coords].getFloat(
948 vertex * m_numUVComponents[coords] * SIZEOF_FLOAT);
949 }
950
951
952 /**
953 * Returns the v component of a coordinate from a texture coordinate set.<p>
954 *
955 * This method may only be called on 2- or 3-dimensional coordinate sets.
956 * Call <code>getNumUVComponents(coords)</code> to determine how may
957 * coordinate components are available.
958 *
959 * @param vertex the vertex index
960 * @param coords the texture coordinate set
961 * @return the v component
962 */
963 public float getTexCoordV(int vertex, int coords) {
964 if (!hasTexCoords(coords)) {
965 throw new IllegalStateException(
966 "mesh has no texture coordinate set " + coords);
967 }
968
969 checkVertexIndexBounds(vertex);
970
971 /* bound checks for coords are done by java for us */
972
973 if (getNumUVComponents(coords) < 2) {
974 throw new IllegalArgumentException("coordinate set " + coords +
975 " does not contain 2D texture coordinates");
976 }
977
978 return m_texcoords[coords].getFloat(
979 (vertex * m_numUVComponents[coords] + 1) * SIZEOF_FLOAT);
980 }
981
982
983 /**
984 * Returns the w component of a coordinate from a texture coordinate set.<p>
985 *
986 * This method may only be called on 3-dimensional coordinate sets.
987 * Call <code>getNumUVComponents(coords)</code> to determine how may
988 * coordinate components are available.
989 *
990 * @param vertex the vertex index
991 * @param coords the texture coordinate set
992 * @return the w component
993 */
994 public float getTexCoordW(int vertex, int coords) {
995 if (!hasTexCoords(coords)) {
996 throw new IllegalStateException(
997 "mesh has no texture coordinate set " + coords);
998 }
999
1000 checkVertexIndexBounds(vertex);
1001
1002 /* bound checks for coords are done by java for us */
1003
1004 if (getNumUVComponents(coords) < 3) {
1005 throw new IllegalArgumentException("coordinate set " + coords +
1006 " does not contain 3D texture coordinates");
1007 }
1008
1009 return m_texcoords[coords].getFloat(
1010 (vertex * m_numUVComponents[coords] + 1) * SIZEOF_FLOAT);
1011 }
1012 // }}
1013
1014
1015 // {{ Wrapped API
1016 /**
1017 * Returns the vertex position as 3-dimensional vector.<p>
1018 *
1019 * This method is part of the wrapped API (see {@link AiWrapperProvider}
1020 * for details on wrappers).<p>
1021 *
1022 * The built-in behavior is to return a {@link AiVector}.
1023 *
1024 * @param vertex the vertex index
1025 * @param wrapperProvider the wrapper provider (used for type inference)
1026 * @return the position wrapped as object
1027 */
1028 public <V3, M4, C, N, Q> V3 getWrappedPosition(int vertex,
1029 AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
1030
1031 if (!hasPositions()) {
1032 throw new IllegalStateException("mesh has no positions");
1033 }
1034
1035 checkVertexIndexBounds(vertex);
1036
1037 return wrapperProvider.wrapVector3f(m_vertices,
1038 vertex * 3 * SIZEOF_FLOAT, 3);
1039 }
1040
1041
1042 /**
1043 * Returns the vertex normal as 3-dimensional vector.<p>
1044 *
1045 * This method is part of the wrapped API (see {@link AiWrapperProvider}
1046 * for details on wrappers).<p>
1047 *
1048 * The built-in behavior is to return a {@link AiVector}.
1049 *
1050 * @param vertex the vertex index
1051 * @param wrapperProvider the wrapper provider (used for type inference)
1052 * @return the normal wrapped as object
1053 */
1054 public <V3, M4, C, N, Q> V3 getWrappedNormal(int vertex,
1055 AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
1056
1057 if (!hasNormals()) {
1058 throw new IllegalStateException("mesh has no positions");
1059 }
1060
1061 checkVertexIndexBounds(vertex);
1062
1063 return wrapperProvider.wrapVector3f(m_normals,
1064 vertex * 3 * SIZEOF_FLOAT, 3);
1065 }
1066
1067
1068 /**
1069 * Returns the vertex tangent as 3-dimensional vector.<p>
1070 *
1071 * This method is part of the wrapped API (see {@link AiWrapperProvider}
1072 * for details on wrappers).<p>
1073 *
1074 * The built-in behavior is to return a {@link AiVector}.
1075 *
1076 * @param vertex the vertex index
1077 * @param wrapperProvider the wrapper provider (used for type inference)
1078 * @return the tangent wrapped as object
1079 */
1080 public <V3, M4, C, N, Q> V3 getWrappedTangent(int vertex,
1081 AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
1082
1083 if (!hasTangentsAndBitangents()) {
1084 throw new IllegalStateException("mesh has no tangents");
1085 }
1086
1087 checkVertexIndexBounds(vertex);
1088
1089 return wrapperProvider.wrapVector3f(m_tangents,
1090 vertex * 3 * SIZEOF_FLOAT, 3);
1091 }
1092
1093
1094 /**
1095 * Returns the vertex bitangent as 3-dimensional vector.<p>
1096 *
1097 * This method is part of the wrapped API (see {@link AiWrapperProvider}
1098 * for details on wrappers).<p>
1099 *
1100 * The built-in behavior is to return a {@link AiVector}.
1101 *
1102 * @param vertex the vertex index
1103 * @param wrapperProvider the wrapper provider (used for type inference)
1104 * @return the bitangent wrapped as object
1105 */
1106 public <V3, M4, C, N, Q> V3 getWrappedBitangent(int vertex,
1107 AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
1108
1109 if (!hasTangentsAndBitangents()) {
1110 throw new IllegalStateException("mesh has no bitangents");
1111 }
1112
1113 checkVertexIndexBounds(vertex);
1114
1115 return wrapperProvider.wrapVector3f(m_bitangents,
1116 vertex * 3 * SIZEOF_FLOAT, 3);
1117 }
1118
1119
1120 /**
1121 * Returns the vertex color.<p>
1122 *
1123 * This method is part of the wrapped API (see {@link AiWrapperProvider}
1124 * for details on wrappers).<p>
1125 *
1126 * The built-in behavior is to return a {@link AiColor}.
1127 *
1128 * @param vertex the vertex index
1129 * @param colorset the color set
1130 * @param wrapperProvider the wrapper provider (used for type inference)
1131 * @return the vertex color wrapped as object
1132 */
1133 public <V3, M4, C, N, Q> C getWrappedColor(int vertex, int colorset,
1134 AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
1135
1136 if (!hasColors(colorset)) {
1137 throw new IllegalStateException("mesh has no colorset " + colorset);
1138 }
1139
1140 checkVertexIndexBounds(vertex);
1141
1142 return wrapperProvider.wrapColor(
1143 m_colorsets[colorset], vertex * 4 * SIZEOF_FLOAT);
1144 }
1145
1146
1147 /**
1148 * Returns the texture coordinates as n-dimensional vector.<p>
1149 *
1150 * This method is part of the wrapped API (see {@link AiWrapperProvider}
1151 * for details on wrappers).<p>
1152 *
1153 * The built-in behavior is to return a {@link AiVector}.
1154 *
1155 * @param vertex the vertex index
1156 * @param coords the texture coordinate set
1157 * @param wrapperProvider the wrapper provider (used for type inference)
1158 * @return the texture coordinates wrapped as object
1159 */
1160 public <V3, M4, C, N, Q> V3 getWrappedTexCoords(int vertex, int coords,
1161 AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
1162
1163 if (!hasTexCoords(coords)) {
1164 throw new IllegalStateException(
1165 "mesh has no texture coordinate set " + coords);
1166 }
1167
1168 checkVertexIndexBounds(vertex);
1169
1170 return wrapperProvider.wrapVector3f(m_texcoords[coords],
1171 vertex * 3 * SIZEOF_FLOAT, getNumUVComponents(coords));
1172 }
1173 // }}
1174
1175
1176 // {{ Helpers
1177 /**
1178 * Throws an exception if the vertex index is not in the allowed range.
1179 *
1180 * @param vertex the index to check
1181 */
1182 private void checkVertexIndexBounds(int vertex) {
1183 if (vertex >= m_numVertices || vertex < 0) {
1184 throw new IndexOutOfBoundsException("Index: " + vertex +
1185 ", Size: " + m_numVertices);
1186 }
1187 }
1188 // }}
1189
1190 // {{ JNI interface
1191 /*
1192 * Channel constants used by allocate data channel. Do not modify or use
1193 * as these may change at will
1194 */
1195 // CHECKSTYLE:OFF
1196 private static final int NORMALS = 0;
1197 private static final int TANGENTS = 1;
1198 private static final int BITANGENTS = 2;
1199 private static final int COLORSET = 3;
1200 private static final int TEXCOORDS_1D = 4;
1201 private static final int TEXCOORDS_2D = 5;
1202 private static final int TEXCOORDS_3D = 6;
1203 // CHECKSTYLE:ON
1204
1205
1206 /**
1207 * This method is used by JNI. Do not call or modify.<p>
1208 *
1209 * Sets the primitive types enum set
1210 *
1211 * @param types the bitwise or'ed c/c++ aiPrimitiveType enum values
1212 */
1213 @SuppressWarnings("unused")
1214 private void setPrimitiveTypes(int types) {
1215 AiPrimitiveType.fromRawValue(m_primitiveTypes, types);
1216 }
1217
1218
1219 /**
1220 * This method is used by JNI. Do not call or modify.<p>
1221 *
1222 * Allocates byte buffers
1223 *
1224 * @param numVertices the number of vertices in the mesh
1225 * @param numFaces the number of faces in the mesh
1226 * @param optimizedFaces set true for optimized face representation
1227 * @param faceBufferSize size of face buffer for non-optimized face
1228 * representation
1229 */
1230 @SuppressWarnings("unused")
1231 private void allocateBuffers(int numVertices, int numFaces,
1232 boolean optimizedFaces, int faceBufferSize) {
1233 /*
1234 * the allocated buffers are native order direct byte buffers, so they
1235 * can be passed directly to LWJGL or similar graphics APIs
1236 */
1237
1238 /* ensure face optimization is possible */
1239 if (optimizedFaces && !isPureTriangle()) {
1240 throw new IllegalArgumentException("mesh is not purely triangular");
1241 }
1242
1243
1244 m_numVertices = numVertices;
1245 m_numFaces = numFaces;
1246
1247
1248 /* allocate for each vertex 3 floats */
1249 if (m_numVertices > 0) {
1250 m_vertices = ByteBuffer.allocateDirect(numVertices * 3 *
1251 SIZEOF_FLOAT);
1252 m_vertices.order(ByteOrder.nativeOrder());
1253 }
1254
1255
1256 if (m_numFaces > 0) {
1257 /* for optimized faces allocate 3 integers per face */
1258 if (optimizedFaces) {
1259 m_faces = ByteBuffer.allocateDirect(numFaces * 3 * SIZEOF_INT);
1260 m_faces.order(ByteOrder.nativeOrder());
1261 }
1262 /*
1263 * for non-optimized faces allocate the passed in buffer size
1264 * and allocate the face index structure
1265 */
1266 else {
1267 m_faces = ByteBuffer.allocateDirect(faceBufferSize);
1268 m_faces.order(ByteOrder.nativeOrder());
1269
1270 m_faceOffsets = ByteBuffer.allocateDirect(numFaces *
1271 SIZEOF_INT);
1272 m_faceOffsets.order(ByteOrder.nativeOrder());
1273 }
1274 }
1275 }
1276
1277
1278 /**
1279 * This method is used by JNI. Do not call or modify.<p>
1280 *
1281 * Allocates a byte buffer for a vertex data channel
1282 *
1283 * @param channelType the channel type
1284 * @param channelIndex sub-index, used for types that can have multiple
1285 * channels, such as texture coordinates
1286 */
1287 @SuppressWarnings("unused")
1288 private void allocateDataChannel(int channelType, int channelIndex) {
1289 switch (channelType) {
1290 case NORMALS:
1291 m_normals = ByteBuffer.allocateDirect(
1292 m_numVertices * 3 * SIZEOF_FLOAT);
1293 m_normals.order(ByteOrder.nativeOrder());
1294 break;
1295 case TANGENTS:
1296 m_tangents = ByteBuffer.allocateDirect(
1297 m_numVertices * 3 * SIZEOF_FLOAT);
1298 m_tangents.order(ByteOrder.nativeOrder());
1299 break;
1300 case BITANGENTS:
1301 m_bitangents = ByteBuffer.allocateDirect(
1302 m_numVertices * 3 * SIZEOF_FLOAT);
1303 m_bitangents.order(ByteOrder.nativeOrder());
1304 break;
1305 case COLORSET:
1306 m_colorsets[channelIndex] = ByteBuffer.allocateDirect(
1307 m_numVertices * 4 * SIZEOF_FLOAT);
1308 m_colorsets[channelIndex].order(ByteOrder.nativeOrder());
1309 break;
1310 case TEXCOORDS_1D:
1311 m_numUVComponents[channelIndex] = 1;
1312 m_texcoords[channelIndex] = ByteBuffer.allocateDirect(
1313 m_numVertices * 1 * SIZEOF_FLOAT);
1314 m_texcoords[channelIndex].order(ByteOrder.nativeOrder());
1315 break;
1316 case TEXCOORDS_2D:
1317 m_numUVComponents[channelIndex] = 2;
1318 m_texcoords[channelIndex] = ByteBuffer.allocateDirect(
1319 m_numVertices * 2 * SIZEOF_FLOAT);
1320 m_texcoords[channelIndex].order(ByteOrder.nativeOrder());
1321 break;
1322 case TEXCOORDS_3D:
1323 m_numUVComponents[channelIndex] = 3;
1324 m_texcoords[channelIndex] = ByteBuffer.allocateDirect(
1325 m_numVertices * 3 * SIZEOF_FLOAT);
1326 m_texcoords[channelIndex].order(ByteOrder.nativeOrder());
1327 break;
1328 default:
1329 throw new IllegalArgumentException("unsupported channel type");
1330 }
1331 }
1332 // }}
1333
1334
1335 /**
1336 * The primitive types used by this mesh.
1337 */
1338 private final Set<AiPrimitiveType> m_primitiveTypes =
1339 EnumSet.noneOf(AiPrimitiveType.class);
1340
1341
1342 /**
1343 * Number of vertices in this mesh.
1344 */
1345 private int m_numVertices = 0;
1346
1347
1348 /**
1349 * Number of faces in this mesh.
1350 */
1351 private int m_numFaces = 0;
1352
1353
1354 /**
1355 * Material used by this mesh.
1356 */
1357 private int m_materialIndex = -1;
1358
1359
1360 /**
1361 * The name of the mesh.
1362 */
1363 private String m_name = "";
1364
1365
1366 /**
1367 * Buffer for vertex position data.
1368 */
1369 private ByteBuffer m_vertices = null;
1370
1371
1372 /**
1373 * Buffer for faces/ indices.
1374 */
1375 private ByteBuffer m_faces = null;
1376
1377
1378 /**
1379 * Index structure for m_faces.<p>
1380 *
1381 * Only used by meshes that are not pure triangular
1382 */
1383 private ByteBuffer m_faceOffsets = null;
1384
1385
1386 /**
1387 * Buffer for normals.
1388 */
1389 private ByteBuffer m_normals = null;
1390
1391
1392 /**
1393 * Buffer for tangents.
1394 */
1395 private ByteBuffer m_tangents = null;
1396
1397
1398 /**
1399 * Buffer for bitangents.
1400 */
1401 private ByteBuffer m_bitangents = null;
1402
1403
1404 /**
1405 * Vertex colors.
1406 */
1407 private ByteBuffer[] m_colorsets =
1408 new ByteBuffer[JassimpConfig.MAX_NUMBER_COLORSETS];
1409
1410
1411 /**
1412 * Number of UV components for each texture coordinate set.
1413 */
1414 private int[] m_numUVComponents = new int[JassimpConfig.MAX_NUMBER_TEXCOORDS];
1415
1416
1417 /**
1418 * Texture coordinates.
1419 */
1420 private ByteBuffer[] m_texcoords =
1421 new ByteBuffer[JassimpConfig.MAX_NUMBER_TEXCOORDS];
1422
1423
1424 /**
1425 * Bones.
1426 */
1427 private final List<AiBone> m_bones = new ArrayList<AiBone>();
1428 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42
43 /**
44 * This class is a stub - mesh animations are currently not supported.
45 */
46 public class AiMeshAnim {
47
48 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42 import java.util.ArrayList;
43 import java.util.List;
44
45
46 /**
47 * A node in the imported hierarchy.<p>
48 *
49 * Each node has name, a parent node (except for the root node),
50 * a transformation relative to its parent and possibly several child nodes.
51 * Simple file formats don't support hierarchical structures - for these formats
52 * the imported scene consists of only a single root node without children.
53 */
54 public final class AiNode {
55 /**
56 * Constructor.
57 *
58 * @param parent the parent node, may be null
59 * @param transform the transform matrix
60 * @param meshReferences array of mesh references
61 * @param name the name of the node
62 */
63 AiNode(AiNode parent, Object transform, int[] meshReferences, String name) {
64 m_parent = parent;
65 m_transformationMatrix = transform;
66 m_meshReferences = meshReferences;
67 m_name = name;
68
69 if (null != m_parent) {
70 m_parent.addChild(this);
71 }
72 }
73
74
75 /**
76 * Returns the name of this node.
77 *
78 * @return the name
79 */
80 public String getName() {
81 return m_name;
82 }
83
84
85 /**
86 * Returns the number of child nodes.<p>
87 *
88 * This method exists for compatibility reasons with the native assimp API.
89 * The returned value is identical to <code>getChildren().size()</code>
90 *
91 * @return the number of child nodes
92 */
93 public int getNumChildren() {
94 return getChildren().size();
95 }
96
97
98 /**
99 * Returns a 4x4 matrix that specifies the transformation relative to
100 * the parent node.<p>
101 *
102 * This method is part of the wrapped API (see {@link AiWrapperProvider}
103 * for details on wrappers).<p>
104 *
105 * The built in behavior is to return an {@link AiMatrix4f}.
106 *
107 * @param wrapperProvider the wrapper provider (used for type inference)
108 *
109 * @return a matrix
110 */
111 @SuppressWarnings("unchecked")
112 public <V3, M4, C, N, Q> M4 getTransform(AiWrapperProvider<V3, M4, C, N, Q>
113 wrapperProvider) {
114
115 return (M4) m_transformationMatrix;
116 }
117
118
119 /**
120 * Returns the children of this node.
121 *
122 * @return the children, or an empty list if the node has no children
123 */
124 public List<AiNode> getChildren() {
125 return m_children;
126 }
127
128
129 /**
130 * Returns the parent node.
131 *
132 * @return the parent, or null of the node has no parent
133 */
134 public AiNode getParent() {
135 return m_parent;
136 }
137
138
139 /**
140 * Searches the node hierarchy below (and including) this node for a node
141 * with the specified name.
142 *
143 * @param name the name to look for
144 * @return the first node with the given name, or null if no such node
145 * exists
146 */
147 public AiNode findNode(String name) {
148 /* classic recursive depth first search */
149
150 if (m_name.equals(name)) {
151 return this;
152 }
153
154 for (AiNode child : m_children) {
155 if (null != child.findNode(name)) {
156 return child;
157 }
158 }
159
160 return null;
161 }
162
163
164 /**
165 * Returns the number of meshes references by this node.<p>
166 *
167 * This method exists for compatibility with the native assimp API.
168 * The returned value is identical to <code>getMeshes().length</code>
169 *
170 * @return the number of references
171 */
172 public int getNumMeshes() {
173 return m_meshReferences.length;
174 }
175
176
177 /**
178 * Returns the meshes referenced by this node.<p>
179 *
180 * Each entry is an index into the mesh list stored in {@link AiScene}.
181 *
182 * @return an array of indices
183 */
184 public int[] getMeshes() {
185 return m_meshReferences;
186 }
187
188
189 /**
190 * Adds a child node.
191 *
192 * @param child the child to add
193 */
194 void addChild(AiNode child) {
195 m_children.add(child);
196 }
197
198
199 /**
200 * Name.
201 */
202 private final String m_name;
203
204
205 /**
206 * Parent node.
207 */
208 private final AiNode m_parent;
209
210
211 /**
212 * Mesh references.
213 */
214 private final int[] m_meshReferences;
215
216
217 /**
218 * List of children.
219 */
220 private final List<AiNode> m_children = new ArrayList<AiNode>();
221
222
223 /**
224 * Buffer for transformation matrix.
225 */
226 private final Object m_transformationMatrix;
227 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42 import java.nio.ByteBuffer;
43 import java.nio.ByteOrder;
44
45
46 /**
47 * Describes the animation of a single node.<p>
48 *
49 * The node name ({@link #getNodeName()} specifies the bone/node which is
50 * affected by this animation channel. The keyframes are given in three
51 * separate series of values, one each for position, rotation and scaling.
52 * The transformation matrix computed from these values replaces the node's
53 * original transformation matrix at a specific time.<p>
54 *
55 * This means all keys are absolute and not relative to the bone default pose.
56 * The order in which the transformations are applied is - as usual -
57 * scaling, rotation, translation.<p>
58 *
59 * <b>Note:</b> All keys are returned in their correct, chronological order.
60 * Duplicate keys don't pass the validation step. Most likely there
61 * will be no negative time values, but they are not forbidden also (so
62 * implementations need to cope with them!)<p>
63 *
64 * Like {@link AiMesh}, the animation related classes offer a Buffer API, a
65 * Direct API and a wrapped API. Please consult the documentation of
66 * {@link AiMesh} for a description and comparison of these APIs.
67 */
68 public final class AiNodeAnim {
69 /**
70 * Size of one position key entry (includes padding).
71 */
72 private static final int POS_KEY_SIZE = 24;
73
74 /**
75 * Size of one rotation key entry.
76 */
77 private static final int ROT_KEY_SIZE = 24;
78
79 /**
80 * Size of one scaling key entry (includes padding).
81 */
82 private static final int SCALE_KEY_SIZE = 24;
83
84
85 /**
86 * Constructor.
87 *
88 * @param nodeName name of corresponding scene graph node
89 * @param numPosKeys number of position keys
90 * @param numRotKeys number of rotation keys
91 * @param numScaleKeys number of scaling keys
92 * @param preBehavior behavior before animation start
93 * @param postBehavior behavior after animation end
94 */
95 AiNodeAnim(String nodeName, int numPosKeys, int numRotKeys,
96 int numScaleKeys, int preBehavior, int postBehavior) {
97
98 m_nodeName = nodeName;
99 m_numPosKeys = numPosKeys;
100 m_numRotKeys = numRotKeys;
101 m_numScaleKeys = numScaleKeys;
102 m_preState = AiAnimBehavior.fromRawValue(preBehavior);
103 m_postState = AiAnimBehavior.fromRawValue(postBehavior);
104
105 /* c data is padded -> 24 bytes with 20 bytes data */
106 m_posKeys = ByteBuffer.allocateDirect(numPosKeys * POS_KEY_SIZE);
107 m_posKeys.order(ByteOrder.nativeOrder());
108
109 m_rotKeys = ByteBuffer.allocateDirect(numRotKeys * 24);
110 m_rotKeys.order(ByteOrder.nativeOrder());
111
112 m_scaleKeys = ByteBuffer.allocateDirect(numScaleKeys * 24);
113 m_scaleKeys.order(ByteOrder.nativeOrder());
114 }
115
116
117 /**
118 * Returns the name of the scene graph node affected by this animation.<p>
119 *
120 * The node must exist and it must be unique.
121 *
122 * @return the name of the affected node
123 */
124 public String getNodeName() {
125 return m_nodeName;
126 }
127
128
129 /**
130 * Returns the number of position keys.
131 *
132 * @return the number of position keys
133 */
134 public int getNumPosKeys() {
135 return m_numPosKeys;
136 }
137
138
139 /**
140 * Returns the buffer with position keys of this animation channel.<p>
141 *
142 * Position keys consist of a time value (double) and a position (3D vector
143 * of floats), resulting in a total of 24 bytes per entry with padding.
144 * The buffer contains {@link #getNumPosKeys()} of these entries.<p>
145 *
146 * If there are position keys, there will also be at least one
147 * scaling and one rotation key.<p>
148 *
149 * @return a native order, direct ByteBuffer
150 */
151 public ByteBuffer getPosKeyBuffer() {
152 ByteBuffer buf = m_posKeys.duplicate();
153 buf.order(ByteOrder.nativeOrder());
154
155 return buf;
156 }
157
158
159 /**
160 * Returns the time component of the specified position key.
161 *
162 * @param keyIndex the index of the position key
163 * @return the time component
164 */
165 public double getPosKeyTime(int keyIndex) {
166 return m_posKeys.getDouble(POS_KEY_SIZE * keyIndex);
167 }
168
169
170 /**
171 * Returns the position x component of the specified position key.
172 *
173 * @param keyIndex the index of the position key
174 * @return the x component
175 */
176 public float getPosKeyX(int keyIndex) {
177 return m_posKeys.getFloat(POS_KEY_SIZE * keyIndex + 8);
178 }
179
180
181 /**
182 * Returns the position y component of the specified position key.
183 *
184 * @param keyIndex the index of the position key
185 * @return the y component
186 */
187 public float getPosKeyY(int keyIndex) {
188 return m_posKeys.getFloat(POS_KEY_SIZE * keyIndex + 12);
189 }
190
191
192 /**
193 * Returns the position z component of the specified position key.
194 *
195 * @param keyIndex the index of the position key
196 * @return the z component
197 */
198 public float getPosKeyZ(int keyIndex) {
199 return m_posKeys.getFloat(POS_KEY_SIZE * keyIndex + 16);
200 }
201
202
203 /**
204 * Returns the position as vector.<p>
205 *
206 * This method is part of the wrapped API (see {@link AiWrapperProvider}
207 * for details on wrappers).<p>
208 *
209 * The built in behavior is to return an {@link AiVector}.
210 *
211 * @param wrapperProvider the wrapper provider (used for type inference)
212 *
213 * @return the position as vector
214 */
215 public <V3, M4, C, N, Q> V3 getPosKeyVector(int keyIndex,
216 AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
217
218 return wrapperProvider.wrapVector3f(m_posKeys,
219 POS_KEY_SIZE * keyIndex + 8, 3);
220 }
221
222
223 /**
224 * Returns the number of rotation keys.
225 *
226 * @return the number of rotation keys
227 */
228 public int getNumRotKeys() {
229 return m_numRotKeys;
230 }
231
232
233 /**
234 * Returns the buffer with rotation keys of this animation channel.<p>
235 *
236 * Rotation keys consist of a time value (double) and a quaternion (4D
237 * vector of floats), resulting in a total of 24 bytes per entry. The
238 * buffer contains {@link #getNumRotKeys()} of these entries.<p>
239 *
240 * If there are rotation keys, there will also be at least one
241 * scaling and one position key.
242 *
243 * @return a native order, direct ByteBuffer
244 */
245 public ByteBuffer getRotKeyBuffer() {
246 ByteBuffer buf = m_rotKeys.duplicate();
247 buf.order(ByteOrder.nativeOrder());
248
249 return buf;
250 }
251
252
253 /**
254 * Returns the time component of the specified rotation key.
255 *
256 * @param keyIndex the index of the position key
257 * @return the time component
258 */
259 public double getRotKeyTime(int keyIndex) {
260 return m_rotKeys.getDouble(ROT_KEY_SIZE * keyIndex);
261 }
262
263
264 /**
265 * Returns the rotation w component of the specified rotation key.
266 *
267 * @param keyIndex the index of the position key
268 * @return the w component
269 */
270 public float getRotKeyW(int keyIndex) {
271 return m_rotKeys.getFloat(ROT_KEY_SIZE * keyIndex + 8);
272 }
273
274
275 /**
276 * Returns the rotation x component of the specified rotation key.
277 *
278 * @param keyIndex the index of the position key
279 * @return the x component
280 */
281 public float getRotKeyX(int keyIndex) {
282 return m_rotKeys.getFloat(ROT_KEY_SIZE * keyIndex + 12);
283 }
284
285
286 /**
287 * Returns the rotation y component of the specified rotation key.
288 *
289 * @param keyIndex the index of the position key
290 * @return the y component
291 */
292 public float getRotKeyY(int keyIndex) {
293 return m_rotKeys.getFloat(ROT_KEY_SIZE * keyIndex + 16);
294 }
295
296
297 /**
298 * Returns the rotation z component of the specified rotation key.
299 *
300 * @param keyIndex the index of the position key
301 * @return the z component
302 */
303 public float getRotKeyZ(int keyIndex) {
304 return m_rotKeys.getFloat(ROT_KEY_SIZE * keyIndex + 20);
305 }
306
307
308 /**
309 * Returns the rotation as quaternion.<p>
310 *
311 * This method is part of the wrapped API (see {@link AiWrapperProvider}
312 * for details on wrappers).<p>
313 *
314 * The built in behavior is to return an {@link AiQuaternion}.
315 *
316 * @param wrapperProvider the wrapper provider (used for type inference)
317 *
318 * @return the rotation as quaternion
319 */
320 public <V3, M4, C, N, Q> Q getRotKeyQuaternion(int keyIndex,
321 AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
322
323 return wrapperProvider.wrapQuaternion(m_rotKeys,
324 ROT_KEY_SIZE * keyIndex + 8);
325 }
326
327
328 /**
329 * Returns the number of scaling keys.
330 *
331 * @return the number of scaling keys
332 */
333 public int getNumScaleKeys() {
334 return m_numScaleKeys;
335 }
336
337
338 /**
339 * Returns the buffer with scaling keys of this animation channel.<p>
340 *
341 * Scaling keys consist of a time value (double) and a 3D vector of floats,
342 * resulting in a total of 24 bytes per entry with padding. The buffer
343 * contains {@link #getNumScaleKeys()} of these entries.<p>
344 *
345 * If there are scaling keys, there will also be at least one
346 * position and one rotation key.
347 *
348 * @return a native order, direct ByteBuffer
349 */
350 public ByteBuffer getScaleKeyBuffer() {
351 ByteBuffer buf = m_scaleKeys.duplicate();
352 buf.order(ByteOrder.nativeOrder());
353
354 return buf;
355 }
356
357
358 /**
359 * Returns the time component of the specified scaling key.
360 *
361 * @param keyIndex the index of the position key
362 * @return the time component
363 */
364 public double getScaleKeyTime(int keyIndex) {
365 return m_scaleKeys.getDouble(SCALE_KEY_SIZE * keyIndex);
366 }
367
368
369 /**
370 * Returns the scaling x component of the specified scaling key.
371 *
372 * @param keyIndex the index of the position key
373 * @return the x component
374 */
375 public float getScaleKeyX(int keyIndex) {
376 return m_scaleKeys.getFloat(SCALE_KEY_SIZE * keyIndex + 8);
377 }
378
379
380 /**
381 * Returns the scaling y component of the specified scaling key.
382 *
383 * @param keyIndex the index of the position key
384 * @return the y component
385 */
386 public float getScaleKeyY(int keyIndex) {
387 return m_scaleKeys.getFloat(SCALE_KEY_SIZE * keyIndex + 12);
388 }
389
390
391 /**
392 * Returns the scaling z component of the specified scaling key.
393 *
394 * @param keyIndex the index of the position key
395 * @return the z component
396 */
397 public float getScaleKeyZ(int keyIndex) {
398 return m_scaleKeys.getFloat(SCALE_KEY_SIZE * keyIndex + 16);
399 }
400
401
402 /**
403 * Returns the scaling factor as vector.<p>
404 *
405 * This method is part of the wrapped API (see {@link AiWrapperProvider}
406 * for details on wrappers).<p>
407 *
408 * The built in behavior is to return an {@link AiVector}.
409 *
410 * @param wrapperProvider the wrapper provider (used for type inference)
411 *
412 * @return the scaling factor as vector
413 */
414 public <V3, M4, C, N, Q> V3 getScaleKeyVector(int keyIndex,
415 AiWrapperProvider<V3, M4, C, N, Q> wrapperProvider) {
416
417 return wrapperProvider.wrapVector3f(m_scaleKeys,
418 SCALE_KEY_SIZE * keyIndex + 8, 3);
419 }
420
421
422 /**
423 * Defines how the animation behaves before the first key is encountered.
424 * <p>
425 *
426 * The default value is {@link AiAnimBehavior#DEFAULT} (the original
427 * transformation matrix of the affected node is used).
428 *
429 * @return the animation behavior before the first key
430 */
431 public AiAnimBehavior getPreState() {
432 return m_preState;
433 }
434
435
436 /**
437 * Defines how the animation behaves after the last key was processed.<p>
438 *
439 * The default value is {@link AiAnimBehavior#DEFAULT} (the original
440 * transformation matrix of the affected node is taken).
441 *
442 * @return the animation behavior before after the last key
443 */
444 public AiAnimBehavior getPostState() {
445 return m_postState;
446 }
447
448
449 /**
450 * Node name.
451 */
452 private final String m_nodeName;
453
454
455 /**
456 * Number of position keys.
457 */
458 private final int m_numPosKeys;
459
460
461 /**
462 * Buffer with position keys.
463 */
464 private ByteBuffer m_posKeys;
465
466
467 /**
468 * Number of rotation keys.
469 */
470 private final int m_numRotKeys;
471
472
473 /**
474 * Buffer for rotation keys.
475 */
476 private ByteBuffer m_rotKeys;
477
478
479 /**
480 * Number of scaling keys.
481 */
482 private final int m_numScaleKeys;
483
484
485 /**
486 * Buffer for scaling keys.
487 */
488 private ByteBuffer m_scaleKeys;
489
490
491 /**
492 * Pre animation behavior.
493 */
494 private final AiAnimBehavior m_preState;
495
496
497 /**
498 * Post animation behavior.
499 */
500 private final AiAnimBehavior m_postState;
501 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42 import java.util.Set;
43
44 /**
45 * Enumerates the post processing steps supported by assimp.
46 */
47 public enum AiPostProcessSteps {
48
49 /**
50 * Calculates the tangents and bitangents for the imported meshes.
51 * <p>
52 *
53 * Does nothing if a mesh does not have normals. You might want this post
54 * processing step to be executed if you plan to use tangent space
55 * calculations such as normal mapping applied to the meshes. There's a
56 * config setting, <tt>#AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE</tt>, which
57 * allows you to specify a maximum smoothing angle for the algorithm.
58 * However, usually you'll want to leave it at the default value.
59 */
60 CALC_TANGENT_SPACE(0x1),
61
62
63 /**
64 * Identifies and joins identical vertex data sets within all imported
65 * meshes.<p>
66 *
67 * After this step is run, each mesh contains unique vertices, so a vertex
68 * may be used by multiple faces. You usually want to use this post
69 * processing step. If your application deals with indexed geometry, this
70 * step is compulsory or you'll just waste rendering time. <b>If this flag
71 * is not specified</b>, no vertices are referenced by more than one face
72 * and <b>no index buffer is required</b> for rendering.
73 */
74 JOIN_IDENTICAL_VERTICES(0x2),
75
76
77 /**
78 * Converts all the imported data to a left-handed coordinate space.<p>
79 *
80 * By default the data is returned in a right-handed coordinate space (which
81 * OpenGL prefers). In this space, +X points to the right, +Z points towards
82 * the viewer, and +Y points upwards. In the DirectX coordinate space +X
83 * points to the right, +Y points upwards, and +Z points away from the
84 * viewer.<p>
85 *
86 * You'll probably want to consider this flag if you use Direct3D for
87 * rendering. The #ConvertToLeftHanded flag supersedes this
88 * setting and bundles all conversions typically required for D3D-based
89 * applications.
90 */
91 MAKE_LEFT_HANDED(0x4),
92
93
94 /**
95 * Triangulates all faces of all meshes.<p>
96 *
97 * By default the imported mesh data might contain faces with more than 3
98 * indices. For rendering you'll usually want all faces to be triangles.
99 * This post processing step splits up faces with more than 3 indices into
100 * triangles. Line and point primitives are *not* modified! If you want
101 * 'triangles only' with no other kinds of primitives, try the following
102 * solution:
103 * <ul>
104 * <li>Specify both #Triangulate and #SortByPType
105 * <li>Ignore all point and line meshes when you process assimp's output
106 * </ul>
107 */
108 TRIANGULATE(0x8),
109
110
111 /**
112 * Removes some parts of the data structure (animations, materials, light
113 * sources, cameras, textures, vertex components).<p>
114 *
115 * The components to be removed are specified in a separate configuration
116 * option, <tt>#AI_CONFIG_PP_RVC_FLAGS</tt>. This is quite useful if you
117 * don't need all parts of the output structure. Vertex colors are rarely
118 * used today for example... Calling this step to remove unneeded data from
119 * the pipeline as early as possible results in increased performance and a
120 * more optimized output data structure. This step is also useful if you
121 * want to force Assimp to recompute normals or tangents. The corresponding
122 * steps don't recompute them if they're already there (loaded from the
123 * source asset). By using this step you can make sure they are NOT there.
124 * <p>
125 *
126 * This flag is a poor one, mainly because its purpose is usually
127 * misunderstood. Consider the following case: a 3D model has been exported
128 * from a CAD app, and it has per-face vertex colors. Vertex positions can't
129 * be shared, thus the #JoinIdenticalVertices step fails to
130 * optimize the data because of these nasty little vertex colors. Most apps
131 * don't even process them, so it's all for nothing. By using this step,
132 * unneeded components are excluded as early as possible thus opening more
133 * room for internal optimizations.
134 */
135 REMOVE_COMPONENT(0x10),
136
137
138 /**
139 * Generates normals for all faces of all meshes.<p>
140 *
141 * This is ignored if normals are already there at the time this flag is
142 * evaluated. Model importers try to load them from the source file, so
143 * they're usually already there. Face normals are shared between all points
144 * of a single face, so a single point can have multiple normals, which
145 * forces the library to duplicate vertices in some cases.
146 * #JoinIdenticalVertices is *senseless* then.<p>
147 *
148 * This flag may not be specified together with {@link #GEN_SMOOTH_NORMALS}.
149 */
150 GEN_NORMALS(0x20),
151
152
153 /**
154 * Generates smooth normals for all vertices in the mesh.<p>
155 *
156 * This is ignored if normals are already there at the time this flag is
157 * evaluated. Model importers try to load them from the source file, so
158 * they're usually already there.<p>
159 *
160 * This flag may not be specified together with {@link #GEN_NORMALS}
161 * There's a configuration option,
162 * <tt>#AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE</tt> which allows you to
163 * specify an angle maximum for the normal smoothing algorithm. Normals
164 * exceeding this limit are not smoothed, resulting in a 'hard' seam between
165 * two faces. Using a decent angle here (e.g. 80 degrees) results in very
166 * good visual appearance.
167 */
168 GEN_SMOOTH_NORMALS(0x40),
169
170
171 /**
172 * Splits large meshes into smaller sub-meshes.<p>
173 *
174 * This is quite useful for real-time rendering, where the number of
175 * triangles which can be maximally processed in a single draw-call is
176 * limited by the video driver/hardware. The maximum vertex buffer is
177 * usually limited too. Both requirements can be met with this step: you may
178 * specify both a triangle and vertex limit for a single mesh.<p>
179 *
180 * The split limits can (and should!) be set through the
181 * <tt>#AI_CONFIG_PP_SLM_VERTEX_LIMIT</tt> and
182 * <tt>#AI_CONFIG_PP_SLM_TRIANGLE_LIMIT</tt> settings. The default values
183 * are <tt>#AI_SLM_DEFAULT_MAX_VERTICES</tt> and
184 * <tt>#AI_SLM_DEFAULT_MAX_TRIANGLES</tt>.<p>
185 *
186 * Note that splitting is generally a time-consuming task, but only if
187 * there's something to split. The use of this step is recommended for most
188 * users.
189 */
190 SPLIT_LARGE_MESHES(0x80),
191
192
193 /**
194 * Removes the node graph and pre-transforms all vertices with the local
195 * transformation matrices of their nodes.<p>
196 *
197 * The output scene still contains nodes, however there is only a root node
198 * with children, each one referencing only one mesh, and each mesh
199 * referencing one material. For rendering, you can simply render all meshes
200 * in order - you don't need to pay attention to local transformations and
201 * the node hierarchy. Animations are removed during this step. This step is
202 * intended for applications without a scenegraph. The step CAN cause some
203 * problems: if e.g. a mesh of the asset contains normals and another, using
204 * the same material index, does not, they will be brought together, but the
205 * first meshes's part of the normal list is zeroed. However, these
206 * artifacts are rare.<p>
207 *
208 * <b>Note:</b> The <tt>#AI_CONFIG_PP_PTV_NORMALIZE</tt> configuration
209 * property can be set to normalize the scene's spatial dimension to the
210 * -1...1 range.
211 */
212 PRE_TRANSFORM_VERTICES(0x100),
213
214
215 /**
216 * Limits the number of bones simultaneously affecting a single vertex to a
217 * maximum value.<p>
218 *
219 * If any vertex is affected by more than the maximum number of bones, the
220 * least important vertex weights are removed and the remaining vertex
221 * weights are renormalized so that the weights still sum up to 1. The
222 * default bone weight limit is 4 (defined as <tt>#AI_LMW_MAX_WEIGHTS</tt>
223 * in config.h), but you can use the <tt>#AI_CONFIG_PP_LBW_MAX_WEIGHTS</tt>
224 * setting to supply your own limit to the post processing step.<p>
225 *
226 * If you intend to perform the skinning in hardware, this post processing
227 * step might be of interest to you.
228 */
229 LIMIT_BONE_WEIGHTS(0x200),
230
231
232 /**
233 * Validates the imported scene data structure. This makes sure that all
234 * indices are valid, all animations and bones are linked correctly, all
235 * material references are correct .. etc.<p>
236 *
237 * It is recommended that you capture Assimp's log output if you use this
238 * flag, so you can easily find out what's wrong if a file fails the
239 * validation. The validator is quite strict and will find *all*
240 * inconsistencies in the data structure... It is recommended that plugin
241 * developers use it to debug their loaders. There are two types of
242 * validation failures:
243 * <ul>
244 * <li>Error: There's something wrong with the imported data. Further
245 * postprocessing is not possible and the data is not usable at all. The
246 * import fails. #Importer::GetErrorString() or #aiGetErrorString() carry
247 * the error message around.</li>
248 * <li>Warning: There are some minor issues (e.g. 1000000 animation
249 * keyframes with the same time), but further postprocessing and use of the
250 * data structure is still safe. Warning details are written to the log
251 * file, <tt>#AI_SCENE_FLAGS_VALIDATION_WARNING</tt> is set in
252 * #aiScene::mFlags</li>
253 * </ul>
254 *
255 * This post-processing step is not time-consuming. Its use is not
256 * compulsory, but recommended.
257 */
258 VALIDATE_DATA_STRUCTURE(0x400),
259
260
261 /**
262 * Reorders triangles for better vertex cache locality.<p>
263 *
264 * The step tries to improve the ACMR (average post-transform vertex cache
265 * miss ratio) for all meshes. The implementation runs in O(n) and is
266 * roughly based on the 'tipsify' algorithm (see <a href="
267 * http://www.cs.princeton.edu/gfx/pubs/Sander_2007_%3ETR/tipsy.pdf">this
268 * paper</a>).<p>
269 *
270 * If you intend to render huge models in hardware, this step might be of
271 * interest to you. The <tt>#AI_CONFIG_PP_ICL_PTCACHE_SIZE</tt>config
272 * setting can be used to fine-tune the cache optimization.
273 */
274 IMPROVE_CACHE_LOCALITY(0x800),
275
276
277 /**
278 * Searches for redundant/unreferenced materials and removes them.<p>
279 *
280 * This is especially useful in combination with the
281 * #PretransformVertices and #OptimizeMeshes flags. Both
282 * join small meshes with equal characteristics, but they can't do their
283 * work if two meshes have different materials. Because several material
284 * settings are lost during Assimp's import filters, (and because many
285 * exporters don't check for redundant materials), huge models often have
286 * materials which are are defined several times with exactly the same
287 * settings.<p>
288 *
289 * Several material settings not contributing to the final appearance of a
290 * surface are ignored in all comparisons (e.g. the material name). So, if
291 * you're passing additional information through the content pipeline
292 * (probably using *magic* material names), don't specify this flag.
293 * Alternatively take a look at the <tt>#AI_CONFIG_PP_RRM_EXCLUDE_LIST</tt>
294 * setting.
295 */
296 REMOVE_REDUNDANT_MATERIALS(0x1000),
297
298
299 /**
300 * This step tries to determine which meshes have normal vectors that are
301 * facing inwards and inverts them.<p>
302 *
303 * The algorithm is simple but effective: the bounding box of all vertices +
304 * their normals is compared against the volume of the bounding box of all
305 * vertices without their normals. This works well for most objects,
306 * problems might occur with planar surfaces. However, the step tries to
307 * filter such cases. The step inverts all in-facing normals. Generally it
308 * is recommended to enable this step, although the result is not always
309 * correct.
310 */
311 FIX_INFACING_NORMALS(0x2000),
312
313
314 /**
315 * This step splits meshes with more than one primitive type in homogeneous
316 * sub-meshes.<p>
317 *
318 * The step is executed after the triangulation step. After the step
319 * returns, just one bit is set in aiMesh::mPrimitiveTypes. This is
320 * especially useful for real-time rendering where point and line primitives
321 * are often ignored or rendered separately. You can use the
322 * <tt>#AI_CONFIG_PP_SBP_REMOVE</tt> option to specify which primitive types
323 * you need. This can be used to easily exclude lines and points, which are
324 * rarely used, from the import.
325 */
326 SORT_BY_PTYPE(0x8000),
327
328
329 /**
330 * This step searches all meshes for degenerate primitives and converts them
331 * to proper lines or points.<p>
332 *
333 * A face is 'degenerate' if one or more of its points are identical. To
334 * have the degenerate stuff not only detected and collapsed but removed,
335 * try one of the following procedures: <br>
336 * <b>1.</b> (if you support lines and points for rendering but don't want
337 * the degenerates)</br>
338 * <ul>
339 * <li>Specify the #FindDegenerates flag.</li>
340 * <li>Set the <tt>AI_CONFIG_PP_FD_REMOVE</tt> option to 1. This will cause
341 * the step to remove degenerate triangles from the import as soon as
342 * they're detected. They won't pass any further pipeline steps.</li>
343 * </ul>
344 * <br>
345 * <b>2.</b>(if you don't support lines and points at all)</br>
346 * <ul>
347 * <li>Specify the #FindDegenerates flag.
348 * <li>Specify the #SortByPType flag. This moves line and point
349 * primitives to separate meshes.
350 * <li>Set the <tt>AI_CONFIG_PP_SBP_REMOVE</tt> option to
351 * <code>aiPrimitiveType_POINTS | aiPrimitiveType_LINES</code>
352 * to cause SortByPType to reject point and line meshes from the
353 * scene.
354 * </ul>
355 * <b>Note:</b> Degenerated polygons are not necessarily evil and that's
356 * why they're not removed by default. There are several file formats
357 * which don't support lines or points, and some exporters bypass the
358 * format specification and write them as degenerate triangles instead.
359 */
360 FIND_DEGENERATES(0x10000),
361
362
363 /**
364 * This step searches all meshes for invalid data, such as zeroed normal
365 * vectors or invalid UV coords and removes/fixes them. This is intended to
366 * get rid of some common exporter errors.<p>
367 *
368 * This is especially useful for normals. If they are invalid, and the step
369 * recognizes this, they will be removed and can later be recomputed, i.e.
370 * by the {@link #GEN_SMOOTH_NORMALS} flag.<p>
371 *
372 * The step will also remove meshes that are infinitely small and reduce
373 * animation tracks consisting of hundreds if redundant keys to a single
374 * key. The <tt>AI_CONFIG_PP_FID_ANIM_ACCURACY</tt> config property decides
375 * the accuracy of the check for duplicate animation tracks.
376 */
377 FIND_INVALID_DATA(0x20000),
378
379
380 /**
381 * This step converts non-UV mappings (such as spherical or cylindrical
382 * mapping) to proper texture coordinate channels.<p>
383 *
384 * Most applications will support UV mapping only, so you will probably want
385 * to specify this step in every case. Note that Assimp is not always able
386 * to match the original mapping implementation of the 3D app which produced
387 * a model perfectly. It's always better to let the modelling app compute
388 * the UV channels - 3ds max, Maya, Blender, LightWave, and Modo do this for
389 * example.<p>
390 *
391 * <b>Note:</b> If this step is not requested, you'll need to process the
392 * <tt>MATKEY_MAPPING</tt> material property in order to display all
393 * assets properly.
394 */
395 GEN_UV_COORDS(0x40000),
396
397
398 /**
399 * This step applies per-texture UV transformations and bakes them into
400 * stand-alone vtexture coordinate channels.<p>
401 *
402 * UV transformations are specified per-texture - see the
403 * <tt>MATKEY_UVTRANSFORM</tt> material key for more information. This
404 * step processes all textures with transformed input UV coordinates and
405 * generates a new (pre-transformed) UV channel which replaces the old
406 * channel. Most applications won't support UV transformations, so you will
407 * probably want to specify this step.<p>
408 *
409 * <b>Note:</b> UV transformations are usually implemented in real-time
410 * apps by transforming texture coordinates at vertex shader stage with a
411 * 3x3 (homogenous) transformation matrix.
412 */
413 TRANSFORM_UV_COORDS(0x80000),
414
415
416 /**
417 * This step searches for duplicate meshes and replaces them with references
418 * to the first mesh.<p>
419 *
420 * This step takes a while, so don't use it if speed is a concern. Its main
421 * purpose is to workaround the fact that many export file formats don't
422 * support instanced meshes, so exporters need to duplicate meshes. This
423 * step removes the duplicates again. Please note that Assimp does not
424 * currently support per-node material assignment to meshes, which means
425 * that identical meshes with different materials are currently *not*
426 * joined, although this is planned for future versions.
427 */
428 FIND_INSTANCES(0x100000),
429
430
431 /**
432 * A postprocessing step to reduce the number of meshes.<p>
433 *
434 * This will, in fact, reduce the number of draw calls.<p>
435 *
436 * This is a very effective optimization and is recommended to be used
437 * together with #OptimizeGraph, if possible. The flag is fully
438 * compatible with both {@link #SPLIT_LARGE_MESHES} and
439 * {@link #SORT_BY_PTYPE}.
440 */
441 OPTIMIZE_MESHES(0x200000),
442
443
444 /**
445 * A postprocessing step to optimize the scene hierarchy.<p>
446 *
447 * Nodes without animations, bones, lights or cameras assigned are collapsed
448 * and joined.<p>
449 *
450 * Node names can be lost during this step. If you use special 'tag nodes'
451 * to pass additional information through your content pipeline, use the
452 * <tt>#AI_CONFIG_PP_OG_EXCLUDE_LIST</tt> setting to specify a list of node
453 * names you want to be kept. Nodes matching one of the names in this list
454 * won't be touched or modified.<p>
455 *
456 * Use this flag with caution. Most simple files will be collapsed to a
457 * single node, so complex hierarchies are usually completely lost. This is
458 * not useful for editor environments, but probably a very effective
459 * optimization if you just want to get the model data, convert it to your
460 * own format, and render it as fast as possible.<p>
461 *
462 * This flag is designed to be used with #OptimizeMeshes for best
463 * results.<p>
464 *
465 * <b>Note:</b> 'Crappy' scenes with thousands of extremely small meshes
466 * packed in deeply nested nodes exist for almost all file formats.
467 * {@link #OPTIMIZE_MESHES} in combination with {@link #OPTIMIZE_GRAPH}
468 * usually fixes them all and makes them renderable.
469 */
470 OPTIMIZE_GRAPH(0x400000),
471
472
473 /**
474 * This step flips all UV coordinates along the y-axis and adjusts material
475 * settings and bitangents accordingly.<p>
476 *
477 * <b>Output UV coordinate system:</b><br>
478 * <code><pre>
479 * 0y|0y ---------- 1x|0y
480 * | |
481 * | |
482 * | |
483 * 0x|1y ---------- 1x|1y
484 * </pre></code>
485 * <p>
486 *
487 * You'll probably want to consider this flag if you use Direct3D for
488 * rendering. The {@link #MAKE_LEFT_HANDED} flag supersedes this setting
489 * and bundles all conversions typically required for D3D-based
490 * applications.
491 */
492 FLIP_UVS(0x800000),
493
494
495 /**
496 * This step adjusts the output face winding order to be CW.<p>
497 *
498 * The default face winding order is counter clockwise (CCW).
499 *
500 * <b>Output face order:</b>
501 *
502 * <code><pre>
503 * x2
504 *
505 * x0
506 * x1
507 * </pre></code>
508 */
509 FLIP_WINDING_ORDER(0x1000000),
510
511
512 /**
513 * This step splits meshes with many bones into sub-meshes so that each
514 * sub-mesh has fewer or as many bones as a given limit.<p>
515 */
516 SPLIT_BY_BONE_COUNT(0x2000000),
517
518
519 /**
520 * This step removes bones losslessly or according to some threshold.<p>
521 *
522 * In some cases (i.e. formats that require it) exporters are forced to
523 * assign dummy bone weights to otherwise static meshes assigned to animated
524 * meshes. Full, weight-based skinning is expensive while animating nodes is
525 * extremely cheap, so this step is offered to clean up the data in that
526 * regard.<p>
527 *
528 * Use <tt>#AI_CONFIG_PP_DB_THRESHOLD</tt> to control this. Use
529 * <tt>#AI_CONFIG_PP_DB_ALL_OR_NONE</tt> if you want bones removed if and
530 * only if all bones within the scene qualify for removal.
531 */
532 DEBONE(0x4000000);
533
534
535 /**
536 * Utility method for converting to c/c++ based integer enums from java
537 * enums.<p>
538 *
539 * This method is intended to be used from JNI and my change based on
540 * implementation needs.
541 *
542 * @param set the set to convert
543 * @return an integer based enum value (as defined by assimp)
544 */
545 static long toRawValue(Set<AiPostProcessSteps> set) {
546 long rawValue = 0L;
547
548 for (AiPostProcessSteps step : set) {
549 rawValue |= step.m_rawValue;
550 }
551
552 return rawValue;
553 }
554
555
556 /**
557 * Constructor.
558 *
559 * @param rawValue maps java enum to c/c++ integer enum values
560 */
561 private AiPostProcessSteps(long rawValue) {
562 m_rawValue = rawValue;
563 }
564
565
566 /**
567 * The mapped c/c++ integer enum value.
568 */
569 private final long m_rawValue;
570 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42 import java.util.Set;
43
44
45 /**
46 * Enumerates the types of geometric primitives supported by Assimp.<p>
47 */
48 public enum AiPrimitiveType {
49 /**
50 * A point primitive.
51 */
52 POINT(0x1),
53
54
55 /**
56 * A line primitive.
57 */
58 LINE(0x2),
59
60
61 /**
62 * A triangular primitive.
63 */
64 TRIANGLE(0x4),
65
66
67 /**
68 * A higher-level polygon with more than 3 edges.<p>
69 *
70 * A triangle is a polygon, but polygon in this context means
71 * "all polygons that are not triangles". The "Triangulate"-Step is provided
72 * for your convenience, it splits all polygons in triangles (which are much
73 * easier to handle).
74 */
75 POLYGON(0x8);
76
77
78 /**
79 * Utility method for converting from c/c++ based integer enums to java
80 * enums.<p>
81 *
82 * This method is intended to be used from JNI and my change based on
83 * implementation needs.
84 *
85 * @param set the target set to fill
86 * @param rawValue an integer based enum value (as defined by assimp)
87 */
88 static void fromRawValue(Set<AiPrimitiveType> set, int rawValue) {
89
90 for (AiPrimitiveType type : AiPrimitiveType.values()) {
91 if ((type.m_rawValue & rawValue) != 0) {
92 set.add(type);
93 }
94 }
95 }
96
97
98 /**
99 * Constructor.
100 *
101 * @param rawValue maps java enum to c/c++ integer enum values
102 */
103 private AiPrimitiveType(int rawValue) {
104 m_rawValue = rawValue;
105 }
106
107
108 /**
109 * The mapped c/c++ integer enum value.
110 */
111 private final int m_rawValue;
112 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42 import java.nio.ByteBuffer;
43
44
45 /**
46 * Wrapper for a quaternion.<p>
47 *
48 * The wrapper is writable, i.e., changes performed via the set-methods will
49 * modify the underlying mesh/animation.
50 */
51 public final class AiQuaternion {
52 /**
53 * Constructor.
54 *
55 * @param buffer the buffer to wrap
56 * @param offset offset into buffer
57 */
58 public AiQuaternion(ByteBuffer buffer, int offset) {
59 if (null == buffer) {
60 throw new IllegalArgumentException("buffer may not be null");
61 }
62
63 m_buffer = buffer;
64 m_offset = offset;
65 }
66
67
68 /**
69 * Returns the x value.
70 *
71 * @return the x value
72 */
73 public float getX() {
74 return m_buffer.getFloat(m_offset + 4);
75 }
76
77
78 /**
79 * Returns the y value.
80 *
81 * @return the y value
82 */
83 public float getY() {
84 return m_buffer.getFloat(m_offset + 8);
85 }
86
87
88 /**
89 * Returns the z value.
90 *
91 * @return the z value
92 */
93 public float getZ() {
94 return m_buffer.getFloat(m_offset + 12);
95 }
96
97
98 /**
99 * Returns the w value.
100 *
101 * @return the w value
102 */
103 public float getW() {
104 return m_buffer.getFloat(m_offset);
105 }
106
107
108 /**
109 * Sets the x component.
110 *
111 * @param x the new value
112 */
113 public void setX(float x) {
114 m_buffer.putFloat(m_offset + 4, x);
115 }
116
117
118 /**
119 * Sets the y component.
120 *
121 * @param y the new value
122 */
123 public void setY(float y) {
124 m_buffer.putFloat(m_offset + 8, y);
125 }
126
127
128 /**
129 * Sets the z component.
130 *
131 * @param z the new value
132 */
133 public void setZ(float z) {
134 m_buffer.putFloat(m_offset + 12, z);
135 }
136
137
138 /**
139 * Sets the z component.
140 *
141 * @param w the new value
142 */
143 public void setW(float w) {
144 m_buffer.putFloat(m_offset, w);
145 }
146
147
148 @Override
149 public String toString() {
150 return "[" + getX() + ", " + getY() + ", " + getZ() + ", " +
151 getW() + "]";
152 }
153
154
155 /**
156 * Wrapped buffer.
157 */
158 private final ByteBuffer m_buffer;
159
160
161 /**
162 * Offset into m_buffer.
163 */
164 private final int m_offset;
165 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42 import java.util.ArrayList;
43 import java.util.List;
44
45
46 /**
47 * The root structure of the imported data.<p>
48 *
49 * Everything that was imported from the given file can be accessed from here.
50 * <p>
51 * Jassimp copies all data into "java memory" during import and frees
52 * resources allocated by native code after scene loading is completed. No
53 * special care has to be taken for freeing resources, unreferenced jassimp
54 * objects (including the scene itself) are eligible to garbage collection like
55 * any other java object.
56 */
57 public final class AiScene {
58 /**
59 * Constructor.
60 */
61 AiScene() {
62 /* nothing to do */
63 }
64
65
66 /**
67 * Returns the number of meshes contained in the scene.<p>
68 *
69 * This method is provided for completeness reasons. It will return the
70 * same value as <code>getMeshes().size()</code>
71 *
72 * @return the number of meshes
73 */
74 public int getNumMeshes() {
75 return m_meshes.size();
76 }
77
78
79 /**
80 * Returns the meshes contained in the scene.<p>
81 *
82 * If there are no meshes in the scene, an empty collection is returned
83 *
84 * @return the list of meshes
85 */
86 public List<AiMesh> getMeshes() {
87 return m_meshes;
88 }
89
90
91 /**
92 * Returns the number of materials in the scene.<p>
93 *
94 * This method is provided for completeness reasons. It will return the
95 * same value as <code>getMaterials().size()</code>
96 *
97 * @return the number of materials
98 */
99 public int getNumMaterials() {
100 return m_materials.size();
101 }
102
103
104 /**
105 * Returns the list of materials.<p>
106 *
107 * Use the index given in each aiMesh structure to access this
108 * array. If the {@link AiSceneFlag#INCOMPLETE} flag is not set there will
109 * always be at least ONE material.
110 *
111 * @return the list of materials
112 */
113 public List<AiMaterial> getMaterials() {
114 return m_materials;
115 }
116
117
118 /**
119 * Returns the number of animations in the scene.<p>
120 *
121 * This method is provided for completeness reasons. It will return the
122 * same value as <code>getAnimations().size()</code>
123 *
124 * @return the number of materials
125 */
126 public int getNumAnimations() {
127 return m_animations.size();
128 }
129
130
131 /**
132 * Returns the list of animations.
133 *
134 * @return the list of animations
135 */
136 public List<AiAnimation> getAnimations() {
137 return m_animations;
138 }
139
140
141 /**
142 * Returns the number of light sources in the scene.<p>
143 *
144 * This method is provided for completeness reasons. It will return the
145 * same value as <code>getLights().size()</code>
146 *
147 * @return the number of lights
148 */
149 public int getNumLights() {
150 return m_lights.size();
151 }
152
153
154 /**
155 * Returns the list of light sources.<p>
156 *
157 * Light sources are fully optional, the returned list may be empty
158 *
159 * @return a possibly empty list of lights
160 */
161 public List<AiLight> getLights() {
162 return m_lights;
163 }
164
165
166 /**
167 * Returns the number of cameras in the scene.<p>
168 *
169 * This method is provided for completeness reasons. It will return the
170 * same value as <code>getCameras().size()</code>
171 *
172 * @return the number of cameras
173 */
174 public int getNumCameras() {
175 return m_cameras.size();
176 }
177
178
179 /**
180 * Returns the list of cameras.<p>
181 *
182 * Cameras are fully optional, the returned list may be empty
183 *
184 * @return a possibly empty list of cameras
185 */
186 public List<AiCamera> getCameras() {
187 return m_cameras;
188 }
189
190
191 /**
192 * Returns the scene graph root.
193 *
194 * This method is part of the wrapped API (see {@link AiWrapperProvider}
195 * for details on wrappers).<p>
196 *
197 * The built-in behavior is to return a {@link AiVector}.
198 *
199 * @param wrapperProvider the wrapper provider (used for type inference)
200 * @return the scene graph root
201 */
202 @SuppressWarnings("unchecked")
203 public <V3, M4, C, N, Q> N getSceneRoot(AiWrapperProvider<V3, M4, C, N, Q>
204 wrapperProvider) {
205
206 return (N) m_sceneRoot;
207 }
208
209
210 @Override
211 public String toString() {
212 return "AiScene (" + m_meshes.size() + " mesh/es)";
213 }
214
215
216 /**
217 * Meshes.
218 */
219 private final List<AiMesh> m_meshes = new ArrayList<AiMesh>();
220
221
222 /**
223 * Materials.
224 */
225 private final List<AiMaterial> m_materials = new ArrayList<AiMaterial>();
226
227
228 /**
229 * Animations.
230 */
231 private final List<AiAnimation> m_animations = new ArrayList<AiAnimation>();
232
233
234 /**
235 * Lights.
236 */
237 private final List<AiLight> m_lights = new ArrayList<AiLight>();
238
239
240 /**
241 * Cameras.
242 */
243 private final List<AiCamera> m_cameras = new ArrayList<AiCamera>();
244
245
246 /**
247 * Scene graph root.
248 */
249 private Object m_sceneRoot;
250 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42 import java.util.Set;
43
44
45 /**
46 * Status flags for {@link AiScene}s.
47 */
48 public enum AiSceneFlag {
49 /**
50 * Specifies that the scene data structure that was imported is not
51 * complete.<p>
52 *
53 * This flag bypasses some internal validations and allows the import
54 * of animation skeletons, material libraries or camera animation paths
55 * using Assimp. Most applications won't support such data.
56 */
57 INCOMPLETE(0x1),
58
59
60 /**
61 * This flag is set by the validation
62 * ({@link AiPostProcessSteps#VALIDATE_DATA_STRUCTURE
63 * VALIDATE_DATA_STRUCTURE})
64 * postprocess-step if the validation is successful.<p>
65 *
66 * In a validated scene you can be sure that any cross references in the
67 * data structure (e.g. vertex indices) are valid.
68 */
69 VALIDATED(0x2),
70
71
72 /**
73 * * This flag is set by the validation
74 * ({@link AiPostProcessSteps#VALIDATE_DATA_STRUCTURE
75 * VALIDATE_DATA_STRUCTURE})
76 * postprocess-step if the validation is successful but some issues have
77 * been found.<p>
78 *
79 * This can for example mean that a texture that does not exist is
80 * referenced by a material or that the bone weights for a vertex don't sum
81 * to 1.0 ... . In most cases you should still be able to use the import.
82 * This flag could be useful for applications which don't capture Assimp's
83 * log output.
84 */
85 VALIDATION_WARNING(0x4),
86
87
88 /**
89 * This flag is currently only set by the
90 * {@link jassimp.AiPostProcessSteps#JOIN_IDENTICAL_VERTICES
91 * JOIN_IDENTICAL_VERTICES}.<p>
92 *
93 * It indicates that the vertices of the output meshes aren't in the
94 * internal verbose format anymore. In the verbose format all vertices are
95 * unique, no vertex is ever referenced by more than one face.
96 */
97 NON_VERBOSE_FORMAT(0x8),
98
99
100 /**
101 * Denotes pure height-map terrain data.<p>
102 *
103 * Pure terrains usually consist of quads, sometimes triangles, in a
104 * regular grid. The x,y coordinates of all vertex positions refer to the
105 * x,y coordinates on the terrain height map, the z-axis stores the
106 * elevation at a specific point.<p>
107 *
108 * TER (Terragen) and HMP (3D Game Studio) are height map formats.
109 * <p>
110 * Assimp is probably not the best choice for loading *huge* terrains -
111 * fully triangulated data takes extremely much free store and should be
112 * avoided as long as possible (typically you'll do the triangulation when
113 * you actually need to render it).
114 */
115 TERRAIN(0x10);
116
117
118 /**
119 * Utility method for converting from c/c++ based integer enums to java
120 * enums.<p>
121 *
122 * This method is intended to be used from JNI and my change based on
123 * implementation needs.
124 *
125 * @param set the target set to fill
126 * @param rawValue an integer based enum value (as defined by assimp)
127 */
128 static void fromRawValue(Set<AiSceneFlag> set, int rawValue) {
129
130 for (AiSceneFlag type : AiSceneFlag.values()) {
131 if ((type.m_rawValue & rawValue) != 0) {
132 set.add(type);
133 }
134 }
135 }
136
137
138 /**
139 * Constructor.
140 *
141 * @param rawValue maps java enum to c/c++ integer enum values
142 */
143 private AiSceneFlag(int rawValue) {
144 m_rawValue = rawValue;
145 }
146
147
148 /**
149 * The mapped c/c++ integer enum value.
150 */
151 private final int m_rawValue;
152 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42
43 /**
44 * Defines all shading modes supported by the library.<p>
45 *
46 * The list of shading modes has been taken from Blender.
47 * See Blender documentation for more information. The API does
48 * not distinguish between "specular" and "diffuse" shaders (thus the
49 * specular term for diffuse shading models like Oren-Nayar remains
50 * undefined).<p>
51 * Again, this value is just a hint. Assimp tries to select the shader whose
52 * most common implementation matches the original rendering results of the
53 * 3D modeller which wrote a particular model as closely as possible.
54 */
55 public enum AiShadingMode {
56 /**
57 * Flat shading.<p>
58 *
59 * Shading is done on per-face base, diffuse only. Also known as
60 * 'faceted shading'.
61 */
62 FLAT(0x1),
63
64
65 /**
66 * Simple Gouraud shading.
67 */
68 GOURAUD(0x2),
69
70
71 /**
72 * Phong-Shading.
73 */
74 PHONG(0x3),
75
76
77 /**
78 * Phong-Blinn-Shading.
79 */
80 BLINN(0x4),
81
82
83 /**
84 * Toon-Shading per pixel.<p>
85 *
86 * Also known as 'comic' shader.
87 */
88 TOON(0x5),
89
90
91 /**
92 * OrenNayar-Shading per pixel.<p>
93 *
94 * Extension to standard Lambertian shading, taking the roughness of the
95 * material into account
96 */
97 OREN_NAYAR(0x6),
98
99
100 /**
101 * Minnaert-Shading per pixel.<p>
102 *
103 * Extension to standard Lambertian shading, taking the "darkness" of the
104 * material into account
105 */
106 MINNAERT(0x7),
107
108
109 /**
110 * CookTorrance-Shading per pixel.<p>
111 *
112 * Special shader for metallic surfaces.
113 */
114 COOK_TORRANCE(0x8),
115
116
117 /**
118 * No shading at all.<p>
119 *
120 * Constant light influence of 1.0.
121 */
122 NO_SHADING(0x9),
123
124
125 /**
126 * Fresnel shading.
127 */
128 FRESNEL(0xa);
129
130
131 /**
132 * Utility method for converting from c/c++ based integer enums to java
133 * enums.<p>
134 *
135 * This method is intended to be used from JNI and my change based on
136 * implementation needs.
137 *
138 * @param rawValue an integer based enum value (as defined by assimp)
139 * @return the enum value corresponding to rawValue
140 */
141 static AiShadingMode fromRawValue(int rawValue) {
142 for (AiShadingMode type : AiShadingMode.values()) {
143 if (type.m_rawValue == rawValue) {
144 return type;
145 }
146 }
147
148 throw new IllegalArgumentException("unexptected raw value: " +
149 rawValue);
150 }
151
152
153 /**
154 * Constructor.
155 *
156 * @param rawValue maps java enum to c/c++ integer enum values
157 */
158 private AiShadingMode(int rawValue) {
159 m_rawValue = rawValue;
160 }
161
162
163 /**
164 * The mapped c/c++ integer enum value.
165 */
166 private final int m_rawValue;
167 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42
43 /**
44 * Data structure for texture related material properties.
45 */
46 public final class AiTextureInfo {
47
48 /**
49 * Constructor.
50 *
51 * @param type type
52 * @param index index
53 * @param file file
54 * @param uvIndex uv index
55 * @param blend blend factor
56 * @param texOp texture operation
57 * @param mmU map mode for u axis
58 * @param mmV map mode for v axis
59 * @param mmW map mode for w axis
60 */
61 AiTextureInfo(AiTextureType type, int index, String file,
62 int uvIndex, float blend, AiTextureOp texOp, AiTextureMapMode mmU,
63 AiTextureMapMode mmV, AiTextureMapMode mmW) {
64
65 m_type = type;
66 m_index = index;
67 m_file = file;
68 m_uvIndex = uvIndex;
69 m_blend = blend;
70 m_textureOp = texOp;
71 m_textureMapModeU = mmU;
72 m_textureMapModeV = mmV;
73 m_textureMapModeW = mmW;
74 }
75
76
77 /**
78 * Specifies the type of the texture (e.g. diffuse, specular, ...).
79 *
80 * @return the type.
81 */
82 public AiTextureType getType() {
83 return m_type;
84 }
85
86
87 /**
88 * Index of the texture in the texture stack.<p>
89 *
90 * Each type maintains a stack of textures, i.e., there may be a diffuse.0,
91 * a diffuse.1, etc
92 *
93 * @return the index
94 */
95 public int getIndex() {
96 return m_index;
97 }
98
99
100 /**
101 * Returns the path to the texture file.
102 *
103 * @return the path
104 */
105 public String getFile() {
106 return m_file;
107 }
108
109
110 /**
111 * Returns the index of the UV coordinate set.
112 *
113 * @return the uv index
114 */
115 public int getUVIndex() {
116 return m_uvIndex;
117 }
118
119
120 /**
121 * Returns the blend factor.
122 *
123 * @return the blend factor
124 */
125 public float getBlend() {
126 return m_blend;
127 }
128
129
130 /**
131 * Returns the texture operation used to combine this texture and the
132 * preceding texture in the stack.
133 *
134 * @return the texture operation
135 */
136 public AiTextureOp getTextureOp() {
137 return m_textureOp;
138 }
139
140
141 /**
142 * Returns the texture map mode for U texture axis.
143 *
144 * @return the texture map mode
145 */
146 public AiTextureMapMode getTextureMapModeU() {
147 return m_textureMapModeU;
148 }
149
150
151 /**
152 * Returns the texture map mode for V texture axis.
153 *
154 * @return the texture map mode
155 */
156 public AiTextureMapMode getTextureMapModeV() {
157 return m_textureMapModeV;
158 }
159
160
161 /**
162 * Returns the texture map mode for W texture axis.
163 *
164 * @return the texture map mode
165 */
166 public AiTextureMapMode getTextureMapModeW() {
167 return m_textureMapModeW;
168 }
169
170
171 /**
172 * Type.
173 */
174 private final AiTextureType m_type;
175
176
177 /**
178 * Index.
179 */
180 private final int m_index;
181
182
183 /**
184 * Path.
185 */
186 private final String m_file;
187
188
189 /**
190 * UV index.
191 */
192 private final int m_uvIndex;
193
194
195 /**
196 * Blend factor.
197 */
198 private final float m_blend;
199
200
201 /**
202 * Texture operation.
203 */
204 private final AiTextureOp m_textureOp;
205
206
207 /**
208 * Map mode U axis.
209 */
210 private final AiTextureMapMode m_textureMapModeU;
211
212
213 /**
214 * Map mode V axis.
215 */
216 private final AiTextureMapMode m_textureMapModeV;
217
218
219 /**
220 * Map mode W axis.
221 */
222 private final AiTextureMapMode m_textureMapModeW;
223 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42
43 /**
44 * Defines how UV coordinates outside the [0...1] range are handled.<p>
45 *
46 * Commonly refered to as 'wrapping mode'.
47 */
48 public enum AiTextureMapMode {
49 /**
50 * A texture coordinate u|v is translated to u%1|v%1.
51 */
52 WRAP(0x0),
53
54
55 /**
56 * Texture coordinates outside [0...1] are clamped to the nearest
57 * valid value.
58 */
59 CLAMP(0x1),
60
61
62 /**
63 * A texture coordinate u|v becomes u%1|v%1 if (u-(u%1))%2 is zero and
64 * 1-(u%1)|1-(v%1) otherwise.
65 */
66 MIRROR(0x2),
67
68
69 /**
70 * If the texture coordinates for a pixel are outside [0...1] the texture
71 * is not applied to that pixel.
72 */
73 DECAL(0x3);
74
75
76 /**
77 * Utility method for converting from c/c++ based integer enums to java
78 * enums.<p>
79 *
80 * This method is intended to be used from JNI and my change based on
81 * implementation needs.
82 *
83 * @param rawValue an integer based enum value (as defined by assimp)
84 * @return the enum value corresponding to rawValue
85 */
86 static AiTextureMapMode fromRawValue(int rawValue) {
87 for (AiTextureMapMode type : AiTextureMapMode.values()) {
88 if (type.m_rawValue == rawValue) {
89 return type;
90 }
91 }
92
93 throw new IllegalArgumentException("unexptected raw value: " +
94 rawValue);
95 }
96
97
98 /**
99 * Constructor.
100 *
101 * @param rawValue maps java enum to c/c++ integer enum values
102 */
103 private AiTextureMapMode(int rawValue) {
104 m_rawValue = rawValue;
105 }
106
107
108 /**
109 * The mapped c/c++ integer enum value.
110 */
111 private final int m_rawValue;
112 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42
43 /**
44 * Defines how the mapping coords for a texture are generated.<p>
45 *
46 * Real-time applications typically require full UV coordinates, so the use of
47 * the {@link AiPostProcessSteps#GEN_UV_COORDS} step is highly recommended.
48 * It generates proper UV channels for non-UV mapped objects, as long as an
49 * accurate description how the mapping should look like (e.g spherical) is
50 * given.
51 */
52 public enum AiTextureMapping {
53 /**
54 * The mapping coordinates are taken from an UV channel.
55 *
56 * The #AI_MATKEY_UVWSRC key specifies from which UV channel
57 * the texture coordinates are to be taken from (remember,
58 * meshes can have more than one UV channel).
59 */
60 // aiTextureMapping_UV = 0x0,
61 //
62 // /** Spherical mapping */
63 // aiTextureMapping_SPHERE = 0x1,
64 //
65 // /** Cylindrical mapping */
66 // aiTextureMapping_CYLINDER = 0x2,
67 //
68 // /** Cubic mapping */
69 // aiTextureMapping_BOX = 0x3,
70 //
71 // /** Planar mapping */
72 // aiTextureMapping_PLANE = 0x4,
73 //
74 // /** Undefined mapping. Have fun. */
75 // aiTextureMapping_OTHER = 0x5,
76
77 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42
43 /**
44 * Defines how the Nth texture of a specific type is combined with the result
45 * of all previous layers.<p>
46 *
47 * Example (left: key, right: value): <br>
48 * <code><pre>
49 * DiffColor0 - gray
50 * DiffTextureOp0 - aiTextureOpMultiply
51 * DiffTexture0 - tex1.png
52 * DiffTextureOp0 - aiTextureOpAdd
53 * DiffTexture1 - tex2.png
54 * </pre></code>
55 *
56 * Written as equation, the final diffuse term for a specific pixel would be:
57 * <code><pre>
58 * diffFinal = DiffColor0 * sampleTex(DiffTexture0,UV0) +
59 * sampleTex(DiffTexture1,UV0) * diffContrib;
60 * </pre></code>
61 * where 'diffContrib' is the intensity of the incoming light for that pixel.
62 */
63 public enum AiTextureOp {
64 /**
65 * <code>T = T1 * T2</code>.
66 */
67 MULTIPLY(0x0),
68
69
70 /**
71 * <code>T = T1 + T2</code>.
72 */
73 ADD(0x1),
74
75
76 /**
77 * <code>T = T1 - T2</code>.
78 */
79 SUBTRACT(0x2),
80
81
82 /**
83 * <code>T = T1 / T2</code>.
84 */
85 DIVIDE(0x3),
86
87
88 /**
89 * <code>T = (T1 + T2) - (T1 * T2)</code> .
90 */
91 SMOOTH_ADD(0x4),
92
93
94 /**
95 * <code>T = T1 + (T2-0.5)</code>.
96 */
97 SIGNED_ADD(0x5);
98
99
100 /**
101 * Utility method for converting from c/c++ based integer enums to java
102 * enums.<p>
103 *
104 * This method is intended to be used from JNI and my change based on
105 * implementation needs.
106 *
107 * @param rawValue an integer based enum value (as defined by assimp)
108 * @return the enum value corresponding to rawValue
109 */
110 static AiTextureOp fromRawValue(int rawValue) {
111 for (AiTextureOp type : AiTextureOp.values()) {
112 if (type.m_rawValue == rawValue) {
113 return type;
114 }
115 }
116
117 throw new IllegalArgumentException("unexptected raw value: " +
118 rawValue);
119 }
120
121
122 /**
123 * Constructor.
124 *
125 * @param rawValue maps java enum to c/c++ integer enum values
126 */
127 private AiTextureOp(int rawValue) {
128 m_rawValue = rawValue;
129 }
130
131
132 /**
133 * The mapped c/c++ integer enum value.
134 */
135 private final int m_rawValue;
136 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42 /**
43 * Defines the purpose of a texture.<p>
44 *
45 * This is a very difficult topic. Different 3D packages support different
46 * kinds of textures. For very common texture types, such as bumpmaps, the
47 * rendering results depend on implementation details in the rendering
48 * pipelines of these applications. Assimp loads all texture references from
49 * the model file and tries to determine which of the predefined texture
50 * types below is the best choice to match the original use of the texture
51 * as closely as possible.<p>
52 *
53 * In content pipelines you'll usually define how textures have to be handled,
54 * and the artists working on models have to conform to this specification,
55 * regardless which 3D tool they're using.
56 */
57 public enum AiTextureType {
58 /**
59 * The texture is combined with the result of the diffuse
60 * lighting equation.
61 */
62 DIFFUSE(0x1),
63
64
65 /**
66 * The texture is combined with the result of the specular
67 * lighting equation.
68 */
69 SPECULAR(0x2),
70
71
72 /**
73 * The texture is combined with the result of the ambient
74 * lighting equation.
75 */
76 AMBIENT(0x3),
77
78
79 /**
80 * The texture is added to the result of the lighting
81 * calculation. It isn't influenced by incoming light.
82 */
83 EMISSIVE(0x4),
84
85
86 /**
87 * The texture is a height map.<p>
88 *
89 * By convention, higher gray-scale values stand for
90 * higher elevations from the base height.
91 */
92 HEIGHT(0x5),
93
94
95 /**
96 * The texture is a (tangent space) normal-map.<p>
97 *
98 * Again, there are several conventions for tangent-space
99 * normal maps. Assimp does (intentionally) not distinguish here.
100 */
101 NORMALS(0x6),
102
103
104 /**
105 * The texture defines the glossiness of the material.<p>
106 *
107 * The glossiness is in fact the exponent of the specular
108 * (phong) lighting equation. Usually there is a conversion
109 * function defined to map the linear color values in the
110 * texture to a suitable exponent. Have fun.
111 */
112 SHININESS(0x7),
113
114
115 /**
116 * The texture defines per-pixel opacity.<p>
117 *
118 * Usually 'white' means opaque and 'black' means
119 * 'transparency'. Or quite the opposite. Have fun.
120 */
121 OPACITY(0x8),
122
123
124 /**
125 * Displacement texture.<p>
126 *
127 * The exact purpose and format is application-dependent.
128 * Higher color values stand for higher vertex displacements.
129 */
130 DISPLACEMENT(0x9),
131
132
133 /**
134 * Lightmap texture (aka Ambient Occlusion).<p>
135 *
136 * Both 'Lightmaps' and dedicated 'ambient occlusion maps' are
137 * covered by this material property. The texture contains a
138 * scaling value for the final color value of a pixel. Its
139 * intensity is not affected by incoming light.
140 */
141 LIGHTMAP(0xA),
142
143
144 /**
145 * Reflection texture.<p>
146 *
147 * Contains the color of a perfect mirror reflection.
148 * Rarely used, almost never for real-time applications.
149 */
150 REFLECTION(0xB),
151
152
153 /**
154 * Unknown texture.<p>
155 *
156 * A texture reference that does not match any of the definitions
157 * above is considered to be 'unknown'. It is still imported,
158 * but is excluded from any further postprocessing.
159 */
160 UNKNOWN(0xC);
161
162
163 /**
164 * Utility method for converting from c/c++ based integer enums to java
165 * enums.<p>
166 *
167 * This method is intended to be used from JNI and my change based on
168 * implementation needs.
169 *
170 * @param rawValue an integer based enum value (as defined by assimp)
171 * @return the enum value corresponding to rawValue
172 */
173 static AiTextureType fromRawValue(int rawValue) {
174 for (AiTextureType type : AiTextureType.values()) {
175 if (type.m_rawValue == rawValue) {
176 return type;
177 }
178 }
179
180 throw new IllegalArgumentException("unexptected raw value: " +
181 rawValue);
182 }
183
184
185 /**
186 * Utility method for converting from java enums to c/c++ based integer
187 * enums.<p>
188 *
189 * @param type the type to convert, may not be null
190 * @return the rawValue corresponding to type
191 */
192 static int toRawValue(AiTextureType type) {
193 return type.m_rawValue;
194 }
195
196
197 /**
198 * Constructor.
199 *
200 * @param rawValue maps java enum to c/c++ integer enum values
201 */
202 private AiTextureType(int rawValue) {
203 m_rawValue = rawValue;
204 }
205
206
207 /**
208 * The mapped c/c++ integer enum value.
209 */
210 private final int m_rawValue;
211 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42 import java.nio.ByteBuffer;
43
44
45 /**
46 * Wrapper for 3-dimensional vectors.<p>
47 *
48 * This wrapper is also used to represent 1- and 2-dimensional vectors. In
49 * these cases only the x (or the x and y coordinate) will be used.
50 * Accessing unused components will throw UnsupportedOperationExceptions.<p>
51 *
52 * The wrapper is writable, i.e., changes performed via the set-methods will
53 * modify the underlying mesh.
54 */
55 public final class AiVector {
56 /**
57 * Constructor.
58 *
59 * @param buffer the buffer to wrap
60 * @param offset offset into buffer
61 * @param numComponents number vector of components
62 */
63 public AiVector(ByteBuffer buffer, int offset, int numComponents) {
64 if (null == buffer) {
65 throw new IllegalArgumentException("buffer may not be null");
66 }
67
68 m_buffer = buffer;
69 m_offset = offset;
70 m_numComponents = numComponents;
71 }
72
73
74 /**
75 * Returns the x value.
76 *
77 * @return the x value
78 */
79 public float getX() {
80 return m_buffer.getFloat(m_offset);
81 }
82
83
84 /**
85 * Returns the y value.<p>
86 *
87 * May only be called on 2- or 3-dimensional vectors.
88 *
89 * @return the y value
90 */
91 public float getY() {
92 if (m_numComponents <= 1) {
93 throw new UnsupportedOperationException(
94 "vector has only 1 component");
95 }
96
97 return m_buffer.getFloat(m_offset + 4);
98 }
99
100
101 /**
102 * Returns the z value.<p>
103 *
104 * May only be called on 3-dimensional vectors.
105 *
106 * @return the z value
107 */
108 public float getZ() {
109 if (m_numComponents <= 2) {
110 throw new UnsupportedOperationException(
111 "vector has only 2 components");
112 }
113
114 return m_buffer.getFloat(m_offset + 8);
115 }
116
117
118 /**
119 * Sets the x component.
120 *
121 * @param x the new value
122 */
123 public void setX(float x) {
124 m_buffer.putFloat(m_offset, x);
125 }
126
127
128 /**
129 * Sets the y component.<p>
130 *
131 * May only be called on 2- or 3-dimensional vectors.
132 *
133 * @param y the new value
134 */
135 public void setY(float y) {
136 if (m_numComponents <= 1) {
137 throw new UnsupportedOperationException(
138 "vector has only 1 component");
139 }
140
141 m_buffer.putFloat(m_offset + 4, y);
142 }
143
144
145 /**
146 * Sets the z component.<p>
147 *
148 * May only be called on 3-dimensional vectors.
149 *
150 * @param z the new value
151 */
152 public void setZ(float z) {
153 if (m_numComponents <= 2) {
154 throw new UnsupportedOperationException(
155 "vector has only 2 components");
156 }
157
158 m_buffer.putFloat(m_offset + 8, z);
159 }
160
161
162 /**
163 * Returns the number of components in this vector.
164 *
165 * @return the number of components
166 */
167 public int getNumComponents() {
168 return m_numComponents;
169 }
170
171
172 @Override
173 public String toString() {
174 return "[" + getX() + ", " + getY() + ", " + getZ() + "]";
175 }
176
177
178 /**
179 * Wrapped buffer.
180 */
181 private final ByteBuffer m_buffer;
182
183
184 /**
185 * Offset into m_buffer.
186 */
187 private final int m_offset;
188
189
190 /**
191 * Number of components.
192 */
193 private final int m_numComponents;
194 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42 import java.nio.ByteBuffer;
43
44
45 /**
46 * Provides wrapper objects for raw data buffers.<p>
47 *
48 * It is likely that applications using Jassimp will already have a scene
49 * graph implementation and/ or the typical math related classes such as
50 * vectors, matrices, etc.<p>
51 *
52 * To ease the integration with existing code, Jassimp can be customized to
53 * represent the scene graph and compound data structures such as vectors and
54 * matrices with user supplied classes.<p>
55 *
56 * All methods returning wrapped objects rely on the AiWrapperProvider to
57 * create individual instances. Custom wrappers can be created by implementing
58 * AiWrapperProvider and registering the implementation via
59 * {@link Jassimp#setWrapperProvider(AiWrapperProvider)} <b>before</b> the
60 * scene is imported.<p>
61 *
62 * The methods returning wrapped types take an AiWrapperProvider instance. This
63 * instance must match the instance set via
64 * {@link Jassimp#setWrapperProvider(AiWrapperProvider)}. The method parameter
65 * is used to infer the type of the returned object. The passed in wrapper
66 * provider is not necessarily used to actually create the wrapped object, as
67 * the object may be cached for performance reasons. <b>It is not possible to
68 * use different AiWrapperProviders throughout the lifetime of an imported
69 * scene.</b>
70 *
71 * @param <V3> the type used to represent vectors
72 * @param <M4> the type used to represent matrices
73 * @param <C> the type used to represent colors
74 * @param <N> the type used to represent scene graph nodes
75 * @param <Q> the type used to represent quaternions
76 */
77 public interface AiWrapperProvider<V3, M4, C, N, Q> {
78 /**
79 * Wraps a vector.<p>
80 *
81 * Most vectors are 3-dimensional, i.e., with 3 components. The exception
82 * are texture coordinates, which may be 1- or 2-dimensional. A vector
83 * consists of numComponents floats (x,y,z) starting from offset
84 *
85 * @param buffer the buffer to wrap
86 * @param offset the offset into buffer
87 * @param numComponents the number of components
88 * @return the wrapped vector
89 */
90 V3 wrapVector3f(ByteBuffer buffer, int offset, int numComponents);
91
92
93 /**
94 * Wraps a 4x4 matrix of floats.<p>
95 *
96 * The calling code will allocate a new array for each invocation of this
97 * method. It is safe to store a reference to the passed in array and
98 * use the array to store the matrix data.
99 *
100 * @param data the matrix data in row-major order
101 * @return the wrapped matrix
102 */
103 M4 wrapMatrix4f(float[] data);
104
105
106 /**
107 * Wraps a RGBA color.<p>
108 *
109 * A color consists of 4 float values (r,g,b,a) starting from offset
110 *
111 * @param buffer the buffer to wrap
112 * @param offset the offset into buffer
113 * @return the wrapped color
114 */
115 C wrapColor(ByteBuffer buffer, int offset);
116
117
118 /**
119 * Wraps a scene graph node.<p>
120 *
121 * See {@link AiNode} for a description of the scene graph structure used
122 * by assimp.<p>
123 *
124 * The parent node is either null or an instance returned by this method.
125 * It is therefore safe to cast the passed in parent object to the
126 * implementation specific type
127 *
128 * @param parent the parent node
129 * @param matrix the transformation matrix
130 * @param meshReferences array of mesh references (indexes)
131 * @param name the name of the node
132 * @return the wrapped scene graph node
133 */
134 N wrapSceneNode(Object parent, Object matrix, int[] meshReferences,
135 String name);
136
137
138 /**
139 * Wraps a quaternion.<p>
140 *
141 * A quaternion consists of 4 float values (w,x,y,z) starting from offset
142 *
143 * @param buffer the buffer to wrap
144 * @param offset the offset into buffer
145 * @return the wrapped quaternion
146 */
147 Q wrapQuaternion(ByteBuffer buffer, int offset);
148 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42 import java.nio.ByteBuffer;
43
44
45 /**
46 * Debug/utility methods.
47 */
48 public final class JaiDebug {
49
50 /**
51 * Pure static class, no accessible constructor.
52 */
53 private JaiDebug() {
54 /* nothing to do */
55 }
56
57
58 /**
59 * Dumps vertex positions of a mesh to stdout.<p>
60 *
61 * @param mesh the mesh
62 */
63 public static void dumpPositions(AiMesh mesh) {
64 if (!mesh.hasPositions()) {
65 System.out.println("mesh has no vertex positions");
66 return;
67 }
68
69 for (int i = 0; i < mesh.getNumVertives(); i++) {
70 System.out.println("[" +
71 mesh.getPositionX(i) + ", " +
72 mesh.getPositionY(i) + ", " +
73 mesh.getPositionZ(i) + "]"
74 );
75 }
76 }
77
78
79 /**
80 * Dumps faces of a mesh to stdout.<p>
81 *
82 * @param mesh the mesh
83 */
84 public static void dumpFaces(AiMesh mesh) {
85 if (!mesh.hasFaces()) {
86 System.out.println("mesh has no faces");
87 return;
88 }
89
90 for (int face = 0; face < mesh.getNumFaces(); face++) {
91 int faceNumIndices = mesh.getFaceNumIndices(face);
92 System.out.print(faceNumIndices + ": ");
93
94 for (int vertex = 0; vertex < faceNumIndices; vertex++) {
95 int reference = mesh.getFaceVertex(face, vertex);
96
97 System.out.print("[" +
98 mesh.getPositionX(reference) + ", " +
99 mesh.getPositionY(reference) + ", " +
100 mesh.getPositionZ(reference) + "] "
101 );
102 }
103
104 System.out.println();
105 }
106 }
107
108
109 /**
110 * Dumps a vertex color set of a mesh to stdout.<p>
111 *
112 * @param mesh the mesh
113 * @param colorset the color set
114 */
115 public static void dumpColorset(AiMesh mesh, int colorset) {
116 if (!mesh.hasColors(colorset)) {
117 System.out.println("mesh has no vertex color set " + colorset);
118 return;
119 }
120
121 for (int i = 0; i < mesh.getNumVertives(); i++) {
122 System.out.println("[" +
123 mesh.getColorR(i, colorset) + ", " +
124 mesh.getColorG(i, colorset) + ", " +
125 mesh.getColorB(i, colorset) + ", " +
126 mesh.getColorA(i, colorset) + "]"
127 );
128 }
129 }
130
131
132 /**
133 * Dumps a texture coordinate set of a mesh to stdout.
134 *
135 * @param mesh the mesh
136 * @param coords the coordinates
137 */
138 public static void dumpTexCoords(AiMesh mesh, int coords) {
139 if (!mesh.hasTexCoords(coords)) {
140 System.out.println("mesh has no texture coordinate set " + coords);
141 return;
142 }
143
144 for (int i = 0; i < mesh.getNumVertives(); i++) {
145 int numComponents = mesh.getNumUVComponents(coords);
146 System.out.print("[" + mesh.getTexCoordU(i, coords));
147
148 if (numComponents > 1) {
149 System.out.print(", " + mesh.getTexCoordV(i, coords));
150 }
151
152 if (numComponents > 2) {
153 System.out.print(", " + mesh.getTexCoordW(i, coords));
154 }
155
156 System.out.println("]");
157 }
158 }
159
160
161 /**
162 * Dumps a single material property to stdout.
163 *
164 * @param property the property
165 */
166 public static void dumpMaterialProperty(AiMaterial.Property property) {
167 System.out.print(property.getKey() + " " + property.getSemantic() +
168 " " + property.getIndex() + ": ");
169 Object data = property.getData();
170
171 if (data instanceof ByteBuffer) {
172 ByteBuffer buf = (ByteBuffer) data;
173 for (int i = 0; i < buf.capacity(); i++) {
174 System.out.print(Integer.toHexString(buf.get(i) & 0xFF) + " ");
175 }
176
177 System.out.println();
178 }
179 else {
180 System.out.println(data.toString());
181 }
182 }
183
184
185 /**
186 * Dumps all properties of a material to stdout.
187 *
188 * @param material the material
189 */
190 public static void dumpMaterial(AiMaterial material) {
191 for (AiMaterial.Property prop : material.getProperties()) {
192 dumpMaterialProperty(prop);
193 }
194 }
195
196
197 /**
198 * Dumps an animation channel to stdout.
199 *
200 * @param nodeAnim the channel
201 */
202 public static void dumpNodeAnim(AiNodeAnim nodeAnim) {
203 for (int i = 0; i < nodeAnim.getNumPosKeys(); i++) {
204 System.out.println(i + ": " + nodeAnim.getPosKeyTime(i) +
205 " ticks, " + nodeAnim.getPosKeyVector(i, Jassimp.BUILTIN));
206 }
207 }
208 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42 import java.io.IOException;
43 import java.nio.ByteBuffer;
44 import java.util.EnumSet;
45 import java.util.Set;
46
47
48
49 /**
50 * Entry point to the jassimp library.<p>
51 *
52 * Use {@link #importFile(String, Set)} to load a file.
53 *
54 * <h3>General Notes and Pitfalls</h3>
55 * Due to the loading via JNI, strings (for example as returned by the
56 * <code>getName()</code> methods) are not interned. You should therefore
57 * compare strings the way it should be done, i.e, via <code>equals()</code>.
58 * Pointer comparison will fail.
59 */
60 public final class Jassimp {
61
62 /**
63 * The default wrapper provider using built in types.
64 */
65 public static final AiWrapperProvider<?, ?, ?, ?, ?> BUILTIN =
66 new AiBuiltInWrapperProvider();
67
68
69 /**
70 * Imports a file via assimp without post processing.
71 *
72 * @param filename the file to import
73 * @return the loaded scene
74 * @throws IOException if an error occurs
75 */
76 public static AiScene importFile(String filename) throws IOException {
77
78 return importFile(filename, EnumSet.noneOf(AiPostProcessSteps.class));
79 }
80
81
82 /**
83 * Imports a file via assimp.
84 *
85 * @param filename the file to import
86 * @param postProcessing post processing flags
87 * @return the loaded scene, or null if an error occurred
88 * @throws IOException if an error occurs
89 */
90 public static AiScene importFile(String filename,
91 Set<AiPostProcessSteps> postProcessing) throws IOException {
92
93 return aiImportFile(filename, AiPostProcessSteps.toRawValue(
94 postProcessing));
95 }
96
97
98 /**
99 * Returns a human readable error description.<p>
100 *
101 * This method can be called when one of the import methods fails, i.e.,
102 * throws an exception, to get a human readable error description.
103 *
104 * @return the error string
105 */
106 public static native String getErrorString();
107
108
109 /**
110 * Returns the active wrapper provider.<p>
111 *
112 * This method is part of the wrapped API (see {@link AiWrapperProvider}
113 * for details on wrappers).
114 *
115 * @return the active wrapper provider
116 */
117 public static AiWrapperProvider<?, ?, ?, ?, ?> getWrapperProvider() {
118 return s_wrapperProvider;
119 }
120
121
122 /**
123 * Sets a new wrapper provider.<p>
124 *
125 * This method is part of the wrapped API (see {@link AiWrapperProvider}
126 * for details on wrappers).
127 *
128 * @param wrapperProvider the new wrapper provider
129 */
130 public static void setWrapperProvider(AiWrapperProvider<?, ?, ?, ?, ?>
131 wrapperProvider) {
132
133 s_wrapperProvider = wrapperProvider;
134 }
135
136
137 /**
138 * Helper method for wrapping a matrix.<p>
139 *
140 * Used by JNI, do not modify!
141 *
142 * @param data the matrix data
143 * @return the wrapped matrix
144 */
145 static Object wrapMatrix(float[] data) {
146 return s_wrapperProvider.wrapMatrix4f(data);
147 }
148
149
150 /**
151 * Helper method for wrapping a color (rgb).<p>
152 *
153 * Used by JNI, do not modify!
154 *
155 * @param red red component
156 * @param green green component
157 * @param blue blue component
158 * @return the wrapped color
159 */
160 static Object wrapColor3(float red, float green, float blue) {
161 return wrapColor4(red, green, blue, 1.0f);
162 }
163
164
165 /**
166 * Helper method for wrapping a color (rgba).<p>
167 *
168 * Used by JNI, do not modify!
169 *
170 * @param red red component
171 * @param green green component
172 * @param blue blue component
173 * @param alpha alpha component
174 * @return the wrapped color
175 */
176 static Object wrapColor4(float red, float green, float blue, float alpha) {
177 ByteBuffer temp = ByteBuffer.allocate(4 * 4);
178 temp.putFloat(red);
179 temp.putFloat(green);
180 temp.putFloat(blue);
181 temp.putFloat(alpha);
182 temp.flip();
183 return s_wrapperProvider.wrapColor(temp, 0);
184 }
185
186
187 /**
188 * Helper method for wrapping a vector.<p>
189 *
190 * Used by JNI, do not modify!
191 *
192 * @param x x component
193 * @param y y component
194 * @param z z component
195 * @return the wrapped vector
196 */
197 static Object wrapVec3(float x, float y, float z) {
198 ByteBuffer temp = ByteBuffer.allocate(3 * 4);
199 temp.putFloat(x);
200 temp.putFloat(y);
201 temp.putFloat(z);
202 temp.flip();
203 return s_wrapperProvider.wrapVector3f(temp, 0, 3);
204 }
205
206
207 /**
208 * Helper method for wrapping a scene graph node.<p>
209 *
210 * Used by JNI, do not modify!
211 *
212 * @param parent the parent node
213 * @param matrix the transformation matrix
214 * @param meshRefs array of matrix references
215 * @param name the name of the node
216 * @return the wrapped matrix
217 */
218 static Object wrapSceneNode(Object parent, Object matrix, int[] meshRefs,
219 String name) {
220
221 return s_wrapperProvider.wrapSceneNode(parent, matrix, meshRefs, name);
222 }
223
224
225 /**
226 * The native interface.
227 *
228 * @param filename the file to load
229 * @param postProcessing post processing flags
230 * @return the loaded scene, or null if an error occurred
231 * @throws IOException if an error occurs
232 */
233 private static native AiScene aiImportFile(String filename,
234 long postProcessing) throws IOException;
235
236
237 /**
238 * The active wrapper provider.
239 */
240 private static AiWrapperProvider<?, ?, ?, ?, ?> s_wrapperProvider =
241 new AiBuiltInWrapperProvider();
242
243
244 /**
245 * Pure static class, no accessible constructor.
246 */
247 private Jassimp() {
248 /* nothing to do */
249 }
250
251
252 static {
253 System.loadLibrary("jassimp");
254 }
255 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40 package jassimp;
41
42
43 /**
44 * Global configuration values (limits).
45 */
46 public final class JassimpConfig {
47 /**
48 * Maximum number of vertex color sets.
49 */
50 public static final int MAX_NUMBER_COLORSETS = 8;
51
52
53 /**
54 * Maximum number of texture coordinate sets.
55 */
56 public static final int MAX_NUMBER_TEXCOORDS = 8;
57
58
59 /**
60 * Pure static class, no accessible constructor.
61 */
62 private JassimpConfig() {
63 /* nothing to do */
64 }
65 }
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library - Java Binding (jassimp)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2012, assimp team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the assimp team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the assimp team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Java binding for the Open Asset Import Library.
43 */
44 package jassimp;
0 #include "jassimp.h"
1
2 #include <assimp/cimport.h>
3 #include <assimp/scene.h>
4
5
6 #ifdef JNI_LOG
7 #define lprintf(...) printf (__VA_ARGS__)
8 #else
9 #define lprintf
10 #endif
11
12
13 static bool createInstance(JNIEnv *env, const char* className, jobject& newInstance)
14 {
15 jclass clazz = env->FindClass(className);
16
17 if (NULL == clazz)
18 {
19 lprintf("could not find class %s\n", className);
20 return false;
21 }
22
23 jmethodID ctr_id = env->GetMethodID(clazz, "<init>", "()V");
24
25 if (NULL == ctr_id)
26 {
27 lprintf("could not find no-arg constructor for class %s\n", className);
28 return false;
29 }
30
31 newInstance = env->NewObject(clazz, ctr_id);
32
33 if (NULL == newInstance)
34 {
35 lprintf("error calling no-arg constructor for class %s\n", className);
36 return false;
37 }
38
39 return true;
40 }
41
42
43 static bool createInstance(JNIEnv *env, const char* className, const char* signature, const jvalue* params, jobject& newInstance)
44 {
45 jclass clazz = env->FindClass(className);
46
47 if (NULL == clazz)
48 {
49 lprintf("could not find class %s\n", className);
50 return false;
51 }
52
53 jmethodID ctr_id = env->GetMethodID(clazz, "<init>", signature);
54
55 if (NULL == ctr_id)
56 {
57 lprintf("could not find no-arg constructor for class %s\n", className);
58 return false;
59 }
60
61 newInstance = env->NewObjectA(clazz, ctr_id, params);
62
63 if (NULL == newInstance)
64 {
65 lprintf("error calling constructor for class %s, signature %s\n", className, signature);
66 return false;
67 }
68
69 return true;
70 }
71
72
73 static bool getField(JNIEnv *env, jobject object, const char* fieldName, const char* signature, jobject& field)
74 {
75 jclass clazz = env->GetObjectClass(object);
76
77 if (NULL == clazz)
78 {
79 lprintf("could not get class for object\n");
80 return false;
81 }
82
83 jfieldID fieldId = env->GetFieldID(clazz, fieldName, signature);
84
85 if (NULL == fieldId)
86 {
87 lprintf("could not get field %s with signature %s\n", fieldName, signature);
88 return false;
89 }
90
91 field = env->GetObjectField(object, fieldId);
92
93 return true;
94 }
95
96
97 static bool setIntField(JNIEnv *env, jobject object, const char* fieldName, jint value)
98 {
99 jclass clazz = env->GetObjectClass(object);
100
101 if (NULL == clazz)
102 {
103 lprintf("could not get class for object\n");
104 return false;
105 }
106
107 jfieldID fieldId = env->GetFieldID(clazz, fieldName, "I");
108
109 if (NULL == fieldId)
110 {
111 lprintf("could not get field %s with signature I\n", fieldName);
112 return false;
113 }
114
115 env->SetIntField(object, fieldId, value);
116
117 return true;
118 }
119
120
121 static bool setFloatField(JNIEnv *env, jobject object, const char* fieldName, jfloat value)
122 {
123 jclass clazz = env->GetObjectClass(object);
124
125 if (NULL == clazz)
126 {
127 lprintf("could not get class for object\n");
128 return false;
129 }
130
131 jfieldID fieldId = env->GetFieldID(clazz, fieldName, "F");
132
133 if (NULL == fieldId)
134 {
135 lprintf("could not get field %s with signature F\n", fieldName);
136 return false;
137 }
138
139 env->SetFloatField(object, fieldId, value);
140
141 return true;
142 }
143
144
145 static bool setObjectField(JNIEnv *env, jobject object, const char* fieldName, const char* signature, jobject value)
146 {
147 jclass clazz = env->GetObjectClass(object);
148
149 if (NULL == clazz)
150 {
151 lprintf("could not get class for object\n");
152 return false;
153 }
154
155 jfieldID fieldId = env->GetFieldID(clazz, fieldName, signature);
156
157 if (NULL == fieldId)
158 {
159 lprintf("could not get field %s with signature %s\n", fieldName, signature);
160 return false;
161 }
162
163 env->SetObjectField(object, fieldId, value);
164
165 return true;
166 }
167
168
169 static bool getStaticField(JNIEnv *env, const char* className, const char* fieldName, const char* signature, jobject& field)
170 {
171 jclass clazz = env->FindClass(className);
172
173 if (NULL == clazz)
174 {
175 lprintf("could not find class %s\n", className);
176 return false;
177 }
178
179 jfieldID fieldId = env->GetFieldID(clazz, fieldName, signature);
180
181 if (NULL == fieldId)
182 {
183 lprintf("could not get field %s with signature %s\n", fieldName, signature);
184 return false;
185 }
186
187 field = env->GetStaticObjectField(clazz, fieldId);
188
189 return true;
190 }
191
192
193 static bool call(JNIEnv *env, jobject object, const char* typeName, const char* methodName,
194 const char* signature, const jvalue* params)
195 {
196 jclass clazz = env->FindClass(typeName);
197
198 if (NULL == clazz)
199 {
200 lprintf("could not find class %s\n", typeName);
201 return false;
202 }
203
204 jmethodID mid = env->GetMethodID(clazz, methodName, signature);
205
206 if (NULL == mid)
207 {
208 lprintf("could not find method %s with signature %s in type %s\n", methodName, signature, typeName);
209 return false;
210 }
211
212 env->CallVoidMethodA(object, mid, params);
213
214 return true;
215 }
216
217
218 static bool callStaticObject(JNIEnv *env, const char* typeName, const char* methodName,
219 const char* signature, const jvalue* params, jobject& returnValue)
220 {
221 jclass clazz = env->FindClass(typeName);
222
223 if (NULL == clazz)
224 {
225 lprintf("could not find class %s\n", typeName);
226 return false;
227 }
228
229 jmethodID mid = env->GetStaticMethodID(clazz, methodName, signature);
230
231 if (NULL == mid)
232 {
233 lprintf("could not find method %s with signature %s in type %s\n", methodName, signature, typeName);
234 return false;
235 }
236
237 returnValue = env->CallStaticObjectMethodA(clazz, mid, params);
238
239 return true;
240 }
241
242
243 static bool copyBuffer(JNIEnv *env, jobject jMesh, const char* jBufferName, void* cData, size_t size)
244 {
245 jobject jBuffer = NULL;
246
247 if (!getField(env, jMesh, jBufferName, "Ljava/nio/ByteBuffer;", jBuffer))
248 {
249 return false;
250 }
251
252 if (env->GetDirectBufferCapacity(jBuffer) != size)
253 {
254 lprintf("invalid direct buffer, expected %u, got %u\n", size, env->GetDirectBufferCapacity(jBuffer));
255 return false;
256 }
257
258 void* jBufferPtr = env->GetDirectBufferAddress(jBuffer);
259
260 if (NULL == jBufferPtr)
261 {
262 lprintf("could not access direct buffer\n");
263 return false;
264 }
265
266 memcpy(jBufferPtr, cData, size);
267
268 return true;
269 }
270
271
272 static bool copyBufferArray(JNIEnv *env, jobject jMesh, const char* jBufferName, int index, void* cData, size_t size)
273 {
274 jobject jBufferArray = NULL;
275
276 if (!getField(env, jMesh, jBufferName, "[Ljava/nio/ByteBuffer;", jBufferArray))
277 {
278 return false;
279 }
280
281 jobject jBuffer = env->GetObjectArrayElement((jobjectArray) jBufferArray, index);
282
283 if (env->GetDirectBufferCapacity(jBuffer) != size)
284 {
285 lprintf("invalid direct buffer, expected %u, got %u\n", size, env->GetDirectBufferCapacity(jBuffer));
286 return false;
287 }
288
289 void* jBufferPtr = env->GetDirectBufferAddress(jBuffer);
290
291 if (NULL == jBufferPtr)
292 {
293 lprintf("could not access direct buffer\n");
294 return false;
295 }
296
297 memcpy(jBufferPtr, cData, size);
298
299 return true;
300 }
301
302
303
304 static bool loadMeshes(JNIEnv *env, const aiScene* cScene, jobject& jScene)
305 {
306 for (unsigned int meshNr = 0; meshNr < cScene->mNumMeshes; meshNr++)
307 {
308 const aiMesh *cMesh = cScene->mMeshes[meshNr];
309
310 lprintf("converting mesh %s ...\n", cMesh->mName.C_Str());
311
312 /* create mesh */
313 jobject jMesh = NULL;
314
315 if (!createInstance(env, "jassimp/AiMesh", jMesh))
316 {
317 return false;
318 }
319
320
321 /* add mesh to m_meshes java.util.List */
322 jobject jMeshes = NULL;
323
324 if (!getField(env, jScene, "m_meshes", "Ljava/util/List;", jMeshes))
325 {
326 return false;
327 }
328
329 jvalue addParams[1];
330 addParams[0].l = jMesh;
331 if (!call(env, jMeshes, "java/util/Collection", "add", "(Ljava/lang/Object;)Z", addParams))
332 {
333 return false;
334 }
335
336
337 /* set general mesh data in java */
338 jvalue setTypesParams[1];
339 setTypesParams[0].i = cMesh->mPrimitiveTypes;
340 if (!call(env, jMesh, "jassimp/AiMesh", "setPrimitiveTypes", "(I)V", setTypesParams))
341 {
342 return false;
343 }
344
345
346 if (!setIntField(env, jMesh, "m_materialIndex", cMesh->mMaterialIndex))
347 {
348 return false;
349 }
350
351 if (!setObjectField(env, jMesh, "m_name", "Ljava/lang/String;", env->NewStringUTF(cMesh->mName.C_Str())))
352 {
353 return false;
354 }
355
356
357 /* determine face buffer size */
358 bool isPureTriangle = cMesh->mPrimitiveTypes == aiPrimitiveType_TRIANGLE;
359 size_t faceBufferSize;
360 if (isPureTriangle)
361 {
362 faceBufferSize = cMesh->mNumFaces * 3 * sizeof(unsigned int);
363 }
364 else
365 {
366 int numVertexReferences = 0;
367 for (unsigned int face = 0; face < cMesh->mNumFaces; face++)
368 {
369 numVertexReferences += cMesh->mFaces[face].mNumIndices;
370 }
371
372 faceBufferSize = numVertexReferences * sizeof(unsigned int);
373 }
374
375
376 /* allocate buffers - we do this from java so they can be garbage collected */
377 jvalue allocateBuffersParams[4];
378 allocateBuffersParams[0].i = cMesh->mNumVertices;
379 allocateBuffersParams[1].i = cMesh->mNumFaces;
380 allocateBuffersParams[2].z = isPureTriangle;
381 allocateBuffersParams[3].i = (jint) faceBufferSize;
382 if (!call(env, jMesh, "jassimp/AiMesh", "allocateBuffers", "(IIZI)V", allocateBuffersParams))
383 {
384 return false;
385 }
386
387
388 if (cMesh->mNumVertices > 0)
389 {
390 /* push vertex data to java */
391 if (!copyBuffer(env, jMesh, "m_vertices", cMesh->mVertices, cMesh->mNumVertices * sizeof(aiVector3D)))
392 {
393 lprintf("could not copy vertex data\n");
394 return false;
395 }
396
397 lprintf(" with %u vertices\n", cMesh->mNumVertices);
398 }
399
400
401 /* push face data to java */
402 if (cMesh->mNumFaces > 0)
403 {
404 if (isPureTriangle)
405 {
406 char* faceBuffer = (char*) malloc(faceBufferSize);
407
408 size_t faceDataSize = 3 * sizeof(unsigned int);
409 for (unsigned int face = 0; face < cMesh->mNumFaces; face++)
410 {
411 memcpy(faceBuffer + face * faceDataSize, cMesh->mFaces[face].mIndices, faceDataSize);
412 }
413
414 bool res = copyBuffer(env, jMesh, "m_faces", faceBuffer, faceBufferSize);
415
416 free(faceBuffer);
417
418 if (!res)
419 {
420 lprintf("could not copy face data\n");
421 return false;
422 }
423 }
424 else
425 {
426 char* faceBuffer = (char*) malloc(faceBufferSize);
427 char* offsetBuffer = (char*) malloc(cMesh->mNumFaces * sizeof(unsigned int));
428
429 size_t faceBufferPos = 0;
430 for (unsigned int face = 0; face < cMesh->mNumFaces; face++)
431 {
432 size_t faceBufferOffset = faceBufferPos / sizeof(unsigned int);
433 memcpy(offsetBuffer + face * sizeof(unsigned int), &faceBufferOffset, sizeof(unsigned int));
434
435 size_t faceDataSize = cMesh->mFaces[face].mNumIndices * sizeof(unsigned int);
436 memcpy(faceBuffer + faceBufferPos, cMesh->mFaces[face].mIndices, faceDataSize);
437 faceBufferPos += faceDataSize;
438 }
439
440 if (faceBufferPos != faceBufferSize)
441 {
442 /* this should really not happen */
443 lprintf("faceBufferPos %u, faceBufferSize %u\n", faceBufferPos, faceBufferSize);
444 env->FatalError("error copying face data");
445 exit(-1);
446 }
447
448
449 bool res = copyBuffer(env, jMesh, "m_faces", faceBuffer, faceBufferSize);
450 res &= copyBuffer(env, jMesh, "m_faceOffsets", offsetBuffer, cMesh->mNumFaces * sizeof(unsigned int));
451
452 free(faceBuffer);
453 free(offsetBuffer);
454
455 if (!res)
456 {
457 lprintf("could not copy face data\n");
458 return false;
459 }
460 }
461
462 lprintf(" with %u faces\n", cMesh->mNumFaces);
463 }
464
465
466 /* push normals to java */
467 if (cMesh->HasNormals())
468 {
469 jvalue allocateDataChannelParams[2];
470 allocateDataChannelParams[0].i = 0;
471 allocateDataChannelParams[1].i = 0;
472 if (!call(env, jMesh, "jassimp/AiMesh", "allocateDataChannel", "(II)V", allocateDataChannelParams))
473 {
474 lprintf("could not allocate normal data channel\n");
475 return false;
476 }
477 if (!copyBuffer(env, jMesh, "m_normals", cMesh->mNormals, cMesh->mNumVertices * 3 * sizeof(float)))
478 {
479 lprintf("could not copy normal data\n");
480 return false;
481 }
482
483 lprintf(" with normals\n");
484 }
485
486
487 /* push tangents to java */
488 if (cMesh->mTangents != NULL)
489 {
490 jvalue allocateDataChannelParams[2];
491 allocateDataChannelParams[0].i = 1;
492 allocateDataChannelParams[1].i = 0;
493 if (!call(env, jMesh, "jassimp/AiMesh", "allocateDataChannel", "(II)V", allocateDataChannelParams))
494 {
495 lprintf("could not allocate tangents data channel\n");
496 return false;
497 }
498 if (!copyBuffer(env, jMesh, "m_tangents", cMesh->mTangents, cMesh->mNumVertices * 3 * sizeof(float)))
499 {
500 lprintf("could not copy tangents data\n");
501 return false;
502 }
503
504 lprintf(" with tangents\n");
505 }
506
507
508 /* push bitangents to java */
509 if (cMesh->mBitangents != NULL)
510 {
511 jvalue allocateDataChannelParams[2];
512 allocateDataChannelParams[0].i = 2;
513 allocateDataChannelParams[1].i = 0;
514 if (!call(env, jMesh, "jassimp/AiMesh", "allocateDataChannel", "(II)V", allocateDataChannelParams))
515 {
516 lprintf("could not allocate bitangents data channel\n");
517 return false;
518 }
519 if (!copyBuffer(env, jMesh, "m_bitangents", cMesh->mBitangents, cMesh->mNumVertices * 3 * sizeof(float)))
520 {
521 lprintf("could not copy bitangents data\n");
522 return false;
523 }
524
525 lprintf(" with bitangents\n");
526 }
527
528
529 /* push color sets to java */
530 for (int c = 0; c < AI_MAX_NUMBER_OF_COLOR_SETS; c++)
531 {
532 if (cMesh->mColors[c] != NULL)
533 {
534 jvalue allocateDataChannelParams[2];
535 allocateDataChannelParams[0].i = 3;
536 allocateDataChannelParams[1].i = c;
537 if (!call(env, jMesh, "jassimp/AiMesh", "allocateDataChannel", "(II)V", allocateDataChannelParams))
538 {
539 lprintf("could not allocate colorset data channel\n");
540 return false;
541 }
542 if (!copyBufferArray(env, jMesh, "m_colorsets", c, cMesh->mColors[c], cMesh->mNumVertices * 4 * sizeof(float)))
543 {
544 lprintf("could not copy colorset data\n");
545 return false;
546 }
547
548 lprintf(" with colorset[%d]\n", c);
549 }
550 }
551
552
553 /* push tex coords to java */
554 for (int c = 0; c < AI_MAX_NUMBER_OF_TEXTURECOORDS; c++)
555 {
556 if (cMesh->mTextureCoords[c] != NULL)
557 {
558 jvalue allocateDataChannelParams[2];
559
560 switch (cMesh->mNumUVComponents[c])
561 {
562 case 1:
563 allocateDataChannelParams[0].i = 4;
564 break;
565 case 2:
566 allocateDataChannelParams[0].i = 5;
567 break;
568 case 3:
569 allocateDataChannelParams[0].i = 6;
570 break;
571 default:
572 return false;
573 }
574
575 allocateDataChannelParams[1].i = c;
576 if (!call(env, jMesh, "jassimp/AiMesh", "allocateDataChannel", "(II)V", allocateDataChannelParams))
577 {
578 lprintf("could not allocate texture coordinates data channel\n");
579 return false;
580 }
581
582 /* gather data */
583 size_t coordBufferSize = cMesh->mNumVertices * cMesh->mNumUVComponents[c] * sizeof(float);
584 char* coordBuffer = (char*) malloc(coordBufferSize);
585 size_t coordBufferOffset = 0;
586
587 for (unsigned int v = 0; v < cMesh->mNumVertices; v++)
588 {
589 memcpy(coordBuffer + coordBufferOffset, &cMesh->mTextureCoords[c][v], cMesh->mNumUVComponents[c] * sizeof(float));
590 coordBufferOffset += cMesh->mNumUVComponents[c] * sizeof(float);
591 }
592
593 if (coordBufferOffset != coordBufferSize)
594 {
595 /* this should really not happen */
596 lprintf("coordBufferPos %u, coordBufferSize %u\n", coordBufferOffset, coordBufferSize);
597 env->FatalError("error copying coord data");
598 exit(-1);
599 }
600
601 bool res = copyBufferArray(env, jMesh, "m_texcoords", c, coordBuffer, coordBufferSize);
602
603 free(coordBuffer);
604
605 if (!res)
606 {
607 lprintf("could not copy texture coordinates data\n");
608 return false;
609 }
610
611 lprintf(" with %uD texcoord[%d]\n", cMesh->mNumUVComponents[c], c);
612 }
613 }
614
615
616 for (unsigned int b = 0; b < cMesh->mNumBones; b++)
617 {
618 aiBone *cBone = cMesh->mBones[b];
619
620 jobject jBone;
621 if (!createInstance(env, "jassimp/AiBone", jBone))
622 {
623 return false;
624 }
625
626 /* add bone to bone list */
627 jobject jBones = NULL;
628
629 if (!getField(env, jMesh, "m_bones", "Ljava/util/List;", jBones))
630 {
631 return false;
632 }
633
634 jvalue addParams[1];
635 addParams[0].l = jBone;
636 if (!call(env, jBones, "java/util/Collection", "add", "(Ljava/lang/Object;)Z", addParams))
637 {
638 return false;
639 }
640
641 /* set bone data */
642 if (!setObjectField(env, jBone, "m_name", "Ljava/lang/String;", env->NewStringUTF(cBone->mName.C_Str())))
643 {
644 return false;
645 }
646
647 /* add bone weights */
648 for (unsigned int w = 0; w < cBone->mNumWeights; w++)
649 {
650 jobject jBoneWeight;
651 if (!createInstance(env, "jassimp/AiBoneWeight", jBoneWeight))
652 {
653 return false;
654 }
655
656 /* add boneweight to bone list */
657 jobject jBoneWeights = NULL;
658
659 if (!getField(env, jBone, "m_boneWeights", "Ljava/util/List;", jBoneWeights))
660 {
661 return false;
662 }
663
664
665 /* copy offset matrix */
666 jfloatArray jMatrixArr = env->NewFloatArray(16);
667 env->SetFloatArrayRegion(jMatrixArr, 0, 16, (jfloat*) &cBone->mOffsetMatrix);
668
669 jvalue wrapParams[1];
670 wrapParams[0].l = jMatrixArr;
671 jobject jMatrix;
672
673 if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapMatrix", "([F)Ljava/lang/Object;", wrapParams, jMatrix))
674 {
675 return false;
676 }
677
678 if (!setObjectField(env, jBone, "m_offsetMatrix", "Ljava/lang/Object;", jMatrix))
679 {
680 return false;
681 }
682
683
684 jvalue addBwParams[1];
685 addBwParams[0].l = jBoneWeight;
686 if (!call(env, jBoneWeights, "java/util/Collection", "add", "(Ljava/lang/Object;)Z", addBwParams))
687 {
688 return false;
689 }
690
691
692 if (!setIntField(env, jBoneWeight, "m_vertexId", cBone->mWeights[w].mVertexId))
693 {
694 return false;
695 }
696
697 if (!setFloatField(env, jBoneWeight, "m_weight", cBone->mWeights[w].mWeight))
698 {
699 return false;
700 }
701 }
702 }
703 }
704
705 return true;
706 }
707
708
709 static bool loadSceneNode(JNIEnv *env, const aiNode *cNode, jobject parent, jobject* loadedNode = NULL)
710 {
711 lprintf(" converting node %s ...\n", cNode->mName.C_Str());
712
713 /* wrap matrix */
714 jfloatArray jMatrixArr = env->NewFloatArray(16);
715 env->SetFloatArrayRegion(jMatrixArr, 0, 16, (jfloat*) &cNode->mTransformation);
716
717 jvalue wrapMatParams[1];
718 wrapMatParams[0].l = jMatrixArr;
719 jobject jMatrix;
720
721 if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapMatrix", "([F)Ljava/lang/Object;", wrapMatParams, jMatrix))
722 {
723 return false;
724 }
725
726
727 /* create mesh references array */
728 jintArray jMeshrefArr = env->NewIntArray(cNode->mNumMeshes);
729 jint *temp = (jint*) malloc(sizeof(jint) * cNode->mNumMeshes);
730
731 for (unsigned int i = 0; i < cNode->mNumMeshes; i++)
732 {
733 temp[i] = cNode->mMeshes[i];
734 }
735 env->SetIntArrayRegion(jMeshrefArr, 0, cNode->mNumMeshes, (jint*) temp);
736
737 free(temp);
738
739
740 /* convert name */
741 jstring jNodeName = env->NewStringUTF(cNode->mName.C_Str());
742
743
744 /* wrap scene node */
745 jvalue wrapNodeParams[4];
746 wrapNodeParams[0].l = parent;
747 wrapNodeParams[1].l = jMatrix;
748 wrapNodeParams[2].l = jMeshrefArr;
749 wrapNodeParams[3].l = jNodeName;
750 jobject jNode;
751 if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapSceneNode",
752 "(Ljava/lang/Object;Ljava/lang/Object;[ILjava/lang/String;)Ljava/lang/Object;", wrapNodeParams, jNode))
753 {
754 return false;
755 }
756
757
758 /* and recurse */
759 for (unsigned int c = 0; c < cNode->mNumChildren; c++)
760 {
761 if (!loadSceneNode(env, cNode->mChildren[c], jNode))
762 {
763 return false;
764 }
765 }
766
767 if (NULL != loadedNode)
768 {
769 *loadedNode = jNode;
770 }
771
772 return true;
773 }
774
775
776 static bool loadSceneGraph(JNIEnv *env, const aiScene* cScene, jobject& jScene)
777 {
778 lprintf("converting scene graph ...\n");
779
780 if (NULL != cScene->mRootNode)
781 {
782 jobject jRoot;
783
784 if (!loadSceneNode(env, cScene->mRootNode, NULL, &jRoot))
785 {
786 return false;
787 }
788
789 if (!setObjectField(env, jScene, "m_sceneRoot", "Ljava/lang/Object;", jRoot))
790 {
791 return false;
792 }
793 }
794
795 lprintf("converting scene graph finished\n");
796
797 return true;
798 }
799
800
801 static bool loadMaterials(JNIEnv *env, const aiScene* cScene, jobject& jScene)
802 {
803 for (unsigned int m = 0; m < cScene->mNumMaterials; m++)
804 {
805 const aiMaterial* cMaterial = cScene->mMaterials[m];
806
807 lprintf("converting material ...\n", m);
808
809 jobject jMaterial = NULL;
810
811 if (!createInstance(env, "jassimp/AiMaterial", jMaterial))
812 {
813 return false;
814 }
815
816 /* add material to m_materials java.util.List */
817 jobject jMaterials = NULL;
818
819 if (!getField(env, jScene, "m_materials", "Ljava/util/List;", jMaterials))
820 {
821 return false;
822 }
823
824 jvalue addMatParams[1];
825 addMatParams[0].l = jMaterial;
826 if (!call(env, jMaterials, "java/util/Collection", "add", "(Ljava/lang/Object;)Z", addMatParams))
827 {
828 return false;
829 }
830
831 /* set texture numbers */
832 for (int ttInd = aiTextureType_DIFFUSE; ttInd < aiTextureType_UNKNOWN; ttInd++)
833 {
834 aiTextureType tt = static_cast<aiTextureType>(ttInd);
835
836 unsigned int num = cMaterial->GetTextureCount(tt);
837
838 lprintf(" found %d textures of type %d ...\n", num, ttInd);
839
840 jvalue setNumberParams[2];
841 setNumberParams[0].i = ttInd;
842 setNumberParams[1].i = num;
843
844 if (!call(env, jMaterial, "jassimp/AiMaterial", "setTextureNumber", "(II)V", setNumberParams))
845 {
846 return false;
847 }
848 }
849
850
851 for (unsigned int p = 0; p < cMaterial->mNumProperties; p++)
852 {
853 //printf("%s - %u - %u\n", cScene->mMaterials[m]->mProperties[p]->mKey.C_Str(),
854 // cScene->mMaterials[m]->mProperties[p]->mSemantic,
855 // cScene->mMaterials[m]->mProperties[p]->mDataLength);
856
857 const aiMaterialProperty* cProperty = cMaterial->mProperties[p];
858
859 lprintf(" converting property %s ...\n", cProperty->mKey.C_Str());
860
861 jobject jProperty = NULL;
862
863 jvalue constructorParams[5];
864 constructorParams[0].l = env->NewStringUTF(cProperty->mKey.C_Str());
865 constructorParams[1].i = cProperty->mSemantic;
866 constructorParams[2].i = cProperty->mIndex;
867 constructorParams[3].i = cProperty->mType;
868
869
870 /* special case conversion for color3 */
871 if (NULL != strstr(cProperty->mKey.C_Str(), "clr") &&
872 cProperty->mType == aiPTI_Float &&
873 cProperty->mDataLength == 3 * sizeof(float))
874 {
875 jobject jData = NULL;
876
877 /* wrap color */
878 jvalue wrapColorParams[3];
879 wrapColorParams[0].f = ((float*) cProperty->mData)[0];
880 wrapColorParams[1].f = ((float*) cProperty->mData)[1];
881 wrapColorParams[2].f = ((float*) cProperty->mData)[2];
882 if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapColor3", "(FFF)Ljava/lang/Object;", wrapColorParams, jData))
883 {
884 return false;
885 }
886
887 constructorParams[4].l = jData;
888 if (!createInstance(env, "jassimp/AiMaterial$Property", "(Ljava/lang/String;IIILjava/lang/Object;)V",
889 constructorParams, jProperty))
890 {
891 return false;
892 }
893 }
894 /* special case conversion for color4 */
895 else if (NULL != strstr(cProperty->mKey.C_Str(), "clr") &&
896 cProperty->mType == aiPTI_Float &&
897 cProperty->mDataLength == 4 * sizeof(float))
898 {
899 jobject jData = NULL;
900
901 /* wrap color */
902 jvalue wrapColorParams[4];
903 wrapColorParams[0].f = ((float*) cProperty->mData)[0];
904 wrapColorParams[1].f = ((float*) cProperty->mData)[1];
905 wrapColorParams[2].f = ((float*) cProperty->mData)[2];
906 wrapColorParams[3].f = ((float*) cProperty->mData)[3];
907 if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapColor4", "(FFFF)Ljava/lang/Object;", wrapColorParams, jData))
908 {
909 return false;
910 }
911
912 constructorParams[4].l = jData;
913 if (!createInstance(env, "jassimp/AiMaterial$Property", "(Ljava/lang/String;IIILjava/lang/Object;)V",
914 constructorParams, jProperty))
915 {
916 return false;
917 }
918 }
919 else if (cProperty->mType == aiPTI_Float && cProperty->mDataLength == sizeof(float))
920 {
921 jobject jData = NULL;
922
923 jvalue newFloatParams[1];
924 newFloatParams[0].f = ((float*) cProperty->mData)[0];
925 if (!createInstance(env, "java/lang/Float", "(F)V", newFloatParams, jData))
926 {
927 return false;
928 }
929
930 constructorParams[4].l = jData;
931 if (!createInstance(env, "jassimp/AiMaterial$Property", "(Ljava/lang/String;IIILjava/lang/Object;)V",
932 constructorParams, jProperty))
933 {
934 return false;
935 }
936 }
937 else if (cProperty->mType == aiPTI_Integer && cProperty->mDataLength == sizeof(int))
938 {
939 jobject jData = NULL;
940
941 jvalue newIntParams[1];
942 newIntParams[0].i = ((int*) cProperty->mData)[0];
943 if (!createInstance(env, "java/lang/Integer", "(I)V", newIntParams, jData))
944 {
945 return false;
946 }
947
948 constructorParams[4].l = jData;
949 if (!createInstance(env, "jassimp/AiMaterial$Property", "(Ljava/lang/String;IIILjava/lang/Object;)V",
950 constructorParams, jProperty))
951 {
952 return false;
953 }
954 }
955 else if (cProperty->mType == aiPTI_String)
956 {
957 /* skip length prefix */
958 jobject jData = env->NewStringUTF(cProperty->mData + 4);
959
960 constructorParams[4].l = jData;
961 if (!createInstance(env, "jassimp/AiMaterial$Property", "(Ljava/lang/String;IIILjava/lang/Object;)V",
962 constructorParams, jProperty))
963 {
964 return false;
965 }
966 }
967 else
968 {
969 constructorParams[4].i = cProperty->mDataLength;
970
971 /* generic copy code, uses dump ByteBuffer on java side */
972 if (!createInstance(env, "jassimp/AiMaterial$Property", "(Ljava/lang/String;IIII)V", constructorParams, jProperty))
973 {
974 return false;
975 }
976
977 jobject jBuffer = NULL;
978
979 if (!getField(env, jProperty, "m_data", "Ljava/lang/Object;", jBuffer))
980 {
981 return false;
982 }
983
984 if (env->GetDirectBufferCapacity(jBuffer) != cProperty->mDataLength)
985 {
986 lprintf("invalid direct buffer\n");
987 return false;
988 }
989
990 void* jBufferPtr = env->GetDirectBufferAddress(jBuffer);
991
992 if (NULL == jBufferPtr)
993 {
994 lprintf("could not access direct buffer\n");
995 return false;
996 }
997
998 memcpy(jBufferPtr, cProperty->mData, cProperty->mDataLength);
999 }
1000
1001
1002 /* add property */
1003 jobject jProperties = NULL;
1004
1005 if (!getField(env, jMaterial, "m_properties", "Ljava/util/List;", jProperties))
1006 {
1007 return false;
1008 }
1009
1010 jvalue addPropParams[1];
1011 addPropParams[0].l = jProperty;
1012 if (!call(env, jProperties, "java/util/Collection", "add", "(Ljava/lang/Object;)Z", addPropParams))
1013 {
1014 return false;
1015 }
1016 }
1017 }
1018
1019 lprintf("materials finished\n");
1020
1021 return true;
1022 }
1023
1024
1025 static bool loadAnimations(JNIEnv *env, const aiScene* cScene, jobject& jScene)
1026 {
1027 lprintf("converting %d animations ...\n", cScene->mNumAnimations);
1028
1029 for (unsigned int a = 0; a < cScene->mNumAnimations; a++)
1030 {
1031 const aiAnimation *cAnimation = cScene->mAnimations[a];
1032
1033 lprintf(" converting animation %s ...\n", cAnimation->mName.C_Str());
1034
1035 jobject jAnimation;
1036 jvalue newAnimParams[3];
1037 newAnimParams[0].l = env->NewStringUTF(cAnimation->mName.C_Str());
1038 newAnimParams[1].d = cAnimation->mDuration;
1039 newAnimParams[2].d = cAnimation->mTicksPerSecond;
1040
1041 if (!createInstance(env, "jassimp/AiAnimation", "(Ljava/lang/String;DD)V", newAnimParams, jAnimation))
1042 {
1043 return false;
1044 }
1045
1046 /* add animation to m_animations java.util.List */
1047 jobject jAnimations = NULL;
1048
1049 if (!getField(env, jScene, "m_animations", "Ljava/util/List;", jAnimations))
1050 {
1051 return false;
1052 }
1053
1054 jvalue addParams[1];
1055 addParams[0].l = jAnimation;
1056 if (!call(env, jAnimations, "java/util/Collection", "add", "(Ljava/lang/Object;)Z", addParams))
1057 {
1058 return false;
1059 }
1060
1061
1062 for (unsigned int c = 0; c < cAnimation->mNumChannels; c++)
1063 {
1064 const aiNodeAnim *cNodeAnim = cAnimation->mChannels[c];
1065
1066 jobject jNodeAnim;
1067 jvalue newNodeAnimParams[6];
1068 newNodeAnimParams[0].l = env->NewStringUTF(cNodeAnim->mNodeName.C_Str());
1069 newNodeAnimParams[1].i = cNodeAnim->mNumPositionKeys;
1070 newNodeAnimParams[2].i = cNodeAnim->mNumRotationKeys;
1071 newNodeAnimParams[3].i = cNodeAnim->mNumScalingKeys;
1072 newNodeAnimParams[4].i = cNodeAnim->mPreState;
1073 newNodeAnimParams[5].i = cNodeAnim->mPostState;
1074
1075 if (!createInstance(env, "jassimp/AiNodeAnim", "(Ljava/lang/String;IIIII)V", newNodeAnimParams, jNodeAnim))
1076 {
1077 return false;
1078 }
1079
1080
1081 /* add nodeanim to m_animations java.util.List */
1082 jobject jNodeAnims = NULL;
1083
1084 if (!getField(env, jAnimation, "m_nodeAnims", "Ljava/util/List;", jNodeAnims))
1085 {
1086 return false;
1087 }
1088
1089 jvalue addParams[1];
1090 addParams[0].l = jNodeAnim;
1091 if (!call(env, jNodeAnims, "java/util/Collection", "add", "(Ljava/lang/Object;)Z", addParams))
1092 {
1093 return false;
1094 }
1095
1096 /* copy keys */
1097 if (!copyBuffer(env, jNodeAnim, "m_posKeys", cNodeAnim->mPositionKeys,
1098 cNodeAnim->mNumPositionKeys * sizeof(aiVectorKey)))
1099 {
1100 return false;
1101 }
1102
1103 if (!copyBuffer(env, jNodeAnim, "m_rotKeys", cNodeAnim->mRotationKeys,
1104 cNodeAnim->mNumRotationKeys * sizeof(aiQuatKey)))
1105 {
1106 return false;
1107 }
1108
1109 if (!copyBuffer(env, jNodeAnim, "m_scaleKeys", cNodeAnim->mScalingKeys,
1110 cNodeAnim->mNumScalingKeys * sizeof(aiVectorKey)))
1111 {
1112 return false;
1113 }
1114 }
1115 }
1116
1117 lprintf("converting animations finished\n");
1118
1119 return true;
1120 }
1121
1122
1123 static bool loadLights(JNIEnv *env, const aiScene* cScene, jobject& jScene)
1124 {
1125 lprintf("converting %d lights ...\n", cScene->mNumLights);
1126
1127 for (unsigned int l = 0; l < cScene->mNumLights; l++)
1128 {
1129 const aiLight *cLight = cScene->mLights[l];
1130
1131 lprintf("converting light %s ...\n", cLight->mName.C_Str());
1132
1133 /* wrap color nodes */
1134 jvalue wrapColorParams[3];
1135 wrapColorParams[0].f = cLight->mColorDiffuse.r;
1136 wrapColorParams[1].f = cLight->mColorDiffuse.g;
1137 wrapColorParams[2].f = cLight->mColorDiffuse.b;
1138 jobject jDiffuse;
1139 if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapColor3", "(FFF)Ljava/lang/Object;", wrapColorParams, jDiffuse))
1140 {
1141 return false;
1142 }
1143
1144 wrapColorParams[0].f = cLight->mColorSpecular.r;
1145 wrapColorParams[1].f = cLight->mColorSpecular.g;
1146 wrapColorParams[2].f = cLight->mColorSpecular.b;
1147 jobject jSpecular;
1148 if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapColor3", "(FFF)Ljava/lang/Object;", wrapColorParams, jSpecular))
1149 {
1150 return false;
1151 }
1152
1153 wrapColorParams[0].f = cLight->mColorAmbient.r;
1154 wrapColorParams[1].f = cLight->mColorAmbient.g;
1155 wrapColorParams[2].f = cLight->mColorAmbient.b;
1156 jobject jAmbient;
1157 if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapColor3", "(FFF)Ljava/lang/Object;", wrapColorParams, jAmbient))
1158 {
1159 return false;
1160 }
1161
1162
1163 /* wrap vec3 nodes */
1164 jvalue wrapVec3Params[3];
1165 wrapVec3Params[0].f = cLight->mPosition.x;
1166 wrapVec3Params[1].f = cLight->mPosition.y;
1167 wrapVec3Params[2].f = cLight->mPosition.z;
1168 jobject jPosition;
1169 if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapVec3", "(FFF)Ljava/lang/Object;", wrapVec3Params, jPosition))
1170 {
1171 return false;
1172 }
1173
1174 wrapVec3Params[0].f = cLight->mPosition.x;
1175 wrapVec3Params[1].f = cLight->mPosition.y;
1176 wrapVec3Params[2].f = cLight->mPosition.z;
1177 jobject jDirection;
1178 if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapVec3", "(FFF)Ljava/lang/Object;", wrapVec3Params, jDirection))
1179 {
1180 return false;
1181 }
1182
1183
1184 jobject jLight;
1185
1186 jvalue params[12];
1187 params[0].l = env->NewStringUTF(cLight->mName.C_Str());;
1188 params[1].i = cLight->mType;
1189 params[2].l = jPosition;
1190 params[3].l = jDirection;
1191 params[4].f = cLight->mAttenuationConstant;
1192 params[5].f = cLight->mAttenuationLinear;
1193 params[6].f = cLight->mAttenuationQuadratic;
1194 params[7].l = jDiffuse;
1195 params[8].l = jSpecular;
1196 params[9].l = jAmbient;
1197 params[10].f = cLight->mAngleInnerCone;
1198 params[11].f = cLight->mAngleOuterCone;
1199
1200 if (!createInstance(env, "jassimp/AiLight", "(Ljava/lang/String;ILjava/lang/Object;Ljava/lang/Object;FFFLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;FF)V",
1201 params, jLight))
1202 {
1203 return false;
1204 }
1205
1206 /* add light to m_lights java.util.List */
1207 jobject jLights = NULL;
1208
1209 if (!getField(env, jScene, "m_lights", "Ljava/util/List;", jLights))
1210 {
1211 return false;
1212 }
1213
1214 jvalue addParams[1];
1215 addParams[0].l = jLight;
1216 if (!call(env, jLights, "java/util/Collection", "add", "(Ljava/lang/Object;)Z", addParams))
1217 {
1218 return false;
1219 }
1220 }
1221
1222 lprintf("converting lights finished ...\n");
1223
1224 return true;
1225 }
1226
1227
1228 static bool loadCameras(JNIEnv *env, const aiScene* cScene, jobject& jScene)
1229 {
1230 lprintf("converting %d cameras ...\n", cScene->mNumCameras);
1231
1232 for (unsigned int c = 0; c < cScene->mNumCameras; c++)
1233 {
1234 const aiCamera *cCamera = cScene->mCameras[c];
1235
1236 lprintf("converting camera %s ...\n", cCamera->mName.C_Str());
1237
1238 /* wrap color nodes */
1239 jvalue wrapPositionParams[3];
1240 wrapPositionParams[0].f = cCamera->mPosition.x;
1241 wrapPositionParams[1].f = cCamera->mPosition.y;
1242 wrapPositionParams[2].f = cCamera->mPosition.z;
1243 jobject jPosition;
1244 if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapVec3", "(FFF)Ljava/lang/Object;", wrapPositionParams, jPosition))
1245 {
1246 return false;
1247 }
1248
1249 wrapPositionParams[0].f = cCamera->mUp.x;
1250 wrapPositionParams[1].f = cCamera->mUp.y;
1251 wrapPositionParams[2].f = cCamera->mUp.z;
1252 jobject jUp;
1253 if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapVec3", "(FFF)Ljava/lang/Object;", wrapPositionParams, jUp))
1254 {
1255 return false;
1256 }
1257
1258 wrapPositionParams[0].f = cCamera->mLookAt.x;
1259 wrapPositionParams[1].f = cCamera->mLookAt.y;
1260 wrapPositionParams[2].f = cCamera->mLookAt.z;
1261 jobject jLookAt;
1262 if (!callStaticObject(env, "Ljassimp/Jassimp;", "wrapVec3", "(FFF)Ljava/lang/Object;", wrapPositionParams, jLookAt))
1263 {
1264 return false;
1265 }
1266
1267
1268 jobject jCamera;
1269
1270 jvalue params[8];
1271 params[0].l = env->NewStringUTF(cCamera->mName.C_Str());
1272 params[1].l = jPosition;
1273 params[2].l = jUp;
1274 params[3].l = jLookAt;
1275 params[4].f = cCamera->mHorizontalFOV;
1276 params[5].f = cCamera->mClipPlaneNear;
1277 params[6].f = cCamera->mClipPlaneFar;
1278 params[7].f = cCamera->mAspect;
1279
1280 if (!createInstance(env, "jassimp/AiCamera", "(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;FFFF)V",
1281 params, jCamera))
1282 {
1283 return false;
1284 }
1285
1286 /* add camera to m_cameras java.util.List */
1287 jobject jCameras = NULL;
1288
1289 if (!getField(env, jScene, "m_cameras", "Ljava/util/List;", jCameras))
1290 {
1291 return false;
1292 }
1293
1294 jvalue addParams[1];
1295 addParams[0].l = jCamera;
1296 if (!call(env, jCameras, "java/util/Collection", "add", "(Ljava/lang/Object;)Z", addParams))
1297 {
1298 return false;
1299 }
1300 }
1301
1302 lprintf("converting cameras finished\n");
1303
1304 return true;
1305 }
1306
1307
1308 JNIEXPORT jstring JNICALL Java_jassimp_Jassimp_getErrorString
1309 (JNIEnv *env, jclass jClazz)
1310 {
1311 const char *err = aiGetErrorString();
1312
1313 if (NULL == err)
1314 {
1315 return env->NewStringUTF("");
1316 }
1317
1318 return env->NewStringUTF(err);
1319 }
1320
1321
1322 JNIEXPORT jobject JNICALL Java_jassimp_Jassimp_aiImportFile
1323 (JNIEnv *env, jclass jClazz, jstring jFilename, jlong postProcess)
1324 {
1325 jobject jScene = NULL;
1326
1327 /* convert params */
1328 const char* cFilename = env->GetStringUTFChars(jFilename, NULL);
1329
1330
1331 lprintf("opening file: %s\n", cFilename);
1332
1333 /* do import */
1334 const aiScene *cScene = aiImportFile(cFilename, (unsigned int) postProcess);
1335
1336 if (!cScene)
1337 {
1338 lprintf("import file returned null\n");
1339 goto error;
1340 }
1341
1342 if (!createInstance(env, "jassimp/AiScene", jScene))
1343 {
1344 goto error;
1345 }
1346
1347 if (!loadMeshes(env, cScene, jScene))
1348 {
1349 goto error;
1350 }
1351
1352 if (!loadMaterials(env, cScene, jScene))
1353 {
1354 goto error;
1355 }
1356
1357 if (!loadAnimations(env, cScene, jScene))
1358 {
1359 goto error;
1360 }
1361
1362 if (!loadLights(env, cScene, jScene))
1363 {
1364 goto error;
1365 }
1366
1367 if (!loadCameras(env, cScene, jScene))
1368 {
1369 goto error;
1370 }
1371
1372 if (!loadSceneGraph(env, cScene, jScene))
1373 {
1374 goto error;
1375 }
1376
1377 /* jump over error handling section */
1378 goto end;
1379
1380 error:
1381 jclass exception = env->FindClass("java/io/IOException");
1382
1383 if (NULL == exception)
1384 {
1385 /* thats really a problem because we cannot throw in this case */
1386 env->FatalError("could not throw java.io.IOException");
1387 }
1388
1389 env->ThrowNew(exception, aiGetErrorString());
1390
1391 lprintf("problem detected\n");
1392
1393 end:
1394 /*
1395 * NOTE: this releases all memory used in the native domain.
1396 * Ensure all data has been passed to java before!
1397 */
1398 aiReleaseImport(cScene);
1399
1400
1401 /* free params */
1402 env->ReleaseStringUTFChars(jFilename, cFilename);
1403
1404 lprintf("return from native\n");
1405
1406 return jScene;
1407 }
0 /* DO NOT EDIT THIS FILE - it is machine generated */
1 #include <jni.h>
2 /* Header for class jassimp_Jassimp */
3
4 #ifndef _Included_jassimp_Jassimp
5 #define _Included_jassimp_Jassimp
6 #ifdef __cplusplus
7 extern "C" {
8 #endif
9 /* Inaccessible static: BUILTIN */
10 /* Inaccessible static: s_wrapperProvider */
11 /*
12 * Class: jassimp_Jassimp
13 * Method: getErrorString
14 * Signature: ()Ljava/lang/String;
15 */
16 JNIEXPORT jstring JNICALL Java_jassimp_Jassimp_getErrorString
17 (JNIEnv *, jclass);
18
19 /*
20 * Class: jassimp_Jassimp
21 * Method: aiImportFile
22 * Signature: (Ljava/lang/String;J)Ljassimp/AiScene;
23 */
24 JNIEXPORT jobject JNICALL Java_jassimp_Jassimp_aiImportFile
25 (JNIEnv *, jclass, jstring, jlong);
26
27 #ifdef __cplusplus
28 }
29 #endif
30 #endif
+0
-13
port/unmaintained/dAssimp/README less more
0 D bindings for the Assimp library (http://assimp.sf.net).
1 ---
2
3 These bindings provide access to Assimp's C API. They were directly created
4 from the C header files.
5
6 You should be able to create sufficient DDoc documentation for the bindings
7 using your favourite build tool (such as Rebuild). Please refer to the main
8 (Doxygen-generated) documentation for general topics.
9
10 Please note that the bindings have only been tested on 32 bit systems, they have
11 yet to be adapted for the different size of the integer types in 64 bit builds
12 of Assimp.
+0
-240
port/unmaintained/dAssimp/assimp/animation.d less more
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * The data structures which are used to store the imported animation data.
43 */
44 module assimp.animation;
45
46 import assimp.math;
47 import assimp.types;
48
49 extern ( C ) {
50 /**
51 * A time-value pair specifying a certain 3D vector for the given time.
52 */
53 struct aiVectorKey {
54 /**
55 * The time of this key.
56 */
57 double mTime;
58
59 /**
60 * The value of this key.
61 */
62 aiVector3D mValue;
63 }
64
65 /**
66 * A time-value pair specifying a rotation for the given time. For joint
67 * animations, the rotation is usually expressed using a quaternion.
68 */
69 struct aiQuatKey {
70 /**
71 * The time of this key.
72 */
73 double mTime;
74
75 /**
76 * The value of this key.
77 */
78 aiQuaternion mValue;
79 }
80
81 /**
82 * Defines how an animation channel behaves outside the defined time
83 * range. This corresponds to <code>aiNodeAnim.mPreState</code> and
84 * <code>aiNodeAnim.mPostState</code>.
85 */
86 enum aiAnimBehaviour : uint {
87 /**
88 * The value from the default node transformation is used.
89 */
90 DEFAULT = 0x0,
91
92 /**
93 * The nearest key value is used without interpolation.
94 */
95 CONSTANT = 0x1,
96
97 /**
98 * The value of the nearest two keys is linearly extrapolated for the
99 * current time value.
100 */
101 LINEAR = 0x2,
102
103 /**
104 * The animation is repeated.
105 *
106 * If the animation key go from n to m and the current time is t, use the
107 * value at (t-n) % (|m-n|).
108 */
109 REPEAT = 0x3
110 }
111
112 /**
113 * Describes the animation of a single node.
114 *
115 * The name specifies the bone/node which is affected by this animation
116 * channel. The keyframes are given in three separate series of values, one
117 * each for position, rotation and scaling. The transformation matrix
118 * computed from these values replaces the node's original transformation
119 * matrix at a specific time. This means all keys are absolute and not
120 * relative to the bone default pose.
121 *
122 * The order in which the transformations are applied is –
123 * as usual – scaling, rotation, translation.
124 *
125 * Note: All keys are returned in their correct, chronological order.
126 * Duplicate keys don't pass the validation step. Most likely there will
127 * be no negative time values, but they are not forbidden (so
128 * implementations need to cope with them!).
129 */
130 struct aiNodeAnim {
131 /**
132 * The name of the node affected by this animation. The node must exist
133 * and it must be unique.
134 */
135 aiString mNodeName;
136
137 /**
138 * The number of position keys.
139 */
140 uint mNumPositionKeys;
141
142 /**
143 * The position keys of this animation channel. Positions are specified
144 * as 3D vectors. The array is <code>mNumPositionKeys</code> in size.
145 *
146 * If there are position keys, there will also be at least one scaling
147 * and one rotation key.
148 */
149 aiVectorKey* mPositionKeys;
150
151 /**
152 * The number of rotation keys.
153 */
154 uint mNumRotationKeys;
155
156 /**
157 * The rotation keys of this animation channel. Rotations are given as
158 * quaternions. The array is <code>mNumRotationKeys</code> in size.
159 *
160 * If there are rotation keys, there will also be at least one scaling
161 * and one position key.
162 */
163 aiQuatKey* mRotationKeys;
164
165
166 /**
167 * The number of scaling keys.
168 */
169 uint mNumScalingKeys;
170
171 /**
172 * The scaling keys of this animation channel. Scalings are specified as
173 * 3D vectors. The array is <code>mNumScalingKeys</code> in size.
174 *
175 * If there are scaling keys, there will also be at least one position
176 * and one rotation key.
177 */
178 aiVectorKey* mScalingKeys;
179
180
181 /**
182 * Defines how the animation behaves before the first key is encountered.
183 *
184 * The default value is <code>aiAnimBehaviour.DEFAULT</code> (the original
185 * transformation matrix of the affected node is used).
186 */
187 aiAnimBehaviour mPreState;
188
189 /**
190 * Defines how the animation behaves after the last key was processed.
191 *
192 * The default value is <code>aiAnimBehaviour.DEFAULT</code> (the original
193 * transformation matrix of the affected node is used).
194 */
195 aiAnimBehaviour mPostState;
196 }
197
198 /**
199 * An animation consists of keyframe data for a number of nodes.
200 *
201 * For each node affected by the animation, a separate series of data is
202 * given.
203 */
204 struct aiAnimation {
205 /**
206 * The name of the animation.
207 *
208 * If the modeling package this data was
209 * exported from does support only a single animation channel, this
210 * name is usually empty (length is zero).
211 */
212 aiString mName;
213
214 /**
215 * Duration of the animation in ticks.
216 */
217 double mDuration;
218
219 /**
220 * Ticks per second. 0 if not specified in the imported file.
221 */
222 double mTicksPerSecond;
223
224 /**
225 * The number of bone animation channels.
226 *
227 * Each channel affects a single node.
228 */
229 uint mNumChannels;
230
231 /**
232 * The node animation channels. The array is <code>mNumChannels</code>
233 * in size.
234 *
235 * Each channel affects a single node.
236 */
237 aiNodeAnim** mChannels;
238 }
239 }
+0
-686
port/unmaintained/dAssimp/assimp/api.d less more
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * The C-style interface to the Open Asset import library.
43 *
44 * All functions of the C API have been collected in this module as function
45 * pointers, which are set by the dynamic library loader
46 * (<code>assimp.loader</code>).
47 */
48 module assimp.api;
49
50 import assimp.fileIO;
51 import assimp.material;
52 import assimp.math;
53 import assimp.scene;
54 import assimp.types;
55
56 extern ( C ) {
57 /**
58 * Reads the given file and returns its content.
59 *
60 * If the call succeeds, the imported data is returned in an <code>aiScene</code>
61 * structure. The data is intended to be read-only, it stays property of the
62 * Assimp library and will be stable until <code>aiReleaseImport()</code> is
63 * called. After you're done with it, call <code>aiReleaseImport()</code> to
64 * free the resources associated with this file.
65 *
66 * If an error is encountered, null is returned instead. Call
67 * <code>aiGetErrorString()</code> to retrieve a human-readable error
68 * description.
69 *
70 * Params:
71 * pFile = Path and filename of the file to be imported,
72 * expected to be a null-terminated C-string. null is not a valid value.
73 * pFlags = Optional post processing steps to be executed after a
74 * successful import. Provide a bitwise combination of the
75 * <code>aiPostProcessSteps</code> flags. If you wish to inspect the
76 * imported scene first in order to fine-tune your post-processing
77 * setup, consider to use <code>aiApplyPostProcessing()</code>.
78 *
79 * Returns:
80 * A pointer to the imported data, null if the import failed.
81 */
82 aiScene* function( char* pFile, uint pFile ) aiImportFile;
83
84 /**
85 * Reads the given file using user-defined I/O functions and returns its
86 * content.
87 *
88 * If the call succeeds, the imported data is returned in an <code>aiScene</code>
89 * structure. The data is intended to be read-only, it stays property of the
90 * Assimp library and will be stable until <code>aiReleaseImport()</code> is
91 * called. After you're done with it, call <code>aiReleaseImport()</code> to
92 * free the resources associated with this file.
93 *
94 * If an error is encountered, null is returned instead. Call
95 * <code>aiGetErrorString()</code> to retrieve a human-readable error
96 * description.
97 *
98 * Params:
99 * pFile = Path and filename of the file to be imported,
100 * expected to be a null-terminated C-string. null is not a valid value.
101 * pFlags = Optional post processing steps to be executed after a
102 * successful import. Provide a bitwise combination of the
103 * <code>aiPostProcessSteps</code> flags. If you wish to inspect the
104 * imported scene first in order to fine-tune your post-processing
105 * setup, consider to use <code>aiApplyPostProcessing()</code>.
106 * pFS = An aiFileIO which will be used to open the model file itself
107 * and any other files the loader needs to open.
108 *
109 * Returns:
110 * A pointer to the imported data, null if the import failed.
111 */
112 aiScene* function( char* pFile, uint pFlags, aiFileIO* pFS ) aiImportFileEx;
113
114 /**
115 * Reads the scene from the given memory buffer.
116 *
117 * Reads the given file using user-defined I/O functions and returns its
118 * content.
119 *
120 * If the call succeeds, the imported data is returned in an <code>aiScene</code>
121 * structure. The data is intended to be read-only, it stays property of the
122 * Assimp library and will be stable until <code>aiReleaseImport()</code> is
123 * called. After you're done with it, call <code>aiReleaseImport()</code> to
124 * free the resources associated with this file.
125 *
126 * If an error is encountered, null is returned instead. Call
127 * <code>aiGetErrorString()</code> to retrieve a human-readable error
128 * description.
129 *
130 * Params:
131 * pBuffer = Pointer to the scene data.
132 * pLength = Size of pBuffer in bytes.
133 * pFlags = Optional post processing steps to be executed after a
134 * successful import. Provide a bitwise combination of the
135 * <code>aiPostProcessSteps</code> flags. If you wish to inspect the
136 * imported scene first in order to fine-tune your post-processing
137 * setup, consider to use <code>aiApplyPostProcessing()</code>.
138 * pHint = An additional hint to the library. If this is a non empty
139 * string, the library looks for a loader to support the file
140 * extension specified and passes the file to the first matching
141 * loader. If this loader is unable to complete the request, the
142 * library continues and tries to determine the file format on its
143 * own, a task that may or may not be successful.
144 *
145 * Returns:
146 * A pointer to the imported data, null if the import failed.
147 *
148 * Note:
149 * This is a straightforward way to decode models from memory buffers,
150 * but it doesn't handle model formats spreading their data across
151 * multiple files or even directories. Examples include OBJ or MD3, which
152 * outsource parts of their material stuff into external scripts. If you
153 * need the full functionality, provide a custom IOSystem to make Assimp
154 * find these files.
155 */
156 aiScene* function(
157 char* pBuffer,
158 uint pLength,
159 uint pFlags,
160 char* pHint
161 ) aiImportFileFromMemory;
162
163 /**
164 * Apply post-processing to an already-imported scene.
165 *
166 * This is strictly equivalent to calling <code>aiImportFile()</code> or
167 * <code>aiImportFileEx()</code> with the same flags. However, you can use
168 * this separate function to inspect the imported scene first to fine-tune
169 * your post-processing setup.
170 *
171 * Params:
172 * pScene = Scene to work on.
173 * pFlags = Provide a bitwise combination of the
174 * <code>aiPostProcessSteps</code> flags.
175 *
176 * Returns:
177 * A pointer to the post-processed data. Post processing is done in-place,
178 * meaning this is still the same <code>aiScene</code> which you passed
179 * for pScene. However, if post-processing failed, the scene could now be
180 * null. That's quite a rare case, post processing steps are not really
181 * designed to fail. To be exact, <code>aiProcess.ValidateDS</code> is
182 * currently the only post processing step which can actually cause the
183 * scene to be reset to null.
184 */
185 aiScene* function( aiScene* pScene, uint pFlags ) aiApplyPostProcessing;
186
187 /**
188 * Get one of the predefined log streams. This is the quick'n'easy solution
189 * to access Assimp's log system. Attaching a log stream can slightly reduce
190 * Assimp's overall import performance.
191 *
192 * Examples:
193 * ---
194 * aiLogStream stream = aiGetPredefinedLogStream(
195 * aiDefaultLogStream.FILE, "assimp.log.txt" );
196 * if ( stream.callback !is null ) {
197 * aiAttachLogStream( &stream );
198 * }
199 * ---
200 *
201 * Params:
202 * pStreams = The log stream destination.
203 * file = Solely for the <code>aiDefaultLogStream.FILE</code> flag:
204 * specifies the file to write to. Pass null for all other flags.
205 *
206 * Returns:
207 * The log stream, null if something went wrong.
208 */
209 aiLogStream function( aiDefaultLogStream pStreams, char* file ) aiGetPredefinedLogStream;
210
211 /**
212 * Attach a custom log stream to the libraries' logging system.
213 *
214 * Attaching a log stream can slightly reduce Assimp's overall import
215 * performance. Multiple log-streams can be attached.
216 *
217 * Params:
218 * stream = Describes the new log stream.
219 *
220 * Note: To ensure proper destruction of the logging system, you need to
221 * manually call <code>aiDetachLogStream()</code> on every single log
222 * stream you attach. Alternatively, <code>aiDetachAllLogStreams()</code>
223 * is provided.
224 */
225 void function( aiLogStream* stream ) aiAttachLogStream;
226
227 /**
228 * Enable verbose logging.
229 *
230 * Verbose logging includes debug-related stuff and detailed import
231 * statistics. This can have severe impact on import performance and memory
232 * consumption. However, it might be useful to find out why a file is not
233 * read correctly.
234 *
235 * Param:
236 * d = Whether verbose logging should be enabled.
237 */
238 void function( aiBool d ) aiEnableVerboseLogging;
239
240 /**
241 * Detach a custom log stream from the libraries' logging system.
242 *
243 * This is the counterpart of #aiAttachPredefinedLogStream. If you attached a stream,
244 * don't forget to detach it again.
245 *
246 * Params:
247 * stream = The log stream to be detached.
248 *
249 * Returns:
250 * <code>aiReturn.SUCCESS</code> if the log stream has been detached
251 * successfully.
252 *
253 * See: <code>aiDetachAllLogStreams</code>
254 */
255 aiReturn function( aiLogStream* stream ) aiDetachLogStream;
256
257 /**
258 * Detach all active log streams from the libraries' logging system.
259 *
260 * This ensures that the logging system is terminated properly and all
261 * resources allocated by it are actually freed. If you attached a stream,
262 * don't forget to detach it again.
263 *
264 * See: <code>aiAttachLogStream</code>, <code>aiDetachLogStream</code>
265 */
266 void function() aiDetachAllLogStreams;
267
268 /**
269 * Releases all resources associated with the given import process.
270 *
271 * Call this function after you're done with the imported data.
272 *
273 * Params:
274 * pScene = The imported data to release. null is a valid value.
275 */
276 void function( aiScene* pScene ) aiReleaseImport;
277
278 /**
279 * Returns the error text of the last failed import process.
280 *
281 * Returns:
282 * A textual description of the error that occurred at the last importing
283 * process. null if there was no error. There can't be an error if you
284 * got a non-null <code>aiScene</code> from
285 * <code>aiImportFile()/aiImportFileEx()/aiApplyPostProcessing()</code>.
286 */
287 char* function() aiGetErrorString;
288
289 /**
290 * Returns whether a given file extension is supported by this Assimp build.
291 *
292 * Params:
293 * szExtension = Extension for which to query support. Must include a
294 * leading dot '.'. Example: ".3ds", ".md3"
295 *
296 * Returns:
297 * <code>TRUE</code> if the file extension is supported.
298 */
299 aiBool function( char* szExtension ) aiIsExtensionSupported;
300
301 /**
302 * Gets a list of all file extensions supported by ASSIMP.
303 *
304 * Format of the list: "*.3ds;*.obj;*.dae".
305 *
306 * If a file extension is contained in the list this does, of course, not
307 * mean that Assimp is able to load all files with this extension.
308 *
309 * Params:
310 * szOut = String to receive the extension list. null is not a valid
311 * parameter.
312 */
313 void function( aiString* szOut ) aiGetExtensionList;
314
315 /**
316 * Gets the storage required by an imported asset
317 *
318 * Params:
319 * pIn = Asset to query storage size for.
320 * info = Data structure to be filled.
321 */
322 void function( aiScene* pIn, aiMemoryInfo* info ) aiGetMemoryRequirements;
323
324 /**
325 * Sets an integer property.
326 *
327 * Properties are always shared by all imports. It is not possible to
328 * specify them per import.
329 *
330 * Params:
331 * szName = Name of the configuration property to be set. All supported
332 * public properties are defined in the <code>config</code> module.
333 * value = New value for the property.
334 */
335 void function( char* szName, int value ) aiSetImportPropertyInteger;
336
337 /**
338 * Sets a floating-point property.
339 *
340 * Properties are always shared by all imports. It is not possible to
341 * specify them per import.
342 *
343 * Params:
344 * szName = Name of the configuration property to be set. All supported
345 * public properties are defined in the <code>config</code> module.
346 * value = New value for the property.
347 */
348 void function( char* szName, float value ) aiSetImportPropertyFloat;
349
350 /**
351 * Sets a string property.
352 *
353 * Properties are always shared by all imports. It is not possible to
354 * specify them per import.
355 *
356 * Params:
357 * szName = Name of the configuration property to be set. All supported
358 * public properties are defined in the <code>config</code> module.
359 * st = New value for the property.
360 */
361 void function( char* szName, aiString* st ) aiSetImportPropertyString;
362
363
364 /*
365 * Mathematical helper functions.
366 */
367
368 /**
369 * Constructs a quaternion from a 3x3 rotation matrix.
370 *
371 * Params:
372 * quat = Receives the output quaternion.
373 * mat = Matrix to 'quaternionize'.
374 */
375 void function( aiQuaternion* quat, aiMatrix3x3* mat ) aiCreateQuaternionFromMatrix;
376
377 /**
378 * Decomposes a transformation matrix into its rotational, translational and
379 * scaling components.
380 *
381 * Params:
382 * mat = Matrix to decompose.
383 * scaling = Receives the scaling component.
384 * rotation = Receives the rotational component.
385 * position = Receives the translational component.
386 */
387 void function(
388 aiMatrix4x4* mat,
389 aiVector3D* scaling,
390 aiQuaternion* rotation,
391 aiVector3D* position
392 ) aiDecomposeMatrix;
393
394 /**
395 * Transposes a 4x4 matrix (in-place).
396 *
397 * Params:
398 * mat = The matrix to be transposed.
399 */
400 void function( aiMatrix4x4* mat ) aiTransposeMatrix4;
401
402 /**
403 * Transposes a 3x3 matrix (in-place).
404 *
405 * Params:
406 * mat = The matrix to be transposed.
407 */
408 void function( aiMatrix3x3* mat ) aiTransposeMatrix3;
409
410 /**
411 * Transforms a vector by a 3x3 matrix (in-place).
412 *
413 * Params:
414 * vec = Vector to be transformed.
415 * mat = Matrix to transform the vector with.
416 */
417 void function( aiVector3D* vec, aiMatrix3x3* mat ) aiTransformVecByMatrix3;
418
419 /**
420 * Transforms a vector by a 4x4 matrix (in-place).
421 *
422 * Params:
423 * vec = Vector to be transformed.
424 * mat = Matrix to transform the vector with.
425 */
426 void function( aiVector3D* vec, aiMatrix4x4* mat ) aiTransformVecByMatrix4;
427
428 /**
429 * Multiplies two 4x4 matrices.
430 *
431 * Params:
432 * dst = First factor, receives result.
433 * src = Matrix to be multiplied with 'dst'.
434 */
435 void function( aiMatrix4x4* dst, aiMatrix4x4* src ) aiMultiplyMatrix4;
436
437 /**
438 * Multiplies two 3x3 matrices.
439 *
440 * Params:
441 * dst = First factor, receives result.
442 * src = Matrix to be multiplied with 'dst'.
443 */
444 void function( aiMatrix3x3* dst, aiMatrix3x3* src ) aiMultiplyMatrix3;
445
446 /**
447 * Constructs a 3x3 identity matrix.
448 *
449 * Params:
450 * mat = Matrix to receive its personal identity.
451 */
452 void function( aiMatrix3x3* mat ) aiIdentityMatrix3;
453
454 /**
455 * Constructs a 4x4 identity matrix.
456 *
457 * Params:
458 * mat = Matrix to receive its personal identity.
459 */
460 void function( aiMatrix4x4* mat ) aiIdentityMatrix4;
461
462
463 /*
464 * Material system functions.
465 */
466
467 /**
468 * Retrieves a material property with a specific key from the material.
469 *
470 * Params:
471 * pMat = Pointer to the input material. May not be null.
472 * pKey = Key to search for. One of the <code>AI_MATKEY_XXX</code>
473 * constants.
474 * type = Specifies the <code>aiTextureType</code> of the texture to be
475 * retrieved, 0 for non-texture properties.
476 * index = Index of the texture to be retrieved,
477 * 0 for non-texture properties.
478 * pPropOut = Pointer to receive a pointer to a valid
479 * <code>aiMaterialProperty</code> structure or null if the key has
480 * not been found.
481 */
482 aiReturn function(
483 aiMaterial* pMat,
484 char* pKey,
485 uint type,
486 uint index,
487 aiMaterialProperty** pPropOut
488 ) aiGetMaterialProperty;
489
490 /**
491 * Retrieves a single float value or an array of float values from the
492 * material.
493 *
494 * Examples:
495 * ---
496 * const FLOATS_IN_UV_TRANSFORM = ( aiUVTransform.sizeof / float.sizeof );
497 * uint valuesRead = FLOATS_IN_UV_TRANSFORM;
498 * bool success =
499 * ( aiGetMaterialFloatArray( &material, AI_MATKEY_UVTRANSFORM,
500 * aiTextureType.DIFFUSE, 0, cast( float* ) &trafo, &valuesRead ) ==
501 * aiReturn.SUCCESS ) &&
502 * ( valuesRead == FLOATS_IN_UV_TRANSFORM );
503 * ---
504 *
505 * Params:
506 * pMat = Pointer to the input material. May not be null.
507 * pKey = Key to search for. One of the AI_MATKEY_XXX constants.
508 * type = Specifies the <code>aiTextureType</code> of the texture to be
509 * retrieved, 0 for non-texture properties.
510 * index = Index of the texture to be retrieved,
511 * 0 for non-texture properties.
512 * pOut = Pointer to a buffer to receive the result.
513 * pMax = Specifies the size of the given buffer in floats. Receives the
514 * number of values (not bytes!) read. null to read a scalar property.
515 *
516 * Returns:
517 * Specifies whether the key has been found. If not, the output arrays
518 * remains unmodified and pMax is set to 0.
519 */
520 aiReturn function(
521 aiMaterial* pMat,
522 char* pKey,
523 uint type,
524 uint index,
525 float* pOut,
526 uint* pMax = null
527 ) aiGetMaterialFloatArray;
528
529 /**
530 * Convenience alias for <code>aiGetMaterialFloatArray()</code>.
531 */
532 alias aiGetMaterialFloatArray aiGetMaterialFloat;
533
534 /**
535 * Retrieves a single integer value or an array of integer values from the
536 * material.
537 *
538 * See: <code>aiGetMaterialFloatArray()</code>
539 */
540 aiReturn function(
541 aiMaterial* pMat,
542 char* pKey,
543 uint type,
544 uint index,
545 int* pOut,
546 uint* pMax = null
547 ) aiGetMaterialIntegerArray;
548
549 /**
550 * Convenience alias for <code>aiGetMaterialIntegerArray()</code>.
551 */
552 alias aiGetMaterialIntegerArray aiGetMaterialInteger;
553
554 /**
555 * Retrieves a color value from the material.
556 *
557 * See: <code>aiGetMaterialFloatArray()</code>
558 */
559 aiReturn function(
560 aiMaterial* pMat,
561 char* pKey,
562 uint type,
563 uint index,
564 aiColor4D* pOut
565 ) aiGetMaterialColor;
566
567 /**
568 * Retrieves a string value from the material.
569 *
570 * See: <code>aiGetMaterialFloatArray()</code>
571 */
572 aiReturn function(
573 aiMaterial* pMat,
574 char* pKey,
575 uint type,
576 uint index,
577 aiString* pOut
578 ) aiGetMaterialString;
579
580 /**
581 * Get the number of textures for a particular texture type.
582 *
583 * Params:
584 * pMat = Pointer to the input material. May not be NULL
585 * type = Texture type to check for
586 *
587 * Returns:
588 * Number of textures for this type.
589 */
590 uint function( aiMaterial* pMat, aiTextureType type ) aiGetMaterialTextureCount;
591
592 /**
593 * Helper function to get all values pertaining to a particular texture slot
594 * from a material structure.
595 *
596 * This function is provided just for convenience. You could also read the
597 * texture by parsing all of its properties manually. This function bundles
598 * all of them in a huge function monster.
599 *
600 * Params:
601 * mat = Pointer to the input material. May not be null.
602 * type = Specifies the texture stack (<code>aiTextureType</code>) to
603 * read from.
604 * index = Index of the texture. The function fails if the requested
605 * index is not available for this texture type.
606 * <code>aiGetMaterialTextureCount()</code> can be used to determine
607 * the number of textures in a particular texture stack.
608 * path = Receives the output path. null is not a valid value.
609 * mapping = Recieves the texture mapping mode to be used.
610 * Pass null if you are not interested in this information.
611 * uvindex = For UV-mapped textures: receives the index of the UV source
612 * channel. Unmodified otherwise. Pass null if you are not interested
613 * in this information.
614 * blend = Receives the blend factor for the texture.
615 * Pass null if you are not interested in this information.
616 * op = Receives the texture blend operation to be perform between this
617 * texture and the previous texture. Pass null if you are not
618 * interested in this information.
619 * mapmode = Receives the mapping modes to be used for the texture. Pass
620 * a pointer to an array of two aiTextureMapMode's (one for each axis,
621 * UV order) or null if you are not interested in this information.
622 *
623 * Returns:
624 * <code>aiReturn.SUCCESS</code> on success, otherwise something else.
625 */
626 aiReturn function(
627 aiMaterial* mat,
628 aiTextureType type,
629 uint index,
630 aiString* path,
631 aiTextureMapping* mapping = null,
632 uint* uvindex = null,
633 float* blend = null,
634 aiTextureOp* op = null,
635 aiTextureMapMode* mapmode = null
636 ) aiGetMaterialTexture;
637
638
639 /*
640 * Versioning functions.
641 */
642
643 /**
644 * Returns a string with legal copyright and licensing information about
645 * Assimp.
646 *
647 * The string may include multiple lines.
648 *
649 * Returns:
650 * Pointer to static string.
651 */
652 char* function() aiGetLegalString;
653
654 /**
655 * Returns the current minor version number of the Assimp library.
656 *
657 * Returns:
658 * Minor version of the Assimp library.
659 */
660 uint function() aiGetVersionMinor;
661
662 /**
663 * Returns the current major version number of the Assimp library.
664 *
665 * Returns:
666 * Major version of the Assimp library.
667 */
668 uint function() aiGetVersionMajor;
669
670 /**
671 * Returns the repository revision of the Assimp library.
672 *
673 * Returns:
674 * SVN Repository revision number of the Assimp library.
675 */
676 uint function() aiGetVersionRevision;
677
678 /**
679 * Returns the flags Assimp was compiled with.
680 *
681 * Returns:
682 * Any bitwise combination of the ASSIMP_CFLAGS_xxx constants.
683 */
684 uint function() aiGetCompileFlags;
685 }
+0
-63
port/unmaintained/dAssimp/assimp/assimp.d less more
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Include-all module provided for convenience.
43 */
44 module assimp.assimp;
45
46 public {
47 import assimp.animation;
48 import assimp.api;
49 import assimp.camera;
50 import assimp.config;
51 import assimp.fileIO;
52 import assimp.light;
53 import assimp.loader;
54 import assimp.material;
55 import assimp.math;
56 import assimp.mesh;
57 import assimp.postprocess;
58 import assimp.scene;
59 import assimp.texture;
60 import assimp.types;
61 import assimp.versionInfo;
62 }
+0
-182
port/unmaintained/dAssimp/assimp/camera.d less more
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Contains the data structure which is used to store the imported information
43 * about the virtual cameras in the scene.
44 */
45 module assimp.camera;
46
47 import assimp.math;
48 import assimp.types;
49
50 extern ( C ) {
51 /**
52 * Helper structure to describe a virtual camera.
53 *
54 * Cameras have a representation in the node graph and can be animated.
55 * An important aspect is that the camera itself is also part of the
56 * scenegraph. This means, any values such as the look-at vector are not
57 * absolute, they're <em>relative</em> to the coordinate system defined
58 * by the node which corresponds to the camera. This allows for camera
59 * animations. Static cameras parameters like the look-at or up vectors are
60 * usually specified directly in the class members, but beware, they could
61 * also be encoded in the node transformation. The following (pseudo)code
62 * sample shows how to do it.
63 *
64 * Examples:
65 * ---
66 * // Get the camera matrix for a camera at a specific time
67 * // if the node hierarchy for the camera does not contain
68 * // at least one animated node this is a static computation
69 * get-camera-matrix (node sceneRoot, camera cam) : matrix
70 * {
71 * node cnd = find-node-for-camera(cam)
72 * matrix cmt = identity()
73 *
74 * // as usual - get the absolute camera transformation for this frame
75 * for each node nd in hierarchy from sceneRoot to cnd
76 * matrix cur
77 * if (is-animated(nd))
78 * cur = eval-animation(nd)
79 * else cur = nd->mTransformation;
80 * cmt = mult-matrices( cmt, cur )
81 * end for
82 *
83 * // now multiply with the camera's own local transform
84 * cam = mult-matrices (cam, get-camera-matrix(cmt) )
85 * }
86 * ---
87 *
88 * Note: Some file formats (such as 3DS, ASE) export a "target point" – the
89 * point the camera is looking at (it can even be animated). Assimp
90 * writes the target point as a subnode of the camera's main node, called
91 * "<camName>.Target". However, this is just additional information; the
92 * transformation applied to the main camera node already makes the
93 * camera face the right direction.
94 */
95 struct aiCamera {
96 /**
97 * The name of the camera.
98 *
99 * There must be a node in the scenegraph with the same name. This node
100 * specifies the position of the camera in the scene hierarchy and can
101 * be animated.
102 */
103 aiString mName;
104
105
106 /**
107 * Position of the camera relative to the coordinate space defined by the
108 * corresponding node.
109 *
110 * The default value is 0|0|0.
111 */
112 aiVector3D mPosition;
113
114 /**
115 * Up vector of the camera coordinate system relative to the
116 * coordinate space defined by the corresponding node.
117 *
118 * The right vector of the camera coordinate system is the cross
119 * product of the up and lookAt vectors.
120 *
121 * The default value is 0|1|0. The vector may be normalized, but it
122 * needn't.
123 */
124 aiVector3D mUp;
125
126 /**
127 * Look-at vector of the camera coordinate system relative to the
128 * coordinate space defined by the corresponding node.
129 *
130 * This is the viewing direction of the user.
131 *
132 * The default value is 0|0|1. The vector may be normalized, but it
133 * needn't.
134 */
135 aiVector3D mLookAt;
136
137
138 /**
139 * Half horizontal field of view angle, in radians.
140 *
141 * The field of view angle is the angle between the center line of the
142 * screen and the left or right border.
143 *
144 * The default value is PI/4.
145 */
146 float mHorizontalFOV;
147
148 /**
149 * Distance of the near clipping plane from the camera.
150 *
151 * The value may not be 0.f (for arithmetic reasons to prevent
152 * a division through zero).
153 *
154 * The default value is 0.1f.
155 */
156 float mClipPlaneNear;
157
158 /**
159 * Distance of the far clipping plane from the camera.
160 *
161 * The far clipping plane must, of course, be further away than the
162 * near clipping plane. The ratio between the near and the far plane
163 * should not be too large (between 1000-10000 should be ok) to avoid
164 * floating-point inaccuracies which could lead to z-fighting.
165 *
166 * The default value is 1000.f.
167 */
168 float mClipPlaneFar;
169
170 /**
171 * Screen aspect ratio.
172 *
173 * This is the ration between the width and the height of the
174 * screen. Typical values are 4/3, 1/2 or 1/1. This value is
175 * 0 if the aspect ratio is not defined in the source file.
176 *
177 * 0 is also the default value.
178 */
179 float mAspect;
180 }
181 }
+0
-705
port/unmaintained/dAssimp/assimp/config.d less more
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Defines constants for configurable properties for the library.
43 *
44 * These are set via <code>aiSetImportPropertyInteger()</code>,
45 * <code>aiSetImportPropertyFloat()</code> and
46 * <code>aiSetImportPropertyString()</code>.
47 */
48 module assimp.config;
49
50 extern ( C ) {
51 /*
52 * Library settings.
53 *
54 * General, global settings.
55 */
56
57 /**
58 * Enables time measurements.
59 *
60 * If enabled, measures the time needed for each part of the loading
61 * process (i.e. IO time, importing, postprocessing, ..) and dumps these
62 * timings to the DefaultLogger. See the performance page in the main
63 * Assimp docs information on this topic.
64 *
65 * Property type: bool. Default value: false.
66 */
67 const char* AI_CONFIG_GLOB_MEASURE_TIME = "GLOB_MEASURE_TIME";
68
69 version( none ) { // not implemented yet
70 /**
71 * Set Assimp's multithreading policy.
72 *
73 * This setting is ignored if Assimp was built without boost.thread support
74 * (<code>ASSIMP_BUILD_NO_THREADING</code>, which is implied by
75 * <code>ASSIMP_BUILD_BOOST_WORKAROUND</code>).
76 *
77 * Possible values are: -1 to let Assimp decide what to do, 0 to disable
78 * multithreading entirely and any number larger than 0 to force a specific
79 * number of threads. Assimp is always free to ignore this settings, which
80 * is merely a hint. Usually, the default value (-1) will be fine. However,
81 * if Assimp is used concurrently from multiple user threads, it might be
82 * useful to limit each Importer instance to a specific number of cores.
83 *
84 * For more information, see the threading page in the main Assimp docs.
85 *
86 * Property type: int, default value: -1.
87 */
88 const char* AI_CONFIG_GLOB_MULTITHREADING = "GLOB_MULTITHREADING";
89 }
90
91
92 /*
93 * Post processing settings.
94 *
95 * Various options to fine-tune the behavior of a specific post processing step.
96 */
97
98 /**
99 * Specifies the maximum angle that may be between two vertex tangents that
100 * their tangents and bitangents are smoothed.
101 *
102 * This applies to the <code>CalcTangentSpace</code> step. The angle is
103 * specified in degrees, so 180 corresponds to PI radians.
104 *
105 * The default value is 45, the maximum value is 175.
106 *
107 * Property type: float.
108 */
109 const char* AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE = "PP_CT_MAX_SMOOTHING_ANGLE";
110
111 /**
112 * Specifies the maximum angle that may be between two face normals at the
113 * same vertex position that their are smoothed together. Sometimes referred
114 * to as 'crease angle'.
115 *
116 * This applies to the <code>GenSmoothNormals</code> step. The angle is
117 * specified in degrees, so 180 corresponds to PI radians.
118 *
119 * The default value is 175 degrees (all vertex normals are smoothed), the
120 * maximum value is 175, too.
121 *
122 * Property type: float.
123 *
124 * Warning:
125 * Setting this option may cause a severe loss of performance. The
126 * performance is unaffected if the <code>AI_CONFIG_FAVOUR_SPEED</code>
127 * flag is set but the output quality may be reduced.
128 */
129 const char* AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE = "PP_GSN_MAX_SMOOTHING_ANGLE";
130
131 /**
132 * Sets the colormap (= palette) to be used to decode embedded textures in
133 * MDL (Quake or 3DGS) files.
134 *
135 * This must be a valid path to a file. The file is 768 (256*3) bytes large
136 * and contains RGB triplets for each of the 256 palette entries. The
137 * default value is colormap.lmp. If the file is not found, a default
138 * palette (from Quake 1) is used.
139 *
140 * Property type: string.
141 */
142 const char* AI_CONFIG_IMPORT_MDL_COLORMAP = "IMPORT_MDL_COLORMAP";
143
144 /**
145 * Configures the <code>RemoveRedundantMaterials</code> step to keep
146 * materials matching a name in a given list.
147 *
148 * This is a list of 1 to n strings, ' ' serves as delimiter character.
149 * Identifiers containing whitespaces must be enclosed in <em>single</em>
150 * quotation marks. For example: <code>
151 * "keep-me and_me_to anotherMaterialToBeKept \'name with whitespace\'"</code>.
152 * Linefeeds, tabs or carriage returns are treated as whitespace.
153 *
154 * If a material matches on of these names, it will not be modified or
155 * removed by the postprocessing step nor will other materials be replaced
156 * by a reference to it.
157 *
158 * This option might be useful if you are using some magic material names
159 * to pass additional semantics through the content pipeline. This ensures
160 * they won't be optimized away, but a general optimization is still
161 * performed for materials not contained in the list.
162 *
163 * Default value: n/a
164 *
165 * Property type: string.
166 *
167 * Note: Material names are case sensitive.
168 */
169 const char* AI_CONFIG_PP_RRM_EXCLUDE_LIST = "PP_RRM_EXCLUDE_LIST";
170
171 /**
172 * Configures the <code>PretransformVertices</code> step to keep the scene
173 * hierarchy. Meshes are moved to worldspace, but no optimization is
174 * performed (meshes with equal materials are not joined, the total number
175 * of meshes will not change).
176 *
177 * This option could be of use for you if the scene hierarchy contains
178 * important additional information which you intend to parse.
179 * For rendering, you can still render all meshes in the scene without
180 * any transformations.
181 *
182 * Default value: false.
183 *
184 * Property type: bool.
185 */
186 const char* AI_CONFIG_PP_PTV_KEEP_HIERARCHY = "PP_PTV_KEEP_HIERARCHY";
187
188 /**
189 * Configures the <code>PretransformVertices</code> step to normalize all
190 * vertex components into the -1...1 range. That is, a bounding box for the
191 * whole scene is computed, the maximum component is taken and all meshes
192 * are scaled appropriately (uniformly of course!).
193 *
194 * This might be useful if you don't know the spatial dimension of the input
195 * data.
196 */
197 const char* AI_CONFIG_PP_PTV_NORMALIZE = "PP_PTV_NORMALIZE";
198
199 /**
200 * Configures the <code>FindDegenerates</code> step to remove degenerated
201 * primitives from the import – immediately.
202 *
203 * The default behaviour converts degenerated triangles to lines and
204 * degenerated lines to points. See the documentation to the
205 * <code>FindDegenerates</code> step for a detailed example of the various
206 * ways to get rid of these lines and points if you don't want them.
207 *
208 * Default value: false.
209 *
210 * Property type: bool.
211 */
212 const char* AI_CONFIG_PP_FD_REMOVE = "PP_FD_REMOVE";
213
214 /**
215 * Configures the <code>OptimizeGraph</code> step to preserve nodes matching
216 * a name in a given list.
217 *
218 * This is a list of 1 to n strings, ' ' serves as delimiter character.
219 * Identifiers containing whitespaces must be enclosed in <em>single</em>
220 * quotation marks. For example: <code>
221 * "keep-me and_me_to anotherMaterialToBeKept \'name with whitespace\'"</code>.
222 * Linefeeds, tabs or carriage returns are treated as whitespace.
223 *
224 * If a node matches on of these names, it will not be modified or
225 * removed by the postprocessing step.
226 *
227 * This option might be useful if you are using some magic node names
228 * to pass additional semantics through the content pipeline. This ensures
229 * they won't be optimized away, but a general optimization is still
230 * performed for nodes not contained in the list.
231 *
232 * Default value: n/a
233 *
234 * Property type: string.
235 *
236 * Note: Node names are case sensitive.
237 */
238 const char* AI_CONFIG_PP_OG_EXCLUDE_LIST = "PP_OG_EXCLUDE_LIST";
239
240 /**
241 * Sets the maximum number of triangles in a mesh.
242 *
243 * This is used by the <code>SplitLargeMeshes</code> step to determine
244 * whether a mesh must be split or not.
245 *
246 * Default value: AI_SLM_DEFAULT_MAX_TRIANGLES.
247 *
248 * Property type: integer.
249 */
250 const char* AI_CONFIG_PP_SLM_TRIANGLE_LIMIT = "PP_SLM_TRIANGLE_LIMIT";
251
252 /**
253 * The default value for the AI_CONFIG_PP_SLM_TRIANGLE_LIMIT setting.
254 */
255 const AI_SLM_DEFAULT_MAX_TRIANGLES = 1000000;
256
257 /**
258 * Sets the maximum number of vertices in a mesh.
259 *
260 * This is used by the <code>SplitLargeMeshes</code> step to determine
261 * whether a mesh must be split or not.
262 *
263 * Default value: AI_SLM_DEFAULT_MAX_VERTICES
264 *
265 * Property type: integer.
266 */
267 const char* AI_CONFIG_PP_SLM_VERTEX_LIMIT = "PP_SLM_VERTEX_LIMIT";
268
269 /**
270 * The default value for the AI_CONFIG_PP_SLM_VERTEX_LIMIT setting.
271 */
272 const AI_SLM_DEFAULT_MAX_VERTICES = 1000000;
273
274 /**
275 * Sets the maximum number of bones affecting a single vertex.
276 *
277 * This is used by the <code>LimitBoneWeights</code> step.
278 *
279 * Default value: AI_LBW_MAX_WEIGHTS
280 *
281 * Property type: integer.
282 */
283 const char* AI_CONFIG_PP_LBW_MAX_WEIGHTS = "PP_LBW_MAX_WEIGHTS";
284
285 /**
286 * The default value for the AI_CONFIG_PP_LBW_MAX_WEIGHTS setting.
287 */
288 const AI_LMW_MAX_WEIGHTS = 0x4;
289
290 /**
291 * Sets the size of the post-transform vertex cache to optimize the
292 * vertices for. This configures the <code>ImproveCacheLocality</code> step.
293 *
294 * The size is given in vertices. Of course you can't know how the vertex
295 * format will exactly look like after the import returns, but you can still
296 * guess what your meshes will probably have.
297 *
298 * The default value results in slight performance improvements for most
299 * nVidia/AMD cards since 2002.
300 *
301 * Default value: PP_ICL_PTCACHE_SIZE
302 *
303 * Property type: integer.
304 */
305 const char* AI_CONFIG_PP_ICL_PTCACHE_SIZE = "PP_ICL_PTCACHE_SIZE";
306
307 /**
308 * The default value for the AI_CONFIG_PP_ICL_PTCACHE_SIZE config option.
309 */
310 const PP_ICL_PTCACHE_SIZE = 12;
311
312 /**
313 * Components of the <code>aiScene</code> and <code>aiMesh</code> data
314 * structures that can be excluded from the import by using the
315 * <code>RemoveComponent</code> step.
316 *
317 * See the documentation to <code>RemoveComponent</code> for more details.
318 */
319 enum aiComponent : uint {
320 /**
321 * Normal vectors.
322 */
323 NORMALS = 0x2,
324
325 /**
326 * Tangents and bitangents.
327 */
328 TANGENTS_AND_BITANGENTS = 0x4,
329
330 /**
331 * <em>All</em> color sets.
332 *
333 * Use aiComponent_COLORSn( N ) to specify the N'th set.
334 */
335 COLORS = 0x8,
336
337 /**
338 * <em>All</em> texture UV coordinate sets.
339 *
340 * Use aiComponent_TEXCOORDn( N ) to specify the N'th set.
341 */
342 TEXCOORDS = 0x10,
343
344 /**
345 * Bone weights from all meshes.
346 *
347 * The corresponding scenegraph nodes are <em>not</em> removed. Use the
348 * <code>OptimizeGraph</code> step to do this.
349 */
350 BONEWEIGHTS = 0x20,
351
352 /**
353 * Node animations (<code>aiScene.mAnimations</code>).
354 *
355 * The corresponding scenegraph nodes are <em>not</em> removed. Use the
356 * <code>OptimizeGraph</code> step to do this.
357 */
358 ANIMATIONS = 0x40,
359
360 /**
361 * Embedded textures (<code>aiScene.mTextures</code>).
362 */
363 TEXTURES = 0x80,
364
365 /**
366 * Light sources (<code>aiScene.mLights</code>).
367 *
368 * The corresponding scenegraph nodes are <em>not</em> removed. Use the
369 * <code>OptimizeGraph</code> step to do this.
370 */
371 LIGHTS = 0x100,
372
373 /**
374 * Cameras (<code>aiScene.mCameras</code>).
375 *
376 * The corresponding scenegraph nodes are <em>not</em> removed. Use the
377 * <code>OptimizeGraph</code> step to do this.
378 */
379 CAMERAS = 0x200,
380
381 /**
382 * Meshes (<code>aiScene.mMeshes</code>).
383 */
384 MESHES = 0x400,
385
386 /** Materials.
387 *
388 * One default material will be generated, so
389 * <code>aiScene.mNumMaterials</code> will be 1.
390 */
391 MATERIALS = 0x800
392 }
393
394 /**
395 * Specifies a certain color channel to remove.
396 */
397 uint aiComponent_COLORSn( uint n ) { return 1u << ( n + 20u ); }
398
399 /**
400 * Specifies a certain UV coordinate channel to remove.
401 */
402 uint aiComponent_TEXCOORDSn( uint n ) { return 1u << ( n + 25u ); }
403
404 /**
405 * Input parameter to the <code>RemoveComponent</code> step:
406 * Specifies the parts of the data structure to be removed.
407 *
408 * See the documentation to this step for further details.
409 *
410 * Default value: 0
411 *
412 * Property type: integer (bitwise combination of <code>aiComponent</code>
413 * flags).
414 *
415 * Note: If no valid mesh is remaining after the step has been executed, the
416 * import <em>fails</em>, because there is no data to work on anymore.
417 */
418 const char* AI_CONFIG_PP_RVC_FLAGS = "PP_RVC_FLAGS";
419
420 /**
421 * Input parameter to the <code>SortByPType</code> step:
422 * Specifies which primitive types are removed by the step.
423 *
424 * This is a bitwise combination of the <code>aiPrimitiveType</code> flags.
425 * Specifying all of them is illegal, of course. A typical use would be to
426 * exclude all line and point meshes from the import.
427 *
428 * Default value: 0
429 *
430 * Property type: integer.
431 */
432 const char* AI_CONFIG_PP_SBP_REMOVE = "PP_SBP_REMOVE";
433
434 /**
435 * Input parameter to the <code>FindInvalidData</code> step:
436 * Specifies the floating-point accuracy for animation values.
437 *
438 * The step checks for animation tracks where all frame values are
439 * absolutely equal and removes them. This tweakable controls the epsilon
440 * for floating-point comparisons – two keys are considered equal if the
441 * invariant abs(n0-n1) > epsilon holds true for all vector respectively
442 * quaternion components.
443 *
444 * Default value: 0 (exact comparison).
445 *
446 * Property type: float.
447 */
448 const char* AI_CONFIG_PP_FID_ANIM_ACCURACY = "PP_FID_ANIM_ACCURACY";
449
450 /**
451 * The <code>TransformUVCoords</code> step evaluates UV scalings.
452 */
453 const AI_UVTRAFO_SCALING = 0x1;
454
455 /**
456 * The <code>TransformUVCoords</code> step evaluates UV rotations.
457 */
458 const AI_UVTRAFO_ROTATION = 0x2;
459
460 /**
461 * The <code>TransformUVCoords</code> step evaluates UV translation.
462 */
463 const AI_UVTRAFO_TRANSLATION = 0x4;
464
465 /**
466 * The <code>TransformUVCoords</code> step evaluates all UV translations.
467 */
468 const AI_UVTRAFO_ALL =
469 AI_UVTRAFO_SCALING
470 | AI_UVTRAFO_ROTATION
471 | AI_UVTRAFO_TRANSLATION;
472
473 /**
474 * Input parameter to the <code>TransformUVCoords</code> step: Specifies
475 * which UV transformations are evaluated.
476 *
477 * Default value: AI_UVTRAFO_ALL.
478 *
479 * Property type: integer (bitwise combination of the
480 * <code>AI_UVTRAFO_XXX<code> flag).
481 */
482 const char* AI_CONFIG_PP_TUV_EVALUATE = "PP_TUV_EVALUATE";
483
484 /**
485 * A hint to assimp to favour speed against import quality.
486 *
487 * Enabling this option may result in faster loading, but it needn't.
488 * It represents just a hint to loaders and post-processing steps to use
489 * faster code paths, if possible.
490 *
491 * Default value: false.
492 *
493 * Property type: bool.
494 */
495 const char* AI_CONFIG_FAVOUR_SPEED = "FAVOUR_SPEED";
496
497
498 /*
499 * Importer settings.
500 *
501 * Various stuff to fine-tune the behaviour of specific importer plugins.
502 */
503
504 /**
505 * Set the vertex animation keyframe to be imported.
506 *
507 * Assimp does not support vertex keyframes (only bone animation is
508 * supported). The library reads only one frame of models with vertex
509 * animations.
510 *
511 * Default value: 0 (first frame).
512 *
513 * Property type: integer.
514 *
515 * Note: This option applies to all importers. However, it is also possible
516 * to override the global setting for a specific loader. You can use the
517 * AI_CONFIG_IMPORT_XXX_KEYFRAME options (where XXX is a placeholder for
518 * the file format for which you want to override the global setting).
519 */
520 const char* AI_CONFIG_IMPORT_GLOBAL_KEYFRAME = "IMPORT_GLOBAL_KEYFRAME";
521
522 const char* AI_CONFIG_IMPORT_MD3_KEYFRAME = "IMPORT_MD3_KEYFRAME";
523 const char* AI_CONFIG_IMPORT_MD2_KEYFRAME = "IMPORT_MD2_KEYFRAME";
524 const char* AI_CONFIG_IMPORT_MDL_KEYFRAME = "IMPORT_MDL_KEYFRAME";
525 const char* AI_CONFIG_IMPORT_MDC_KEYFRAME = "IMPORT_MDC_KEYFRAME";
526 const char* AI_CONFIG_IMPORT_SMD_KEYFRAME = "IMPORT_SMD_KEYFRAME";
527 const char* AI_CONFIG_IMPORT_UNREAL_KEYFRAME = "IMPORT_UNREAL_KEYFRAME";
528
529
530 /**
531 * Configures the AC loader to collect all surfaces which have the
532 * "Backface cull" flag set in separate meshes.
533 *
534 * Default value: true.
535 *
536 * Property type: bool.
537 */
538 const char* AI_CONFIG_IMPORT_AC_SEPARATE_BFCULL = "IMPORT_AC_SEPARATE_BFCULL";
539
540 /**
541 * Configures the UNREAL 3D loader to separate faces with different surface
542 * flags (e.g. two-sided vs. single-sided).
543 *
544 * Default value: true.
545 *
546 * Property type: bool.
547 */
548 const char* AI_CONFIG_IMPORT_UNREAL_HANDLE_FLAGS = "UNREAL_HANDLE_FLAGS";
549
550 /**
551 * Configures the terragen import plugin to compute uv's for terrains, if
552 * not given. Furthermore, a default texture is assigned.
553 *
554 * UV coordinates for terrains are so simple to compute that you'll usually
555 * want to compute them on your own, if you need them. This option is intended
556 * for model viewers which want to offer an easy way to apply textures to
557 * terrains.
558 *
559 * Default value: false.
560 *
561 * Property type: bool.
562 */
563 const char* AI_CONFIG_IMPORT_TER_MAKE_UVS = "IMPORT_TER_MAKE_UVS";
564
565 /**
566 * Configures the ASE loader to always reconstruct normal vectors basing on
567 * the smoothing groups loaded from the file.
568 *
569 * Many ASE files have invalid normals (they're not orthonormal).
570 *
571 * Default value: true.
572 *
573 * Property type: bool.
574 */
575 const char* AI_CONFIG_IMPORT_ASE_RECONSTRUCT_NORMALS = "IMPORT_ASE_RECONSTRUCT_NORMALS";
576
577 /**
578 * Configures the M3D loader to detect and process multi-part Quake player
579 * models.
580 *
581 * These models usually consist of three files, <code>lower.md3</code>,
582 * <code>upper.md3</code> and <code>head.md3</code>. If this property is set
583 * to true, Assimp will try to load and combine all three files if one of
584 * them is loaded.
585 *
586 * Default value: true.
587 *
588 * Property type: bool.
589 */
590 const char* AI_CONFIG_IMPORT_MD3_HANDLE_MULTIPART = "IMPORT_MD3_HANDLE_MULTIPART";
591
592 /**
593 * Tells the MD3 loader which skin files to load.
594 *
595 * When loading MD3 files, Assimp checks whether a file
596 * <code><md3_file_name>_<skin_name>.skin</code> is existing. These files
597 * are used by Quake 3 to be able to assign different skins (e.g. red and
598 * blue team) to models. 'default', 'red', 'blue' are typical skin names.
599 *
600 * Default value: "default".
601 *
602 * Property type: string.
603 */
604 const char* AI_CONFIG_IMPORT_MD3_SKIN_NAME = "IMPORT_MD3_SKIN_NAME";
605
606 /**
607 * Specify the Quake 3 shader file to be used for a particular MD3 file.
608 * This can also be a search path.
609 *
610 * By default Assimp's behaviour is as follows: If a MD3 file
611 * <code>[any_path]/models/[any_q3_subdir]/[model_name]/[file_name].md3</code>
612 * is loaded, the library tries to locate the corresponding shader file in
613 * <code>[any_path]/scripts/[model_name].shader</code>. This property
614 * overrides this behaviour. It can either specify a full path to the shader
615 * to be loaded or alternatively the path (relative or absolute) to the
616 * directory where the shaders for all MD3s to be loaded reside. Assimp
617 * attempts to open <code>[dir]/[model_name].shader</code> first,
618 * <code>[dir]/[file_name].shader</code> is the fallback file. Note that
619 * <code>[dir]</code> should have a terminal (back)slash.
620 *
621 * Default value: n/a.
622 *
623 * Property type: string.
624 */
625 const char* AI_CONFIG_IMPORT_MD3_SHADER_SRC = "IMPORT_MD3_SHADER_SRC";
626
627 /**
628 * Configures the LWO loader to load just one layer from the model.
629 *
630 * LWO files consist of layers and in some cases it could be useful to load
631 * only one of them. This property can be either a string – which specifies
632 * the name of the layer – or an integer – the index of the layer. If the
633 * property is not set the whole LWO model is loaded. Loading fails if the
634 * requested layer is not available. The layer index is zero-based and the
635 * layer name may not be empty.
636 *
637 * Default value: all layers are loaded.
638 *
639 * Property type: integer/string.
640 */
641 const char* AI_CONFIG_IMPORT_LWO_ONE_LAYER_ONLY = "IMPORT_LWO_ONE_LAYER_ONLY";
642
643 /**
644 * Configures the MD5 loader to not load the MD5ANIM file for a MD5MESH file
645 * automatically.
646 *
647 * The default strategy is to look for a file with the same name but the
648 * MD5ANIM extension in the same directory. If it is found, it is loaded
649 * and combined with the MD5MESH file. This configuration option can be
650 * used to disable this behaviour.
651 *
652 * Default value: false.
653 *
654 * Property type: bool.
655 */
656 const char* AI_CONFIG_IMPORT_MD5_NO_ANIM_AUTOLOAD = "IMPORT_MD5_NO_ANIM_AUTOLOAD";
657
658 /**
659 * Defines the begin of the time range for which the LWS loader evaluates
660 * animations and computes <code>aiNodeAnim</code>s.
661 *
662 * Assimp provides full conversion of LightWave's envelope system, including
663 * pre and post conditions. The loader computes linearly subsampled animation
664 * chanels with the frame rate given in the LWS file. This property defines
665 * the start time. Note: animation channels are only generated if a node
666 * has at least one envelope with more tan one key assigned. This property.
667 * is given in frames, '0' is the first frame. By default, if this property
668 * is not set, the importer takes the animation start from the input LWS
669 * file ('FirstFrame' line).
670 *
671 * Default value: read from file.
672 *
673 * Property type: integer.
674 *
675 * See: <code>AI_CONFIG_IMPORT_LWS_ANIM_END</code> – end of the imported
676 * time range
677 */
678 const char* AI_CONFIG_IMPORT_LWS_ANIM_START = "IMPORT_LWS_ANIM_START";
679 const char* AI_CONFIG_IMPORT_LWS_ANIM_END = "IMPORT_LWS_ANIM_END";
680
681 /**
682 * Defines the output frame rate of the IRR loader.
683 *
684 * IRR animations are difficult to convert for Assimp and there will always
685 * be a loss of quality. This setting defines how many keys per second are
686 * returned by the converter.
687 *
688 * Default value: 100.
689 *
690 * Property type: integer.
691 */
692 const char* AI_CONFIG_IMPORT_IRR_ANIM_FPS = "IMPORT_IRR_ANIM_FPS";
693
694 /**
695 * Ogre Importer will try to load this material file.
696 *
697 * Ogre Mehs contain only the material name, not the material file. If there
698 * is no material file with the same name as the material, Ogre Importer
699 * will try to load this file and search the material in it.
700 *
701 * Property type: string. Default value: "Scene.material".
702 */
703 const char* AI_CONFIG_IMPORT_OGRE_MATERIAL_FILE = "IMPORT_OGRE_MATERIAL_FILE";
704 }
+0
-140
port/unmaintained/dAssimp/assimp/fileIO.d less more
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * The data structures necessary to use Assimip with a custom IO system.
43 */
44 module assimp.fileIO;
45
46 import assimp.types;
47
48 extern ( C ) {
49 // aiFile callbacks
50 alias size_t function( aiFile*, char*, size_t, size_t ) aiFileWriteProc;
51 alias size_t function( aiFile*, char*, size_t, size_t ) aiFileReadProc;
52 alias size_t function( aiFile* ) aiFileTellProc;
53 alias void function( aiFile* ) aiFileFlushProc;
54 alias aiReturn function( aiFile*, size_t, aiOrigin ) aiFileSeek;
55
56 // aiFileIO callbacks
57 alias aiFile* function( aiFileIO*, char*, char* ) aiFileOpenProc;
58 alias void function( aiFileIO*, aiFile* ) aiFileCloseProc;
59
60 /**
61 * Represents user-defined data.
62 */
63 alias char* aiUserData;
64
65 /**
66 * File system callbacks.
67 *
68 * Provided are functions to open and close files. Supply a custom structure
69 * to the import function. If you don't, a default implementation is used.
70 * Use custom file systems to enable reading from other sources, such as
71 * ZIPs or memory locations.
72 */
73 struct aiFileIO {
74 /**
75 * Function used to open a new file
76 */
77 aiFileOpenProc OpenProc;
78
79 /**
80 * Function used to close an existing file
81 */
82 aiFileCloseProc CloseProc;
83
84 /**
85 * User-defined, opaque data.
86 */
87 aiUserData UserData;
88 }
89
90 /**
91 * File callbacks.
92 *
93 * Actually, it's a data structure to wrap a set of <code>fXXXX</code>
94 * (e.g <code>fopen()</code>) replacement functions.
95 *
96 * The default implementation of the functions utilizes the <code>fXXX</code>
97 * functions from the CRT. However, you can supply a custom implementation
98 * to Assimp by passing a custom <code>aiFileIO</code>. Use this to enable
99 * reading from other sources such as ZIP archives or memory locations.
100 */
101 struct aiFile {
102 /**
103 * Callback to read from a file.
104 */
105 aiFileReadProc ReadProc;
106
107 /**
108 * Callback to write to a file.
109 */
110 aiFileWriteProc WriteProc;
111
112 /**
113 * Callback to retrieve the current position of the file cursor
114 * (<code>ftell()</code>).
115 */
116 aiFileTellProc TellProc;
117
118 /**
119 * Callback to retrieve the size of the file, in bytes.
120 */
121 aiFileTellProc FileSizeProc;
122
123 /**
124 * Callback to set the current position of the file cursor
125 * (<code>fseek()</code>).
126 */
127 aiFileSeek SeekProc;
128
129 /**
130 * Callback to flush the file contents.
131 */
132 aiFileFlushProc FlushProc;
133
134 /**
135 * User-defined, opaque data.
136 */
137 aiUserData UserData;
138 }
139 }
+0
-215
port/unmaintained/dAssimp/assimp/light.d less more
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Contains the data structures which are used to store the imported information
43 * about the light sources in the scene.
44 */
45 module assimp.light;
46
47 import assimp.math;
48 import assimp.types;
49
50 extern ( C ) {
51 /**
52 * Enumerates all supported types of light sources.
53 */
54 enum aiLightSourceType : uint {
55 UNDEFINED = 0x0,
56
57 /**
58 * A directional light source has a well-defined direction but is
59 * infinitely far away. That's quite a good approximation for sun light.
60 */
61 DIRECTIONAL = 0x1,
62
63 /**
64 * A point light source has a well-defined position in space but no
65 * direction – it emits light in all directions. A normal bulb is a point
66 * light.
67 */
68 POINT = 0x2,
69
70 /**
71 * A spot light source emits light in a specific angle. It has a position
72 * and a direction it is pointing to. A good example for a spot light is
73 * a light spot in sport arenas.
74 */
75 SPOT = 0x3
76 }
77
78 /**
79 * Helper structure to describe a light source.
80 *
81 * Assimp supports multiple sorts of light sources, including directional,
82 * point and spot lights. All of them are defined with just a single
83 * structure and distinguished by their parameters.
84 *
85 * Note: Some file formats (such as 3DS, ASE) export a "target point" – the
86 * point a spot light is looking at (it can even be animated). Assimp
87 * writes the target point as a subnode of a spotlights's main node, called
88 * <code>[spotName].Target</code>. However, this is just additional
89 * information then, the transformation tracks of the main node make the
90 * spot light already point in the right direction.
91 */
92 struct aiLight {
93 /**
94 * The name of the light source.
95 *
96 * There must be a node in the scenegraph with the same name. This node
97 * specifies the position of the light in the scenehierarchy and can be
98 * animated.
99 */
100 aiString mName;
101
102 /**
103 * The type of the light source.
104 *
105 * <code>aiLightSource.UNDEFINED</code> is not a valid value for this
106 * member.
107 */
108 aiLightSourceType mType;
109
110 /**
111 * Position of the light source in space. Relative to the transformation
112 * of the node corresponding to the light.
113 *
114 * The position is undefined for directional lights.
115 */
116 aiVector3D mPosition;
117
118 /**
119 * Direction of the light source in space. Relative to the transformation
120 * of the node corresponding to the light.
121 *
122 * The direction is undefined for point lights. The vector may be
123 * normalized, but it needn't.
124 */
125 aiVector3D mDirection;
126
127 /**
128 * Constant light attenuation factor.
129 *
130 * The intensity of the light source at a given distance
131 * <code>d</code> from the light's position is
132 * <code>1/( att0 + att1 * d + att2 * d * d )</code>. This member
133 * corresponds to the <code>att0</code> variable in the equation.
134 *
135 * Naturally undefined for directional lights.
136 */
137 float mAttenuationConstant;
138
139 /**
140 * Linear light attenuation factor.
141 *
142 * The intensity of the light source at a given distance
143 * <code>d</code> from the light's position is
144 * <code>1/( att0 + att1 * d + att2 * d * d )</code>. This member
145 * corresponds to the <code>att1</code> variable in the equation.
146 *
147 * Naturally undefined for directional lights.
148 */
149 float mAttenuationLinear;
150
151 /**
152 * Quadratic light attenuation factor.
153 *
154 * The intensity of the light source at a given distance
155 * <code>d</code> from the light's position is
156 * <code>1/( att0 + att1 * d + att2 * d * d )</code>. This member
157 * corresponds to the <code>att2</code> variable in the equation.
158 *
159 * Naturally undefined for directional lights.
160 */
161 float mAttenuationQuadratic;
162
163 /**
164 * Diffuse color of the light source
165 *
166 * The diffuse light color is multiplied with the diffuse material color
167 * to obtain the final color that contributes to the diffuse shading term.
168 */
169 aiColor3D mColorDiffuse;
170
171 /**
172 * Specular color of the light source
173 *
174 * The specular light color is multiplied with the specular material
175 * color to obtain the final color that contributes to the specular
176 * shading term.
177 */
178 aiColor3D mColorSpecular;
179
180 /**
181 * Ambient color of the light source
182 *
183 * The ambient light color is multiplied with the ambient material color
184 * to obtain the final color that contributes to the ambient shading term.
185 *
186 * Most renderers will ignore this value it, is just a remaining of the
187 * fixed-function pipeline that is still supported by quite many file
188 * formats.
189 */
190 aiColor3D mColorAmbient;
191
192 /**
193 * Inner angle of a spot light's light cone.
194 *
195 * The spot light has maximum influence on objects inside this angle. The
196 * angle is given in radians. It is 2PI for point lights and undefined
197 * for directional lights.
198 */
199 float mAngleInnerCone;
200
201 /**
202 * Outer angle of a spot light's light cone.
203 *
204 * The spot light does not affect objects outside this angle. The angle
205 * is given in radians. It is 2PI for point lights and undefined for
206 * directional lights. The outer angle must be greater than or equal to
207 * the inner angle.
208 *
209 * It is assumed that the application uses a smooth interpolation between
210 * the inner and the outer cone of the spot light.
211 */
212 float mAngleOuterCone;
213 }
214 }
+0
-193
port/unmaintained/dAssimp/assimp/loader.d less more
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Provides facilities for dynamically loading the Assimp library.
43 *
44 * Currently requires Tango, but there is no reason why Phobos could not be
45 * supported too.
46 */
47 module assimp.loader;
48
49 import assimp.api;
50 import tango.io.Stdout;
51 import tango.sys.SharedLib;
52
53 const uint ASSIMP_BINDINGS_MAJOR = 2;
54 const uint ASSIMP_BINDINGS_MINOR = 0;
55
56 /**
57 * Loader class for dynamically loading the Assimp library.
58 *
59 * The library is »reference-counted«, meaning that the library is not
60 * unloaded on a call to <code>unload()</code> if there are still other
61 * references to it.
62 */
63 struct Assimp {
64 public:
65 /**
66 * Loads the library if it is not already loaded and increases the
67 * reference counter.
68 *
69 * The library file (<code>libassimp.so</code> on POSIX systems,
70 * <code>Assimp32.dll</code> on Win32) is loaded via Tango's SharedLib
71 * class.
72 */
73 static void load() {
74 if ( m_sRefCount == 0 ) {
75 version ( Posix ) {
76 version ( OSX ) {
77 m_sLibrary = SharedLib.load( "libassimp.dylib" );
78 } else {
79 m_sLibrary = SharedLib.load( "libassimp.so" );
80 }
81 }
82 version ( Win32 ) {
83 m_sLibrary = SharedLib.load( "Assimp32.dll" );
84 }
85
86 // Versioning
87 mixin( bindCode( "aiGetLegalString" ) );
88 mixin( bindCode( "aiGetVersionMinor" ) );
89 mixin( bindCode( "aiGetVersionMajor" ) );
90 mixin( bindCode( "aiGetVersionRevision" ) );
91 mixin( bindCode( "aiGetCompileFlags" ) );
92
93 // Check for version mismatch between the external, dynamically loaded
94 // library and the version the bindings were created against.
95 uint libMajor = aiGetVersionMajor();
96 uint libMinor = aiGetVersionMinor();
97
98 if ( ( libMajor < ASSIMP_BINDINGS_MAJOR ) ||
99 ( libMinor < ASSIMP_BINDINGS_MINOR ) ) {
100 Stdout.format(
101 "WARNING: Assimp version too old (loaded library: {}.{}, " ~
102 "bindings: {}.{})!",
103 libMajor,
104 libMinor,
105 ASSIMP_BINDINGS_MAJOR,
106 ASSIMP_BINDINGS_MINOR
107 ).newline;
108 }
109
110 if ( libMajor > ASSIMP_BINDINGS_MAJOR ) {
111 Stdout.format(
112 "WARNING: Assimp version too new (loaded library: {}.{}, " ~
113 "bindings: {}.{})!",
114 libMajor,
115 libMinor,
116 ASSIMP_BINDINGS_MAJOR,
117 ASSIMP_BINDINGS_MINOR
118 ).newline;
119 }
120
121 // General API
122 mixin( bindCode( "aiImportFile" ) );
123 mixin( bindCode( "aiImportFileEx" ) );
124 mixin( bindCode( "aiImportFileFromMemory" ) );
125 mixin( bindCode( "aiApplyPostProcessing" ) );
126 mixin( bindCode( "aiGetPredefinedLogStream" ) );
127 mixin( bindCode( "aiAttachLogStream" ) );
128 mixin( bindCode( "aiEnableVerboseLogging" ) );
129 mixin( bindCode( "aiDetachLogStream" ) );
130 mixin( bindCode( "aiDetachAllLogStreams" ) );
131 mixin( bindCode( "aiReleaseImport" ) );
132 mixin( bindCode( "aiGetErrorString" ) );
133 mixin( bindCode( "aiIsExtensionSupported" ) );
134 mixin( bindCode( "aiGetExtensionList" ) );
135 mixin( bindCode( "aiGetMemoryRequirements" ) );
136 mixin( bindCode( "aiSetImportPropertyInteger" ) );
137 mixin( bindCode( "aiSetImportPropertyFloat" ) );
138 mixin( bindCode( "aiSetImportPropertyString" ) );
139
140 // Mathematical functions
141 mixin( bindCode( "aiCreateQuaternionFromMatrix" ) );
142 mixin( bindCode( "aiDecomposeMatrix" ) );
143 mixin( bindCode( "aiTransposeMatrix4" ) );
144 mixin( bindCode( "aiTransposeMatrix3" ) );
145 mixin( bindCode( "aiTransformVecByMatrix3" ) );
146 mixin( bindCode( "aiTransformVecByMatrix4" ) );
147 mixin( bindCode( "aiMultiplyMatrix4" ) );
148 mixin( bindCode( "aiMultiplyMatrix3" ) );
149 mixin( bindCode( "aiIdentityMatrix3" ) );
150 mixin( bindCode( "aiIdentityMatrix4" ) );
151
152 // Material system
153 mixin( bindCode( "aiGetMaterialProperty" ) );
154 mixin( bindCode( "aiGetMaterialFloatArray" ) );
155 mixin( bindCode( "aiGetMaterialIntegerArray" ) );
156 mixin( bindCode( "aiGetMaterialColor" ) );
157 mixin( bindCode( "aiGetMaterialString" ) );
158 mixin( bindCode( "aiGetMaterialTextureCount" ) );
159 mixin( bindCode( "aiGetMaterialTexture" ) );
160 }
161 ++m_sRefCount;
162 }
163
164 /**
165 * Decreases the reference counter and unloads the library if this was the
166 * last reference.
167 */
168 static void unload() {
169 assert( m_sRefCount > 0 );
170 --m_sRefCount;
171
172 if ( m_sRefCount == 0 ) {
173 m_sLibrary.unload();
174 }
175 }
176
177 private:
178 /// Current number of references to the library.
179 static uint m_sRefCount;
180
181 /// Library handle.
182 static SharedLib m_sLibrary;
183 }
184
185 /**
186 * Private helper function which constructs the bind command for a symbol to
187 * keep the code DRY.
188 */
189 private char[] bindCode( char[] symbol ) {
190 return symbol ~ " = cast( typeof( " ~ symbol ~
191 " ) )m_sLibrary.getSymbol( `" ~ symbol ~ "` );";
192 }
+0
-641
port/unmaintained/dAssimp/assimp/material.d less more
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Contains the material system which stores the imported material information.
43 */
44 module assimp.material;
45
46 import assimp.math;
47 import assimp.types;
48
49 extern ( C ) {
50 /**
51 * Default material names for meshes without UV coordinates.
52 */
53 const char* AI_DEFAULT_MATERIAL_NAME = "aiDefaultMat";
54
55 /**
56 * Default material names for meshes with UV coordinates.
57 */
58 const char* AI_DEFAULT_TEXTURED_MATERIAL_NAME = "TexturedDefaultMaterial";
59
60 /**
61 * Defines how the Nth texture of a specific type is combined with the
62 * result of all previous layers.
63 *
64 * Example (left: key, right: value):
65 * <pre> DiffColor0 - gray
66 * DiffTextureOp0 - aiTextureOpMultiply
67 * DiffTexture0 - tex1.png
68 * DiffTextureOp0 - aiTextureOpAdd
69 * DiffTexture1 - tex2.png</pre>
70 * Written as equation, the final diffuse term for a specific pixel would be:
71 * <pre>diffFinal = DiffColor0 * sampleTex( DiffTexture0, UV0 ) +
72 * sampleTex( DiffTexture1, UV0 ) * diffContrib;</pre>
73 * where <code>diffContrib</code> is the intensity of the incoming light for
74 * that pixel.
75 */
76 enum aiTextureOp : uint {
77 /**
78 * <code>T = T1 * T2</code>
79 */
80 Multiply = 0x0,
81
82 /**
83 * <code>T = T1 + T2</code>
84 */
85 Add = 0x1,
86
87 /**
88 * <code>T = T1 - T2</code>
89 */
90 Subtract = 0x2,
91
92 /**
93 * <code>T = T1 / T2</code>
94 */
95 Divide = 0x3,
96
97 /**
98 * <code>T = ( T1 + T2 ) - ( T1 * T2 )</code>
99 */
100 SmoothAdd = 0x4,
101
102 /**
103 * <code>T = T1 + ( T2 - 0.5 )</code>
104 */
105 SignedAdd = 0x5
106 }
107
108 /**
109 * Defines how UV coordinates outside the <code>[0..1]</code> range are
110 * handled.
111 *
112 * Commonly refered to as 'wrapping mode'.
113 */
114 enum aiTextureMapMode : uint {
115 /**
116 * A texture coordinate <code>u | v</code> is translated to
117 * <code>(u%1) | (v%1)</code>.
118 */
119 Wrap = 0x0,
120
121 /**
122 * Texture coordinates are clamped to the nearest valid value.
123 */
124 Clamp = 0x1,
125
126 /**
127 * If the texture coordinates for a pixel are outside
128 * <code>[0..1]</code>, the texture is not applied to that pixel.
129 */
130 Decal = 0x3,
131
132 /**
133 * A texture coordinate <code>u | v</code> becomes
134 * <code>(u%1) | (v%1)</code> if <code>(u-(u%1))%2</code> is
135 * zero and <code>(1-(u%1)) | (1-(v%1))</code> otherwise.
136 */
137 Mirror = 0x2
138 }
139
140 /**
141 * Defines how the mapping coords for a texture are generated.
142 *
143 * Real-time applications typically require full UV coordinates, so the use of
144 * the <code>aiProcess.GenUVCoords</code> step is highly recommended. It
145 * generates proper UV channels for non-UV mapped objects, as long as an
146 * accurate description how the mapping should look like (e.g spherical) is
147 * given. See the <code>AI_MATKEY_MAPPING</code> property for more details.
148 */
149 enum aiTextureMapping : uint {
150 /**
151 * The mapping coordinates are taken from an UV channel.
152 *
153 * The <code>AI_MATKEY_UVSRC</code> key specifies from which (remember,
154 * meshes can have more than one UV channel).
155 */
156 UV = 0x0,
157
158 /**
159 * Spherical mapping.
160 */
161 SPHERE = 0x1,
162
163 /**
164 * Cylindrical mapping.
165 */
166 CYLINDER = 0x2,
167
168 /**
169 * Cubic mapping.
170 */
171 BOX = 0x3,
172
173 /**
174 * Planar mapping.
175 */
176 PLANE = 0x4,
177
178 /**
179 * Undefined mapping.
180 */
181 OTHER = 0x5
182 }
183
184 /**
185 * Defines the purpose of a texture
186 *
187 * This is a very difficult topic. Different 3D packages support different
188 * kinds of textures. For very common texture types, such as bumpmaps, the
189 * rendering results depend on implementation details in the rendering
190 * pipelines of these applications. Assimp loads all texture references from
191 * the model file and tries to determine which of the predefined texture
192 * types below is the best choice to match the original use of the texture
193 * as closely as possible.
194 *
195 * In content pipelines you'll usually define how textures have to be
196 * handled, and the artists working on models have to conform to this
197 * specification, regardless which 3D tool they're using.
198 */
199 enum aiTextureType : uint {
200 /**
201 * No texture, but the value to be used for
202 * <code>aiMaterialProperty.mSemantic</code> for all material properties
203 * <em>not</em> related to textures.
204 */
205 NONE = 0x0,
206
207 /**
208 * The texture is combined with the result of the diffuse lighting
209 * equation.
210 */
211 DIFFUSE = 0x1,
212
213 /**
214 * The texture is combined with the result of the specular lighting
215 * equation.
216 */
217 SPECULAR = 0x2,
218
219 /**
220 * The texture is combined with the result of the ambient lighting
221 * equation.
222 */
223 AMBIENT = 0x3,
224
225 /**
226 * The texture is added to the result of the lighting calculation. It
227 * isn't influenced by incoming light.
228 */
229 EMISSIVE = 0x4,
230
231 /**
232 * The texture is a height map.
233 *
234 * By convention, higher grey-scale values stand for higher elevations
235 * from the base height.
236 */
237 HEIGHT = 0x5,
238
239 /**
240 * The texture is a (tangent space) normal-map.
241 *
242 * Again, there are several conventions for tangent-space normal maps.
243 * Assimp does (intentionally) not differenciate here.
244 */
245 NORMALS = 0x6,
246
247 /**
248 * The texture defines the glossiness of the material.
249 *
250 * The glossiness is in fact the exponent of the specular (phong)
251 * lighting equation. Usually there is a conversion function defined to
252 * map the linear color values in the texture to a suitable exponent.
253 */
254 SHININESS = 0x7,
255
256 /**
257 * The texture defines per-pixel opacity.
258 *
259 * Usually white means opaque and black means transparent.
260 */
261 OPACITY = 0x8,
262
263 /**
264 * Displacement texture.
265 *
266 * The exact purpose and format is application-dependent. Higher color
267 * values stand for higher vertex displacements.
268 */
269 DISPLACEMENT = 0x9,
270
271 /**
272 * Lightmap or ambient occlusion texture.
273 *
274 * Both lightmaps and dedicated ambient occlusion maps are covered by
275 * this material property. The texture contains a scaling value for the
276 * final color value of a pixel. Its intensity is not affected by
277 * incoming light.
278 */
279 LIGHTMAP = 0xA,
280
281 /**
282 * Reflection texture.
283 *
284 * Contains the color of a perfect mirror reflection. Rarely used, almost
285 * never for real-time applications.
286 */
287 REFLECTION = 0xB,
288
289 /**
290 * Unknown texture.
291 *
292 * A texture reference that does not match any of the definitions above is
293 * considered to be 'unknown'. It is still imported, but is excluded from
294 * any further postprocessing.
295 */
296 UNKNOWN = 0xC
297 }
298
299 /**
300 * Defines all shading models supported by the library
301 *
302 * The list of shading modes has been taken from Blender. See Blender
303 * documentation for more information. The API does not distinguish between
304 * "specular" and "diffuse" shaders (thus the specular term for diffuse
305 * shading models like Oren-Nayar remains undefined).
306 *
307 * Again, this value is just a hint. Assimp tries to select the shader whose
308 * most common implementation matches the original rendering results of the
309 * 3D modeller which wrote a particular model as closely as possible.
310 */
311 enum aiShadingMode : uint {
312 /**
313 * Flat shading.
314 *
315 * Shading is done on per-face base diffuse only. Also known as
316 * »faceted shading«.
317 */
318 Flat = 0x1,
319
320 /**
321 * Simple Gouraud shading.
322 */
323 Gouraud = 0x2,
324
325 /**
326 * Phong-Shading.
327 */
328 Phong = 0x3,
329
330 /**
331 * Phong-Blinn-Shading.
332 */
333 Blinn = 0x4,
334
335 /**
336 * Per-pixel toon shading.
337 *
338 * Often referred to as »comic shading«.
339 */
340 Toon = 0x5,
341
342 /**
343 * Per-pixel Oren-Nayar shading.
344 *
345 * Extension to standard Lambertian shading, taking the roughness of the
346 * material into account.
347 */
348 OrenNayar = 0x6,
349
350 /**
351 * Per-pixel Minnaert shading.
352 *
353 * Extension to standard Lambertian shading, taking the "darkness" of the
354 * material into account.
355 */
356 Minnaert = 0x7,
357
358 /**
359 * Per-pixel Cook-Torrance shading.
360 *
361 * Special shader for metallic surfaces.
362 */
363 CookTorrance = 0x8,
364
365 /**
366 * No shading at all.
367 *
368 * Constant light influence of 1.
369 */
370 NoShading = 0x9,
371
372 /**
373 * Fresnel shading.
374 */
375 Fresnel = 0xa
376 }
377
378 /**
379 * Defines some mixed flags for a particular texture.
380 *
381 * Usually you'll instruct your cg artists how textures have to look like
382 * and how they will be processed in your application. However, if you use
383 * Assimp for completely generic loading purposes you might also need to
384 * process these flags in order to display as many 'unknown' 3D models as
385 * possible correctly.
386 *
387 * This corresponds to the <code>AI_MATKEY_TEXFLAGS</code> property.
388 */
389 enum aiTextureFlags : uint {
390 /**
391 * The texture's color values have to be inverted (i.e. <code>1-n</code>
392 * component-wise).
393 */
394 Invert = 0x1,
395
396 /**
397 * Explicit request to the application to process the alpha channel of the
398 * texture.
399 *
400 * Mutually exclusive with <code>IgnoreAlpha</code>. These flags are
401 * set if the library can say for sure that the alpha channel is used/is
402 * not used. If the model format does not define this, it is left to the
403 * application to decide whether the texture alpha channel – if any – is
404 * evaluated or not.
405 */
406 UseAlpha = 0x2,
407
408 /**
409 * Explicit request to the application to ignore the alpha channel of the
410 * texture.
411 *
412 * Mutually exclusive with <code>UseAlpha</code>.
413 */
414 IgnoreAlpha = 0x4
415 }
416
417
418 /**
419 * Defines alpha-blend flags.
420 *
421 * If you're familiar with OpenGL or D3D, these flags aren't new to you.
422 * They define how the final color value of a pixel is computed, based on
423 * the previous color at that pixel and the new color value from the
424 * material.
425 *
426 * The basic blending formula is
427 * <code>SourceColor * SourceBlend + DestColor * DestBlend</code>,
428 * where <code>DestColor</code> is the previous color in the framebuffer at
429 * this position and <code>SourceColor</code> is the material color before
430 * the transparency calculation.
431 *
432 * This corresponds to the <code>AI_MATKEY_BLEND_FUNC</code> property.
433 */
434 enum aiBlendMode :uint {
435 /**
436 * Formula:
437 * <code>SourceColor * SourceAlpha + DestColor * (1 - SourceAlpha)</code>
438 */
439 Default = 0x0,
440
441 /**
442 * Additive blending.
443 *
444 * Formula: <code>SourceColor*1 + DestColor*1</code>
445 */
446 Additive = 0x1
447 }
448
449 /**
450 * Defines how an UV channel is transformed.
451 *
452 * This is just a helper structure for the <code>AI_MATKEY_UVTRANSFORM</code>
453 * key. See its documentation for more details.
454 */
455 struct aiUVTransform {
456 align ( 1 ) :
457 /**
458 * Translation on the u and v axes.
459 *
460 * The default value is (0|0).
461 */
462 aiVector2D mTranslation;
463
464 /**
465 * Scaling on the u and v axes.
466 *
467 * The default value is (1|1).
468 */
469 aiVector2D mScaling;
470
471 /**
472 * Rotation - in counter-clockwise direction.
473 *
474 * The rotation angle is specified in radians. The rotation center is
475 * 0.5|0.5. The default value is 0.
476 */
477 float mRotation;
478 }
479
480 /**
481 * A very primitive RTTI system to store the data type of a material
482 * property.
483 */
484 enum aiPropertyTypeInfo : uint {
485 /**
486 * Array of single-precision (32 bit) floats.
487 *
488 * It is possible to use <code>aiGetMaterialInteger[Array]()</code> to
489 * query properties stored in floating-point format. The material system
490 * performs the type conversion automatically.
491 */
492 Float = 0x1,
493
494 /**
495 * aiString property.
496 *
497 * Arrays of strings aren't possible, <code>aiGetMaterialString()</code>
498 * must be used to query a string property.
499 */
500 String = 0x3,
501
502 /**
503 * Array of (32 bit) integers.
504 *
505 * It is possible to use <code>aiGetMaterialFloat[Array]()</code> to
506 * query properties stored in integer format. The material system
507 * performs the type conversion automatically.
508 */
509 Integer = 0x4,
510
511 /**
512 * Simple binary buffer, content undefined. Not convertible to anything.
513 */
514 Buffer = 0x5
515 }
516
517 /**
518 * Data structure for a single material property.
519 *
520 * As an user, you'll probably never need to deal with this data structure.
521 * Just use the provided <code>aiGetMaterialXXX()</code> functions to query
522 * material properties easily. Processing them manually is faster, but it is
523 * not the recommended way. It isn't worth the effort.
524 *
525 * Material property names follow a simple scheme:
526 *
527 * <code>$[name]</code>: A public property, there must be a corresponding
528 * AI_MATKEY_XXX constant.
529 *
530 * <code>?[name]</code>: Also public, but ignored by the
531 * <code>aiProcess.RemoveRedundantMaterials</code> post-processing step.
532 *
533 * <code>~[name]</code>: A temporary property for internal use.
534 */
535 struct aiMaterialProperty {
536 /**
537 * Specifies the name of the property (key).
538 *
539 * Keys are generally case insensitive.
540 */
541 aiString mKey;
542
543 /**
544 * For texture properties, this specifies the exact usage semantic.
545 *
546 * For non-texture properties, this member is always 0 (or rather
547 * <code>aiTextureType.NONE</code>).
548 */
549 uint mSemantic;
550
551 /**
552 * For texture properties, this specifies the index of the texture.
553 *
554 * For non-texture properties, this member is always 0.
555 */
556 uint mIndex;
557
558 /**
559 * Size of the buffer <code>mData</code> is pointing to (in bytes).
560 *
561 * This value may not be 0.
562 */
563 uint mDataLength;
564
565 /**
566 * Type information for the property.
567 *
568 * Defines the data layout inside the data buffer. This is used by the
569 * library internally to perform debug checks and to utilize proper type
570 * conversions.
571 */
572 aiPropertyTypeInfo mType;
573
574 /**
575 * Binary buffer to hold the property's value.
576 *
577 * The size of the buffer is always <code>mDataLength</code>.
578 */
579 char* mData;
580 }
581
582 /**
583 * Data structure for a material
584 *
585 * Material data is stored using a key-value structure. A single key-value
586 * pair is called a <em>material property</em>. The properties can be
587 * queried using the <code>aiMaterialGetXXX</code> family of functions. The
588 * library defines a set of standard keys (AI_MATKEY_XXX).
589 */
590 struct aiMaterial {
591 /**
592 * List of all material properties loaded.
593 */
594 aiMaterialProperty** mProperties;
595
596 /**
597 * Number of properties loaded.
598 */
599 uint mNumProperties;
600 uint mNumAllocated; /// ditto
601 }
602
603 /**
604 * Standard material property keys. Always pass 0 for texture type and index
605 * when querying these keys.
606 */
607 const char* AI_MATKEY_NAME = "?mat.name";
608 const char* AI_MATKEY_TWOSIDED = "$mat.twosided"; /// ditto
609 const char* AI_MATKEY_SHADING_MODEL = "$mat.shadingm"; /// ditto
610 const char* AI_MATKEY_ENABLE_WIREFRAME = "$mat.wireframe"; /// ditto
611 const char* AI_MATKEY_BLEND_FUNC = "$mat.blend"; /// ditto
612 const char* AI_MATKEY_OPACITY = "$mat.opacity"; /// ditto
613 const char* AI_MATKEY_BUMPSCALING = "$mat.bumpscaling"; /// ditto
614 const char* AI_MATKEY_SHININESS = "$mat.shininess"; /// ditto
615 const char* AI_MATKEY_REFLECTIVITY = "$mat.reflectivity"; /// ditto
616 const char* AI_MATKEY_SHININESS_STRENGTH = "$mat.shinpercent"; /// ditto
617 const char* AI_MATKEY_REFRACTI = "$mat.refracti"; /// ditto
618 const char* AI_MATKEY_COLOR_DIFFUSE = "$clr.diffuse"; /// ditto
619 const char* AI_MATKEY_COLOR_AMBIENT = "$clr.ambient"; /// ditto
620 const char* AI_MATKEY_COLOR_SPECULAR = "$clr.specular"; /// ditto
621 const char* AI_MATKEY_COLOR_EMISSIVE = "$clr.emissive"; /// ditto
622 const char* AI_MATKEY_COLOR_TRANSPARENT = "$clr.transparent"; /// ditto
623 const char* AI_MATKEY_COLOR_REFLECTIVE = "$clr.reflective"; /// ditto
624 const char* AI_MATKEY_GLOBAL_BACKGROUND_IMAGE = "?bg.global"; /// ditto
625
626 /**
627 * Texture material property keys. Do not forget to specify texture type and
628 * index for these keys.
629 */
630 const char* AI_MATKEY_TEXTURE = "$tex.file";
631 const char* AI_MATKEY_UVWSRC = "$tex.uvwsrc"; /// ditto
632 const char* AI_MATKEY_TEXOP = "$tex.op"; /// ditto
633 const char* AI_MATKEY_MAPPING = "$tex.mapping"; /// ditto
634 const char* AI_MATKEY_TEXBLEND = "$tex.blend"; /// ditto
635 const char* AI_MATKEY_MAPPINGMODE_U = "$tex.mapmodeu"; /// ditto
636 const char* AI_MATKEY_MAPPINGMODE_V = "$tex.mapmodev"; /// ditto
637 const char* AI_MATKEY_TEXMAP_AXIS = "$tex.mapaxis"; /// ditto
638 const char* AI_MATKEY_UVTRANSFORM = "$tex.uvtrafo"; /// ditto
639 const char* AI_MATKEY_TEXFLAGS = "$tex.flags"; /// ditto
640 }
+0
-155
port/unmaintained/dAssimp/assimp/math.d less more
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Mathematical structures in which the imported data is stored.
43 */
44 module assimp.math;
45
46 extern( C ) {
47 /**
48 * Represents a two-dimensional vector.
49 */
50 struct aiVector2D {
51 align ( 1 ):
52 float x, y;
53 }
54
55 /**
56 * Represents a three-dimensional vector.
57 */
58 struct aiVector3D {
59 align ( 1 ):
60 float x, y, z;
61 }
62
63 /**
64 * Represents a quaternion.
65 */
66 struct aiQuaternion {
67 float w, x, y, z;
68 }
69
70 /**
71 * Represents a row-major 3x3 matrix
72 *
73 * There is much confusion about matrix layouts (colum vs. row order). This
74 * is <em>always</em> a row-major matrix, even when using the
75 * <code>ConvertToLeftHanded</code> post processing step.
76 */
77 struct aiMatrix3x3 {
78 float a1, a2, a3;
79 float b1, b2, b3;
80 float c1, c2, c3;
81 }
82
83 /**
84 * Represents a row-major 3x3 matrix
85 *
86 * There is much confusion about matrix layouts (colum vs. row order). This
87 * is <em>always</em> a row-major matrix, even when using the
88 * <code>ConvertToLeftHanded</code> post processing step.
89 */
90 struct aiMatrix4x4 {
91 align ( 1 ):
92 float a1, a2, a3, a4;
93 float b1, b2, b3, b4;
94 float c1, c2, c3, c4;
95 float d1, d2, d3, d4;
96 }
97
98 /**
99 * Represents a plane in a three-dimensional, euclidean space
100 */
101 struct aiPlane {
102 align ( 1 ):
103 /**
104 * Coefficients of the plane equation (<code>ax + by + cz = d</code>).
105 */
106 float a;
107 float b; /// ditto
108 float c; /// ditto
109 float d; /// ditto
110 }
111
112 /**
113 * Represents a ray.
114 */
115 struct aiRay {
116 align ( 1 ):
117 /**
118 * Origin of the ray.
119 */
120 aiVector3D pos;
121
122 /**
123 * Direction of the ray.
124 */
125 aiVector3D dir;
126 }
127
128 /**
129 * Represents a color in RGB space.
130 */
131 struct aiColor3D {
132 align ( 1 ):
133 /**
134 * Red, green and blue values.
135 */
136 float r;
137 float g; /// ditto
138 float b; /// ditto
139 }
140
141 /**
142 * Represents a color in RGB space including an alpha component.
143 */
144 struct aiColor4D {
145 align ( 1 ):
146 /**
147 * Red, green, blue and alpha values.
148 */
149 float r;
150 float g; /// ditto
151 float b; /// ditto
152 float a; /// ditto
153 }
154 }
+0
-465
port/unmaintained/dAssimp/assimp/mesh.d less more
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Contains the data structures in which the imported geometry is returned by
43 * Assimp.
44 */
45 module assimp.mesh;
46
47 import assimp.math;
48 import assimp.types;
49
50 extern ( C ) {
51 /*
52 * These limits are required to match the settings Assimp was compiled
53 * against. Therfore, do not redefine them unless you build the library
54 * from source using the same definitions.
55 */
56
57 /**
58 * Maximum number of indices per face (polygon).
59 */
60 const AI_MAX_FACE_INDICES = 0x7fff;
61
62 /**
63 * Maximum number of indices per face (polygon).
64 */
65 const AI_MAX_BONE_WEIGHTS = 0x7fffffff;
66
67 /**
68 * Maximum number of vertices per mesh.
69 */
70 const AI_MAX_VERTICES = 0x7fffffff;
71
72 /**
73 * Maximum number of faces per mesh.
74 */
75 const AI_MAX_FACES = 0x7fffffff;
76
77 /**
78 * Supported number of vertex color sets per mesh.
79 */
80 const AI_MAX_NUMBER_OF_COLOR_SETS = 0x4;
81
82 /**
83 * Supported number of texture coord sets (UV(W) channels) per mesh.
84 */
85 const AI_MAX_NUMBER_OF_TEXTURECOORDS = 0x4;
86
87
88 /**
89 * A single face in a mesh, referring to multiple vertices.
90 *
91 * If <code>mNumIndices</code> is 3, we call the face <em>triangle</em>, for
92 * for <code>mNumIndices > 3</code> it's called <em>polygon</em>.
93 *
94 * <code>aiMesh.mPrimitiveTypes</code> can be queried to quickly examine
95 * which types of primitive are actually present in a mesh. The
96 * <code>aiProcess.SortByPType</code> flag post-processing step splits
97 * meshes containing different primitive types (e.g. lines and triangles) in
98 * several "clean" submeshes.
99 *
100 * Furthermore, there is a configuration option
101 * (<code>AI_CONFIG_PP_SBP_REMOVE</code>) to force <code>SortByPType</code>
102 * to completely remove specific kinds of primitives from the imported scene.
103 * In many cases you'll probably want to set this setting to
104 * <code>aiPrimitiveType.LINE | aiPrimitiveType.POINT</code>. Together with
105 * the <code>aiProcess.Triangulate</code> flag you can then be sure that
106 * <code>mNumIndices</code> is always 3.
107 */
108 struct aiFace {
109 /**
110 * Number of indices defining this face.
111 *
112 * The maximum value for this member is <code>AI_MAX_FACE_INDICES</code>.
113 */
114 uint mNumIndices;
115
116 /**
117 * Array of the indicies defining the face.
118 *
119 * The size is given in <code>mNumIndices</code>.
120 */
121 uint* mIndices;
122 }
123
124 /**
125 * A single influence of a bone on a vertex.
126 */
127 struct aiVertexWeight {
128 /**
129 * Index of the vertex which is influenced by the bone.
130 */
131 uint mVertexId;
132
133 /**
134 * The strength of the influence in the range <code>[0..1]</code>.
135 *
136 * The influence from all bones at one vertex sums up to 1.
137 */
138 float mWeight;
139 }
140
141 /**
142 * A single bone of a mesh.
143 *
144 * A bone has a name by which it can be found in the frame hierarchy and by
145 * which it can be addressed by animations. In addition it has a number of
146 * influences on vertices.
147 */
148 struct aiBone {
149 /**
150 * The name of the bone.
151 */
152 aiString mName;
153
154 /**
155 * The number of vertices affected by this bone.
156 *
157 * The maximum value for this member is <code>AI_MAX_BONE_WEIGHTS</code>.
158 */
159 uint mNumWeights;
160
161 /**
162 * The vertices affected by this bone.
163 *
164 * This array is <code>mNumWeights</code> entries in size.
165 */
166 aiVertexWeight* mWeights;
167
168 /**
169 * Matrix that transforms from mesh space to bone space (in the bind
170 * pose).
171 */
172 aiMatrix4x4 mOffsetMatrix;
173 }
174
175 /**
176 * Enumerates the types of geometric primitives supported by Assimp.
177 *
178 * See: <code>aiFace</code>, <code>aiProcess.SortByPType</code>,
179 * <code>aiProcess.Triangulate</code>,
180 * <code>AI_CONFIG_PP_SBP_REMOVE</code>.
181 */
182 enum aiPrimitiveType : uint {
183 /** A point primitive.
184 *
185 * This is just a single vertex in the virtual world,
186 * <code>aiFace</code> contains just one index for such a primitive.
187 */
188 POINT = 0x1,
189
190 /** A line primitive.
191 *
192 * This is a line defined through a start and an end position.
193 * <code>aiFace</code> contains exactly two indices for such a primitive.
194 */
195 LINE = 0x2,
196
197 /** A triangular primitive.
198 *
199 * A triangle consists of three indices.
200 */
201 TRIANGLE = 0x4,
202
203 /** A higher-level polygon with more than 3 edges.
204 *
205 * A triangle is a polygon, but in this context, polygon means
206 * "all polygons that are not triangles". The <code>Triangulate</code>
207 * post processing step is provided for your convinience, it splits all
208 * polygons in triangles (which are much easier to handle).
209 */
210 POLYGON = 0x8
211 }
212
213 // Note: The AI_PRIMITIVE_TYPE_FOR_N_INDICES(n) macro from the C headers is
214 // missing since there is probably not much use for it when just reading
215 // scene files.
216
217 /**
218 * NOT CURRENTLY IN USE. An AnimMesh is an attachment to an #aiMesh stores
219 * per-vertex animations for a particular frame.
220 *
221 * You may think of an <code>aiAnimMesh</code> as a `patch` for the host
222 * mesh, which replaces only certain vertex data streams at a particular
223 * time.
224 *
225 * Each mesh stores n attached attached meshes (<code>aiMesh.mAnimMeshes</code>).
226 * The actual relationship between the time line and anim meshes is
227 * established by #aiMeshAnim, which references singular mesh attachments
228 * by their ID and binds them to a time offset.
229 */
230 struct aiAnimMesh {
231 /**
232 * Replacement for aiMesh.mVertices.
233 *
234 * If this array is non-null, it *must* contain mNumVertices entries.
235 * The corresponding array in the host mesh must be non-null as well -
236 * animation meshes may neither add or nor remove vertex components (if
237 * a replacement array is NULL and the corresponding source array is
238 * not, the source data is taken instead).
239 */
240 aiVector3D* mVertices;
241
242 /// Replacement for <code>aiMesh.mNormals</code>.
243 aiVector3D* mNormals;
244
245 /// Replacement for <code>aiMesh.mTangents</code>.
246 aiVector3D* mTangents;
247
248 /// Replacement for <code>aiMesh.mBitangents</code>.
249 aiVector3D* mBitangents;
250
251 /// Replacement for <code>aiMesh.mColors</code>.
252 aiColor4D* mColors[ AI_MAX_NUMBER_OF_COLOR_SETS ];
253
254 /// Replacement for <code>aiMesh.mTextureCoords</code>.
255 aiVector3D* mTextureCoords[ AI_MAX_NUMBER_OF_TEXTURECOORDS ];
256
257 /**
258 * The number of vertices in the aiAnimMesh, and thus the length of all
259 * the member arrays.
260 *
261 * This has always the same value as the mNumVertices property in the
262 * corresponding aiMesh. It is duplicated here merely to make the length
263 * of the member arrays accessible even if the aiMesh is not known, e.g.
264 * from language bindings.
265 */
266 uint mNumVertices;
267 }
268
269 /**
270 * A mesh represents a geometry or model with a single material.
271 *
272 * It usually consists of a number of vertices and a series
273 * primitives/faces referencing the vertices. In addition there might be a
274 * series of bones, each of them addressing a number of vertices with a
275 * certain weight. Vertex data is presented in channels with each channel
276 * containing a single per-vertex information such as a set of texture
277 * coords or a normal vector. If a data pointer is non-null, the
278 * corresponding data stream is present.
279 *
280 * A mesh uses only a single material which is referenced by a material ID.
281 *
282 * Note: The <code>mPositions</code> member is usually not optional.
283 * However, vertex positions <em>could</em> be missing if the
284 * <code>AI_SCENE_FLAGS_INCOMPLETE</code> flag is set in
285 * <code>aiScene.mFlags</code>.
286 */
287 struct aiMesh {
288 /**
289 * Bitwise combination of <code>aiPrimitiveType</code> members.
290 *
291 * This specifies which types of primitives are present in the mesh.
292 * The <code>SortByPrimitiveType</code> post processing step can be used
293 * to make sure the output meshes consist of one primitive type each.
294 */
295 uint mPrimitiveTypes;
296
297 /**
298 * The number of vertices in this mesh.
299 *
300 * This is also the size of all of the per-vertex data arrays. The
301 * maximum value for this member is <code>AI_MAX_VERTICES</code>.
302 */
303 uint mNumVertices;
304
305 /**
306 * The number of primitives (triangles, polygons, lines) in this mesh.
307 *
308 * This is also the size of the <code>mFaces</code> array. The maximum
309 * value for this member is <code>AI_MAX_FACES</code>.
310 */
311 uint mNumFaces;
312
313 /**
314 * Vertex positions.
315 *
316 * This array is always present in a mesh. The array is
317 * <code>mNumVertices</code> in size.
318 */
319 aiVector3D* mVertices;
320
321 /**
322 * Vertex normals.
323 *
324 * The array contains normalized vectors, null if not present.
325 * The array is <code>mNumVertices</code> in size.
326 *
327 * Normals are undefined for point and line primitives. A mesh
328 * consisting of points and lines only may not have normal vectors.
329 * Meshes with mixed primitive types (i.e. lines and triangles) may have
330 * normals, but the normals for vertices that are only referenced by
331 * point or line primitives are undefined and set to <code>QNAN</code>.
332 *
333 * Note: Normal vectors computed by Assimp are always unit-length.
334 * However, this needn't apply for normals that have been taken
335 * directly from the model file.
336 */
337 aiVector3D* mNormals;
338
339 /**
340 * Vertex tangents.
341 *
342 * The tangent of a vertex points in the direction of the positive x
343 * texture axis. The array contains normalized vectors, null if
344 * not present. The array is <code>mNumVertices</code> in size.
345 *
346 * A mesh consisting of points and lines only may not have normal
347 * vectors. Meshes with mixed primitive types (i.e. lines and triangles)
348 * may have normals, but the normals for vertices that are only
349 * referenced by point or line primitives are undefined and set to
350 * <code>QNAN</code>.
351 *
352 * Note: If the mesh contains tangents, it automatically also contains
353 * bitangents (the bitangent is just the cross product of tangent and
354 * normal vectors).
355 */
356 aiVector3D* mTangents;
357
358 /**
359 * Vertex bitangents.
360 *
361 * The bitangent of a vertex points in the direction of the positive Y
362 * texture axis. The array contains normalized vectors, null if not
363 * present. The array is <code>mNumVertices</code> in size.
364 *
365 * Note: If the mesh contains tangents, it automatically also contains
366 * bitangents.
367 */
368 aiVector3D* mBitangents;
369
370 /**
371 * Vertex color sets.
372 *
373 * A mesh may contain 0 to <code>AI_MAX_NUMBER_OF_COLOR_SETS</code>
374 * vertex colors per vertex. null if not present.
375 *
376 * Each array is <code>mNumVertices</code> in size if present.
377 */
378 aiColor4D* mColors[ AI_MAX_NUMBER_OF_COLOR_SETS ];
379
380 /**
381 * Vertex texture coords, also known as UV channels.
382 * A mesh may contain 0 to <code>AI_MAX_NUMBER_OF_TEXTURECOORDS</code>
383 * per vertex. null if not present.
384 *
385 * Each array is <code>mNumVertices</code> in size.
386 */
387 aiVector3D* mTextureCoords[ AI_MAX_NUMBER_OF_TEXTURECOORDS ];
388
389 /**
390 * Specifies the number of components for a given UV channel.
391 *
392 * Up to three channels are supported (UVW, for accessing volume or cube
393 * maps). If the value is 2 for a given channel <code>n</code>, the
394 * component <code>p.z</code> of <code>mTextureCoords[n][p]</code> is set
395 * to 0. If the value is 1 for a given channel, <code>p.y</code> is set
396 * to 0, too. If this value is 0, 2 should be assumed.
397 *
398 * Note: 4D coords are not supported.
399 */
400 uint mNumUVComponents[ AI_MAX_NUMBER_OF_TEXTURECOORDS ];
401
402 /**
403 * The faces the mesh is contstructed from.
404 *
405 * Each face referrs to a number of vertices by their indices.
406 * This array is always present in a mesh, its size is given
407 * in <code>mNumFaces</code>. If the
408 * <code>AI_SCENE_FLAGS_NON_VERBOSE_FORMAT</code> is <em>not</em> set,
409 * each face references an unique set of vertices.
410 */
411 aiFace* mFaces;
412
413 /**
414 * The number of bones this mesh contains.
415 *
416 * Can be 0, in which case the <code>mBones</code> array is null.
417 */
418 uint mNumBones;
419
420 /**
421 * The bones of this mesh.
422 *
423 * A bone consists of a name by which it can be found in the frame
424 * hierarchy and a set of vertex weights.
425 */
426 aiBone** mBones;
427
428 /**
429 * The material used by this mesh.
430 *
431 * A mesh does use only a single material. If an imported model uses
432 * multiple materials, the import splits up the mesh. Use this value as
433 * index into the scene's material list.
434 */
435 uint mMaterialIndex;
436
437 /**
438 * Name of the mesh.
439 *
440 * Meshes can be named, but this is not a requirement and leaving this
441 * field empty is totally fine.
442 *
443 * There are mainly three uses for mesh names:
444 * - Some formats name nodes and meshes independently.
445 * - Importers tend to split meshes up to meet the one-material-per-mesh
446 * requirement. Assigning the same (dummy) name to each of the result
447 * meshes aids the caller at recovering the original mesh partitioning.
448 * - Vertex animations refer to meshes by their names.
449 */
450 aiString mName;
451
452 /// NOT CURRENTLY IN USE. The number of attachment meshes.
453 uint mNumAnimMeshes;
454
455 /**
456 * NOT CURRENTLY IN USE. Attachment meshes for this mesh, for vertex-
457 * based animation.
458 *
459 * Attachment meshes carry replacement data for some of the mesh's
460 * vertex components (usually positions, normals).
461 */
462 aiAnimMesh** mAnimMeshes;
463 }
464 }
+0
-597
port/unmaintained/dAssimp/assimp/postprocess.d less more
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Definitions for import post processing steps.
43 */
44 module assimp.postprocess;
45
46 extern ( C ) {
47 /**
48 * Defines the flags for all possible post processing steps.
49 *
50 * See: <code>aiImportFile</code>, <code>aiImportFileEx</code>
51 */
52 enum aiPostProcessSteps {
53 /**
54 * Calculates the tangents and bitangents for the imported meshes.
55 *
56 * Does nothing if a mesh does not have normals. You might want this post
57 * processing step to be executed if you plan to use tangent space
58 * calculations such as normal mapping applied to the meshes. There is a
59 * config setting, <code>AI_CONFIG_PP_CT_MAX_SMOOTHING_ANGLE</code>,
60 * which allows you to specify a maximum smoothing angle for the
61 * algorithm. However, usually you will want to use the default value.
62 */
63 CalcTangentSpace = 0x1,
64
65 /**
66 * Identifies and joins identical vertex data sets within all imported
67 * meshes.
68 *
69 * After this step is run each mesh does contain only unique vertices
70 * anymore, so a vertex is possibly used by multiple faces. You usually
71 * want to use this post processing step. If your application deals with
72 * indexed geometry, this step is compulsory or you will just waste
73 * rendering time. <em>If this flag is not specified</em>, no vertices
74 * are referenced by more than one face and <em>no index buffer is
75 * required</em> for rendering.
76 */
77 JoinIdenticalVertices = 0x2,
78
79 /**
80 * Converts all the imported data to a left-handed coordinate space.
81 *
82 * By default the data is returned in a right-handed coordinate space
83 * which for example OpenGL prefers. In this space, +X points to the
84 * right, +Z points towards the viewer and and +Y points upwards. In the
85 * DirectX coordinate space +X points to the right, +Y points upwards and
86 * +Z points away from the viewer.
87 *
88 * You will probably want to consider this flag if you use Direct3D for
89 * rendering. The <code>ConvertToLeftHanded</code> flag supersedes this
90 * setting and bundles all conversions typically required for D3D-based
91 * applications.
92 */
93 MakeLeftHanded = 0x4,
94
95 /**
96 * Triangulates all faces of all meshes.
97 *
98 * By default the imported mesh data might contain faces with more than 3
99 * indices. For rendering you'll usually want all faces to be triangles.
100 * This post processing step splits up all higher faces to triangles.
101 * Line and point primitives are <em>not</em> modified!.
102 *
103 * If you want »triangles only« with no other kinds of primitives,
104 * specify both <code>Triangulate</code> and <code>SortByPType</code> and
105 * ignore all point and line meshes when you process Assimp's output.
106 */
107 Triangulate = 0x8,
108
109 /**
110 * Removes some parts of the data structure (animations, materials, light
111 * sources, cameras, textures, vertex components).
112 *
113 * The components to be removed are specified in a separate configuration
114 * option, <code>AI_CONFIG_PP_RVC_FLAGS</code>. This is quite useful if
115 * you don't need all parts of the output structure. Especially vertex
116 * colors are rarely used today.
117 *
118 * Calling this step to remove unrequired stuff from the pipeline as
119 * early as possible results in an increased performance and a better
120 * optimized output data structure.
121 *
122 * This step is also useful if you want to force Assimp to recompute
123 * normals or tangents since the corresponding steps don't recompute them
124 * if they have already been loaded from the source asset.
125 *
126 * This flag is a poor one, mainly because its purpose is usually
127 * misunderstood. Consider the following case: a 3d model has been exported
128 * from a CAD app, it has per-face vertex colors. Because of the vertex
129 * colors (which are not even used by most apps),
130 * <code>JoinIdenticalVertices</code> cannot join vertices at the same
131 * position. By using this step, unneeded components are excluded as
132 * early as possible thus opening more room for internal optimzations.
133 */
134 RemoveComponent = 0x10,
135
136 /**
137 * Generates normals for all faces of all meshes.
138 *
139 * This is ignored if normals are already there at the time where this
140 * flag is evaluated. Model importers try to load them from the source
141 * file, so they are usually already there. Face normals are shared
142 * between all points of a single face, so a single point can have
143 * multiple normals, which, in other words, enforces the library to
144 * duplicate vertices in some cases. <code>JoinIdenticalVertices</code>
145 * is <em>useless</em> then.
146 *
147 * This flag may not be specified together with
148 * <code>GenSmoothNormals</code>.
149 */
150 GenNormals = 0x20,
151
152 /**
153 * Generates smooth normals for all vertices in the mesh.
154 *
155 * This is ignored if normals are already there at the time where this
156 * flag is evaluated. Model importers try to load them from the source file, so
157 * they are usually already there.
158 *
159 * There is a configuration option,
160 * <code>AI_CONFIG_PP_GSN_MAX_SMOOTHING_ANGLE</code> which allows you to
161 * specify an angle maximum for the normal smoothing algorithm. Normals
162 * exceeding this limit are not smoothed, resulting in a »hard« seam
163 * between two faces. Using a decent angle here (e.g. 80°) results in
164 * very good visual appearance.
165 */
166 GenSmoothNormals = 0x40,
167
168 /**
169 * Splits large meshes into smaller submeshes.
170 *
171 * This is quite useful for realtime rendering where the number of triangles
172 * which can be maximally processed in a single draw-call is usually limited
173 * by the video driver/hardware. The maximum vertex buffer is usually limited,
174 * too. Both requirements can be met with this step: you may specify both a
175 * triangle and vertex limit for a single mesh.
176 *
177 * The split limits can (and should!) be set through the
178 * <code>AI_CONFIG_PP_SLM_VERTEX_LIMIT</code> and
179 * <code>AI_CONFIG_PP_SLM_TRIANGLE_LIMIT</code> settings. The default
180 * values are <code>AI_SLM_DEFAULT_MAX_VERTICES</code> and
181 * <code>AI_SLM_DEFAULT_MAX_TRIANGLES</code>.
182 *
183 * Note that splitting is generally a time-consuming task, but not if
184 * there's nothing to split. The use of this step is recommended for most
185 * users.
186 */
187 SplitLargeMeshes = 0x80,
188
189 /**
190 * Removes the node graph and pre-transforms all vertices with the local
191 * transformation matrices of their nodes.
192 *
193 * The output scene does still contain nodes, however, there is only a
194 * root node with children, each one referencing only one mesh, each
195 * mesh referencing one material. For rendering, you can simply render
196 * all meshes in order, you don't need to pay attention to local
197 * transformations and the node hierarchy. Animations are removed during
198 * this step.
199 *
200 * This step is intended for applications that have no scenegraph.
201 *
202 * The step <em>can</em> cause some problems: if e.g. a mesh of the asset
203 * contains normals and another, using the same material index, does not,
204 * they will be brought together, but the first meshes's part of the
205 * normal list is zeroed. However, these artifacts are rare.
206 *
207 * Note: The <code>AI_CONFIG_PP_PTV_NORMALIZE</code> configuration
208 * property can be set to normalize the scene's spatial dimension
209 * to the -1...1 range.
210 */
211 PreTransformVertices = 0x100,
212
213 /**
214 * Limits the number of bones simultaneously affecting a single vertex to
215 * a maximum value.
216 *
217 * If any vertex is affected by more than that number of bones, the least
218 * important vertex weights are removed and the remaining vertex weights
219 * are renormalized so that the weights still sum up to 1.
220 *
221 * The default bone weight limit is 4 (<code>AI_LMW_MAX_WEIGHTS</code>),
222 * but you can use the <code>#AI_CONFIG_PP_LBW_MAX_WEIGHTS</code> setting
223 * to supply your own limit to the post processing step.
224 *
225 * If you intend to perform the skinning in hardware, this post processing
226 * step might be of interest for you.
227 */
228 LimitBoneWeights = 0x200,
229
230 /**
231 * Validates the imported scene data structure.
232 *
233 * This makes sure that all indices are valid, all animations and
234 * bones are linked correctly, all material references are correct, etc.
235 *
236 * It is recommended to capture Assimp's log output if you use this flag,
237 * so you can easily find ot what's actually wrong if a file fails the
238 * validation. The validator is quite rude and will find <em>all</em>
239 * inconsistencies in the data structure.
240 *
241 * Plugin developers are recommended to use it to debug their loaders.
242 *
243 * There are two types of validation failures:
244 * <ul>
245 * <li>Error: There's something wrong with the imported data. Further
246 * postprocessing is not possible and the data is not usable at all.
247 * The import fails, see <code>aiGetErrorString()</code> for the
248 * error message.</li>
249 * <li>Warning: There are some minor issues (e.g. 1000000 animation
250 * keyframes with the same time), but further postprocessing and use
251 * of the data structure is still safe. Warning details are written
252 * to the log file, <code>AI_SCENE_FLAGS_VALIDATION_WARNING</code> is
253 * set in <code>aiScene::mFlags</code></li>
254 * </ul>
255 *
256 * This post-processing step is not time-consuming. It's use is not
257 * compulsory, but recommended.
258 */
259 ValidateDataStructure = 0x400,
260
261 /**
262 * Reorders triangles for better vertex cache locality.
263 *
264 * The step tries to improve the ACMR (average post-transform vertex cache
265 * miss ratio) for all meshes. The implementation runs in O(n) and is
266 * roughly based on the 'tipsify' algorithm (see
267 * <tt>http://www.cs.princeton.edu/gfx/pubs/Sander_2007_%3ETR/tipsy.pdf</tt>).
268 *
269 * If you intend to render huge models in hardware, this step might
270 * be of interest for you. The <code>AI_CONFIG_PP_ICL_PTCACHE_SIZE</code>
271 * config setting can be used to fine-tune the cache optimization.
272 */
273 ImproveCacheLocality = 0x800,
274
275 /**
276 * Searches for redundant/unreferenced materials and removes them.
277 *
278 * This is especially useful in combination with the
279 * <code>PretransformVertices</code> and <code>OptimizeMeshes</code>
280 * flags. Both join small meshes with equal characteristics, but they
281 * can't do their work if two meshes have different materials. Because
282 * several material settings are always lost during Assimp's import
283 * filters, (and because many exporters don't check for redundant
284 * materials), huge models often have materials which are are defined
285 * several times with exactly the same settings.
286 *
287 * Several material settings not contributing to the final appearance of
288 * a surface are ignored in all comparisons; the material name is one of
289 * them. So, if you are passing additional information through the
290 * content pipeline (probably using »magic« material names), don't
291 * specify this flag. Alternatively take a look at the
292 * <code>AI_CONFIG_PP_RRM_EXCLUDE_LIST</code> setting.
293 */
294 RemoveRedundantMaterials = 0x1000,
295
296 /**
297 * This step tries to determine which meshes have normal vectors that are
298 * acing inwards.
299 *
300 * The algorithm is simple but effective: The bounding box of all
301 * vertices and their normals is compared against the volume of the
302 * bounding box of all vertices without their normals. This works well
303 * for most objects, problems might occur with planar surfaces. However,
304 * the step tries to filter such cases.
305 *
306 * The step inverts all in-facing normals. Generally it is recommended to
307 * enable this step, although the result is not always correct.
308 */
309 FixInfacingNormals = 0x2000,
310
311 /**
312 * This step splits meshes with more than one primitive type in
313 * homogeneous submeshes.
314 *
315 * The step is executed after the triangulation step. After the step
316 * returns, just one bit is set in <code>aiMesh.mPrimitiveTypes</code>.
317 * This is especially useful for real-time rendering where point and line
318 * primitives are often ignored or rendered separately.
319 *
320 * You can use the <code>AI_CONFIG_PP_SBP_REMOVE</code> option to
321 * specify which primitive types you need. This can be used to easily
322 * exclude lines and points, which are rarely used, from the import.
323 */
324 SortByPType = 0x8000,
325
326 /**
327 * This step searches all meshes for degenerated primitives and converts
328 * them to proper lines or points.
329 *
330 * A face is »degenerated« if one or more of its points are identical.
331 * To have the degenerated stuff not only detected and collapsed but also
332 * removed, try one of the following procedures:
333 *
334 * <b>1.</b> (if you support lines and points for rendering but don't
335 * want the degenerates)
336 * <ul>
337 * <li>Specify the <code>FindDegenerates</code> flag.</li>
338 * <li>Set the <code>AI_CONFIG_PP_FD_REMOVE</code> option to 1. This will
339 * cause the step to remove degenerated triangles from the import
340 * as soon as they're detected. They won't pass any further
341 * pipeline steps.</li>
342 * </ul>
343 *
344 * <b>2.</b>(if you don't support lines and points at all ...)
345 * <ul>
346 * <li>Specify the <code>FindDegenerates</code> flag.</li>
347 * <li>Specify the <code>SortByPType</code> flag. This moves line and
348 * point primitives to separate meshes.</li>
349 * <li>Set the <code>AI_CONFIG_PP_SBP_REMOVE</codet> option to
350 * <code>aiPrimitiveType_POINTS | aiPrimitiveType_LINES</code>
351 * to cause SortByPType to reject point and line meshes from the
352 * scene.</li>
353 * </ul>
354 *
355 * Note: Degenerated polygons are not necessarily bad and that's why
356 * they're not removed by default. There are several file formats
357 * which don't support lines or points. Some exporters bypass the
358 * format specification and write them as degenerated triangle
359 * instead.
360 */
361 FindDegenerates = 0x10000,
362
363 /**
364 * This step searches all meshes for invalid data, such as zeroed normal
365 * vectors or invalid UV coords and removes/fixes them. This is intended
366 * to get rid of some common exporter errors.
367 *
368 * This is especially useful for normals. If they are invalid, and the
369 * step recognizes this, they will be removed and can later be
370 * recomputed, e.g. by the <code>GenSmoothNormals</code> step.
371 *
372 * The step will also remove meshes that are infinitely small and reduce
373 * animation tracks consisting of hundreds if redundant keys to a single
374 * key. The <code>AI_CONFIG_PP_FID_ANIM_ACCURACY</code> config property
375 * decides the accuracy of the check for duplicate animation tracks.
376 */
377 FindInvalidData = 0x20000,
378
379 /**
380 * This step converts non-UV mappings (such as spherical or cylindrical
381 * mapping) to proper texture coordinate channels.
382 *
383 * Most applications will support UV mapping only, so you will probably
384 * want to specify this step in every case. Note tha Assimp is not always
385 * able to match the original mapping implementation of the 3d app which
386 * produced a model perfectly. It's always better to let the father app
387 * compute the UV channels, at least 3ds max, maja, blender, lightwave,
388 * modo, ... are able to achieve this.
389 *
390 * Note: If this step is not requested, you'll need to process the
391 * <code>AI_MATKEY_MAPPING</code> material property in order to
392 * display all assets properly.
393 */
394 GenUVCoords = 0x40000,
395
396 /**
397 * This step applies per-texture UV transformations and bakes them to
398 * stand-alone vtexture coordinate channelss.
399 *
400 * UV transformations are specified per-texture – see the
401 * <code>AI_MATKEY_UVTRANSFORM</code> material key for more information.
402 * This step processes all textures with transformed input UV coordinates
403 * and generates new (pretransformed) UV channel which replace the old
404 * channel. Most applications won't support UV transformations, so you
405 * will probably want to specify this step.
406 *
407 * Note: UV transformations are usually implemented in realtime apps by
408 * transforming texture coordinates at vertex shader stage with a 3x3
409 * (homogenous) transformation matrix.
410 */
411 TransformUVCoords = 0x80000,
412
413 /**
414 * This step searches for duplicate meshes and replaces duplicates with
415 * references to the first mesh.
416 *
417 * This step takes a while, don't use it if you have no time. Its main
418 * purpose is to workaround the limitation that many export file formats
419 * don't support instanced meshes, so exporters need to duplicate meshes.
420 * This step removes the duplicates again. Please note that Assimp does
421 * currently not support per-node material assignment to meshes, which
422 * means that identical meshes with differnent materials are currently
423 * <em>not</em> joined, although this is planned for future versions.
424 */
425 FindInstances = 0x100000,
426
427 /**
428 * A postprocessing step to reduce the number of meshes.
429 *
430 * In fact, it will reduce the number of drawcalls.
431 *
432 * This is a very effective optimization and is recommended to be used
433 * together with <code>OptimizeGraph</code>, if possible. The flag is
434 * fully compatible with both <code>SplitLargeMeshes</code> and
435 * <code>SortByPType</code>.
436 */
437 OptimizeMeshes = 0x200000,
438
439 /**
440 * A postprocessing step to optimize the scene hierarchy.
441 *
442 * Nodes with no animations, bones, lights or cameras assigned are
443 * collapsed and joined.
444 *
445 * Node names can be lost during this step. If you use special tag nodes
446 * to pass additional information through your content pipeline, use the
447 * <code>AI_CONFIG_PP_OG_EXCLUDE_LIST</code> setting to specify a list of
448 * node names you want to be kept. Nodes matching one of the names in
449 * this list won't be touched or modified.
450 *
451 * Use this flag with caution. Most simple files will be collapsed to a
452 * single node, complex hierarchies are usually completely lost. That's
453 * note the right choice for editor environments, but probably a very
454 * effective optimization if you just want to get the model data, convert
455 * it to your own format and render it as fast as possible.
456 *
457 * This flag is designed to be used with <code>OptimizeMeshes</code> for
458 * best results.
459 *
460 * Note: »Crappy« scenes with thousands of extremely small meshes packed
461 * in deeply nested nodes exist for almost all file formats.
462 * <code>OptimizeMeshes</code> in combination with
463 * <code>OptimizeGraph</code> usually fixes them all and makes them
464 * renderable.
465 */
466 OptimizeGraph = 0x400000,
467
468 /** This step flips all UV coordinates along the y-axis and adjusts
469 * material settings and bitangents accordingly.
470 *
471 * Output UV coordinate system:
472 * <pre> 0y|0y ---------- 1x|0y
473 * | |
474 * | |
475 * | |
476 * 0x|1y ---------- 1x|1y</pre>
477 * You'll probably want to consider this flag if you use Direct3D for
478 * rendering. The <code>AI_PROCESS_CONVERT_TO_LEFT_HANDED</code> flag
479 * supersedes this setting and bundles all conversions typically required
480 * for D3D-based applications.
481 */
482 FlipUVs = 0x800000,
483
484 /**
485 * This step adjusts the output face winding order to be clockwise.
486 *
487 * The default face winding order is counter clockwise.
488 *
489 * Output face order:
490 * <pre> x2
491 *
492 * x0
493 * x1</pre>
494 */
495 FlipWindingOrder = 0x1000000
496 }
497
498 /**
499 * Abbrevation for convenience.
500 */
501 alias aiPostProcessSteps aiProcess;
502
503 /**
504 * Shortcut flag for Direct3D-based applications.
505 *
506 * Combines the <code>MakeLeftHanded</code>, <code>FlipUVs</code> and
507 * <code>FlipWindingOrder</code> flags. The output data matches Direct3D's
508 * conventions: left-handed geometry, upper-left origin for UV coordinates
509 * and clockwise face order, suitable for CCW culling.
510 */
511 const aiPostProcessSteps AI_PROCESS_CONVERT_TO_LEFT_HANDED =
512 aiProcess.MakeLeftHanded |
513 aiProcess.FlipUVs |
514 aiProcess.FlipWindingOrder;
515
516 /**
517 * Default postprocess configuration optimizing the data for real-time rendering.
518 *
519 * Applications would want to use this preset to load models on end-user
520 * PCs, maybe for direct use in game.
521 *
522 * If you're using DirectX, don't forget to combine this value with
523 * the <code>ConvertToLeftHanded</code> step. If you don't support UV
524 * transformations in your application, apply the
525 * <code>TransformUVCoords</code> step, too.
526 *
527 * Note: Please take the time to read the doc for the steps enabled by this
528 * preset. Some of them offer further configurable properties, some of
529 * them might not be of use for you so it might be better to not specify
530 * them.
531 */
532 const aiPostProcessSteps AI_PROCESS_PRESET_TARGET_REALTIME_FAST =
533 aiProcess.CalcTangentSpace |
534 aiProcess.GenNormals |
535 aiProcess.JoinIdenticalVertices |
536 aiProcess.Triangulate |
537 aiProcess.GenUVCoords |
538 aiProcess.SortByPType;
539
540 /**
541 * Default postprocess configuration optimizing the data for real-time
542 * rendering.
543 *
544 * Unlike <code>AI_PROCESS_PRESET_TARGET_REALTIME_FAST</code>, this
545 * configuration performs some extra optimizations to improve rendering
546 * speed and to minimize memory usage. It could be a good choice for a
547 * level editor environment where import speed is not so important.
548 *
549 * If you're using DirectX, don't forget to combine this value with
550 * the <code>ConvertToLeftHanded</code> step. If you don't support UV
551 * transformations in your application, apply the
552 * <code>TransformUVCoords</code> step, too.
553 *
554 * Note: Please take the time to read the doc for the steps enabled by this
555 * preset. Some of them offer further configurable properties, some of
556 * them might not be of use for you so it might be better to not specify
557 * them.
558 */
559 const aiPostProcessSteps AI_PROCESS_PRESET_TARGET_REALTIME_QUALITY =
560 aiProcess.CalcTangentSpace |
561 aiProcess.GenSmoothNormals |
562 aiProcess.JoinIdenticalVertices |
563 aiProcess.ImproveCacheLocality |
564 aiProcess.LimitBoneWeights |
565 aiProcess.RemoveRedundantMaterials |
566 aiProcess.SplitLargeMeshes |
567 aiProcess.Triangulate |
568 aiProcess.GenUVCoords |
569 aiProcess.SortByPType |
570 aiProcess.FindDegenerates |
571 aiProcess.FindInvalidData;
572
573 /**
574 * Default postprocess configuration optimizing the data for real-time
575 * rendering.
576 *
577 * This preset enables almost every optimization step to achieve perfectly
578 * optimized data. It's your choice for level editor environments where
579 * import speed is not important.
580 *
581 * If you're using DirectX, don't forget to combine this value with
582 * the <code>ConvertToLeftHanded</code> step. If you don't support UV
583 * transformations in your application, apply the
584 * <code>TransformUVCoords</code> step, too.
585 *
586 * Note: Please take the time to read the doc for the steps enabled by this
587 * preset. Some of them offer further configurable properties, some of
588 * them might not be of use for you so it might be better to not specify
589 * them.
590 */
591 const aiPostProcessSteps AI_PROCESS_PRESET_TARGET_REALTIME_MAX_QUALITY =
592 AI_PROCESS_PRESET_TARGET_REALTIME_QUALITY |
593 aiProcess.FindInstances |
594 aiProcess.ValidateDataStructure |
595 aiProcess.OptimizeMeshes;
596 }
+0
-306
port/unmaintained/dAssimp/assimp/scene.d less more
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Contains the data structures which store the hierarchy fo the imported data.
43 */
44 module assimp.scene;
45
46 import assimp.animation;
47 import assimp.camera;
48 import assimp.light;
49 import assimp.math;
50 import assimp.mesh;
51 import assimp.material;
52 import assimp.texture;
53 import assimp.types;
54
55 extern ( C ) {
56 /**
57 * A node in the imported hierarchy.
58 *
59 * Each node has name, a parent node (except for the root node), a
60 * transformation relative to its parent and possibly several child nodes.
61 * Simple file formats don't support hierarchical structures, for these
62 * formats the imported scene does consist of only a single root node with
63 * no childs.
64 */
65 struct aiNode {
66 /**
67 * The name of the node.
68 *
69 * The name might be empty (length of zero) but all nodes which need to
70 * be accessed afterwards by bones or animations are usually named.
71 * Multiple nodes may have the same name, but nodes which are accessed
72 * by bones (see <code>aiBone</code> and <code>aiMesh.mBones</code>)
73 * <em>must</em> be unique.
74 *
75 * Cameras and lights are assigned to a specific node name – if there are
76 * multiple nodes with this name, they are assigned to each of them.
77 *
78 * There are no limitations regarding the characters contained in this
79 * string. You should be able to handle stuff like whitespace, tabs,
80 * linefeeds, quotation marks, ampersands, …
81 */
82 aiString mName;
83
84 /**
85 * The transformation relative to the node's parent.
86 */
87 aiMatrix4x4 mTransformation;
88
89 /**
90 * Parent node.
91 *
92 * null if this node is the root node.
93 */
94 aiNode* mParent;
95
96 /**
97 * The number of child nodes of this node.
98 */
99 uint mNumChildren;
100
101 /**
102 * The child nodes of this node.
103 *
104 * null if <code>mNumChildren</code> is 0.
105 */
106 aiNode** mChildren;
107
108 /**
109 * The number of meshes of this node.
110 */
111 int mNumMeshes;
112
113 /**
114 * The meshes of this node.
115 *
116 * Each entry is an index for <code>aiScene.mMeshes</code>.
117 */
118 uint* mMeshes;
119 }
120
121 /**
122 * Flags which are combinated in <code>aiScene.mFlags</code> to store
123 * auxiliary information about the imported scene.
124 */
125 enum aiSceneFlags : uint {
126 /**
127 * Specifies that the scene data structure that was imported is not
128 * complete.
129 *
130 * This flag bypasses some internal validations and allows the import of
131 * animation skeletons, material libraries or camera animation paths
132 * using Assimp. Most applications won't support such data.
133 */
134 INCOMPLETE = 0x1,
135
136 /**
137 * This flag is set by the validation post-processing step
138 * (<code>aiProcess.ValidateDS</code>) if the validation was successful.
139 *
140 * In a validated scene you can be sure that any cross references in the
141 * data structure (e.g. vertex indices) are valid.
142 */
143 VALIDATED = 0x2,
144
145 /**
146 * This flag is set by the validation post-processing step
147 * (<code>aiProcess.ValidateDS</code>) if the validation is successful
148 * but some issues have been found.
149 *
150 * This can for example mean that a texture that does not exist is
151 * referenced by a material or that the bone weights for a vertex don't
152 * sum to 1. In most cases you should still be able to use the import.
153 *
154 * This flag could be useful for applications which don't capture
155 * Assimp's log output.
156 */
157 VALIDATION_WARNING = 0x4,
158
159 /**
160 * This flag is currently only set by the
161 * <code>aiProcess.JoinIdenticalVertices</code> post-processing step. It
162 * indicates that the vertices of the output meshes aren't in the
163 * internal verbose format anymore. In the verbose format all vertices
164 * are unique, no vertex is ever referenced by more than one face.
165 */
166 NON_VERBOSE_FORMAT = 0x8,
167
168 /**
169 * Denotes pure height-map terrain data. Pure terrains usually consist of
170 * quads, sometimes triangles, in a regular grid. The x,y coordinates of
171 * all vertex positions refer to the x,y coordinates on the terrain
172 * height map, the z-axis stores the elevation at a specific point.
173 *
174 * TER (Terragen) and HMP (3D Game Studio) are height map formats.
175 *
176 * Note: Assimp is probably not the best choice for loading <em>huge</em>
177 * terrains – fully triangulated data takes extremely much storage
178 * space and should be avoided as long as possible (typically you will
179 * perform the triangulation when you actually need to render it).
180 */
181 FLAGS_TERRAIN = 0x10
182 }
183
184 /**
185 * The root structure of the imported data.
186 *
187 * Everything that was imported from the given file can be accessed from here.
188 * Objects of this class are generally maintained and owned by Assimp, not
189 * by the caller. You shouldn't want to instance it, nor should you ever try to
190 * delete a given scene on your own.
191 */
192 struct aiScene {
193 /**
194 * Any combination of the <code>aiSceneFlags</code>. By default, this
195 * value is 0, no flags are set.
196 *
197 * Most applications will want to reject all scenes with the
198 * <code>aiSceneFlags.INCOMPLETE</code> bit set.
199 */
200 uint mFlags;
201
202 /**
203 * The root node of the hierarchy.
204 *
205 * There will always be at least the root node if the import was
206 * successful (and no special flags have been set). Presence of further
207 * nodes depends on the format and contents of the imported file.
208 */
209 aiNode* mRootNode;
210
211 /**
212 * The number of meshes in the scene.
213 */
214 uint mNumMeshes;
215
216 /**
217 * The array of meshes.
218 *
219 * Use the indices given in the <code>aiNode</code> structure to access
220 * this array. The array is <code>mNumMeshes</code> in size.
221 *
222 * If the <code>aiSceneFlags.INCOMPLETE</code> flag is not set, there
223 * will always be at least one mesh.
224 */
225 aiMesh** mMeshes;
226
227 /**
228 * The number of materials in the scene.
229 */
230 uint mNumMaterials;
231
232 /**
233 * The array of meshes.
234 *
235 * Use the indices given in the <code>aiMesh</code> structure to access
236 * this array. The array is <code>mNumMaterials</code> in size.
237 *
238 * If the <code>aiSceneFlags.INCOMPLETE</code> flag is not set, there
239 * will always be at least one material.
240 */
241 aiMaterial** mMaterials;
242
243 /**
244 * The number of animations in the scene.
245 */
246 uint mNumAnimations;
247
248 /**
249 * The array of animations.
250 *
251 * All animations imported from the given file are listed here. The array
252 * is <code>mNumAnimations</code> in size.
253 */
254 aiAnimation** mAnimations;
255
256 /**
257 * The number of textures embedded into the file.
258 */
259 uint mNumTextures;
260
261 /**
262 * The array of embedded textures.
263 *
264 * Not many file formats embed their textures into the file. An example
265 * is Quake's <code>MDL</code> format (which is also used by some
266 * GameStudio versions).
267 */
268 aiTexture** mTextures;
269
270 /**
271 * The number of light sources in the scene.
272 *
273 * Light sources are fully optional, in most cases this attribute will be
274 * 0.
275 */
276 uint mNumLights;
277
278 /**
279 * The array of light sources.
280 *
281 * All light sources imported from the given file are listed here. The
282 * array is <code>mNumLights</code> in size.
283 */
284 aiLight** mLights;
285
286 /**
287 * The number of cameras in the scene.
288 *
289 * Cameras are fully optional, in most cases this attribute
290 * will be 0.
291 */
292 uint mNumCameras;
293
294 /**
295 * The array of cameras.
296 *
297 * All cameras imported from the given file are listed here. The array is
298 * <code>mNumCameras</code> in size.
299 *
300 * The first camera in the array (if existing) is the default camera view
301 * at the scene.
302 */
303 aiCamera** mCameras;
304 }
305 }
+0
-122
port/unmaintained/dAssimp/assimp/texture.d less more
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Contains helper structures to handle textures in Assimp.
43 *
44 * Used for file formats which embed their textures into the model file.
45 * Supported are both normal textures, which are stored as uncompressed pixels,
46 * and "compressed" textures, which are stored in a file format such as PNG or
47 * TGA.
48 */
49 module assimp.texture;
50
51 extern ( C ) {
52 /**
53 * Helper structure to represent a texel in a ARGB8888 format.
54 *
55 * Used by aiTexture.
56 */
57 struct aiTexel {
58 align ( 1 ):
59 ubyte b, g, r, a;
60 }
61
62 /**
63 * Helper structure to describe an embedded texture.
64 *
65 * Usually textures are contained in external files but some file formats
66 * embed them directly in the model file. There are two types of
67 * embedded textures:
68 *
69 * <em>1. Uncompressed textures</em>: The color data is given in an
70 * uncompressed format.
71 *
72 * <em>2. Compressed textures</em> stored in a file format like PNG or JPEG.
73 * The raw file bytes are given so the application must utilize an image
74 * decoder (e.g. DevIL) to get access to the actual color data.
75 */
76 struct aiTexture {
77 /**
78 * Width of the texture, in pixels.
79 *
80 * If <code>mHeight</code> is zero the texture is compressed in a format
81 * like JPEG. In this case, this value specifies the size of the memory
82 * area <code>pcData</code> is pointing to, in bytes.
83 */
84 uint mWidth;
85
86 /**
87 * Height of the texture, in pixels.
88 *
89 * If this value is zero, <code>pcData</code> points to an compressed
90 * texture in any format (e.g. JPEG).
91 */
92 uint mHeight;
93
94 /**
95 * A hint from the loader to make it easier for applications to determine
96 * the type of embedded compressed textures.
97 *
98 * If <code>mHeight</code> is not 0, this member is undefined. Otherwise
99 * it is set set to '\0\0\0\0' if the loader has no additional
100 * information about the texture file format used, or the file extension
101 * of the format without a trailing dot. If there are multiple file
102 * extensions for a format, the shortest extension is chosen (JPEG maps
103 * to 'jpg', not to 'jpeg'). E.g. 'dds\0', 'pcx\0', 'jpg\0'. All
104 * characters are lower-case. The fourth byte will always be '\0'.
105 */
106 char achFormatHint[4];
107
108 /**
109 * Data of the texture.
110 *
111 * Points to an array of <code>mWidth * mHeight</code>
112 * <code>aiTexel</code>s. The format of the texture data is always
113 * ARGB8888 to make the implementation for user of the library as easy as
114 * possible.
115 *
116 * If <code>mHeight</code> is 0, this is a pointer to a memory buffer of
117 * size <code>mWidth</code> containing the compressed texture data.
118 */
119 aiTexel* pcData;
120 }
121 }
+0
-249
port/unmaintained/dAssimp/assimp/types.d less more
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Contains miscellaneous types used in Assimp's C API.
43 */
44 module assimp.types;
45
46 extern ( C ) {
47 /**
48 * Our own C boolean type.
49 */
50 enum aiBool : int {
51 FALSE = 0,
52 TRUE = 1
53 }
54
55 /**
56 * Type definition for log stream callback function pointers.
57 */
58 alias void function( char* message, char* user ) aiLogStreamCallback;
59
60 /**
61 * Represents a log stream. A log stream receives all log messages and
62 * streams them somewhere.
63 *
64 * See: <code>aiGetPredefinedLogStream</code>,
65 * <code>aiAttachLogStream</code> and <code>aiDetachLogStream</code>.
66 */
67 struct aiLogStream {
68 /**
69 * Callback function to be called when a new message arrives.
70 */
71 aiLogStreamCallback callback;
72
73 /**
74 * User data to be passed to the callback.
75 */
76 char* user;
77 }
78
79 /**
80 * Maximum dimension for <code>aiString</code>s.
81 *
82 * Assimp strings are zero terminated.
83 */
84 const size_t MAXLEN = 1024;
85
86 /**
87 * Represents an UTF-8 string, zero byte terminated.
88 *
89 * The length of such a string is limited to <code>MAXLEN</code> bytes
90 * (excluding the terminal \0).
91 *
92 * The character set of an aiString is explicitly defined to be UTF-8. This
93 * Unicode transformation was chosen in the belief that most strings in 3d
94 * model files are limited to ASCII characters, thus the character set
95 * needed to be ASCII compatible.
96 *
97 * Most text file loaders provide proper Unicode input file handling,
98 * special unicode characters are correctly transcoded to UTF-8 and are kept
99 * throughout the libraries' import pipeline.
100 *
101 * For most applications, it will be absolutely sufficient to interpret the
102 * aiString as ASCII data and work with it as one would work with a plain
103 * char[].
104 *
105 * To access an aiString from D you might want to use something like the
106 * following piece of code:
107 * ---
108 * char[] importAiString( aiString* s ) {
109 * return s.data[ 0 .. s.length ];
110 * }
111 * ---
112 */
113 struct aiString {
114 /**
115 * Length of the string (excluding the terminal \0).
116 *
117 * This is <em>not</em> the logical length of strings containing UTF-8
118 * multibyte sequences, but the number of bytes from the beginning of the
119 * string to its end.
120 */
121 size_t length;
122
123 /**
124 * String buffer.
125 *
126 * Size limit is <code>MAXLEN</code>.
127 */
128 char data[ MAXLEN ];
129 }
130
131 /**
132 * Standard return type for some library functions.
133 */
134 enum aiReturn : uint {
135 /**
136 * Indicates that a function was successful.
137 */
138 SUCCESS = 0x0,
139
140 /**
141 * Indicates that a function failed.
142 */
143 FAILURE = -0x1,
144
145 /**
146 * Indicates that not enough memory was available to perform the
147 * requested operation.
148 */
149 OUTOFMEMORY = -0x3
150 }
151
152 /**
153 * Seek origins (for the virtual file system API).
154 */
155 enum aiOrigin : uint {
156 /**
157 * Beginning of the file.
158 */
159 SET = 0x0,
160
161 /**
162 * Current position of the file pointer.
163 */
164 CUR = 0x1,
165
166 /**
167 * End of the file.
168 *
169 * Offsets must be negative.
170 */
171 END = 0x2
172 }
173
174 /**
175 * Enumerates predefined log streaming destinations.
176 *
177 * Logging to these streams can be enabled with a single call to
178 * <code>aiAttachPredefinedLogStream()</code>.
179 */
180 enum aiDefaultLogStream :uint {
181 /**
182 * Stream the log to a file.
183 */
184 FILE = 0x1,
185
186 /**
187 * Stream the log to standard output.
188 */
189 STDOUT = 0x2,
190
191 /**
192 * Stream the log to standard error.
193 */
194 STDERR = 0x4,
195
196 /**
197 * MSVC only: Stream the log the the debugger (this relies on
198 * <code>OutputDebugString</code> from the Win32 SDK).
199 */
200 DEBUGGER = 0x8
201 }
202
203 /**
204 * Stores the memory requirements for different components (e.g. meshes,
205 * materials, animations) of an import. All sizes are in bytes.
206 */
207 struct aiMemoryInfo {
208 /**
209 * Storage allocated for texture data.
210 */
211 uint textures;
212
213 /**
214 * Storage allocated for material data.
215 */
216 uint materials;
217
218 /**
219 * Storage allocated for mesh data.
220 */
221 uint meshes;
222
223 /**
224 * Storage allocated for node data.
225 */
226 uint nodes;
227
228 /**
229 * Storage allocated for animation data.
230 */
231 uint animations;
232
233 /**
234 * Storage allocated for camera data.
235 */
236 uint cameras;
237
238 /**
239 * Storage allocated for light data.
240 */
241 uint lights;
242
243 /**
244 * Total storage allocated for the full import.
245 */
246 uint total;
247 }
248 }
+0
-72
port/unmaintained/dAssimp/assimp/versionInfo.d less more
0 /*
1 ---------------------------------------------------------------------------
2 Open Asset Import Library (ASSIMP)
3 ---------------------------------------------------------------------------
4
5 Copyright (c) 2006-2009, ASSIMP Development Team
6
7 All rights reserved.
8
9 Redistribution and use of this software in source and binary forms,
10 with or without modification, are permitted provided that the following
11 conditions are met:
12
13 * Redistributions of source code must retain the above
14 copyright notice, this list of conditions and the
15 following disclaimer.
16
17 * Redistributions in binary form must reproduce the above
18 copyright notice, this list of conditions and the
19 following disclaimer in the documentation and/or other
20 materials provided with the distribution.
21
22 * Neither the name of the ASSIMP team, nor the names of its
23 contributors may be used to endorse or promote products
24 derived from this software without specific prior
25 written permission of the ASSIMP Development Team.
26
27 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
28 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
29 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
30 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
31 OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
32 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
33 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
35 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
36 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
37 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38 ---------------------------------------------------------------------------
39 */
40
41 /**
42 * Flags returned by <code>aiGetCompileFlags()</code>.
43 */
44 module assimp.versionInfo;
45
46 extern ( C ) {
47 /**
48 * Assimp was compiled as a shared object (Windows: DLL).
49 */
50 const uint ASSIMP_CFLAGS_SHARED = 0x1;
51
52 /**
53 * Assimp was compiled against STLport.
54 */
55 const uint ASSIMP_CFLAGS_STLPORT = 0x2;
56
57 /**
58 * Assimp was compiled as a debug build.
59 */
60 const uint ASSIMP_CFLAGS_DEBUG = 0x4;
61
62 /**
63 * Assimp was compiled with ASSIMP_BUILD_BOOST_WORKAROUND defined.
64 */
65 const uint ASSIMP_CFLAGS_NOBOOST = 0x8;
66
67 /**
68 * Assimp was compiled with ASSIMP_BUILD_SINGLETHREADED defined.
69 */
70 const uint ASSIMP_CFLAGS_SINGLETHREADED = 0x10;
71 }
+0
-1
revision.h less more
0 #define SVNRevision 1262
0 #ifndef ASSIMP_REVISION_H_INC
1 #define ASSIMP_REVISION_H_INC
2
3 #define GitVersion 0x@GIT_COMMIT_HASH@
4 #define GitBranch "@GIT_BRANCH@"
5
6 #endif // ASSIMP_REVISION_H_INC
77
88 #import <Cocoa/Cocoa.h>
99 #import <OpenGL/OpenGL.h>
10 #import "aiColor4D.h"
11 #import "aiVector3D.h"
12 #import "aiVector2D.h"
13 #import "aiMatrix4x4.h"
10 #import "color4.h"
11 #import "vector3.h"
12 #import "vector2.h"
13 #import "matrix4x4.h"
1414
1515 /* workflow:
1616
99 #import "ModelLoaderHelperClasses.h"
1010
1111 // assimp include files. These three are usually needed.
12 #import "assimp.h"
13 #import "aiPostProcess.h"
14 #import "aiScene.h"
12 #import "cimport.h"
13 #import "postprocess.h"
14 #import "scene.h"
15 #import "types.h"
1516
1617 #import <Cocoa/Cocoa.h>
1718 #import <OpenGL/OpenGL.h>
2829
2930 // Assimp Stuff
3031 aiScene* _scene;
31 struct aiVector3D scene_min, scene_max, scene_center;
32 aiVector3D scene_min, scene_max, scene_center;
3233 double normalizedScale;
3334
3435 // Our array of textures.
5253 - (void) deleteGLResourcesInContext:(CGLContextObj)cgl_ctx;
5354
5455 - (void) loadTexturesInContext:(CGLContextObj)cgl_ctx withModelPath:(NSString*) modelPath;
55 - (void) getBoundingBoxWithMinVector:(struct aiVector3D*) min maxVectr:(struct aiVector3D*) max;
56 - (void) getBoundingBoxForNode:(const struct aiNode*)nd minVector:(struct aiVector3D*) min maxVector:(struct aiVector3D*) max matrix:(struct aiMatrix4x4*) trafo;
56 - (void) getBoundingBoxWithMinVector:(aiVector3D*) min maxVectr:(aiVector3D*) max;
57 - (void) getBoundingBoxForNode:(const aiNode*)nd minVector:(aiVector3D*) min maxVector:(aiVector3D*) max matrix:(aiMatrix4x4*) trafo;
5758
5859 @end
55 // Copyright __MyCompanyName__ 2010 . All rights reserved.
66 //
77
8 #import "aiConfig.h"
8 #import "cimport.h"
9 #import "config.h"
910 #import "MyDocument.h"
1011 #import <OpenGL/CGLMacro.h>
1112
1516 #define aisgl_min(x,y) (x<y?x:y)
1617 #define aisgl_max(x,y) (y>x?y:x)
1718
18 static void color4_to_float4(const struct aiColor4D *c, float f[4])
19 static void color4_to_float4(const aiColor4D *c, float f[4])
1920 {
2021 f[0] = c->r;
2122 f[1] = c->g;
159160 // Load our new path.
160161
161162 // only ever give us triangles.
162 aiSetImportPropertyInteger(AI_CONFIG_PP_SBP_REMOVE, aiPrimitiveType_LINE | aiPrimitiveType_POINT );
163 aiPropertyStore* props = aiCreatePropertyStore();
164 aiSetImportPropertyInteger(props, AI_CONFIG_PP_SBP_REMOVE, aiPrimitiveType_LINE | aiPrimitiveType_POINT );
163165
164166 NSUInteger aiPostProccesFlags;
165167
180182 }
181183
182184 // aiProcess_FlipUVs is needed for VAO / VBOs, not sure why.
183 _scene = (aiScene*) aiImportFile([[openPanel filename] cStringUsingEncoding:[NSString defaultCStringEncoding]], aiPostProccesFlags | aiProcess_Triangulate | aiProcess_FlipUVs | aiProcess_PreTransformVertices | 0 );
185 _scene = (aiScene*) aiImportFileExWithProperties([[openPanel filename] cStringUsingEncoding:[NSString defaultCStringEncoding]], aiPostProccesFlags | aiProcess_Triangulate | aiProcess_FlipUVs | aiProcess_PreTransformVertices | 0, NULL, props);
186
187 aiReleasePropertyStore(props);
184188
185189 if (_scene)
186190 {
754758
755759 }
756760
757 - (void) getBoundingBoxWithMinVector:(struct aiVector3D*) min maxVectr:(struct aiVector3D*) max
758 {
759 struct aiMatrix4x4 trafo;
761 - (void) getBoundingBoxWithMinVector:(aiVector3D*) min maxVectr:(aiVector3D*) max
762 {
763 aiMatrix4x4 trafo;
760764 aiIdentityMatrix4(&trafo);
761765
762766 min->x = min->y = min->z = 1e10f;
765769 [self getBoundingBoxForNode:_scene->mRootNode minVector:min maxVector:max matrix:&trafo];
766770 }
767771
768 - (void) getBoundingBoxForNode:(const struct aiNode*)nd minVector:(struct aiVector3D*) min maxVector:(struct aiVector3D*) max matrix:(struct aiMatrix4x4*) trafo
769 {
770 struct aiMatrix4x4 prev;
772 - (void) getBoundingBoxForNode:(const aiNode*)nd minVector:(aiVector3D*) min maxVector:(aiVector3D*) max matrix:(aiMatrix4x4*) trafo
773 {
774 aiMatrix4x4 prev;
771775 unsigned int n = 0, t;
772776
773777 prev = *trafo;
775779
776780 for (; n < nd->mNumMeshes; ++n)
777781 {
778 const struct aiMesh* mesh = _scene->mMeshes[nd->mMeshes[n]];
782 const aiMesh* mesh = _scene->mMeshes[nd->mMeshes[n]];
779783 for (t = 0; t < mesh->mNumVertices; ++t)
780784 {
781 struct aiVector3D tmp = mesh->mVertices[t];
785 aiVector3D tmp = mesh->mVertices[t];
782786 aiTransformVecByMatrix4(&tmp,trafo);
783787
784788 min->x = aisgl_min(min->x,tmp.x);
88 /* Begin PBXBuildFile section */
99 1B0E9A901279ED43003108E7 /* libassimp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1B0E9A8F1279ED43003108E7 /* libassimp.a */; };
1010 1B0E9A951279EDCD003108E7 /* ModelLoaderHelperClasses.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1B0E9A941279EDCD003108E7 /* ModelLoaderHelperClasses.mm */; };
11 1B0E9AF51279EFCC003108E7 /* aiColor4D.inl in Resources */ = {isa = PBXBuildFile; fileRef = 1B0E9AD71279EFCC003108E7 /* aiColor4D.inl */; };
12 1B0E9AF61279EFCC003108E7 /* aiMaterial.inl in Resources */ = {isa = PBXBuildFile; fileRef = 1B0E9ADD1279EFCC003108E7 /* aiMaterial.inl */; };
13 1B0E9AF71279EFCC003108E7 /* aiMatrix3x3.inl in Resources */ = {isa = PBXBuildFile; fileRef = 1B0E9ADF1279EFCC003108E7 /* aiMatrix3x3.inl */; };
14 1B0E9AF81279EFCC003108E7 /* aiMatrix4x4.inl in Resources */ = {isa = PBXBuildFile; fileRef = 1B0E9AE11279EFCC003108E7 /* aiMatrix4x4.inl */; };
15 1B0E9AF91279EFCC003108E7 /* aiVector3D.inl in Resources */ = {isa = PBXBuildFile; fileRef = 1B0E9AEA1279EFCC003108E7 /* aiVector3D.inl */; };
1611 1B0E9B1A1279F107003108E7 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 1B0E9B191279F107003108E7 /* libz.dylib */; };
1712 1BDF446B127772AF00D3E723 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1BDF446A127772AF00D3E723 /* OpenGL.framework */; };
1813 1BDF446F127772AF00D3E723 /* Quartz.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1BDF446E127772AF00D3E723 /* Quartz.framework */; };
2419 8D15AC2F0486D014006FF6A4 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165FFE840EACC02AAC07 /* InfoPlist.strings */; };
2520 8D15AC310486D014006FF6A4 /* MyDocument.mm in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4ACFDCFA73011CA2CEA /* MyDocument.mm */; settings = {ATTRIBUTES = (); }; };
2621 8D15AC320486D014006FF6A4 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A37F4B0FDCFA73011CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
22 C75BB4F617EE0B64004F0260 /* color4.inl in Resources */ = {isa = PBXBuildFile; fileRef = C75BB4F117EE0B64004F0260 /* color4.inl */; };
23 C75BB4F717EE0B64004F0260 /* quaternion.inl in Resources */ = {isa = PBXBuildFile; fileRef = C75BB4F517EE0B64004F0260 /* quaternion.inl */; };
24 C75BB51417EE0B75004F0260 /* material.inl in Resources */ = {isa = PBXBuildFile; fileRef = C75BB50317EE0B75004F0260 /* material.inl */; };
25 C75BB51517EE0B75004F0260 /* matrix3x3.inl in Resources */ = {isa = PBXBuildFile; fileRef = C75BB50517EE0B75004F0260 /* matrix3x3.inl */; };
26 C75BB51617EE0B75004F0260 /* matrix4x4.inl in Resources */ = {isa = PBXBuildFile; fileRef = C75BB50717EE0B75004F0260 /* matrix4x4.inl */; };
27 C75BB51717EE0B75004F0260 /* vector2.inl in Resources */ = {isa = PBXBuildFile; fileRef = C75BB51017EE0B75004F0260 /* vector2.inl */; };
28 C75BB51817EE0B75004F0260 /* vector3.inl in Resources */ = {isa = PBXBuildFile; fileRef = C75BB51217EE0B75004F0260 /* vector3.inl */; };
2729 /* End PBXBuildFile section */
2830
2931 /* Begin PBXFileReference section */
3234 1B0E9A8F1279ED43003108E7 /* libassimp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libassimp.a; sourceTree = "<group>"; };
3335 1B0E9A931279EDCD003108E7 /* ModelLoaderHelperClasses.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ModelLoaderHelperClasses.h; sourceTree = "<group>"; };
3436 1B0E9A941279EDCD003108E7 /* ModelLoaderHelperClasses.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ModelLoaderHelperClasses.mm; sourceTree = "<group>"; };
35 1B0E9AD31279EFCC003108E7 /* aiAnim.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiAnim.h; sourceTree = "<group>"; };
36 1B0E9AD41279EFCC003108E7 /* aiAssert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiAssert.h; sourceTree = "<group>"; };
37 1B0E9AD51279EFCC003108E7 /* aiCamera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiCamera.h; sourceTree = "<group>"; };
38 1B0E9AD61279EFCC003108E7 /* aiColor4D.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiColor4D.h; sourceTree = "<group>"; };
39 1B0E9AD71279EFCC003108E7 /* aiColor4D.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = aiColor4D.inl; sourceTree = "<group>"; };
40 1B0E9AD81279EFCC003108E7 /* aiConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiConfig.h; sourceTree = "<group>"; };
41 1B0E9AD91279EFCC003108E7 /* aiDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiDefines.h; sourceTree = "<group>"; };
42 1B0E9ADA1279EFCC003108E7 /* aiFileIO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiFileIO.h; sourceTree = "<group>"; };
43 1B0E9ADB1279EFCC003108E7 /* aiLight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiLight.h; sourceTree = "<group>"; };
44 1B0E9ADC1279EFCC003108E7 /* aiMaterial.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiMaterial.h; sourceTree = "<group>"; };
45 1B0E9ADD1279EFCC003108E7 /* aiMaterial.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = aiMaterial.inl; sourceTree = "<group>"; };
46 1B0E9ADE1279EFCC003108E7 /* aiMatrix3x3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiMatrix3x3.h; sourceTree = "<group>"; };
47 1B0E9ADF1279EFCC003108E7 /* aiMatrix3x3.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = aiMatrix3x3.inl; sourceTree = "<group>"; };
48 1B0E9AE01279EFCC003108E7 /* aiMatrix4x4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiMatrix4x4.h; sourceTree = "<group>"; };
49 1B0E9AE11279EFCC003108E7 /* aiMatrix4x4.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = aiMatrix4x4.inl; sourceTree = "<group>"; };
50 1B0E9AE21279EFCC003108E7 /* aiMesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiMesh.h; sourceTree = "<group>"; };
51 1B0E9AE31279EFCC003108E7 /* aiPostProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiPostProcess.h; sourceTree = "<group>"; };
52 1B0E9AE41279EFCC003108E7 /* aiQuaternion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiQuaternion.h; sourceTree = "<group>"; };
53 1B0E9AE51279EFCC003108E7 /* aiScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiScene.h; sourceTree = "<group>"; };
54 1B0E9AE61279EFCC003108E7 /* aiTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiTexture.h; sourceTree = "<group>"; };
55 1B0E9AE71279EFCC003108E7 /* aiTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiTypes.h; sourceTree = "<group>"; };
56 1B0E9AE81279EFCC003108E7 /* aiVector2D.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiVector2D.h; sourceTree = "<group>"; };
57 1B0E9AE91279EFCC003108E7 /* aiVector3D.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiVector3D.h; sourceTree = "<group>"; };
58 1B0E9AEA1279EFCC003108E7 /* aiVector3D.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = aiVector3D.inl; sourceTree = "<group>"; };
59 1B0E9AEB1279EFCC003108E7 /* aiVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aiVersion.h; sourceTree = "<group>"; };
60 1B0E9AEC1279EFCC003108E7 /* assimp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = assimp.h; sourceTree = "<group>"; };
61 1B0E9AED1279EFCC003108E7 /* assimp.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = assimp.hpp; sourceTree = "<group>"; };
62 1B0E9AEE1279EFCC003108E7 /* DefaultLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DefaultLogger.h; sourceTree = "<group>"; };
63 1B0E9AEF1279EFCC003108E7 /* IOStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IOStream.h; sourceTree = "<group>"; };
64 1B0E9AF01279EFCC003108E7 /* IOSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IOSystem.h; sourceTree = "<group>"; };
65 1B0E9AF11279EFCC003108E7 /* Logger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Logger.h; sourceTree = "<group>"; };
66 1B0E9AF21279EFCC003108E7 /* LogStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LogStream.h; sourceTree = "<group>"; };
67 1B0E9AF31279EFCC003108E7 /* NullLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NullLogger.h; sourceTree = "<group>"; };
68 1B0E9AF41279EFCC003108E7 /* ProgressHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProgressHandler.h; sourceTree = "<group>"; };
6937 1B0E9AFD1279F006003108E7 /* poppack1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = poppack1.h; path = "/Users/vade/Asset Import/include/Compiler/poppack1.h"; sourceTree = "<absolute>"; };
7038 1B0E9AFE1279F006003108E7 /* pushpack1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pushpack1.h; path = "/Users/vade/Asset Import/include/Compiler/pushpack1.h"; sourceTree = "<absolute>"; };
7139 1B0E9B191279F107003108E7 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
8452 7788DA0506752A1600599AAD /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
8553 8D15AC360486D014006FF6A4 /* SimpleAssimpViewX-Info.plist */ = {isa = PBXFileReference; explicitFileType = text.plist.xml; fileEncoding = 4; path = "SimpleAssimpViewX-Info.plist"; sourceTree = "<group>"; };
8654 8D15AC370486D014006FF6A4 /* SimpleAssimpViewX.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SimpleAssimpViewX.app; sourceTree = BUILT_PRODUCTS_DIR; };
55 C75BB4EA17EE0B64004F0260 /* ai_assert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ai_assert.h; sourceTree = "<group>"; };
56 C75BB4EB17EE0B64004F0260 /* anim.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = anim.h; sourceTree = "<group>"; };
57 C75BB4EC17EE0B64004F0260 /* camera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = camera.h; sourceTree = "<group>"; };
58 C75BB4ED17EE0B64004F0260 /* cexport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cexport.h; sourceTree = "<group>"; };
59 C75BB4EE17EE0B64004F0260 /* cfileio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cfileio.h; sourceTree = "<group>"; };
60 C75BB4EF17EE0B64004F0260 /* cimport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cimport.h; sourceTree = "<group>"; };
61 C75BB4F017EE0B64004F0260 /* color4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = color4.h; sourceTree = "<group>"; };
62 C75BB4F117EE0B64004F0260 /* color4.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = color4.inl; sourceTree = "<group>"; };
63 C75BB4F217EE0B64004F0260 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; };
64 C75BB4F317EE0B64004F0260 /* metadata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = metadata.h; sourceTree = "<group>"; };
65 C75BB4F417EE0B64004F0260 /* NullLogger.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = NullLogger.hpp; sourceTree = "<group>"; };
66 C75BB4F517EE0B64004F0260 /* quaternion.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = quaternion.inl; sourceTree = "<group>"; };
67 C75BB4F817EE0B75004F0260 /* DefaultLogger.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = DefaultLogger.hpp; sourceTree = "<group>"; };
68 C75BB4F917EE0B75004F0260 /* defs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = defs.h; sourceTree = "<group>"; };
69 C75BB4FA17EE0B75004F0260 /* Exporter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Exporter.hpp; sourceTree = "<group>"; };
70 C75BB4FB17EE0B75004F0260 /* Importer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Importer.hpp; sourceTree = "<group>"; };
71 C75BB4FC17EE0B75004F0260 /* importerdesc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = importerdesc.h; sourceTree = "<group>"; };
72 C75BB4FD17EE0B75004F0260 /* IOStream.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = IOStream.hpp; sourceTree = "<group>"; };
73 C75BB4FE17EE0B75004F0260 /* IOSystem.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = IOSystem.hpp; sourceTree = "<group>"; };
74 C75BB4FF17EE0B75004F0260 /* light.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = light.h; sourceTree = "<group>"; };
75 C75BB50017EE0B75004F0260 /* Logger.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Logger.hpp; sourceTree = "<group>"; };
76 C75BB50117EE0B75004F0260 /* LogStream.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = LogStream.hpp; sourceTree = "<group>"; };
77 C75BB50217EE0B75004F0260 /* material.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = material.h; sourceTree = "<group>"; };
78 C75BB50317EE0B75004F0260 /* material.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = material.inl; sourceTree = "<group>"; };
79 C75BB50417EE0B75004F0260 /* matrix3x3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = matrix3x3.h; sourceTree = "<group>"; };
80 C75BB50517EE0B75004F0260 /* matrix3x3.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = matrix3x3.inl; sourceTree = "<group>"; };
81 C75BB50617EE0B75004F0260 /* matrix4x4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = matrix4x4.h; sourceTree = "<group>"; };
82 C75BB50717EE0B75004F0260 /* matrix4x4.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = matrix4x4.inl; sourceTree = "<group>"; };
83 C75BB50817EE0B75004F0260 /* mesh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mesh.h; sourceTree = "<group>"; };
84 C75BB50917EE0B75004F0260 /* postprocess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = postprocess.h; sourceTree = "<group>"; };
85 C75BB50A17EE0B75004F0260 /* ProgressHandler.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ProgressHandler.hpp; sourceTree = "<group>"; };
86 C75BB50B17EE0B75004F0260 /* quaternion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = quaternion.h; sourceTree = "<group>"; };
87 C75BB50C17EE0B75004F0260 /* scene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scene.h; sourceTree = "<group>"; };
88 C75BB50D17EE0B75004F0260 /* texture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = texture.h; sourceTree = "<group>"; };
89 C75BB50E17EE0B75004F0260 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = "<group>"; };
90 C75BB50F17EE0B75004F0260 /* vector2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vector2.h; sourceTree = "<group>"; };
91 C75BB51017EE0B75004F0260 /* vector2.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = vector2.inl; sourceTree = "<group>"; };
92 C75BB51117EE0B75004F0260 /* vector3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vector3.h; sourceTree = "<group>"; };
93 C75BB51217EE0B75004F0260 /* vector3.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = vector3.inl; sourceTree = "<group>"; };
94 C75BB51317EE0B75004F0260 /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = "<group>"; };
8795 /* End PBXFileReference section */
8896
8997 /* Begin PBXFrameworksBuildPhase section */
133141 1B0E9AD21279EFCC003108E7 /* include */ = {
134142 isa = PBXGroup;
135143 children = (
136 1B0E9AD31279EFCC003108E7 /* aiAnim.h */,
137 1B0E9AD41279EFCC003108E7 /* aiAssert.h */,
138 1B0E9AD51279EFCC003108E7 /* aiCamera.h */,
139 1B0E9AD61279EFCC003108E7 /* aiColor4D.h */,
140 1B0E9AD71279EFCC003108E7 /* aiColor4D.inl */,
141 1B0E9AD81279EFCC003108E7 /* aiConfig.h */,
142 1B0E9AD91279EFCC003108E7 /* aiDefines.h */,
143 1B0E9ADA1279EFCC003108E7 /* aiFileIO.h */,
144 1B0E9ADB1279EFCC003108E7 /* aiLight.h */,
145 1B0E9ADC1279EFCC003108E7 /* aiMaterial.h */,
146 1B0E9ADD1279EFCC003108E7 /* aiMaterial.inl */,
147 1B0E9ADE1279EFCC003108E7 /* aiMatrix3x3.h */,
148 1B0E9ADF1279EFCC003108E7 /* aiMatrix3x3.inl */,
149 1B0E9AE01279EFCC003108E7 /* aiMatrix4x4.h */,
150 1B0E9AE11279EFCC003108E7 /* aiMatrix4x4.inl */,
151 1B0E9AE21279EFCC003108E7 /* aiMesh.h */,
152 1B0E9AE31279EFCC003108E7 /* aiPostProcess.h */,
153 1B0E9AE41279EFCC003108E7 /* aiQuaternion.h */,
154 1B0E9AE51279EFCC003108E7 /* aiScene.h */,
155 1B0E9AE61279EFCC003108E7 /* aiTexture.h */,
156 1B0E9AE71279EFCC003108E7 /* aiTypes.h */,
157 1B0E9AE81279EFCC003108E7 /* aiVector2D.h */,
158 1B0E9AE91279EFCC003108E7 /* aiVector3D.h */,
159 1B0E9AEA1279EFCC003108E7 /* aiVector3D.inl */,
160 1B0E9AEB1279EFCC003108E7 /* aiVersion.h */,
161 1B0E9AEC1279EFCC003108E7 /* assimp.h */,
162 1B0E9AED1279EFCC003108E7 /* assimp.hpp */,
163 1B0E9AEE1279EFCC003108E7 /* DefaultLogger.h */,
164 1B0E9AEF1279EFCC003108E7 /* IOStream.h */,
165 1B0E9AF01279EFCC003108E7 /* IOSystem.h */,
166 1B0E9AF11279EFCC003108E7 /* Logger.h */,
167 1B0E9AF21279EFCC003108E7 /* LogStream.h */,
168 1B0E9AF31279EFCC003108E7 /* NullLogger.h */,
169 1B0E9AF41279EFCC003108E7 /* ProgressHandler.h */,
144 C75BB4F817EE0B75004F0260 /* DefaultLogger.hpp */,
145 C75BB4F917EE0B75004F0260 /* defs.h */,
146 C75BB4FA17EE0B75004F0260 /* Exporter.hpp */,
147 C75BB4FB17EE0B75004F0260 /* Importer.hpp */,
148 C75BB4FC17EE0B75004F0260 /* importerdesc.h */,
149 C75BB4FD17EE0B75004F0260 /* IOStream.hpp */,
150 C75BB4FE17EE0B75004F0260 /* IOSystem.hpp */,
151 C75BB4FF17EE0B75004F0260 /* light.h */,
152 C75BB50017EE0B75004F0260 /* Logger.hpp */,
153 C75BB50117EE0B75004F0260 /* LogStream.hpp */,
154 C75BB50217EE0B75004F0260 /* material.h */,
155 C75BB50317EE0B75004F0260 /* material.inl */,
156 C75BB50417EE0B75004F0260 /* matrix3x3.h */,
157 C75BB50517EE0B75004F0260 /* matrix3x3.inl */,
158 C75BB50617EE0B75004F0260 /* matrix4x4.h */,
159 C75BB50717EE0B75004F0260 /* matrix4x4.inl */,
160 C75BB50817EE0B75004F0260 /* mesh.h */,
161 C75BB50917EE0B75004F0260 /* postprocess.h */,
162 C75BB50A17EE0B75004F0260 /* ProgressHandler.hpp */,
163 C75BB50B17EE0B75004F0260 /* quaternion.h */,
164 C75BB50C17EE0B75004F0260 /* scene.h */,
165 C75BB50D17EE0B75004F0260 /* texture.h */,
166 C75BB50E17EE0B75004F0260 /* types.h */,
167 C75BB50F17EE0B75004F0260 /* vector2.h */,
168 C75BB51017EE0B75004F0260 /* vector2.inl */,
169 C75BB51117EE0B75004F0260 /* vector3.h */,
170 C75BB51217EE0B75004F0260 /* vector3.inl */,
171 C75BB51317EE0B75004F0260 /* version.h */,
172 C75BB4EA17EE0B64004F0260 /* ai_assert.h */,
173 C75BB4EB17EE0B64004F0260 /* anim.h */,
174 C75BB4EC17EE0B64004F0260 /* camera.h */,
175 C75BB4ED17EE0B64004F0260 /* cexport.h */,
176 C75BB4EE17EE0B64004F0260 /* cfileio.h */,
177 C75BB4EF17EE0B64004F0260 /* cimport.h */,
178 C75BB4F017EE0B64004F0260 /* color4.h */,
179 C75BB4F117EE0B64004F0260 /* color4.inl */,
180 C75BB4F217EE0B64004F0260 /* config.h */,
181 C75BB4F317EE0B64004F0260 /* metadata.h */,
182 C75BB4F417EE0B64004F0260 /* NullLogger.hpp */,
183 C75BB4F517EE0B64004F0260 /* quaternion.inl */,
170184 1B0E9AFC1279F006003108E7 /* Compiler */,
171185 );
172186 path = include;
294308 8D15AC2F0486D014006FF6A4 /* InfoPlist.strings in Resources */,
295309 2F7446AB0DB6BCF400F9684A /* MainMenu.xib in Resources */,
296310 2F7446AC0DB6BCF400F9684A /* MyDocument.xib in Resources */,
297 1B0E9AF51279EFCC003108E7 /* aiColor4D.inl in Resources */,
298 1B0E9AF61279EFCC003108E7 /* aiMaterial.inl in Resources */,
299 1B0E9AF71279EFCC003108E7 /* aiMatrix3x3.inl in Resources */,
300 1B0E9AF81279EFCC003108E7 /* aiMatrix4x4.inl in Resources */,
301 1B0E9AF91279EFCC003108E7 /* aiVector3D.inl in Resources */,
311 C75BB4F617EE0B64004F0260 /* color4.inl in Resources */,
312 C75BB4F717EE0B64004F0260 /* quaternion.inl in Resources */,
313 C75BB51417EE0B75004F0260 /* material.inl in Resources */,
314 C75BB51517EE0B75004F0260 /* matrix3x3.inl in Resources */,
315 C75BB51617EE0B75004F0260 /* matrix4x4.inl in Resources */,
316 C75BB51717EE0B75004F0260 /* vector2.inl in Resources */,
317 C75BB51817EE0B75004F0260 /* vector3.inl in Resources */,
302318 );
303319 runOnlyForDeploymentPostprocessing = 0;
304320 };
412428 GCC_WARN_UNUSED_VARIABLE = YES;
413429 ONLY_ACTIVE_ARCH = YES;
414430 PREBINDING = NO;
415 SDKROOT = macosx10.6;
431 SDKROOT = macosx;
416432 };
417433 name = Debug;
418434 };
424440 GCC_WARN_ABOUT_RETURN_TYPE = YES;
425441 GCC_WARN_UNUSED_VARIABLE = YES;
426442 PREBINDING = NO;
427 SDKROOT = macosx10.6;
443 SDKROOT = macosx;
428444 };
429445 name = Release;
430446 };
2626 Sample_SimpleOpenGL.c
2727 )
2828
29 SET_PROPERTY(TARGET assimp_simpleogl PROPERTY DEBUG_POSTFIX ${DEBUG_POSTFIX})
29 SET_PROPERTY(TARGET assimp_simpleogl PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX})
3030
3131 TARGET_LINK_LIBRARIES( assimp_simpleogl assimp ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} )
3232 SET_TARGET_PROPERTIES( assimp_simpleogl PROPERTIES
3434 )
3535
3636 INSTALL( TARGETS assimp_simpleogl
37 DESTINATION "${BIN_INSTALL_DIR}" COMPONENT assimp-dev
37 DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-dev
3838 )
1010 // ----------------------------------------------------------------------------
1111
1212 #include <stdlib.h>
13 #include <stdio.h>
1314
1415 #include <GL/glut.h>
1516
234235 void do_motion (void)
235236 {
236237 static GLint prev_time = 0;
238 static GLint prev_fps_time = 0;
239 static int frames = 0;
237240
238241 int time = glutGet(GLUT_ELAPSED_TIME);
239242 angle += (time-prev_time)*0.01;
240243 prev_time = time;
244
245 frames += 1;
246 if ((time - prev_fps_time) > 1000) // update every seconds
247 {
248 int current_fps = frames * 1000 / (time - prev_fps_time);
249 printf("%d fps\n", current_fps);
250 frames = 0;
251 prev_fps_time = time;
252 }
253
241254
242255 glutPostRedisplay ();
243256 }
0 FIND_PACKAGE(OpenGL)
1 FIND_PACKAGE(GLUT)
2
3 IF ( NOT GLUT_FOUND )
4 IF ( MSVC )
5 SET ( GLUT_FOUND 1 )
6 SET ( GLUT_INCLUDE_DIR ${Assimp_SOURCE_DIR}/samples/glut/ )
7 SET ( GLUT_LIBRARIES ${Assimp_SOURCE_DIR}/samples/glut/glut32.lib )
8 ELSE ( MSVC )
9 MESSAGE( WARNING "Please install glut." )
10 ENDIF ( MSVC )
11 ENDIF ( NOT GLUT_FOUND )
12
013 INCLUDE_DIRECTORIES(
114 ${Assimp_SOURCE_DIR}/include
215 ${Assimp_SOURCE_DIR}/code
3 ${Assimp_SOURCE_DIR}/samples/glut/
16 ${OPENGL_INCLUDE_DIR}
17 ${GLUT_INCLUDE_DIR}
418 ${Assimp_SOURCE_DIR}/samples/DevIL/include/
519 )
620
721 LINK_DIRECTORIES(
822 ${Assimp_BINARY_DIR}
923 ${Assimp_BINARY_DIR}/lib/
10 ${Assimp_SOURCE_DIR}/samples/glut/
1124 ${Assimp_SOURCE_DIR}/samples/DevIL/lib/
1225 )
1326
1629 SimpleTexturedOpenGL/src/model_loading.cpp
1730 )
1831
19 SET_PROPERTY(TARGET assimp_simpletexturedogl PROPERTY DEBUG_POSTFIX ${DEBUG_POSTFIX})
32 SET_PROPERTY(TARGET assimp_simpletexturedogl PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX})
2033
21 IF( WIN32 )
22 SET( PSDK_PATH "C:/Program Files/Microsoft Platform SDK/Bin" )
23 SET( PSDK_INC "C:/Program Files/Microsoft Platform SDK/Include" )
24
25 FIND_LIBRARY( WIN32_COMCTRL comctl32.lib
26 PATHS
27 "C:/Programme/Microsoft Platform SDK for Windows Server 2003 R2/Lib"
28 DOC "Path to psdk"
29 )
30 ENDIF( WIN32 )
31
32
33 TARGET_LINK_LIBRARIES( assimp_simpletexturedogl assimp opengl32.lib glu32.lib comctl32.lib devil.lib )
34 TARGET_LINK_LIBRARIES( assimp_simpletexturedogl assimp ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} DevIL.lib )
3435
3536 SET_TARGET_PROPERTIES( assimp_simpletexturedogl PROPERTIES
3637 OUTPUT_NAME assimp_simpletexturedogl
3738 )
3839
3940 INSTALL( TARGETS assimp_simpletexturedogl
40 DESTINATION "${BIN_INSTALL_DIR}" COMPONENT assimp-dev
41 DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-dev
4142 )
1616
1717 #include <windows.h>
1818 #include <stdio.h>
19 #include <gl\GL.h>
20 #include <gl\GLU.h>
21 #include <IL\il.h>
19 #include <GL/gl.h>
20 #include <GL/glu.h>
21 #include <IL/il.h>
2222
2323 #include <fstream>
2424
2929
3030 // assimp include files. These three are usually needed.
3131 #include "assimp/Importer.hpp" //OO version Header!
32 #include "assimp/PostProcess.h"
33 #include "assimp/Scene.h"
32 #include "assimp/postprocess.h"
33 #include "assimp/scene.h"
3434 #include "assimp/DefaultLogger.hpp"
3535 #include "assimp/LogStream.hpp"
3636
3737
38 // currently these are hardcoded
39 static const std::string basepath = "../../test/models/OBJ/";
40 static const std::string modelname = "spider.obj";
38 // The default hardcoded path. Can be overridden by supplying a path through the commandline.
39 static std::string modelpath = "../../test/models/OBJ/spider.obj";
4140
4241
4342 HGLRC hRC=NULL; // Permanent Rendering Context
164163 }
165164
166165
166 std::string getBasePath(const std::string& path)
167 {
168 size_t pos = path.find_last_of("\\/");
169 return (std::string::npos == pos) ? "" : path.substr(0, pos + 1);
170 }
167171
168172 int LoadGLTextures(const aiScene* scene)
169173 {
172176 /* Before calling ilInit() version should be checked. */
173177 if (ilGetInteger(IL_VERSION_NUM) < IL_VERSION)
174178 {
175 ILint test = ilGetInteger(IL_VERSION_NUM);
176179 /// wrong DevIL version ///
177180 std::string err_msg = "Wrong DevIL version. Old devil.dll in system32/SysWow64?";
178181 char* cErr_msg = (char *) err_msg.c_str();
219222 /* get iterator */
220223 std::map<std::string, GLuint*>::iterator itr = textureIdMap.begin();
221224
225 std::string basepath = getBasePath(modelpath);
222226 for (int i=0; i<numTextures; i++)
223227 {
224228
409413 unsigned int n=0, t;
410414 aiMatrix4x4 m = nd->mTransformation;
411415
412 m.Scaling(aiVector3D(scale, scale, scale), m);
416 aiMatrix4x4 m2;
417 aiMatrix4x4::Scaling(aiVector3D(scale, scale, scale), m2);
418 m = m * m2;
413419
414420 // update transform
415421 m.Transpose();
796802 return DefWindowProc(hWnd, uMsg, wParam, lParam);
797803 }
798804
799
800805 int WINAPI WinMain( HINSTANCE hInstance, // Instance
801806 HINSTANCE hPrevInstance, // Previous Instance
802807 LPSTR lpCmdLine, // Command Line Parameters
803808 int nShowCmd ) // Window Show State
804809 {
805 MSG msg; // Windows Message Structure
806 BOOL done=FALSE; // Bool Variable To Exit Loop
810 MSG msg;
811 BOOL done=FALSE;
807812
808813 createAILogger();
809814 logInfo("App fired!");
810815
811 // load scene
812
813 if (!Import3DFromFile(basepath+modelname)) return 0;
816 // Check the command line for an override file path.
817 int argc;
818 LPWSTR* argv = CommandLineToArgvW(GetCommandLineW(), &argc);
819 if (argv != NULL && argc > 1)
820 {
821 std::wstring modelpathW(argv[1]);
822 modelpath = std::string(modelpathW.begin(), modelpathW.end());
823 }
824
825 if (!Import3DFromFile(modelpath)) return 0;
814826
815827 logInfo("=============== Post Import ====================");
816828
817
818 // Ask The User Which Screen Mode They Prefer
819829 if (MessageBox(NULL, "Would You Like To Run In Fullscreen Mode?", "Start Fullscreen?", MB_YESNO|MB_ICONEXCLAMATION)==IDNO)
820830 {
821 fullscreen=FALSE; // Windowed Mode
822 }
823
824 // Create Our OpenGL Window (also calls GLinit und LoadGLTextures)
831 fullscreen=FALSE;
832 }
833
825834 if (!CreateGLWindow(windowTitle, 640, 480, 16, fullscreen))
826835 {
827836 return 0;
828837 }
829838
830
831
832
833839 while(!done) // Game Loop
834840 {
835 if (PeekMessage(&msg, NULL, 0,0, PM_REMOVE)) // Is There A Message Waiting
836 {
837 if (msg.message==WM_QUIT) // Have we received A Quit Message?
838 {
839 done=TRUE; // If So done=TRUE
841 if (PeekMessage(&msg, NULL, 0,0, PM_REMOVE))
842 {
843 if (msg.message==WM_QUIT)
844 {
845 done=TRUE;
840846 }
841847 else
842848 {
843 TranslateMessage(&msg); // Translate The Message
844 DispatchMessage(&msg); // Dispatch The Message
849 TranslateMessage(&msg);
850 DispatchMessage(&msg);
845851 }
846852 }
847853 else
849855 // Draw The Scene. Watch For ESC Key And Quit Messaged From DrawGLScene()
850856 if (active)
851857 {
852 if (keys[VK_ESCAPE]) // Was ESC pressed?
858 if (keys[VK_ESCAPE])
853859 {
854 done=TRUE; // ESC signalled A quit
860 done=TRUE;
855861 }
856862 else
857863 {
858 DrawGLScene(); // Draw The Scene
859 SwapBuffers(hDC); // Swap Buffers (Double Buffering)
864 DrawGLScene();
865 SwapBuffers(hDC);
860866 }
861867 }
862868
863 if (keys[VK_F1]) // Is F1 Being Pressed?
864 {
865 keys[VK_F1]=FALSE; // If so make Key FALSE
866 KillGLWindow(); // Kill Our Current Window
867 fullscreen=!fullscreen; // Toggle Fullscreen
868 //recreate Our OpenGL Window
869 if (keys[VK_F1])
870 {
871 keys[VK_F1]=FALSE;
872 KillGLWindow();
873 fullscreen=!fullscreen;
869874 if (!CreateGLWindow(windowTitle, 640, 480, 16, fullscreen))
870875 {
871 return 0; // Quit if Window Was Not Created
876 return 0;
872877 }
873878 }
874879 }
876881
877882 // *** cleanup ***
878883
879 // clear map
880884 textureIdMap.clear(); //no need to delete pointers in it manually here. (Pointers point to textureIds deleted in next step)
881885
882 // clear texture ids
883886 if (textureIds)
884887 {
885888 delete[] textureIds;
888891
889892 // *** cleanup end ***
890893
891 // Shutdown
892894 destroyAILogger();
893895 KillGLWindow();
894 return (msg.wParam); // Exit The Program
895 }
896 return (msg.wParam);
897 }
Binary diff not shown
Binary diff not shown
Binary diff not shown
Binary diff not shown
44 # Open Asset Import Library (ASSIMP)
55 # ---------------------------------------------------------------------------
66 #
7 # Copyright (c) 2006-2010, ASSIMP Development Team
7 # Copyright (c) 2006-2013, ASSIMP Development Team
88 #
99 # All rights reserved.
1010 #
5454 template_gen = "BlenderSceneGen.h.template"
5555 template_src = "BlenderScene.cpp.template"
5656
57 # workaround for stackoverflowing when reading the linked list of scene objects
58 # with the usual approach. See embedded notes for details.
59 Structure_Convert_Base_fullcode = """
60 template <> void Structure :: Convert<Base> (
61 Base& dest,
62 const FileDatabase& db
63 ) const
64 {
65 // note: as per https://github.com/assimp/assimp/issues/128,
66 // reading the Object linked list recursively is prone to stack overflow.
67 // This structure converter is therefore an hand-written exception that
68 // does it iteratively.
69
70 const int initial_pos = db.reader->GetCurrentPos();
71
72 std::pair<Base*, int> todo = std::make_pair(&dest, initial_pos);
73
74 Base* saved_prev = NULL;
75
76 while(true) {
77
78 Base& cur_dest = *todo.first;
79 db.reader->SetCurrentPos(todo.second);
80
81 // we know that this is a double-linked, circular list which we never
82 // traverse backwards, so don't bother resolving the back links.
83 cur_dest.prev = NULL;
84
85 ReadFieldPtr<ErrorPolicy_Warn>(cur_dest.object,"*object",db);
86
87 // just record the offset of the blob data and allocate storage.
88 // Does _not_ invoke Convert() recursively.
89 const int old = db.reader->GetCurrentPos();
90
91 // the return value of ReadFieldPtr indicates whether the object
92 // was already cached. In this case, we don't need to resolve
93 // it again.
94 if(!ReadFieldPtr<ErrorPolicy_Warn>(cur_dest.next,"*next",db, true) && cur_dest.next) {
95 todo = std::make_pair(&*cur_dest.next, db.reader->GetCurrentPos());
96 continue;
97 }
98 break;
99 }
100
101 db.reader->SetCurrentPos(initial_pos + size);
102 }
103
104 """
105
57106
58107 Structure_Convert_decl = """
59108 template <> void Structure :: Convert<{a}> (
104153 # Parse structure definitions from BlenderScene.h
105154 input = open(inputfile,"rt").read()
106155
107 flags = re.ASCII|re.DOTALL|re.MULTILINE
156 #flags = re.ASCII|re.DOTALL|re.MULTILINE
157 flags = re.DOTALL|re.MULTILINE
108158 #stripcoms = re.compile(r"/\*(.*?)*\/",flags)
109159 getstruct = re.compile(r"struct\s+(\w+?)\s*(:\s*ElemBase)?\s*\{(.*?)^\}\s*;",flags)
110160 getsmartx = re.compile(r"(std\s*::\s*)?(vector)\s*<\s*(boost\s*::\s*)?shared_(ptr)\s*<\s*(\w+)\s*>\s*>\s*",flags)
142192
143193 input = input[match.end():]
144194
145 [print ("Enum: "+e) for e in enums]
195 for e in enums:
196 print("Enum: "+e)
146197 for k,v in hits.items():
147198 out = []
148199 for line in v:
176227
177228 v[:] = out
178229 print("Structure {0}".format(k))
179 [print("\t"+"\t".join(elem)) for elem in out]
230 for elem in out:
231 print("\t"+"\t".join(elem))
180232 print("")
181233
182234
197249 # -----------------------------------------------------------------------
198250 # Structure::Convert<T> definitions for all supported structures
199251 for k,v in hits.items():
200 s += "//" + "-"*80 + Structure_Convert_decl.format(a=k)+ "{ \n";
252 s += "//" + "-"*80
253 if k == 'Base':
254 s += Structure_Convert_Base_fullcode
255 continue
256 s += Structure_Convert_decl.format(a=k)+ "{ \n";
201257
202258 for type, name, policy in v:
203259 splits = name.split("[",1)
4242 """Generate the C++ glue code needed to map EXPRESS to C++"""
4343
4444 import sys, os, re
45
46 if sys.version_info < (3, 0):
47 print("must use python 3.0 or greater")
48 sys.exit(-2)
4549
4650 input_template_h = 'IFCReaderGen.h.template'
4751 input_template_cpp = 'IFCReaderGen.cpp.template'
9393 IfcSurfaceStyleShading
9494 IfcSurfaceStyleWithTextures
9595 IfcSweptAreaSolid
96 IfcSweptDiskSolid
9697 IfcTopologicalRepresentationItem
9798 IfcTrimmedCurve
9899 IfcUnit
99100 IfcUnitAssignment
100101 IfcVector
101
102 IfcIShapeProfileDef
103 IfcPropertyListValue
104 IfcRelDefinesByProperties
105 IfcPropertySet
106 IfcPropertySingleValue
107 IfcProperty
108 IfcComplexProperty
109 IfcElementQuantity
0 cmake_minimum_required( VERSION 2.6 )
1
02 INCLUDE_DIRECTORIES(
13 ${Assimp_SOURCE_DIR}/include
24 ${Assimp_SOURCE_DIR}/code
1618 Export.cpp
1719 )
1820
19 SET_PROPERTY(TARGET assimp_cmd PROPERTY DEBUG_POSTFIX ${DEBUG_POSTFIX})
21 SET_PROPERTY(TARGET assimp_cmd PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX})
22
23 IF( WIN32 )
24 ADD_CUSTOM_COMMAND(TARGET assimp_cmd
25 PRE_BUILD
26 COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:assimp> $<TARGET_FILE_DIR:assimp_cmd>
27 MAIN_DEPENDENCY assimp)
28 ENDIF( WIN32 )
2029
2130 TARGET_LINK_LIBRARIES( assimp_cmd assimp ${ZLIB_LIBRARIES})
2231 SET_TARGET_PROPERTIES( assimp_cmd PROPERTIES
2433 )
2534
2635 INSTALL( TARGETS assimp_cmd
27 DESTINATION "${BIN_INSTALL_DIR}" COMPONENT assimp-bin
36 DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-bin
2837 )
5050 " -- Commandline toolchain --\n"
5151 "------------------------------------------------------ \n\n"
5252
53 "Version %i.%i-%s%s%s%s%s (SVNREV %i)\n\n";
53 "Version %i.%i %s%s%s%s%s(GIT commit %x)\n\n";
5454
5555 const char* AICMD_MSG_HELP =
5656 "assimp <verb> <parameters>\n\n"
808808
809809
810810 // -----------------------------------------------------------------------------------
811 // Some chuncks of text will need to be encoded for XML
812 // http://stackoverflow.com/questions/5665231/most-efficient-way-to-escape-xml-html-in-c-string#5665377
813 static std::string encodeXML(const std::string& data) {
814 std::string buffer;
815 buffer.reserve(data.size());
816 for(size_t pos = 0; pos != data.size(); ++pos) {
817 switch(data[pos]) {
818 case '&': buffer.append("&amp;"); break;
819 case '\"': buffer.append("&quot;"); break;
820 case '\'': buffer.append("&apos;"); break;
821 case '<': buffer.append("&lt;"); break;
822 case '>': buffer.append("&gt;"); break;
823 default: buffer.append(&data[pos], 1); break;
824 }
825 }
826 return buffer;
827 }
828
829
830
831 // -----------------------------------------------------------------------------------
811832 // Write a text model dump
812833 void WriteDump(const aiScene* scene, FILE* out, const char* src, const char* cmd, bool shortened)
813834 {
10131034 }
10141035 }
10151036 else if (prop->mType == aiPTI_String) {
1016 fprintf(out,">\n\t\t\t\"%s\"",prop->mData+4 /* skip length */);
1037 fprintf(out,">\n\t\t\t\t\"%s\"",encodeXML(prop->mData+4).c_str() /* skip length */);
10171038 }
10181039 fprintf(out,"\n\t\t\t</MatProperty>\n");
10191040 }
12571278 mesh->mColors[a][n].a);
12581279 }
12591280 }
1260 fprintf(out,"\t\t</Color>\n");
1281 fprintf(out,"\t\t</Colors>\n");
12611282 }
12621283 fprintf(out,"\t</Mesh>\n");
12631284 }
4141 //
4242
4343 VS_VERSION_INFO VERSIONINFO
44 FILEVERSION 1,1,SVNRevision,0
45 PRODUCTVERSION 1,1,SVNRevision,1
44 FILEVERSION 1, 1, GitVersion, 0
45 PRODUCTVERSION 1, 1, GitVersion, 1
4646 FILEFLAGSMASK 0x17L
4747 #ifdef _DEBUG
4848 FILEFLAGS 0x1L
138138 :
139139 piVB (NULL),
140140 piIB (NULL),
141 piVBNormals (NULL),
141142 piEffect (NULL),
142 piVBNormals (NULL),
143 bSharedFX (false),
143144 piDiffuseTexture (NULL),
144145 piSpecularTexture (NULL),
145146 piAmbientTexture (NULL),
147 piEmissiveTexture (NULL),
146148 piNormalTexture (NULL),
147 piEmissiveTexture (NULL),
148149 piOpacityTexture (NULL),
149150 piShininessTexture (NULL),
150151 piLightmapTexture (NULL),
151 pvOriginalNormals (NULL),
152 bSharedFX(false),
153 twosided (false){}
152 twosided (false),
153 pvOriginalNormals (NULL)
154 {}
154155
155156 ~MeshHelper ()
156157 {
4646 {
4747 CBackgroundPainter()
4848 :
49 clrColor(D3DCOLOR_ARGB(0xFF,100,100,100)),
4950 pcTexture(NULL),
50 clrColor(D3DCOLOR_ARGB(0xFF,100,100,100)),
51 eMode(SIMPLE_COLOR),
52 piSkyBoxEffect(NULL)
51 piSkyBoxEffect(NULL),
52 eMode(SIMPLE_COLOR)
5353 {}
5454
5555 public:
0 # Make sure the compiler can find include files from our Hello library.
1 include_directories (
0 cmake_minimum_required( VERSION 2.6 )
1
2 FIND_PACKAGE(DirectX REQUIRED)
3
4 INCLUDE_DIRECTORIES (
25 ${Assimp_SOURCE_DIR}/include
36 ${Assimp_SOURCE_DIR}/code
4 ${DX9_INCLUDE_PATH}
7 ${DirectX_INCLUDE_DIR}
58 )
69
7 # Make sure the linker can find the Hello library once it is built.
8 link_directories (${Assimp_BINARY_DIR} ${AssetImporter_BINARY_DIR}/lib)
10 # Make sure the linker can find the Assimp library once it is built.
11 LINK_DIRECTORIES (${Assimp_BINARY_DIR} ${AssetImporter_BINARY_DIR}/lib)
912
10 # Add executable called "helloDemo" that is built from the source files
11 # "demo.cxx" and "demo_b.cxx". The extensions are automatically found.
12 add_executable( assimp_viewer WIN32
13 ADD_EXECUTABLE( assimp_viewer WIN32
1314 AnimEvaluator.cpp
1415 Background.cpp
1516 Display.cpp
4041 txi.bmp
4142 )
4243
43 SET_PROPERTY(TARGET assimp_viewer PROPERTY DEBUG_POSTFIX ${DEBUG_POSTFIX})
44
45 IF( WIN32 )
46 SET( PSDK_PATH "C:/Program Files/Microsoft Platform SDK/Bin" )
47 SET( PSDK_INC "C:/Program Files/Microsoft Platform SDK/Include" )
48
49 FIND_PATH(DX9_INCLUDE_PATH d3d9.h
50 PATHS
51 "$ENV{DXSDK_DIR}/Include"
52 "$ENV{PROGRAMFILES}/Microsoft DirectX SDK/Include"
53 DOC "The directory where D3D9.h resides")
44 SET_PROPERTY(TARGET assimp_viewer PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX})
5445
5546
56 FIND_LIBRARY(D3D9_LIBRARY d3d9.lib
57 PATHS
58 "$ENV{DXSDK_DIR}/Lib/x86"
59 "$ENV{PROGRAMFILES}/Microsoft DirectX SDK/Lib/x86"
60 DOC "The directory where d3d9.lib resides")
47 IF ( MSVC )
48 ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS )
49 ADD_DEFINITIONS( -D_CRT_SECURE_NO_WARNINGS )
50 ENDIF ( MSVC )
6151
62 FIND_LIBRARY(D3DX9_LIBRARY d3dx9.lib
63 PATHS
64 "$ENV{DXSDK_DIR}/Lib/x86"
65 "$ENV{PROGRAMFILES}/Microsoft DirectX SDK/Lib/x86"
66 DOC "The directory where d3dx9.lib resides")
6752
68 SET( DX9_LIBRARIES ${D3D9_LIBRARY} ${D3DX9_LIBRARY} )
69
70 FIND_LIBRARY( WIN32_COMCTRL comctl32.lib
71 PATHS
72 "C:/Programme/Microsoft Platform SDK for Windows Server 2003 R2/Lib"
73 DOC "Path to psdk"
74 )
75 ADD_DEFINITIONS( -D_SCL_SECURE_NO_WARNINGS )
76 ADD_DEFINITIONS( -D_CRT_SECURE_NO_WARNINGS )
77 ENDIF( WIN32 )
53 #
54 ADD_CUSTOM_COMMAND(TARGET assimp_viewer
55 PRE_BUILD
56 COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:assimp> $<TARGET_FILE_DIR:assimp_viewer>
57 MAIN_DEPENDENCY assimp)
7858
79 # Link the executable to the Hello library.
80 target_link_libraries ( assimp_viewer assimp ${DX9_LIBRARIES} comctl32.lib Winmm.lib )
59 # Link the executable to the assimp + dx libs.
60 TARGET_LINK_LIBRARIES ( assimp_viewer assimp ${DirectX_LIBRARY} ${DirectX_D3DX9_LIBRARY} comctl32.lib winmm.lib )
8161
8262 INSTALL( TARGETS assimp_viewer
83 DESTINATION "${BIN_INSTALL_DIR}" COMPONENT assimp-dev
84 )
63 DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-dev
64 )
5454 :
5555
5656 vPos(0.0f,0.0f,-10.0f),
57 vUp(0.0f,1.0f,0.0f),
5758 vLookAt(0.0f,0.0f,1.0f),
58 vUp(0.0f,1.0f,0.0f),
5959 vRight(0.0f,1.0f,0.0f)
6060 {
6161
286286 TreeView_SetItem(GetDlgItem(g_hDlg,IDC_TREE1),
287287 m_pcCurrentTexture->hTreeItem);
288288
289 // change this in the old aiMaterial structure, too
290 aiMaterial* pcMat = (aiMaterial*)
291 g_pcAsset->pcScene->mMaterials[m_pcCurrentTexture->iMatIndex];
292
293289 // update all meshes referencing this material
294290 for (unsigned int i = 0; i < g_pcAsset->pcScene->mNumMeshes;++i)
295291 {
11861182 {
11871183 // get the current selected material
11881184 std::vector<Info> apclrOut;
1189 const char* szMatKey;
1185 const char* szMatKey = "";
11901186
11911187 switch (LOWORD(wParam))
11921188 {
12541250 clr.lpCustColors = g_aclCustomColors;
12551251 clr.lpfnHook = NULL;
12561252 clr.lpTemplateName = NULL;
1257 clr.lCustData = NULL;
1253 clr.lCustData = 0;
12581254
12591255 ChooseColor(&clr);
12601256
4141 #include "stdafx.h"
4242 #include "assimp_view.h"
4343
44 #include "RICHEDIT.H"
44 #include "richedit.h"
4545
4646 namespace AssimpView {
4747
5252 INT_PTR CALLBACK HelpDialogProc(HWND hwndDlg,UINT uMsg,
5353 WPARAM wParam,LPARAM lParam)
5454 {
55 lParam;
55 (void)lParam;
5656 switch (uMsg)
5757 {
5858 case WM_INITDIALOG:
6969 SendDlgItemMessage(hwndDlg,IDC_RICHEDIT21,
7070 EM_SETTEXTEX,(WPARAM)&sInfo,( LPARAM) pData);
7171
72 UnlockResource(hg);
7372 FreeResource(hg);
7473 return TRUE;
7574 }
4040
4141 #include "stdafx.h"
4242 #include "assimp_view.h"
43 #include "RichEdit.h"
43 #include "richedit.h"
4444
4545 namespace AssimpView {
4646
6969 INT_PTR CALLBACK LogDialogProc(HWND hwndDlg,UINT uMsg,
7070 WPARAM wParam,LPARAM lParam)
7171 {
72 lParam;
72 (void)lParam;
7373 switch (uMsg)
7474 {
7575 case WM_INITDIALOG:
298298 if( !q ) q=strrchr( tmp2,'\\' );
299299 if( q ){
300300 strcpy( q+1,p+1 );
301 if(pFile=fopen( tmp2,"r" ) ){
301 if((pFile=fopen( tmp2,"r" ))){
302302 fclose( pFile );
303303 strcpy(p_szString->data,tmp2);
304304 p_szString->length = strlen(tmp2);
4242 #include "assimp_view.h"
4343
4444 #include <map>
45 #include <functional>
4546
4647 namespace AssimpView {
4748
5960
6061 g_piDevice->SetIndices(g_pcAsset->apcMeshes[iIndex]->piIB);
6162
62 D3DPRIMITIVETYPE type;
63 D3DPRIMITIVETYPE type = D3DPT_POINTLIST;
6364 switch (g_pcAsset->pcScene->mMeshes[iIndex]->mPrimitiveTypes) {
6465 case aiPrimitiveType_POINT:
6566 type = D3DPT_POINTLIST;break;
4040
4141 #include "stdafx.h"
4242 #include "assimp_view.h"
43 #include <windowsx.h>
4344
4445 namespace AssimpView {
4546
9394 ai_assert(sz[0] == '*');
9495 sprintf(buf,"Software\\Classes\\%s",sz+1);
9596
96 RegCreateKeyEx(HKEY_CURRENT_USER,buf,NULL,NULL,0,KEY_ALL_ACCESS, NULL, &g_hRegistry,NULL);
97 RegCreateKeyEx(HKEY_CURRENT_USER,buf,0,NULL,0,KEY_ALL_ACCESS, NULL, &g_hRegistry,NULL);
9798 RegSetValueEx(g_hRegistry,"",0,REG_SZ,(const BYTE*)"ASSIMPVIEW_CLASS",(DWORD)strlen("ASSIMPVIEW_CLASS")+1);
9899 RegCloseKey(g_hRegistry);
99100 }
100 while (sz = strtok(NULL,";"));
101
102 RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Classes\\ASSIMPVIEW_CLASS",NULL,NULL,0,KEY_ALL_ACCESS, NULL, &g_hRegistry,NULL);
101 while ((sz = strtok(NULL,";")));
102
103 RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Classes\\ASSIMPVIEW_CLASS",0,NULL,0,KEY_ALL_ACCESS, NULL, &g_hRegistry,NULL);
103104 RegCloseKey(g_hRegistry);
104105
105 RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Classes\\ASSIMPVIEW_CLASS\\shell\\open\\command",NULL,NULL,0,KEY_ALL_ACCESS, NULL, &g_hRegistry,NULL);
106 RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\Classes\\ASSIMPVIEW_CLASS\\shell\\open\\command",0,NULL,0,KEY_ALL_ACCESS, NULL, &g_hRegistry,NULL);
106107 RegSetValueEx(g_hRegistry,"",0,REG_SZ,(const BYTE*)szTemp,(DWORD)strlen(szTemp)+1);
107108 RegCloseKey(g_hRegistry);
108109
520521 clr.lpCustColors = g_aclCustomColors;
521522 clr.lpfnHook = NULL;
522523 clr.lpTemplateName = NULL;
523 clr.lCustData = NULL;
524 clr.lCustData = 0;
524525
525526 ChooseColor(&clr);
526527
547548 clr.lpCustColors = g_aclCustomColors;
548549 clr.lpfnHook = NULL;
549550 clr.lpTemplateName = NULL;
550 clr.lCustData = NULL;
551 clr.lCustData = 0;
551552
552553 ChooseColor(&clr);
553554
983984 void SetupPPUIState()
984985 {
985986
986 // fucking hell, that's ugly. anyone willing to rewrite me from scratch?
987 // that's ugly. anyone willing to rewrite me from scratch?
987988 HMENU hMenu = GetMenu(g_hDlg);
988989 CheckMenuItem(hMenu,ID_VIEWER_PP_JIV,ppsteps & aiProcess_JoinIdenticalVertices ? MF_CHECKED : MF_UNCHECKED);
989990 CheckMenuItem(hMenu,ID_VIEWER_PP_CTS,ppsteps & aiProcess_CalcTangentSpace ? MF_CHECKED : MF_UNCHECKED);
10391040 char szFileName[MAX_PATH*2];
10401041 DWORD dwTemp;
10411042 if(ERROR_SUCCESS == RegQueryValueEx(g_hRegistry,"ModelExportDest",NULL,NULL,(BYTE*)szFileName,&dwTemp)) {
1043 ai_assert(dwTemp == MAX_PATH + 1);
1044 ai_assert(strlen(szFileName) <= MAX_PATH);
1045
10421046 // invent a nice default file name
10431047 char* sz = std::max(strrchr(szFileName,'\\'),strrchr(szFileName,'/'));
10441048 if (sz) {
1045 strcpy(sz,std::max(strrchr(g_szFileName,'\\'),strrchr(g_szFileName,'/')));
1049 strncpy(sz,std::max(strrchr(g_szFileName,'\\'),strrchr(g_szFileName,'/')),MAX_PATH);
10461050 }
10471051 }
10481052 else {
10491053 // Key was not found. Use the folder where the asset comes from
1050 strcpy(szFileName,g_szFileName);
1054 strncpy(szFileName,g_szFileName,MAX_PATH);
10511055 }
10521056
10531057 // fix file extension
10541058 { char * const sz = strrchr(szFileName,'.');
1055 if(sz) strcpy(sz+1,e->fileExtension);
1059 if(sz) {
1060 ai_assert((sz - &szFileName[0]) + strlen(e->fileExtension) + 1 <= MAX_PATH);
1061 strcpy(sz+1,e->fileExtension);
1062 }
10561063 }
10571064
10581065 // build the stupid info string for GetSaveFileName() - can't use sprintf() because the string must contain binary zeros.
10591066 char desc[256] = {0};
10601067 char* c = strcpy(desc,e->description) + strlen(e->description)+1;
10611068 c += sprintf(c,"*.%s",e->fileExtension)+1;
1062 strcpy(c, "*.*\0");
1069 strcpy(c, "*.*\0"); c += 4;
1070
1071 ai_assert(c - &desc[0] <= 256);
10631072
10641073 const std::string ext = "."+std::string(e->fileExtension);
10651074 OPENFILENAME sFilename1 = {
10821091 }
10831092
10841093 // export the file
1085 const aiReturn res = exp.Export(g_pcAsset->pcScene,e->id,sFinal.c_str());
1094 const aiReturn res = exp.Export(g_pcAsset->pcScene,e->id,sFinal.c_str(),
1095 ppsteps | /* configurable pp steps */
1096 aiProcess_GenSmoothNormals | // generate smooth normal vectors if not existing
1097 aiProcess_SplitLargeMeshes | // split large, unrenderable meshes into submeshes
1098 aiProcess_Triangulate | // triangulate polygons with more than 3 edges
1099 aiProcess_ConvertToLeftHanded | // convert everything to D3D left handed space
1100 aiProcess_SortByPType | // make 'clean' meshes which consist of a single typ of primitives
1101 0
1102 );
10861103 if (res == aiReturn_SUCCESS) {
10871104 CLogDisplay::Instance().AddEntry("[INFO] Exported file " + sFinal,D3DCOLOR_ARGB(0xFF,0x00,0xFF,0x00));
10881105 return;
11181135
11191136 // store the key in a global variable for later use
11201137 RegCreateKeyEx(HKEY_CURRENT_USER,"Software\\ASSIMP\\Viewer",
1121 NULL,NULL,0,KEY_ALL_ACCESS, NULL, &g_hRegistry,NULL);
1138 0,NULL,0,KEY_ALL_ACCESS, NULL, &g_hRegistry,NULL);
11221139
11231140 if(ERROR_SUCCESS != RegQueryValueEx(g_hRegistry,"LastUIState",NULL,NULL,
11241141 (BYTE*)&dwValue,&dwTemp))
18141831 PostQuitMessage(0);
18151832 DestroyWindow(hwndDlg);
18161833 }
1834 else if (IDC_COMBO1 == LOWORD(wParam))
1835 {
1836 if(HIWORD(wParam) == CBN_SELCHANGE) {
1837 const size_t sel = static_cast<size_t>(ComboBox_GetCurSel(GetDlgItem(hwndDlg,IDC_COMBO1)));
1838 if(g_pcAsset) {
1839 g_pcAsset->mAnimator->SetAnimIndex(sel);
1840 SendDlgItemMessage(hwndDlg,IDC_SLIDERANIM,TBM_SETPOS,TRUE,0);
1841 }
1842 }
1843 }
18171844 else if (ID_VIEWER_RESETVIEW == LOWORD(wParam))
18181845 {
18191846 g_sCamera.vPos = aiVector3D(0.0f,0.0f,-10.0f);
19041931 }
19051932 }
19061933
1907 // fucking hell, this is ugly. anyone willing to rewrite it from scratch using wxwidgets or similar?
1934 // this is ugly. anyone willing to rewrite it from scratch using wxwidgets or similar?
19081935 else if (ID_VIEWER_PP_JIV == LOWORD(wParam)) {
19091936 ppsteps ^= aiProcess_JoinIdenticalVertices;
19101937 CheckMenuItem(hMenu,ID_VIEWER_PP_JIV,ppsteps & aiProcess_JoinIdenticalVertices ? MF_CHECKED : MF_UNCHECKED);
23992426 };
24002427 DWORD dwTemp = MAX_PATH;
24012428 RegCreateKeyEx(HKEY_CURRENT_USER,
2402 "Software\\ASSIMP\\Viewer",NULL,NULL,0,KEY_ALL_ACCESS, NULL, &g_hRegistry,NULL);
2429 "Software\\ASSIMP\\Viewer",0,NULL,0,KEY_ALL_ACCESS, NULL, &g_hRegistry,NULL);
24032430 if(ERROR_SUCCESS == RegQueryValueEx(g_hRegistry,"LastSkyBoxSrc",NULL,NULL,
24042431 (BYTE*)szFileName,&dwTemp) && '\0' != szFileName[0])
24052432 {
5959 bSuperSample (false),
6060 bRenderMats (true),
6161 bRenderNormals (false),
62 eDrawMode (NORMAL),
6362 b3Lights (false),
6463 bLightRotate (false),
6564 bRotate (true),
6665 bLowQuality (false),
6766 bNoSpecular (false),
6867 bStereoView (false),
68 bNoAlphaBlending(false),
69 eDrawMode (NORMAL),
6970 bCulling (false),
70 bSkeleton (false),
71 bNoAlphaBlending(false)
71 bSkeleton (false)
7272
7373 {}
7474
105105 aiVector3D g_avLightDirs[1] =
106106 { aiVector3D(-0.5f,0.6f,0.2f) };
107107
108 extern D3DCOLOR g_avLightColors[3] =
108 D3DCOLOR g_avLightColors[3] =
109109 {
110110 D3DCOLOR_ARGB(0xFF,0xFF,0xFF,0xFF),
111111 D3DCOLOR_ARGB(0xFF,0xFF,0x00,0x00),
871871 g_pcTexture = NULL;
872872 g_szImageMask = NULL;
873873
874 UnlockResource(hg);
875874 FreeResource(hg);
876875 return 0;
877876 }
878877
879 UnlockResource(hg);
880878 FreeResource(hg);
881879
882880 D3DSURFACE_DESC sDesc;
908906 D3DCOLOR_ARGB(0xFF,0xFF,0,0));
909907 g_szImageMask = NULL;
910908
911 UnlockResource(hg);
912909 FreeResource(hg);
913910 return 0;
914911 }
915912
916 UnlockResource(hg);
917913 FreeResource(hg);
918914
919915 // lock the texture and copy it to get a pointer
4343
4444 #include <d3d9.h>
4545 #include <d3dx9.h>
46 #include <D3DX9Mesh.h>
46 #include <d3dx9mesh.h>
4747
4848 // ShellExecute()
4949 #include <shellapi.h>
5050 #include <commctrl.h>
5151
5252 // GetOpenFileName()
53 #include <Commdlg.h>
53 #include <commdlg.h>
5454 #include <algorithm>
5555 #include <mmsystem.h>
5656
5959 #include <list>
6060 #include <vector>
6161
62 #if defined _MSC_VER
6263 // Windows CommonControls 6.0 Manifest Extensions
63 #if defined _M_IX86
64 # pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
65 #elif defined _M_IA64
66 # pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
67 #elif defined _M_X64
68 # pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
69 #else
70 # pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
64 # if defined _M_IX86
65 # pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
66 # elif defined _M_IA64
67 # pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
68 # elif defined _M_X64
69 # pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
70 # else
71 # pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
72 # endif
7173 #endif
+0
-1891
workspaces/vc9/UnitTest.vcproj less more
0 <?xml version="1.0" encoding="Windows-1252"?>
1 <VisualStudioProject
2 ProjectType="Visual C++"
3 Version="9.00"
4 Name="unit"
5 ProjectGUID="{9B9D1C90-8A03-409A-B547-AE7B48B90F1A}"
6 RootNamespace="UnitTest"
7 Keyword="Win32Proj"
8 TargetFrameworkVersion="131072"
9 >
10 <Platforms>
11 <Platform
12 Name="Win32"
13 />
14 <Platform
15 Name="x64"
16 />
17 </Platforms>
18 <ToolFiles>
19 </ToolFiles>
20 <Configurations>
21 <Configuration
22 Name="debug|Win32"
23 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
24 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
25 ConfigurationType="1"
26 InheritedPropertySheets=".\shared\UnitTest.vsprops;.\shared\FastSTL.vsprops"
27 CharacterSet="1"
28 >
29 <Tool
30 Name="VCPreBuildEventTool"
31 />
32 <Tool
33 Name="VCCustomBuildTool"
34 />
35 <Tool
36 Name="VCXMLDataGeneratorTool"
37 />
38 <Tool
39 Name="VCWebServiceProxyGeneratorTool"
40 />
41 <Tool
42 Name="VCMIDLTool"
43 />
44 <Tool
45 Name="VCCLCompilerTool"
46 Optimization="0"
47 AdditionalIncludeDirectories="..\..\code;..\..\include"
48 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
49 MinimalRebuild="true"
50 BasicRuntimeChecks="3"
51 RuntimeLibrary="3"
52 UsePrecompiledHeader="2"
53 PrecompiledHeaderThrough="UnitTestPCH.h"
54 WarningLevel="3"
55 Detect64BitPortabilityProblems="true"
56 DebugInformationFormat="4"
57 />
58 <Tool
59 Name="VCManagedResourceCompilerTool"
60 />
61 <Tool
62 Name="VCResourceCompilerTool"
63 />
64 <Tool
65 Name="VCPreLinkEventTool"
66 />
67 <Tool
68 Name="VCLinkerTool"
69 AdditionalDependencies="assimp.lib cppunitd.lib"
70 LinkIncremental="2"
71 SuppressStartupBanner="false"
72 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)\&quot;;&quot;..\..\contrib\cppunit-1.12.1\lib&quot;"
73 IgnoreDefaultLibraryNames=""
74 GenerateDebugInformation="true"
75 SubSystem="1"
76 RandomizedBaseAddress="1"
77 DataExecutionPrevention="0"
78 TargetMachine="1"
79 />
80 <Tool
81 Name="VCALinkTool"
82 />
83 <Tool
84 Name="VCManifestTool"
85 />
86 <Tool
87 Name="VCXDCMakeTool"
88 />
89 <Tool
90 Name="VCBscMakeTool"
91 />
92 <Tool
93 Name="VCFxCopTool"
94 />
95 <Tool
96 Name="VCAppVerifierTool"
97 />
98 <Tool
99 Name="VCPostBuildEventTool"
100 />
101 </Configuration>
102 <Configuration
103 Name="debug|x64"
104 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
105 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
106 ConfigurationType="1"
107 InheritedPropertySheets=".\shared\UnitTest.vsprops"
108 CharacterSet="1"
109 >
110 <Tool
111 Name="VCPreBuildEventTool"
112 />
113 <Tool
114 Name="VCCustomBuildTool"
115 />
116 <Tool
117 Name="VCXMLDataGeneratorTool"
118 />
119 <Tool
120 Name="VCWebServiceProxyGeneratorTool"
121 />
122 <Tool
123 Name="VCMIDLTool"
124 TargetEnvironment="3"
125 />
126 <Tool
127 Name="VCCLCompilerTool"
128 Optimization="0"
129 AdditionalIncludeDirectories="..\..\code;..\..\include"
130 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
131 MinimalRebuild="true"
132 BasicRuntimeChecks="3"
133 RuntimeLibrary="3"
134 UsePrecompiledHeader="2"
135 PrecompiledHeaderThrough="UnitTestPCH.h"
136 WarningLevel="3"
137 Detect64BitPortabilityProblems="true"
138 DebugInformationFormat="3"
139 />
140 <Tool
141 Name="VCManagedResourceCompilerTool"
142 />
143 <Tool
144 Name="VCResourceCompilerTool"
145 />
146 <Tool
147 Name="VCPreLinkEventTool"
148 />
149 <Tool
150 Name="VCLinkerTool"
151 AdditionalDependencies="assimp.lib cppunit64d.lib"
152 LinkIncremental="2"
153 SuppressStartupBanner="false"
154 AdditionalLibraryDirectories="..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)\"
155 IgnoreDefaultLibraryNames=""
156 GenerateDebugInformation="true"
157 SubSystem="1"
158 TargetMachine="17"
159 />
160 <Tool
161 Name="VCALinkTool"
162 />
163 <Tool
164 Name="VCManifestTool"
165 />
166 <Tool
167 Name="VCXDCMakeTool"
168 />
169 <Tool
170 Name="VCBscMakeTool"
171 />
172 <Tool
173 Name="VCFxCopTool"
174 />
175 <Tool
176 Name="VCAppVerifierTool"
177 />
178 <Tool
179 Name="VCPostBuildEventTool"
180 />
181 </Configuration>
182 <Configuration
183 Name="release|Win32"
184 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
185 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
186 ConfigurationType="1"
187 InheritedPropertySheets=".\shared\UnitTest.vsprops;.\shared\FastSTL.vsprops"
188 CharacterSet="1"
189 WholeProgramOptimization="1"
190 >
191 <Tool
192 Name="VCPreBuildEventTool"
193 />
194 <Tool
195 Name="VCCustomBuildTool"
196 />
197 <Tool
198 Name="VCXMLDataGeneratorTool"
199 />
200 <Tool
201 Name="VCWebServiceProxyGeneratorTool"
202 />
203 <Tool
204 Name="VCMIDLTool"
205 />
206 <Tool
207 Name="VCCLCompilerTool"
208 AdditionalIncludeDirectories="..\..\code;..\..\include"
209 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;_SECURE_SCL=0"
210 RuntimeLibrary="2"
211 UsePrecompiledHeader="2"
212 PrecompiledHeaderThrough="UnitTestPCH.h"
213 WarningLevel="3"
214 Detect64BitPortabilityProblems="true"
215 DebugInformationFormat="3"
216 />
217 <Tool
218 Name="VCManagedResourceCompilerTool"
219 />
220 <Tool
221 Name="VCResourceCompilerTool"
222 />
223 <Tool
224 Name="VCPreLinkEventTool"
225 />
226 <Tool
227 Name="VCLinkerTool"
228 AdditionalDependencies="assimp.lib cppunit.lib"
229 LinkIncremental="1"
230 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)\&quot;;&quot;..\..\contrib\cppunit-1.12.1\lib&quot;"
231 GenerateDebugInformation="true"
232 SubSystem="1"
233 OptimizeReferences="2"
234 EnableCOMDATFolding="2"
235 RandomizedBaseAddress="1"
236 DataExecutionPrevention="0"
237 TargetMachine="1"
238 />
239 <Tool
240 Name="VCALinkTool"
241 />
242 <Tool
243 Name="VCManifestTool"
244 />
245 <Tool
246 Name="VCXDCMakeTool"
247 />
248 <Tool
249 Name="VCBscMakeTool"
250 />
251 <Tool
252 Name="VCFxCopTool"
253 />
254 <Tool
255 Name="VCAppVerifierTool"
256 />
257 <Tool
258 Name="VCPostBuildEventTool"
259 />
260 </Configuration>
261 <Configuration
262 Name="release|x64"
263 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
264 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
265 ConfigurationType="1"
266 InheritedPropertySheets=".\shared\UnitTest.vsprops"
267 CharacterSet="1"
268 WholeProgramOptimization="1"
269 >
270 <Tool
271 Name="VCPreBuildEventTool"
272 />
273 <Tool
274 Name="VCCustomBuildTool"
275 />
276 <Tool
277 Name="VCXMLDataGeneratorTool"
278 />
279 <Tool
280 Name="VCWebServiceProxyGeneratorTool"
281 />
282 <Tool
283 Name="VCMIDLTool"
284 TargetEnvironment="3"
285 />
286 <Tool
287 Name="VCCLCompilerTool"
288 AdditionalIncludeDirectories="..\..\code;..\..\include"
289 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
290 RuntimeLibrary="2"
291 UsePrecompiledHeader="2"
292 PrecompiledHeaderThrough="UnitTestPCH.h"
293 WarningLevel="3"
294 Detect64BitPortabilityProblems="true"
295 DebugInformationFormat="3"
296 />
297 <Tool
298 Name="VCManagedResourceCompilerTool"
299 />
300 <Tool
301 Name="VCResourceCompilerTool"
302 />
303 <Tool
304 Name="VCPreLinkEventTool"
305 />
306 <Tool
307 Name="VCLinkerTool"
308 AdditionalDependencies="assimp.lib cppunit64.lib"
309 LinkIncremental="1"
310 AdditionalLibraryDirectories="..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)\"
311 GenerateDebugInformation="true"
312 SubSystem="1"
313 OptimizeReferences="2"
314 EnableCOMDATFolding="2"
315 TargetMachine="17"
316 />
317 <Tool
318 Name="VCALinkTool"
319 />
320 <Tool
321 Name="VCManifestTool"
322 />
323 <Tool
324 Name="VCXDCMakeTool"
325 />
326 <Tool
327 Name="VCBscMakeTool"
328 />
329 <Tool
330 Name="VCFxCopTool"
331 />
332 <Tool
333 Name="VCAppVerifierTool"
334 />
335 <Tool
336 Name="VCPostBuildEventTool"
337 />
338 </Configuration>
339 <Configuration
340 Name="release-dll|Win32"
341 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
342 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
343 ConfigurationType="1"
344 InheritedPropertySheets=".\shared\UnitTest.vsprops;.\shared\FastSTL.vsprops"
345 CharacterSet="1"
346 WholeProgramOptimization="1"
347 >
348 <Tool
349 Name="VCPreBuildEventTool"
350 />
351 <Tool
352 Name="VCCustomBuildTool"
353 />
354 <Tool
355 Name="VCXMLDataGeneratorTool"
356 />
357 <Tool
358 Name="VCWebServiceProxyGeneratorTool"
359 />
360 <Tool
361 Name="VCMIDLTool"
362 />
363 <Tool
364 Name="VCCLCompilerTool"
365 AdditionalIncludeDirectories="..\..\code;..\..\include"
366 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
367 RuntimeLibrary="2"
368 UsePrecompiledHeader="2"
369 PrecompiledHeaderThrough="UnitTestPCH.h"
370 WarningLevel="3"
371 Detect64BitPortabilityProblems="true"
372 DebugInformationFormat="3"
373 />
374 <Tool
375 Name="VCManagedResourceCompilerTool"
376 />
377 <Tool
378 Name="VCResourceCompilerTool"
379 />
380 <Tool
381 Name="VCPreLinkEventTool"
382 />
383 <Tool
384 Name="VCLinkerTool"
385 AdditionalDependencies="assimp.lib cppunit.lib"
386 LinkIncremental="1"
387 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)\&quot;;&quot;..\..\contrib\cppunit-1.12.1\lib&quot;"
388 GenerateDebugInformation="true"
389 SubSystem="1"
390 OptimizeReferences="2"
391 EnableCOMDATFolding="2"
392 RandomizedBaseAddress="1"
393 DataExecutionPrevention="0"
394 TargetMachine="1"
395 />
396 <Tool
397 Name="VCALinkTool"
398 />
399 <Tool
400 Name="VCManifestTool"
401 />
402 <Tool
403 Name="VCXDCMakeTool"
404 />
405 <Tool
406 Name="VCBscMakeTool"
407 />
408 <Tool
409 Name="VCFxCopTool"
410 />
411 <Tool
412 Name="VCAppVerifierTool"
413 />
414 <Tool
415 Name="VCPostBuildEventTool"
416 />
417 </Configuration>
418 <Configuration
419 Name="release-dll|x64"
420 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
421 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
422 ConfigurationType="1"
423 InheritedPropertySheets=".\shared\UnitTest.vsprops"
424 CharacterSet="1"
425 WholeProgramOptimization="1"
426 >
427 <Tool
428 Name="VCPreBuildEventTool"
429 />
430 <Tool
431 Name="VCCustomBuildTool"
432 />
433 <Tool
434 Name="VCXMLDataGeneratorTool"
435 />
436 <Tool
437 Name="VCWebServiceProxyGeneratorTool"
438 />
439 <Tool
440 Name="VCMIDLTool"
441 TargetEnvironment="3"
442 />
443 <Tool
444 Name="VCCLCompilerTool"
445 AdditionalIncludeDirectories="..\..\code;..\..\include"
446 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
447 RuntimeLibrary="2"
448 UsePrecompiledHeader="2"
449 PrecompiledHeaderThrough="UnitTestPCH.h"
450 WarningLevel="3"
451 Detect64BitPortabilityProblems="true"
452 DebugInformationFormat="3"
453 />
454 <Tool
455 Name="VCManagedResourceCompilerTool"
456 />
457 <Tool
458 Name="VCResourceCompilerTool"
459 />
460 <Tool
461 Name="VCPreLinkEventTool"
462 />
463 <Tool
464 Name="VCLinkerTool"
465 AdditionalDependencies="assimp.lib cppunit64.lib"
466 LinkIncremental="1"
467 AdditionalLibraryDirectories="..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)\"
468 GenerateDebugInformation="true"
469 SubSystem="1"
470 OptimizeReferences="2"
471 EnableCOMDATFolding="2"
472 TargetMachine="17"
473 />
474 <Tool
475 Name="VCALinkTool"
476 />
477 <Tool
478 Name="VCManifestTool"
479 />
480 <Tool
481 Name="VCXDCMakeTool"
482 />
483 <Tool
484 Name="VCBscMakeTool"
485 />
486 <Tool
487 Name="VCFxCopTool"
488 />
489 <Tool
490 Name="VCAppVerifierTool"
491 />
492 <Tool
493 Name="VCPostBuildEventTool"
494 />
495 </Configuration>
496 <Configuration
497 Name="debug-dll|Win32"
498 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
499 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
500 ConfigurationType="1"
501 InheritedPropertySheets=".\shared\UnitTest.vsprops;.\shared\FastSTL.vsprops"
502 CharacterSet="1"
503 >
504 <Tool
505 Name="VCPreBuildEventTool"
506 />
507 <Tool
508 Name="VCCustomBuildTool"
509 />
510 <Tool
511 Name="VCXMLDataGeneratorTool"
512 />
513 <Tool
514 Name="VCWebServiceProxyGeneratorTool"
515 />
516 <Tool
517 Name="VCMIDLTool"
518 />
519 <Tool
520 Name="VCCLCompilerTool"
521 Optimization="0"
522 AdditionalIncludeDirectories="..\..\code;..\..\include"
523 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
524 MinimalRebuild="true"
525 BasicRuntimeChecks="3"
526 RuntimeLibrary="3"
527 UsePrecompiledHeader="2"
528 PrecompiledHeaderThrough="UnitTestPCH.h"
529 WarningLevel="3"
530 Detect64BitPortabilityProblems="true"
531 DebugInformationFormat="4"
532 />
533 <Tool
534 Name="VCManagedResourceCompilerTool"
535 />
536 <Tool
537 Name="VCResourceCompilerTool"
538 />
539 <Tool
540 Name="VCPreLinkEventTool"
541 />
542 <Tool
543 Name="VCLinkerTool"
544 AdditionalDependencies="assimp.lib cppunitd.lib"
545 LinkIncremental="2"
546 SuppressStartupBanner="false"
547 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)\&quot;;&quot;..\..\contrib\cppunit-1.12.1\lib&quot;"
548 IgnoreDefaultLibraryNames=""
549 GenerateDebugInformation="true"
550 SubSystem="1"
551 RandomizedBaseAddress="1"
552 DataExecutionPrevention="0"
553 TargetMachine="1"
554 />
555 <Tool
556 Name="VCALinkTool"
557 />
558 <Tool
559 Name="VCManifestTool"
560 />
561 <Tool
562 Name="VCXDCMakeTool"
563 />
564 <Tool
565 Name="VCBscMakeTool"
566 />
567 <Tool
568 Name="VCFxCopTool"
569 />
570 <Tool
571 Name="VCAppVerifierTool"
572 />
573 <Tool
574 Name="VCPostBuildEventTool"
575 />
576 </Configuration>
577 <Configuration
578 Name="debug-dll|x64"
579 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
580 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
581 ConfigurationType="1"
582 InheritedPropertySheets=".\shared\UnitTest.vsprops"
583 CharacterSet="1"
584 >
585 <Tool
586 Name="VCPreBuildEventTool"
587 />
588 <Tool
589 Name="VCCustomBuildTool"
590 />
591 <Tool
592 Name="VCXMLDataGeneratorTool"
593 />
594 <Tool
595 Name="VCWebServiceProxyGeneratorTool"
596 />
597 <Tool
598 Name="VCMIDLTool"
599 TargetEnvironment="3"
600 />
601 <Tool
602 Name="VCCLCompilerTool"
603 Optimization="0"
604 AdditionalIncludeDirectories="..\..\code;..\..\include"
605 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
606 MinimalRebuild="true"
607 BasicRuntimeChecks="3"
608 RuntimeLibrary="3"
609 UsePrecompiledHeader="2"
610 PrecompiledHeaderThrough="UnitTestPCH.h"
611 WarningLevel="3"
612 Detect64BitPortabilityProblems="true"
613 DebugInformationFormat="3"
614 />
615 <Tool
616 Name="VCManagedResourceCompilerTool"
617 />
618 <Tool
619 Name="VCResourceCompilerTool"
620 />
621 <Tool
622 Name="VCPreLinkEventTool"
623 />
624 <Tool
625 Name="VCLinkerTool"
626 AdditionalDependencies="assimp.lib cppunit64d.lib"
627 LinkIncremental="2"
628 SuppressStartupBanner="false"
629 AdditionalLibraryDirectories="..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)\"
630 IgnoreDefaultLibraryNames=""
631 GenerateDebugInformation="true"
632 SubSystem="1"
633 TargetMachine="17"
634 />
635 <Tool
636 Name="VCALinkTool"
637 />
638 <Tool
639 Name="VCManifestTool"
640 />
641 <Tool
642 Name="VCXDCMakeTool"
643 />
644 <Tool
645 Name="VCBscMakeTool"
646 />
647 <Tool
648 Name="VCFxCopTool"
649 />
650 <Tool
651 Name="VCAppVerifierTool"
652 />
653 <Tool
654 Name="VCPostBuildEventTool"
655 />
656 </Configuration>
657 <Configuration
658 Name="release-noboost-st|Win32"
659 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
660 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
661 ConfigurationType="1"
662 InheritedPropertySheets=".\shared\UnitTest.vsprops;.\shared\NoBoostShared.vsprops;.\shared\FastSTL.vsprops"
663 CharacterSet="1"
664 WholeProgramOptimization="1"
665 >
666 <Tool
667 Name="VCPreBuildEventTool"
668 />
669 <Tool
670 Name="VCCustomBuildTool"
671 />
672 <Tool
673 Name="VCXMLDataGeneratorTool"
674 />
675 <Tool
676 Name="VCWebServiceProxyGeneratorTool"
677 />
678 <Tool
679 Name="VCMIDLTool"
680 />
681 <Tool
682 Name="VCCLCompilerTool"
683 AdditionalIncludeDirectories="..\..\code;..\..\include"
684 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
685 RuntimeLibrary="2"
686 UsePrecompiledHeader="2"
687 PrecompiledHeaderThrough="UnitTestPCH.h"
688 WarningLevel="3"
689 Detect64BitPortabilityProblems="true"
690 DebugInformationFormat="3"
691 />
692 <Tool
693 Name="VCManagedResourceCompilerTool"
694 />
695 <Tool
696 Name="VCResourceCompilerTool"
697 />
698 <Tool
699 Name="VCPreLinkEventTool"
700 />
701 <Tool
702 Name="VCLinkerTool"
703 AdditionalDependencies="assimp.lib cppunit.lib"
704 LinkIncremental="1"
705 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)\&quot;;&quot;..\..\contrib\cppunit-1.12.1\lib&quot;"
706 GenerateDebugInformation="true"
707 SubSystem="1"
708 OptimizeReferences="2"
709 EnableCOMDATFolding="2"
710 RandomizedBaseAddress="1"
711 DataExecutionPrevention="0"
712 TargetMachine="1"
713 />
714 <Tool
715 Name="VCALinkTool"
716 />
717 <Tool
718 Name="VCManifestTool"
719 />
720 <Tool
721 Name="VCXDCMakeTool"
722 />
723 <Tool
724 Name="VCBscMakeTool"
725 />
726 <Tool
727 Name="VCFxCopTool"
728 />
729 <Tool
730 Name="VCAppVerifierTool"
731 />
732 <Tool
733 Name="VCPostBuildEventTool"
734 />
735 </Configuration>
736 <Configuration
737 Name="release-noboost-st|x64"
738 OutputDirectory="$(PlatformName)\$(ConfigurationName)"
739 IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
740 ConfigurationType="1"
741 InheritedPropertySheets=".\shared\UnitTest.vsprops;.\shared\NoBoostShared.vsprops"
742 CharacterSet="1"
743 WholeProgramOptimization="1"
744 >
745 <Tool
746 Name="VCPreBuildEventTool"
747 />
748 <Tool
749 Name="VCCustomBuildTool"
750 />
751 <Tool
752 Name="VCXMLDataGeneratorTool"
753 />
754 <Tool
755 Name="VCWebServiceProxyGeneratorTool"
756 />
757 <Tool
758 Name="VCMIDLTool"
759 TargetEnvironment="3"
760 />
761 <Tool
762 Name="VCCLCompilerTool"
763 AdditionalIncludeDirectories="..\..\code;..\..\include"
764 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
765 RuntimeLibrary="2"
766 UsePrecompiledHeader="2"
767 PrecompiledHeaderThrough="UnitTestPCH.h"
768 WarningLevel="3"
769 Detect64BitPortabilityProblems="true"
770 DebugInformationFormat="3"
771 />
772 <Tool
773 Name="VCManagedResourceCompilerTool"
774 />
775 <Tool
776 Name="VCResourceCompilerTool"
777 />
778 <Tool
779 Name="VCPreLinkEventTool"
780 />
781 <Tool
782 Name="VCLinkerTool"
783 AdditionalDependencies="assimp.lib cppunit64.lib"
784 LinkIncremental="1"
785 AdditionalLibraryDirectories="..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)\"
786 GenerateDebugInformation="true"
787 SubSystem="1"
788 OptimizeReferences="2"
789 EnableCOMDATFolding="2"
790 TargetMachine="17"
791 />
792 <Tool
793 Name="VCALinkTool"
794 />
795 <Tool
796 Name="VCManifestTool"
797 />
798 <Tool
799 Name="VCXDCMakeTool"
800 />
801 <Tool
802 Name="VCBscMakeTool"
803 />
804 <Tool
805 Name="VCFxCopTool"
806 />
807 <Tool
808 Name="VCAppVerifierTool"
809 />
810 <Tool
811 Name="VCPostBuildEventTool"
812 />
813 </Configuration>
814 <Configuration
815 Name="debug-noboost-st|Win32"
816 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
817 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
818 ConfigurationType="1"
819 InheritedPropertySheets=".\shared\UnitTest.vsprops;.\shared\NoBoostShared.vsprops;.\shared\FastSTL.vsprops"
820 CharacterSet="1"
821 >
822 <Tool
823 Name="VCPreBuildEventTool"
824 />
825 <Tool
826 Name="VCCustomBuildTool"
827 />
828 <Tool
829 Name="VCXMLDataGeneratorTool"
830 />
831 <Tool
832 Name="VCWebServiceProxyGeneratorTool"
833 />
834 <Tool
835 Name="VCMIDLTool"
836 />
837 <Tool
838 Name="VCCLCompilerTool"
839 Optimization="0"
840 AdditionalIncludeDirectories="..\..\code;..\..\include"
841 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
842 MinimalRebuild="true"
843 BasicRuntimeChecks="3"
844 RuntimeLibrary="3"
845 UsePrecompiledHeader="2"
846 PrecompiledHeaderThrough="UnitTestPCH.h"
847 WarningLevel="3"
848 Detect64BitPortabilityProblems="true"
849 DebugInformationFormat="4"
850 />
851 <Tool
852 Name="VCManagedResourceCompilerTool"
853 />
854 <Tool
855 Name="VCResourceCompilerTool"
856 />
857 <Tool
858 Name="VCPreLinkEventTool"
859 />
860 <Tool
861 Name="VCLinkerTool"
862 AdditionalDependencies="assimp.lib cppunitd.lib"
863 LinkIncremental="2"
864 SuppressStartupBanner="false"
865 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)\&quot;;&quot;..\..\contrib\cppunit-1.12.1\lib&quot;"
866 IgnoreDefaultLibraryNames=""
867 GenerateDebugInformation="true"
868 SubSystem="1"
869 RandomizedBaseAddress="1"
870 DataExecutionPrevention="0"
871 TargetMachine="1"
872 />
873 <Tool
874 Name="VCALinkTool"
875 />
876 <Tool
877 Name="VCManifestTool"
878 />
879 <Tool
880 Name="VCXDCMakeTool"
881 />
882 <Tool
883 Name="VCBscMakeTool"
884 />
885 <Tool
886 Name="VCFxCopTool"
887 />
888 <Tool
889 Name="VCAppVerifierTool"
890 />
891 <Tool
892 Name="VCPostBuildEventTool"
893 />
894 </Configuration>
895 <Configuration
896 Name="debug-noboost-st|x64"
897 OutputDirectory="$(PlatformName)\$(ConfigurationName)"
898 IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
899 ConfigurationType="1"
900 InheritedPropertySheets=".\shared\UnitTest.vsprops;.\shared\NoBoostShared.vsprops"
901 CharacterSet="1"
902 >
903 <Tool
904 Name="VCPreBuildEventTool"
905 />
906 <Tool
907 Name="VCCustomBuildTool"
908 />
909 <Tool
910 Name="VCXMLDataGeneratorTool"
911 />
912 <Tool
913 Name="VCWebServiceProxyGeneratorTool"
914 />
915 <Tool
916 Name="VCMIDLTool"
917 TargetEnvironment="3"
918 />
919 <Tool
920 Name="VCCLCompilerTool"
921 Optimization="0"
922 AdditionalIncludeDirectories="..\..\code;..\..\include"
923 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
924 MinimalRebuild="true"
925 BasicRuntimeChecks="3"
926 RuntimeLibrary="3"
927 UsePrecompiledHeader="2"
928 PrecompiledHeaderThrough="UnitTestPCH.h"
929 WarningLevel="3"
930 Detect64BitPortabilityProblems="true"
931 DebugInformationFormat="3"
932 />
933 <Tool
934 Name="VCManagedResourceCompilerTool"
935 />
936 <Tool
937 Name="VCResourceCompilerTool"
938 />
939 <Tool
940 Name="VCPreLinkEventTool"
941 />
942 <Tool
943 Name="VCLinkerTool"
944 AdditionalDependencies="assimp.lib cppunit64d.lib"
945 LinkIncremental="2"
946 SuppressStartupBanner="false"
947 AdditionalLibraryDirectories="..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)\"
948 IgnoreDefaultLibraryNames=""
949 GenerateDebugInformation="true"
950 SubSystem="1"
951 TargetMachine="17"
952 />
953 <Tool
954 Name="VCALinkTool"
955 />
956 <Tool
957 Name="VCManifestTool"
958 />
959 <Tool
960 Name="VCXDCMakeTool"
961 />
962 <Tool
963 Name="VCBscMakeTool"
964 />
965 <Tool
966 Name="VCFxCopTool"
967 />
968 <Tool
969 Name="VCAppVerifierTool"
970 />
971 <Tool
972 Name="VCPostBuildEventTool"
973 />
974 </Configuration>
975 <Configuration
976 Name="debug-st|Win32"
977 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
978 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
979 ConfigurationType="1"
980 InheritedPropertySheets=".\shared\UnitTest.vsprops;.\shared\SingleThreadedShared.vsprops;.\shared\FastSTL.vsprops"
981 CharacterSet="1"
982 >
983 <Tool
984 Name="VCPreBuildEventTool"
985 />
986 <Tool
987 Name="VCCustomBuildTool"
988 />
989 <Tool
990 Name="VCXMLDataGeneratorTool"
991 />
992 <Tool
993 Name="VCWebServiceProxyGeneratorTool"
994 />
995 <Tool
996 Name="VCMIDLTool"
997 />
998 <Tool
999 Name="VCCLCompilerTool"
1000 Optimization="0"
1001 AdditionalIncludeDirectories="..\..\code;..\..\include"
1002 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
1003 MinimalRebuild="true"
1004 BasicRuntimeChecks="3"
1005 RuntimeLibrary="3"
1006 UsePrecompiledHeader="2"
1007 PrecompiledHeaderThrough="UnitTestPCH.h"
1008 WarningLevel="3"
1009 Detect64BitPortabilityProblems="true"
1010 DebugInformationFormat="4"
1011 />
1012 <Tool
1013 Name="VCManagedResourceCompilerTool"
1014 />
1015 <Tool
1016 Name="VCResourceCompilerTool"
1017 />
1018 <Tool
1019 Name="VCPreLinkEventTool"
1020 />
1021 <Tool
1022 Name="VCLinkerTool"
1023 AdditionalDependencies="assimp.lib cppunitd.lib"
1024 LinkIncremental="2"
1025 SuppressStartupBanner="false"
1026 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)\&quot;;&quot;..\..\contrib\cppunit-1.12.1\lib&quot;"
1027 IgnoreDefaultLibraryNames=""
1028 GenerateDebugInformation="true"
1029 SubSystem="1"
1030 RandomizedBaseAddress="1"
1031 DataExecutionPrevention="0"
1032 TargetMachine="1"
1033 />
1034 <Tool
1035 Name="VCALinkTool"
1036 />
1037 <Tool
1038 Name="VCManifestTool"
1039 />
1040 <Tool
1041 Name="VCXDCMakeTool"
1042 />
1043 <Tool
1044 Name="VCBscMakeTool"
1045 />
1046 <Tool
1047 Name="VCFxCopTool"
1048 />
1049 <Tool
1050 Name="VCAppVerifierTool"
1051 />
1052 <Tool
1053 Name="VCPostBuildEventTool"
1054 />
1055 </Configuration>
1056 <Configuration
1057 Name="debug-st|x64"
1058 OutputDirectory="$(PlatformName)\$(ConfigurationName)"
1059 IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
1060 ConfigurationType="1"
1061 InheritedPropertySheets=".\shared\UnitTest.vsprops;.\shared\SingleThreadedShared.vsprops"
1062 CharacterSet="1"
1063 >
1064 <Tool
1065 Name="VCPreBuildEventTool"
1066 />
1067 <Tool
1068 Name="VCCustomBuildTool"
1069 />
1070 <Tool
1071 Name="VCXMLDataGeneratorTool"
1072 />
1073 <Tool
1074 Name="VCWebServiceProxyGeneratorTool"
1075 />
1076 <Tool
1077 Name="VCMIDLTool"
1078 TargetEnvironment="3"
1079 />
1080 <Tool
1081 Name="VCCLCompilerTool"
1082 Optimization="0"
1083 AdditionalIncludeDirectories="..\..\code;..\..\include"
1084 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
1085 MinimalRebuild="true"
1086 BasicRuntimeChecks="3"
1087 RuntimeLibrary="3"
1088 UsePrecompiledHeader="2"
1089 PrecompiledHeaderThrough="UnitTestPCH.h"
1090 WarningLevel="3"
1091 Detect64BitPortabilityProblems="true"
1092 DebugInformationFormat="3"
1093 />
1094 <Tool
1095 Name="VCManagedResourceCompilerTool"
1096 />
1097 <Tool
1098 Name="VCResourceCompilerTool"
1099 />
1100 <Tool
1101 Name="VCPreLinkEventTool"
1102 />
1103 <Tool
1104 Name="VCLinkerTool"
1105 AdditionalDependencies="assimp.lib cppunit64d.lib"
1106 LinkIncremental="2"
1107 SuppressStartupBanner="false"
1108 AdditionalLibraryDirectories="..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)\"
1109 IgnoreDefaultLibraryNames=""
1110 GenerateDebugInformation="true"
1111 SubSystem="1"
1112 TargetMachine="17"
1113 />
1114 <Tool
1115 Name="VCALinkTool"
1116 />
1117 <Tool
1118 Name="VCManifestTool"
1119 />
1120 <Tool
1121 Name="VCXDCMakeTool"
1122 />
1123 <Tool
1124 Name="VCBscMakeTool"
1125 />
1126 <Tool
1127 Name="VCFxCopTool"
1128 />
1129 <Tool
1130 Name="VCAppVerifierTool"
1131 />
1132 <Tool
1133 Name="VCPostBuildEventTool"
1134 />
1135 </Configuration>
1136 <Configuration
1137 Name="release-st|Win32"
1138 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
1139 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
1140 ConfigurationType="1"
1141 InheritedPropertySheets=".\shared\UnitTest.vsprops;.\shared\SingleThreadedShared.vsprops;.\shared\FastSTL.vsprops"
1142 CharacterSet="1"
1143 WholeProgramOptimization="1"
1144 >
1145 <Tool
1146 Name="VCPreBuildEventTool"
1147 />
1148 <Tool
1149 Name="VCCustomBuildTool"
1150 />
1151 <Tool
1152 Name="VCXMLDataGeneratorTool"
1153 />
1154 <Tool
1155 Name="VCWebServiceProxyGeneratorTool"
1156 />
1157 <Tool
1158 Name="VCMIDLTool"
1159 />
1160 <Tool
1161 Name="VCCLCompilerTool"
1162 AdditionalIncludeDirectories="..\..\code;..\..\include"
1163 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
1164 RuntimeLibrary="2"
1165 UsePrecompiledHeader="2"
1166 PrecompiledHeaderThrough="UnitTestPCH.h"
1167 WarningLevel="3"
1168 Detect64BitPortabilityProblems="true"
1169 DebugInformationFormat="3"
1170 />
1171 <Tool
1172 Name="VCManagedResourceCompilerTool"
1173 />
1174 <Tool
1175 Name="VCResourceCompilerTool"
1176 />
1177 <Tool
1178 Name="VCPreLinkEventTool"
1179 />
1180 <Tool
1181 Name="VCLinkerTool"
1182 AdditionalDependencies="assimp.lib cppunit.lib"
1183 LinkIncremental="1"
1184 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)\&quot;;&quot;..\..\contrib\cppunit-1.12.1\lib&quot;"
1185 GenerateDebugInformation="true"
1186 SubSystem="1"
1187 OptimizeReferences="2"
1188 EnableCOMDATFolding="2"
1189 RandomizedBaseAddress="1"
1190 DataExecutionPrevention="0"
1191 TargetMachine="1"
1192 />
1193 <Tool
1194 Name="VCALinkTool"
1195 />
1196 <Tool
1197 Name="VCManifestTool"
1198 />
1199 <Tool
1200 Name="VCXDCMakeTool"
1201 />
1202 <Tool
1203 Name="VCBscMakeTool"
1204 />
1205 <Tool
1206 Name="VCFxCopTool"
1207 />
1208 <Tool
1209 Name="VCAppVerifierTool"
1210 />
1211 <Tool
1212 Name="VCPostBuildEventTool"
1213 />
1214 </Configuration>
1215 <Configuration
1216 Name="release-st|x64"
1217 OutputDirectory="$(PlatformName)\$(ConfigurationName)"
1218 IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
1219 ConfigurationType="1"
1220 InheritedPropertySheets=".\shared\UnitTest.vsprops;.\shared\SingleThreadedShared.vsprops"
1221 CharacterSet="1"
1222 WholeProgramOptimization="1"
1223 >
1224 <Tool
1225 Name="VCPreBuildEventTool"
1226 />
1227 <Tool
1228 Name="VCCustomBuildTool"
1229 />
1230 <Tool
1231 Name="VCXMLDataGeneratorTool"
1232 />
1233 <Tool
1234 Name="VCWebServiceProxyGeneratorTool"
1235 />
1236 <Tool
1237 Name="VCMIDLTool"
1238 TargetEnvironment="3"
1239 />
1240 <Tool
1241 Name="VCCLCompilerTool"
1242 AdditionalIncludeDirectories="..\..\code;..\..\include"
1243 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
1244 RuntimeLibrary="2"
1245 UsePrecompiledHeader="2"
1246 PrecompiledHeaderThrough="UnitTestPCH.h"
1247 WarningLevel="3"
1248 Detect64BitPortabilityProblems="true"
1249 DebugInformationFormat="3"
1250 />
1251 <Tool
1252 Name="VCManagedResourceCompilerTool"
1253 />
1254 <Tool
1255 Name="VCResourceCompilerTool"
1256 />
1257 <Tool
1258 Name="VCPreLinkEventTool"
1259 />
1260 <Tool
1261 Name="VCLinkerTool"
1262 AdditionalDependencies="assimp.lib cppunit64.lib"
1263 LinkIncremental="1"
1264 AdditionalLibraryDirectories="..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)\"
1265 GenerateDebugInformation="true"
1266 SubSystem="1"
1267 OptimizeReferences="2"
1268 EnableCOMDATFolding="2"
1269 TargetMachine="17"
1270 />
1271 <Tool
1272 Name="VCALinkTool"
1273 />
1274 <Tool
1275 Name="VCManifestTool"
1276 />
1277 <Tool
1278 Name="VCXDCMakeTool"
1279 />
1280 <Tool
1281 Name="VCBscMakeTool"
1282 />
1283 <Tool
1284 Name="VCFxCopTool"
1285 />
1286 <Tool
1287 Name="VCAppVerifierTool"
1288 />
1289 <Tool
1290 Name="VCPostBuildEventTool"
1291 />
1292 </Configuration>
1293 </Configurations>
1294 <References>
1295 </References>
1296 <Files>
1297 <Filter
1298 Name="tests"
1299 Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
1300 UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
1301 >
1302 <File
1303 RelativePath="..\..\test\unit\utExport.cpp"
1304 >
1305 </File>
1306 <File
1307 RelativePath="..\..\test\unit\utExport.h"
1308 >
1309 </File>
1310 <File
1311 RelativePath="..\..\test\unit\utFindDegenerates.cpp"
1312 >
1313 </File>
1314 <File
1315 RelativePath="..\..\test\unit\utFindDegenerates.h"
1316 >
1317 </File>
1318 <File
1319 RelativePath="..\..\test\unit\utFindInvalidData.cpp"
1320 >
1321 </File>
1322 <File
1323 RelativePath="..\..\test\unit\utFindInvalidData.h"
1324 >
1325 </File>
1326 <File
1327 RelativePath="..\..\test\unit\utFixInfacingNormals.cpp"
1328 >
1329 </File>
1330 <File
1331 RelativePath="..\..\test\unit\utGenNormals.cpp"
1332 >
1333 </File>
1334 <File
1335 RelativePath="..\..\test\unit\utGenNormals.h"
1336 >
1337 </File>
1338 <File
1339 RelativePath="..\..\test\unit\utImporter.cpp"
1340 >
1341 </File>
1342 <File
1343 RelativePath="..\..\test\unit\utImporter.h"
1344 >
1345 </File>
1346 <File
1347 RelativePath="..\..\test\unit\utImproveCacheLocality.cpp"
1348 >
1349 </File>
1350 <File
1351 RelativePath="..\..\test\unit\utJoinVertices.cpp"
1352 >
1353 </File>
1354 <File
1355 RelativePath="..\..\test\unit\utJoinVertices.h"
1356 >
1357 </File>
1358 <File
1359 RelativePath="..\..\test\unit\utLimitBoneWeights.cpp"
1360 >
1361 </File>
1362 <File
1363 RelativePath="..\..\test\unit\utLimitBoneWeights.h"
1364 >
1365 </File>
1366 <File
1367 RelativePath="..\..\test\unit\utMaterialSystem.cpp"
1368 >
1369 </File>
1370 <File
1371 RelativePath="..\..\test\unit\utMaterialSystem.h"
1372 >
1373 </File>
1374 <File
1375 RelativePath="..\..\test\unit\utNoBoostTest.cpp"
1376 >
1377 </File>
1378 <File
1379 RelativePath="..\..\test\unit\utNoBoostTest.h"
1380 >
1381 </File>
1382 <File
1383 RelativePath="..\..\test\unit\utPretransformVertices.cpp"
1384 >
1385 </File>
1386 <File
1387 RelativePath="..\..\test\unit\utPretransformVertices.h"
1388 >
1389 </File>
1390 <File
1391 RelativePath="..\..\test\unit\utRemoveComments.cpp"
1392 >
1393 </File>
1394 <File
1395 RelativePath="..\..\test\unit\utRemoveComments.h"
1396 >
1397 </File>
1398 <File
1399 RelativePath="..\..\test\unit\utRemoveComponent.cpp"
1400 >
1401 </File>
1402 <File
1403 RelativePath="..\..\test\unit\utRemoveComponent.h"
1404 >
1405 </File>
1406 <File
1407 RelativePath="..\..\test\unit\utRemoveRedundantMaterials.cpp"
1408 >
1409 </File>
1410 <File
1411 RelativePath="..\..\test\unit\utRemoveRedundantMaterials.h"
1412 >
1413 </File>
1414 <File
1415 RelativePath="..\..\test\unit\utScenePreprocessor.cpp"
1416 >
1417 </File>
1418 <File
1419 RelativePath="..\..\test\unit\utScenePreprocessor.h"
1420 >
1421 </File>
1422 <File
1423 RelativePath="..\..\test\unit\utSharedPPData.cpp"
1424 >
1425 </File>
1426 <File
1427 RelativePath="..\..\test\unit\utSharedPPData.h"
1428 >
1429 </File>
1430 <File
1431 RelativePath="..\..\test\unit\utSortByPType.cpp"
1432 >
1433 </File>
1434 <File
1435 RelativePath="..\..\test\unit\utSortByPType.h"
1436 >
1437 </File>
1438 <File
1439 RelativePath="..\..\test\unit\utSplitLargeMeshes.cpp"
1440 >
1441 </File>
1442 <File
1443 RelativePath="..\..\test\unit\utSplitLargeMeshes.h"
1444 >
1445 </File>
1446 <File
1447 RelativePath="..\..\test\unit\utTargetAnimation.cpp"
1448 >
1449 </File>
1450 <File
1451 RelativePath="..\..\test\unit\utTargetAnimation.h"
1452 >
1453 </File>
1454 <File
1455 RelativePath="..\..\test\unit\utTextureTransform.cpp"
1456 >
1457 </File>
1458 <File
1459 RelativePath="..\..\test\unit\utTriangulate.cpp"
1460 >
1461 </File>
1462 <File
1463 RelativePath="..\..\test\unit\utTriangulate.h"
1464 >
1465 </File>
1466 <File
1467 RelativePath="..\..\test\unit\utVertexTriangleAdjacency.cpp"
1468 >
1469 </File>
1470 <File
1471 RelativePath="..\..\test\unit\utVertexTriangleAdjacency.h"
1472 >
1473 </File>
1474 <Filter
1475 Name="compile-tests"
1476 >
1477 <File
1478 RelativePath="..\..\test\unit\CCompilerTest.c"
1479 >
1480 <FileConfiguration
1481 Name="debug|Win32"
1482 >
1483 <Tool
1484 Name="VCCLCompilerTool"
1485 UsePrecompiledHeader="0"
1486 />
1487 </FileConfiguration>
1488 <FileConfiguration
1489 Name="debug|x64"
1490 >
1491 <Tool
1492 Name="VCCLCompilerTool"
1493 UsePrecompiledHeader="0"
1494 />
1495 </FileConfiguration>
1496 <FileConfiguration
1497 Name="release|Win32"
1498 >
1499 <Tool
1500 Name="VCCLCompilerTool"
1501 UsePrecompiledHeader="0"
1502 />
1503 </FileConfiguration>
1504 <FileConfiguration
1505 Name="release|x64"
1506 >
1507 <Tool
1508 Name="VCCLCompilerTool"
1509 UsePrecompiledHeader="0"
1510 />
1511 </FileConfiguration>
1512 <FileConfiguration
1513 Name="release-dll|Win32"
1514 >
1515 <Tool
1516 Name="VCCLCompilerTool"
1517 UsePrecompiledHeader="0"
1518 />
1519 </FileConfiguration>
1520 <FileConfiguration
1521 Name="release-dll|x64"
1522 >
1523 <Tool
1524 Name="VCCLCompilerTool"
1525 UsePrecompiledHeader="0"
1526 />
1527 </FileConfiguration>
1528 <FileConfiguration
1529 Name="debug-dll|Win32"
1530 >
1531 <Tool
1532 Name="VCCLCompilerTool"
1533 UsePrecompiledHeader="0"
1534 />
1535 </FileConfiguration>
1536 <FileConfiguration
1537 Name="debug-dll|x64"
1538 >
1539 <Tool
1540 Name="VCCLCompilerTool"
1541 UsePrecompiledHeader="0"
1542 />
1543 </FileConfiguration>
1544 <FileConfiguration
1545 Name="release-noboost-st|Win32"
1546 >
1547 <Tool
1548 Name="VCCLCompilerTool"
1549 UsePrecompiledHeader="0"
1550 />
1551 </FileConfiguration>
1552 <FileConfiguration
1553 Name="release-noboost-st|x64"
1554 >
1555 <Tool
1556 Name="VCCLCompilerTool"
1557 UsePrecompiledHeader="0"
1558 />
1559 </FileConfiguration>
1560 <FileConfiguration
1561 Name="debug-noboost-st|Win32"
1562 >
1563 <Tool
1564 Name="VCCLCompilerTool"
1565 UsePrecompiledHeader="0"
1566 />
1567 </FileConfiguration>
1568 <FileConfiguration
1569 Name="debug-noboost-st|x64"
1570 >
1571 <Tool
1572 Name="VCCLCompilerTool"
1573 UsePrecompiledHeader="0"
1574 />
1575 </FileConfiguration>
1576 <FileConfiguration
1577 Name="debug-st|Win32"
1578 >
1579 <Tool
1580 Name="VCCLCompilerTool"
1581 UsePrecompiledHeader="0"
1582 />
1583 </FileConfiguration>
1584 <FileConfiguration
1585 Name="debug-st|x64"
1586 >
1587 <Tool
1588 Name="VCCLCompilerTool"
1589 UsePrecompiledHeader="0"
1590 />
1591 </FileConfiguration>
1592 <FileConfiguration
1593 Name="release-st|Win32"
1594 >
1595 <Tool
1596 Name="VCCLCompilerTool"
1597 UsePrecompiledHeader="0"
1598 />
1599 </FileConfiguration>
1600 <FileConfiguration
1601 Name="release-st|x64"
1602 >
1603 <Tool
1604 Name="VCCLCompilerTool"
1605 UsePrecompiledHeader="0"
1606 />
1607 </FileConfiguration>
1608 </File>
1609 <File
1610 RelativePath="..\..\test\unit\BoostWorkaround\tupletest.cpp"
1611 >
1612 <FileConfiguration
1613 Name="debug|Win32"
1614 >
1615 <Tool
1616 Name="VCCLCompilerTool"
1617 UsePrecompiledHeader="0"
1618 />
1619 </FileConfiguration>
1620 <FileConfiguration
1621 Name="debug|x64"
1622 >
1623 <Tool
1624 Name="VCCLCompilerTool"
1625 UsePrecompiledHeader="0"
1626 />
1627 </FileConfiguration>
1628 <FileConfiguration
1629 Name="release|Win32"
1630 >
1631 <Tool
1632 Name="VCCLCompilerTool"
1633 UsePrecompiledHeader="0"
1634 />
1635 </FileConfiguration>
1636 <FileConfiguration
1637 Name="release|x64"
1638 >
1639 <Tool
1640 Name="VCCLCompilerTool"
1641 UsePrecompiledHeader="0"
1642 />
1643 </FileConfiguration>
1644 <FileConfiguration
1645 Name="release-dll|Win32"
1646 >
1647 <Tool
1648 Name="VCCLCompilerTool"
1649 UsePrecompiledHeader="0"
1650 />
1651 </FileConfiguration>
1652 <FileConfiguration
1653 Name="release-dll|x64"
1654 >
1655 <Tool
1656 Name="VCCLCompilerTool"
1657 UsePrecompiledHeader="0"
1658 />
1659 </FileConfiguration>
1660 <FileConfiguration
1661 Name="debug-dll|Win32"
1662 >
1663 <Tool
1664 Name="VCCLCompilerTool"
1665 UsePrecompiledHeader="0"
1666 />
1667 </FileConfiguration>
1668 <FileConfiguration
1669 Name="debug-dll|x64"
1670 >
1671 <Tool
1672 Name="VCCLCompilerTool"
1673 UsePrecompiledHeader="0"
1674 />
1675 </FileConfiguration>
1676 <FileConfiguration
1677 Name="release-noboost-st|Win32"
1678 >
1679 <Tool
1680 Name="VCCLCompilerTool"
1681 UsePrecompiledHeader="0"
1682 />
1683 </FileConfiguration>
1684 <FileConfiguration
1685 Name="release-noboost-st|x64"
1686 >
1687 <Tool
1688 Name="VCCLCompilerTool"
1689 UsePrecompiledHeader="0"
1690 />
1691 </FileConfiguration>
1692 <FileConfiguration
1693 Name="debug-noboost-st|Win32"
1694 >
1695 <Tool
1696 Name="VCCLCompilerTool"
1697 UsePrecompiledHeader="0"
1698 />
1699 </FileConfiguration>
1700 <FileConfiguration
1701 Name="debug-noboost-st|x64"
1702 >
1703 <Tool
1704 Name="VCCLCompilerTool"
1705 UsePrecompiledHeader="0"
1706 />
1707 </FileConfiguration>
1708 <FileConfiguration
1709 Name="debug-st|Win32"
1710 >
1711 <Tool
1712 Name="VCCLCompilerTool"
1713 UsePrecompiledHeader="0"
1714 />
1715 </FileConfiguration>
1716 <FileConfiguration
1717 Name="debug-st|x64"
1718 >
1719 <Tool
1720 Name="VCCLCompilerTool"
1721 UsePrecompiledHeader="0"
1722 />
1723 </FileConfiguration>
1724 <FileConfiguration
1725 Name="release-st|Win32"
1726 >
1727 <Tool
1728 Name="VCCLCompilerTool"
1729 UsePrecompiledHeader="0"
1730 />
1731 </FileConfiguration>
1732 <FileConfiguration
1733 Name="release-st|x64"
1734 >
1735 <Tool
1736 Name="VCCLCompilerTool"
1737 UsePrecompiledHeader="0"
1738 />
1739 </FileConfiguration>
1740 </File>
1741 </Filter>
1742 </Filter>
1743 <Filter
1744 Name="setup"
1745 >
1746 <File
1747 RelativePath="..\..\test\unit\Main.cpp"
1748 >
1749 </File>
1750 <File
1751 RelativePath="..\..\test\unit\UnitTestPCH.cpp"
1752 >
1753 <FileConfiguration
1754 Name="debug|Win32"
1755 >
1756 <Tool
1757 Name="VCCLCompilerTool"
1758 UsePrecompiledHeader="1"
1759 />
1760 </FileConfiguration>
1761 <FileConfiguration
1762 Name="debug|x64"
1763 >
1764 <Tool
1765 Name="VCCLCompilerTool"
1766 UsePrecompiledHeader="1"
1767 />
1768 </FileConfiguration>
1769 <FileConfiguration
1770 Name="release|Win32"
1771 >
1772 <Tool
1773 Name="VCCLCompilerTool"
1774 UsePrecompiledHeader="1"
1775 />
1776 </FileConfiguration>
1777 <FileConfiguration
1778 Name="release|x64"
1779 >
1780 <Tool
1781 Name="VCCLCompilerTool"
1782 UsePrecompiledHeader="1"
1783 />
1784 </FileConfiguration>
1785 <FileConfiguration
1786 Name="release-dll|Win32"
1787 >
1788 <Tool
1789 Name="VCCLCompilerTool"
1790 UsePrecompiledHeader="1"
1791 />
1792 </FileConfiguration>
1793 <FileConfiguration
1794 Name="release-dll|x64"
1795 >
1796 <Tool
1797 Name="VCCLCompilerTool"
1798 UsePrecompiledHeader="1"
1799 />
1800 </FileConfiguration>
1801 <FileConfiguration
1802 Name="debug-dll|Win32"
1803 >
1804 <Tool
1805 Name="VCCLCompilerTool"
1806 UsePrecompiledHeader="1"
1807 />
1808 </FileConfiguration>
1809 <FileConfiguration
1810 Name="debug-dll|x64"
1811 >
1812 <Tool
1813 Name="VCCLCompilerTool"
1814 UsePrecompiledHeader="1"
1815 />
1816 </FileConfiguration>
1817 <FileConfiguration
1818 Name="release-noboost-st|Win32"
1819 >
1820 <Tool
1821 Name="VCCLCompilerTool"
1822 UsePrecompiledHeader="1"
1823 />
1824 </FileConfiguration>
1825 <FileConfiguration
1826 Name="release-noboost-st|x64"
1827 >
1828 <Tool
1829 Name="VCCLCompilerTool"
1830 UsePrecompiledHeader="1"
1831 />
1832 </FileConfiguration>
1833 <FileConfiguration
1834 Name="debug-noboost-st|Win32"
1835 >
1836 <Tool
1837 Name="VCCLCompilerTool"
1838 UsePrecompiledHeader="1"
1839 />
1840 </FileConfiguration>
1841 <FileConfiguration
1842 Name="debug-noboost-st|x64"
1843 >
1844 <Tool
1845 Name="VCCLCompilerTool"
1846 UsePrecompiledHeader="1"
1847 />
1848 </FileConfiguration>
1849 <FileConfiguration
1850 Name="debug-st|Win32"
1851 >
1852 <Tool
1853 Name="VCCLCompilerTool"
1854 UsePrecompiledHeader="1"
1855 />
1856 </FileConfiguration>
1857 <FileConfiguration
1858 Name="debug-st|x64"
1859 >
1860 <Tool
1861 Name="VCCLCompilerTool"
1862 UsePrecompiledHeader="1"
1863 />
1864 </FileConfiguration>
1865 <FileConfiguration
1866 Name="release-st|Win32"
1867 >
1868 <Tool
1869 Name="VCCLCompilerTool"
1870 UsePrecompiledHeader="1"
1871 />
1872 </FileConfiguration>
1873 <FileConfiguration
1874 Name="release-st|x64"
1875 >
1876 <Tool
1877 Name="VCCLCompilerTool"
1878 UsePrecompiledHeader="1"
1879 />
1880 </FileConfiguration>
1881 </File>
1882 <File
1883 RelativePath="..\..\test\unit\UnitTestPCH.h"
1884 >
1885 </File>
1886 </Filter>
1887 </Files>
1888 <Globals>
1889 </Globals>
1890 </VisualStudioProject>
+0
-172
workspaces/vc9/assimp.sln less more
0 
1 Microsoft Visual Studio Solution File, Format Version 10.00
2 # Visual Studio 2008
3 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "assimpview", "assimp_view.vcproj", "{B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}"
4 ProjectSection(ProjectDependencies) = postProject
5 {5691E159-2D9B-407F-971F-EA5C592DC524} = {5691E159-2D9B-407F-971F-EA5C592DC524}
6 EndProjectSection
7 EndProject
8 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "assimp", "assimp.vcproj", "{5691E159-2D9B-407F-971F-EA5C592DC524}"
9 EndProject
10 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "unit", "UnitTest.vcproj", "{9B9D1C90-8A03-409A-B547-AE7B48B90F1A}"
11 ProjectSection(ProjectDependencies) = postProject
12 {5691E159-2D9B-407F-971F-EA5C592DC524} = {5691E159-2D9B-407F-971F-EA5C592DC524}
13 EndProjectSection
14 EndProject
15 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "assimpcmd", "assimp_cmd.vcproj", "{7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}"
16 ProjectSection(ProjectDependencies) = postProject
17 {5691E159-2D9B-407F-971F-EA5C592DC524} = {5691E159-2D9B-407F-971F-EA5C592DC524}
18 EndProjectSection
19 EndProject
20 Global
21 GlobalSection(SolutionConfigurationPlatforms) = preSolution
22 debug|Win32 = debug|Win32
23 debug|x64 = debug|x64
24 debug-dll|Win32 = debug-dll|Win32
25 debug-dll|x64 = debug-dll|x64
26 debug-noboost-st|Win32 = debug-noboost-st|Win32
27 debug-noboost-st|x64 = debug-noboost-st|x64
28 debug-st|Win32 = debug-st|Win32
29 debug-st|x64 = debug-st|x64
30 release|Win32 = release|Win32
31 release|x64 = release|x64
32 release-dll|Win32 = release-dll|Win32
33 release-dll|x64 = release-dll|x64
34 release-noboost-st|Win32 = release-noboost-st|Win32
35 release-noboost-st|x64 = release-noboost-st|x64
36 release-st|Win32 = release-st|Win32
37 release-st|x64 = release-st|x64
38 EndGlobalSection
39 GlobalSection(ProjectConfigurationPlatforms) = postSolution
40 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug|Win32.ActiveCfg = debug|Win32
41 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug|Win32.Build.0 = debug|Win32
42 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug|x64.ActiveCfg = debug|x64
43 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug|x64.Build.0 = debug|x64
44 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-dll|Win32.ActiveCfg = debug-dll|Win32
45 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-dll|Win32.Build.0 = debug-dll|Win32
46 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-dll|x64.ActiveCfg = debug-dll|x64
47 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-dll|x64.Build.0 = debug-dll|x64
48 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-noboost-st|Win32.ActiveCfg = debug-noboost-st|Win32
49 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-noboost-st|Win32.Build.0 = debug-noboost-st|Win32
50 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-noboost-st|x64.ActiveCfg = debug-noboost-st|x64
51 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-noboost-st|x64.Build.0 = debug-noboost-st|x64
52 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-st|Win32.ActiveCfg = debug-st|Win32
53 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-st|Win32.Build.0 = debug-st|Win32
54 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-st|x64.ActiveCfg = debug-st|x64
55 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.debug-st|x64.Build.0 = debug-st|x64
56 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release|Win32.ActiveCfg = release|Win32
57 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release|Win32.Build.0 = release|Win32
58 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release|x64.ActiveCfg = release|x64
59 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release|x64.Build.0 = release|x64
60 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-dll|Win32.ActiveCfg = release-dll|Win32
61 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-dll|Win32.Build.0 = release-dll|Win32
62 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-dll|x64.ActiveCfg = release-dll|x64
63 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-dll|x64.Build.0 = release-dll|x64
64 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-noboost-st|Win32.ActiveCfg = release-noboost-st|Win32
65 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-noboost-st|Win32.Build.0 = release-noboost-st|Win32
66 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-noboost-st|x64.ActiveCfg = release-noboost-st|x64
67 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-noboost-st|x64.Build.0 = release-noboost-st|x64
68 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-st|Win32.ActiveCfg = release-st|Win32
69 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-st|Win32.Build.0 = release-st|Win32
70 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-st|x64.ActiveCfg = release-st|x64
71 {B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}.release-st|x64.Build.0 = release-st|x64
72 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug|Win32.ActiveCfg = debug|Win32
73 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug|Win32.Build.0 = debug|Win32
74 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug|x64.ActiveCfg = debug|x64
75 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug|x64.Build.0 = debug|x64
76 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-dll|Win32.ActiveCfg = debug-dll|Win32
77 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-dll|Win32.Build.0 = debug-dll|Win32
78 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-dll|x64.ActiveCfg = debug-dll|x64
79 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-dll|x64.Build.0 = debug-dll|x64
80 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-noboost-st|Win32.ActiveCfg = debug-noboost-st|Win32
81 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-noboost-st|Win32.Build.0 = debug-noboost-st|Win32
82 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-noboost-st|x64.ActiveCfg = debug-noboost-st|x64
83 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-noboost-st|x64.Build.0 = debug-noboost-st|x64
84 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-st|Win32.ActiveCfg = debug-st|Win32
85 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-st|Win32.Build.0 = debug-st|Win32
86 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-st|x64.ActiveCfg = debug-st|x64
87 {5691E159-2D9B-407F-971F-EA5C592DC524}.debug-st|x64.Build.0 = debug-st|x64
88 {5691E159-2D9B-407F-971F-EA5C592DC524}.release|Win32.ActiveCfg = release|Win32
89 {5691E159-2D9B-407F-971F-EA5C592DC524}.release|Win32.Build.0 = release|Win32
90 {5691E159-2D9B-407F-971F-EA5C592DC524}.release|x64.ActiveCfg = release|x64
91 {5691E159-2D9B-407F-971F-EA5C592DC524}.release|x64.Build.0 = release|x64
92 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-dll|Win32.ActiveCfg = release-dll|Win32
93 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-dll|Win32.Build.0 = release-dll|Win32
94 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-dll|x64.ActiveCfg = release-dll|x64
95 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-dll|x64.Build.0 = release-dll|x64
96 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-noboost-st|Win32.ActiveCfg = release-noboost-st|Win32
97 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-noboost-st|Win32.Build.0 = release-noboost-st|Win32
98 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-noboost-st|x64.ActiveCfg = release-noboost-st|x64
99 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-noboost-st|x64.Build.0 = release-noboost-st|x64
100 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-st|Win32.ActiveCfg = release-st|Win32
101 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-st|Win32.Build.0 = release-st|Win32
102 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-st|x64.ActiveCfg = release-st|x64
103 {5691E159-2D9B-407F-971F-EA5C592DC524}.release-st|x64.Build.0 = release-st|x64
104 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug|Win32.ActiveCfg = debug|Win32
105 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug|Win32.Build.0 = debug|Win32
106 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug|x64.ActiveCfg = debug|x64
107 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug|x64.Build.0 = debug|x64
108 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-dll|Win32.ActiveCfg = debug-dll|Win32
109 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-dll|x64.ActiveCfg = debug-dll|x64
110 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-dll|x64.Build.0 = debug-dll|x64
111 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-noboost-st|Win32.ActiveCfg = debug-noboost-st|Win32
112 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-noboost-st|Win32.Build.0 = debug-noboost-st|Win32
113 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-noboost-st|x64.ActiveCfg = debug-noboost-st|x64
114 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-noboost-st|x64.Build.0 = debug-noboost-st|x64
115 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-st|Win32.ActiveCfg = debug-st|Win32
116 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-st|Win32.Build.0 = debug-st|Win32
117 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-st|x64.ActiveCfg = debug-st|x64
118 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.debug-st|x64.Build.0 = debug-st|x64
119 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release|Win32.ActiveCfg = release|Win32
120 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release|Win32.Build.0 = release|Win32
121 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release|x64.ActiveCfg = release|x64
122 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release|x64.Build.0 = release|x64
123 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-dll|Win32.ActiveCfg = release-dll|Win32
124 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-dll|Win32.Build.0 = release-dll|Win32
125 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-dll|x64.ActiveCfg = release-dll|x64
126 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-dll|x64.Build.0 = release-dll|x64
127 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-noboost-st|Win32.ActiveCfg = release-noboost-st|Win32
128 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-noboost-st|Win32.Build.0 = release-noboost-st|Win32
129 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-noboost-st|x64.ActiveCfg = release-noboost-st|x64
130 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-noboost-st|x64.Build.0 = release-noboost-st|x64
131 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-st|Win32.ActiveCfg = release-st|Win32
132 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-st|Win32.Build.0 = release-st|Win32
133 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-st|x64.ActiveCfg = release-st|x64
134 {9B9D1C90-8A03-409A-B547-AE7B48B90F1A}.release-st|x64.Build.0 = release-st|x64
135 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug|Win32.ActiveCfg = Debug|Win32
136 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug|Win32.Build.0 = Debug|Win32
137 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug|x64.ActiveCfg = Debug|x64
138 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug|x64.Build.0 = Debug|x64
139 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-dll|Win32.ActiveCfg = debug-dll|Win32
140 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-dll|Win32.Build.0 = debug-dll|Win32
141 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-dll|x64.ActiveCfg = debug-dll|x64
142 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-dll|x64.Build.0 = debug-dll|x64
143 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-noboost-st|Win32.ActiveCfg = debug-noboost-st|Win32
144 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-noboost-st|Win32.Build.0 = debug-noboost-st|Win32
145 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-noboost-st|x64.ActiveCfg = debug-noboost-st|x64
146 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-noboost-st|x64.Build.0 = debug-noboost-st|x64
147 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-st|Win32.ActiveCfg = debug-st|Win32
148 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-st|Win32.Build.0 = debug-st|Win32
149 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-st|x64.ActiveCfg = debug-st|x64
150 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.debug-st|x64.Build.0 = debug-st|x64
151 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release|Win32.ActiveCfg = Release|Win32
152 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release|Win32.Build.0 = Release|Win32
153 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release|x64.ActiveCfg = Release|x64
154 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release|x64.Build.0 = Release|x64
155 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-dll|Win32.ActiveCfg = release-dll|Win32
156 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-dll|Win32.Build.0 = release-dll|Win32
157 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-dll|x64.ActiveCfg = release-dll|x64
158 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-dll|x64.Build.0 = release-dll|x64
159 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-noboost-st|Win32.ActiveCfg = release-noboost-st|Win32
160 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-noboost-st|Win32.Build.0 = release-noboost-st|Win32
161 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-noboost-st|x64.ActiveCfg = release-noboost-st|x64
162 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-noboost-st|x64.Build.0 = release-noboost-st|x64
163 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-st|Win32.ActiveCfg = release-st|Win32
164 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-st|Win32.Build.0 = release-st|Win32
165 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-st|x64.ActiveCfg = release-st|x64
166 {7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}.release-st|x64.Build.0 = release-st|x64
167 EndGlobalSection
168 GlobalSection(SolutionProperties) = preSolution
169 HideSolutionNode = FALSE
170 EndGlobalSection
171 EndGlobal
+0
-5136
workspaces/vc9/assimp.vcproj less more
0 <?xml version="1.0" encoding="Windows-1252"?>
1 <VisualStudioProject
2 ProjectType="Visual C++"
3 Version="9.00"
4 Name="assimp"
5 ProjectGUID="{5691E159-2D9B-407F-971F-EA5C592DC524}"
6 RootNamespace="assimp"
7 TargetFrameworkVersion="131072"
8 >
9 <Platforms>
10 <Platform
11 Name="Win32"
12 />
13 <Platform
14 Name="x64"
15 />
16 </Platforms>
17 <ToolFiles>
18 </ToolFiles>
19 <Configurations>
20 <Configuration
21 Name="debug|Win32"
22 ConfigurationType="4"
23 InheritedPropertySheets=".\shared\LibShared.vsprops;.\shared\FastSTL.vsprops"
24 >
25 <Tool
26 Name="VCPreBuildEventTool"
27 />
28 <Tool
29 Name="VCCustomBuildTool"
30 />
31 <Tool
32 Name="VCXMLDataGeneratorTool"
33 />
34 <Tool
35 Name="VCWebServiceProxyGeneratorTool"
36 />
37 <Tool
38 Name="VCMIDLTool"
39 />
40 <Tool
41 Name="VCCLCompilerTool"
42 Optimization="0"
43 AdditionalIncludeDirectories="..\..\contrib\unzip"
44 PreprocessorDefinitions="DEBUG;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32"
45 BasicRuntimeChecks="3"
46 SmallerTypeCheck="true"
47 RuntimeLibrary="3"
48 EnableFunctionLevelLinking="true"
49 FloatingPointModel="2"
50 UsePrecompiledHeader="2"
51 PrecompiledHeaderThrough="AssimpPCH.h"
52 WarningLevel="3"
53 Detect64BitPortabilityProblems="false"
54 DebugInformationFormat="4"
55 />
56 <Tool
57 Name="VCManagedResourceCompilerTool"
58 />
59 <Tool
60 Name="VCResourceCompilerTool"
61 />
62 <Tool
63 Name="VCPreLinkEventTool"
64 />
65 <Tool
66 Name="VCLibrarianTool"
67 />
68 <Tool
69 Name="VCALinkTool"
70 />
71 <Tool
72 Name="VCXDCMakeTool"
73 />
74 <Tool
75 Name="VCBscMakeTool"
76 />
77 <Tool
78 Name="VCFxCopTool"
79 />
80 <Tool
81 Name="VCPostBuildEventTool"
82 />
83 </Configuration>
84 <Configuration
85 Name="debug|x64"
86 OutputDirectory="./../../lib/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
87 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
88 ConfigurationType="4"
89 >
90 <Tool
91 Name="VCPreBuildEventTool"
92 />
93 <Tool
94 Name="VCCustomBuildTool"
95 />
96 <Tool
97 Name="VCXMLDataGeneratorTool"
98 />
99 <Tool
100 Name="VCWebServiceProxyGeneratorTool"
101 />
102 <Tool
103 Name="VCMIDLTool"
104 TargetEnvironment="3"
105 />
106 <Tool
107 Name="VCCLCompilerTool"
108 Optimization="0"
109 AdditionalIncludeDirectories="..\..\contrib\unzip"
110 PreprocessorDefinitions="DEBUG, _SCL_SECURE_NO_WARNINGS, _CRT_SECURE_NO_WARNINGS,WIN32"
111 BasicRuntimeChecks="3"
112 SmallerTypeCheck="true"
113 RuntimeLibrary="3"
114 EnableFunctionLevelLinking="true"
115 WarningLevel="3"
116 DebugInformationFormat="3"
117 />
118 <Tool
119 Name="VCManagedResourceCompilerTool"
120 />
121 <Tool
122 Name="VCResourceCompilerTool"
123 />
124 <Tool
125 Name="VCPreLinkEventTool"
126 />
127 <Tool
128 Name="VCLibrarianTool"
129 />
130 <Tool
131 Name="VCALinkTool"
132 />
133 <Tool
134 Name="VCXDCMakeTool"
135 />
136 <Tool
137 Name="VCBscMakeTool"
138 />
139 <Tool
140 Name="VCFxCopTool"
141 />
142 <Tool
143 Name="VCPostBuildEventTool"
144 />
145 </Configuration>
146 <Configuration
147 Name="release|Win32"
148 IntermediateDirectory="$(ConfigurationName)"
149 ConfigurationType="4"
150 InheritedPropertySheets=".\shared\LibShared.vsprops;.\shared\FastSTL.vsprops"
151 WholeProgramOptimization="0"
152 >
153 <Tool
154 Name="VCPreBuildEventTool"
155 />
156 <Tool
157 Name="VCCustomBuildTool"
158 />
159 <Tool
160 Name="VCXMLDataGeneratorTool"
161 />
162 <Tool
163 Name="VCWebServiceProxyGeneratorTool"
164 />
165 <Tool
166 Name="VCMIDLTool"
167 />
168 <Tool
169 Name="VCCLCompilerTool"
170 InlineFunctionExpansion="2"
171 EnableIntrinsicFunctions="true"
172 FavorSizeOrSpeed="0"
173 OmitFramePointers="true"
174 WholeProgramOptimization="false"
175 AdditionalIncludeDirectories="..\..\contrib\unzip"
176 PreprocessorDefinitions="NDEBUG;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_SECURE_SCL=0;WIN32"
177 StringPooling="true"
178 RuntimeLibrary="2"
179 BufferSecurityCheck="false"
180 EnableEnhancedInstructionSet="2"
181 FloatingPointModel="2"
182 UsePrecompiledHeader="2"
183 PrecompiledHeaderThrough="AssimpPCH.h"
184 WarningLevel="3"
185 Detect64BitPortabilityProblems="false"
186 />
187 <Tool
188 Name="VCManagedResourceCompilerTool"
189 />
190 <Tool
191 Name="VCResourceCompilerTool"
192 />
193 <Tool
194 Name="VCPreLinkEventTool"
195 />
196 <Tool
197 Name="VCLibrarianTool"
198 />
199 <Tool
200 Name="VCALinkTool"
201 />
202 <Tool
203 Name="VCXDCMakeTool"
204 />
205 <Tool
206 Name="VCBscMakeTool"
207 />
208 <Tool
209 Name="VCFxCopTool"
210 />
211 <Tool
212 Name="VCPostBuildEventTool"
213 />
214 </Configuration>
215 <Configuration
216 Name="release|x64"
217 ConfigurationType="4"
218 InheritedPropertySheets=".\shared\LibShared.vsprops"
219 WholeProgramOptimization="0"
220 >
221 <Tool
222 Name="VCPreBuildEventTool"
223 />
224 <Tool
225 Name="VCCustomBuildTool"
226 />
227 <Tool
228 Name="VCXMLDataGeneratorTool"
229 />
230 <Tool
231 Name="VCWebServiceProxyGeneratorTool"
232 />
233 <Tool
234 Name="VCMIDLTool"
235 TargetEnvironment="3"
236 />
237 <Tool
238 Name="VCCLCompilerTool"
239 InlineFunctionExpansion="2"
240 EnableIntrinsicFunctions="true"
241 FavorSizeOrSpeed="1"
242 AdditionalIncludeDirectories="..\..\contrib\unzip"
243 PreprocessorDefinitions="NDEBUG, _SCL_SECURE_NO_WARNINGS, _CRT_SECURE_NO_WARNINGS,WIN32"
244 StringPooling="true"
245 RuntimeLibrary="2"
246 BufferSecurityCheck="false"
247 EnableEnhancedInstructionSet="0"
248 FloatingPointModel="2"
249 UsePrecompiledHeader="2"
250 PrecompiledHeaderThrough="AssimpPCH.h"
251 WarningLevel="3"
252 />
253 <Tool
254 Name="VCManagedResourceCompilerTool"
255 />
256 <Tool
257 Name="VCResourceCompilerTool"
258 />
259 <Tool
260 Name="VCPreLinkEventTool"
261 />
262 <Tool
263 Name="VCLibrarianTool"
264 />
265 <Tool
266 Name="VCALinkTool"
267 />
268 <Tool
269 Name="VCXDCMakeTool"
270 />
271 <Tool
272 Name="VCBscMakeTool"
273 />
274 <Tool
275 Name="VCFxCopTool"
276 />
277 <Tool
278 Name="VCPostBuildEventTool"
279 />
280 </Configuration>
281 <Configuration
282 Name="release-dll|Win32"
283 ConfigurationType="2"
284 InheritedPropertySheets=".\shared\DllShared.vsprops;.\shared\FastSTL.vsprops"
285 WholeProgramOptimization="0"
286 >
287 <Tool
288 Name="VCPreBuildEventTool"
289 />
290 <Tool
291 Name="VCCustomBuildTool"
292 />
293 <Tool
294 Name="VCXMLDataGeneratorTool"
295 />
296 <Tool
297 Name="VCWebServiceProxyGeneratorTool"
298 />
299 <Tool
300 Name="VCMIDLTool"
301 />
302 <Tool
303 Name="VCCLCompilerTool"
304 InlineFunctionExpansion="2"
305 EnableIntrinsicFunctions="true"
306 FavorSizeOrSpeed="0"
307 OmitFramePointers="true"
308 AdditionalIncludeDirectories="..\..\contrib\unzip"
309 PreprocessorDefinitions="NDEBUG;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32;ASSIMP_BUILD_DLL_EXPORT"
310 StringPooling="true"
311 RuntimeLibrary="2"
312 BufferSecurityCheck="false"
313 EnableEnhancedInstructionSet="2"
314 FloatingPointModel="2"
315 UsePrecompiledHeader="2"
316 PrecompiledHeaderThrough="AssimpPCH.h"
317 WarningLevel="3"
318 Detect64BitPortabilityProblems="false"
319 />
320 <Tool
321 Name="VCManagedResourceCompilerTool"
322 />
323 <Tool
324 Name="VCResourceCompilerTool"
325 />
326 <Tool
327 Name="VCPreLinkEventTool"
328 />
329 <Tool
330 Name="VCLinkerTool"
331 OutputFile="$(OutDir)\Assimp32.dll"
332 GenerateDebugInformation="true"
333 RandomizedBaseAddress="1"
334 DataExecutionPrevention="0"
335 ImportLibrary="$(SolutionDir)..\..\lib\$(ProjectName)_$(ConfigurationName)_$(PlatformName)\assimp.lib"
336 />
337 <Tool
338 Name="VCALinkTool"
339 />
340 <Tool
341 Name="VCManifestTool"
342 />
343 <Tool
344 Name="VCXDCMakeTool"
345 />
346 <Tool
347 Name="VCBscMakeTool"
348 />
349 <Tool
350 Name="VCFxCopTool"
351 />
352 <Tool
353 Name="VCAppVerifierTool"
354 />
355 <Tool
356 Name="VCPostBuildEventTool"
357 CommandLine="mkdir &quot;$(SolutionDir)..\..\bin\unit_$(ConfigurationName)_$(PlatformName)&quot;&#x0D;&#x0A;mkdir &quot;$(SolutionDir)..\..\bin\assimpview_$(ConfigurationName)_$(PlatformName)&quot;&#x0D;&#x0A;mkdir &quot;$(SolutionDir)..\..\bin\assimpcmd_$(ConfigurationName)_$(PlatformName)&quot;&#x0D;&#x0A;&#x0D;&#x0A;copy &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(SolutionDir)..\..\bin\unit_$(ConfigurationName)_$(PlatformName)\&quot;&#x0D;&#x0A;copy &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(SolutionDir)..\..\bin\assimpview_$(ConfigurationName)_$(PlatformName)\&quot;&#x0D;&#x0A;copy &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(SolutionDir)..\..\bin\assimpcmd_$(ConfigurationName)_$(PlatformName)\&quot;&#x0D;&#x0A;"
358 />
359 </Configuration>
360 <Configuration
361 Name="release-dll|x64"
362 ConfigurationType="2"
363 InheritedPropertySheets=".\shared\DllShared.vsprops"
364 WholeProgramOptimization="0"
365 >
366 <Tool
367 Name="VCPreBuildEventTool"
368 />
369 <Tool
370 Name="VCCustomBuildTool"
371 />
372 <Tool
373 Name="VCXMLDataGeneratorTool"
374 />
375 <Tool
376 Name="VCWebServiceProxyGeneratorTool"
377 />
378 <Tool
379 Name="VCMIDLTool"
380 TargetEnvironment="3"
381 />
382 <Tool
383 Name="VCCLCompilerTool"
384 Optimization="3"
385 InlineFunctionExpansion="2"
386 EnableIntrinsicFunctions="true"
387 FavorSizeOrSpeed="1"
388 AdditionalIncludeDirectories="..\..\contrib\unzip"
389 PreprocessorDefinitions="NDEBUG;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32;ASSIMP_BUILD_DLL_EXPORT"
390 StringPooling="true"
391 RuntimeLibrary="2"
392 BufferSecurityCheck="false"
393 EnableEnhancedInstructionSet="0"
394 FloatingPointModel="2"
395 WarningLevel="3"
396 />
397 <Tool
398 Name="VCManagedResourceCompilerTool"
399 />
400 <Tool
401 Name="VCResourceCompilerTool"
402 />
403 <Tool
404 Name="VCPreLinkEventTool"
405 />
406 <Tool
407 Name="VCLinkerTool"
408 OutputFile="$(OutDir)\Assimp64.dll"
409 ImportLibrary="$(SolutionDir)..\..\lib\$(ProjectName)_$(ConfigurationName)_$(PlatformName)\assimp.lib"
410 TargetMachine="17"
411 />
412 <Tool
413 Name="VCALinkTool"
414 />
415 <Tool
416 Name="VCManifestTool"
417 />
418 <Tool
419 Name="VCXDCMakeTool"
420 />
421 <Tool
422 Name="VCBscMakeTool"
423 />
424 <Tool
425 Name="VCFxCopTool"
426 />
427 <Tool
428 Name="VCAppVerifierTool"
429 />
430 <Tool
431 Name="VCPostBuildEventTool"
432 CommandLine="mkdir &quot;$(SolutionDir)..\..\bin\unit_$(ConfigurationName)_$(PlatformName)&quot;&#x0D;&#x0A;mkdir &quot;$(SolutionDir)..\..\bin\assimpview_$(ConfigurationName)_$(PlatformName)&quot;&#x0D;&#x0A;mkdir &quot;$(SolutionDir)..\..\bin\assimpcmd_$(ConfigurationName)_$(PlatformName)&quot;&#x0D;&#x0A;&#x0D;&#x0A;copy &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(SolutionDir)..\..\bin\unit_$(ConfigurationName)_$(PlatformName)\&quot;&#x0D;&#x0A;copy &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(SolutionDir)..\..\bin\assimpview_$(ConfigurationName)_$(PlatformName)\&quot;&#x0D;&#x0A;copy &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(SolutionDir)..\..\bin\assimpcmd_$(ConfigurationName)_$(PlatformName)\&quot;&#x0D;&#x0A;"
433 />
434 </Configuration>
435 <Configuration
436 Name="debug-dll|Win32"
437 ConfigurationType="2"
438 InheritedPropertySheets=".\shared\DllShared.vsprops;.\shared\FastSTL.vsprops"
439 >
440 <Tool
441 Name="VCPreBuildEventTool"
442 />
443 <Tool
444 Name="VCCustomBuildTool"
445 />
446 <Tool
447 Name="VCXMLDataGeneratorTool"
448 />
449 <Tool
450 Name="VCWebServiceProxyGeneratorTool"
451 />
452 <Tool
453 Name="VCMIDLTool"
454 />
455 <Tool
456 Name="VCCLCompilerTool"
457 Optimization="0"
458 AdditionalIncludeDirectories="..\..\contrib\unzip"
459 PreprocessorDefinitions="DEBUG;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32;ASSIMP_BUILD_DLL_EXPORT"
460 BasicRuntimeChecks="3"
461 SmallerTypeCheck="true"
462 RuntimeLibrary="3"
463 EnableFunctionLevelLinking="true"
464 FloatingPointModel="2"
465 UsePrecompiledHeader="2"
466 PrecompiledHeaderThrough="AssimpPCH.h"
467 WarningLevel="3"
468 Detect64BitPortabilityProblems="false"
469 DebugInformationFormat="4"
470 />
471 <Tool
472 Name="VCManagedResourceCompilerTool"
473 />
474 <Tool
475 Name="VCResourceCompilerTool"
476 />
477 <Tool
478 Name="VCPreLinkEventTool"
479 />
480 <Tool
481 Name="VCLinkerTool"
482 OutputFile="$(OutDir)\Assimp32d.dll"
483 GenerateDebugInformation="true"
484 RandomizedBaseAddress="1"
485 DataExecutionPrevention="0"
486 ImportLibrary="$(SolutionDir)..\..\lib\$(ProjectName)_$(ConfigurationName)_$(PlatformName)\assimp.lib"
487 />
488 <Tool
489 Name="VCALinkTool"
490 />
491 <Tool
492 Name="VCManifestTool"
493 />
494 <Tool
495 Name="VCXDCMakeTool"
496 />
497 <Tool
498 Name="VCBscMakeTool"
499 />
500 <Tool
501 Name="VCFxCopTool"
502 />
503 <Tool
504 Name="VCAppVerifierTool"
505 />
506 <Tool
507 Name="VCPostBuildEventTool"
508 CommandLine="mkdir &quot;$(SolutionDir)..\..\bin\unit_$(ConfigurationName)_$(PlatformName)&quot;&#x0D;&#x0A;mkdir &quot;$(SolutionDir)..\..\bin\assimpview_$(ConfigurationName)_$(PlatformName)&quot;&#x0D;&#x0A;mkdir &quot;$(SolutionDir)..\..\bin\assimpcmd_$(ConfigurationName)_$(PlatformName)&quot;&#x0D;&#x0A;&#x0D;&#x0A;copy &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(SolutionDir)..\..\bin\unit_$(ConfigurationName)_$(PlatformName)\&quot;&#x0D;&#x0A;copy &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(SolutionDir)..\..\bin\assimpview_$(ConfigurationName)_$(PlatformName)\&quot;&#x0D;&#x0A;copy &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(SolutionDir)..\..\bin\assimpcmd_$(ConfigurationName)_$(PlatformName)\&quot;&#x0D;&#x0A;"
509 />
510 </Configuration>
511 <Configuration
512 Name="debug-dll|x64"
513 ConfigurationType="2"
514 InheritedPropertySheets=".\shared\DllShared.vsprops"
515 >
516 <Tool
517 Name="VCPreBuildEventTool"
518 />
519 <Tool
520 Name="VCCustomBuildTool"
521 />
522 <Tool
523 Name="VCXMLDataGeneratorTool"
524 />
525 <Tool
526 Name="VCWebServiceProxyGeneratorTool"
527 />
528 <Tool
529 Name="VCMIDLTool"
530 TargetEnvironment="3"
531 />
532 <Tool
533 Name="VCCLCompilerTool"
534 Optimization="0"
535 AdditionalIncludeDirectories="..\..\contrib\unzip"
536 PreprocessorDefinitions="DEBUG;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32;ASSIMP_BUILD_DLL_EXPORT"
537 BasicRuntimeChecks="3"
538 SmallerTypeCheck="true"
539 RuntimeLibrary="3"
540 EnableFunctionLevelLinking="true"
541 WarningLevel="3"
542 DebugInformationFormat="3"
543 />
544 <Tool
545 Name="VCManagedResourceCompilerTool"
546 />
547 <Tool
548 Name="VCResourceCompilerTool"
549 />
550 <Tool
551 Name="VCPreLinkEventTool"
552 />
553 <Tool
554 Name="VCLinkerTool"
555 OutputFile="$(OutDir)\Assimp64d.dll"
556 ImportLibrary="$(SolutionDir)..\..\lib\$(ProjectName)_$(ConfigurationName)_$(PlatformName)\assimp.lib"
557 TargetMachine="17"
558 />
559 <Tool
560 Name="VCALinkTool"
561 />
562 <Tool
563 Name="VCManifestTool"
564 />
565 <Tool
566 Name="VCXDCMakeTool"
567 />
568 <Tool
569 Name="VCBscMakeTool"
570 />
571 <Tool
572 Name="VCFxCopTool"
573 />
574 <Tool
575 Name="VCAppVerifierTool"
576 />
577 <Tool
578 Name="VCPostBuildEventTool"
579 CommandLine="mkdir &quot;$(SolutionDir)..\..\bin\unit_$(ConfigurationName)_$(PlatformName)&quot;&#x0D;&#x0A;mkdir &quot;$(SolutionDir)..\..\bin\assimpview_$(ConfigurationName)_$(PlatformName)&quot;&#x0D;&#x0A;mkdir &quot;$(SolutionDir)..\..\bin\assimpcmd_$(ConfigurationName)_$(PlatformName)&quot;&#x0D;&#x0A;&#x0D;&#x0A;copy &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(SolutionDir)..\..\bin\unit_$(ConfigurationName)_$(PlatformName)\&quot;&#x0D;&#x0A;copy &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(SolutionDir)..\..\bin\assimpview_$(ConfigurationName)_$(PlatformName)\&quot;&#x0D;&#x0A;copy &quot;$(OutDir)\$(TargetFileName)&quot; &quot;$(SolutionDir)..\..\bin\assimpcmd_$(ConfigurationName)_$(PlatformName)\&quot;&#x0D;&#x0A;"
580 />
581 </Configuration>
582 <Configuration
583 Name="release-noboost-st|Win32"
584 ConfigurationType="4"
585 InheritedPropertySheets=".\shared\LibShared.vsprops;.\shared\NoBoostShared.vsprops;.\shared\FastSTL.vsprops"
586 WholeProgramOptimization="0"
587 >
588 <Tool
589 Name="VCPreBuildEventTool"
590 />
591 <Tool
592 Name="VCCustomBuildTool"
593 />
594 <Tool
595 Name="VCXMLDataGeneratorTool"
596 />
597 <Tool
598 Name="VCWebServiceProxyGeneratorTool"
599 />
600 <Tool
601 Name="VCMIDLTool"
602 />
603 <Tool
604 Name="VCCLCompilerTool"
605 InlineFunctionExpansion="2"
606 EnableIntrinsicFunctions="true"
607 FavorSizeOrSpeed="0"
608 OmitFramePointers="true"
609 AdditionalIncludeDirectories="..\..\contrib\unzip"
610 PreprocessorDefinitions="NDEBUG;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32;ASSIMP_BUILD_BOOST_WORKAROUND"
611 StringPooling="true"
612 RuntimeLibrary="2"
613 BufferSecurityCheck="false"
614 EnableEnhancedInstructionSet="2"
615 FloatingPointModel="2"
616 UsePrecompiledHeader="2"
617 PrecompiledHeaderThrough="AssimpPCH.h"
618 WarningLevel="3"
619 Detect64BitPortabilityProblems="false"
620 />
621 <Tool
622 Name="VCManagedResourceCompilerTool"
623 />
624 <Tool
625 Name="VCResourceCompilerTool"
626 />
627 <Tool
628 Name="VCPreLinkEventTool"
629 />
630 <Tool
631 Name="VCLibrarianTool"
632 />
633 <Tool
634 Name="VCALinkTool"
635 />
636 <Tool
637 Name="VCXDCMakeTool"
638 />
639 <Tool
640 Name="VCBscMakeTool"
641 />
642 <Tool
643 Name="VCFxCopTool"
644 />
645 <Tool
646 Name="VCPostBuildEventTool"
647 />
648 </Configuration>
649 <Configuration
650 Name="release-noboost-st|x64"
651 ConfigurationType="4"
652 InheritedPropertySheets=".\shared\LibShared.vsprops;.\shared\NoBoostShared.vsprops"
653 WholeProgramOptimization="0"
654 >
655 <Tool
656 Name="VCPreBuildEventTool"
657 />
658 <Tool
659 Name="VCCustomBuildTool"
660 />
661 <Tool
662 Name="VCXMLDataGeneratorTool"
663 />
664 <Tool
665 Name="VCWebServiceProxyGeneratorTool"
666 />
667 <Tool
668 Name="VCMIDLTool"
669 TargetEnvironment="3"
670 />
671 <Tool
672 Name="VCCLCompilerTool"
673 InlineFunctionExpansion="2"
674 EnableIntrinsicFunctions="true"
675 FavorSizeOrSpeed="1"
676 AdditionalIncludeDirectories="..\..\contrib\unzip"
677 PreprocessorDefinitions="NDEBUG;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32;ASSIMP_BUILD_BOOST_WORKAROUND"
678 StringPooling="true"
679 RuntimeLibrary="2"
680 BufferSecurityCheck="false"
681 EnableEnhancedInstructionSet="0"
682 UsePrecompiledHeader="2"
683 PrecompiledHeaderThrough="AssimpPCH.h"
684 WarningLevel="3"
685 />
686 <Tool
687 Name="VCManagedResourceCompilerTool"
688 />
689 <Tool
690 Name="VCResourceCompilerTool"
691 />
692 <Tool
693 Name="VCPreLinkEventTool"
694 />
695 <Tool
696 Name="VCLibrarianTool"
697 />
698 <Tool
699 Name="VCALinkTool"
700 />
701 <Tool
702 Name="VCXDCMakeTool"
703 />
704 <Tool
705 Name="VCBscMakeTool"
706 />
707 <Tool
708 Name="VCFxCopTool"
709 />
710 <Tool
711 Name="VCPostBuildEventTool"
712 />
713 </Configuration>
714 <Configuration
715 Name="debug-noboost-st|Win32"
716 ConfigurationType="4"
717 InheritedPropertySheets=".\shared\LibShared.vsprops;.\shared\NoBoostShared.vsprops;.\shared\FastSTL.vsprops"
718 >
719 <Tool
720 Name="VCPreBuildEventTool"
721 />
722 <Tool
723 Name="VCCustomBuildTool"
724 />
725 <Tool
726 Name="VCXMLDataGeneratorTool"
727 />
728 <Tool
729 Name="VCWebServiceProxyGeneratorTool"
730 />
731 <Tool
732 Name="VCMIDLTool"
733 />
734 <Tool
735 Name="VCCLCompilerTool"
736 Optimization="0"
737 AdditionalIncludeDirectories="..\..\contrib\unzip"
738 PreprocessorDefinitions="DEBUG;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32;ASSIMP_BUILD_BOOST_WORKAROUND"
739 BasicRuntimeChecks="3"
740 SmallerTypeCheck="true"
741 RuntimeLibrary="3"
742 EnableFunctionLevelLinking="true"
743 FloatingPointModel="2"
744 UsePrecompiledHeader="2"
745 PrecompiledHeaderThrough="AssimpPCH.h"
746 WarningLevel="3"
747 Detect64BitPortabilityProblems="false"
748 DebugInformationFormat="4"
749 />
750 <Tool
751 Name="VCManagedResourceCompilerTool"
752 />
753 <Tool
754 Name="VCResourceCompilerTool"
755 />
756 <Tool
757 Name="VCPreLinkEventTool"
758 />
759 <Tool
760 Name="VCLibrarianTool"
761 />
762 <Tool
763 Name="VCALinkTool"
764 />
765 <Tool
766 Name="VCXDCMakeTool"
767 />
768 <Tool
769 Name="VCBscMakeTool"
770 />
771 <Tool
772 Name="VCFxCopTool"
773 />
774 <Tool
775 Name="VCPostBuildEventTool"
776 />
777 </Configuration>
778 <Configuration
779 Name="debug-noboost-st|x64"
780 ConfigurationType="4"
781 InheritedPropertySheets=".\shared\LibShared.vsprops;.\shared\NoBoostShared.vsprops"
782 >
783 <Tool
784 Name="VCPreBuildEventTool"
785 />
786 <Tool
787 Name="VCCustomBuildTool"
788 />
789 <Tool
790 Name="VCXMLDataGeneratorTool"
791 />
792 <Tool
793 Name="VCWebServiceProxyGeneratorTool"
794 />
795 <Tool
796 Name="VCMIDLTool"
797 TargetEnvironment="3"
798 />
799 <Tool
800 Name="VCCLCompilerTool"
801 Optimization="0"
802 AdditionalIncludeDirectories="..\..\contrib\unzip"
803 PreprocessorDefinitions="DEBUG;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32;ASSIMP_BUILD_BOOST_WORKAROUND"
804 BasicRuntimeChecks="3"
805 SmallerTypeCheck="true"
806 RuntimeLibrary="3"
807 EnableFunctionLevelLinking="true"
808 WarningLevel="3"
809 DebugInformationFormat="3"
810 />
811 <Tool
812 Name="VCManagedResourceCompilerTool"
813 />
814 <Tool
815 Name="VCResourceCompilerTool"
816 />
817 <Tool
818 Name="VCPreLinkEventTool"
819 />
820 <Tool
821 Name="VCLibrarianTool"
822 />
823 <Tool
824 Name="VCALinkTool"
825 />
826 <Tool
827 Name="VCXDCMakeTool"
828 />
829 <Tool
830 Name="VCBscMakeTool"
831 />
832 <Tool
833 Name="VCFxCopTool"
834 />
835 <Tool
836 Name="VCPostBuildEventTool"
837 />
838 </Configuration>
839 <Configuration
840 Name="debug-st|Win32"
841 ConfigurationType="4"
842 InheritedPropertySheets=".\shared\LibShared.vsprops;.\shared\SingleThreadedShared.vsprops;.\shared\FastSTL.vsprops"
843 >
844 <Tool
845 Name="VCPreBuildEventTool"
846 />
847 <Tool
848 Name="VCCustomBuildTool"
849 />
850 <Tool
851 Name="VCXMLDataGeneratorTool"
852 />
853 <Tool
854 Name="VCWebServiceProxyGeneratorTool"
855 />
856 <Tool
857 Name="VCMIDLTool"
858 />
859 <Tool
860 Name="VCCLCompilerTool"
861 Optimization="0"
862 AdditionalIncludeDirectories="..\..\contrib\unzip"
863 PreprocessorDefinitions="DEBUG;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32"
864 BasicRuntimeChecks="3"
865 SmallerTypeCheck="true"
866 RuntimeLibrary="3"
867 EnableFunctionLevelLinking="true"
868 FloatingPointModel="2"
869 UsePrecompiledHeader="2"
870 PrecompiledHeaderThrough="AssimpPCH.h"
871 WarningLevel="3"
872 Detect64BitPortabilityProblems="false"
873 DebugInformationFormat="4"
874 />
875 <Tool
876 Name="VCManagedResourceCompilerTool"
877 />
878 <Tool
879 Name="VCResourceCompilerTool"
880 />
881 <Tool
882 Name="VCPreLinkEventTool"
883 />
884 <Tool
885 Name="VCLibrarianTool"
886 />
887 <Tool
888 Name="VCALinkTool"
889 />
890 <Tool
891 Name="VCXDCMakeTool"
892 />
893 <Tool
894 Name="VCBscMakeTool"
895 />
896 <Tool
897 Name="VCFxCopTool"
898 />
899 <Tool
900 Name="VCPostBuildEventTool"
901 />
902 </Configuration>
903 <Configuration
904 Name="debug-st|x64"
905 ConfigurationType="4"
906 InheritedPropertySheets=".\shared\LibShared.vsprops;.\shared\SingleThreadedShared.vsprops"
907 >
908 <Tool
909 Name="VCPreBuildEventTool"
910 />
911 <Tool
912 Name="VCCustomBuildTool"
913 />
914 <Tool
915 Name="VCXMLDataGeneratorTool"
916 />
917 <Tool
918 Name="VCWebServiceProxyGeneratorTool"
919 />
920 <Tool
921 Name="VCMIDLTool"
922 TargetEnvironment="3"
923 />
924 <Tool
925 Name="VCCLCompilerTool"
926 Optimization="0"
927 AdditionalIncludeDirectories="..\..\contrib\unzip"
928 PreprocessorDefinitions="DEBUG, _SCL_SECURE_NO_WARNINGS, _CRT_SECURE_NO_WARNINGS,WIN32"
929 BasicRuntimeChecks="3"
930 SmallerTypeCheck="true"
931 RuntimeLibrary="3"
932 EnableFunctionLevelLinking="true"
933 WarningLevel="3"
934 DebugInformationFormat="3"
935 />
936 <Tool
937 Name="VCManagedResourceCompilerTool"
938 />
939 <Tool
940 Name="VCResourceCompilerTool"
941 />
942 <Tool
943 Name="VCPreLinkEventTool"
944 />
945 <Tool
946 Name="VCLibrarianTool"
947 />
948 <Tool
949 Name="VCALinkTool"
950 />
951 <Tool
952 Name="VCXDCMakeTool"
953 />
954 <Tool
955 Name="VCBscMakeTool"
956 />
957 <Tool
958 Name="VCFxCopTool"
959 />
960 <Tool
961 Name="VCPostBuildEventTool"
962 />
963 </Configuration>
964 <Configuration
965 Name="release-st|Win32"
966 ConfigurationType="4"
967 InheritedPropertySheets=".\shared\LibShared.vsprops;.\shared\SingleThreadedShared.vsprops;.\shared\FastSTL.vsprops"
968 WholeProgramOptimization="0"
969 >
970 <Tool
971 Name="VCPreBuildEventTool"
972 />
973 <Tool
974 Name="VCCustomBuildTool"
975 />
976 <Tool
977 Name="VCXMLDataGeneratorTool"
978 />
979 <Tool
980 Name="VCWebServiceProxyGeneratorTool"
981 />
982 <Tool
983 Name="VCMIDLTool"
984 />
985 <Tool
986 Name="VCCLCompilerTool"
987 InlineFunctionExpansion="2"
988 EnableIntrinsicFunctions="true"
989 FavorSizeOrSpeed="0"
990 OmitFramePointers="true"
991 AdditionalIncludeDirectories="..\..\contrib\unzip"
992 PreprocessorDefinitions="NDEBUG;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;WIN32"
993 StringPooling="true"
994 RuntimeLibrary="2"
995 BufferSecurityCheck="false"
996 EnableEnhancedInstructionSet="2"
997 FloatingPointModel="2"
998 UsePrecompiledHeader="2"
999 PrecompiledHeaderThrough="AssimpPCH.h"
1000 WarningLevel="3"
1001 Detect64BitPortabilityProblems="false"
1002 />
1003 <Tool
1004 Name="VCManagedResourceCompilerTool"
1005 />
1006 <Tool
1007 Name="VCResourceCompilerTool"
1008 />
1009 <Tool
1010 Name="VCPreLinkEventTool"
1011 />
1012 <Tool
1013 Name="VCLibrarianTool"
1014 />
1015 <Tool
1016 Name="VCALinkTool"
1017 />
1018 <Tool
1019 Name="VCXDCMakeTool"
1020 />
1021 <Tool
1022 Name="VCBscMakeTool"
1023 />
1024 <Tool
1025 Name="VCFxCopTool"
1026 />
1027 <Tool
1028 Name="VCPostBuildEventTool"
1029 />
1030 </Configuration>
1031 <Configuration
1032 Name="release-st|x64"
1033 ConfigurationType="4"
1034 InheritedPropertySheets=".\shared\LibShared.vsprops;.\shared\SingleThreadedShared.vsprops"
1035 WholeProgramOptimization="0"
1036 >
1037 <Tool
1038 Name="VCPreBuildEventTool"
1039 />
1040 <Tool
1041 Name="VCCustomBuildTool"
1042 />
1043 <Tool
1044 Name="VCXMLDataGeneratorTool"
1045 />
1046 <Tool
1047 Name="VCWebServiceProxyGeneratorTool"
1048 />
1049 <Tool
1050 Name="VCMIDLTool"
1051 TargetEnvironment="3"
1052 />
1053 <Tool
1054 Name="VCCLCompilerTool"
1055 InlineFunctionExpansion="2"
1056 EnableIntrinsicFunctions="true"
1057 FavorSizeOrSpeed="1"
1058 AdditionalIncludeDirectories="..\..\contrib\unzip"
1059 PreprocessorDefinitions="NDEBUG, _SCL_SECURE_NO_WARNINGS, _CRT_SECURE_NO_WARNINGS,WIN32"
1060 StringPooling="true"
1061 RuntimeLibrary="2"
1062 BufferSecurityCheck="false"
1063 EnableEnhancedInstructionSet="0"
1064 UsePrecompiledHeader="2"
1065 PrecompiledHeaderThrough="AssimpPCH.h"
1066 WarningLevel="3"
1067 />
1068 <Tool
1069 Name="VCManagedResourceCompilerTool"
1070 />
1071 <Tool
1072 Name="VCResourceCompilerTool"
1073 />
1074 <Tool
1075 Name="VCPreLinkEventTool"
1076 />
1077 <Tool
1078 Name="VCLibrarianTool"
1079 />
1080 <Tool
1081 Name="VCALinkTool"
1082 />
1083 <Tool
1084 Name="VCXDCMakeTool"
1085 />
1086 <Tool
1087 Name="VCBscMakeTool"
1088 />
1089 <Tool
1090 Name="VCFxCopTool"
1091 />
1092 <Tool
1093 Name="VCPostBuildEventTool"
1094 />
1095 </Configuration>
1096 </Configurations>
1097 <References>
1098 </References>
1099 <Files>
1100 <Filter
1101 Name="include"
1102 >
1103 <Filter
1104 Name="Compiler"
1105 >
1106 <File
1107 RelativePath="..\..\include\assimp\Compiler\poppack1.h"
1108 >
1109 </File>
1110 <File
1111 RelativePath="..\..\include\assimp\Compiler\pushpack1.h"
1112 >
1113 </File>
1114 </Filter>
1115 <Filter
1116 Name="C++"
1117 >
1118 <File
1119 RelativePath="..\..\include\assimp\DefaultLogger.hpp"
1120 >
1121 </File>
1122 <File
1123 RelativePath="..\..\include\assimp\Exporter.hpp"
1124 >
1125 </File>
1126 <File
1127 RelativePath="..\..\include\assimp\Importer.hpp"
1128 >
1129 </File>
1130 <File
1131 RelativePath="..\..\include\assimp\IOStream.hpp"
1132 >
1133 </File>
1134 <File
1135 RelativePath="..\..\include\assimp\IOSystem.hpp"
1136 >
1137 </File>
1138 <File
1139 RelativePath="..\..\include\assimp\Logger.hpp"
1140 >
1141 </File>
1142 <File
1143 RelativePath="..\..\include\assimp\LogStream.hpp"
1144 >
1145 </File>
1146 <File
1147 RelativePath="..\..\include\assimp\NullLogger.hpp"
1148 >
1149 </File>
1150 <File
1151 RelativePath="..\..\include\assimp\ProgressHandler.hpp"
1152 >
1153 </File>
1154 </Filter>
1155 <Filter
1156 Name="C"
1157 >
1158 <File
1159 RelativePath="..\..\include\assimp\cexport.h"
1160 >
1161 </File>
1162 <File
1163 RelativePath="..\..\include\assimp\cfileio.h"
1164 >
1165 </File>
1166 <File
1167 RelativePath="..\..\include\assimp\cimport.h"
1168 >
1169 </File>
1170 </Filter>
1171 <Filter
1172 Name="Common"
1173 >
1174 <File
1175 RelativePath="..\..\include\assimp\ai_assert.h"
1176 >
1177 </File>
1178 <File
1179 RelativePath="..\..\include\assimp\anim.h"
1180 >
1181 </File>
1182 <File
1183 RelativePath="..\..\include\assimp\camera.h"
1184 >
1185 </File>
1186 <File
1187 RelativePath="..\..\include\assimp\color4.h"
1188 >
1189 </File>
1190 <File
1191 RelativePath="..\..\include\assimp\color4.inl"
1192 >
1193 </File>
1194 <File
1195 RelativePath="..\..\include\assimp\config.h"
1196 >
1197 </File>
1198 <File
1199 RelativePath="..\..\include\assimp\defs.h"
1200 >
1201 </File>
1202 <File
1203 RelativePath="..\..\include\assimp\importerdesc.h"
1204 >
1205 </File>
1206 <File
1207 RelativePath="..\..\include\assimp\light.h"
1208 >
1209 </File>
1210 <File
1211 RelativePath="..\..\include\assimp\material.h"
1212 >
1213 </File>
1214 <File
1215 RelativePath="..\..\include\assimp\material.inl"
1216 >
1217 </File>
1218 <File
1219 RelativePath="..\..\include\assimp\matrix3x3.h"
1220 >
1221 </File>
1222 <File
1223 RelativePath="..\..\include\assimp\matrix3x3.inl"
1224 >
1225 </File>
1226 <File
1227 RelativePath="..\..\include\assimp\matrix4x4.h"
1228 >
1229 </File>
1230 <File
1231 RelativePath="..\..\include\assimp\matrix4x4.inl"
1232 >
1233 </File>
1234 <File
1235 RelativePath="..\..\include\assimp\mesh.h"
1236 >
1237 </File>
1238 <File
1239 RelativePath="..\..\include\assimp\postprocess.h"
1240 >
1241 </File>
1242 <File
1243 RelativePath="..\..\include\assimp\quaternion.h"
1244 >
1245 </File>
1246 <File
1247 RelativePath="..\..\include\assimp\quaternion.inl"
1248 >
1249 </File>
1250 <File
1251 RelativePath="..\..\include\assimp\scene.h"
1252 >
1253 </File>
1254 <File
1255 RelativePath="..\..\include\assimp\texture.h"
1256 >
1257 </File>
1258 <File
1259 RelativePath="..\..\include\assimp\types.h"
1260 >
1261 </File>
1262 <File
1263 RelativePath="..\..\include\assimp\vector2.h"
1264 >
1265 </File>
1266 <File
1267 RelativePath="..\..\include\assimp\vector2.inl"
1268 >
1269 </File>
1270 <File
1271 RelativePath="..\..\include\assimp\vector3.h"
1272 >
1273 </File>
1274 <File
1275 RelativePath="..\..\include\assimp\vector3.inl"
1276 >
1277 </File>
1278 <File
1279 RelativePath="..\..\include\assimp\version.h"
1280 >
1281 </File>
1282 </Filter>
1283 </Filter>
1284 <Filter
1285 Name="sources"
1286 >
1287 <Filter
1288 Name="importers"
1289 >
1290 <Filter
1291 Name="3ds"
1292 >
1293 <File
1294 RelativePath="..\..\code\3DSConverter.cpp"
1295 >
1296 </File>
1297 <File
1298 RelativePath="..\..\code\3DSHelper.h"
1299 >
1300 </File>
1301 <File
1302 RelativePath="..\..\code\3DSLoader.cpp"
1303 >
1304 </File>
1305 <File
1306 RelativePath="..\..\code\3DSLoader.h"
1307 >
1308 </File>
1309 </Filter>
1310 <Filter
1311 Name="ase"
1312 >
1313 <File
1314 RelativePath="..\..\code\ASELoader.cpp"
1315 >
1316 </File>
1317 <File
1318 RelativePath="..\..\code\ASELoader.h"
1319 >
1320 </File>
1321 <File
1322 RelativePath="..\..\code\ASEParser.cpp"
1323 >
1324 </File>
1325 <File
1326 RelativePath="..\..\code\ASEParser.h"
1327 >
1328 </File>
1329 </Filter>
1330 <Filter
1331 Name="hmp"
1332 >
1333 <File
1334 RelativePath="..\..\code\HMPFileData.h"
1335 >
1336 </File>
1337 <File
1338 RelativePath="..\..\code\HMPLoader.cpp"
1339 >
1340 </File>
1341 <File
1342 RelativePath="..\..\code\HMPLoader.h"
1343 >
1344 </File>
1345 </Filter>
1346 <Filter
1347 Name="lwo"
1348 >
1349 <File
1350 RelativePath="..\..\code\LWOBLoader.cpp"
1351 >
1352 </File>
1353 <File
1354 RelativePath="..\..\code\LWOFileData.h"
1355 >
1356 </File>
1357 <File
1358 RelativePath="..\..\code\LWOLoader.cpp"
1359 >
1360 </File>
1361 <File
1362 RelativePath="..\..\code\LWOLoader.h"
1363 >
1364 </File>
1365 <File
1366 RelativePath="..\..\code\LWOMaterial.cpp"
1367 >
1368 </File>
1369 </Filter>
1370 <Filter
1371 Name="md3"
1372 >
1373 <File
1374 RelativePath="..\..\code\MD3FileData.h"
1375 >
1376 </File>
1377 <File
1378 RelativePath="..\..\code\MD3Loader.cpp"
1379 >
1380 </File>
1381 <File
1382 RelativePath="..\..\code\MD3Loader.h"
1383 >
1384 </File>
1385 </Filter>
1386 <Filter
1387 Name="md5"
1388 >
1389 <File
1390 RelativePath="..\..\code\MD5Loader.cpp"
1391 >
1392 </File>
1393 <File
1394 RelativePath="..\..\code\MD5Loader.h"
1395 >
1396 </File>
1397 <File
1398 RelativePath="..\..\code\MD5Parser.cpp"
1399 >
1400 </File>
1401 <File
1402 RelativePath="..\..\code\MD5Parser.h"
1403 >
1404 </File>
1405 </Filter>
1406 <Filter
1407 Name="mdc"
1408 >
1409 <File
1410 RelativePath="..\..\code\MDCFileData.h"
1411 >
1412 </File>
1413 <File
1414 RelativePath="..\..\code\MDCLoader.cpp"
1415 >
1416 </File>
1417 <File
1418 RelativePath="..\..\code\MDCLoader.h"
1419 >
1420 </File>
1421 <File
1422 RelativePath="..\..\code\MDCNormalTable.h"
1423 >
1424 </File>
1425 </Filter>
1426 <Filter
1427 Name="mdl"
1428 >
1429 <File
1430 RelativePath="..\..\code\HalfLifeFileData.h"
1431 >
1432 </File>
1433 <File
1434 RelativePath="..\..\code\MDLDefaultColorMap.h"
1435 >
1436 </File>
1437 <File
1438 RelativePath="..\..\code\MDLFileData.h"
1439 >
1440 </File>
1441 <File
1442 RelativePath="..\..\code\MDLLoader.cpp"
1443 >
1444 </File>
1445 <File
1446 RelativePath="..\..\code\MDLLoader.h"
1447 >
1448 </File>
1449 <File
1450 RelativePath="..\..\code\MDLMaterialLoader.cpp"
1451 >
1452 </File>
1453 </Filter>
1454 <Filter
1455 Name="obj"
1456 >
1457 <File
1458 RelativePath="..\..\code\ObjFileData.h"
1459 >
1460 </File>
1461 <File
1462 RelativePath="..\..\code\ObjFileImporter.cpp"
1463 >
1464 </File>
1465 <File
1466 RelativePath="..\..\code\ObjFileImporter.h"
1467 >
1468 </File>
1469 <File
1470 RelativePath="..\..\code\ObjFileMtlImporter.cpp"
1471 >
1472 </File>
1473 <File
1474 RelativePath="..\..\code\ObjFileMtlImporter.h"
1475 >
1476 </File>
1477 <File
1478 RelativePath="..\..\code\ObjFileParser.cpp"
1479 >
1480 </File>
1481 <File
1482 RelativePath="..\..\code\ObjFileParser.h"
1483 >
1484 </File>
1485 <File
1486 RelativePath="..\..\code\ObjTools.h"
1487 >
1488 </File>
1489 </Filter>
1490 <Filter
1491 Name="ply"
1492 >
1493 <File
1494 RelativePath="..\..\code\PlyLoader.cpp"
1495 >
1496 </File>
1497 <File
1498 RelativePath="..\..\code\PlyLoader.h"
1499 >
1500 </File>
1501 <File
1502 RelativePath="..\..\code\PlyParser.cpp"
1503 >
1504 </File>
1505 <File
1506 RelativePath="..\..\code\PlyParser.h"
1507 >
1508 </File>
1509 </Filter>
1510 <Filter
1511 Name="smd"
1512 >
1513 <File
1514 RelativePath="..\..\code\SMDLoader.cpp"
1515 >
1516 </File>
1517 <File
1518 RelativePath="..\..\code\SMDLoader.h"
1519 >
1520 </File>
1521 </Filter>
1522 <Filter
1523 Name="stl"
1524 >
1525 <File
1526 RelativePath="..\..\code\STLLoader.cpp"
1527 >
1528 </File>
1529 <File
1530 RelativePath="..\..\code\STLLoader.h"
1531 >
1532 </File>
1533 </Filter>
1534 <Filter
1535 Name="x"
1536 >
1537 <File
1538 RelativePath="..\..\code\XFileHelper.h"
1539 >
1540 </File>
1541 <File
1542 RelativePath="..\..\code\XFileImporter.cpp"
1543 >
1544 </File>
1545 <File
1546 RelativePath="..\..\code\XFileImporter.h"
1547 >
1548 </File>
1549 <File
1550 RelativePath="..\..\code\XFileParser.cpp"
1551 >
1552 </File>
1553 <File
1554 RelativePath="..\..\code\XFileParser.h"
1555 >
1556 </File>
1557 </Filter>
1558 <Filter
1559 Name="dxf"
1560 >
1561 <File
1562 RelativePath="..\..\code\DXFHelper.h"
1563 >
1564 </File>
1565 <File
1566 RelativePath="..\..\code\DXFLoader.cpp"
1567 >
1568 </File>
1569 <File
1570 RelativePath="..\..\code\DXFLoader.h"
1571 >
1572 </File>
1573 </Filter>
1574 <Filter
1575 Name="raw"
1576 >
1577 <File
1578 RelativePath="..\..\code\RawLoader.cpp"
1579 >
1580 </File>
1581 <File
1582 RelativePath="..\..\code\RawLoader.h"
1583 >
1584 </File>
1585 </Filter>
1586 <Filter
1587 Name="nff"
1588 >
1589 <File
1590 RelativePath="..\..\code\NFFLoader.cpp"
1591 >
1592 </File>
1593 <File
1594 RelativePath="..\..\code\NFFLoader.h"
1595 >
1596 </File>
1597 </Filter>
1598 <Filter
1599 Name="off"
1600 >
1601 <File
1602 RelativePath="..\..\code\OFFLoader.cpp"
1603 >
1604 </File>
1605 <File
1606 RelativePath="..\..\code\OFFLoader.h"
1607 >
1608 </File>
1609 </Filter>
1610 <Filter
1611 Name="ac"
1612 >
1613 <File
1614 RelativePath="..\..\code\ACLoader.cpp"
1615 >
1616 <FileConfiguration
1617 Name="debug|Win32"
1618 >
1619 <Tool
1620 Name="VCCLCompilerTool"
1621 GeneratePreprocessedFile="0"
1622 />
1623 </FileConfiguration>
1624 <FileConfiguration
1625 Name="debug-noboost-st|Win32"
1626 >
1627 <Tool
1628 Name="VCCLCompilerTool"
1629 GeneratePreprocessedFile="0"
1630 />
1631 </FileConfiguration>
1632 <FileConfiguration
1633 Name="debug-st|Win32"
1634 >
1635 <Tool
1636 Name="VCCLCompilerTool"
1637 GeneratePreprocessedFile="0"
1638 />
1639 </FileConfiguration>
1640 </File>
1641 <File
1642 RelativePath="..\..\code\ACLoader.h"
1643 >
1644 </File>
1645 </Filter>
1646 <Filter
1647 Name="lws"
1648 >
1649 <File
1650 RelativePath="..\..\code\LWOAnimation.cpp"
1651 >
1652 </File>
1653 <File
1654 RelativePath="..\..\code\LWOAnimation.h"
1655 >
1656 </File>
1657 <File
1658 RelativePath="..\..\code\LWSLoader.cpp"
1659 >
1660 </File>
1661 <File
1662 RelativePath="..\..\code\LWSLoader.h"
1663 >
1664 </File>
1665 </Filter>
1666 <Filter
1667 Name="bvh"
1668 >
1669 <File
1670 RelativePath="..\..\code\BVHLoader.cpp"
1671 >
1672 </File>
1673 <File
1674 RelativePath="..\..\code\BVHLoader.h"
1675 >
1676 </File>
1677 </Filter>
1678 <Filter
1679 Name="irrmesh"
1680 >
1681 <File
1682 RelativePath="..\..\code\IRRMeshLoader.cpp"
1683 >
1684 </File>
1685 <File
1686 RelativePath="..\..\code\IRRMeshLoader.h"
1687 >
1688 </File>
1689 </Filter>
1690 <Filter
1691 Name="irr"
1692 >
1693 <File
1694 RelativePath="..\..\code\IRRLoader.cpp"
1695 >
1696 </File>
1697 <File
1698 RelativePath="..\..\code\IRRLoader.h"
1699 >
1700 </File>
1701 <File
1702 RelativePath="..\..\code\IRRShared.cpp"
1703 >
1704 </File>
1705 <File
1706 RelativePath="..\..\code\IRRShared.h"
1707 >
1708 </File>
1709 </Filter>
1710 <Filter
1711 Name="q3d"
1712 >
1713 <File
1714 RelativePath="..\..\code\Q3DLoader.cpp"
1715 >
1716 </File>
1717 <File
1718 RelativePath="..\..\code\Q3DLoader.h"
1719 >
1720 </File>
1721 </Filter>
1722 <Filter
1723 Name="b3d"
1724 >
1725 <File
1726 RelativePath="..\..\code\B3DImporter.cpp"
1727 >
1728 </File>
1729 <File
1730 RelativePath="..\..\code\B3DImporter.h"
1731 >
1732 </File>
1733 </Filter>
1734 <Filter
1735 Name="collada"
1736 >
1737 <File
1738 RelativePath="..\..\code\ColladaHelper.h"
1739 >
1740 </File>
1741 <File
1742 RelativePath="..\..\code\ColladaLoader.cpp"
1743 >
1744 </File>
1745 <File
1746 RelativePath="..\..\code\ColladaLoader.h"
1747 >
1748 </File>
1749 <File
1750 RelativePath="..\..\code\ColladaParser.cpp"
1751 >
1752 </File>
1753 <File
1754 RelativePath="..\..\code\ColladaParser.h"
1755 >
1756 </File>
1757 </Filter>
1758 <Filter
1759 Name="ter"
1760 >
1761 <File
1762 RelativePath="..\..\code\TerragenLoader.cpp"
1763 >
1764 </File>
1765 <File
1766 RelativePath="..\..\code\TerragenLoader.h"
1767 >
1768 </File>
1769 </Filter>
1770 <Filter
1771 Name="csm"
1772 >
1773 <File
1774 RelativePath="..\..\code\CSMLoader.cpp"
1775 >
1776 </File>
1777 <File
1778 RelativePath="..\..\code\CSMLoader.h"
1779 >
1780 </File>
1781 </Filter>
1782 <Filter
1783 Name="unreal"
1784 >
1785 <File
1786 RelativePath="..\..\code\UnrealLoader.cpp"
1787 >
1788 </File>
1789 <File
1790 RelativePath="..\..\code\UnrealLoader.h"
1791 >
1792 </File>
1793 </Filter>
1794 <Filter
1795 Name="ndo"
1796 >
1797 <File
1798 RelativePath="..\..\code\NDOLoader.cpp"
1799 >
1800 </File>
1801 <File
1802 RelativePath="..\..\code\NDOLoader.h"
1803 >
1804 </File>
1805 </Filter>
1806 <Filter
1807 Name="ogre"
1808 >
1809 <File
1810 RelativePath="..\..\code\OgreImporter.cpp"
1811 >
1812 </File>
1813 <File
1814 RelativePath="..\..\code\OgreImporter.hpp"
1815 >
1816 </File>
1817 <File
1818 RelativePath="..\..\code\OgreMaterial.cpp"
1819 >
1820 </File>
1821 <File
1822 RelativePath="..\..\code\OgreMesh.cpp"
1823 >
1824 </File>
1825 <File
1826 RelativePath="..\..\code\OgreSkeleton.cpp"
1827 >
1828 </File>
1829 <File
1830 RelativePath="..\..\code\OgreXmlHelper.h"
1831 >
1832 </File>
1833 <File
1834 RelativePath="..\..\code\OgreXmlHelper.hpp"
1835 >
1836 </File>
1837 </Filter>
1838 <Filter
1839 Name="ms3d"
1840 >
1841 <File
1842 RelativePath="..\..\code\MS3DLoader.cpp"
1843 >
1844 </File>
1845 <File
1846 RelativePath="..\..\code\MS3DLoader.h"
1847 >
1848 </File>
1849 </Filter>
1850 <Filter
1851 Name="cob"
1852 >
1853 <File
1854 RelativePath="..\..\code\COBLoader.cpp"
1855 >
1856 </File>
1857 <File
1858 RelativePath="..\..\code\COBLoader.h"
1859 >
1860 </File>
1861 <File
1862 RelativePath="..\..\code\COBScene.h"
1863 >
1864 </File>
1865 </Filter>
1866 <Filter
1867 Name="blend"
1868 >
1869 <File
1870 RelativePath="..\..\code\BlenderDNA.cpp"
1871 >
1872 </File>
1873 <File
1874 RelativePath="..\..\code\BlenderDNA.h"
1875 >
1876 </File>
1877 <File
1878 RelativePath="..\..\code\BlenderDNA.inl"
1879 >
1880 </File>
1881 <File
1882 RelativePath="..\..\code\BlenderIntermediate.h"
1883 >
1884 </File>
1885 <File
1886 RelativePath="..\..\code\BlenderLoader.cpp"
1887 >
1888 </File>
1889 <File
1890 RelativePath="..\..\code\BlenderLoader.h"
1891 >
1892 </File>
1893 <File
1894 RelativePath="..\..\code\BlenderModifier.cpp"
1895 >
1896 </File>
1897 <File
1898 RelativePath="..\..\code\BlenderModifier.h"
1899 >
1900 </File>
1901 <File
1902 RelativePath="..\..\code\BlenderScene.cpp"
1903 >
1904 </File>
1905 <File
1906 RelativePath="..\..\code\BlenderScene.h"
1907 >
1908 </File>
1909 <File
1910 RelativePath="..\..\code\BlenderSceneGen.h"
1911 >
1912 </File>
1913 </Filter>
1914 <Filter
1915 Name="q3bsp"
1916 >
1917 <File
1918 RelativePath="..\..\code\Q3BSPFileData.h"
1919 >
1920 </File>
1921 <File
1922 RelativePath="..\..\code\Q3BSPFileImporter.cpp"
1923 >
1924 </File>
1925 <File
1926 RelativePath="..\..\code\Q3BSPFileImporter.h"
1927 >
1928 </File>
1929 <File
1930 RelativePath="..\..\code\Q3BSPFileParser.cpp"
1931 >
1932 </File>
1933 <File
1934 RelativePath="..\..\code\Q3BSPFileParser.h"
1935 >
1936 </File>
1937 <File
1938 RelativePath="..\..\code\Q3BSPZipArchive.cpp"
1939 >
1940 </File>
1941 <File
1942 RelativePath="..\..\code\Q3BSPZipArchive.h"
1943 >
1944 </File>
1945 </Filter>
1946 <Filter
1947 Name="md2"
1948 >
1949 <File
1950 RelativePath="..\..\code\MD2FileData.h"
1951 >
1952 </File>
1953 <File
1954 RelativePath="..\..\code\MD2Loader.cpp"
1955 >
1956 </File>
1957 <File
1958 RelativePath="..\..\code\MD2Loader.h"
1959 >
1960 </File>
1961 <File
1962 RelativePath="..\..\code\MD2NormalTable.h"
1963 >
1964 </File>
1965 </Filter>
1966 <Filter
1967 Name="ifc"
1968 >
1969 <File
1970 RelativePath="..\..\code\IFCCurve.cpp"
1971 >
1972 </File>
1973 <File
1974 RelativePath="..\..\code\IFCGeometry.cpp"
1975 >
1976 </File>
1977 <File
1978 RelativePath="..\..\code\IFCLoader.cpp"
1979 >
1980 </File>
1981 <File
1982 RelativePath="..\..\code\IFCLoader.h"
1983 >
1984 </File>
1985 <File
1986 RelativePath="..\..\code\IFCMaterial.cpp"
1987 >
1988 </File>
1989 <File
1990 RelativePath="..\..\code\IFCProfile.cpp"
1991 >
1992 </File>
1993 <File
1994 RelativePath="..\..\code\IFCReaderGen.cpp"
1995 >
1996 <FileConfiguration
1997 Name="debug|x64"
1998 >
1999 <Tool
2000 Name="VCCLCompilerTool"
2001 AdditionalOptions="/bigobj"
2002 />
2003 </FileConfiguration>
2004 </File>
2005 <File
2006 RelativePath="..\..\code\IFCReaderGen.h"
2007 >
2008 </File>
2009 <File
2010 RelativePath="..\..\code\IFCUtil.cpp"
2011 >
2012 </File>
2013 <File
2014 RelativePath="..\..\code\IFCUtil.h"
2015 >
2016 </File>
2017 <File
2018 RelativePath="..\..\code\STEPFile.h"
2019 >
2020 </File>
2021 <File
2022 RelativePath="..\..\code\STEPFileReader.cpp"
2023 >
2024 </File>
2025 <File
2026 RelativePath="..\..\code\STEPFileReader.h"
2027 >
2028 </File>
2029 </Filter>
2030 <Filter
2031 Name="m3"
2032 >
2033 <File
2034 RelativePath="..\..\code\M3Importer.cpp"
2035 >
2036 </File>
2037 <File
2038 RelativePath="..\..\code\M3Importer.h"
2039 >
2040 </File>
2041 </Filter>
2042 <Filter
2043 Name="xgl"
2044 >
2045 <File
2046 RelativePath="..\..\code\XGLLoader.cpp"
2047 >
2048 </File>
2049 <File
2050 RelativePath="..\..\code\XGLLoader.h"
2051 >
2052 </File>
2053 </Filter>
2054 </Filter>
2055 <Filter
2056 Name="postprocessing"
2057 >
2058 <File
2059 RelativePath="..\..\code\BaseProcess.cpp"
2060 >
2061 </File>
2062 <File
2063 RelativePath="..\..\code\BaseProcess.h"
2064 >
2065 </File>
2066 <File
2067 RelativePath="..\..\code\CalcTangentsProcess.cpp"
2068 >
2069 </File>
2070 <File
2071 RelativePath="..\..\code\CalcTangentsProcess.h"
2072 >
2073 </File>
2074 <File
2075 RelativePath="..\..\code\ComputeUVMappingProcess.cpp"
2076 >
2077 </File>
2078 <File
2079 RelativePath="..\..\code\ComputeUVMappingProcess.h"
2080 >
2081 </File>
2082 <File
2083 RelativePath="..\..\code\ConvertToLHProcess.cpp"
2084 >
2085 </File>
2086 <File
2087 RelativePath="..\..\code\ConvertToLHProcess.h"
2088 >
2089 </File>
2090 <File
2091 RelativePath="..\..\code\DeboneProcess.cpp"
2092 >
2093 </File>
2094 <File
2095 RelativePath="..\..\code\DeboneProcess.h"
2096 >
2097 </File>
2098 <File
2099 RelativePath="..\..\code\FindDegenerates.cpp"
2100 >
2101 </File>
2102 <File
2103 RelativePath="..\..\code\FindDegenerates.h"
2104 >
2105 </File>
2106 <File
2107 RelativePath="..\..\code\FindInstancesProcess.cpp"
2108 >
2109 </File>
2110 <File
2111 RelativePath="..\..\code\FindInstancesProcess.h"
2112 >
2113 </File>
2114 <File
2115 RelativePath="..\..\code\FindInvalidDataProcess.cpp"
2116 >
2117 </File>
2118 <File
2119 RelativePath="..\..\code\FindInvalidDataProcess.h"
2120 >
2121 </File>
2122 <File
2123 RelativePath="..\..\code\FixNormalsStep.cpp"
2124 >
2125 </File>
2126 <File
2127 RelativePath="..\..\code\FixNormalsStep.h"
2128 >
2129 </File>
2130 <File
2131 RelativePath="..\..\code\GenFaceNormalsProcess.cpp"
2132 >
2133 </File>
2134 <File
2135 RelativePath="..\..\code\GenFaceNormalsProcess.h"
2136 >
2137 </File>
2138 <File
2139 RelativePath="..\..\code\GenVertexNormalsProcess.cpp"
2140 >
2141 </File>
2142 <File
2143 RelativePath="..\..\code\GenVertexNormalsProcess.h"
2144 >
2145 </File>
2146 <File
2147 RelativePath="..\..\code\ImproveCacheLocality.cpp"
2148 >
2149 </File>
2150 <File
2151 RelativePath="..\..\code\ImproveCacheLocality.h"
2152 >
2153 </File>
2154 <File
2155 RelativePath="..\..\code\JoinVerticesProcess.cpp"
2156 >
2157 </File>
2158 <File
2159 RelativePath="..\..\code\JoinVerticesProcess.h"
2160 >
2161 </File>
2162 <File
2163 RelativePath="..\..\code\LimitBoneWeightsProcess.cpp"
2164 >
2165 </File>
2166 <File
2167 RelativePath="..\..\code\LimitBoneWeightsProcess.h"
2168 >
2169 </File>
2170 <File
2171 RelativePath="..\..\code\MakeVerboseFormat.cpp"
2172 >
2173 <FileConfiguration
2174 Name="debug|Win32"
2175 >
2176 <Tool
2177 Name="VCCLCompilerTool"
2178 UsePrecompiledHeader="0"
2179 />
2180 </FileConfiguration>
2181 <FileConfiguration
2182 Name="release|Win32"
2183 >
2184 <Tool
2185 Name="VCCLCompilerTool"
2186 UsePrecompiledHeader="0"
2187 />
2188 </FileConfiguration>
2189 <FileConfiguration
2190 Name="release|x64"
2191 >
2192 <Tool
2193 Name="VCCLCompilerTool"
2194 UsePrecompiledHeader="0"
2195 />
2196 </FileConfiguration>
2197 <FileConfiguration
2198 Name="release-dll|Win32"
2199 >
2200 <Tool
2201 Name="VCCLCompilerTool"
2202 UsePrecompiledHeader="0"
2203 />
2204 </FileConfiguration>
2205 <FileConfiguration
2206 Name="debug-dll|Win32"
2207 >
2208 <Tool
2209 Name="VCCLCompilerTool"
2210 UsePrecompiledHeader="0"
2211 />
2212 </FileConfiguration>
2213 <FileConfiguration
2214 Name="release-noboost-st|Win32"
2215 >
2216 <Tool
2217 Name="VCCLCompilerTool"
2218 UsePrecompiledHeader="0"
2219 />
2220 </FileConfiguration>
2221 <FileConfiguration
2222 Name="release-noboost-st|x64"
2223 >
2224 <Tool
2225 Name="VCCLCompilerTool"
2226 UsePrecompiledHeader="0"
2227 />
2228 </FileConfiguration>
2229 <FileConfiguration
2230 Name="debug-noboost-st|Win32"
2231 >
2232 <Tool
2233 Name="VCCLCompilerTool"
2234 UsePrecompiledHeader="0"
2235 />
2236 </FileConfiguration>
2237 <FileConfiguration
2238 Name="debug-st|Win32"
2239 >
2240 <Tool
2241 Name="VCCLCompilerTool"
2242 UsePrecompiledHeader="0"
2243 />
2244 </FileConfiguration>
2245 <FileConfiguration
2246 Name="release-st|Win32"
2247 >
2248 <Tool
2249 Name="VCCLCompilerTool"
2250 UsePrecompiledHeader="0"
2251 />
2252 </FileConfiguration>
2253 <FileConfiguration
2254 Name="release-st|x64"
2255 >
2256 <Tool
2257 Name="VCCLCompilerTool"
2258 UsePrecompiledHeader="0"
2259 />
2260 </FileConfiguration>
2261 </File>
2262 <File
2263 RelativePath="..\..\code\MakeVerboseFormat.h"
2264 >
2265 </File>
2266 <File
2267 RelativePath="..\..\code\OptimizeGraph.cpp"
2268 >
2269 </File>
2270 <File
2271 RelativePath="..\..\code\OptimizeGraph.h"
2272 >
2273 </File>
2274 <File
2275 RelativePath="..\..\code\OptimizeMeshes.cpp"
2276 >
2277 </File>
2278 <File
2279 RelativePath="..\..\code\OptimizeMeshes.h"
2280 >
2281 </File>
2282 <File
2283 RelativePath="..\..\code\PretransformVertices.cpp"
2284 >
2285 </File>
2286 <File
2287 RelativePath="..\..\code\PretransformVertices.h"
2288 >
2289 </File>
2290 <File
2291 RelativePath="..\..\code\ProcessHelper.cpp"
2292 >
2293 </File>
2294 <File
2295 RelativePath="..\..\code\ProcessHelper.h"
2296 >
2297 </File>
2298 <File
2299 RelativePath="..\..\code\RemoveRedundantMaterials.cpp"
2300 >
2301 </File>
2302 <File
2303 RelativePath="..\..\code\RemoveRedundantMaterials.h"
2304 >
2305 </File>
2306 <File
2307 RelativePath="..\..\code\RemoveVCProcess.cpp"
2308 >
2309 </File>
2310 <File
2311 RelativePath="..\..\code\RemoveVCProcess.h"
2312 >
2313 </File>
2314 <File
2315 RelativePath="..\..\code\SortByPTypeProcess.cpp"
2316 >
2317 </File>
2318 <File
2319 RelativePath="..\..\code\SortByPTypeProcess.h"
2320 >
2321 </File>
2322 <File
2323 RelativePath="..\..\code\SplitByBoneCountProcess.cpp"
2324 >
2325 </File>
2326 <File
2327 RelativePath="..\..\code\SplitByBoneCountProcess.h"
2328 >
2329 </File>
2330 <File
2331 RelativePath="..\..\code\SplitLargeMeshes.cpp"
2332 >
2333 </File>
2334 <File
2335 RelativePath="..\..\code\SplitLargeMeshes.h"
2336 >
2337 </File>
2338 <File
2339 RelativePath="..\..\code\TextureTransform.cpp"
2340 >
2341 </File>
2342 <File
2343 RelativePath="..\..\code\TextureTransform.h"
2344 >
2345 </File>
2346 <File
2347 RelativePath="..\..\code\TriangulateProcess.cpp"
2348 >
2349 </File>
2350 <File
2351 RelativePath="..\..\code\TriangulateProcess.h"
2352 >
2353 </File>
2354 <File
2355 RelativePath="..\..\code\ValidateDataStructure.cpp"
2356 >
2357 </File>
2358 <File
2359 RelativePath="..\..\code\ValidateDataStructure.h"
2360 >
2361 </File>
2362 </Filter>
2363 <Filter
2364 Name="core"
2365 >
2366 <File
2367 RelativePath="..\..\code\AssimpPCH.cpp"
2368 >
2369 <FileConfiguration
2370 Name="debug|Win32"
2371 >
2372 <Tool
2373 Name="VCCLCompilerTool"
2374 UsePrecompiledHeader="1"
2375 PrecompiledHeaderThrough="AssimpPCH.h"
2376 />
2377 </FileConfiguration>
2378 <FileConfiguration
2379 Name="release|Win32"
2380 >
2381 <Tool
2382 Name="VCCLCompilerTool"
2383 UsePrecompiledHeader="1"
2384 PrecompiledHeaderThrough="AssimpPCH.h"
2385 />
2386 </FileConfiguration>
2387 <FileConfiguration
2388 Name="release|x64"
2389 >
2390 <Tool
2391 Name="VCCLCompilerTool"
2392 UsePrecompiledHeader="1"
2393 />
2394 </FileConfiguration>
2395 <FileConfiguration
2396 Name="release-dll|Win32"
2397 >
2398 <Tool
2399 Name="VCCLCompilerTool"
2400 UsePrecompiledHeader="1"
2401 PrecompiledHeaderThrough="AssimpPCH.h"
2402 />
2403 </FileConfiguration>
2404 <FileConfiguration
2405 Name="debug-dll|Win32"
2406 >
2407 <Tool
2408 Name="VCCLCompilerTool"
2409 UsePrecompiledHeader="1"
2410 PrecompiledHeaderThrough="AssimpPCH.h"
2411 />
2412 </FileConfiguration>
2413 <FileConfiguration
2414 Name="release-noboost-st|Win32"
2415 >
2416 <Tool
2417 Name="VCCLCompilerTool"
2418 UsePrecompiledHeader="1"
2419 PrecompiledHeaderThrough="AssimpPCH.h"
2420 />
2421 </FileConfiguration>
2422 <FileConfiguration
2423 Name="release-noboost-st|x64"
2424 >
2425 <Tool
2426 Name="VCCLCompilerTool"
2427 UsePrecompiledHeader="1"
2428 />
2429 </FileConfiguration>
2430 <FileConfiguration
2431 Name="debug-noboost-st|Win32"
2432 >
2433 <Tool
2434 Name="VCCLCompilerTool"
2435 UsePrecompiledHeader="1"
2436 PrecompiledHeaderThrough="AssimpPCH.h"
2437 />
2438 </FileConfiguration>
2439 <FileConfiguration
2440 Name="debug-st|Win32"
2441 >
2442 <Tool
2443 Name="VCCLCompilerTool"
2444 UsePrecompiledHeader="1"
2445 PrecompiledHeaderThrough="AssimpPCH.h"
2446 />
2447 </FileConfiguration>
2448 <FileConfiguration
2449 Name="release-st|Win32"
2450 >
2451 <Tool
2452 Name="VCCLCompilerTool"
2453 UsePrecompiledHeader="1"
2454 PrecompiledHeaderThrough="AssimpPCH.h"
2455 />
2456 </FileConfiguration>
2457 <FileConfiguration
2458 Name="release-st|x64"
2459 >
2460 <Tool
2461 Name="VCCLCompilerTool"
2462 UsePrecompiledHeader="1"
2463 />
2464 </FileConfiguration>
2465 </File>
2466 <File
2467 RelativePath="..\..\code\AssimpPCH.h"
2468 >
2469 </File>
2470 <File
2471 RelativePath="..\..\code\ByteSwap.h"
2472 >
2473 </File>
2474 <File
2475 RelativePath="..\..\code\Exceptional.h"
2476 >
2477 </File>
2478 <File
2479 RelativePath="..\..\code\GenericProperty.h"
2480 >
2481 </File>
2482 <File
2483 RelativePath="..\..\code\Hash.h"
2484 >
2485 </File>
2486 <File
2487 RelativePath="..\..\code\LogAux.h"
2488 >
2489 </File>
2490 <File
2491 RelativePath="..\..\code\MaterialSystem.cpp"
2492 >
2493 </File>
2494 <File
2495 RelativePath="..\..\code\MaterialSystem.h"
2496 >
2497 </File>
2498 <File
2499 RelativePath="..\..\code\PolyTools.h"
2500 >
2501 </File>
2502 <File
2503 RelativePath="..\..\code\Profiler.h"
2504 >
2505 </File>
2506 <File
2507 RelativePath="..\..\code\qnan.h"
2508 >
2509 </File>
2510 <File
2511 RelativePath="..\..\code\ScenePrivate.h"
2512 >
2513 </File>
2514 <File
2515 RelativePath="..\..\code\StandardShapes.cpp"
2516 >
2517 </File>
2518 <File
2519 RelativePath="..\..\code\StandardShapes.h"
2520 >
2521 </File>
2522 <File
2523 RelativePath="..\..\code\StringComparison.h"
2524 >
2525 </File>
2526 <File
2527 RelativePath="..\..\code\TinyFormatter.h"
2528 >
2529 </File>
2530 <File
2531 RelativePath="..\..\code\Vertex.h"
2532 >
2533 </File>
2534 </Filter>
2535 <Filter
2536 Name="logging"
2537 >
2538 <File
2539 RelativePath="..\..\code\DefaultLogger.cpp"
2540 >
2541 </File>
2542 <File
2543 RelativePath="..\..\code\FileLogStream.h"
2544 >
2545 </File>
2546 <File
2547 RelativePath="..\..\code\StdOStreamLogStream.h"
2548 >
2549 </File>
2550 <File
2551 RelativePath="..\..\code\Win32DebugLogStream.h"
2552 >
2553 </File>
2554 </Filter>
2555 <Filter
2556 Name="filesystem"
2557 >
2558 <File
2559 RelativePath="..\..\code\CInterfaceIOWrapper.h"
2560 >
2561 </File>
2562 <File
2563 RelativePath="..\..\code\DefaultIOStream.cpp"
2564 >
2565 </File>
2566 <File
2567 RelativePath="..\..\code\DefaultIOStream.h"
2568 >
2569 </File>
2570 <File
2571 RelativePath="..\..\code\DefaultIOSystem.cpp"
2572 >
2573 </File>
2574 <File
2575 RelativePath="..\..\code\DefaultIOSystem.h"
2576 >
2577 </File>
2578 <File
2579 RelativePath="..\..\code\FileSystemFilter.h"
2580 >
2581 </File>
2582 <File
2583 RelativePath="..\..\code\MemoryIOWrapper.h"
2584 >
2585 </File>
2586 </Filter>
2587 <Filter
2588 Name="core_import"
2589 >
2590 <File
2591 RelativePath="..\..\code\Assimp.cpp"
2592 >
2593 </File>
2594 <File
2595 RelativePath="..\..\code\BaseImporter.cpp"
2596 >
2597 </File>
2598 <File
2599 RelativePath="..\..\code\BaseImporter.h"
2600 >
2601 </File>
2602 <File
2603 RelativePath="..\..\code\DefaultProgressHandler.h"
2604 >
2605 </File>
2606 <File
2607 RelativePath="..\..\code\fast_atof.h"
2608 >
2609 </File>
2610 <File
2611 RelativePath="..\..\code\IFF.h"
2612 >
2613 </File>
2614 <File
2615 RelativePath="..\..\code\Importer.cpp"
2616 >
2617 </File>
2618 <File
2619 RelativePath="..\..\code\Importer.h"
2620 >
2621 </File>
2622 <File
2623 RelativePath="..\..\code\ImporterRegistry.cpp"
2624 >
2625 </File>
2626 <File
2627 RelativePath="..\..\code\LineSplitter.h"
2628 >
2629 </File>
2630 <File
2631 RelativePath="..\..\code\ParsingUtils.h"
2632 >
2633 </File>
2634 <File
2635 RelativePath="..\..\code\PostStepRegistry.cpp"
2636 >
2637 </File>
2638 <File
2639 RelativePath="..\..\code\RemoveComments.cpp"
2640 >
2641 </File>
2642 <File
2643 RelativePath="..\..\code\RemoveComments.h"
2644 >
2645 </File>
2646 <File
2647 RelativePath="..\..\code\SceneCombiner.cpp"
2648 >
2649 </File>
2650 <File
2651 RelativePath="..\..\code\SceneCombiner.h"
2652 >
2653 </File>
2654 <File
2655 RelativePath="..\..\code\ScenePreprocessor.cpp"
2656 >
2657 </File>
2658 <File
2659 RelativePath="..\..\code\ScenePreprocessor.h"
2660 >
2661 </File>
2662 <File
2663 RelativePath="..\..\code\SGSpatialSort.cpp"
2664 >
2665 </File>
2666 <File
2667 RelativePath="..\..\code\SGSpatialSort.h"
2668 >
2669 </File>
2670 <File
2671 RelativePath="..\..\code\SkeletonMeshBuilder.cpp"
2672 >
2673 </File>
2674 <File
2675 RelativePath="..\..\code\SkeletonMeshBuilder.h"
2676 >
2677 </File>
2678 <File
2679 RelativePath="..\..\code\SmoothingGroups.h"
2680 >
2681 </File>
2682 <File
2683 RelativePath="..\..\code\SmoothingGroups.inl"
2684 >
2685 </File>
2686 <File
2687 RelativePath="..\..\code\SpatialSort.cpp"
2688 >
2689 </File>
2690 <File
2691 RelativePath="..\..\code\SpatialSort.h"
2692 >
2693 </File>
2694 <File
2695 RelativePath="..\..\code\StreamReader.h"
2696 >
2697 </File>
2698 <File
2699 RelativePath="..\..\code\Subdivision.cpp"
2700 >
2701 </File>
2702 <File
2703 RelativePath="..\..\code\Subdivision.h"
2704 >
2705 </File>
2706 <File
2707 RelativePath="..\..\code\TargetAnimation.cpp"
2708 >
2709 </File>
2710 <File
2711 RelativePath="..\..\code\TargetAnimation.h"
2712 >
2713 </File>
2714 <File
2715 RelativePath="..\..\code\VertexTriangleAdjacency.cpp"
2716 >
2717 </File>
2718 <File
2719 RelativePath="..\..\code\VertexTriangleAdjacency.h"
2720 >
2721 </File>
2722 </Filter>
2723 <Filter
2724 Name="extern"
2725 >
2726 <Filter
2727 Name="irrXML"
2728 >
2729 <File
2730 RelativePath="..\..\contrib\irrXML\CXMLReaderImpl.h"
2731 >
2732 </File>
2733 <File
2734 RelativePath="..\..\contrib\irrXML\fast_atof.h"
2735 >
2736 </File>
2737 <File
2738 RelativePath="..\..\contrib\irrXML\heapsort.h"
2739 >
2740 </File>
2741 <File
2742 RelativePath="..\..\contrib\irrXML\irrArray.h"
2743 >
2744 </File>
2745 <File
2746 RelativePath="..\..\contrib\irrXML\irrString.h"
2747 >
2748 </File>
2749 <File
2750 RelativePath="..\..\contrib\irrXML\irrTypes.h"
2751 >
2752 </File>
2753 <File
2754 RelativePath="..\..\contrib\irrXML\irrXML.cpp"
2755 >
2756 <FileConfiguration
2757 Name="debug|Win32"
2758 >
2759 <Tool
2760 Name="VCCLCompilerTool"
2761 UsePrecompiledHeader="0"
2762 />
2763 </FileConfiguration>
2764 <FileConfiguration
2765 Name="debug|x64"
2766 >
2767 <Tool
2768 Name="VCCLCompilerTool"
2769 UsePrecompiledHeader="0"
2770 />
2771 </FileConfiguration>
2772 <FileConfiguration
2773 Name="release|Win32"
2774 >
2775 <Tool
2776 Name="VCCLCompilerTool"
2777 UsePrecompiledHeader="0"
2778 />
2779 </FileConfiguration>
2780 <FileConfiguration
2781 Name="release|x64"
2782 >
2783 <Tool
2784 Name="VCCLCompilerTool"
2785 UsePrecompiledHeader="0"
2786 />
2787 </FileConfiguration>
2788 <FileConfiguration
2789 Name="release-dll|Win32"
2790 >
2791 <Tool
2792 Name="VCCLCompilerTool"
2793 UsePrecompiledHeader="0"
2794 />
2795 </FileConfiguration>
2796 <FileConfiguration
2797 Name="release-dll|x64"
2798 >
2799 <Tool
2800 Name="VCCLCompilerTool"
2801 UsePrecompiledHeader="0"
2802 />
2803 </FileConfiguration>
2804 <FileConfiguration
2805 Name="debug-dll|Win32"
2806 >
2807 <Tool
2808 Name="VCCLCompilerTool"
2809 UsePrecompiledHeader="0"
2810 />
2811 </FileConfiguration>
2812 <FileConfiguration
2813 Name="debug-dll|x64"
2814 >
2815 <Tool
2816 Name="VCCLCompilerTool"
2817 UsePrecompiledHeader="0"
2818 />
2819 </FileConfiguration>
2820 <FileConfiguration
2821 Name="release-noboost-st|Win32"
2822 >
2823 <Tool
2824 Name="VCCLCompilerTool"
2825 UsePrecompiledHeader="0"
2826 />
2827 </FileConfiguration>
2828 <FileConfiguration
2829 Name="release-noboost-st|x64"
2830 >
2831 <Tool
2832 Name="VCCLCompilerTool"
2833 UsePrecompiledHeader="0"
2834 />
2835 </FileConfiguration>
2836 <FileConfiguration
2837 Name="debug-noboost-st|Win32"
2838 >
2839 <Tool
2840 Name="VCCLCompilerTool"
2841 UsePrecompiledHeader="0"
2842 />
2843 </FileConfiguration>
2844 <FileConfiguration
2845 Name="debug-noboost-st|x64"
2846 >
2847 <Tool
2848 Name="VCCLCompilerTool"
2849 UsePrecompiledHeader="0"
2850 />
2851 </FileConfiguration>
2852 <FileConfiguration
2853 Name="debug-st|Win32"
2854 >
2855 <Tool
2856 Name="VCCLCompilerTool"
2857 UsePrecompiledHeader="0"
2858 />
2859 </FileConfiguration>
2860 <FileConfiguration
2861 Name="debug-st|x64"
2862 >
2863 <Tool
2864 Name="VCCLCompilerTool"
2865 UsePrecompiledHeader="0"
2866 />
2867 </FileConfiguration>
2868 <FileConfiguration
2869 Name="release-st|Win32"
2870 >
2871 <Tool
2872 Name="VCCLCompilerTool"
2873 UsePrecompiledHeader="0"
2874 />
2875 </FileConfiguration>
2876 <FileConfiguration
2877 Name="release-st|x64"
2878 >
2879 <Tool
2880 Name="VCCLCompilerTool"
2881 UsePrecompiledHeader="0"
2882 />
2883 </FileConfiguration>
2884 </File>
2885 <File
2886 RelativePath="..\..\contrib\irrXML\irrXML.h"
2887 >
2888 </File>
2889 <File
2890 RelativePath="..\..\code\irrXMLWrapper.h"
2891 >
2892 </File>
2893 </Filter>
2894 <Filter
2895 Name="zLib"
2896 >
2897 <File
2898 RelativePath="..\..\contrib\zlib\adler32.c"
2899 >
2900 <FileConfiguration
2901 Name="debug|Win32"
2902 >
2903 <Tool
2904 Name="VCCLCompilerTool"
2905 UsePrecompiledHeader="0"
2906 />
2907 </FileConfiguration>
2908 <FileConfiguration
2909 Name="debug|x64"
2910 >
2911 <Tool
2912 Name="VCCLCompilerTool"
2913 UsePrecompiledHeader="0"
2914 />
2915 </FileConfiguration>
2916 <FileConfiguration
2917 Name="release|Win32"
2918 >
2919 <Tool
2920 Name="VCCLCompilerTool"
2921 UsePrecompiledHeader="0"
2922 />
2923 </FileConfiguration>
2924 <FileConfiguration
2925 Name="release|x64"
2926 >
2927 <Tool
2928 Name="VCCLCompilerTool"
2929 UsePrecompiledHeader="0"
2930 />
2931 </FileConfiguration>
2932 <FileConfiguration
2933 Name="release-dll|Win32"
2934 >
2935 <Tool
2936 Name="VCCLCompilerTool"
2937 UsePrecompiledHeader="0"
2938 />
2939 </FileConfiguration>
2940 <FileConfiguration
2941 Name="release-dll|x64"
2942 >
2943 <Tool
2944 Name="VCCLCompilerTool"
2945 UsePrecompiledHeader="0"
2946 />
2947 </FileConfiguration>
2948 <FileConfiguration
2949 Name="debug-dll|Win32"
2950 >
2951 <Tool
2952 Name="VCCLCompilerTool"
2953 UsePrecompiledHeader="0"
2954 />
2955 </FileConfiguration>
2956 <FileConfiguration
2957 Name="debug-dll|x64"
2958 >
2959 <Tool
2960 Name="VCCLCompilerTool"
2961 UsePrecompiledHeader="0"
2962 />
2963 </FileConfiguration>
2964 <FileConfiguration
2965 Name="release-noboost-st|Win32"
2966 >
2967 <Tool
2968 Name="VCCLCompilerTool"
2969 UsePrecompiledHeader="0"
2970 />
2971 </FileConfiguration>
2972 <FileConfiguration
2973 Name="release-noboost-st|x64"
2974 >
2975 <Tool
2976 Name="VCCLCompilerTool"
2977 UsePrecompiledHeader="0"
2978 />
2979 </FileConfiguration>
2980 <FileConfiguration
2981 Name="debug-noboost-st|Win32"
2982 >
2983 <Tool
2984 Name="VCCLCompilerTool"
2985 UsePrecompiledHeader="0"
2986 />
2987 </FileConfiguration>
2988 <FileConfiguration
2989 Name="debug-noboost-st|x64"
2990 >
2991 <Tool
2992 Name="VCCLCompilerTool"
2993 UsePrecompiledHeader="0"
2994 />
2995 </FileConfiguration>
2996 <FileConfiguration
2997 Name="debug-st|Win32"
2998 >
2999 <Tool
3000 Name="VCCLCompilerTool"
3001 UsePrecompiledHeader="0"
3002 />
3003 </FileConfiguration>
3004 <FileConfiguration
3005 Name="debug-st|x64"
3006 >
3007 <Tool
3008 Name="VCCLCompilerTool"
3009 UsePrecompiledHeader="0"
3010 />
3011 </FileConfiguration>
3012 <FileConfiguration
3013 Name="release-st|Win32"
3014 >
3015 <Tool
3016 Name="VCCLCompilerTool"
3017 UsePrecompiledHeader="0"
3018 />
3019 </FileConfiguration>
3020 <FileConfiguration
3021 Name="release-st|x64"
3022 >
3023 <Tool
3024 Name="VCCLCompilerTool"
3025 UsePrecompiledHeader="0"
3026 />
3027 </FileConfiguration>
3028 </File>
3029 <File
3030 RelativePath="..\..\contrib\zlib\crc32.c"
3031 >
3032 <FileConfiguration
3033 Name="debug|Win32"
3034 >
3035 <Tool
3036 Name="VCCLCompilerTool"
3037 UsePrecompiledHeader="0"
3038 />
3039 </FileConfiguration>
3040 <FileConfiguration
3041 Name="debug|x64"
3042 >
3043 <Tool
3044 Name="VCCLCompilerTool"
3045 UsePrecompiledHeader="0"
3046 />
3047 </FileConfiguration>
3048 <FileConfiguration
3049 Name="release|Win32"
3050 >
3051 <Tool
3052 Name="VCCLCompilerTool"
3053 UsePrecompiledHeader="0"
3054 />
3055 </FileConfiguration>
3056 <FileConfiguration
3057 Name="release|x64"
3058 >
3059 <Tool
3060 Name="VCCLCompilerTool"
3061 UsePrecompiledHeader="0"
3062 />
3063 </FileConfiguration>
3064 <FileConfiguration
3065 Name="release-dll|Win32"
3066 >
3067 <Tool
3068 Name="VCCLCompilerTool"
3069 UsePrecompiledHeader="0"
3070 />
3071 </FileConfiguration>
3072 <FileConfiguration
3073 Name="release-dll|x64"
3074 >
3075 <Tool
3076 Name="VCCLCompilerTool"
3077 UsePrecompiledHeader="0"
3078 />
3079 </FileConfiguration>
3080 <FileConfiguration
3081 Name="debug-dll|Win32"
3082 >
3083 <Tool
3084 Name="VCCLCompilerTool"
3085 UsePrecompiledHeader="0"
3086 />
3087 </FileConfiguration>
3088 <FileConfiguration
3089 Name="debug-dll|x64"
3090 >
3091 <Tool
3092 Name="VCCLCompilerTool"
3093 UsePrecompiledHeader="0"
3094 />
3095 </FileConfiguration>
3096 <FileConfiguration
3097 Name="release-noboost-st|Win32"
3098 >
3099 <Tool
3100 Name="VCCLCompilerTool"
3101 UsePrecompiledHeader="0"
3102 />
3103 </FileConfiguration>
3104 <FileConfiguration
3105 Name="release-noboost-st|x64"
3106 >
3107 <Tool
3108 Name="VCCLCompilerTool"
3109 UsePrecompiledHeader="0"
3110 />
3111 </FileConfiguration>
3112 <FileConfiguration
3113 Name="debug-noboost-st|Win32"
3114 >
3115 <Tool
3116 Name="VCCLCompilerTool"
3117 UsePrecompiledHeader="0"
3118 />
3119 </FileConfiguration>
3120 <FileConfiguration
3121 Name="debug-noboost-st|x64"
3122 >
3123 <Tool
3124 Name="VCCLCompilerTool"
3125 UsePrecompiledHeader="0"
3126 />
3127 </FileConfiguration>
3128 <FileConfiguration
3129 Name="debug-st|Win32"
3130 >
3131 <Tool
3132 Name="VCCLCompilerTool"
3133 UsePrecompiledHeader="0"
3134 />
3135 </FileConfiguration>
3136 <FileConfiguration
3137 Name="debug-st|x64"
3138 >
3139 <Tool
3140 Name="VCCLCompilerTool"
3141 UsePrecompiledHeader="0"
3142 />
3143 </FileConfiguration>
3144 <FileConfiguration
3145 Name="release-st|Win32"
3146 >
3147 <Tool
3148 Name="VCCLCompilerTool"
3149 UsePrecompiledHeader="0"
3150 />
3151 </FileConfiguration>
3152 <FileConfiguration
3153 Name="release-st|x64"
3154 >
3155 <Tool
3156 Name="VCCLCompilerTool"
3157 UsePrecompiledHeader="0"
3158 />
3159 </FileConfiguration>
3160 </File>
3161 <File
3162 RelativePath="..\..\contrib\zlib\crc32.h"
3163 >
3164 </File>
3165 <File
3166 RelativePath="..\..\contrib\unzip\crypt.h"
3167 >
3168 </File>
3169 <File
3170 RelativePath="..\..\contrib\zlib\inffast.c"
3171 >
3172 <FileConfiguration
3173 Name="debug|Win32"
3174 >
3175 <Tool
3176 Name="VCCLCompilerTool"
3177 UsePrecompiledHeader="0"
3178 />
3179 </FileConfiguration>
3180 <FileConfiguration
3181 Name="debug|x64"
3182 >
3183 <Tool
3184 Name="VCCLCompilerTool"
3185 UsePrecompiledHeader="0"
3186 />
3187 </FileConfiguration>
3188 <FileConfiguration
3189 Name="release|Win32"
3190 >
3191 <Tool
3192 Name="VCCLCompilerTool"
3193 UsePrecompiledHeader="0"
3194 />
3195 </FileConfiguration>
3196 <FileConfiguration
3197 Name="release|x64"
3198 >
3199 <Tool
3200 Name="VCCLCompilerTool"
3201 UsePrecompiledHeader="0"
3202 />
3203 </FileConfiguration>
3204 <FileConfiguration
3205 Name="release-dll|Win32"
3206 >
3207 <Tool
3208 Name="VCCLCompilerTool"
3209 UsePrecompiledHeader="0"
3210 />
3211 </FileConfiguration>
3212 <FileConfiguration
3213 Name="release-dll|x64"
3214 >
3215 <Tool
3216 Name="VCCLCompilerTool"
3217 UsePrecompiledHeader="0"
3218 />
3219 </FileConfiguration>
3220 <FileConfiguration
3221 Name="debug-dll|Win32"
3222 >
3223 <Tool
3224 Name="VCCLCompilerTool"
3225 UsePrecompiledHeader="0"
3226 />
3227 </FileConfiguration>
3228 <FileConfiguration
3229 Name="debug-dll|x64"
3230 >
3231 <Tool
3232 Name="VCCLCompilerTool"
3233 UsePrecompiledHeader="0"
3234 />
3235 </FileConfiguration>
3236 <FileConfiguration
3237 Name="release-noboost-st|Win32"
3238 >
3239 <Tool
3240 Name="VCCLCompilerTool"
3241 UsePrecompiledHeader="0"
3242 />
3243 </FileConfiguration>
3244 <FileConfiguration
3245 Name="release-noboost-st|x64"
3246 >
3247 <Tool
3248 Name="VCCLCompilerTool"
3249 UsePrecompiledHeader="0"
3250 />
3251 </FileConfiguration>
3252 <FileConfiguration
3253 Name="debug-noboost-st|Win32"
3254 >
3255 <Tool
3256 Name="VCCLCompilerTool"
3257 UsePrecompiledHeader="0"
3258 />
3259 </FileConfiguration>
3260 <FileConfiguration
3261 Name="debug-noboost-st|x64"
3262 >
3263 <Tool
3264 Name="VCCLCompilerTool"
3265 UsePrecompiledHeader="0"
3266 />
3267 </FileConfiguration>
3268 <FileConfiguration
3269 Name="debug-st|Win32"
3270 >
3271 <Tool
3272 Name="VCCLCompilerTool"
3273 UsePrecompiledHeader="0"
3274 />
3275 </FileConfiguration>
3276 <FileConfiguration
3277 Name="debug-st|x64"
3278 >
3279 <Tool
3280 Name="VCCLCompilerTool"
3281 UsePrecompiledHeader="0"
3282 />
3283 </FileConfiguration>
3284 <FileConfiguration
3285 Name="release-st|Win32"
3286 >
3287 <Tool
3288 Name="VCCLCompilerTool"
3289 UsePrecompiledHeader="0"
3290 />
3291 </FileConfiguration>
3292 <FileConfiguration
3293 Name="release-st|x64"
3294 >
3295 <Tool
3296 Name="VCCLCompilerTool"
3297 UsePrecompiledHeader="0"
3298 />
3299 </FileConfiguration>
3300 </File>
3301 <File
3302 RelativePath="..\..\contrib\zlib\inffast.h"
3303 >
3304 </File>
3305 <File
3306 RelativePath="..\..\contrib\zlib\inffixed.h"
3307 >
3308 </File>
3309 <File
3310 RelativePath="..\..\contrib\zlib\inflate.c"
3311 >
3312 <FileConfiguration
3313 Name="debug|Win32"
3314 >
3315 <Tool
3316 Name="VCCLCompilerTool"
3317 UsePrecompiledHeader="0"
3318 />
3319 </FileConfiguration>
3320 <FileConfiguration
3321 Name="debug|x64"
3322 >
3323 <Tool
3324 Name="VCCLCompilerTool"
3325 UsePrecompiledHeader="0"
3326 />
3327 </FileConfiguration>
3328 <FileConfiguration
3329 Name="release|Win32"
3330 >
3331 <Tool
3332 Name="VCCLCompilerTool"
3333 UsePrecompiledHeader="0"
3334 />
3335 </FileConfiguration>
3336 <FileConfiguration
3337 Name="release|x64"
3338 >
3339 <Tool
3340 Name="VCCLCompilerTool"
3341 UsePrecompiledHeader="0"
3342 />
3343 </FileConfiguration>
3344 <FileConfiguration
3345 Name="release-dll|Win32"
3346 >
3347 <Tool
3348 Name="VCCLCompilerTool"
3349 UsePrecompiledHeader="0"
3350 />
3351 </FileConfiguration>
3352 <FileConfiguration
3353 Name="release-dll|x64"
3354 >
3355 <Tool
3356 Name="VCCLCompilerTool"
3357 UsePrecompiledHeader="0"
3358 />
3359 </FileConfiguration>
3360 <FileConfiguration
3361 Name="debug-dll|Win32"
3362 >
3363 <Tool
3364 Name="VCCLCompilerTool"
3365 UsePrecompiledHeader="0"
3366 />
3367 </FileConfiguration>
3368 <FileConfiguration
3369 Name="debug-dll|x64"
3370 >
3371 <Tool
3372 Name="VCCLCompilerTool"
3373 UsePrecompiledHeader="0"
3374 />
3375 </FileConfiguration>
3376 <FileConfiguration
3377 Name="release-noboost-st|Win32"
3378 >
3379 <Tool
3380 Name="VCCLCompilerTool"
3381 UsePrecompiledHeader="0"
3382 />
3383 </FileConfiguration>
3384 <FileConfiguration
3385 Name="release-noboost-st|x64"
3386 >
3387 <Tool
3388 Name="VCCLCompilerTool"
3389 UsePrecompiledHeader="0"
3390 />
3391 </FileConfiguration>
3392 <FileConfiguration
3393 Name="debug-noboost-st|Win32"
3394 >
3395 <Tool
3396 Name="VCCLCompilerTool"
3397 UsePrecompiledHeader="0"
3398 />
3399 </FileConfiguration>
3400 <FileConfiguration
3401 Name="debug-noboost-st|x64"
3402 >
3403 <Tool
3404 Name="VCCLCompilerTool"
3405 UsePrecompiledHeader="0"
3406 />
3407 </FileConfiguration>
3408 <FileConfiguration
3409 Name="debug-st|Win32"
3410 >
3411 <Tool
3412 Name="VCCLCompilerTool"
3413 UsePrecompiledHeader="0"
3414 />
3415 </FileConfiguration>
3416 <FileConfiguration
3417 Name="debug-st|x64"
3418 >
3419 <Tool
3420 Name="VCCLCompilerTool"
3421 UsePrecompiledHeader="0"
3422 />
3423 </FileConfiguration>
3424 <FileConfiguration
3425 Name="release-st|Win32"
3426 >
3427 <Tool
3428 Name="VCCLCompilerTool"
3429 UsePrecompiledHeader="0"
3430 />
3431 </FileConfiguration>
3432 <FileConfiguration
3433 Name="release-st|x64"
3434 >
3435 <Tool
3436 Name="VCCLCompilerTool"
3437 UsePrecompiledHeader="0"
3438 />
3439 </FileConfiguration>
3440 </File>
3441 <File
3442 RelativePath="..\..\contrib\zlib\inflate.h"
3443 >
3444 </File>
3445 <File
3446 RelativePath="..\..\contrib\zlib\inftrees.c"
3447 >
3448 <FileConfiguration
3449 Name="debug|Win32"
3450 >
3451 <Tool
3452 Name="VCCLCompilerTool"
3453 UsePrecompiledHeader="0"
3454 />
3455 </FileConfiguration>
3456 <FileConfiguration
3457 Name="debug|x64"
3458 >
3459 <Tool
3460 Name="VCCLCompilerTool"
3461 UsePrecompiledHeader="0"
3462 />
3463 </FileConfiguration>
3464 <FileConfiguration
3465 Name="release|Win32"
3466 >
3467 <Tool
3468 Name="VCCLCompilerTool"
3469 UsePrecompiledHeader="0"
3470 />
3471 </FileConfiguration>
3472 <FileConfiguration
3473 Name="release|x64"
3474 >
3475 <Tool
3476 Name="VCCLCompilerTool"
3477 UsePrecompiledHeader="0"
3478 />
3479 </FileConfiguration>
3480 <FileConfiguration
3481 Name="release-dll|Win32"
3482 >
3483 <Tool
3484 Name="VCCLCompilerTool"
3485 UsePrecompiledHeader="0"
3486 />
3487 </FileConfiguration>
3488 <FileConfiguration
3489 Name="release-dll|x64"
3490 >
3491 <Tool
3492 Name="VCCLCompilerTool"
3493 UsePrecompiledHeader="0"
3494 />
3495 </FileConfiguration>
3496 <FileConfiguration
3497 Name="debug-dll|Win32"
3498 >
3499 <Tool
3500 Name="VCCLCompilerTool"
3501 UsePrecompiledHeader="0"
3502 />
3503 </FileConfiguration>
3504 <FileConfiguration
3505 Name="debug-dll|x64"
3506 >
3507 <Tool
3508 Name="VCCLCompilerTool"
3509 UsePrecompiledHeader="0"
3510 />
3511 </FileConfiguration>
3512 <FileConfiguration
3513 Name="release-noboost-st|Win32"
3514 >
3515 <Tool
3516 Name="VCCLCompilerTool"
3517 UsePrecompiledHeader="0"
3518 />
3519 </FileConfiguration>
3520 <FileConfiguration
3521 Name="release-noboost-st|x64"
3522 >
3523 <Tool
3524 Name="VCCLCompilerTool"
3525 UsePrecompiledHeader="0"
3526 />
3527 </FileConfiguration>
3528 <FileConfiguration
3529 Name="debug-noboost-st|Win32"
3530 >
3531 <Tool
3532 Name="VCCLCompilerTool"
3533 UsePrecompiledHeader="0"
3534 />
3535 </FileConfiguration>
3536 <FileConfiguration
3537 Name="debug-noboost-st|x64"
3538 >
3539 <Tool
3540 Name="VCCLCompilerTool"
3541 UsePrecompiledHeader="0"
3542 />
3543 </FileConfiguration>
3544 <FileConfiguration
3545 Name="debug-st|Win32"
3546 >
3547 <Tool
3548 Name="VCCLCompilerTool"
3549 UsePrecompiledHeader="0"
3550 />
3551 </FileConfiguration>
3552 <FileConfiguration
3553 Name="debug-st|x64"
3554 >
3555 <Tool
3556 Name="VCCLCompilerTool"
3557 UsePrecompiledHeader="0"
3558 />
3559 </FileConfiguration>
3560 <FileConfiguration
3561 Name="release-st|Win32"
3562 >
3563 <Tool
3564 Name="VCCLCompilerTool"
3565 UsePrecompiledHeader="0"
3566 />
3567 </FileConfiguration>
3568 <FileConfiguration
3569 Name="release-st|x64"
3570 >
3571 <Tool
3572 Name="VCCLCompilerTool"
3573 UsePrecompiledHeader="0"
3574 />
3575 </FileConfiguration>
3576 </File>
3577 <File
3578 RelativePath="..\..\contrib\zlib\inftrees.h"
3579 >
3580 </File>
3581 <File
3582 RelativePath="..\..\contrib\unzip\ioapi.c"
3583 >
3584 <FileConfiguration
3585 Name="debug|Win32"
3586 >
3587 <Tool
3588 Name="VCCLCompilerTool"
3589 UsePrecompiledHeader="0"
3590 />
3591 </FileConfiguration>
3592 <FileConfiguration
3593 Name="debug|x64"
3594 >
3595 <Tool
3596 Name="VCCLCompilerTool"
3597 UsePrecompiledHeader="0"
3598 />
3599 </FileConfiguration>
3600 <FileConfiguration
3601 Name="release|Win32"
3602 >
3603 <Tool
3604 Name="VCCLCompilerTool"
3605 UsePrecompiledHeader="0"
3606 />
3607 </FileConfiguration>
3608 <FileConfiguration
3609 Name="release|x64"
3610 >
3611 <Tool
3612 Name="VCCLCompilerTool"
3613 UsePrecompiledHeader="0"
3614 />
3615 </FileConfiguration>
3616 <FileConfiguration
3617 Name="release-dll|Win32"
3618 >
3619 <Tool
3620 Name="VCCLCompilerTool"
3621 UsePrecompiledHeader="0"
3622 />
3623 </FileConfiguration>
3624 <FileConfiguration
3625 Name="release-dll|x64"
3626 >
3627 <Tool
3628 Name="VCCLCompilerTool"
3629 UsePrecompiledHeader="0"
3630 />
3631 </FileConfiguration>
3632 <FileConfiguration
3633 Name="debug-dll|Win32"
3634 >
3635 <Tool
3636 Name="VCCLCompilerTool"
3637 UsePrecompiledHeader="0"
3638 />
3639 </FileConfiguration>
3640 <FileConfiguration
3641 Name="debug-dll|x64"
3642 >
3643 <Tool
3644 Name="VCCLCompilerTool"
3645 UsePrecompiledHeader="0"
3646 />
3647 </FileConfiguration>
3648 <FileConfiguration
3649 Name="release-noboost-st|Win32"
3650 >
3651 <Tool
3652 Name="VCCLCompilerTool"
3653 UsePrecompiledHeader="0"
3654 />
3655 </FileConfiguration>
3656 <FileConfiguration
3657 Name="release-noboost-st|x64"
3658 >
3659 <Tool
3660 Name="VCCLCompilerTool"
3661 UsePrecompiledHeader="0"
3662 />
3663 </FileConfiguration>
3664 <FileConfiguration
3665 Name="debug-noboost-st|Win32"
3666 >
3667 <Tool
3668 Name="VCCLCompilerTool"
3669 UsePrecompiledHeader="0"
3670 />
3671 </FileConfiguration>
3672 <FileConfiguration
3673 Name="debug-noboost-st|x64"
3674 >
3675 <Tool
3676 Name="VCCLCompilerTool"
3677 UsePrecompiledHeader="0"
3678 />
3679 </FileConfiguration>
3680 <FileConfiguration
3681 Name="debug-st|Win32"
3682 >
3683 <Tool
3684 Name="VCCLCompilerTool"
3685 UsePrecompiledHeader="0"
3686 />
3687 </FileConfiguration>
3688 <FileConfiguration
3689 Name="debug-st|x64"
3690 >
3691 <Tool
3692 Name="VCCLCompilerTool"
3693 UsePrecompiledHeader="0"
3694 />
3695 </FileConfiguration>
3696 <FileConfiguration
3697 Name="release-st|Win32"
3698 >
3699 <Tool
3700 Name="VCCLCompilerTool"
3701 UsePrecompiledHeader="0"
3702 />
3703 </FileConfiguration>
3704 <FileConfiguration
3705 Name="release-st|x64"
3706 >
3707 <Tool
3708 Name="VCCLCompilerTool"
3709 UsePrecompiledHeader="0"
3710 />
3711 </FileConfiguration>
3712 </File>
3713 <File
3714 RelativePath="..\..\contrib\unzip\ioapi.h"
3715 >
3716 </File>
3717 <File
3718 RelativePath="..\..\contrib\unzip\unzip.c"
3719 >
3720 <FileConfiguration
3721 Name="debug|Win32"
3722 >
3723 <Tool
3724 Name="VCCLCompilerTool"
3725 UsePrecompiledHeader="0"
3726 />
3727 </FileConfiguration>
3728 <FileConfiguration
3729 Name="debug|x64"
3730 >
3731 <Tool
3732 Name="VCCLCompilerTool"
3733 UsePrecompiledHeader="0"
3734 />
3735 </FileConfiguration>
3736 <FileConfiguration
3737 Name="release|Win32"
3738 >
3739 <Tool
3740 Name="VCCLCompilerTool"
3741 UsePrecompiledHeader="0"
3742 />
3743 </FileConfiguration>
3744 <FileConfiguration
3745 Name="release|x64"
3746 >
3747 <Tool
3748 Name="VCCLCompilerTool"
3749 UsePrecompiledHeader="0"
3750 />
3751 </FileConfiguration>
3752 <FileConfiguration
3753 Name="release-dll|Win32"
3754 >
3755 <Tool
3756 Name="VCCLCompilerTool"
3757 UsePrecompiledHeader="0"
3758 />
3759 </FileConfiguration>
3760 <FileConfiguration
3761 Name="release-dll|x64"
3762 >
3763 <Tool
3764 Name="VCCLCompilerTool"
3765 UsePrecompiledHeader="0"
3766 />
3767 </FileConfiguration>
3768 <FileConfiguration
3769 Name="debug-dll|Win32"
3770 >
3771 <Tool
3772 Name="VCCLCompilerTool"
3773 UsePrecompiledHeader="0"
3774 />
3775 </FileConfiguration>
3776 <FileConfiguration
3777 Name="debug-dll|x64"
3778 >
3779 <Tool
3780 Name="VCCLCompilerTool"
3781 UsePrecompiledHeader="0"
3782 />
3783 </FileConfiguration>
3784 <FileConfiguration
3785 Name="release-noboost-st|Win32"
3786 >
3787 <Tool
3788 Name="VCCLCompilerTool"
3789 UsePrecompiledHeader="0"
3790 />
3791 </FileConfiguration>
3792 <FileConfiguration
3793 Name="release-noboost-st|x64"
3794 >
3795 <Tool
3796 Name="VCCLCompilerTool"
3797 UsePrecompiledHeader="0"
3798 />
3799 </FileConfiguration>
3800 <FileConfiguration
3801 Name="debug-noboost-st|Win32"
3802 >
3803 <Tool
3804 Name="VCCLCompilerTool"
3805 UsePrecompiledHeader="0"
3806 />
3807 </FileConfiguration>
3808 <FileConfiguration
3809 Name="debug-noboost-st|x64"
3810 >
3811 <Tool
3812 Name="VCCLCompilerTool"
3813 UsePrecompiledHeader="0"
3814 />
3815 </FileConfiguration>
3816 <FileConfiguration
3817 Name="debug-st|Win32"
3818 >
3819 <Tool
3820 Name="VCCLCompilerTool"
3821 UsePrecompiledHeader="0"
3822 />
3823 </FileConfiguration>
3824 <FileConfiguration
3825 Name="debug-st|x64"
3826 >
3827 <Tool
3828 Name="VCCLCompilerTool"
3829 UsePrecompiledHeader="0"
3830 />
3831 </FileConfiguration>
3832 <FileConfiguration
3833 Name="release-st|Win32"
3834 >
3835 <Tool
3836 Name="VCCLCompilerTool"
3837 UsePrecompiledHeader="0"
3838 />
3839 </FileConfiguration>
3840 <FileConfiguration
3841 Name="release-st|x64"
3842 >
3843 <Tool
3844 Name="VCCLCompilerTool"
3845 UsePrecompiledHeader="0"
3846 />
3847 </FileConfiguration>
3848 </File>
3849 <File
3850 RelativePath="..\..\contrib\unzip\unzip.h"
3851 >
3852 </File>
3853 <File
3854 RelativePath="..\..\contrib\zlib\zconf.h"
3855 >
3856 </File>
3857 <File
3858 RelativePath="..\..\contrib\zlib\zconf.in.h"
3859 >
3860 </File>
3861 <File
3862 RelativePath="..\..\contrib\zlib\zlib.h"
3863 >
3864 </File>
3865 <File
3866 RelativePath="..\..\contrib\zlib\zutil.c"
3867 >
3868 <FileConfiguration
3869 Name="debug|Win32"
3870 >
3871 <Tool
3872 Name="VCCLCompilerTool"
3873 UsePrecompiledHeader="0"
3874 />
3875 </FileConfiguration>
3876 <FileConfiguration
3877 Name="debug|x64"
3878 >
3879 <Tool
3880 Name="VCCLCompilerTool"
3881 UsePrecompiledHeader="0"
3882 />
3883 </FileConfiguration>
3884 <FileConfiguration
3885 Name="release|Win32"
3886 >
3887 <Tool
3888 Name="VCCLCompilerTool"
3889 UsePrecompiledHeader="0"
3890 />
3891 </FileConfiguration>
3892 <FileConfiguration
3893 Name="release|x64"
3894 >
3895 <Tool
3896 Name="VCCLCompilerTool"
3897 UsePrecompiledHeader="0"
3898 />
3899 </FileConfiguration>
3900 <FileConfiguration
3901 Name="release-dll|Win32"
3902 >
3903 <Tool
3904 Name="VCCLCompilerTool"
3905 UsePrecompiledHeader="0"
3906 />
3907 </FileConfiguration>
3908 <FileConfiguration
3909 Name="release-dll|x64"
3910 >
3911 <Tool
3912 Name="VCCLCompilerTool"
3913 UsePrecompiledHeader="0"
3914 />
3915 </FileConfiguration>
3916 <FileConfiguration
3917 Name="debug-dll|Win32"
3918 >
3919 <Tool
3920 Name="VCCLCompilerTool"
3921 UsePrecompiledHeader="0"
3922 />
3923 </FileConfiguration>
3924 <FileConfiguration
3925 Name="debug-dll|x64"
3926 >
3927 <Tool
3928 Name="VCCLCompilerTool"
3929 UsePrecompiledHeader="0"
3930 />
3931 </FileConfiguration>
3932 <FileConfiguration
3933 Name="release-noboost-st|Win32"
3934 >
3935 <Tool
3936 Name="VCCLCompilerTool"
3937 UsePrecompiledHeader="0"
3938 />
3939 </FileConfiguration>
3940 <FileConfiguration
3941 Name="release-noboost-st|x64"
3942 >
3943 <Tool
3944 Name="VCCLCompilerTool"
3945 UsePrecompiledHeader="0"
3946 />
3947 </FileConfiguration>
3948 <FileConfiguration
3949 Name="debug-noboost-st|Win32"
3950 >
3951 <Tool
3952 Name="VCCLCompilerTool"
3953 UsePrecompiledHeader="0"
3954 />
3955 </FileConfiguration>
3956 <FileConfiguration
3957 Name="debug-noboost-st|x64"
3958 >
3959 <Tool
3960 Name="VCCLCompilerTool"
3961 UsePrecompiledHeader="0"
3962 />
3963 </FileConfiguration>
3964 <FileConfiguration
3965 Name="debug-st|Win32"
3966 >
3967 <Tool
3968 Name="VCCLCompilerTool"
3969 UsePrecompiledHeader="0"
3970 />
3971 </FileConfiguration>
3972 <FileConfiguration
3973 Name="debug-st|x64"
3974 >
3975 <Tool
3976 Name="VCCLCompilerTool"
3977 UsePrecompiledHeader="0"
3978 />
3979 </FileConfiguration>
3980 <FileConfiguration
3981 Name="release-st|Win32"
3982 >
3983 <Tool
3984 Name="VCCLCompilerTool"
3985 UsePrecompiledHeader="0"
3986 />
3987 </FileConfiguration>
3988 <FileConfiguration
3989 Name="release-st|x64"
3990 >
3991 <Tool
3992 Name="VCCLCompilerTool"
3993 UsePrecompiledHeader="0"
3994 />
3995 </FileConfiguration>
3996 </File>
3997 <File
3998 RelativePath="..\..\contrib\zlib\zutil.h"
3999 >
4000 </File>
4001 </Filter>
4002 <Filter
4003 Name="ConvertUTF"
4004 >
4005 <File
4006 RelativePath="..\..\contrib\ConvertUTF\ConvertUTF.c"
4007 >
4008 <FileConfiguration
4009 Name="debug|Win32"
4010 >
4011 <Tool
4012 Name="VCCLCompilerTool"
4013 UsePrecompiledHeader="0"
4014 />
4015 </FileConfiguration>
4016 <FileConfiguration
4017 Name="debug|x64"
4018 >
4019 <Tool
4020 Name="VCCLCompilerTool"
4021 UsePrecompiledHeader="0"
4022 />
4023 </FileConfiguration>
4024 <FileConfiguration
4025 Name="release|Win32"
4026 >
4027 <Tool
4028 Name="VCCLCompilerTool"
4029 UsePrecompiledHeader="0"
4030 />
4031 </FileConfiguration>
4032 <FileConfiguration
4033 Name="release|x64"
4034 >
4035 <Tool
4036 Name="VCCLCompilerTool"
4037 UsePrecompiledHeader="0"
4038 />
4039 </FileConfiguration>
4040 <FileConfiguration
4041 Name="release-dll|Win32"
4042 >
4043 <Tool
4044 Name="VCCLCompilerTool"
4045 UsePrecompiledHeader="0"
4046 />
4047 </FileConfiguration>
4048 <FileConfiguration
4049 Name="release-dll|x64"
4050 >
4051 <Tool
4052 Name="VCCLCompilerTool"
4053 UsePrecompiledHeader="0"
4054 />
4055 </FileConfiguration>
4056 <FileConfiguration
4057 Name="debug-dll|Win32"
4058 >
4059 <Tool
4060 Name="VCCLCompilerTool"
4061 UsePrecompiledHeader="0"
4062 />
4063 </FileConfiguration>
4064 <FileConfiguration
4065 Name="debug-dll|x64"
4066 >
4067 <Tool
4068 Name="VCCLCompilerTool"
4069 UsePrecompiledHeader="0"
4070 />
4071 </FileConfiguration>
4072 <FileConfiguration
4073 Name="release-noboost-st|Win32"
4074 >
4075 <Tool
4076 Name="VCCLCompilerTool"
4077 UsePrecompiledHeader="0"
4078 />
4079 </FileConfiguration>
4080 <FileConfiguration
4081 Name="release-noboost-st|x64"
4082 >
4083 <Tool
4084 Name="VCCLCompilerTool"
4085 UsePrecompiledHeader="0"
4086 />
4087 </FileConfiguration>
4088 <FileConfiguration
4089 Name="debug-noboost-st|Win32"
4090 >
4091 <Tool
4092 Name="VCCLCompilerTool"
4093 UsePrecompiledHeader="0"
4094 />
4095 </FileConfiguration>
4096 <FileConfiguration
4097 Name="debug-noboost-st|x64"
4098 >
4099 <Tool
4100 Name="VCCLCompilerTool"
4101 UsePrecompiledHeader="0"
4102 />
4103 </FileConfiguration>
4104 <FileConfiguration
4105 Name="debug-st|Win32"
4106 >
4107 <Tool
4108 Name="VCCLCompilerTool"
4109 UsePrecompiledHeader="0"
4110 />
4111 </FileConfiguration>
4112 <FileConfiguration
4113 Name="debug-st|x64"
4114 >
4115 <Tool
4116 Name="VCCLCompilerTool"
4117 UsePrecompiledHeader="0"
4118 />
4119 </FileConfiguration>
4120 <FileConfiguration
4121 Name="release-st|Win32"
4122 >
4123 <Tool
4124 Name="VCCLCompilerTool"
4125 UsePrecompiledHeader="0"
4126 />
4127 </FileConfiguration>
4128 <FileConfiguration
4129 Name="release-st|x64"
4130 >
4131 <Tool
4132 Name="VCCLCompilerTool"
4133 UsePrecompiledHeader="0"
4134 />
4135 </FileConfiguration>
4136 </File>
4137 <File
4138 RelativePath="..\..\contrib\ConvertUTF\ConvertUTF.h"
4139 >
4140 </File>
4141 </Filter>
4142 <Filter
4143 Name="poly2tri"
4144 >
4145 <File
4146 RelativePath="..\..\contrib\poly2tri\poly2tri\sweep\advancing_front.cc"
4147 >
4148 <FileConfiguration
4149 Name="debug|Win32"
4150 >
4151 <Tool
4152 Name="VCCLCompilerTool"
4153 UsePrecompiledHeader="0"
4154 />
4155 </FileConfiguration>
4156 <FileConfiguration
4157 Name="debug|x64"
4158 >
4159 <Tool
4160 Name="VCCLCompilerTool"
4161 UsePrecompiledHeader="0"
4162 />
4163 </FileConfiguration>
4164 <FileConfiguration
4165 Name="release|Win32"
4166 >
4167 <Tool
4168 Name="VCCLCompilerTool"
4169 UsePrecompiledHeader="0"
4170 />
4171 </FileConfiguration>
4172 <FileConfiguration
4173 Name="release|x64"
4174 >
4175 <Tool
4176 Name="VCCLCompilerTool"
4177 UsePrecompiledHeader="0"
4178 />
4179 </FileConfiguration>
4180 <FileConfiguration
4181 Name="release-dll|Win32"
4182 >
4183 <Tool
4184 Name="VCCLCompilerTool"
4185 UsePrecompiledHeader="0"
4186 />
4187 </FileConfiguration>
4188 <FileConfiguration
4189 Name="release-dll|x64"
4190 >
4191 <Tool
4192 Name="VCCLCompilerTool"
4193 UsePrecompiledHeader="0"
4194 />
4195 </FileConfiguration>
4196 <FileConfiguration
4197 Name="debug-dll|Win32"
4198 >
4199 <Tool
4200 Name="VCCLCompilerTool"
4201 UsePrecompiledHeader="0"
4202 />
4203 </FileConfiguration>
4204 <FileConfiguration
4205 Name="debug-dll|x64"
4206 >
4207 <Tool
4208 Name="VCCLCompilerTool"
4209 UsePrecompiledHeader="0"
4210 />
4211 </FileConfiguration>
4212 <FileConfiguration
4213 Name="release-noboost-st|Win32"
4214 >
4215 <Tool
4216 Name="VCCLCompilerTool"
4217 UsePrecompiledHeader="0"
4218 />
4219 </FileConfiguration>
4220 <FileConfiguration
4221 Name="release-noboost-st|x64"
4222 >
4223 <Tool
4224 Name="VCCLCompilerTool"
4225 UsePrecompiledHeader="0"
4226 />
4227 </FileConfiguration>
4228 <FileConfiguration
4229 Name="debug-noboost-st|Win32"
4230 >
4231 <Tool
4232 Name="VCCLCompilerTool"
4233 UsePrecompiledHeader="0"
4234 />
4235 </FileConfiguration>
4236 <FileConfiguration
4237 Name="debug-noboost-st|x64"
4238 >
4239 <Tool
4240 Name="VCCLCompilerTool"
4241 UsePrecompiledHeader="0"
4242 />
4243 </FileConfiguration>
4244 <FileConfiguration
4245 Name="debug-st|Win32"
4246 >
4247 <Tool
4248 Name="VCCLCompilerTool"
4249 UsePrecompiledHeader="0"
4250 />
4251 </FileConfiguration>
4252 <FileConfiguration
4253 Name="debug-st|x64"
4254 >
4255 <Tool
4256 Name="VCCLCompilerTool"
4257 UsePrecompiledHeader="0"
4258 />
4259 </FileConfiguration>
4260 <FileConfiguration
4261 Name="release-st|Win32"
4262 >
4263 <Tool
4264 Name="VCCLCompilerTool"
4265 UsePrecompiledHeader="0"
4266 />
4267 </FileConfiguration>
4268 <FileConfiguration
4269 Name="release-st|x64"
4270 >
4271 <Tool
4272 Name="VCCLCompilerTool"
4273 UsePrecompiledHeader="0"
4274 />
4275 </FileConfiguration>
4276 </File>
4277 <File
4278 RelativePath="..\..\contrib\poly2tri\poly2tri\sweep\advancing_front.h"
4279 >
4280 </File>
4281 <File
4282 RelativePath="..\..\contrib\poly2tri\poly2tri\sweep\cdt.cc"
4283 >
4284 <FileConfiguration
4285 Name="debug|Win32"
4286 >
4287 <Tool
4288 Name="VCCLCompilerTool"
4289 UsePrecompiledHeader="0"
4290 />
4291 </FileConfiguration>
4292 <FileConfiguration
4293 Name="debug|x64"
4294 >
4295 <Tool
4296 Name="VCCLCompilerTool"
4297 UsePrecompiledHeader="0"
4298 />
4299 </FileConfiguration>
4300 <FileConfiguration
4301 Name="release|Win32"
4302 >
4303 <Tool
4304 Name="VCCLCompilerTool"
4305 UsePrecompiledHeader="0"
4306 />
4307 </FileConfiguration>
4308 <FileConfiguration
4309 Name="release|x64"
4310 >
4311 <Tool
4312 Name="VCCLCompilerTool"
4313 UsePrecompiledHeader="0"
4314 />
4315 </FileConfiguration>
4316 <FileConfiguration
4317 Name="release-dll|Win32"
4318 >
4319 <Tool
4320 Name="VCCLCompilerTool"
4321 UsePrecompiledHeader="0"
4322 />
4323 </FileConfiguration>
4324 <FileConfiguration
4325 Name="release-dll|x64"
4326 >
4327 <Tool
4328 Name="VCCLCompilerTool"
4329 UsePrecompiledHeader="0"
4330 />
4331 </FileConfiguration>
4332 <FileConfiguration
4333 Name="debug-dll|Win32"
4334 >
4335 <Tool
4336 Name="VCCLCompilerTool"
4337 UsePrecompiledHeader="0"
4338 />
4339 </FileConfiguration>
4340 <FileConfiguration
4341 Name="debug-dll|x64"
4342 >
4343 <Tool
4344 Name="VCCLCompilerTool"
4345 UsePrecompiledHeader="0"
4346 />
4347 </FileConfiguration>
4348 <FileConfiguration
4349 Name="release-noboost-st|Win32"
4350 >
4351 <Tool
4352 Name="VCCLCompilerTool"
4353 UsePrecompiledHeader="0"
4354 />
4355 </FileConfiguration>
4356 <FileConfiguration
4357 Name="release-noboost-st|x64"
4358 >
4359 <Tool
4360 Name="VCCLCompilerTool"
4361 UsePrecompiledHeader="0"
4362 />
4363 </FileConfiguration>
4364 <FileConfiguration
4365 Name="debug-noboost-st|Win32"
4366 >
4367 <Tool
4368 Name="VCCLCompilerTool"
4369 UsePrecompiledHeader="0"
4370 />
4371 </FileConfiguration>
4372 <FileConfiguration
4373 Name="debug-noboost-st|x64"
4374 >
4375 <Tool
4376 Name="VCCLCompilerTool"
4377 UsePrecompiledHeader="0"
4378 />
4379 </FileConfiguration>
4380 <FileConfiguration
4381 Name="debug-st|Win32"
4382 >
4383 <Tool
4384 Name="VCCLCompilerTool"
4385 UsePrecompiledHeader="0"
4386 />
4387 </FileConfiguration>
4388 <FileConfiguration
4389 Name="debug-st|x64"
4390 >
4391 <Tool
4392 Name="VCCLCompilerTool"
4393 UsePrecompiledHeader="0"
4394 />
4395 </FileConfiguration>
4396 <FileConfiguration
4397 Name="release-st|Win32"
4398 >
4399 <Tool
4400 Name="VCCLCompilerTool"
4401 UsePrecompiledHeader="0"
4402 />
4403 </FileConfiguration>
4404 <FileConfiguration
4405 Name="release-st|x64"
4406 >
4407 <Tool
4408 Name="VCCLCompilerTool"
4409 UsePrecompiledHeader="0"
4410 />
4411 </FileConfiguration>
4412 </File>
4413 <File
4414 RelativePath="..\..\contrib\poly2tri\poly2tri\sweep\cdt.h"
4415 >
4416 </File>
4417 <File
4418 RelativePath="..\..\contrib\poly2tri\poly2tri\poly2tri.h"
4419 >
4420 </File>
4421 <File
4422 RelativePath="..\..\contrib\poly2tri\poly2tri\common\shapes.cc"
4423 >
4424 <FileConfiguration
4425 Name="debug|Win32"
4426 >
4427 <Tool
4428 Name="VCCLCompilerTool"
4429 UsePrecompiledHeader="0"
4430 />
4431 </FileConfiguration>
4432 <FileConfiguration
4433 Name="debug|x64"
4434 >
4435 <Tool
4436 Name="VCCLCompilerTool"
4437 UsePrecompiledHeader="0"
4438 />
4439 </FileConfiguration>
4440 <FileConfiguration
4441 Name="release|Win32"
4442 >
4443 <Tool
4444 Name="VCCLCompilerTool"
4445 UsePrecompiledHeader="0"
4446 />
4447 </FileConfiguration>
4448 <FileConfiguration
4449 Name="release|x64"
4450 >
4451 <Tool
4452 Name="VCCLCompilerTool"
4453 UsePrecompiledHeader="0"
4454 />
4455 </FileConfiguration>
4456 <FileConfiguration
4457 Name="release-dll|Win32"
4458 >
4459 <Tool
4460 Name="VCCLCompilerTool"
4461 UsePrecompiledHeader="0"
4462 />
4463 </FileConfiguration>
4464 <FileConfiguration
4465 Name="release-dll|x64"
4466 >
4467 <Tool
4468 Name="VCCLCompilerTool"
4469 UsePrecompiledHeader="0"
4470 />
4471 </FileConfiguration>
4472 <FileConfiguration
4473 Name="debug-dll|Win32"
4474 >
4475 <Tool
4476 Name="VCCLCompilerTool"
4477 UsePrecompiledHeader="0"
4478 />
4479 </FileConfiguration>
4480 <FileConfiguration
4481 Name="debug-dll|x64"
4482 >
4483 <Tool
4484 Name="VCCLCompilerTool"
4485 UsePrecompiledHeader="0"
4486 />
4487 </FileConfiguration>
4488 <FileConfiguration
4489 Name="release-noboost-st|Win32"
4490 >
4491 <Tool
4492 Name="VCCLCompilerTool"
4493 UsePrecompiledHeader="0"
4494 />
4495 </FileConfiguration>
4496 <FileConfiguration
4497 Name="release-noboost-st|x64"
4498 >
4499 <Tool
4500 Name="VCCLCompilerTool"
4501 UsePrecompiledHeader="0"
4502 />
4503 </FileConfiguration>
4504 <FileConfiguration
4505 Name="debug-noboost-st|Win32"
4506 >
4507 <Tool
4508 Name="VCCLCompilerTool"
4509 UsePrecompiledHeader="0"
4510 />
4511 </FileConfiguration>
4512 <FileConfiguration
4513 Name="debug-noboost-st|x64"
4514 >
4515 <Tool
4516 Name="VCCLCompilerTool"
4517 UsePrecompiledHeader="0"
4518 />
4519 </FileConfiguration>
4520 <FileConfiguration
4521 Name="debug-st|Win32"
4522 >
4523 <Tool
4524 Name="VCCLCompilerTool"
4525 UsePrecompiledHeader="0"
4526 />
4527 </FileConfiguration>
4528 <FileConfiguration
4529 Name="debug-st|x64"
4530 >
4531 <Tool
4532 Name="VCCLCompilerTool"
4533 UsePrecompiledHeader="0"
4534 />
4535 </FileConfiguration>
4536 <FileConfiguration
4537 Name="release-st|Win32"
4538 >
4539 <Tool
4540 Name="VCCLCompilerTool"
4541 UsePrecompiledHeader="0"
4542 />
4543 </FileConfiguration>
4544 <FileConfiguration
4545 Name="release-st|x64"
4546 >
4547 <Tool
4548 Name="VCCLCompilerTool"
4549 UsePrecompiledHeader="0"
4550 />
4551 </FileConfiguration>
4552 </File>
4553 <File
4554 RelativePath="..\..\contrib\poly2tri\poly2tri\common\shapes.h"
4555 >
4556 </File>
4557 <File
4558 RelativePath="..\..\contrib\poly2tri\poly2tri\sweep\sweep.cc"
4559 >
4560 <FileConfiguration
4561 Name="debug|Win32"
4562 >
4563 <Tool
4564 Name="VCCLCompilerTool"
4565 UsePrecompiledHeader="0"
4566 />
4567 </FileConfiguration>
4568 <FileConfiguration
4569 Name="debug|x64"
4570 >
4571 <Tool
4572 Name="VCCLCompilerTool"
4573 UsePrecompiledHeader="0"
4574 />
4575 </FileConfiguration>
4576 <FileConfiguration
4577 Name="release|Win32"
4578 >
4579 <Tool
4580 Name="VCCLCompilerTool"
4581 UsePrecompiledHeader="0"
4582 />
4583 </FileConfiguration>
4584 <FileConfiguration
4585 Name="release|x64"
4586 >
4587 <Tool
4588 Name="VCCLCompilerTool"
4589 UsePrecompiledHeader="0"
4590 />
4591 </FileConfiguration>
4592 <FileConfiguration
4593 Name="release-dll|Win32"
4594 >
4595 <Tool
4596 Name="VCCLCompilerTool"
4597 UsePrecompiledHeader="0"
4598 />
4599 </FileConfiguration>
4600 <FileConfiguration
4601 Name="release-dll|x64"
4602 >
4603 <Tool
4604 Name="VCCLCompilerTool"
4605 UsePrecompiledHeader="0"
4606 />
4607 </FileConfiguration>
4608 <FileConfiguration
4609 Name="debug-dll|Win32"
4610 >
4611 <Tool
4612 Name="VCCLCompilerTool"
4613 UsePrecompiledHeader="0"
4614 />
4615 </FileConfiguration>
4616 <FileConfiguration
4617 Name="debug-dll|x64"
4618 >
4619 <Tool
4620 Name="VCCLCompilerTool"
4621 UsePrecompiledHeader="0"
4622 />
4623 </FileConfiguration>
4624 <FileConfiguration
4625 Name="release-noboost-st|Win32"
4626 >
4627 <Tool
4628 Name="VCCLCompilerTool"
4629 UsePrecompiledHeader="0"
4630 />
4631 </FileConfiguration>
4632 <FileConfiguration
4633 Name="release-noboost-st|x64"
4634 >
4635 <Tool
4636 Name="VCCLCompilerTool"
4637 UsePrecompiledHeader="0"
4638 />
4639 </FileConfiguration>
4640 <FileConfiguration
4641 Name="debug-noboost-st|Win32"
4642 >
4643 <Tool
4644 Name="VCCLCompilerTool"
4645 UsePrecompiledHeader="0"
4646 />
4647 </FileConfiguration>
4648 <FileConfiguration
4649 Name="debug-noboost-st|x64"
4650 >
4651 <Tool
4652 Name="VCCLCompilerTool"
4653 UsePrecompiledHeader="0"
4654 />
4655 </FileConfiguration>
4656 <FileConfiguration
4657 Name="debug-st|Win32"
4658 >
4659 <Tool
4660 Name="VCCLCompilerTool"
4661 UsePrecompiledHeader="0"
4662 />
4663 </FileConfiguration>
4664 <FileConfiguration
4665 Name="debug-st|x64"
4666 >
4667 <Tool
4668 Name="VCCLCompilerTool"
4669 UsePrecompiledHeader="0"
4670 />
4671 </FileConfiguration>
4672 <FileConfiguration
4673 Name="release-st|Win32"
4674 >
4675 <Tool
4676 Name="VCCLCompilerTool"
4677 UsePrecompiledHeader="0"
4678 />
4679 </FileConfiguration>
4680 <FileConfiguration
4681 Name="release-st|x64"
4682 >
4683 <Tool
4684 Name="VCCLCompilerTool"
4685 UsePrecompiledHeader="0"
4686 />
4687 </FileConfiguration>
4688 </File>
4689 <File
4690 RelativePath="..\..\contrib\poly2tri\poly2tri\sweep\sweep.h"
4691 >
4692 </File>
4693 <File
4694 RelativePath="..\..\contrib\poly2tri\poly2tri\sweep\sweep_context.cc"
4695 >
4696 <FileConfiguration
4697 Name="debug|Win32"
4698 >
4699 <Tool
4700 Name="VCCLCompilerTool"
4701 UsePrecompiledHeader="0"
4702 />
4703 </FileConfiguration>
4704 <FileConfiguration
4705 Name="debug|x64"
4706 >
4707 <Tool
4708 Name="VCCLCompilerTool"
4709 UsePrecompiledHeader="0"
4710 />
4711 </FileConfiguration>
4712 <FileConfiguration
4713 Name="release|Win32"
4714 >
4715 <Tool
4716 Name="VCCLCompilerTool"
4717 UsePrecompiledHeader="0"
4718 />
4719 </FileConfiguration>
4720 <FileConfiguration
4721 Name="release|x64"
4722 >
4723 <Tool
4724 Name="VCCLCompilerTool"
4725 UsePrecompiledHeader="0"
4726 />
4727 </FileConfiguration>
4728 <FileConfiguration
4729 Name="release-dll|Win32"
4730 >
4731 <Tool
4732 Name="VCCLCompilerTool"
4733 UsePrecompiledHeader="0"
4734 />
4735 </FileConfiguration>
4736 <FileConfiguration
4737 Name="release-dll|x64"
4738 >
4739 <Tool
4740 Name="VCCLCompilerTool"
4741 UsePrecompiledHeader="0"
4742 />
4743 </FileConfiguration>
4744 <FileConfiguration
4745 Name="debug-dll|Win32"
4746 >
4747 <Tool
4748 Name="VCCLCompilerTool"
4749 UsePrecompiledHeader="0"
4750 />
4751 </FileConfiguration>
4752 <FileConfiguration
4753 Name="debug-dll|x64"
4754 >
4755 <Tool
4756 Name="VCCLCompilerTool"
4757 UsePrecompiledHeader="0"
4758 />
4759 </FileConfiguration>
4760 <FileConfiguration
4761 Name="release-noboost-st|Win32"
4762 >
4763 <Tool
4764 Name="VCCLCompilerTool"
4765 UsePrecompiledHeader="0"
4766 />
4767 </FileConfiguration>
4768 <FileConfiguration
4769 Name="release-noboost-st|x64"
4770 >
4771 <Tool
4772 Name="VCCLCompilerTool"
4773 UsePrecompiledHeader="0"
4774 />
4775 </FileConfiguration>
4776 <FileConfiguration
4777 Name="debug-noboost-st|Win32"
4778 >
4779 <Tool
4780 Name="VCCLCompilerTool"
4781 UsePrecompiledHeader="0"
4782 />
4783 </FileConfiguration>
4784 <FileConfiguration
4785 Name="debug-noboost-st|x64"
4786 >
4787 <Tool
4788 Name="VCCLCompilerTool"
4789 UsePrecompiledHeader="0"
4790 />
4791 </FileConfiguration>
4792 <FileConfiguration
4793 Name="debug-st|Win32"
4794 >
4795 <Tool
4796 Name="VCCLCompilerTool"
4797 UsePrecompiledHeader="0"
4798 />
4799 </FileConfiguration>
4800 <FileConfiguration
4801 Name="debug-st|x64"
4802 >
4803 <Tool
4804 Name="VCCLCompilerTool"
4805 UsePrecompiledHeader="0"
4806 />
4807 </FileConfiguration>
4808 <FileConfiguration
4809 Name="release-st|Win32"
4810 >
4811 <Tool
4812 Name="VCCLCompilerTool"
4813 UsePrecompiledHeader="0"
4814 />
4815 </FileConfiguration>
4816 <FileConfiguration
4817 Name="release-st|x64"
4818 >
4819 <Tool
4820 Name="VCCLCompilerTool"
4821 UsePrecompiledHeader="0"
4822 />
4823 </FileConfiguration>
4824 </File>
4825 <File
4826 RelativePath="..\..\contrib\poly2tri\poly2tri\sweep\sweep_context.h"
4827 >
4828 </File>
4829 <File
4830 RelativePath="..\..\contrib\poly2tri\poly2tri\common\utils.h"
4831 >
4832 </File>
4833 </Filter>
4834 <Filter
4835 Name="clipper"
4836 >
4837 <File
4838 RelativePath="..\..\contrib\clipper\clipper.cpp"
4839 >
4840 <FileConfiguration
4841 Name="debug|Win32"
4842 >
4843 <Tool
4844 Name="VCCLCompilerTool"
4845 UsePrecompiledHeader="0"
4846 />
4847 </FileConfiguration>
4848 <FileConfiguration
4849 Name="debug|x64"
4850 >
4851 <Tool
4852 Name="VCCLCompilerTool"
4853 UsePrecompiledHeader="0"
4854 />
4855 </FileConfiguration>
4856 <FileConfiguration
4857 Name="release|Win32"
4858 >
4859 <Tool
4860 Name="VCCLCompilerTool"
4861 UsePrecompiledHeader="0"
4862 />
4863 </FileConfiguration>
4864 <FileConfiguration
4865 Name="release|x64"
4866 >
4867 <Tool
4868 Name="VCCLCompilerTool"
4869 UsePrecompiledHeader="0"
4870 />
4871 </FileConfiguration>
4872 <FileConfiguration
4873 Name="release-dll|Win32"
4874 >
4875 <Tool
4876 Name="VCCLCompilerTool"
4877 UsePrecompiledHeader="0"
4878 />
4879 </FileConfiguration>
4880 <FileConfiguration
4881 Name="release-dll|x64"
4882 >
4883 <Tool
4884 Name="VCCLCompilerTool"
4885 UsePrecompiledHeader="0"
4886 />
4887 </FileConfiguration>
4888 <FileConfiguration
4889 Name="debug-dll|Win32"
4890 >
4891 <Tool
4892 Name="VCCLCompilerTool"
4893 UsePrecompiledHeader="0"
4894 />
4895 </FileConfiguration>
4896 <FileConfiguration
4897 Name="debug-dll|x64"
4898 >
4899 <Tool
4900 Name="VCCLCompilerTool"
4901 UsePrecompiledHeader="0"
4902 />
4903 </FileConfiguration>
4904 <FileConfiguration
4905 Name="release-noboost-st|Win32"
4906 >
4907 <Tool
4908 Name="VCCLCompilerTool"
4909 UsePrecompiledHeader="0"
4910 />
4911 </FileConfiguration>
4912 <FileConfiguration
4913 Name="release-noboost-st|x64"
4914 >
4915 <Tool
4916 Name="VCCLCompilerTool"
4917 UsePrecompiledHeader="0"
4918 />
4919 </FileConfiguration>
4920 <FileConfiguration
4921 Name="debug-noboost-st|Win32"
4922 >
4923 <Tool
4924 Name="VCCLCompilerTool"
4925 UsePrecompiledHeader="0"
4926 />
4927 </FileConfiguration>
4928 <FileConfiguration
4929 Name="debug-noboost-st|x64"
4930 >
4931 <Tool
4932 Name="VCCLCompilerTool"
4933 UsePrecompiledHeader="0"
4934 />
4935 </FileConfiguration>
4936 <FileConfiguration
4937 Name="debug-st|Win32"
4938 >
4939 <Tool
4940 Name="VCCLCompilerTool"
4941 UsePrecompiledHeader="0"
4942 />
4943 </FileConfiguration>
4944 <FileConfiguration
4945 Name="debug-st|x64"
4946 >
4947 <Tool
4948 Name="VCCLCompilerTool"
4949 UsePrecompiledHeader="0"
4950 />
4951 </FileConfiguration>
4952 <FileConfiguration
4953 Name="release-st|Win32"
4954 >
4955 <Tool
4956 Name="VCCLCompilerTool"
4957 UsePrecompiledHeader="0"
4958 />
4959 </FileConfiguration>
4960 <FileConfiguration
4961 Name="release-st|x64"
4962 >
4963 <Tool
4964 Name="VCCLCompilerTool"
4965 UsePrecompiledHeader="0"
4966 />
4967 </FileConfiguration>
4968 </File>
4969 <File
4970 RelativePath="..\..\contrib\clipper\clipper.hpp"
4971 >
4972 </File>
4973 </Filter>
4974 </Filter>
4975 <Filter
4976 Name="noboost"
4977 >
4978 <File
4979 RelativePath="..\..\code\BoostWorkaround\boost\foreach.hpp"
4980 >
4981 </File>
4982 <File
4983 RelativePath="..\..\code\BoostWorkaround\boost\format.hpp"
4984 >
4985 </File>
4986 <File
4987 RelativePath="..\..\code\BoostWorkaround\boost\lexical_cast.hpp"
4988 >
4989 </File>
4990 <File
4991 RelativePath="..\..\code\BoostWorkaround\boost\make_shared.hpp"
4992 >
4993 </File>
4994 <File
4995 RelativePath="..\..\code\BoostWorkaround\boost\pointer_cast.hpp"
4996 >
4997 </File>
4998 <File
4999 RelativePath="..\..\code\BoostWorkaround\boost\scoped_array.hpp"
5000 >
5001 </File>
5002 <File
5003 RelativePath="..\..\code\BoostWorkaround\boost\scoped_ptr.hpp"
5004 >
5005 </File>
5006 <File
5007 RelativePath="..\..\code\BoostWorkaround\boost\shared_array.hpp"
5008 >
5009 </File>
5010 <File
5011 RelativePath="..\..\code\BoostWorkaround\boost\shared_ptr.hpp"
5012 >
5013 </File>
5014 <File
5015 RelativePath="..\..\code\BoostWorkaround\boost\static_assert.hpp"
5016 >
5017 </File>
5018 <Filter
5019 Name="tuple"
5020 >
5021 <File
5022 RelativePath="..\..\code\BoostWorkaround\boost\tuple\tuple.hpp"
5023 >
5024 </File>
5025 </Filter>
5026 <Filter
5027 Name="math"
5028 >
5029 <File
5030 RelativePath="..\..\code\BoostWorkaround\boost\math\common_factor_rt.hpp"
5031 >
5032 </File>
5033 </Filter>
5034 </Filter>
5035 <Filter
5036 Name="core_export"
5037 >
5038 <File
5039 RelativePath="..\..\code\AssimpCExport.cpp"
5040 >
5041 </File>
5042 <File
5043 RelativePath="..\..\code\BlobIOSystem.h"
5044 >
5045 </File>
5046 <File
5047 RelativePath="..\..\code\Exporter.cpp"
5048 >
5049 </File>
5050 </Filter>
5051 <Filter
5052 Name="exporters"
5053 >
5054 <Filter
5055 Name="collada"
5056 >
5057 <File
5058 RelativePath="..\..\code\ColladaExporter.cpp"
5059 >
5060 </File>
5061 <File
5062 RelativePath="..\..\code\ColladaExporter.h"
5063 >
5064 </File>
5065 </Filter>
5066 <Filter
5067 Name="obj"
5068 >
5069 <File
5070 RelativePath="..\..\code\ObjExporter.cpp"
5071 >
5072 </File>
5073 <File
5074 RelativePath="..\..\code\ObjExporter.h"
5075 >
5076 </File>
5077 </Filter>
5078 <Filter
5079 Name="stl"
5080 >
5081 <File
5082 RelativePath="..\..\code\STLExporter.cpp"
5083 >
5084 </File>
5085 <File
5086 RelativePath="..\..\code\STLExporter.h"
5087 >
5088 </File>
5089 </Filter>
5090 <Filter
5091 Name="ply"
5092 >
5093 <File
5094 RelativePath="..\..\code\PlyExporter.cpp"
5095 >
5096 </File>
5097 <File
5098 RelativePath="..\..\code\PlyExporter.h"
5099 >
5100 </File>
5101 </Filter>
5102 </Filter>
5103 </Filter>
5104 <Filter
5105 Name="doc"
5106 >
5107 <File
5108 RelativePath="..\..\doc\datastructure.xml"
5109 >
5110 </File>
5111 <File
5112 RelativePath="..\..\doc\dox.h"
5113 >
5114 </File>
5115 <File
5116 RelativePath="..\..\doc\Preamble.txt"
5117 >
5118 </File>
5119 </Filter>
5120 <Filter
5121 Name="resources"
5122 >
5123 <File
5124 RelativePath="..\..\code\res\assimp.rc"
5125 >
5126 </File>
5127 <File
5128 RelativePath="..\..\code\res\resource.h"
5129 >
5130 </File>
5131 </Filter>
5132 </Files>
5133 <Globals>
5134 </Globals>
5135 </VisualStudioProject>
+0
-1493
workspaces/vc9/assimp_cmd.vcproj less more
0 <?xml version="1.0" encoding="Windows-1252"?>
1 <VisualStudioProject
2 ProjectType="Visual C++"
3 Version="9.00"
4 Name="assimpcmd"
5 ProjectGUID="{7C8F7B44-C990-4EA8-A2A5-9028472E0AD3}"
6 RootNamespace="assimp_cmd"
7 Keyword="Win32Proj"
8 TargetFrameworkVersion="131072"
9 >
10 <Platforms>
11 <Platform
12 Name="Win32"
13 />
14 <Platform
15 Name="x64"
16 />
17 </Platforms>
18 <ToolFiles>
19 </ToolFiles>
20 <Configurations>
21 <Configuration
22 Name="Debug|Win32"
23 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
24 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
25 ConfigurationType="1"
26 InheritedPropertySheets=".\shared\FastSTL.vsprops"
27 CharacterSet="2"
28 >
29 <Tool
30 Name="VCPreBuildEventTool"
31 />
32 <Tool
33 Name="VCCustomBuildTool"
34 />
35 <Tool
36 Name="VCXMLDataGeneratorTool"
37 />
38 <Tool
39 Name="VCWebServiceProxyGeneratorTool"
40 />
41 <Tool
42 Name="VCMIDLTool"
43 />
44 <Tool
45 Name="VCCLCompilerTool"
46 Optimization="0"
47 AdditionalIncludeDirectories="..\..\include"
48 PreprocessorDefinitions="WIN32;_DEBUG,DEBUG,_CONSOLE"
49 MinimalRebuild="true"
50 BasicRuntimeChecks="3"
51 RuntimeLibrary="3"
52 UsePrecompiledHeader="0"
53 WarningLevel="3"
54 Detect64BitPortabilityProblems="false"
55 DebugInformationFormat="4"
56 />
57 <Tool
58 Name="VCManagedResourceCompilerTool"
59 />
60 <Tool
61 Name="VCResourceCompilerTool"
62 />
63 <Tool
64 Name="VCPreLinkEventTool"
65 />
66 <Tool
67 Name="VCLinkerTool"
68 AdditionalDependencies="assimp.lib"
69 OutputFile="$(OutDir)\assimp_debug.exe"
70 LinkIncremental="2"
71 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;"
72 GenerateDebugInformation="true"
73 SubSystem="1"
74 RandomizedBaseAddress="1"
75 DataExecutionPrevention="0"
76 TargetMachine="1"
77 />
78 <Tool
79 Name="VCALinkTool"
80 />
81 <Tool
82 Name="VCManifestTool"
83 />
84 <Tool
85 Name="VCXDCMakeTool"
86 />
87 <Tool
88 Name="VCBscMakeTool"
89 />
90 <Tool
91 Name="VCFxCopTool"
92 />
93 <Tool
94 Name="VCAppVerifierTool"
95 />
96 <Tool
97 Name="VCPostBuildEventTool"
98 />
99 </Configuration>
100 <Configuration
101 Name="Debug|x64"
102 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
103 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
104 ConfigurationType="1"
105 InheritedPropertySheets=".\shared\FastSTL.vsprops"
106 CharacterSet="2"
107 >
108 <Tool
109 Name="VCPreBuildEventTool"
110 />
111 <Tool
112 Name="VCCustomBuildTool"
113 />
114 <Tool
115 Name="VCXMLDataGeneratorTool"
116 />
117 <Tool
118 Name="VCWebServiceProxyGeneratorTool"
119 />
120 <Tool
121 Name="VCMIDLTool"
122 TargetEnvironment="3"
123 />
124 <Tool
125 Name="VCCLCompilerTool"
126 Optimization="0"
127 AdditionalIncludeDirectories="..\..\include"
128 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
129 MinimalRebuild="true"
130 BasicRuntimeChecks="3"
131 RuntimeLibrary="3"
132 UsePrecompiledHeader="0"
133 WarningLevel="3"
134 Detect64BitPortabilityProblems="false"
135 DebugInformationFormat="3"
136 />
137 <Tool
138 Name="VCManagedResourceCompilerTool"
139 />
140 <Tool
141 Name="VCResourceCompilerTool"
142 />
143 <Tool
144 Name="VCPreLinkEventTool"
145 />
146 <Tool
147 Name="VCLinkerTool"
148 AdditionalDependencies="assimp.lib"
149 OutputFile="$(OutDir)\assimp_debug.exe"
150 LinkIncremental="2"
151 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;"
152 GenerateDebugInformation="true"
153 SubSystem="1"
154 TargetMachine="17"
155 />
156 <Tool
157 Name="VCALinkTool"
158 />
159 <Tool
160 Name="VCManifestTool"
161 />
162 <Tool
163 Name="VCXDCMakeTool"
164 />
165 <Tool
166 Name="VCBscMakeTool"
167 />
168 <Tool
169 Name="VCFxCopTool"
170 />
171 <Tool
172 Name="VCAppVerifierTool"
173 />
174 <Tool
175 Name="VCPostBuildEventTool"
176 />
177 </Configuration>
178 <Configuration
179 Name="Release|Win32"
180 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
181 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
182 ConfigurationType="1"
183 InheritedPropertySheets=".\shared\FastSTL.vsprops"
184 CharacterSet="2"
185 WholeProgramOptimization="1"
186 >
187 <Tool
188 Name="VCPreBuildEventTool"
189 />
190 <Tool
191 Name="VCCustomBuildTool"
192 />
193 <Tool
194 Name="VCXMLDataGeneratorTool"
195 />
196 <Tool
197 Name="VCWebServiceProxyGeneratorTool"
198 />
199 <Tool
200 Name="VCMIDLTool"
201 />
202 <Tool
203 Name="VCCLCompilerTool"
204 AdditionalIncludeDirectories="..\..\include"
205 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
206 RuntimeLibrary="2"
207 UsePrecompiledHeader="0"
208 WarningLevel="3"
209 Detect64BitPortabilityProblems="false"
210 DebugInformationFormat="3"
211 />
212 <Tool
213 Name="VCManagedResourceCompilerTool"
214 />
215 <Tool
216 Name="VCResourceCompilerTool"
217 />
218 <Tool
219 Name="VCPreLinkEventTool"
220 />
221 <Tool
222 Name="VCLinkerTool"
223 AdditionalDependencies="assimp.lib"
224 OutputFile="$(OutDir)\assimp.exe"
225 LinkIncremental="1"
226 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;"
227 GenerateDebugInformation="true"
228 SubSystem="1"
229 OptimizeReferences="2"
230 EnableCOMDATFolding="2"
231 RandomizedBaseAddress="1"
232 DataExecutionPrevention="0"
233 TargetMachine="1"
234 />
235 <Tool
236 Name="VCALinkTool"
237 />
238 <Tool
239 Name="VCManifestTool"
240 />
241 <Tool
242 Name="VCXDCMakeTool"
243 />
244 <Tool
245 Name="VCBscMakeTool"
246 />
247 <Tool
248 Name="VCFxCopTool"
249 />
250 <Tool
251 Name="VCAppVerifierTool"
252 />
253 <Tool
254 Name="VCPostBuildEventTool"
255 />
256 </Configuration>
257 <Configuration
258 Name="Release|x64"
259 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
260 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
261 ConfigurationType="1"
262 InheritedPropertySheets=".\shared\FastSTL.vsprops"
263 CharacterSet="2"
264 WholeProgramOptimization="1"
265 >
266 <Tool
267 Name="VCPreBuildEventTool"
268 />
269 <Tool
270 Name="VCCustomBuildTool"
271 />
272 <Tool
273 Name="VCXMLDataGeneratorTool"
274 />
275 <Tool
276 Name="VCWebServiceProxyGeneratorTool"
277 />
278 <Tool
279 Name="VCMIDLTool"
280 TargetEnvironment="3"
281 />
282 <Tool
283 Name="VCCLCompilerTool"
284 AdditionalIncludeDirectories="..\..\include"
285 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
286 RuntimeLibrary="2"
287 UsePrecompiledHeader="0"
288 WarningLevel="3"
289 Detect64BitPortabilityProblems="false"
290 DebugInformationFormat="3"
291 />
292 <Tool
293 Name="VCManagedResourceCompilerTool"
294 />
295 <Tool
296 Name="VCResourceCompilerTool"
297 />
298 <Tool
299 Name="VCPreLinkEventTool"
300 />
301 <Tool
302 Name="VCLinkerTool"
303 AdditionalDependencies="assimp.lib"
304 OutputFile="$(OutDir)\assimp.exe"
305 LinkIncremental="1"
306 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;"
307 GenerateDebugInformation="true"
308 SubSystem="1"
309 OptimizeReferences="2"
310 EnableCOMDATFolding="2"
311 TargetMachine="17"
312 />
313 <Tool
314 Name="VCALinkTool"
315 />
316 <Tool
317 Name="VCManifestTool"
318 />
319 <Tool
320 Name="VCXDCMakeTool"
321 />
322 <Tool
323 Name="VCBscMakeTool"
324 />
325 <Tool
326 Name="VCFxCopTool"
327 />
328 <Tool
329 Name="VCAppVerifierTool"
330 />
331 <Tool
332 Name="VCPostBuildEventTool"
333 />
334 </Configuration>
335 <Configuration
336 Name="release-dll|Win32"
337 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
338 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
339 ConfigurationType="1"
340 InheritedPropertySheets=".\shared\FastSTL.vsprops"
341 CharacterSet="2"
342 WholeProgramOptimization="1"
343 >
344 <Tool
345 Name="VCPreBuildEventTool"
346 />
347 <Tool
348 Name="VCCustomBuildTool"
349 />
350 <Tool
351 Name="VCXMLDataGeneratorTool"
352 />
353 <Tool
354 Name="VCWebServiceProxyGeneratorTool"
355 />
356 <Tool
357 Name="VCMIDLTool"
358 />
359 <Tool
360 Name="VCCLCompilerTool"
361 AdditionalIncludeDirectories="..\..\include"
362 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
363 RuntimeLibrary="2"
364 UsePrecompiledHeader="0"
365 WarningLevel="3"
366 Detect64BitPortabilityProblems="false"
367 DebugInformationFormat="3"
368 />
369 <Tool
370 Name="VCManagedResourceCompilerTool"
371 />
372 <Tool
373 Name="VCResourceCompilerTool"
374 />
375 <Tool
376 Name="VCPreLinkEventTool"
377 />
378 <Tool
379 Name="VCLinkerTool"
380 AdditionalDependencies="assimp.lib"
381 OutputFile="$(OutDir)\assimp.exe"
382 LinkIncremental="1"
383 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;"
384 GenerateDebugInformation="true"
385 SubSystem="1"
386 OptimizeReferences="2"
387 EnableCOMDATFolding="2"
388 RandomizedBaseAddress="1"
389 DataExecutionPrevention="0"
390 TargetMachine="1"
391 />
392 <Tool
393 Name="VCALinkTool"
394 />
395 <Tool
396 Name="VCManifestTool"
397 />
398 <Tool
399 Name="VCXDCMakeTool"
400 />
401 <Tool
402 Name="VCBscMakeTool"
403 />
404 <Tool
405 Name="VCFxCopTool"
406 />
407 <Tool
408 Name="VCAppVerifierTool"
409 />
410 <Tool
411 Name="VCPostBuildEventTool"
412 />
413 </Configuration>
414 <Configuration
415 Name="release-dll|x64"
416 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
417 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
418 ConfigurationType="1"
419 InheritedPropertySheets=".\shared\FastSTL.vsprops"
420 CharacterSet="2"
421 WholeProgramOptimization="1"
422 >
423 <Tool
424 Name="VCPreBuildEventTool"
425 />
426 <Tool
427 Name="VCCustomBuildTool"
428 />
429 <Tool
430 Name="VCXMLDataGeneratorTool"
431 />
432 <Tool
433 Name="VCWebServiceProxyGeneratorTool"
434 />
435 <Tool
436 Name="VCMIDLTool"
437 TargetEnvironment="3"
438 />
439 <Tool
440 Name="VCCLCompilerTool"
441 AdditionalIncludeDirectories="..\..\include"
442 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
443 RuntimeLibrary="2"
444 UsePrecompiledHeader="0"
445 WarningLevel="3"
446 Detect64BitPortabilityProblems="false"
447 DebugInformationFormat="3"
448 />
449 <Tool
450 Name="VCManagedResourceCompilerTool"
451 />
452 <Tool
453 Name="VCResourceCompilerTool"
454 />
455 <Tool
456 Name="VCPreLinkEventTool"
457 />
458 <Tool
459 Name="VCLinkerTool"
460 AdditionalDependencies="assimp.lib"
461 OutputFile="$(OutDir)\assimp.exe"
462 LinkIncremental="1"
463 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;"
464 GenerateDebugInformation="true"
465 SubSystem="1"
466 OptimizeReferences="2"
467 EnableCOMDATFolding="2"
468 TargetMachine="17"
469 />
470 <Tool
471 Name="VCALinkTool"
472 />
473 <Tool
474 Name="VCManifestTool"
475 />
476 <Tool
477 Name="VCXDCMakeTool"
478 />
479 <Tool
480 Name="VCBscMakeTool"
481 />
482 <Tool
483 Name="VCFxCopTool"
484 />
485 <Tool
486 Name="VCAppVerifierTool"
487 />
488 <Tool
489 Name="VCPostBuildEventTool"
490 />
491 </Configuration>
492 <Configuration
493 Name="release-noboost-st|Win32"
494 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
495 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
496 ConfigurationType="1"
497 InheritedPropertySheets=".\shared\FastSTL.vsprops"
498 CharacterSet="2"
499 WholeProgramOptimization="1"
500 >
501 <Tool
502 Name="VCPreBuildEventTool"
503 />
504 <Tool
505 Name="VCCustomBuildTool"
506 />
507 <Tool
508 Name="VCXMLDataGeneratorTool"
509 />
510 <Tool
511 Name="VCWebServiceProxyGeneratorTool"
512 />
513 <Tool
514 Name="VCMIDLTool"
515 />
516 <Tool
517 Name="VCCLCompilerTool"
518 AdditionalIncludeDirectories="..\..\include;..\..\code\BoostWorkaround"
519 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
520 RuntimeLibrary="2"
521 UsePrecompiledHeader="0"
522 WarningLevel="3"
523 Detect64BitPortabilityProblems="false"
524 DebugInformationFormat="3"
525 />
526 <Tool
527 Name="VCManagedResourceCompilerTool"
528 />
529 <Tool
530 Name="VCResourceCompilerTool"
531 />
532 <Tool
533 Name="VCPreLinkEventTool"
534 />
535 <Tool
536 Name="VCLinkerTool"
537 AdditionalDependencies="assimp.lib"
538 OutputFile="$(OutDir)\assimp.exe"
539 LinkIncremental="1"
540 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;"
541 GenerateDebugInformation="true"
542 SubSystem="1"
543 OptimizeReferences="2"
544 EnableCOMDATFolding="2"
545 RandomizedBaseAddress="1"
546 DataExecutionPrevention="0"
547 TargetMachine="1"
548 />
549 <Tool
550 Name="VCALinkTool"
551 />
552 <Tool
553 Name="VCManifestTool"
554 />
555 <Tool
556 Name="VCXDCMakeTool"
557 />
558 <Tool
559 Name="VCBscMakeTool"
560 />
561 <Tool
562 Name="VCFxCopTool"
563 />
564 <Tool
565 Name="VCAppVerifierTool"
566 />
567 <Tool
568 Name="VCPostBuildEventTool"
569 />
570 </Configuration>
571 <Configuration
572 Name="release-noboost-st|x64"
573 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
574 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
575 ConfigurationType="1"
576 InheritedPropertySheets=".\shared\FastSTL.vsprops"
577 CharacterSet="2"
578 WholeProgramOptimization="1"
579 >
580 <Tool
581 Name="VCPreBuildEventTool"
582 />
583 <Tool
584 Name="VCCustomBuildTool"
585 />
586 <Tool
587 Name="VCXMLDataGeneratorTool"
588 />
589 <Tool
590 Name="VCWebServiceProxyGeneratorTool"
591 />
592 <Tool
593 Name="VCMIDLTool"
594 TargetEnvironment="3"
595 />
596 <Tool
597 Name="VCCLCompilerTool"
598 AdditionalIncludeDirectories="..\..\include"
599 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
600 RuntimeLibrary="2"
601 UsePrecompiledHeader="0"
602 WarningLevel="3"
603 Detect64BitPortabilityProblems="false"
604 DebugInformationFormat="3"
605 />
606 <Tool
607 Name="VCManagedResourceCompilerTool"
608 />
609 <Tool
610 Name="VCResourceCompilerTool"
611 />
612 <Tool
613 Name="VCPreLinkEventTool"
614 />
615 <Tool
616 Name="VCLinkerTool"
617 AdditionalDependencies="assimp.lib"
618 OutputFile="$(OutDir)\assimp.exe"
619 LinkIncremental="1"
620 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;"
621 GenerateDebugInformation="true"
622 SubSystem="1"
623 OptimizeReferences="2"
624 EnableCOMDATFolding="2"
625 TargetMachine="17"
626 />
627 <Tool
628 Name="VCALinkTool"
629 />
630 <Tool
631 Name="VCManifestTool"
632 />
633 <Tool
634 Name="VCXDCMakeTool"
635 />
636 <Tool
637 Name="VCBscMakeTool"
638 />
639 <Tool
640 Name="VCFxCopTool"
641 />
642 <Tool
643 Name="VCAppVerifierTool"
644 />
645 <Tool
646 Name="VCPostBuildEventTool"
647 />
648 </Configuration>
649 <Configuration
650 Name="debug-noboost-st|Win32"
651 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
652 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
653 ConfigurationType="1"
654 InheritedPropertySheets=".\shared\FastSTL.vsprops"
655 CharacterSet="2"
656 >
657 <Tool
658 Name="VCPreBuildEventTool"
659 />
660 <Tool
661 Name="VCCustomBuildTool"
662 />
663 <Tool
664 Name="VCXMLDataGeneratorTool"
665 />
666 <Tool
667 Name="VCWebServiceProxyGeneratorTool"
668 />
669 <Tool
670 Name="VCMIDLTool"
671 />
672 <Tool
673 Name="VCCLCompilerTool"
674 Optimization="0"
675 AdditionalIncludeDirectories="..\..\include;..\..\code\BoostWorkaround"
676 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
677 MinimalRebuild="true"
678 BasicRuntimeChecks="3"
679 RuntimeLibrary="3"
680 UsePrecompiledHeader="0"
681 WarningLevel="3"
682 Detect64BitPortabilityProblems="false"
683 DebugInformationFormat="4"
684 />
685 <Tool
686 Name="VCManagedResourceCompilerTool"
687 />
688 <Tool
689 Name="VCResourceCompilerTool"
690 />
691 <Tool
692 Name="VCPreLinkEventTool"
693 />
694 <Tool
695 Name="VCLinkerTool"
696 AdditionalDependencies="assimp.lib"
697 OutputFile="$(OutDir)\assimp_debug.exe"
698 LinkIncremental="2"
699 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;"
700 GenerateDebugInformation="true"
701 SubSystem="1"
702 RandomizedBaseAddress="1"
703 DataExecutionPrevention="0"
704 TargetMachine="1"
705 />
706 <Tool
707 Name="VCALinkTool"
708 />
709 <Tool
710 Name="VCManifestTool"
711 />
712 <Tool
713 Name="VCXDCMakeTool"
714 />
715 <Tool
716 Name="VCBscMakeTool"
717 />
718 <Tool
719 Name="VCFxCopTool"
720 />
721 <Tool
722 Name="VCAppVerifierTool"
723 />
724 <Tool
725 Name="VCPostBuildEventTool"
726 />
727 </Configuration>
728 <Configuration
729 Name="debug-noboost-st|x64"
730 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
731 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
732 ConfigurationType="1"
733 InheritedPropertySheets=".\shared\FastSTL.vsprops"
734 CharacterSet="2"
735 >
736 <Tool
737 Name="VCPreBuildEventTool"
738 />
739 <Tool
740 Name="VCCustomBuildTool"
741 />
742 <Tool
743 Name="VCXMLDataGeneratorTool"
744 />
745 <Tool
746 Name="VCWebServiceProxyGeneratorTool"
747 />
748 <Tool
749 Name="VCMIDLTool"
750 TargetEnvironment="3"
751 />
752 <Tool
753 Name="VCCLCompilerTool"
754 Optimization="0"
755 AdditionalIncludeDirectories="..\..\include"
756 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
757 MinimalRebuild="true"
758 BasicRuntimeChecks="3"
759 RuntimeLibrary="3"
760 UsePrecompiledHeader="0"
761 WarningLevel="3"
762 Detect64BitPortabilityProblems="false"
763 DebugInformationFormat="3"
764 />
765 <Tool
766 Name="VCManagedResourceCompilerTool"
767 />
768 <Tool
769 Name="VCResourceCompilerTool"
770 />
771 <Tool
772 Name="VCPreLinkEventTool"
773 />
774 <Tool
775 Name="VCLinkerTool"
776 AdditionalDependencies="assimp.lib"
777 OutputFile="$(OutDir)\assimp_debug.exe"
778 LinkIncremental="2"
779 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;"
780 GenerateDebugInformation="true"
781 SubSystem="1"
782 TargetMachine="17"
783 />
784 <Tool
785 Name="VCALinkTool"
786 />
787 <Tool
788 Name="VCManifestTool"
789 />
790 <Tool
791 Name="VCXDCMakeTool"
792 />
793 <Tool
794 Name="VCBscMakeTool"
795 />
796 <Tool
797 Name="VCFxCopTool"
798 />
799 <Tool
800 Name="VCAppVerifierTool"
801 />
802 <Tool
803 Name="VCPostBuildEventTool"
804 />
805 </Configuration>
806 <Configuration
807 Name="debug-dll|Win32"
808 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
809 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
810 ConfigurationType="1"
811 InheritedPropertySheets=".\shared\FastSTL.vsprops"
812 CharacterSet="2"
813 >
814 <Tool
815 Name="VCPreBuildEventTool"
816 />
817 <Tool
818 Name="VCCustomBuildTool"
819 />
820 <Tool
821 Name="VCXMLDataGeneratorTool"
822 />
823 <Tool
824 Name="VCWebServiceProxyGeneratorTool"
825 />
826 <Tool
827 Name="VCMIDLTool"
828 />
829 <Tool
830 Name="VCCLCompilerTool"
831 Optimization="0"
832 AdditionalIncludeDirectories="..\..\include"
833 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
834 MinimalRebuild="true"
835 BasicRuntimeChecks="3"
836 RuntimeLibrary="3"
837 UsePrecompiledHeader="0"
838 WarningLevel="3"
839 Detect64BitPortabilityProblems="false"
840 DebugInformationFormat="4"
841 />
842 <Tool
843 Name="VCManagedResourceCompilerTool"
844 />
845 <Tool
846 Name="VCResourceCompilerTool"
847 />
848 <Tool
849 Name="VCPreLinkEventTool"
850 />
851 <Tool
852 Name="VCLinkerTool"
853 AdditionalDependencies="assimp.lib"
854 OutputFile="$(OutDir)\assimp_debug.exe"
855 LinkIncremental="2"
856 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;"
857 GenerateDebugInformation="true"
858 SubSystem="1"
859 RandomizedBaseAddress="1"
860 DataExecutionPrevention="0"
861 TargetMachine="1"
862 />
863 <Tool
864 Name="VCALinkTool"
865 />
866 <Tool
867 Name="VCManifestTool"
868 />
869 <Tool
870 Name="VCXDCMakeTool"
871 />
872 <Tool
873 Name="VCBscMakeTool"
874 />
875 <Tool
876 Name="VCFxCopTool"
877 />
878 <Tool
879 Name="VCAppVerifierTool"
880 />
881 <Tool
882 Name="VCPostBuildEventTool"
883 />
884 </Configuration>
885 <Configuration
886 Name="debug-dll|x64"
887 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
888 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
889 ConfigurationType="1"
890 InheritedPropertySheets=".\shared\FastSTL.vsprops"
891 CharacterSet="2"
892 >
893 <Tool
894 Name="VCPreBuildEventTool"
895 />
896 <Tool
897 Name="VCCustomBuildTool"
898 />
899 <Tool
900 Name="VCXMLDataGeneratorTool"
901 />
902 <Tool
903 Name="VCWebServiceProxyGeneratorTool"
904 />
905 <Tool
906 Name="VCMIDLTool"
907 TargetEnvironment="3"
908 />
909 <Tool
910 Name="VCCLCompilerTool"
911 Optimization="0"
912 AdditionalIncludeDirectories="..\..\include"
913 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
914 MinimalRebuild="true"
915 BasicRuntimeChecks="3"
916 RuntimeLibrary="3"
917 UsePrecompiledHeader="0"
918 WarningLevel="3"
919 Detect64BitPortabilityProblems="false"
920 DebugInformationFormat="3"
921 />
922 <Tool
923 Name="VCManagedResourceCompilerTool"
924 />
925 <Tool
926 Name="VCResourceCompilerTool"
927 />
928 <Tool
929 Name="VCPreLinkEventTool"
930 />
931 <Tool
932 Name="VCLinkerTool"
933 AdditionalDependencies="assimp.lib"
934 OutputFile="$(OutDir)\assimp_debug.exe"
935 LinkIncremental="2"
936 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;"
937 GenerateDebugInformation="true"
938 SubSystem="1"
939 TargetMachine="17"
940 />
941 <Tool
942 Name="VCALinkTool"
943 />
944 <Tool
945 Name="VCManifestTool"
946 />
947 <Tool
948 Name="VCXDCMakeTool"
949 />
950 <Tool
951 Name="VCBscMakeTool"
952 />
953 <Tool
954 Name="VCFxCopTool"
955 />
956 <Tool
957 Name="VCAppVerifierTool"
958 />
959 <Tool
960 Name="VCPostBuildEventTool"
961 />
962 </Configuration>
963 <Configuration
964 Name="debug-st|Win32"
965 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
966 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
967 ConfigurationType="1"
968 InheritedPropertySheets=".\shared\FastSTL.vsprops"
969 CharacterSet="2"
970 >
971 <Tool
972 Name="VCPreBuildEventTool"
973 />
974 <Tool
975 Name="VCCustomBuildTool"
976 />
977 <Tool
978 Name="VCXMLDataGeneratorTool"
979 />
980 <Tool
981 Name="VCWebServiceProxyGeneratorTool"
982 />
983 <Tool
984 Name="VCMIDLTool"
985 />
986 <Tool
987 Name="VCCLCompilerTool"
988 Optimization="0"
989 AdditionalIncludeDirectories="..\..\include"
990 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
991 MinimalRebuild="true"
992 BasicRuntimeChecks="3"
993 RuntimeLibrary="3"
994 UsePrecompiledHeader="0"
995 WarningLevel="3"
996 Detect64BitPortabilityProblems="false"
997 DebugInformationFormat="4"
998 />
999 <Tool
1000 Name="VCManagedResourceCompilerTool"
1001 />
1002 <Tool
1003 Name="VCResourceCompilerTool"
1004 />
1005 <Tool
1006 Name="VCPreLinkEventTool"
1007 />
1008 <Tool
1009 Name="VCLinkerTool"
1010 AdditionalDependencies="assimp.lib"
1011 OutputFile="$(OutDir)\assimp_debug.exe"
1012 LinkIncremental="2"
1013 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;"
1014 GenerateDebugInformation="true"
1015 SubSystem="1"
1016 RandomizedBaseAddress="1"
1017 DataExecutionPrevention="0"
1018 TargetMachine="1"
1019 />
1020 <Tool
1021 Name="VCALinkTool"
1022 />
1023 <Tool
1024 Name="VCManifestTool"
1025 />
1026 <Tool
1027 Name="VCXDCMakeTool"
1028 />
1029 <Tool
1030 Name="VCBscMakeTool"
1031 />
1032 <Tool
1033 Name="VCFxCopTool"
1034 />
1035 <Tool
1036 Name="VCAppVerifierTool"
1037 />
1038 <Tool
1039 Name="VCPostBuildEventTool"
1040 />
1041 </Configuration>
1042 <Configuration
1043 Name="debug-st|x64"
1044 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
1045 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
1046 ConfigurationType="1"
1047 InheritedPropertySheets=".\shared\FastSTL.vsprops"
1048 CharacterSet="2"
1049 >
1050 <Tool
1051 Name="VCPreBuildEventTool"
1052 />
1053 <Tool
1054 Name="VCCustomBuildTool"
1055 />
1056 <Tool
1057 Name="VCXMLDataGeneratorTool"
1058 />
1059 <Tool
1060 Name="VCWebServiceProxyGeneratorTool"
1061 />
1062 <Tool
1063 Name="VCMIDLTool"
1064 TargetEnvironment="3"
1065 />
1066 <Tool
1067 Name="VCCLCompilerTool"
1068 Optimization="0"
1069 AdditionalIncludeDirectories="..\..\include"
1070 PreprocessorDefinitions="WIN32;_DEBUG;_CONSOLE"
1071 MinimalRebuild="true"
1072 BasicRuntimeChecks="3"
1073 RuntimeLibrary="3"
1074 UsePrecompiledHeader="0"
1075 WarningLevel="3"
1076 Detect64BitPortabilityProblems="false"
1077 DebugInformationFormat="3"
1078 />
1079 <Tool
1080 Name="VCManagedResourceCompilerTool"
1081 />
1082 <Tool
1083 Name="VCResourceCompilerTool"
1084 />
1085 <Tool
1086 Name="VCPreLinkEventTool"
1087 />
1088 <Tool
1089 Name="VCLinkerTool"
1090 AdditionalDependencies="assimp.lib"
1091 OutputFile="$(OutDir)\assimp_debug.exe"
1092 LinkIncremental="2"
1093 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;"
1094 GenerateDebugInformation="true"
1095 SubSystem="1"
1096 TargetMachine="17"
1097 />
1098 <Tool
1099 Name="VCALinkTool"
1100 />
1101 <Tool
1102 Name="VCManifestTool"
1103 />
1104 <Tool
1105 Name="VCXDCMakeTool"
1106 />
1107 <Tool
1108 Name="VCBscMakeTool"
1109 />
1110 <Tool
1111 Name="VCFxCopTool"
1112 />
1113 <Tool
1114 Name="VCAppVerifierTool"
1115 />
1116 <Tool
1117 Name="VCPostBuildEventTool"
1118 />
1119 </Configuration>
1120 <Configuration
1121 Name="release-st|Win32"
1122 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
1123 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
1124 ConfigurationType="1"
1125 InheritedPropertySheets=".\shared\FastSTL.vsprops"
1126 CharacterSet="2"
1127 WholeProgramOptimization="1"
1128 >
1129 <Tool
1130 Name="VCPreBuildEventTool"
1131 />
1132 <Tool
1133 Name="VCCustomBuildTool"
1134 />
1135 <Tool
1136 Name="VCXMLDataGeneratorTool"
1137 />
1138 <Tool
1139 Name="VCWebServiceProxyGeneratorTool"
1140 />
1141 <Tool
1142 Name="VCMIDLTool"
1143 />
1144 <Tool
1145 Name="VCCLCompilerTool"
1146 AdditionalIncludeDirectories="..\..\include"
1147 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
1148 RuntimeLibrary="2"
1149 UsePrecompiledHeader="0"
1150 WarningLevel="3"
1151 Detect64BitPortabilityProblems="false"
1152 DebugInformationFormat="3"
1153 />
1154 <Tool
1155 Name="VCManagedResourceCompilerTool"
1156 />
1157 <Tool
1158 Name="VCResourceCompilerTool"
1159 />
1160 <Tool
1161 Name="VCPreLinkEventTool"
1162 />
1163 <Tool
1164 Name="VCLinkerTool"
1165 AdditionalDependencies="assimp.lib"
1166 OutputFile="$(OutDir)\assimp.exe"
1167 LinkIncremental="1"
1168 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;"
1169 GenerateDebugInformation="true"
1170 SubSystem="1"
1171 OptimizeReferences="2"
1172 EnableCOMDATFolding="2"
1173 RandomizedBaseAddress="1"
1174 DataExecutionPrevention="0"
1175 TargetMachine="1"
1176 />
1177 <Tool
1178 Name="VCALinkTool"
1179 />
1180 <Tool
1181 Name="VCManifestTool"
1182 />
1183 <Tool
1184 Name="VCXDCMakeTool"
1185 />
1186 <Tool
1187 Name="VCBscMakeTool"
1188 />
1189 <Tool
1190 Name="VCFxCopTool"
1191 />
1192 <Tool
1193 Name="VCAppVerifierTool"
1194 />
1195 <Tool
1196 Name="VCPostBuildEventTool"
1197 />
1198 </Configuration>
1199 <Configuration
1200 Name="release-st|x64"
1201 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
1202 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
1203 ConfigurationType="1"
1204 InheritedPropertySheets=".\shared\FastSTL.vsprops"
1205 CharacterSet="2"
1206 WholeProgramOptimization="1"
1207 >
1208 <Tool
1209 Name="VCPreBuildEventTool"
1210 />
1211 <Tool
1212 Name="VCCustomBuildTool"
1213 />
1214 <Tool
1215 Name="VCXMLDataGeneratorTool"
1216 />
1217 <Tool
1218 Name="VCWebServiceProxyGeneratorTool"
1219 />
1220 <Tool
1221 Name="VCMIDLTool"
1222 TargetEnvironment="3"
1223 />
1224 <Tool
1225 Name="VCCLCompilerTool"
1226 AdditionalIncludeDirectories="..\..\include"
1227 PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
1228 RuntimeLibrary="2"
1229 UsePrecompiledHeader="0"
1230 WarningLevel="3"
1231 Detect64BitPortabilityProblems="false"
1232 DebugInformationFormat="3"
1233 />
1234 <Tool
1235 Name="VCManagedResourceCompilerTool"
1236 />
1237 <Tool
1238 Name="VCResourceCompilerTool"
1239 />
1240 <Tool
1241 Name="VCPreLinkEventTool"
1242 />
1243 <Tool
1244 Name="VCLinkerTool"
1245 AdditionalDependencies="assimp.lib"
1246 OutputFile="$(OutDir)\assimp.exe"
1247 LinkIncremental="1"
1248 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;"
1249 GenerateDebugInformation="true"
1250 SubSystem="1"
1251 OptimizeReferences="2"
1252 EnableCOMDATFolding="2"
1253 TargetMachine="17"
1254 />
1255 <Tool
1256 Name="VCALinkTool"
1257 />
1258 <Tool
1259 Name="VCManifestTool"
1260 />
1261 <Tool
1262 Name="VCXDCMakeTool"
1263 />
1264 <Tool
1265 Name="VCBscMakeTool"
1266 />
1267 <Tool
1268 Name="VCFxCopTool"
1269 />
1270 <Tool
1271 Name="VCAppVerifierTool"
1272 />
1273 <Tool
1274 Name="VCPostBuildEventTool"
1275 />
1276 </Configuration>
1277 </Configurations>
1278 <References>
1279 </References>
1280 <Files>
1281 <Filter
1282 Name="resources"
1283 Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
1284 UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
1285 >
1286 <File
1287 RelativePath="..\..\tools\assimp_cmd\assimp_cmd.rc"
1288 >
1289 <FileConfiguration
1290 Name="Debug|Win32"
1291 >
1292 <Tool
1293 Name="VCResourceCompilerTool"
1294 AdditionalIncludeDirectories="./"
1295 />
1296 </FileConfiguration>
1297 <FileConfiguration
1298 Name="Debug|x64"
1299 >
1300 <Tool
1301 Name="VCResourceCompilerTool"
1302 AdditionalIncludeDirectories="./"
1303 />
1304 </FileConfiguration>
1305 <FileConfiguration
1306 Name="Release|Win32"
1307 >
1308 <Tool
1309 Name="VCResourceCompilerTool"
1310 AdditionalIncludeDirectories="./"
1311 />
1312 </FileConfiguration>
1313 <FileConfiguration
1314 Name="Release|x64"
1315 >
1316 <Tool
1317 Name="VCResourceCompilerTool"
1318 AdditionalIncludeDirectories="./"
1319 />
1320 </FileConfiguration>
1321 <FileConfiguration
1322 Name="release-dll|Win32"
1323 >
1324 <Tool
1325 Name="VCResourceCompilerTool"
1326 AdditionalIncludeDirectories="./"
1327 />
1328 </FileConfiguration>
1329 <FileConfiguration
1330 Name="release-dll|x64"
1331 >
1332 <Tool
1333 Name="VCResourceCompilerTool"
1334 AdditionalIncludeDirectories="./"
1335 />
1336 </FileConfiguration>
1337 <FileConfiguration
1338 Name="release-noboost-st|Win32"
1339 >
1340 <Tool
1341 Name="VCResourceCompilerTool"
1342 AdditionalIncludeDirectories="./"
1343 />
1344 </FileConfiguration>
1345 <FileConfiguration
1346 Name="release-noboost-st|x64"
1347 >
1348 <Tool
1349 Name="VCResourceCompilerTool"
1350 AdditionalIncludeDirectories="./"
1351 />
1352 </FileConfiguration>
1353 <FileConfiguration
1354 Name="debug-noboost-st|Win32"
1355 >
1356 <Tool
1357 Name="VCResourceCompilerTool"
1358 AdditionalIncludeDirectories="./"
1359 />
1360 </FileConfiguration>
1361 <FileConfiguration
1362 Name="debug-noboost-st|x64"
1363 >
1364 <Tool
1365 Name="VCResourceCompilerTool"
1366 AdditionalIncludeDirectories="./"
1367 />
1368 </FileConfiguration>
1369 <FileConfiguration
1370 Name="debug-dll|Win32"
1371 >
1372 <Tool
1373 Name="VCResourceCompilerTool"
1374 AdditionalIncludeDirectories="./"
1375 />
1376 </FileConfiguration>
1377 <FileConfiguration
1378 Name="debug-dll|x64"
1379 >
1380 <Tool
1381 Name="VCResourceCompilerTool"
1382 AdditionalIncludeDirectories="./"
1383 />
1384 </FileConfiguration>
1385 <FileConfiguration
1386 Name="debug-st|Win32"
1387 >
1388 <Tool
1389 Name="VCResourceCompilerTool"
1390 AdditionalIncludeDirectories="./"
1391 />
1392 </FileConfiguration>
1393 <FileConfiguration
1394 Name="debug-st|x64"
1395 >
1396 <Tool
1397 Name="VCResourceCompilerTool"
1398 AdditionalIncludeDirectories="./"
1399 />
1400 </FileConfiguration>
1401 <FileConfiguration
1402 Name="release-st|Win32"
1403 >
1404 <Tool
1405 Name="VCResourceCompilerTool"
1406 AdditionalIncludeDirectories="./"
1407 />
1408 </FileConfiguration>
1409 <FileConfiguration
1410 Name="release-st|x64"
1411 >
1412 <Tool
1413 Name="VCResourceCompilerTool"
1414 AdditionalIncludeDirectories="./"
1415 />
1416 </FileConfiguration>
1417 </File>
1418 </Filter>
1419 <Filter
1420 Name="source"
1421 Filter="h;hpp;hxx;hm;inl;inc;xsd"
1422 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
1423 >
1424 <File
1425 RelativePath="..\..\tools\assimp_cmd\CompareDump.cpp"
1426 >
1427 </File>
1428 <File
1429 RelativePath="..\..\tools\assimp_cmd\Export.cpp"
1430 >
1431 </File>
1432 <File
1433 RelativePath="..\..\tools\assimp_cmd\ImageExtractor.cpp"
1434 >
1435 </File>
1436 <File
1437 RelativePath="..\..\tools\assimp_cmd\Info.cpp"
1438 >
1439 </File>
1440 <File
1441 RelativePath="..\..\tools\assimp_cmd\Main.cpp"
1442 >
1443 </File>
1444 <File
1445 RelativePath="..\..\tools\assimp_cmd\Main.h"
1446 >
1447 </File>
1448 <File
1449 RelativePath="..\..\tools\assimp_cmd\WriteDumb.cpp"
1450 >
1451 </File>
1452 <Filter
1453 Name="zlib"
1454 >
1455 <File
1456 RelativePath="..\..\contrib\zlib\adler32.c"
1457 >
1458 </File>
1459 <File
1460 RelativePath="..\..\contrib\zlib\compress.c"
1461 >
1462 </File>
1463 <File
1464 RelativePath="..\..\contrib\zlib\crc32.c"
1465 >
1466 </File>
1467 <File
1468 RelativePath="..\..\contrib\zlib\deflate.c"
1469 >
1470 </File>
1471 <File
1472 RelativePath="..\..\contrib\zlib\trees.c"
1473 >
1474 </File>
1475 <File
1476 RelativePath="..\..\contrib\zlib\zutil.c"
1477 >
1478 <FileConfiguration
1479 Name="Debug|Win32"
1480 >
1481 <Tool
1482 Name="VCCLCompilerTool"
1483 CompileAs="1"
1484 />
1485 </FileConfiguration>
1486 </File>
1487 </Filter>
1488 </Filter>
1489 </Files>
1490 <Globals>
1491 </Globals>
1492 </VisualStudioProject>
+0
-1642
workspaces/vc9/assimp_view.vcproj less more
0 <?xml version="1.0" encoding="Windows-1252"?>
1 <VisualStudioProject
2 ProjectType="Visual C++"
3 Version="9.00"
4 Name="assimpview"
5 ProjectGUID="{B17B959B-BB8A-4596-AF0F-A8C8DBBC3C5E}"
6 RootNamespace="assimp_view"
7 Keyword="Win32Proj"
8 TargetFrameworkVersion="131072"
9 >
10 <Platforms>
11 <Platform
12 Name="Win32"
13 />
14 <Platform
15 Name="x64"
16 />
17 </Platforms>
18 <ToolFiles>
19 </ToolFiles>
20 <Configurations>
21 <Configuration
22 Name="debug|Win32"
23 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
24 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
25 ConfigurationType="1"
26 InheritedPropertySheets=".\shared\FastSTL.vsprops"
27 CharacterSet="2"
28 >
29 <Tool
30 Name="VCPreBuildEventTool"
31 />
32 <Tool
33 Name="VCCustomBuildTool"
34 />
35 <Tool
36 Name="VCXMLDataGeneratorTool"
37 />
38 <Tool
39 Name="VCWebServiceProxyGeneratorTool"
40 />
41 <Tool
42 Name="VCMIDLTool"
43 />
44 <Tool
45 Name="VCCLCompilerTool"
46 Optimization="0"
47 AdditionalIncludeDirectories="&quot;$(DXSDK_DIR)include&quot;;..\..\include;..\..\code"
48 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"
49 MinimalRebuild="true"
50 BasicRuntimeChecks="3"
51 SmallerTypeCheck="true"
52 RuntimeLibrary="3"
53 EnableFunctionLevelLinking="true"
54 UsePrecompiledHeader="2"
55 WarningLevel="3"
56 Detect64BitPortabilityProblems="true"
57 DebugInformationFormat="4"
58 />
59 <Tool
60 Name="VCManagedResourceCompilerTool"
61 />
62 <Tool
63 Name="VCResourceCompilerTool"
64 />
65 <Tool
66 Name="VCPreLinkEventTool"
67 />
68 <Tool
69 Name="VCLinkerTool"
70 AdditionalDependencies="d3d9.lib d3dx9.lib comdlg32.lib assimp.lib winmm.lib comctl32.lib user32.lib advapi32.lib shell32.lib Gdi32.lib"
71 OutputFile="$(OutDir)\assimp_view_debug.exe"
72 LinkIncremental="2"
73 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;;&quot;$(DXSDK_DIR)lib\x86&quot;"
74 GenerateDebugInformation="true"
75 SubSystem="2"
76 RandomizedBaseAddress="1"
77 DataExecutionPrevention="0"
78 TargetMachine="1"
79 />
80 <Tool
81 Name="VCALinkTool"
82 />
83 <Tool
84 Name="VCManifestTool"
85 />
86 <Tool
87 Name="VCXDCMakeTool"
88 />
89 <Tool
90 Name="VCBscMakeTool"
91 />
92 <Tool
93 Name="VCFxCopTool"
94 />
95 <Tool
96 Name="VCAppVerifierTool"
97 />
98 <Tool
99 Name="VCPostBuildEventTool"
100 />
101 </Configuration>
102 <Configuration
103 Name="debug|x64"
104 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
105 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
106 ConfigurationType="1"
107 CharacterSet="2"
108 >
109 <Tool
110 Name="VCPreBuildEventTool"
111 />
112 <Tool
113 Name="VCCustomBuildTool"
114 />
115 <Tool
116 Name="VCXMLDataGeneratorTool"
117 />
118 <Tool
119 Name="VCWebServiceProxyGeneratorTool"
120 />
121 <Tool
122 Name="VCMIDLTool"
123 TargetEnvironment="3"
124 />
125 <Tool
126 Name="VCCLCompilerTool"
127 Optimization="0"
128 AdditionalIncludeDirectories="&quot;$(DXSDK_DIR)include&quot;;..\..\include;..\..\code"
129 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"
130 MinimalRebuild="true"
131 BasicRuntimeChecks="3"
132 SmallerTypeCheck="true"
133 RuntimeLibrary="3"
134 EnableFunctionLevelLinking="true"
135 UsePrecompiledHeader="2"
136 WarningLevel="3"
137 Detect64BitPortabilityProblems="false"
138 DebugInformationFormat="3"
139 />
140 <Tool
141 Name="VCManagedResourceCompilerTool"
142 />
143 <Tool
144 Name="VCResourceCompilerTool"
145 />
146 <Tool
147 Name="VCPreLinkEventTool"
148 />
149 <Tool
150 Name="VCLinkerTool"
151 AdditionalDependencies="d3d9.lib d3dx9.lib comdlg32.lib assimp.lib winmm.lib comctl32.lib user32.lib advapi32.lib shell32.lib Gdi32.lib"
152 OutputFile="$(OutDir)\assimp_view_debug.exe"
153 LinkIncremental="2"
154 AdditionalLibraryDirectories="..\..\lib\assimp_$(ConfigurationName)_$(PlatformName);&quot;$(DXSDK_DIR)lib\x64&quot;"
155 GenerateDebugInformation="true"
156 SubSystem="2"
157 TargetMachine="17"
158 />
159 <Tool
160 Name="VCALinkTool"
161 />
162 <Tool
163 Name="VCManifestTool"
164 />
165 <Tool
166 Name="VCXDCMakeTool"
167 />
168 <Tool
169 Name="VCBscMakeTool"
170 />
171 <Tool
172 Name="VCFxCopTool"
173 />
174 <Tool
175 Name="VCAppVerifierTool"
176 />
177 <Tool
178 Name="VCPostBuildEventTool"
179 />
180 </Configuration>
181 <Configuration
182 Name="release|Win32"
183 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
184 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
185 ConfigurationType="1"
186 InheritedPropertySheets=".\shared\FastSTL.vsprops"
187 CharacterSet="2"
188 WholeProgramOptimization="1"
189 >
190 <Tool
191 Name="VCPreBuildEventTool"
192 />
193 <Tool
194 Name="VCCustomBuildTool"
195 />
196 <Tool
197 Name="VCXMLDataGeneratorTool"
198 />
199 <Tool
200 Name="VCWebServiceProxyGeneratorTool"
201 />
202 <Tool
203 Name="VCMIDLTool"
204 />
205 <Tool
206 Name="VCCLCompilerTool"
207 AdditionalIncludeDirectories="&quot;$(DXSDK_DIR)include&quot;;..\..\include;..\..\code"
208 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS;_SECURE_SCL=0"
209 RuntimeLibrary="2"
210 UsePrecompiledHeader="2"
211 WarningLevel="3"
212 Detect64BitPortabilityProblems="true"
213 DebugInformationFormat="3"
214 />
215 <Tool
216 Name="VCManagedResourceCompilerTool"
217 />
218 <Tool
219 Name="VCResourceCompilerTool"
220 />
221 <Tool
222 Name="VCPreLinkEventTool"
223 />
224 <Tool
225 Name="VCLinkerTool"
226 AdditionalDependencies="d3d9.lib d3dx9.lib comdlg32.lib assimp.lib winmm.lib comctl32.lib user32.lib advapi32.lib shell32.lib Gdi32.lib"
227 OutputFile="$(OutDir)\assimp_view.exe"
228 LinkIncremental="1"
229 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;;&quot;$(DXSDK_DIR)lib\x86&quot;"
230 IgnoreAllDefaultLibraries="false"
231 IgnoreDefaultLibraryNames=""
232 GenerateDebugInformation="true"
233 SubSystem="2"
234 OptimizeReferences="2"
235 EnableCOMDATFolding="2"
236 RandomizedBaseAddress="1"
237 DataExecutionPrevention="0"
238 TargetMachine="1"
239 />
240 <Tool
241 Name="VCALinkTool"
242 />
243 <Tool
244 Name="VCManifestTool"
245 />
246 <Tool
247 Name="VCXDCMakeTool"
248 />
249 <Tool
250 Name="VCBscMakeTool"
251 />
252 <Tool
253 Name="VCFxCopTool"
254 />
255 <Tool
256 Name="VCAppVerifierTool"
257 />
258 <Tool
259 Name="VCPostBuildEventTool"
260 />
261 </Configuration>
262 <Configuration
263 Name="release|x64"
264 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
265 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
266 ConfigurationType="1"
267 CharacterSet="2"
268 WholeProgramOptimization="1"
269 >
270 <Tool
271 Name="VCPreBuildEventTool"
272 />
273 <Tool
274 Name="VCCustomBuildTool"
275 />
276 <Tool
277 Name="VCXMLDataGeneratorTool"
278 />
279 <Tool
280 Name="VCWebServiceProxyGeneratorTool"
281 />
282 <Tool
283 Name="VCMIDLTool"
284 TargetEnvironment="3"
285 />
286 <Tool
287 Name="VCCLCompilerTool"
288 AdditionalIncludeDirectories="&quot;$(DXSDK_DIR)include&quot;;..\..\include;..\..\code"
289 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"
290 RuntimeLibrary="2"
291 UsePrecompiledHeader="2"
292 WarningLevel="3"
293 Detect64BitPortabilityProblems="true"
294 DebugInformationFormat="3"
295 />
296 <Tool
297 Name="VCManagedResourceCompilerTool"
298 />
299 <Tool
300 Name="VCResourceCompilerTool"
301 />
302 <Tool
303 Name="VCPreLinkEventTool"
304 />
305 <Tool
306 Name="VCLinkerTool"
307 AdditionalDependencies="d3d9.lib d3dx9.lib comdlg32.lib assimp.lib winmm.lib comctl32.lib user32.lib advapi32.lib shell32.lib Gdi32.lib"
308 OutputFile="$(OutDir)\assimp_view.exe"
309 LinkIncremental="1"
310 AdditionalLibraryDirectories="..\..\lib\assimp_$(ConfigurationName)_$(PlatformName);&quot;$(DXSDK_DIR)lib\x64&quot;"
311 IgnoreAllDefaultLibraries="false"
312 IgnoreDefaultLibraryNames=""
313 GenerateDebugInformation="true"
314 SubSystem="2"
315 OptimizeReferences="2"
316 EnableCOMDATFolding="2"
317 TargetMachine="17"
318 />
319 <Tool
320 Name="VCALinkTool"
321 />
322 <Tool
323 Name="VCManifestTool"
324 />
325 <Tool
326 Name="VCXDCMakeTool"
327 />
328 <Tool
329 Name="VCBscMakeTool"
330 />
331 <Tool
332 Name="VCFxCopTool"
333 />
334 <Tool
335 Name="VCAppVerifierTool"
336 />
337 <Tool
338 Name="VCPostBuildEventTool"
339 />
340 </Configuration>
341 <Configuration
342 Name="release-dll|Win32"
343 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
344 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
345 ConfigurationType="1"
346 CharacterSet="2"
347 WholeProgramOptimization="1"
348 >
349 <Tool
350 Name="VCPreBuildEventTool"
351 />
352 <Tool
353 Name="VCCustomBuildTool"
354 />
355 <Tool
356 Name="VCXMLDataGeneratorTool"
357 />
358 <Tool
359 Name="VCWebServiceProxyGeneratorTool"
360 />
361 <Tool
362 Name="VCMIDLTool"
363 />
364 <Tool
365 Name="VCCLCompilerTool"
366 AdditionalIncludeDirectories="&quot;$(DXSDK_DIR)include&quot;;..\..\include;..\..\code"
367 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"
368 RuntimeLibrary="2"
369 UsePrecompiledHeader="2"
370 WarningLevel="3"
371 Detect64BitPortabilityProblems="true"
372 DebugInformationFormat="3"
373 />
374 <Tool
375 Name="VCManagedResourceCompilerTool"
376 />
377 <Tool
378 Name="VCResourceCompilerTool"
379 />
380 <Tool
381 Name="VCPreLinkEventTool"
382 />
383 <Tool
384 Name="VCLinkerTool"
385 AdditionalDependencies="d3d9.lib d3dx9.lib comdlg32.lib assimp.lib winmm.lib comctl32.lib user32.lib advapi32.lib shell32.lib Gdi32.lib"
386 OutputFile="$(OutDir)\assimp_view.exe"
387 LinkIncremental="1"
388 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;;&quot;$(DXSDK_DIR)lib\x86&quot;"
389 IgnoreAllDefaultLibraries="false"
390 IgnoreDefaultLibraryNames=""
391 GenerateDebugInformation="true"
392 SubSystem="2"
393 OptimizeReferences="2"
394 EnableCOMDATFolding="2"
395 RandomizedBaseAddress="1"
396 DataExecutionPrevention="0"
397 TargetMachine="1"
398 />
399 <Tool
400 Name="VCALinkTool"
401 />
402 <Tool
403 Name="VCManifestTool"
404 />
405 <Tool
406 Name="VCXDCMakeTool"
407 />
408 <Tool
409 Name="VCBscMakeTool"
410 />
411 <Tool
412 Name="VCFxCopTool"
413 />
414 <Tool
415 Name="VCAppVerifierTool"
416 />
417 <Tool
418 Name="VCPostBuildEventTool"
419 />
420 </Configuration>
421 <Configuration
422 Name="release-dll|x64"
423 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
424 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
425 ConfigurationType="1"
426 CharacterSet="2"
427 WholeProgramOptimization="1"
428 >
429 <Tool
430 Name="VCPreBuildEventTool"
431 />
432 <Tool
433 Name="VCCustomBuildTool"
434 />
435 <Tool
436 Name="VCXMLDataGeneratorTool"
437 />
438 <Tool
439 Name="VCWebServiceProxyGeneratorTool"
440 />
441 <Tool
442 Name="VCMIDLTool"
443 TargetEnvironment="3"
444 />
445 <Tool
446 Name="VCCLCompilerTool"
447 AdditionalIncludeDirectories="&quot;$(DXSDK_DIR)include&quot;;..\..\include;..\..\code"
448 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"
449 RuntimeLibrary="2"
450 UsePrecompiledHeader="2"
451 WarningLevel="3"
452 Detect64BitPortabilityProblems="true"
453 DebugInformationFormat="3"
454 />
455 <Tool
456 Name="VCManagedResourceCompilerTool"
457 />
458 <Tool
459 Name="VCResourceCompilerTool"
460 />
461 <Tool
462 Name="VCPreLinkEventTool"
463 />
464 <Tool
465 Name="VCLinkerTool"
466 AdditionalDependencies="d3d9.lib d3dx9.lib comdlg32.lib assimp.lib winmm.lib comctl32.lib user32.lib advapi32.lib shell32.lib Gdi32.lib"
467 OutputFile="$(OutDir)\assimp_view.exe"
468 LinkIncremental="1"
469 AdditionalLibraryDirectories="..\..\lib\assimp_$(ConfigurationName)_$(PlatformName);&quot;$(DXSDK_DIR)lib\x64&quot;"
470 IgnoreAllDefaultLibraries="false"
471 IgnoreDefaultLibraryNames=""
472 GenerateDebugInformation="true"
473 SubSystem="2"
474 OptimizeReferences="2"
475 EnableCOMDATFolding="2"
476 TargetMachine="17"
477 />
478 <Tool
479 Name="VCALinkTool"
480 />
481 <Tool
482 Name="VCManifestTool"
483 />
484 <Tool
485 Name="VCXDCMakeTool"
486 />
487 <Tool
488 Name="VCBscMakeTool"
489 />
490 <Tool
491 Name="VCFxCopTool"
492 />
493 <Tool
494 Name="VCAppVerifierTool"
495 />
496 <Tool
497 Name="VCPostBuildEventTool"
498 />
499 </Configuration>
500 <Configuration
501 Name="debug-dll|Win32"
502 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
503 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
504 ConfigurationType="1"
505 InheritedPropertySheets=".\shared\FastSTL.vsprops"
506 CharacterSet="2"
507 >
508 <Tool
509 Name="VCPreBuildEventTool"
510 />
511 <Tool
512 Name="VCCustomBuildTool"
513 />
514 <Tool
515 Name="VCXMLDataGeneratorTool"
516 />
517 <Tool
518 Name="VCWebServiceProxyGeneratorTool"
519 />
520 <Tool
521 Name="VCMIDLTool"
522 />
523 <Tool
524 Name="VCCLCompilerTool"
525 Optimization="0"
526 AdditionalIncludeDirectories="&quot;$(DXSDK_DIR)include&quot;;..\..\include;..\..\code"
527 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"
528 MinimalRebuild="true"
529 BasicRuntimeChecks="3"
530 SmallerTypeCheck="true"
531 RuntimeLibrary="3"
532 EnableFunctionLevelLinking="true"
533 UsePrecompiledHeader="2"
534 WarningLevel="3"
535 Detect64BitPortabilityProblems="true"
536 DebugInformationFormat="4"
537 />
538 <Tool
539 Name="VCManagedResourceCompilerTool"
540 />
541 <Tool
542 Name="VCResourceCompilerTool"
543 />
544 <Tool
545 Name="VCPreLinkEventTool"
546 />
547 <Tool
548 Name="VCLinkerTool"
549 AdditionalDependencies="d3d9.lib d3dx9.lib comdlg32.lib assimp.lib winmm.lib comctl32.lib user32.lib advapi32.lib shell32.lib Gdi32.lib"
550 OutputFile="$(OutDir)\assimp_view_debug.exe"
551 LinkIncremental="2"
552 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;;&quot;$(DXSDK_DIR)lib\x86&quot;"
553 GenerateDebugInformation="true"
554 SubSystem="2"
555 RandomizedBaseAddress="1"
556 DataExecutionPrevention="0"
557 TargetMachine="1"
558 />
559 <Tool
560 Name="VCALinkTool"
561 />
562 <Tool
563 Name="VCManifestTool"
564 />
565 <Tool
566 Name="VCXDCMakeTool"
567 />
568 <Tool
569 Name="VCBscMakeTool"
570 />
571 <Tool
572 Name="VCFxCopTool"
573 />
574 <Tool
575 Name="VCAppVerifierTool"
576 />
577 <Tool
578 Name="VCPostBuildEventTool"
579 />
580 </Configuration>
581 <Configuration
582 Name="debug-dll|x64"
583 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
584 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
585 ConfigurationType="1"
586 CharacterSet="2"
587 >
588 <Tool
589 Name="VCPreBuildEventTool"
590 />
591 <Tool
592 Name="VCCustomBuildTool"
593 />
594 <Tool
595 Name="VCXMLDataGeneratorTool"
596 />
597 <Tool
598 Name="VCWebServiceProxyGeneratorTool"
599 />
600 <Tool
601 Name="VCMIDLTool"
602 TargetEnvironment="3"
603 />
604 <Tool
605 Name="VCCLCompilerTool"
606 Optimization="0"
607 AdditionalIncludeDirectories="&quot;$(DXSDK_DIR)include&quot;;..\..\include;..\..\code"
608 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"
609 MinimalRebuild="true"
610 BasicRuntimeChecks="3"
611 SmallerTypeCheck="true"
612 RuntimeLibrary="3"
613 EnableFunctionLevelLinking="true"
614 UsePrecompiledHeader="2"
615 WarningLevel="3"
616 Detect64BitPortabilityProblems="false"
617 DebugInformationFormat="3"
618 />
619 <Tool
620 Name="VCManagedResourceCompilerTool"
621 />
622 <Tool
623 Name="VCResourceCompilerTool"
624 />
625 <Tool
626 Name="VCPreLinkEventTool"
627 />
628 <Tool
629 Name="VCLinkerTool"
630 AdditionalDependencies="d3d9.lib d3dx9.lib comdlg32.lib assimp.lib winmm.lib comctl32.lib user32.lib advapi32.lib shell32.lib Gdi32.lib"
631 OutputFile="$(OutDir)\assimp_view_debug.exe"
632 LinkIncremental="2"
633 AdditionalLibraryDirectories="..\..\lib\assimp_debug-dll_x64;&quot;$(DXSDK_DIR)lib\x64&quot;"
634 GenerateDebugInformation="true"
635 SubSystem="2"
636 TargetMachine="17"
637 />
638 <Tool
639 Name="VCALinkTool"
640 />
641 <Tool
642 Name="VCManifestTool"
643 />
644 <Tool
645 Name="VCXDCMakeTool"
646 />
647 <Tool
648 Name="VCBscMakeTool"
649 />
650 <Tool
651 Name="VCFxCopTool"
652 />
653 <Tool
654 Name="VCAppVerifierTool"
655 />
656 <Tool
657 Name="VCPostBuildEventTool"
658 />
659 </Configuration>
660 <Configuration
661 Name="release-noboost-st|Win32"
662 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
663 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
664 ConfigurationType="1"
665 InheritedPropertySheets=".\shared\NoBoostShared.vsprops;.\shared\FastSTL.vsprops"
666 CharacterSet="2"
667 WholeProgramOptimization="1"
668 >
669 <Tool
670 Name="VCPreBuildEventTool"
671 />
672 <Tool
673 Name="VCCustomBuildTool"
674 />
675 <Tool
676 Name="VCXMLDataGeneratorTool"
677 />
678 <Tool
679 Name="VCWebServiceProxyGeneratorTool"
680 />
681 <Tool
682 Name="VCMIDLTool"
683 />
684 <Tool
685 Name="VCCLCompilerTool"
686 AdditionalIncludeDirectories="&quot;$(DXSDK_DIR)include&quot;;..\..\include;..\..\code"
687 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"
688 RuntimeLibrary="2"
689 UsePrecompiledHeader="2"
690 WarningLevel="3"
691 Detect64BitPortabilityProblems="true"
692 DebugInformationFormat="3"
693 />
694 <Tool
695 Name="VCManagedResourceCompilerTool"
696 />
697 <Tool
698 Name="VCResourceCompilerTool"
699 />
700 <Tool
701 Name="VCPreLinkEventTool"
702 />
703 <Tool
704 Name="VCLinkerTool"
705 AdditionalDependencies="d3d9.lib d3dx9.lib comdlg32.lib assimp.lib winmm.lib comctl32.lib user32.lib advapi32.lib shell32.lib Gdi32.lib"
706 OutputFile="$(OutDir)\assimp_view.exe"
707 LinkIncremental="1"
708 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;;&quot;$(DXSDK_DIR)lib\x86&quot;"
709 IgnoreAllDefaultLibraries="false"
710 IgnoreDefaultLibraryNames=""
711 GenerateDebugInformation="true"
712 SubSystem="2"
713 OptimizeReferences="2"
714 EnableCOMDATFolding="2"
715 RandomizedBaseAddress="1"
716 DataExecutionPrevention="0"
717 TargetMachine="1"
718 />
719 <Tool
720 Name="VCALinkTool"
721 />
722 <Tool
723 Name="VCManifestTool"
724 />
725 <Tool
726 Name="VCXDCMakeTool"
727 />
728 <Tool
729 Name="VCBscMakeTool"
730 />
731 <Tool
732 Name="VCFxCopTool"
733 />
734 <Tool
735 Name="VCAppVerifierTool"
736 />
737 <Tool
738 Name="VCPostBuildEventTool"
739 />
740 </Configuration>
741 <Configuration
742 Name="release-noboost-st|x64"
743 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
744 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
745 ConfigurationType="1"
746 InheritedPropertySheets=".\shared\NoBoostShared.vsprops"
747 CharacterSet="2"
748 WholeProgramOptimization="1"
749 >
750 <Tool
751 Name="VCPreBuildEventTool"
752 />
753 <Tool
754 Name="VCCustomBuildTool"
755 />
756 <Tool
757 Name="VCXMLDataGeneratorTool"
758 />
759 <Tool
760 Name="VCWebServiceProxyGeneratorTool"
761 />
762 <Tool
763 Name="VCMIDLTool"
764 TargetEnvironment="3"
765 />
766 <Tool
767 Name="VCCLCompilerTool"
768 AdditionalIncludeDirectories="&quot;$(DXSDK_DIR)include&quot;;..\..\include;..\..\code"
769 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"
770 RuntimeLibrary="2"
771 UsePrecompiledHeader="2"
772 WarningLevel="3"
773 Detect64BitPortabilityProblems="true"
774 DebugInformationFormat="3"
775 />
776 <Tool
777 Name="VCManagedResourceCompilerTool"
778 />
779 <Tool
780 Name="VCResourceCompilerTool"
781 />
782 <Tool
783 Name="VCPreLinkEventTool"
784 />
785 <Tool
786 Name="VCLinkerTool"
787 AdditionalDependencies="d3d9.lib d3dx9.lib comdlg32.lib assimp.lib winmm.lib comctl32.lib user32.lib advapi32.lib shell32.lib Gdi32.lib"
788 OutputFile="$(OutDir)\assimp_view.exe"
789 LinkIncremental="1"
790 AdditionalLibraryDirectories="..\..\lib\assimp_$(ConfigurationName)_$(PlatformName);&quot;$(DXSDK_DIR)lib\x64&quot;"
791 IgnoreAllDefaultLibraries="false"
792 IgnoreDefaultLibraryNames=""
793 GenerateDebugInformation="true"
794 SubSystem="2"
795 OptimizeReferences="2"
796 EnableCOMDATFolding="2"
797 TargetMachine="17"
798 />
799 <Tool
800 Name="VCALinkTool"
801 />
802 <Tool
803 Name="VCManifestTool"
804 />
805 <Tool
806 Name="VCXDCMakeTool"
807 />
808 <Tool
809 Name="VCBscMakeTool"
810 />
811 <Tool
812 Name="VCFxCopTool"
813 />
814 <Tool
815 Name="VCAppVerifierTool"
816 />
817 <Tool
818 Name="VCPostBuildEventTool"
819 />
820 </Configuration>
821 <Configuration
822 Name="debug-noboost-st|Win32"
823 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
824 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
825 ConfigurationType="1"
826 InheritedPropertySheets=".\shared\NoBoostShared.vsprops;.\shared\FastSTL.vsprops"
827 CharacterSet="2"
828 >
829 <Tool
830 Name="VCPreBuildEventTool"
831 />
832 <Tool
833 Name="VCCustomBuildTool"
834 />
835 <Tool
836 Name="VCXMLDataGeneratorTool"
837 />
838 <Tool
839 Name="VCWebServiceProxyGeneratorTool"
840 />
841 <Tool
842 Name="VCMIDLTool"
843 />
844 <Tool
845 Name="VCCLCompilerTool"
846 Optimization="0"
847 AdditionalIncludeDirectories="&quot;$(DXSDK_DIR)include&quot;;..\..\include;..\..\code"
848 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"
849 MinimalRebuild="true"
850 BasicRuntimeChecks="3"
851 SmallerTypeCheck="true"
852 RuntimeLibrary="3"
853 EnableFunctionLevelLinking="true"
854 UsePrecompiledHeader="2"
855 WarningLevel="3"
856 Detect64BitPortabilityProblems="true"
857 DebugInformationFormat="4"
858 />
859 <Tool
860 Name="VCManagedResourceCompilerTool"
861 />
862 <Tool
863 Name="VCResourceCompilerTool"
864 />
865 <Tool
866 Name="VCPreLinkEventTool"
867 />
868 <Tool
869 Name="VCLinkerTool"
870 AdditionalDependencies="d3d9.lib d3dx9.lib comdlg32.lib assimp.lib winmm.lib comctl32.lib user32.lib advapi32.lib shell32.lib Gdi32.lib"
871 OutputFile="$(OutDir)\assimp_view_debug.exe"
872 LinkIncremental="2"
873 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;;&quot;$(DXSDK_DIR)lib\x86&quot;"
874 GenerateDebugInformation="true"
875 SubSystem="2"
876 RandomizedBaseAddress="1"
877 DataExecutionPrevention="0"
878 TargetMachine="1"
879 />
880 <Tool
881 Name="VCALinkTool"
882 />
883 <Tool
884 Name="VCManifestTool"
885 />
886 <Tool
887 Name="VCXDCMakeTool"
888 />
889 <Tool
890 Name="VCBscMakeTool"
891 />
892 <Tool
893 Name="VCFxCopTool"
894 />
895 <Tool
896 Name="VCAppVerifierTool"
897 />
898 <Tool
899 Name="VCPostBuildEventTool"
900 />
901 </Configuration>
902 <Configuration
903 Name="debug-noboost-st|x64"
904 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
905 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
906 ConfigurationType="1"
907 InheritedPropertySheets=".\shared\NoBoostShared.vsprops"
908 CharacterSet="2"
909 >
910 <Tool
911 Name="VCPreBuildEventTool"
912 />
913 <Tool
914 Name="VCCustomBuildTool"
915 />
916 <Tool
917 Name="VCXMLDataGeneratorTool"
918 />
919 <Tool
920 Name="VCWebServiceProxyGeneratorTool"
921 />
922 <Tool
923 Name="VCMIDLTool"
924 TargetEnvironment="3"
925 />
926 <Tool
927 Name="VCCLCompilerTool"
928 Optimization="0"
929 AdditionalIncludeDirectories="&quot;$(DXSDK_DIR)include&quot;;..\..\include;..\..\code"
930 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"
931 MinimalRebuild="true"
932 BasicRuntimeChecks="3"
933 SmallerTypeCheck="true"
934 RuntimeLibrary="3"
935 EnableFunctionLevelLinking="true"
936 UsePrecompiledHeader="2"
937 WarningLevel="3"
938 Detect64BitPortabilityProblems="false"
939 DebugInformationFormat="3"
940 />
941 <Tool
942 Name="VCManagedResourceCompilerTool"
943 />
944 <Tool
945 Name="VCResourceCompilerTool"
946 />
947 <Tool
948 Name="VCPreLinkEventTool"
949 />
950 <Tool
951 Name="VCLinkerTool"
952 AdditionalDependencies="d3d9.lib d3dx9.lib comdlg32.lib assimp.lib winmm.lib comctl32.lib user32.lib advapi32.lib shell32.lib Gdi32.lib"
953 OutputFile="$(OutDir)\assimp_view_debug.exe"
954 LinkIncremental="2"
955 AdditionalLibraryDirectories="..\..\lib\assimp_$(ConfigurationName)_$(PlatformName);&quot;$(DXSDK_DIR)lib\x64&quot;"
956 GenerateDebugInformation="true"
957 SubSystem="2"
958 TargetMachine="17"
959 />
960 <Tool
961 Name="VCALinkTool"
962 />
963 <Tool
964 Name="VCManifestTool"
965 />
966 <Tool
967 Name="VCXDCMakeTool"
968 />
969 <Tool
970 Name="VCBscMakeTool"
971 />
972 <Tool
973 Name="VCFxCopTool"
974 />
975 <Tool
976 Name="VCAppVerifierTool"
977 />
978 <Tool
979 Name="VCPostBuildEventTool"
980 />
981 </Configuration>
982 <Configuration
983 Name="debug-st|Win32"
984 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
985 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
986 ConfigurationType="1"
987 InheritedPropertySheets=".\shared\FastSTL.vsprops"
988 CharacterSet="2"
989 >
990 <Tool
991 Name="VCPreBuildEventTool"
992 />
993 <Tool
994 Name="VCCustomBuildTool"
995 />
996 <Tool
997 Name="VCXMLDataGeneratorTool"
998 />
999 <Tool
1000 Name="VCWebServiceProxyGeneratorTool"
1001 />
1002 <Tool
1003 Name="VCMIDLTool"
1004 />
1005 <Tool
1006 Name="VCCLCompilerTool"
1007 Optimization="0"
1008 AdditionalIncludeDirectories="&quot;$(DXSDK_DIR)include&quot;;..\..\include;..\..\code"
1009 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"
1010 MinimalRebuild="true"
1011 BasicRuntimeChecks="3"
1012 SmallerTypeCheck="true"
1013 RuntimeLibrary="3"
1014 EnableFunctionLevelLinking="true"
1015 UsePrecompiledHeader="2"
1016 WarningLevel="3"
1017 Detect64BitPortabilityProblems="true"
1018 DebugInformationFormat="4"
1019 />
1020 <Tool
1021 Name="VCManagedResourceCompilerTool"
1022 />
1023 <Tool
1024 Name="VCResourceCompilerTool"
1025 />
1026 <Tool
1027 Name="VCPreLinkEventTool"
1028 />
1029 <Tool
1030 Name="VCLinkerTool"
1031 AdditionalDependencies="d3d9.lib d3dx9.lib comdlg32.lib assimp.lib winmm.lib comctl32.lib user32.lib advapi32.lib shell32.lib Gdi32.lib"
1032 OutputFile="$(OutDir)\assimp_view_debug.exe"
1033 LinkIncremental="2"
1034 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;;&quot;$(DXSDK_DIR)lib\x86&quot;"
1035 GenerateDebugInformation="true"
1036 SubSystem="2"
1037 RandomizedBaseAddress="1"
1038 DataExecutionPrevention="0"
1039 TargetMachine="1"
1040 />
1041 <Tool
1042 Name="VCALinkTool"
1043 />
1044 <Tool
1045 Name="VCManifestTool"
1046 />
1047 <Tool
1048 Name="VCXDCMakeTool"
1049 />
1050 <Tool
1051 Name="VCBscMakeTool"
1052 />
1053 <Tool
1054 Name="VCFxCopTool"
1055 />
1056 <Tool
1057 Name="VCAppVerifierTool"
1058 />
1059 <Tool
1060 Name="VCPostBuildEventTool"
1061 />
1062 </Configuration>
1063 <Configuration
1064 Name="debug-st|x64"
1065 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
1066 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
1067 ConfigurationType="1"
1068 CharacterSet="2"
1069 >
1070 <Tool
1071 Name="VCPreBuildEventTool"
1072 />
1073 <Tool
1074 Name="VCCustomBuildTool"
1075 />
1076 <Tool
1077 Name="VCXMLDataGeneratorTool"
1078 />
1079 <Tool
1080 Name="VCWebServiceProxyGeneratorTool"
1081 />
1082 <Tool
1083 Name="VCMIDLTool"
1084 TargetEnvironment="3"
1085 />
1086 <Tool
1087 Name="VCCLCompilerTool"
1088 Optimization="0"
1089 AdditionalIncludeDirectories="&quot;$(DXSDK_DIR)include&quot;;..\..\include;..\..\code"
1090 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"
1091 MinimalRebuild="true"
1092 BasicRuntimeChecks="3"
1093 SmallerTypeCheck="true"
1094 RuntimeLibrary="3"
1095 EnableFunctionLevelLinking="true"
1096 UsePrecompiledHeader="2"
1097 WarningLevel="3"
1098 Detect64BitPortabilityProblems="false"
1099 DebugInformationFormat="3"
1100 />
1101 <Tool
1102 Name="VCManagedResourceCompilerTool"
1103 />
1104 <Tool
1105 Name="VCResourceCompilerTool"
1106 />
1107 <Tool
1108 Name="VCPreLinkEventTool"
1109 />
1110 <Tool
1111 Name="VCLinkerTool"
1112 AdditionalDependencies="d3d9.lib d3dx9.lib comdlg32.lib assimp.lib winmm.lib comctl32.lib user32.lib advapi32.lib shell32.lib Gdi32.lib"
1113 OutputFile="$(OutDir)\assimp_view_debug.exe"
1114 LinkIncremental="2"
1115 AdditionalLibraryDirectories="..\..\lib\assimp_$(ConfigurationName)_$(PlatformName);&quot;$(DXSDK_DIR)lib\x64&quot;"
1116 GenerateDebugInformation="true"
1117 SubSystem="2"
1118 TargetMachine="17"
1119 />
1120 <Tool
1121 Name="VCALinkTool"
1122 />
1123 <Tool
1124 Name="VCManifestTool"
1125 />
1126 <Tool
1127 Name="VCXDCMakeTool"
1128 />
1129 <Tool
1130 Name="VCBscMakeTool"
1131 />
1132 <Tool
1133 Name="VCFxCopTool"
1134 />
1135 <Tool
1136 Name="VCAppVerifierTool"
1137 />
1138 <Tool
1139 Name="VCPostBuildEventTool"
1140 />
1141 </Configuration>
1142 <Configuration
1143 Name="release-st|Win32"
1144 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
1145 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
1146 ConfigurationType="1"
1147 InheritedPropertySheets=".\shared\FastSTL.vsprops"
1148 CharacterSet="2"
1149 WholeProgramOptimization="1"
1150 >
1151 <Tool
1152 Name="VCPreBuildEventTool"
1153 />
1154 <Tool
1155 Name="VCCustomBuildTool"
1156 />
1157 <Tool
1158 Name="VCXMLDataGeneratorTool"
1159 />
1160 <Tool
1161 Name="VCWebServiceProxyGeneratorTool"
1162 />
1163 <Tool
1164 Name="VCMIDLTool"
1165 />
1166 <Tool
1167 Name="VCCLCompilerTool"
1168 AdditionalIncludeDirectories="&quot;$(DXSDK_DIR)include&quot;;..\..\include;..\..\code"
1169 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"
1170 RuntimeLibrary="2"
1171 UsePrecompiledHeader="2"
1172 WarningLevel="3"
1173 Detect64BitPortabilityProblems="true"
1174 DebugInformationFormat="3"
1175 />
1176 <Tool
1177 Name="VCManagedResourceCompilerTool"
1178 />
1179 <Tool
1180 Name="VCResourceCompilerTool"
1181 />
1182 <Tool
1183 Name="VCPreLinkEventTool"
1184 />
1185 <Tool
1186 Name="VCLinkerTool"
1187 AdditionalDependencies="d3d9.lib d3dx9.lib comdlg32.lib assimp.lib winmm.lib comctl32.lib user32.lib advapi32.lib shell32.lib Gdi32.lib"
1188 OutputFile="$(OutDir)\assimp_view.exe"
1189 LinkIncremental="1"
1190 AdditionalLibraryDirectories="&quot;..\..\lib\assimp_$(ConfigurationName)_$(PlatformName)&quot;;&quot;$(DXSDK_DIR)lib\x86&quot;"
1191 IgnoreAllDefaultLibraries="false"
1192 IgnoreDefaultLibraryNames=""
1193 GenerateDebugInformation="true"
1194 SubSystem="2"
1195 OptimizeReferences="2"
1196 EnableCOMDATFolding="2"
1197 RandomizedBaseAddress="1"
1198 DataExecutionPrevention="0"
1199 TargetMachine="1"
1200 />
1201 <Tool
1202 Name="VCALinkTool"
1203 />
1204 <Tool
1205 Name="VCManifestTool"
1206 />
1207 <Tool
1208 Name="VCXDCMakeTool"
1209 />
1210 <Tool
1211 Name="VCBscMakeTool"
1212 />
1213 <Tool
1214 Name="VCFxCopTool"
1215 />
1216 <Tool
1217 Name="VCAppVerifierTool"
1218 />
1219 <Tool
1220 Name="VCPostBuildEventTool"
1221 />
1222 </Configuration>
1223 <Configuration
1224 Name="release-st|x64"
1225 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
1226 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
1227 ConfigurationType="1"
1228 CharacterSet="2"
1229 WholeProgramOptimization="1"
1230 >
1231 <Tool
1232 Name="VCPreBuildEventTool"
1233 />
1234 <Tool
1235 Name="VCCustomBuildTool"
1236 />
1237 <Tool
1238 Name="VCXMLDataGeneratorTool"
1239 />
1240 <Tool
1241 Name="VCWebServiceProxyGeneratorTool"
1242 />
1243 <Tool
1244 Name="VCMIDLTool"
1245 TargetEnvironment="3"
1246 />
1247 <Tool
1248 Name="VCCLCompilerTool"
1249 AdditionalIncludeDirectories="&quot;$(DXSDK_DIR)include&quot;;..\..\include;..\..\code"
1250 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_SCL_SECURE_NO_WARNINGS;_CRT_SECURE_NO_WARNINGS"
1251 RuntimeLibrary="2"
1252 UsePrecompiledHeader="2"
1253 WarningLevel="3"
1254 Detect64BitPortabilityProblems="true"
1255 DebugInformationFormat="3"
1256 />
1257 <Tool
1258 Name="VCManagedResourceCompilerTool"
1259 />
1260 <Tool
1261 Name="VCResourceCompilerTool"
1262 />
1263 <Tool
1264 Name="VCPreLinkEventTool"
1265 />
1266 <Tool
1267 Name="VCLinkerTool"
1268 AdditionalDependencies="d3d9.lib d3dx9.lib comdlg32.lib assimp.lib winmm.lib comctl32.lib user32.lib advapi32.lib shell32.lib Gdi32.lib"
1269 OutputFile="$(OutDir)\assimp_view.exe"
1270 LinkIncremental="1"
1271 AdditionalLibraryDirectories="..\..\lib\assimp_$(ConfigurationName)_$(PlatformName);&quot;$(DXSDK_DIR)lib\x64&quot;"
1272 IgnoreAllDefaultLibraries="false"
1273 IgnoreDefaultLibraryNames=""
1274 GenerateDebugInformation="true"
1275 SubSystem="2"
1276 OptimizeReferences="2"
1277 EnableCOMDATFolding="2"
1278 TargetMachine="17"
1279 />
1280 <Tool
1281 Name="VCALinkTool"
1282 />
1283 <Tool
1284 Name="VCManifestTool"
1285 />
1286 <Tool
1287 Name="VCXDCMakeTool"
1288 />
1289 <Tool
1290 Name="VCBscMakeTool"
1291 />
1292 <Tool
1293 Name="VCFxCopTool"
1294 />
1295 <Tool
1296 Name="VCAppVerifierTool"
1297 />
1298 <Tool
1299 Name="VCPostBuildEventTool"
1300 />
1301 </Configuration>
1302 </Configurations>
1303 <References>
1304 </References>
1305 <Files>
1306 <Filter
1307 Name="sources"
1308 Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
1309 UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
1310 >
1311 <File
1312 RelativePath="..\..\tools\assimp_view\AnimEvaluator.cpp"
1313 >
1314 </File>
1315 <File
1316 RelativePath="..\..\tools\assimp_view\AnimEvaluator.h"
1317 >
1318 </File>
1319 <File
1320 RelativePath="..\..\tools\assimp_view\AssetHelper.h"
1321 >
1322 </File>
1323 <File
1324 RelativePath="..\..\tools\assimp_view\assimp_view.cpp"
1325 >
1326 </File>
1327 <File
1328 RelativePath="..\..\tools\assimp_view\assimp_view.h"
1329 >
1330 </File>
1331 <File
1332 RelativePath="..\..\tools\assimp_view\Background.cpp"
1333 >
1334 </File>
1335 <File
1336 RelativePath="..\..\tools\assimp_view\Background.h"
1337 >
1338 </File>
1339 <File
1340 RelativePath="..\..\tools\assimp_view\Camera.h"
1341 >
1342 </File>
1343 <File
1344 RelativePath="..\..\tools\assimp_view\Display.cpp"
1345 >
1346 </File>
1347 <File
1348 RelativePath="..\..\tools\assimp_view\Display.h"
1349 >
1350 </File>
1351 <File
1352 RelativePath="..\..\tools\assimp_view\HelpDialog.cpp"
1353 >
1354 </File>
1355 <File
1356 RelativePath="..\..\tools\assimp_view\Input.cpp"
1357 >
1358 </File>
1359 <File
1360 RelativePath="..\..\tools\assimp_view\LogDisplay.cpp"
1361 >
1362 </File>
1363 <File
1364 RelativePath="..\..\tools\assimp_view\LogDisplay.h"
1365 >
1366 </File>
1367 <File
1368 RelativePath="..\..\tools\assimp_view\LogWindow.cpp"
1369 >
1370 </File>
1371 <File
1372 RelativePath="..\..\tools\assimp_view\LogWindow.h"
1373 >
1374 </File>
1375 <File
1376 RelativePath="..\..\tools\assimp_view\Material.cpp"
1377 >
1378 </File>
1379 <File
1380 RelativePath="..\..\tools\assimp_view\MaterialManager.h"
1381 >
1382 </File>
1383 <File
1384 RelativePath="..\..\tools\assimp_view\MeshRenderer.cpp"
1385 >
1386 </File>
1387 <File
1388 RelativePath="..\..\tools\assimp_view\MeshRenderer.h"
1389 >
1390 </File>
1391 <File
1392 RelativePath="..\..\tools\assimp_view\MessageProc.cpp"
1393 >
1394 </File>
1395 <File
1396 RelativePath="..\..\tools\assimp_view\Normals.cpp"
1397 >
1398 </File>
1399 <File
1400 RelativePath="..\..\tools\assimp_view\RenderOptions.h"
1401 >
1402 </File>
1403 <File
1404 RelativePath="..\..\tools\assimp_view\Resource.h"
1405 >
1406 </File>
1407 <File
1408 RelativePath="..\..\tools\assimp_view\SceneAnimator.cpp"
1409 >
1410 </File>
1411 <File
1412 RelativePath="..\..\tools\assimp_view\SceneAnimator.h"
1413 >
1414 </File>
1415 <File
1416 RelativePath="..\..\tools\assimp_view\Shaders.cpp"
1417 >
1418 </File>
1419 <File
1420 RelativePath="..\..\tools\assimp_view\Shaders.h"
1421 >
1422 </File>
1423 <File
1424 RelativePath="..\..\tools\assimp_view\stdafx.cpp"
1425 >
1426 <FileConfiguration
1427 Name="debug|Win32"
1428 >
1429 <Tool
1430 Name="VCCLCompilerTool"
1431 UsePrecompiledHeader="1"
1432 />
1433 </FileConfiguration>
1434 <FileConfiguration
1435 Name="debug|x64"
1436 >
1437 <Tool
1438 Name="VCCLCompilerTool"
1439 UsePrecompiledHeader="1"
1440 />
1441 </FileConfiguration>
1442 <FileConfiguration
1443 Name="release|Win32"
1444 >
1445 <Tool
1446 Name="VCCLCompilerTool"
1447 UsePrecompiledHeader="1"
1448 />
1449 </FileConfiguration>
1450 <FileConfiguration
1451 Name="release|x64"
1452 >
1453 <Tool
1454 Name="VCCLCompilerTool"
1455 UsePrecompiledHeader="1"
1456 />
1457 </FileConfiguration>
1458 <FileConfiguration
1459 Name="release-dll|Win32"
1460 >
1461 <Tool
1462 Name="VCCLCompilerTool"
1463 UsePrecompiledHeader="1"
1464 />
1465 </FileConfiguration>
1466 <FileConfiguration
1467 Name="release-dll|x64"
1468 >
1469 <Tool
1470 Name="VCCLCompilerTool"
1471 UsePrecompiledHeader="1"
1472 />
1473 </FileConfiguration>
1474 <FileConfiguration
1475 Name="debug-dll|Win32"
1476 >
1477 <Tool
1478 Name="VCCLCompilerTool"
1479 UsePrecompiledHeader="1"
1480 />
1481 </FileConfiguration>
1482 <FileConfiguration
1483 Name="debug-dll|x64"
1484 >
1485 <Tool
1486 Name="VCCLCompilerTool"
1487 UsePrecompiledHeader="1"
1488 />
1489 </FileConfiguration>
1490 <FileConfiguration
1491 Name="release-noboost-st|Win32"
1492 >
1493 <Tool
1494 Name="VCCLCompilerTool"
1495 UsePrecompiledHeader="1"
1496 />
1497 </FileConfiguration>
1498 <FileConfiguration
1499 Name="release-noboost-st|x64"
1500 >
1501 <Tool
1502 Name="VCCLCompilerTool"
1503 UsePrecompiledHeader="1"
1504 />
1505 </FileConfiguration>
1506 <FileConfiguration
1507 Name="debug-noboost-st|Win32"
1508 >
1509 <Tool
1510 Name="VCCLCompilerTool"
1511 UsePrecompiledHeader="1"
1512 />
1513 </FileConfiguration>
1514 <FileConfiguration
1515 Name="debug-noboost-st|x64"
1516 >
1517 <Tool
1518 Name="VCCLCompilerTool"
1519 UsePrecompiledHeader="1"
1520 />
1521 </FileConfiguration>
1522 <FileConfiguration
1523 Name="debug-st|Win32"
1524 >
1525 <Tool
1526 Name="VCCLCompilerTool"
1527 UsePrecompiledHeader="1"
1528 />
1529 </FileConfiguration>
1530 <FileConfiguration
1531 Name="debug-st|x64"
1532 >
1533 <Tool
1534 Name="VCCLCompilerTool"
1535 UsePrecompiledHeader="1"
1536 />
1537 </FileConfiguration>
1538 <FileConfiguration
1539 Name="release-st|Win32"
1540 >
1541 <Tool
1542 Name="VCCLCompilerTool"
1543 UsePrecompiledHeader="1"
1544 />
1545 </FileConfiguration>
1546 <FileConfiguration
1547 Name="release-st|x64"
1548 >
1549 <Tool
1550 Name="VCCLCompilerTool"
1551 UsePrecompiledHeader="1"
1552 />
1553 </FileConfiguration>
1554 </File>
1555 <File
1556 RelativePath="..\..\tools\assimp_view\stdafx.h"
1557 >
1558 </File>
1559 </Filter>
1560 <Filter
1561 Name="resources"
1562 Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
1563 UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
1564 >
1565 <File
1566 RelativePath="..\..\tools\shared\assimp_tools_icon.ico"
1567 >
1568 </File>
1569 <File
1570 RelativePath="..\..\tools\assimp_view\assimp_view.ico"
1571 >
1572 </File>
1573 <File
1574 RelativePath="..\..\tools\assimp_view\assimp_view.rc"
1575 >
1576 </File>
1577 <File
1578 RelativePath="..\..\tools\assimp_view\banner.bmp"
1579 >
1580 </File>
1581 <File
1582 RelativePath="..\..\tools\assimp_view\base_anim.bmp"
1583 >
1584 </File>
1585 <File
1586 RelativePath="..\..\tools\assimp_view\base_display.bmp"
1587 >
1588 </File>
1589 <File
1590 RelativePath="..\..\tools\assimp_view\base_inter.bmp"
1591 >
1592 </File>
1593 <File
1594 RelativePath="..\..\tools\assimp_view\base_rendering.bmp"
1595 >
1596 </File>
1597 <File
1598 RelativePath="..\..\tools\assimp_view\base_stats.bmp"
1599 >
1600 </File>
1601 <File
1602 RelativePath="..\..\tools\assimp_view\fx.bmp"
1603 >
1604 </File>
1605 <File
1606 RelativePath="..\..\tools\assimp_view\HUD.png"
1607 >
1608 </File>
1609 <File
1610 RelativePath="..\..\tools\assimp_view\HUDMask.png"
1611 >
1612 </File>
1613 <File
1614 RelativePath="..\..\tools\assimp_view\n.bmp"
1615 >
1616 </File>
1617 <File
1618 RelativePath="..\..\tools\assimp_view\root.bmp"
1619 >
1620 </File>
1621 <File
1622 RelativePath="..\..\tools\assimp_view\small.ico"
1623 >
1624 </File>
1625 <File
1626 RelativePath="..\..\tools\assimp_view\text1.bin"
1627 >
1628 </File>
1629 <File
1630 RelativePath="..\..\tools\assimp_view\tx.bmp"
1631 >
1632 </File>
1633 <File
1634 RelativePath="..\..\tools\assimp_view\txi.bmp"
1635 >
1636 </File>
1637 </Filter>
1638 </Files>
1639 <Globals>
1640 </Globals>
1641 </VisualStudioProject>
+0
-17
workspaces/vc9/shared/DllShared.vsprops less more
0 <?xml version="1.0" encoding="Windows-1252"?>
1 <VisualStudioPropertySheet
2 ProjectType="Visual C++"
3 Version="8.00"
4 Name="DllShared"
5 OutputDirectory="./../../bin/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
6 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
7 >
8 <Tool
9 Name="VCCLCompilerTool"
10 PreprocessorDefinitions="ASSIMP_BUILD_DLL_EXPORT"
11 />
12 <Tool
13 Name="VCPostBuildEventTool"
14 CommandLine=""
15 />
16 </VisualStudioPropertySheet>
+0
-11
workspaces/vc9/shared/FastSTL.vsprops less more
0 <?xml version="1.0" encoding="Windows-1252"?>
1 <VisualStudioPropertySheet
2 ProjectType="Visual C++"
3 Version="8.00"
4 Name="FastSTL"
5 >
6 <Tool
7 Name="VCCLCompilerTool"
8 PreprocessorDefinitions="_HAS_ITERATOR_DEBUGGING=0;_SECURE_SCL=0"
9 />
10 </VisualStudioPropertySheet>
+0
-9
workspaces/vc9/shared/LibShared.vsprops less more
0 <?xml version="1.0" encoding="Windows-1252"?>
1 <VisualStudioPropertySheet
2 ProjectType="Visual C++"
3 Version="8.00"
4 Name="LibShared"
5 OutputDirectory="./../../lib/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
6 IntermediateDirectory="./../../obj/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
7 >
8 </VisualStudioPropertySheet>
+0
-12
workspaces/vc9/shared/NoBoostShared.vsprops less more
0 <?xml version="1.0" encoding="Windows-1252"?>
1 <VisualStudioPropertySheet
2 ProjectType="Visual C++"
3 Version="8.00"
4 Name="NoBoostShared"
5 >
6 <Tool
7 Name="VCCLCompilerTool"
8 AdditionalIncludeDirectories="..\..\code\BoostWorkaround"
9 PreprocessorDefinitions="ASSIMP_BUILD_BOOST_WORKAROUND;ASSIMP_BUILD_SINGLETHREADED"
10 />
11 </VisualStudioPropertySheet>
+0
-11
workspaces/vc9/shared/SingleThreadedShared.vsprops less more
0 <?xml version="1.0" encoding="Windows-1252"?>
1 <VisualStudioPropertySheet
2 ProjectType="Visual C++"
3 Version="8.00"
4 Name="SingleThreadedShared"
5 >
6 <Tool
7 Name="VCCLCompilerTool"
8 PreprocessorDefinitions="ASSIMP_BUILD_SINGLETHREADED"
9 />
10 </VisualStudioPropertySheet>
+0
-17
workspaces/vc9/shared/UnitTest.vsprops less more
0 <?xml version="1.0" encoding="Windows-1252"?>
1 <VisualStudioPropertySheet
2 ProjectType="Visual C++"
3 Version="8.00"
4 Name="UnitTest"
5 OutputDirectory="./../../lib/$(ProjectName)_$(ConfigurationName)_$(PlatformName)"
6 >
7 <Tool
8 Name="VCCLCompilerTool"
9 AdditionalIncludeDirectories="&quot;..\..\contrib\cppunit-1.12.1\include&quot;"
10 PreprocessorDefinitions="_CRT_SECURE_NO_WARNINGS"
11 />
12 <Tool
13 Name="VCLinkerTool"
14 AdditionalLibraryDirectories="&quot;..\..\contrib\cppunit-1.12.1\lib&quot;"
15 />
16 </VisualStudioPropertySheet>
22 archiveVersion = 1;
33 classes = {
44 };
5 objectVersion = 44;
5 objectVersion = 46;
66 objects = {
77
88 /* Begin PBXBuildFile section */
9 2B7F46DD1708365200A106A9 /* assbin_chunks.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F456D1708365100A106A9 /* assbin_chunks.h */; };
10 2B7F46DE1708365200A106A9 /* assbin_chunks.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F456D1708365100A106A9 /* assbin_chunks.h */; };
11 2B7F46DF1708365200A106A9 /* assbin_chunks.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F456D1708365100A106A9 /* assbin_chunks.h */; };
12 2B7F46E01708365200A106A9 /* assbin_chunks.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F456D1708365100A106A9 /* assbin_chunks.h */; };
13 2B7F46E11708365200A106A9 /* assbin_chunks.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F456D1708365100A106A9 /* assbin_chunks.h */; };
14 2B7F46E21708365200A106A9 /* Assimp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F456E1708365100A106A9 /* Assimp.cpp */; };
15 2B7F46E31708365200A106A9 /* Assimp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F456E1708365100A106A9 /* Assimp.cpp */; };
16 2B7F46E41708365200A106A9 /* Assimp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F456E1708365100A106A9 /* Assimp.cpp */; };
17 2B7F46E51708365200A106A9 /* Assimp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F456E1708365100A106A9 /* Assimp.cpp */; };
18 2B7F46E61708365200A106A9 /* Assimp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F456E1708365100A106A9 /* Assimp.cpp */; };
19 2B7F46E71708365200A106A9 /* AssimpCExport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F456F1708365100A106A9 /* AssimpCExport.cpp */; };
20 2B7F46E81708365200A106A9 /* AssimpCExport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F456F1708365100A106A9 /* AssimpCExport.cpp */; };
21 2B7F46E91708365200A106A9 /* AssimpCExport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F456F1708365100A106A9 /* AssimpCExport.cpp */; };
22 2B7F46EA1708365200A106A9 /* AssimpCExport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F456F1708365100A106A9 /* AssimpCExport.cpp */; };
23 2B7F46EB1708365200A106A9 /* AssimpCExport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F456F1708365100A106A9 /* AssimpCExport.cpp */; };
24 2B7F47001708365200A106A9 /* BaseImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45741708365100A106A9 /* BaseImporter.cpp */; };
25 2B7F47011708365200A106A9 /* BaseImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45741708365100A106A9 /* BaseImporter.cpp */; };
26 2B7F47021708365200A106A9 /* BaseImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45741708365100A106A9 /* BaseImporter.cpp */; };
27 2B7F47031708365200A106A9 /* BaseImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45741708365100A106A9 /* BaseImporter.cpp */; };
28 2B7F47041708365200A106A9 /* BaseImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45741708365100A106A9 /* BaseImporter.cpp */; };
29 2B7F47051708365200A106A9 /* BaseImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45751708365100A106A9 /* BaseImporter.h */; };
30 2B7F47061708365200A106A9 /* BaseImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45751708365100A106A9 /* BaseImporter.h */; };
31 2B7F47071708365200A106A9 /* BaseImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45751708365100A106A9 /* BaseImporter.h */; };
32 2B7F47081708365200A106A9 /* BaseImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45751708365100A106A9 /* BaseImporter.h */; };
33 2B7F47091708365200A106A9 /* BaseImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45751708365100A106A9 /* BaseImporter.h */; };
34 2B7F470A1708365200A106A9 /* BaseProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45761708365100A106A9 /* BaseProcess.cpp */; };
35 2B7F470B1708365200A106A9 /* BaseProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45761708365100A106A9 /* BaseProcess.cpp */; };
36 2B7F470C1708365200A106A9 /* BaseProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45761708365100A106A9 /* BaseProcess.cpp */; };
37 2B7F470D1708365200A106A9 /* BaseProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45761708365100A106A9 /* BaseProcess.cpp */; };
38 2B7F470E1708365200A106A9 /* BaseProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45761708365100A106A9 /* BaseProcess.cpp */; };
39 2B7F470F1708365200A106A9 /* BaseProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45771708365100A106A9 /* BaseProcess.h */; };
40 2B7F47101708365200A106A9 /* BaseProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45771708365100A106A9 /* BaseProcess.h */; };
41 2B7F47111708365200A106A9 /* BaseProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45771708365100A106A9 /* BaseProcess.h */; };
42 2B7F47121708365200A106A9 /* BaseProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45771708365100A106A9 /* BaseProcess.h */; };
43 2B7F47131708365200A106A9 /* BaseProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45771708365100A106A9 /* BaseProcess.h */; };
44 2B7F47461708365200A106A9 /* BlobIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45831708365100A106A9 /* BlobIOSystem.h */; };
45 2B7F47471708365200A106A9 /* BlobIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45831708365100A106A9 /* BlobIOSystem.h */; };
46 2B7F47481708365200A106A9 /* BlobIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45831708365100A106A9 /* BlobIOSystem.h */; };
47 2B7F47491708365200A106A9 /* BlobIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45831708365100A106A9 /* BlobIOSystem.h */; };
48 2B7F474A1708365200A106A9 /* BlobIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45831708365100A106A9 /* BlobIOSystem.h */; };
49 2B7F474B1708365200A106A9 /* foreach.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45861708365100A106A9 /* foreach.hpp */; };
50 2B7F474C1708365200A106A9 /* foreach.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45861708365100A106A9 /* foreach.hpp */; };
51 2B7F474D1708365200A106A9 /* foreach.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45861708365100A106A9 /* foreach.hpp */; };
52 2B7F474E1708365200A106A9 /* foreach.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45861708365100A106A9 /* foreach.hpp */; };
53 2B7F474F1708365200A106A9 /* foreach.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45861708365100A106A9 /* foreach.hpp */; };
54 2B7F47501708365200A106A9 /* format.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45871708365100A106A9 /* format.hpp */; };
55 2B7F47511708365200A106A9 /* format.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45871708365100A106A9 /* format.hpp */; };
56 2B7F47521708365200A106A9 /* format.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45871708365100A106A9 /* format.hpp */; };
57 2B7F47531708365200A106A9 /* format.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45871708365100A106A9 /* format.hpp */; };
58 2B7F47541708365200A106A9 /* format.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45871708365100A106A9 /* format.hpp */; };
59 2B7F47551708365200A106A9 /* lexical_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45881708365100A106A9 /* lexical_cast.hpp */; };
60 2B7F47561708365200A106A9 /* lexical_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45881708365100A106A9 /* lexical_cast.hpp */; };
61 2B7F47571708365200A106A9 /* lexical_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45881708365100A106A9 /* lexical_cast.hpp */; };
62 2B7F47581708365200A106A9 /* lexical_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45881708365100A106A9 /* lexical_cast.hpp */; };
63 2B7F47591708365200A106A9 /* lexical_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45881708365100A106A9 /* lexical_cast.hpp */; };
64 2B7F475A1708365200A106A9 /* make_shared.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458A1708365100A106A9 /* make_shared.hpp */; };
65 2B7F475B1708365200A106A9 /* make_shared.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458A1708365100A106A9 /* make_shared.hpp */; };
66 2B7F475C1708365200A106A9 /* make_shared.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458A1708365100A106A9 /* make_shared.hpp */; };
67 2B7F475D1708365200A106A9 /* make_shared.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458A1708365100A106A9 /* make_shared.hpp */; };
68 2B7F475E1708365200A106A9 /* make_shared.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458A1708365100A106A9 /* make_shared.hpp */; };
69 2B7F475F1708365200A106A9 /* common_factor_rt.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458C1708365100A106A9 /* common_factor_rt.hpp */; };
70 2B7F47601708365200A106A9 /* common_factor_rt.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458C1708365100A106A9 /* common_factor_rt.hpp */; };
71 2B7F47611708365200A106A9 /* common_factor_rt.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458C1708365100A106A9 /* common_factor_rt.hpp */; };
72 2B7F47621708365200A106A9 /* common_factor_rt.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458C1708365100A106A9 /* common_factor_rt.hpp */; };
73 2B7F47631708365200A106A9 /* common_factor_rt.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458C1708365100A106A9 /* common_factor_rt.hpp */; };
74 2B7F47641708365200A106A9 /* noncopyable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458D1708365100A106A9 /* noncopyable.hpp */; };
75 2B7F47651708365200A106A9 /* noncopyable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458D1708365100A106A9 /* noncopyable.hpp */; };
76 2B7F47661708365200A106A9 /* noncopyable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458D1708365100A106A9 /* noncopyable.hpp */; };
77 2B7F47671708365200A106A9 /* noncopyable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458D1708365100A106A9 /* noncopyable.hpp */; };
78 2B7F47681708365200A106A9 /* noncopyable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458D1708365100A106A9 /* noncopyable.hpp */; };
79 2B7F47691708365200A106A9 /* pointer_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458E1708365100A106A9 /* pointer_cast.hpp */; };
80 2B7F476A1708365200A106A9 /* pointer_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458E1708365100A106A9 /* pointer_cast.hpp */; };
81 2B7F476B1708365200A106A9 /* pointer_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458E1708365100A106A9 /* pointer_cast.hpp */; };
82 2B7F476C1708365200A106A9 /* pointer_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458E1708365100A106A9 /* pointer_cast.hpp */; };
83 2B7F476D1708365200A106A9 /* pointer_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458E1708365100A106A9 /* pointer_cast.hpp */; };
84 2B7F476E1708365200A106A9 /* scoped_array.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458F1708365100A106A9 /* scoped_array.hpp */; };
85 2B7F476F1708365200A106A9 /* scoped_array.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458F1708365100A106A9 /* scoped_array.hpp */; };
86 2B7F47701708365200A106A9 /* scoped_array.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458F1708365100A106A9 /* scoped_array.hpp */; };
87 2B7F47711708365200A106A9 /* scoped_array.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458F1708365100A106A9 /* scoped_array.hpp */; };
88 2B7F47721708365200A106A9 /* scoped_array.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F458F1708365100A106A9 /* scoped_array.hpp */; };
89 2B7F47731708365200A106A9 /* scoped_ptr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45901708365100A106A9 /* scoped_ptr.hpp */; };
90 2B7F47741708365200A106A9 /* scoped_ptr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45901708365100A106A9 /* scoped_ptr.hpp */; };
91 2B7F47751708365200A106A9 /* scoped_ptr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45901708365100A106A9 /* scoped_ptr.hpp */; };
92 2B7F47761708365200A106A9 /* scoped_ptr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45901708365100A106A9 /* scoped_ptr.hpp */; };
93 2B7F47771708365200A106A9 /* scoped_ptr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45901708365100A106A9 /* scoped_ptr.hpp */; };
94 2B7F47781708365200A106A9 /* shared_array.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45911708365100A106A9 /* shared_array.hpp */; };
95 2B7F47791708365200A106A9 /* shared_array.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45911708365100A106A9 /* shared_array.hpp */; };
96 2B7F477A1708365200A106A9 /* shared_array.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45911708365100A106A9 /* shared_array.hpp */; };
97 2B7F477B1708365200A106A9 /* shared_array.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45911708365100A106A9 /* shared_array.hpp */; };
98 2B7F477C1708365200A106A9 /* shared_array.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45911708365100A106A9 /* shared_array.hpp */; };
99 2B7F477D1708365200A106A9 /* shared_ptr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45921708365100A106A9 /* shared_ptr.hpp */; };
100 2B7F477E1708365200A106A9 /* shared_ptr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45921708365100A106A9 /* shared_ptr.hpp */; };
101 2B7F477F1708365200A106A9 /* shared_ptr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45921708365100A106A9 /* shared_ptr.hpp */; };
102 2B7F47801708365200A106A9 /* shared_ptr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45921708365100A106A9 /* shared_ptr.hpp */; };
103 2B7F47811708365200A106A9 /* shared_ptr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45921708365100A106A9 /* shared_ptr.hpp */; };
104 2B7F47821708365200A106A9 /* static_assert.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45931708365100A106A9 /* static_assert.hpp */; };
105 2B7F47831708365200A106A9 /* static_assert.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45931708365100A106A9 /* static_assert.hpp */; };
106 2B7F47841708365200A106A9 /* static_assert.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45931708365100A106A9 /* static_assert.hpp */; };
107 2B7F47851708365200A106A9 /* static_assert.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45931708365100A106A9 /* static_assert.hpp */; };
108 2B7F47861708365200A106A9 /* static_assert.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45931708365100A106A9 /* static_assert.hpp */; };
109 2B7F47871708365200A106A9 /* timer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45941708365100A106A9 /* timer.hpp */; };
110 2B7F47881708365200A106A9 /* timer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45941708365100A106A9 /* timer.hpp */; };
111 2B7F47891708365200A106A9 /* timer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45941708365100A106A9 /* timer.hpp */; };
112 2B7F478A1708365200A106A9 /* timer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45941708365100A106A9 /* timer.hpp */; };
113 2B7F478B1708365200A106A9 /* timer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45941708365100A106A9 /* timer.hpp */; };
114 2B7F478C1708365200A106A9 /* tuple.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45961708365100A106A9 /* tuple.hpp */; };
115 2B7F478D1708365200A106A9 /* tuple.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45961708365100A106A9 /* tuple.hpp */; };
116 2B7F478E1708365200A106A9 /* tuple.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45961708365100A106A9 /* tuple.hpp */; };
117 2B7F478F1708365200A106A9 /* tuple.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45961708365100A106A9 /* tuple.hpp */; };
118 2B7F47901708365200A106A9 /* tuple.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45961708365100A106A9 /* tuple.hpp */; };
119 2B7F479B1708365200A106A9 /* ByteSwap.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45991708365100A106A9 /* ByteSwap.h */; };
120 2B7F479C1708365200A106A9 /* ByteSwap.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45991708365100A106A9 /* ByteSwap.h */; };
121 2B7F479D1708365200A106A9 /* ByteSwap.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45991708365100A106A9 /* ByteSwap.h */; };
122 2B7F479E1708365200A106A9 /* ByteSwap.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45991708365100A106A9 /* ByteSwap.h */; };
123 2B7F479F1708365200A106A9 /* ByteSwap.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45991708365100A106A9 /* ByteSwap.h */; };
124 2B7F47A01708365200A106A9 /* CalcTangentsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F459A1708365100A106A9 /* CalcTangentsProcess.cpp */; };
125 2B7F47A11708365200A106A9 /* CalcTangentsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F459A1708365100A106A9 /* CalcTangentsProcess.cpp */; };
126 2B7F47A21708365200A106A9 /* CalcTangentsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F459A1708365100A106A9 /* CalcTangentsProcess.cpp */; };
127 2B7F47A31708365200A106A9 /* CalcTangentsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F459A1708365100A106A9 /* CalcTangentsProcess.cpp */; };
128 2B7F47A41708365200A106A9 /* CalcTangentsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F459A1708365100A106A9 /* CalcTangentsProcess.cpp */; };
129 2B7F47A51708365200A106A9 /* CalcTangentsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F459B1708365100A106A9 /* CalcTangentsProcess.h */; };
130 2B7F47A61708365200A106A9 /* CalcTangentsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F459B1708365100A106A9 /* CalcTangentsProcess.h */; };
131 2B7F47A71708365200A106A9 /* CalcTangentsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F459B1708365100A106A9 /* CalcTangentsProcess.h */; };
132 2B7F47A81708365200A106A9 /* CalcTangentsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F459B1708365100A106A9 /* CalcTangentsProcess.h */; };
133 2B7F47A91708365200A106A9 /* CalcTangentsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F459B1708365100A106A9 /* CalcTangentsProcess.h */; };
134 2B7F47AA1708365200A106A9 /* CInterfaceIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F459C1708365100A106A9 /* CInterfaceIOWrapper.h */; };
135 2B7F47AB1708365200A106A9 /* CInterfaceIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F459C1708365100A106A9 /* CInterfaceIOWrapper.h */; };
136 2B7F47AC1708365200A106A9 /* CInterfaceIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F459C1708365100A106A9 /* CInterfaceIOWrapper.h */; };
137 2B7F47AD1708365200A106A9 /* CInterfaceIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F459C1708365100A106A9 /* CInterfaceIOWrapper.h */; };
138 2B7F47AE1708365200A106A9 /* CInterfaceIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F459C1708365100A106A9 /* CInterfaceIOWrapper.h */; };
139 2B7F47BE1708365200A106A9 /* ColladaExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A11708365100A106A9 /* ColladaExporter.cpp */; };
140 2B7F47BF1708365200A106A9 /* ColladaExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A11708365100A106A9 /* ColladaExporter.cpp */; };
141 2B7F47C01708365200A106A9 /* ColladaExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A11708365100A106A9 /* ColladaExporter.cpp */; };
142 2B7F47C11708365200A106A9 /* ColladaExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A11708365100A106A9 /* ColladaExporter.cpp */; };
143 2B7F47C21708365200A106A9 /* ColladaExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A11708365100A106A9 /* ColladaExporter.cpp */; };
144 2B7F47C31708365200A106A9 /* ColladaExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A21708365100A106A9 /* ColladaExporter.h */; };
145 2B7F47C41708365200A106A9 /* ColladaExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A21708365100A106A9 /* ColladaExporter.h */; };
146 2B7F47C51708365200A106A9 /* ColladaExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A21708365100A106A9 /* ColladaExporter.h */; };
147 2B7F47C61708365200A106A9 /* ColladaExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A21708365100A106A9 /* ColladaExporter.h */; };
148 2B7F47C71708365200A106A9 /* ColladaExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A21708365100A106A9 /* ColladaExporter.h */; };
149 2B7F47C81708365200A106A9 /* ColladaHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A31708365100A106A9 /* ColladaHelper.h */; };
150 2B7F47C91708365200A106A9 /* ColladaHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A31708365100A106A9 /* ColladaHelper.h */; };
151 2B7F47CA1708365200A106A9 /* ColladaHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A31708365100A106A9 /* ColladaHelper.h */; };
152 2B7F47CB1708365200A106A9 /* ColladaHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A31708365100A106A9 /* ColladaHelper.h */; };
153 2B7F47CC1708365200A106A9 /* ColladaHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A31708365100A106A9 /* ColladaHelper.h */; };
154 2B7F47CD1708365200A106A9 /* ColladaLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A41708365100A106A9 /* ColladaLoader.cpp */; };
155 2B7F47CE1708365200A106A9 /* ColladaLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A41708365100A106A9 /* ColladaLoader.cpp */; };
156 2B7F47CF1708365200A106A9 /* ColladaLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A41708365100A106A9 /* ColladaLoader.cpp */; };
157 2B7F47D01708365200A106A9 /* ColladaLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A41708365100A106A9 /* ColladaLoader.cpp */; };
158 2B7F47D11708365200A106A9 /* ColladaLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A41708365100A106A9 /* ColladaLoader.cpp */; };
159 2B7F47D21708365200A106A9 /* ColladaLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A51708365100A106A9 /* ColladaLoader.h */; };
160 2B7F47D31708365200A106A9 /* ColladaLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A51708365100A106A9 /* ColladaLoader.h */; };
161 2B7F47D41708365200A106A9 /* ColladaLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A51708365100A106A9 /* ColladaLoader.h */; };
162 2B7F47D51708365200A106A9 /* ColladaLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A51708365100A106A9 /* ColladaLoader.h */; };
163 2B7F47D61708365200A106A9 /* ColladaLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A51708365100A106A9 /* ColladaLoader.h */; };
164 2B7F47D71708365200A106A9 /* ColladaParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A61708365100A106A9 /* ColladaParser.cpp */; };
165 2B7F47D81708365200A106A9 /* ColladaParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A61708365100A106A9 /* ColladaParser.cpp */; };
166 2B7F47D91708365200A106A9 /* ColladaParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A61708365100A106A9 /* ColladaParser.cpp */; };
167 2B7F47DA1708365200A106A9 /* ColladaParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A61708365100A106A9 /* ColladaParser.cpp */; };
168 2B7F47DB1708365200A106A9 /* ColladaParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A61708365100A106A9 /* ColladaParser.cpp */; };
169 2B7F47DC1708365200A106A9 /* ColladaParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A71708365100A106A9 /* ColladaParser.h */; };
170 2B7F47DD1708365200A106A9 /* ColladaParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A71708365100A106A9 /* ColladaParser.h */; };
171 2B7F47DE1708365200A106A9 /* ColladaParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A71708365100A106A9 /* ColladaParser.h */; };
172 2B7F47DF1708365200A106A9 /* ColladaParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A71708365100A106A9 /* ColladaParser.h */; };
173 2B7F47E01708365200A106A9 /* ColladaParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A71708365100A106A9 /* ColladaParser.h */; };
174 2B7F47E11708365200A106A9 /* ComputeUVMappingProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A81708365100A106A9 /* ComputeUVMappingProcess.cpp */; };
175 2B7F47E21708365200A106A9 /* ComputeUVMappingProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A81708365100A106A9 /* ComputeUVMappingProcess.cpp */; };
176 2B7F47E31708365200A106A9 /* ComputeUVMappingProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A81708365100A106A9 /* ComputeUVMappingProcess.cpp */; };
177 2B7F47E41708365200A106A9 /* ComputeUVMappingProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A81708365100A106A9 /* ComputeUVMappingProcess.cpp */; };
178 2B7F47E51708365200A106A9 /* ComputeUVMappingProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45A81708365100A106A9 /* ComputeUVMappingProcess.cpp */; };
179 2B7F47E61708365200A106A9 /* ComputeUVMappingProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A91708365100A106A9 /* ComputeUVMappingProcess.h */; };
180 2B7F47E71708365200A106A9 /* ComputeUVMappingProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A91708365100A106A9 /* ComputeUVMappingProcess.h */; };
181 2B7F47E81708365200A106A9 /* ComputeUVMappingProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A91708365100A106A9 /* ComputeUVMappingProcess.h */; };
182 2B7F47E91708365200A106A9 /* ComputeUVMappingProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A91708365100A106A9 /* ComputeUVMappingProcess.h */; };
183 2B7F47EA1708365200A106A9 /* ComputeUVMappingProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45A91708365100A106A9 /* ComputeUVMappingProcess.h */; };
184 2B7F47EB1708365200A106A9 /* ConvertToLHProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45AA1708365100A106A9 /* ConvertToLHProcess.cpp */; };
185 2B7F47EC1708365200A106A9 /* ConvertToLHProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45AA1708365100A106A9 /* ConvertToLHProcess.cpp */; };
186 2B7F47ED1708365200A106A9 /* ConvertToLHProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45AA1708365100A106A9 /* ConvertToLHProcess.cpp */; };
187 2B7F47EE1708365200A106A9 /* ConvertToLHProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45AA1708365100A106A9 /* ConvertToLHProcess.cpp */; };
188 2B7F47EF1708365200A106A9 /* ConvertToLHProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45AA1708365100A106A9 /* ConvertToLHProcess.cpp */; };
189 2B7F47F01708365200A106A9 /* ConvertToLHProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45AB1708365100A106A9 /* ConvertToLHProcess.h */; };
190 2B7F47F11708365200A106A9 /* ConvertToLHProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45AB1708365100A106A9 /* ConvertToLHProcess.h */; };
191 2B7F47F21708365200A106A9 /* ConvertToLHProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45AB1708365100A106A9 /* ConvertToLHProcess.h */; };
192 2B7F47F31708365200A106A9 /* ConvertToLHProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45AB1708365100A106A9 /* ConvertToLHProcess.h */; };
193 2B7F47F41708365200A106A9 /* ConvertToLHProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45AB1708365100A106A9 /* ConvertToLHProcess.h */; };
194 2B7F47FF1708365200A106A9 /* DeboneProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45AE1708365100A106A9 /* DeboneProcess.cpp */; };
195 2B7F48001708365200A106A9 /* DeboneProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45AE1708365100A106A9 /* DeboneProcess.cpp */; };
196 2B7F48011708365200A106A9 /* DeboneProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45AE1708365100A106A9 /* DeboneProcess.cpp */; };
197 2B7F48021708365200A106A9 /* DeboneProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45AE1708365100A106A9 /* DeboneProcess.cpp */; };
198 2B7F48031708365200A106A9 /* DeboneProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45AE1708365100A106A9 /* DeboneProcess.cpp */; };
199 2B7F48041708365200A106A9 /* DeboneProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45AF1708365100A106A9 /* DeboneProcess.h */; };
200 2B7F48051708365200A106A9 /* DeboneProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45AF1708365100A106A9 /* DeboneProcess.h */; };
201 2B7F48061708365200A106A9 /* DeboneProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45AF1708365100A106A9 /* DeboneProcess.h */; };
202 2B7F48071708365200A106A9 /* DeboneProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45AF1708365100A106A9 /* DeboneProcess.h */; };
203 2B7F48081708365200A106A9 /* DeboneProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45AF1708365100A106A9 /* DeboneProcess.h */; };
204 2B7F48091708365200A106A9 /* DefaultIOStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45B01708365100A106A9 /* DefaultIOStream.cpp */; };
205 2B7F480A1708365200A106A9 /* DefaultIOStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45B01708365100A106A9 /* DefaultIOStream.cpp */; };
206 2B7F480B1708365200A106A9 /* DefaultIOStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45B01708365100A106A9 /* DefaultIOStream.cpp */; };
207 2B7F480C1708365200A106A9 /* DefaultIOStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45B01708365100A106A9 /* DefaultIOStream.cpp */; };
208 2B7F480D1708365200A106A9 /* DefaultIOStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45B01708365100A106A9 /* DefaultIOStream.cpp */; };
209 2B7F480E1708365200A106A9 /* DefaultIOStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B11708365100A106A9 /* DefaultIOStream.h */; };
210 2B7F480F1708365200A106A9 /* DefaultIOStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B11708365100A106A9 /* DefaultIOStream.h */; };
211 2B7F48101708365200A106A9 /* DefaultIOStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B11708365100A106A9 /* DefaultIOStream.h */; };
212 2B7F48111708365200A106A9 /* DefaultIOStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B11708365100A106A9 /* DefaultIOStream.h */; };
213 2B7F48121708365200A106A9 /* DefaultIOStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B11708365100A106A9 /* DefaultIOStream.h */; };
214 2B7F48131708365200A106A9 /* DefaultIOSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45B21708365100A106A9 /* DefaultIOSystem.cpp */; };
215 2B7F48141708365200A106A9 /* DefaultIOSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45B21708365100A106A9 /* DefaultIOSystem.cpp */; };
216 2B7F48151708365200A106A9 /* DefaultIOSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45B21708365100A106A9 /* DefaultIOSystem.cpp */; };
217 2B7F48161708365200A106A9 /* DefaultIOSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45B21708365100A106A9 /* DefaultIOSystem.cpp */; };
218 2B7F48171708365200A106A9 /* DefaultIOSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45B21708365100A106A9 /* DefaultIOSystem.cpp */; };
219 2B7F48181708365200A106A9 /* DefaultIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B31708365100A106A9 /* DefaultIOSystem.h */; };
220 2B7F48191708365200A106A9 /* DefaultIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B31708365100A106A9 /* DefaultIOSystem.h */; };
221 2B7F481A1708365200A106A9 /* DefaultIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B31708365100A106A9 /* DefaultIOSystem.h */; };
222 2B7F481B1708365200A106A9 /* DefaultIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B31708365100A106A9 /* DefaultIOSystem.h */; };
223 2B7F481C1708365200A106A9 /* DefaultIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B31708365100A106A9 /* DefaultIOSystem.h */; };
224 2B7F481D1708365200A106A9 /* DefaultLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45B41708365100A106A9 /* DefaultLogger.cpp */; };
225 2B7F481E1708365200A106A9 /* DefaultLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45B41708365100A106A9 /* DefaultLogger.cpp */; };
226 2B7F481F1708365200A106A9 /* DefaultLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45B41708365100A106A9 /* DefaultLogger.cpp */; };
227 2B7F48201708365200A106A9 /* DefaultLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45B41708365100A106A9 /* DefaultLogger.cpp */; };
228 2B7F48211708365200A106A9 /* DefaultLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45B41708365100A106A9 /* DefaultLogger.cpp */; };
229 2B7F48221708365200A106A9 /* DefaultProgressHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B51708365100A106A9 /* DefaultProgressHandler.h */; };
230 2B7F48231708365200A106A9 /* DefaultProgressHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B51708365100A106A9 /* DefaultProgressHandler.h */; };
231 2B7F48241708365200A106A9 /* DefaultProgressHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B51708365100A106A9 /* DefaultProgressHandler.h */; };
232 2B7F48251708365200A106A9 /* DefaultProgressHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B51708365100A106A9 /* DefaultProgressHandler.h */; };
233 2B7F48261708365200A106A9 /* DefaultProgressHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B51708365100A106A9 /* DefaultProgressHandler.h */; };
234 2B7F48361708365200A106A9 /* Exceptional.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B91708365100A106A9 /* Exceptional.h */; };
235 2B7F48371708365200A106A9 /* Exceptional.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B91708365100A106A9 /* Exceptional.h */; };
236 2B7F48381708365200A106A9 /* Exceptional.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B91708365100A106A9 /* Exceptional.h */; };
237 2B7F48391708365200A106A9 /* Exceptional.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B91708365100A106A9 /* Exceptional.h */; };
238 2B7F483A1708365200A106A9 /* Exceptional.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45B91708365100A106A9 /* Exceptional.h */; };
239 2B7F483B1708365200A106A9 /* Exporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BA1708365100A106A9 /* Exporter.cpp */; };
240 2B7F483C1708365200A106A9 /* Exporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BA1708365100A106A9 /* Exporter.cpp */; };
241 2B7F483D1708365200A106A9 /* Exporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BA1708365100A106A9 /* Exporter.cpp */; };
242 2B7F483E1708365200A106A9 /* Exporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BA1708365100A106A9 /* Exporter.cpp */; };
243 2B7F483F1708365200A106A9 /* Exporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BA1708365100A106A9 /* Exporter.cpp */; };
244 2B7F48401708365200A106A9 /* fast_atof.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45BB1708365100A106A9 /* fast_atof.h */; };
245 2B7F48411708365200A106A9 /* fast_atof.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45BB1708365100A106A9 /* fast_atof.h */; };
246 2B7F48421708365200A106A9 /* fast_atof.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45BB1708365100A106A9 /* fast_atof.h */; };
247 2B7F48431708365200A106A9 /* fast_atof.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45BB1708365100A106A9 /* fast_atof.h */; };
248 2B7F48441708365200A106A9 /* fast_atof.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45BB1708365100A106A9 /* fast_atof.h */; };
249 2B7F48451708365200A106A9 /* FBXAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BC1708365100A106A9 /* FBXAnimation.cpp */; };
250 2B7F48461708365200A106A9 /* FBXAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BC1708365100A106A9 /* FBXAnimation.cpp */; };
251 2B7F48471708365200A106A9 /* FBXAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BC1708365100A106A9 /* FBXAnimation.cpp */; };
252 2B7F48481708365200A106A9 /* FBXAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BC1708365100A106A9 /* FBXAnimation.cpp */; };
253 2B7F48491708365200A106A9 /* FBXAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BC1708365100A106A9 /* FBXAnimation.cpp */; };
254 2B7F484A1708365200A106A9 /* FBXBinaryTokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BD1708365100A106A9 /* FBXBinaryTokenizer.cpp */; };
255 2B7F484B1708365200A106A9 /* FBXBinaryTokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BD1708365100A106A9 /* FBXBinaryTokenizer.cpp */; };
256 2B7F484C1708365200A106A9 /* FBXBinaryTokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BD1708365100A106A9 /* FBXBinaryTokenizer.cpp */; };
257 2B7F484D1708365200A106A9 /* FBXBinaryTokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BD1708365100A106A9 /* FBXBinaryTokenizer.cpp */; };
258 2B7F484E1708365200A106A9 /* FBXBinaryTokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BD1708365100A106A9 /* FBXBinaryTokenizer.cpp */; };
259 2B7F484F1708365200A106A9 /* FBXCompileConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45BE1708365100A106A9 /* FBXCompileConfig.h */; };
260 2B7F48501708365200A106A9 /* FBXCompileConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45BE1708365100A106A9 /* FBXCompileConfig.h */; };
261 2B7F48511708365200A106A9 /* FBXCompileConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45BE1708365100A106A9 /* FBXCompileConfig.h */; };
262 2B7F48521708365200A106A9 /* FBXCompileConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45BE1708365100A106A9 /* FBXCompileConfig.h */; };
263 2B7F48531708365200A106A9 /* FBXCompileConfig.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45BE1708365100A106A9 /* FBXCompileConfig.h */; };
264 2B7F48541708365200A106A9 /* FBXConverter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BF1708365100A106A9 /* FBXConverter.cpp */; };
265 2B7F48551708365200A106A9 /* FBXConverter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BF1708365100A106A9 /* FBXConverter.cpp */; };
266 2B7F48561708365200A106A9 /* FBXConverter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BF1708365100A106A9 /* FBXConverter.cpp */; };
267 2B7F48571708365200A106A9 /* FBXConverter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BF1708365100A106A9 /* FBXConverter.cpp */; };
268 2B7F48581708365200A106A9 /* FBXConverter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45BF1708365100A106A9 /* FBXConverter.cpp */; };
269 2B7F48591708365200A106A9 /* FBXConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C01708365100A106A9 /* FBXConverter.h */; };
270 2B7F485A1708365200A106A9 /* FBXConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C01708365100A106A9 /* FBXConverter.h */; };
271 2B7F485B1708365200A106A9 /* FBXConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C01708365100A106A9 /* FBXConverter.h */; };
272 2B7F485C1708365200A106A9 /* FBXConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C01708365100A106A9 /* FBXConverter.h */; };
273 2B7F485D1708365200A106A9 /* FBXConverter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C01708365100A106A9 /* FBXConverter.h */; };
274 2B7F485E1708365200A106A9 /* FBXDeformer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C11708365100A106A9 /* FBXDeformer.cpp */; };
275 2B7F485F1708365200A106A9 /* FBXDeformer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C11708365100A106A9 /* FBXDeformer.cpp */; };
276 2B7F48601708365200A106A9 /* FBXDeformer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C11708365100A106A9 /* FBXDeformer.cpp */; };
277 2B7F48611708365200A106A9 /* FBXDeformer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C11708365100A106A9 /* FBXDeformer.cpp */; };
278 2B7F48621708365200A106A9 /* FBXDeformer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C11708365100A106A9 /* FBXDeformer.cpp */; };
279 2B7F48631708365200A106A9 /* FBXDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C21708365100A106A9 /* FBXDocument.cpp */; };
280 2B7F48641708365200A106A9 /* FBXDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C21708365100A106A9 /* FBXDocument.cpp */; };
281 2B7F48651708365200A106A9 /* FBXDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C21708365100A106A9 /* FBXDocument.cpp */; };
282 2B7F48661708365200A106A9 /* FBXDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C21708365100A106A9 /* FBXDocument.cpp */; };
283 2B7F48671708365200A106A9 /* FBXDocument.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C21708365100A106A9 /* FBXDocument.cpp */; };
284 2B7F48681708365200A106A9 /* FBXDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C31708365100A106A9 /* FBXDocument.h */; };
285 2B7F48691708365200A106A9 /* FBXDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C31708365100A106A9 /* FBXDocument.h */; };
286 2B7F486A1708365200A106A9 /* FBXDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C31708365100A106A9 /* FBXDocument.h */; };
287 2B7F486B1708365200A106A9 /* FBXDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C31708365100A106A9 /* FBXDocument.h */; };
288 2B7F486C1708365200A106A9 /* FBXDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C31708365100A106A9 /* FBXDocument.h */; };
289 2B7F486D1708365200A106A9 /* FBXDocumentUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C41708365100A106A9 /* FBXDocumentUtil.cpp */; };
290 2B7F486E1708365200A106A9 /* FBXDocumentUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C41708365100A106A9 /* FBXDocumentUtil.cpp */; };
291 2B7F486F1708365200A106A9 /* FBXDocumentUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C41708365100A106A9 /* FBXDocumentUtil.cpp */; };
292 2B7F48701708365200A106A9 /* FBXDocumentUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C41708365100A106A9 /* FBXDocumentUtil.cpp */; };
293 2B7F48711708365200A106A9 /* FBXDocumentUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C41708365100A106A9 /* FBXDocumentUtil.cpp */; };
294 2B7F48721708365200A106A9 /* FBXDocumentUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C51708365100A106A9 /* FBXDocumentUtil.h */; };
295 2B7F48731708365200A106A9 /* FBXDocumentUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C51708365100A106A9 /* FBXDocumentUtil.h */; };
296 2B7F48741708365200A106A9 /* FBXDocumentUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C51708365100A106A9 /* FBXDocumentUtil.h */; };
297 2B7F48751708365200A106A9 /* FBXDocumentUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C51708365100A106A9 /* FBXDocumentUtil.h */; };
298 2B7F48761708365200A106A9 /* FBXDocumentUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C51708365100A106A9 /* FBXDocumentUtil.h */; };
299 2B7F48771708365200A106A9 /* FBXImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C61708365100A106A9 /* FBXImporter.cpp */; };
300 2B7F48781708365200A106A9 /* FBXImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C61708365100A106A9 /* FBXImporter.cpp */; };
301 2B7F48791708365200A106A9 /* FBXImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C61708365100A106A9 /* FBXImporter.cpp */; };
302 2B7F487A1708365200A106A9 /* FBXImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C61708365100A106A9 /* FBXImporter.cpp */; };
303 2B7F487B1708365200A106A9 /* FBXImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C61708365100A106A9 /* FBXImporter.cpp */; };
304 2B7F487C1708365200A106A9 /* FBXImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C71708365100A106A9 /* FBXImporter.h */; };
305 2B7F487D1708365200A106A9 /* FBXImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C71708365100A106A9 /* FBXImporter.h */; };
306 2B7F487E1708365200A106A9 /* FBXImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C71708365100A106A9 /* FBXImporter.h */; };
307 2B7F487F1708365200A106A9 /* FBXImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C71708365100A106A9 /* FBXImporter.h */; };
308 2B7F48801708365200A106A9 /* FBXImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C71708365100A106A9 /* FBXImporter.h */; };
309 2B7F48811708365200A106A9 /* FBXImportSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C81708365100A106A9 /* FBXImportSettings.h */; };
310 2B7F48821708365200A106A9 /* FBXImportSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C81708365100A106A9 /* FBXImportSettings.h */; };
311 2B7F48831708365200A106A9 /* FBXImportSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C81708365100A106A9 /* FBXImportSettings.h */; };
312 2B7F48841708365200A106A9 /* FBXImportSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C81708365100A106A9 /* FBXImportSettings.h */; };
313 2B7F48851708365200A106A9 /* FBXImportSettings.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45C81708365100A106A9 /* FBXImportSettings.h */; };
314 2B7F48861708365200A106A9 /* FBXMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C91708365100A106A9 /* FBXMaterial.cpp */; };
315 2B7F48871708365200A106A9 /* FBXMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C91708365100A106A9 /* FBXMaterial.cpp */; };
316 2B7F48881708365200A106A9 /* FBXMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C91708365100A106A9 /* FBXMaterial.cpp */; };
317 2B7F48891708365200A106A9 /* FBXMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C91708365100A106A9 /* FBXMaterial.cpp */; };
318 2B7F488A1708365200A106A9 /* FBXMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45C91708365100A106A9 /* FBXMaterial.cpp */; };
319 2B7F488B1708365200A106A9 /* FBXMeshGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CA1708365100A106A9 /* FBXMeshGeometry.cpp */; };
320 2B7F488C1708365200A106A9 /* FBXMeshGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CA1708365100A106A9 /* FBXMeshGeometry.cpp */; };
321 2B7F488D1708365200A106A9 /* FBXMeshGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CA1708365100A106A9 /* FBXMeshGeometry.cpp */; };
322 2B7F488E1708365200A106A9 /* FBXMeshGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CA1708365100A106A9 /* FBXMeshGeometry.cpp */; };
323 2B7F488F1708365200A106A9 /* FBXMeshGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CA1708365100A106A9 /* FBXMeshGeometry.cpp */; };
324 2B7F48901708365200A106A9 /* FBXModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CB1708365100A106A9 /* FBXModel.cpp */; };
325 2B7F48911708365200A106A9 /* FBXModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CB1708365100A106A9 /* FBXModel.cpp */; };
326 2B7F48921708365200A106A9 /* FBXModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CB1708365100A106A9 /* FBXModel.cpp */; };
327 2B7F48931708365200A106A9 /* FBXModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CB1708365100A106A9 /* FBXModel.cpp */; };
328 2B7F48941708365200A106A9 /* FBXModel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CB1708365100A106A9 /* FBXModel.cpp */; };
329 2B7F48951708365200A106A9 /* FBXNodeAttribute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CC1708365100A106A9 /* FBXNodeAttribute.cpp */; };
330 2B7F48961708365200A106A9 /* FBXNodeAttribute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CC1708365100A106A9 /* FBXNodeAttribute.cpp */; };
331 2B7F48971708365200A106A9 /* FBXNodeAttribute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CC1708365100A106A9 /* FBXNodeAttribute.cpp */; };
332 2B7F48981708365200A106A9 /* FBXNodeAttribute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CC1708365100A106A9 /* FBXNodeAttribute.cpp */; };
333 2B7F48991708365200A106A9 /* FBXNodeAttribute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CC1708365100A106A9 /* FBXNodeAttribute.cpp */; };
334 2B7F489A1708365200A106A9 /* FBXParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CD1708365100A106A9 /* FBXParser.cpp */; };
335 2B7F489B1708365200A106A9 /* FBXParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CD1708365100A106A9 /* FBXParser.cpp */; };
336 2B7F489C1708365200A106A9 /* FBXParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CD1708365100A106A9 /* FBXParser.cpp */; };
337 2B7F489D1708365200A106A9 /* FBXParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CD1708365100A106A9 /* FBXParser.cpp */; };
338 2B7F489E1708365200A106A9 /* FBXParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CD1708365100A106A9 /* FBXParser.cpp */; };
339 2B7F489F1708365200A106A9 /* FBXParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45CE1708365100A106A9 /* FBXParser.h */; };
340 2B7F48A01708365200A106A9 /* FBXParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45CE1708365100A106A9 /* FBXParser.h */; };
341 2B7F48A11708365200A106A9 /* FBXParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45CE1708365100A106A9 /* FBXParser.h */; };
342 2B7F48A21708365200A106A9 /* FBXParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45CE1708365100A106A9 /* FBXParser.h */; };
343 2B7F48A31708365200A106A9 /* FBXParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45CE1708365100A106A9 /* FBXParser.h */; };
344 2B7F48A41708365200A106A9 /* FBXProperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CF1708365100A106A9 /* FBXProperties.cpp */; };
345 2B7F48A51708365200A106A9 /* FBXProperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CF1708365100A106A9 /* FBXProperties.cpp */; };
346 2B7F48A61708365200A106A9 /* FBXProperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CF1708365100A106A9 /* FBXProperties.cpp */; };
347 2B7F48A71708365200A106A9 /* FBXProperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CF1708365100A106A9 /* FBXProperties.cpp */; };
348 2B7F48A81708365200A106A9 /* FBXProperties.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45CF1708365100A106A9 /* FBXProperties.cpp */; };
349 2B7F48A91708365200A106A9 /* FBXProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D01708365100A106A9 /* FBXProperties.h */; };
350 2B7F48AA1708365200A106A9 /* FBXProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D01708365100A106A9 /* FBXProperties.h */; };
351 2B7F48AB1708365200A106A9 /* FBXProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D01708365100A106A9 /* FBXProperties.h */; };
352 2B7F48AC1708365200A106A9 /* FBXProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D01708365100A106A9 /* FBXProperties.h */; };
353 2B7F48AD1708365200A106A9 /* FBXProperties.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D01708365100A106A9 /* FBXProperties.h */; };
354 2B7F48AE1708365200A106A9 /* FBXTokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D11708365100A106A9 /* FBXTokenizer.cpp */; };
355 2B7F48AF1708365200A106A9 /* FBXTokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D11708365100A106A9 /* FBXTokenizer.cpp */; };
356 2B7F48B01708365200A106A9 /* FBXTokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D11708365100A106A9 /* FBXTokenizer.cpp */; };
357 2B7F48B11708365200A106A9 /* FBXTokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D11708365100A106A9 /* FBXTokenizer.cpp */; };
358 2B7F48B21708365200A106A9 /* FBXTokenizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D11708365100A106A9 /* FBXTokenizer.cpp */; };
359 2B7F48B31708365200A106A9 /* FBXTokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D21708365100A106A9 /* FBXTokenizer.h */; };
360 2B7F48B41708365200A106A9 /* FBXTokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D21708365100A106A9 /* FBXTokenizer.h */; };
361 2B7F48B51708365200A106A9 /* FBXTokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D21708365100A106A9 /* FBXTokenizer.h */; };
362 2B7F48B61708365200A106A9 /* FBXTokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D21708365100A106A9 /* FBXTokenizer.h */; };
363 2B7F48B71708365200A106A9 /* FBXTokenizer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D21708365100A106A9 /* FBXTokenizer.h */; };
364 2B7F48B81708365200A106A9 /* FBXUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D31708365100A106A9 /* FBXUtil.cpp */; };
365 2B7F48B91708365200A106A9 /* FBXUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D31708365100A106A9 /* FBXUtil.cpp */; };
366 2B7F48BA1708365200A106A9 /* FBXUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D31708365100A106A9 /* FBXUtil.cpp */; };
367 2B7F48BB1708365200A106A9 /* FBXUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D31708365100A106A9 /* FBXUtil.cpp */; };
368 2B7F48BC1708365200A106A9 /* FBXUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D31708365100A106A9 /* FBXUtil.cpp */; };
369 2B7F48BD1708365200A106A9 /* FBXUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D41708365100A106A9 /* FBXUtil.h */; };
370 2B7F48BE1708365200A106A9 /* FBXUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D41708365100A106A9 /* FBXUtil.h */; };
371 2B7F48BF1708365200A106A9 /* FBXUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D41708365100A106A9 /* FBXUtil.h */; };
372 2B7F48C01708365200A106A9 /* FBXUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D41708365100A106A9 /* FBXUtil.h */; };
373 2B7F48C11708365200A106A9 /* FBXUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D41708365100A106A9 /* FBXUtil.h */; };
374 2B7F48C21708365200A106A9 /* FileLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D51708365100A106A9 /* FileLogStream.h */; };
375 2B7F48C31708365200A106A9 /* FileLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D51708365100A106A9 /* FileLogStream.h */; };
376 2B7F48C41708365200A106A9 /* FileLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D51708365100A106A9 /* FileLogStream.h */; };
377 2B7F48C51708365200A106A9 /* FileLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D51708365100A106A9 /* FileLogStream.h */; };
378 2B7F48C61708365200A106A9 /* FileLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D51708365100A106A9 /* FileLogStream.h */; };
379 2B7F48C71708365200A106A9 /* FileSystemFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D61708365100A106A9 /* FileSystemFilter.h */; };
380 2B7F48C81708365200A106A9 /* FileSystemFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D61708365100A106A9 /* FileSystemFilter.h */; };
381 2B7F48C91708365200A106A9 /* FileSystemFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D61708365100A106A9 /* FileSystemFilter.h */; };
382 2B7F48CA1708365200A106A9 /* FileSystemFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D61708365100A106A9 /* FileSystemFilter.h */; };
383 2B7F48CB1708365200A106A9 /* FileSystemFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D61708365100A106A9 /* FileSystemFilter.h */; };
384 2B7F48CC1708365200A106A9 /* FindDegenerates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D71708365100A106A9 /* FindDegenerates.cpp */; };
385 2B7F48CD1708365200A106A9 /* FindDegenerates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D71708365100A106A9 /* FindDegenerates.cpp */; };
386 2B7F48CE1708365200A106A9 /* FindDegenerates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D71708365100A106A9 /* FindDegenerates.cpp */; };
387 2B7F48CF1708365200A106A9 /* FindDegenerates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D71708365100A106A9 /* FindDegenerates.cpp */; };
388 2B7F48D01708365200A106A9 /* FindDegenerates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D71708365100A106A9 /* FindDegenerates.cpp */; };
389 2B7F48D11708365200A106A9 /* FindDegenerates.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D81708365100A106A9 /* FindDegenerates.h */; };
390 2B7F48D21708365200A106A9 /* FindDegenerates.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D81708365100A106A9 /* FindDegenerates.h */; };
391 2B7F48D31708365200A106A9 /* FindDegenerates.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D81708365100A106A9 /* FindDegenerates.h */; };
392 2B7F48D41708365200A106A9 /* FindDegenerates.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D81708365100A106A9 /* FindDegenerates.h */; };
393 2B7F48D51708365200A106A9 /* FindDegenerates.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45D81708365100A106A9 /* FindDegenerates.h */; };
394 2B7F48D61708365200A106A9 /* FindInstancesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D91708365100A106A9 /* FindInstancesProcess.cpp */; };
395 2B7F48D71708365200A106A9 /* FindInstancesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D91708365100A106A9 /* FindInstancesProcess.cpp */; };
396 2B7F48D81708365200A106A9 /* FindInstancesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D91708365100A106A9 /* FindInstancesProcess.cpp */; };
397 2B7F48D91708365200A106A9 /* FindInstancesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D91708365100A106A9 /* FindInstancesProcess.cpp */; };
398 2B7F48DA1708365200A106A9 /* FindInstancesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45D91708365100A106A9 /* FindInstancesProcess.cpp */; };
399 2B7F48DB1708365200A106A9 /* FindInstancesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DA1708365100A106A9 /* FindInstancesProcess.h */; };
400 2B7F48DC1708365200A106A9 /* FindInstancesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DA1708365100A106A9 /* FindInstancesProcess.h */; };
401 2B7F48DD1708365200A106A9 /* FindInstancesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DA1708365100A106A9 /* FindInstancesProcess.h */; };
402 2B7F48DE1708365200A106A9 /* FindInstancesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DA1708365100A106A9 /* FindInstancesProcess.h */; };
403 2B7F48DF1708365200A106A9 /* FindInstancesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DA1708365100A106A9 /* FindInstancesProcess.h */; };
404 2B7F48E01708365200A106A9 /* FindInvalidDataProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45DB1708365100A106A9 /* FindInvalidDataProcess.cpp */; };
405 2B7F48E11708365200A106A9 /* FindInvalidDataProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45DB1708365100A106A9 /* FindInvalidDataProcess.cpp */; };
406 2B7F48E21708365200A106A9 /* FindInvalidDataProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45DB1708365100A106A9 /* FindInvalidDataProcess.cpp */; };
407 2B7F48E31708365200A106A9 /* FindInvalidDataProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45DB1708365100A106A9 /* FindInvalidDataProcess.cpp */; };
408 2B7F48E41708365200A106A9 /* FindInvalidDataProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45DB1708365100A106A9 /* FindInvalidDataProcess.cpp */; };
409 2B7F48E51708365200A106A9 /* FindInvalidDataProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DC1708365100A106A9 /* FindInvalidDataProcess.h */; };
410 2B7F48E61708365200A106A9 /* FindInvalidDataProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DC1708365100A106A9 /* FindInvalidDataProcess.h */; };
411 2B7F48E71708365200A106A9 /* FindInvalidDataProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DC1708365100A106A9 /* FindInvalidDataProcess.h */; };
412 2B7F48E81708365200A106A9 /* FindInvalidDataProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DC1708365100A106A9 /* FindInvalidDataProcess.h */; };
413 2B7F48E91708365200A106A9 /* FindInvalidDataProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DC1708365100A106A9 /* FindInvalidDataProcess.h */; };
414 2B7F48EA1708365200A106A9 /* FixNormalsStep.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45DD1708365100A106A9 /* FixNormalsStep.cpp */; };
415 2B7F48EB1708365200A106A9 /* FixNormalsStep.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45DD1708365100A106A9 /* FixNormalsStep.cpp */; };
416 2B7F48EC1708365200A106A9 /* FixNormalsStep.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45DD1708365100A106A9 /* FixNormalsStep.cpp */; };
417 2B7F48ED1708365200A106A9 /* FixNormalsStep.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45DD1708365100A106A9 /* FixNormalsStep.cpp */; };
418 2B7F48EE1708365200A106A9 /* FixNormalsStep.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45DD1708365100A106A9 /* FixNormalsStep.cpp */; };
419 2B7F48EF1708365200A106A9 /* FixNormalsStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DE1708365100A106A9 /* FixNormalsStep.h */; };
420 2B7F48F01708365200A106A9 /* FixNormalsStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DE1708365100A106A9 /* FixNormalsStep.h */; };
421 2B7F48F11708365200A106A9 /* FixNormalsStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DE1708365100A106A9 /* FixNormalsStep.h */; };
422 2B7F48F21708365200A106A9 /* FixNormalsStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DE1708365100A106A9 /* FixNormalsStep.h */; };
423 2B7F48F31708365200A106A9 /* FixNormalsStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DE1708365100A106A9 /* FixNormalsStep.h */; };
424 2B7F48F41708365200A106A9 /* GenericProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DF1708365100A106A9 /* GenericProperty.h */; };
425 2B7F48F51708365200A106A9 /* GenericProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DF1708365100A106A9 /* GenericProperty.h */; };
426 2B7F48F61708365200A106A9 /* GenericProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DF1708365100A106A9 /* GenericProperty.h */; };
427 2B7F48F71708365200A106A9 /* GenericProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DF1708365100A106A9 /* GenericProperty.h */; };
428 2B7F48F81708365200A106A9 /* GenericProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45DF1708365100A106A9 /* GenericProperty.h */; };
429 2B7F48F91708365200A106A9 /* GenFaceNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45E01708365100A106A9 /* GenFaceNormalsProcess.cpp */; };
430 2B7F48FA1708365200A106A9 /* GenFaceNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45E01708365100A106A9 /* GenFaceNormalsProcess.cpp */; };
431 2B7F48FB1708365200A106A9 /* GenFaceNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45E01708365100A106A9 /* GenFaceNormalsProcess.cpp */; };
432 2B7F48FC1708365200A106A9 /* GenFaceNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45E01708365100A106A9 /* GenFaceNormalsProcess.cpp */; };
433 2B7F48FD1708365200A106A9 /* GenFaceNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45E01708365100A106A9 /* GenFaceNormalsProcess.cpp */; };
434 2B7F48FE1708365200A106A9 /* GenFaceNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45E11708365100A106A9 /* GenFaceNormalsProcess.h */; };
435 2B7F48FF1708365200A106A9 /* GenFaceNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45E11708365100A106A9 /* GenFaceNormalsProcess.h */; };
436 2B7F49001708365200A106A9 /* GenFaceNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45E11708365100A106A9 /* GenFaceNormalsProcess.h */; };
437 2B7F49011708365200A106A9 /* GenFaceNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45E11708365100A106A9 /* GenFaceNormalsProcess.h */; };
438 2B7F49021708365200A106A9 /* GenFaceNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45E11708365100A106A9 /* GenFaceNormalsProcess.h */; };
439 2B7F49031708365200A106A9 /* GenVertexNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45E21708365100A106A9 /* GenVertexNormalsProcess.cpp */; };
440 2B7F49041708365200A106A9 /* GenVertexNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45E21708365100A106A9 /* GenVertexNormalsProcess.cpp */; };
441 2B7F49051708365200A106A9 /* GenVertexNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45E21708365100A106A9 /* GenVertexNormalsProcess.cpp */; };
442 2B7F49061708365200A106A9 /* GenVertexNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45E21708365100A106A9 /* GenVertexNormalsProcess.cpp */; };
443 2B7F49071708365200A106A9 /* GenVertexNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45E21708365100A106A9 /* GenVertexNormalsProcess.cpp */; };
444 2B7F49081708365200A106A9 /* GenVertexNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45E31708365100A106A9 /* GenVertexNormalsProcess.h */; };
445 2B7F49091708365200A106A9 /* GenVertexNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45E31708365100A106A9 /* GenVertexNormalsProcess.h */; };
446 2B7F490A1708365200A106A9 /* GenVertexNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45E31708365100A106A9 /* GenVertexNormalsProcess.h */; };
447 2B7F490B1708365200A106A9 /* GenVertexNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45E31708365100A106A9 /* GenVertexNormalsProcess.h */; };
448 2B7F490C1708365200A106A9 /* GenVertexNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45E31708365100A106A9 /* GenVertexNormalsProcess.h */; };
449 2B7F49121708365200A106A9 /* Hash.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45E51708365100A106A9 /* Hash.h */; };
450 2B7F49131708365200A106A9 /* Hash.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45E51708365100A106A9 /* Hash.h */; };
451 2B7F49141708365200A106A9 /* Hash.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45E51708365100A106A9 /* Hash.h */; };
452 2B7F49151708365200A106A9 /* Hash.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45E51708365100A106A9 /* Hash.h */; };
453 2B7F49161708365200A106A9 /* Hash.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45E51708365100A106A9 /* Hash.h */; };
454 2B7F49261708365200A106A9 /* IFCBoolean.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45E91708365100A106A9 /* IFCBoolean.cpp */; };
455 2B7F49271708365200A106A9 /* IFCBoolean.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45E91708365100A106A9 /* IFCBoolean.cpp */; };
456 2B7F49281708365200A106A9 /* IFCBoolean.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45E91708365100A106A9 /* IFCBoolean.cpp */; };
457 2B7F49291708365200A106A9 /* IFCBoolean.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45E91708365100A106A9 /* IFCBoolean.cpp */; };
458 2B7F492A1708365200A106A9 /* IFCBoolean.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45E91708365100A106A9 /* IFCBoolean.cpp */; };
459 2B7F492B1708365200A106A9 /* IFCCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EA1708365100A106A9 /* IFCCurve.cpp */; };
460 2B7F492C1708365200A106A9 /* IFCCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EA1708365100A106A9 /* IFCCurve.cpp */; };
461 2B7F492D1708365200A106A9 /* IFCCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EA1708365100A106A9 /* IFCCurve.cpp */; };
462 2B7F492E1708365200A106A9 /* IFCCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EA1708365100A106A9 /* IFCCurve.cpp */; };
463 2B7F492F1708365200A106A9 /* IFCCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EA1708365100A106A9 /* IFCCurve.cpp */; };
464 2B7F49301708365200A106A9 /* IFCGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EB1708365100A106A9 /* IFCGeometry.cpp */; };
465 2B7F49311708365200A106A9 /* IFCGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EB1708365100A106A9 /* IFCGeometry.cpp */; };
466 2B7F49321708365200A106A9 /* IFCGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EB1708365100A106A9 /* IFCGeometry.cpp */; };
467 2B7F49331708365200A106A9 /* IFCGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EB1708365100A106A9 /* IFCGeometry.cpp */; };
468 2B7F49341708365200A106A9 /* IFCGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EB1708365100A106A9 /* IFCGeometry.cpp */; };
469 2B7F49351708365200A106A9 /* IFCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EC1708365100A106A9 /* IFCLoader.cpp */; };
470 2B7F49361708365200A106A9 /* IFCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EC1708365100A106A9 /* IFCLoader.cpp */; };
471 2B7F49371708365200A106A9 /* IFCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EC1708365100A106A9 /* IFCLoader.cpp */; };
472 2B7F49381708365200A106A9 /* IFCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EC1708365100A106A9 /* IFCLoader.cpp */; };
473 2B7F49391708365200A106A9 /* IFCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EC1708365100A106A9 /* IFCLoader.cpp */; };
474 2B7F493A1708365200A106A9 /* IFCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45ED1708365100A106A9 /* IFCLoader.h */; };
475 2B7F493B1708365200A106A9 /* IFCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45ED1708365100A106A9 /* IFCLoader.h */; };
476 2B7F493C1708365200A106A9 /* IFCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45ED1708365100A106A9 /* IFCLoader.h */; };
477 2B7F493D1708365200A106A9 /* IFCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45ED1708365100A106A9 /* IFCLoader.h */; };
478 2B7F493E1708365200A106A9 /* IFCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45ED1708365100A106A9 /* IFCLoader.h */; };
479 2B7F493F1708365200A106A9 /* IFCMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EE1708365100A106A9 /* IFCMaterial.cpp */; };
480 2B7F49401708365200A106A9 /* IFCMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EE1708365100A106A9 /* IFCMaterial.cpp */; };
481 2B7F49411708365200A106A9 /* IFCMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EE1708365100A106A9 /* IFCMaterial.cpp */; };
482 2B7F49421708365200A106A9 /* IFCMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EE1708365100A106A9 /* IFCMaterial.cpp */; };
483 2B7F49431708365200A106A9 /* IFCMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EE1708365100A106A9 /* IFCMaterial.cpp */; };
484 2B7F49441708365200A106A9 /* IFCOpenings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EF1708365100A106A9 /* IFCOpenings.cpp */; };
485 2B7F49451708365200A106A9 /* IFCOpenings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EF1708365100A106A9 /* IFCOpenings.cpp */; };
486 2B7F49461708365200A106A9 /* IFCOpenings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EF1708365100A106A9 /* IFCOpenings.cpp */; };
487 2B7F49471708365200A106A9 /* IFCOpenings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EF1708365100A106A9 /* IFCOpenings.cpp */; };
488 2B7F49481708365200A106A9 /* IFCOpenings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45EF1708365100A106A9 /* IFCOpenings.cpp */; };
489 2B7F49491708365200A106A9 /* IFCProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F01708365100A106A9 /* IFCProfile.cpp */; };
490 2B7F494A1708365200A106A9 /* IFCProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F01708365100A106A9 /* IFCProfile.cpp */; };
491 2B7F494B1708365200A106A9 /* IFCProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F01708365100A106A9 /* IFCProfile.cpp */; };
492 2B7F494C1708365200A106A9 /* IFCProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F01708365100A106A9 /* IFCProfile.cpp */; };
493 2B7F494D1708365200A106A9 /* IFCProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F01708365100A106A9 /* IFCProfile.cpp */; };
494 2B7F494E1708365200A106A9 /* IFCReaderGen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F11708365100A106A9 /* IFCReaderGen.cpp */; };
495 2B7F494F1708365200A106A9 /* IFCReaderGen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F11708365100A106A9 /* IFCReaderGen.cpp */; };
496 2B7F49501708365200A106A9 /* IFCReaderGen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F11708365100A106A9 /* IFCReaderGen.cpp */; };
497 2B7F49511708365200A106A9 /* IFCReaderGen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F11708365100A106A9 /* IFCReaderGen.cpp */; };
498 2B7F49521708365200A106A9 /* IFCReaderGen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F11708365100A106A9 /* IFCReaderGen.cpp */; };
499 2B7F49531708365200A106A9 /* IFCReaderGen.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F21708365100A106A9 /* IFCReaderGen.h */; };
500 2B7F49541708365200A106A9 /* IFCReaderGen.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F21708365100A106A9 /* IFCReaderGen.h */; };
501 2B7F49551708365200A106A9 /* IFCReaderGen.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F21708365100A106A9 /* IFCReaderGen.h */; };
502 2B7F49561708365200A106A9 /* IFCReaderGen.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F21708365100A106A9 /* IFCReaderGen.h */; };
503 2B7F49571708365200A106A9 /* IFCReaderGen.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F21708365100A106A9 /* IFCReaderGen.h */; };
504 2B7F49581708365200A106A9 /* IFCUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F31708365100A106A9 /* IFCUtil.cpp */; };
505 2B7F49591708365200A106A9 /* IFCUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F31708365100A106A9 /* IFCUtil.cpp */; };
506 2B7F495A1708365200A106A9 /* IFCUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F31708365100A106A9 /* IFCUtil.cpp */; };
507 2B7F495B1708365200A106A9 /* IFCUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F31708365100A106A9 /* IFCUtil.cpp */; };
508 2B7F495C1708365200A106A9 /* IFCUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F31708365100A106A9 /* IFCUtil.cpp */; };
509 2B7F495D1708365200A106A9 /* IFCUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F41708365100A106A9 /* IFCUtil.h */; };
510 2B7F495E1708365200A106A9 /* IFCUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F41708365100A106A9 /* IFCUtil.h */; };
511 2B7F495F1708365200A106A9 /* IFCUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F41708365100A106A9 /* IFCUtil.h */; };
512 2B7F49601708365200A106A9 /* IFCUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F41708365100A106A9 /* IFCUtil.h */; };
513 2B7F49611708365200A106A9 /* IFCUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F41708365100A106A9 /* IFCUtil.h */; };
514 2B7F49621708365200A106A9 /* IFF.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F51708365100A106A9 /* IFF.h */; };
515 2B7F49631708365200A106A9 /* IFF.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F51708365100A106A9 /* IFF.h */; };
516 2B7F49641708365200A106A9 /* IFF.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F51708365100A106A9 /* IFF.h */; };
517 2B7F49651708365200A106A9 /* IFF.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F51708365100A106A9 /* IFF.h */; };
518 2B7F49661708365200A106A9 /* IFF.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F51708365100A106A9 /* IFF.h */; };
519 2B7F49671708365200A106A9 /* Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F61708365100A106A9 /* Importer.cpp */; };
520 2B7F49681708365200A106A9 /* Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F61708365100A106A9 /* Importer.cpp */; };
521 2B7F49691708365200A106A9 /* Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F61708365100A106A9 /* Importer.cpp */; };
522 2B7F496A1708365200A106A9 /* Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F61708365100A106A9 /* Importer.cpp */; };
523 2B7F496B1708365200A106A9 /* Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F61708365100A106A9 /* Importer.cpp */; };
524 2B7F496C1708365200A106A9 /* Importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F71708365100A106A9 /* Importer.h */; };
525 2B7F496D1708365200A106A9 /* Importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F71708365100A106A9 /* Importer.h */; };
526 2B7F496E1708365200A106A9 /* Importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F71708365100A106A9 /* Importer.h */; };
527 2B7F496F1708365200A106A9 /* Importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F71708365100A106A9 /* Importer.h */; };
528 2B7F49701708365200A106A9 /* Importer.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45F71708365100A106A9 /* Importer.h */; };
529 2B7F49711708365200A106A9 /* ImporterRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F81708365100A106A9 /* ImporterRegistry.cpp */; };
530 2B7F49721708365200A106A9 /* ImporterRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F81708365100A106A9 /* ImporterRegistry.cpp */; };
531 2B7F49731708365200A106A9 /* ImporterRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F81708365100A106A9 /* ImporterRegistry.cpp */; };
532 2B7F49741708365200A106A9 /* ImporterRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F81708365100A106A9 /* ImporterRegistry.cpp */; };
533 2B7F49751708365200A106A9 /* ImporterRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F81708365100A106A9 /* ImporterRegistry.cpp */; };
534 2B7F49761708365200A106A9 /* ImproveCacheLocality.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F91708365100A106A9 /* ImproveCacheLocality.cpp */; };
535 2B7F49771708365200A106A9 /* ImproveCacheLocality.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F91708365100A106A9 /* ImproveCacheLocality.cpp */; };
536 2B7F49781708365200A106A9 /* ImproveCacheLocality.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F91708365100A106A9 /* ImproveCacheLocality.cpp */; };
537 2B7F49791708365200A106A9 /* ImproveCacheLocality.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F91708365100A106A9 /* ImproveCacheLocality.cpp */; };
538 2B7F497A1708365200A106A9 /* ImproveCacheLocality.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F45F91708365100A106A9 /* ImproveCacheLocality.cpp */; };
539 2B7F497B1708365200A106A9 /* ImproveCacheLocality.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45FA1708365100A106A9 /* ImproveCacheLocality.h */; };
540 2B7F497C1708365200A106A9 /* ImproveCacheLocality.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45FA1708365100A106A9 /* ImproveCacheLocality.h */; };
541 2B7F497D1708365200A106A9 /* ImproveCacheLocality.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45FA1708365100A106A9 /* ImproveCacheLocality.h */; };
542 2B7F497E1708365200A106A9 /* ImproveCacheLocality.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45FA1708365100A106A9 /* ImproveCacheLocality.h */; };
543 2B7F497F1708365200A106A9 /* ImproveCacheLocality.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F45FA1708365100A106A9 /* ImproveCacheLocality.h */; };
544 2B7F49A31708365200A106A9 /* JoinVerticesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46021708365100A106A9 /* JoinVerticesProcess.cpp */; };
545 2B7F49A41708365200A106A9 /* JoinVerticesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46021708365100A106A9 /* JoinVerticesProcess.cpp */; };
546 2B7F49A51708365200A106A9 /* JoinVerticesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46021708365100A106A9 /* JoinVerticesProcess.cpp */; };
547 2B7F49A61708365200A106A9 /* JoinVerticesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46021708365100A106A9 /* JoinVerticesProcess.cpp */; };
548 2B7F49A71708365200A106A9 /* JoinVerticesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46021708365100A106A9 /* JoinVerticesProcess.cpp */; };
549 2B7F49A81708365200A106A9 /* JoinVerticesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46031708365100A106A9 /* JoinVerticesProcess.h */; };
550 2B7F49A91708365200A106A9 /* JoinVerticesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46031708365100A106A9 /* JoinVerticesProcess.h */; };
551 2B7F49AA1708365200A106A9 /* JoinVerticesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46031708365100A106A9 /* JoinVerticesProcess.h */; };
552 2B7F49AB1708365200A106A9 /* JoinVerticesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46031708365100A106A9 /* JoinVerticesProcess.h */; };
553 2B7F49AC1708365200A106A9 /* JoinVerticesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46031708365100A106A9 /* JoinVerticesProcess.h */; };
554 2B7F49AD1708365200A106A9 /* LimitBoneWeightsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46041708365100A106A9 /* LimitBoneWeightsProcess.cpp */; };
555 2B7F49AE1708365200A106A9 /* LimitBoneWeightsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46041708365100A106A9 /* LimitBoneWeightsProcess.cpp */; };
556 2B7F49AF1708365200A106A9 /* LimitBoneWeightsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46041708365100A106A9 /* LimitBoneWeightsProcess.cpp */; };
557 2B7F49B01708365200A106A9 /* LimitBoneWeightsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46041708365100A106A9 /* LimitBoneWeightsProcess.cpp */; };
558 2B7F49B11708365200A106A9 /* LimitBoneWeightsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46041708365100A106A9 /* LimitBoneWeightsProcess.cpp */; };
559 2B7F49B21708365200A106A9 /* LimitBoneWeightsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46051708365100A106A9 /* LimitBoneWeightsProcess.h */; };
560 2B7F49B31708365200A106A9 /* LimitBoneWeightsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46051708365100A106A9 /* LimitBoneWeightsProcess.h */; };
561 2B7F49B41708365200A106A9 /* LimitBoneWeightsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46051708365100A106A9 /* LimitBoneWeightsProcess.h */; };
562 2B7F49B51708365200A106A9 /* LimitBoneWeightsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46051708365100A106A9 /* LimitBoneWeightsProcess.h */; };
563 2B7F49B61708365200A106A9 /* LimitBoneWeightsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46051708365100A106A9 /* LimitBoneWeightsProcess.h */; };
564 2B7F49B71708365200A106A9 /* LineSplitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46061708365100A106A9 /* LineSplitter.h */; };
565 2B7F49B81708365200A106A9 /* LineSplitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46061708365100A106A9 /* LineSplitter.h */; };
566 2B7F49B91708365200A106A9 /* LineSplitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46061708365100A106A9 /* LineSplitter.h */; };
567 2B7F49BA1708365200A106A9 /* LineSplitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46061708365100A106A9 /* LineSplitter.h */; };
568 2B7F49BB1708365200A106A9 /* LineSplitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46061708365100A106A9 /* LineSplitter.h */; };
569 2B7F49BC1708365200A106A9 /* LogAux.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46071708365100A106A9 /* LogAux.h */; };
570 2B7F49BD1708365200A106A9 /* LogAux.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46071708365100A106A9 /* LogAux.h */; };
571 2B7F49BE1708365200A106A9 /* LogAux.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46071708365100A106A9 /* LogAux.h */; };
572 2B7F49BF1708365200A106A9 /* LogAux.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46071708365100A106A9 /* LogAux.h */; };
573 2B7F49C01708365200A106A9 /* LogAux.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46071708365100A106A9 /* LogAux.h */; };
574 2B7F49F81708365200A106A9 /* MakeVerboseFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46141708365200A106A9 /* MakeVerboseFormat.cpp */; };
575 2B7F49F91708365200A106A9 /* MakeVerboseFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46141708365200A106A9 /* MakeVerboseFormat.cpp */; };
576 2B7F49FA1708365200A106A9 /* MakeVerboseFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46141708365200A106A9 /* MakeVerboseFormat.cpp */; };
577 2B7F49FB1708365200A106A9 /* MakeVerboseFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46141708365200A106A9 /* MakeVerboseFormat.cpp */; };
578 2B7F49FC1708365200A106A9 /* MakeVerboseFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46141708365200A106A9 /* MakeVerboseFormat.cpp */; };
579 2B7F49FD1708365200A106A9 /* MakeVerboseFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46151708365200A106A9 /* MakeVerboseFormat.h */; };
580 2B7F49FE1708365200A106A9 /* MakeVerboseFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46151708365200A106A9 /* MakeVerboseFormat.h */; };
581 2B7F49FF1708365200A106A9 /* MakeVerboseFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46151708365200A106A9 /* MakeVerboseFormat.h */; };
582 2B7F4A001708365200A106A9 /* MakeVerboseFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46151708365200A106A9 /* MakeVerboseFormat.h */; };
583 2B7F4A011708365200A106A9 /* MakeVerboseFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46151708365200A106A9 /* MakeVerboseFormat.h */; };
584 2B7F4A021708365200A106A9 /* MaterialSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46161708365200A106A9 /* MaterialSystem.cpp */; };
585 2B7F4A031708365200A106A9 /* MaterialSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46161708365200A106A9 /* MaterialSystem.cpp */; };
586 2B7F4A041708365200A106A9 /* MaterialSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46161708365200A106A9 /* MaterialSystem.cpp */; };
587 2B7F4A051708365200A106A9 /* MaterialSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46161708365200A106A9 /* MaterialSystem.cpp */; };
588 2B7F4A061708365200A106A9 /* MaterialSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46161708365200A106A9 /* MaterialSystem.cpp */; };
589 2B7F4A071708365200A106A9 /* MaterialSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46171708365200A106A9 /* MaterialSystem.h */; };
590 2B7F4A081708365200A106A9 /* MaterialSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46171708365200A106A9 /* MaterialSystem.h */; };
591 2B7F4A091708365200A106A9 /* MaterialSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46171708365200A106A9 /* MaterialSystem.h */; };
592 2B7F4A0A1708365200A106A9 /* MaterialSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46171708365200A106A9 /* MaterialSystem.h */; };
593 2B7F4A0B1708365200A106A9 /* MaterialSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46171708365200A106A9 /* MaterialSystem.h */; };
594 2B7F4A2F1708365200A106A9 /* MD4FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F461F1708365200A106A9 /* MD4FileData.h */; };
595 2B7F4A301708365200A106A9 /* MD4FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F461F1708365200A106A9 /* MD4FileData.h */; };
596 2B7F4A311708365200A106A9 /* MD4FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F461F1708365200A106A9 /* MD4FileData.h */; };
597 2B7F4A321708365200A106A9 /* MD4FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F461F1708365200A106A9 /* MD4FileData.h */; };
598 2B7F4A331708365200A106A9 /* MD4FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F461F1708365200A106A9 /* MD4FileData.h */; };
599 2B7F4A751708365200A106A9 /* MemoryIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F462D1708365200A106A9 /* MemoryIOWrapper.h */; };
600 2B7F4A761708365200A106A9 /* MemoryIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F462D1708365200A106A9 /* MemoryIOWrapper.h */; };
601 2B7F4A771708365200A106A9 /* MemoryIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F462D1708365200A106A9 /* MemoryIOWrapper.h */; };
602 2B7F4A781708365200A106A9 /* MemoryIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F462D1708365200A106A9 /* MemoryIOWrapper.h */; };
603 2B7F4A791708365200A106A9 /* MemoryIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F462D1708365200A106A9 /* MemoryIOWrapper.h */; };
604 2B7F4A981708365200A106A9 /* ObjExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46341708365200A106A9 /* ObjExporter.cpp */; };
605 2B7F4A991708365200A106A9 /* ObjExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46341708365200A106A9 /* ObjExporter.cpp */; };
606 2B7F4A9A1708365200A106A9 /* ObjExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46341708365200A106A9 /* ObjExporter.cpp */; };
607 2B7F4A9B1708365200A106A9 /* ObjExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46341708365200A106A9 /* ObjExporter.cpp */; };
608 2B7F4A9C1708365200A106A9 /* ObjExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46341708365200A106A9 /* ObjExporter.cpp */; };
609 2B7F4A9D1708365200A106A9 /* ObjExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46351708365200A106A9 /* ObjExporter.h */; };
610 2B7F4A9E1708365200A106A9 /* ObjExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46351708365200A106A9 /* ObjExporter.h */; };
611 2B7F4A9F1708365200A106A9 /* ObjExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46351708365200A106A9 /* ObjExporter.h */; };
612 2B7F4AA01708365200A106A9 /* ObjExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46351708365200A106A9 /* ObjExporter.h */; };
613 2B7F4AA11708365200A106A9 /* ObjExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46351708365200A106A9 /* ObjExporter.h */; };
614 2B7F4AA21708365200A106A9 /* ObjFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46361708365200A106A9 /* ObjFileData.h */; };
615 2B7F4AA31708365200A106A9 /* ObjFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46361708365200A106A9 /* ObjFileData.h */; };
616 2B7F4AA41708365200A106A9 /* ObjFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46361708365200A106A9 /* ObjFileData.h */; };
617 2B7F4AA51708365200A106A9 /* ObjFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46361708365200A106A9 /* ObjFileData.h */; };
618 2B7F4AA61708365200A106A9 /* ObjFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46361708365200A106A9 /* ObjFileData.h */; };
619 2B7F4AA71708365200A106A9 /* ObjFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46371708365200A106A9 /* ObjFileImporter.cpp */; };
620 2B7F4AA81708365200A106A9 /* ObjFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46371708365200A106A9 /* ObjFileImporter.cpp */; };
621 2B7F4AA91708365200A106A9 /* ObjFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46371708365200A106A9 /* ObjFileImporter.cpp */; };
622 2B7F4AAA1708365200A106A9 /* ObjFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46371708365200A106A9 /* ObjFileImporter.cpp */; };
623 2B7F4AAB1708365200A106A9 /* ObjFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46371708365200A106A9 /* ObjFileImporter.cpp */; };
624 2B7F4AAC1708365200A106A9 /* ObjFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46381708365200A106A9 /* ObjFileImporter.h */; };
625 2B7F4AAD1708365200A106A9 /* ObjFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46381708365200A106A9 /* ObjFileImporter.h */; };
626 2B7F4AAE1708365200A106A9 /* ObjFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46381708365200A106A9 /* ObjFileImporter.h */; };
627 2B7F4AAF1708365200A106A9 /* ObjFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46381708365200A106A9 /* ObjFileImporter.h */; };
628 2B7F4AB01708365200A106A9 /* ObjFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46381708365200A106A9 /* ObjFileImporter.h */; };
629 2B7F4AB11708365200A106A9 /* ObjFileMtlImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46391708365200A106A9 /* ObjFileMtlImporter.cpp */; };
630 2B7F4AB21708365200A106A9 /* ObjFileMtlImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46391708365200A106A9 /* ObjFileMtlImporter.cpp */; };
631 2B7F4AB31708365200A106A9 /* ObjFileMtlImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46391708365200A106A9 /* ObjFileMtlImporter.cpp */; };
632 2B7F4AB41708365200A106A9 /* ObjFileMtlImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46391708365200A106A9 /* ObjFileMtlImporter.cpp */; };
633 2B7F4AB51708365200A106A9 /* ObjFileMtlImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46391708365200A106A9 /* ObjFileMtlImporter.cpp */; };
634 2B7F4AB61708365200A106A9 /* ObjFileMtlImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F463A1708365200A106A9 /* ObjFileMtlImporter.h */; };
635 2B7F4AB71708365200A106A9 /* ObjFileMtlImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F463A1708365200A106A9 /* ObjFileMtlImporter.h */; };
636 2B7F4AB81708365200A106A9 /* ObjFileMtlImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F463A1708365200A106A9 /* ObjFileMtlImporter.h */; };
637 2B7F4AB91708365200A106A9 /* ObjFileMtlImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F463A1708365200A106A9 /* ObjFileMtlImporter.h */; };
638 2B7F4ABA1708365200A106A9 /* ObjFileMtlImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F463A1708365200A106A9 /* ObjFileMtlImporter.h */; };
639 2B7F4ABB1708365200A106A9 /* ObjFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F463B1708365200A106A9 /* ObjFileParser.cpp */; };
640 2B7F4ABC1708365200A106A9 /* ObjFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F463B1708365200A106A9 /* ObjFileParser.cpp */; };
641 2B7F4ABD1708365200A106A9 /* ObjFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F463B1708365200A106A9 /* ObjFileParser.cpp */; };
642 2B7F4ABE1708365200A106A9 /* ObjFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F463B1708365200A106A9 /* ObjFileParser.cpp */; };
643 2B7F4ABF1708365200A106A9 /* ObjFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F463B1708365200A106A9 /* ObjFileParser.cpp */; };
644 2B7F4AC01708365200A106A9 /* ObjFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F463C1708365200A106A9 /* ObjFileParser.h */; };
645 2B7F4AC11708365200A106A9 /* ObjFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F463C1708365200A106A9 /* ObjFileParser.h */; };
646 2B7F4AC21708365200A106A9 /* ObjFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F463C1708365200A106A9 /* ObjFileParser.h */; };
647 2B7F4AC31708365200A106A9 /* ObjFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F463C1708365200A106A9 /* ObjFileParser.h */; };
648 2B7F4AC41708365200A106A9 /* ObjFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F463C1708365200A106A9 /* ObjFileParser.h */; };
649 2B7F4AC51708365200A106A9 /* ObjTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F463D1708365200A106A9 /* ObjTools.h */; };
650 2B7F4AC61708365200A106A9 /* ObjTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F463D1708365200A106A9 /* ObjTools.h */; };
651 2B7F4AC71708365200A106A9 /* ObjTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F463D1708365200A106A9 /* ObjTools.h */; };
652 2B7F4AC81708365200A106A9 /* ObjTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F463D1708365200A106A9 /* ObjTools.h */; };
653 2B7F4AC91708365200A106A9 /* ObjTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F463D1708365200A106A9 /* ObjTools.h */; };
654 2B7F4AF21708365200A106A9 /* OptimizeGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46461708365200A106A9 /* OptimizeGraph.cpp */; };
655 2B7F4AF31708365200A106A9 /* OptimizeGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46461708365200A106A9 /* OptimizeGraph.cpp */; };
656 2B7F4AF41708365200A106A9 /* OptimizeGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46461708365200A106A9 /* OptimizeGraph.cpp */; };
657 2B7F4AF51708365200A106A9 /* OptimizeGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46461708365200A106A9 /* OptimizeGraph.cpp */; };
658 2B7F4AF61708365200A106A9 /* OptimizeGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46461708365200A106A9 /* OptimizeGraph.cpp */; };
659 2B7F4AF71708365200A106A9 /* OptimizeGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46471708365200A106A9 /* OptimizeGraph.h */; };
660 2B7F4AF81708365200A106A9 /* OptimizeGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46471708365200A106A9 /* OptimizeGraph.h */; };
661 2B7F4AF91708365200A106A9 /* OptimizeGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46471708365200A106A9 /* OptimizeGraph.h */; };
662 2B7F4AFA1708365200A106A9 /* OptimizeGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46471708365200A106A9 /* OptimizeGraph.h */; };
663 2B7F4AFB1708365200A106A9 /* OptimizeGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46471708365200A106A9 /* OptimizeGraph.h */; };
664 2B7F4AFC1708365200A106A9 /* OptimizeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46481708365200A106A9 /* OptimizeMeshes.cpp */; };
665 2B7F4AFD1708365200A106A9 /* OptimizeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46481708365200A106A9 /* OptimizeMeshes.cpp */; };
666 2B7F4AFE1708365200A106A9 /* OptimizeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46481708365200A106A9 /* OptimizeMeshes.cpp */; };
667 2B7F4AFF1708365200A106A9 /* OptimizeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46481708365200A106A9 /* OptimizeMeshes.cpp */; };
668 2B7F4B001708365200A106A9 /* OptimizeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46481708365200A106A9 /* OptimizeMeshes.cpp */; };
669 2B7F4B011708365200A106A9 /* OptimizeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46491708365200A106A9 /* OptimizeMeshes.h */; };
670 2B7F4B021708365200A106A9 /* OptimizeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46491708365200A106A9 /* OptimizeMeshes.h */; };
671 2B7F4B031708365200A106A9 /* OptimizeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46491708365200A106A9 /* OptimizeMeshes.h */; };
672 2B7F4B041708365200A106A9 /* OptimizeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46491708365200A106A9 /* OptimizeMeshes.h */; };
673 2B7F4B051708365200A106A9 /* OptimizeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46491708365200A106A9 /* OptimizeMeshes.h */; };
674 2B7F4B061708365200A106A9 /* ParsingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F464A1708365200A106A9 /* ParsingUtils.h */; };
675 2B7F4B071708365200A106A9 /* ParsingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F464A1708365200A106A9 /* ParsingUtils.h */; };
676 2B7F4B081708365200A106A9 /* ParsingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F464A1708365200A106A9 /* ParsingUtils.h */; };
677 2B7F4B091708365200A106A9 /* ParsingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F464A1708365200A106A9 /* ParsingUtils.h */; };
678 2B7F4B0A1708365200A106A9 /* ParsingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F464A1708365200A106A9 /* ParsingUtils.h */; };
679 2B7F4B291708365200A106A9 /* PolyTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46511708365200A106A9 /* PolyTools.h */; };
680 2B7F4B2A1708365200A106A9 /* PolyTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46511708365200A106A9 /* PolyTools.h */; };
681 2B7F4B2B1708365200A106A9 /* PolyTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46511708365200A106A9 /* PolyTools.h */; };
682 2B7F4B2C1708365200A106A9 /* PolyTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46511708365200A106A9 /* PolyTools.h */; };
683 2B7F4B2D1708365200A106A9 /* PolyTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46511708365200A106A9 /* PolyTools.h */; };
684 2B7F4B2E1708365200A106A9 /* PostStepRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46521708365200A106A9 /* PostStepRegistry.cpp */; };
685 2B7F4B2F1708365200A106A9 /* PostStepRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46521708365200A106A9 /* PostStepRegistry.cpp */; };
686 2B7F4B301708365200A106A9 /* PostStepRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46521708365200A106A9 /* PostStepRegistry.cpp */; };
687 2B7F4B311708365200A106A9 /* PostStepRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46521708365200A106A9 /* PostStepRegistry.cpp */; };
688 2B7F4B321708365200A106A9 /* PostStepRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46521708365200A106A9 /* PostStepRegistry.cpp */; };
689 2B7F4B331708365200A106A9 /* PretransformVertices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46531708365200A106A9 /* PretransformVertices.cpp */; };
690 2B7F4B341708365200A106A9 /* PretransformVertices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46531708365200A106A9 /* PretransformVertices.cpp */; };
691 2B7F4B351708365200A106A9 /* PretransformVertices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46531708365200A106A9 /* PretransformVertices.cpp */; };
692 2B7F4B361708365200A106A9 /* PretransformVertices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46531708365200A106A9 /* PretransformVertices.cpp */; };
693 2B7F4B371708365200A106A9 /* PretransformVertices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46531708365200A106A9 /* PretransformVertices.cpp */; };
694 2B7F4B381708365200A106A9 /* PretransformVertices.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46541708365200A106A9 /* PretransformVertices.h */; };
695 2B7F4B391708365200A106A9 /* PretransformVertices.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46541708365200A106A9 /* PretransformVertices.h */; };
696 2B7F4B3A1708365200A106A9 /* PretransformVertices.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46541708365200A106A9 /* PretransformVertices.h */; };
697 2B7F4B3B1708365200A106A9 /* PretransformVertices.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46541708365200A106A9 /* PretransformVertices.h */; };
698 2B7F4B3C1708365200A106A9 /* PretransformVertices.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46541708365200A106A9 /* PretransformVertices.h */; };
699 2B7F4B3D1708365200A106A9 /* ProcessHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46551708365200A106A9 /* ProcessHelper.cpp */; };
700 2B7F4B3E1708365200A106A9 /* ProcessHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46551708365200A106A9 /* ProcessHelper.cpp */; };
701 2B7F4B3F1708365200A106A9 /* ProcessHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46551708365200A106A9 /* ProcessHelper.cpp */; };
702 2B7F4B401708365200A106A9 /* ProcessHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46551708365200A106A9 /* ProcessHelper.cpp */; };
703 2B7F4B411708365200A106A9 /* ProcessHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46551708365200A106A9 /* ProcessHelper.cpp */; };
704 2B7F4B421708365200A106A9 /* ProcessHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46561708365200A106A9 /* ProcessHelper.h */; };
705 2B7F4B431708365200A106A9 /* ProcessHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46561708365200A106A9 /* ProcessHelper.h */; };
706 2B7F4B441708365200A106A9 /* ProcessHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46561708365200A106A9 /* ProcessHelper.h */; };
707 2B7F4B451708365200A106A9 /* ProcessHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46561708365200A106A9 /* ProcessHelper.h */; };
708 2B7F4B461708365200A106A9 /* ProcessHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46561708365200A106A9 /* ProcessHelper.h */; };
709 2B7F4B471708365200A106A9 /* Profiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46571708365200A106A9 /* Profiler.h */; };
710 2B7F4B481708365200A106A9 /* Profiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46571708365200A106A9 /* Profiler.h */; };
711 2B7F4B491708365200A106A9 /* Profiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46571708365200A106A9 /* Profiler.h */; };
712 2B7F4B4A1708365200A106A9 /* Profiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46571708365200A106A9 /* Profiler.h */; };
713 2B7F4B4B1708365200A106A9 /* Profiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46571708365200A106A9 /* Profiler.h */; };
714 2B7F4B4C1708365200A106A9 /* pstdint.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46581708365200A106A9 /* pstdint.h */; };
715 2B7F4B4D1708365200A106A9 /* pstdint.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46581708365200A106A9 /* pstdint.h */; };
716 2B7F4B4E1708365200A106A9 /* pstdint.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46581708365200A106A9 /* pstdint.h */; };
717 2B7F4B4F1708365200A106A9 /* pstdint.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46581708365200A106A9 /* pstdint.h */; };
718 2B7F4B501708365200A106A9 /* pstdint.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46581708365200A106A9 /* pstdint.h */; };
719 2B7F4B7E1708365200A106A9 /* qnan.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46621708365200A106A9 /* qnan.h */; };
720 2B7F4B7F1708365200A106A9 /* qnan.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46621708365200A106A9 /* qnan.h */; };
721 2B7F4B801708365200A106A9 /* qnan.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46621708365200A106A9 /* qnan.h */; };
722 2B7F4B811708365200A106A9 /* qnan.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46621708365200A106A9 /* qnan.h */; };
723 2B7F4B821708365200A106A9 /* qnan.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46621708365200A106A9 /* qnan.h */; };
724 2B7F4B8D1708365200A106A9 /* RemoveComments.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46651708365200A106A9 /* RemoveComments.cpp */; };
725 2B7F4B8E1708365200A106A9 /* RemoveComments.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46651708365200A106A9 /* RemoveComments.cpp */; };
726 2B7F4B8F1708365200A106A9 /* RemoveComments.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46651708365200A106A9 /* RemoveComments.cpp */; };
727 2B7F4B901708365200A106A9 /* RemoveComments.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46651708365200A106A9 /* RemoveComments.cpp */; };
728 2B7F4B911708365200A106A9 /* RemoveComments.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46651708365200A106A9 /* RemoveComments.cpp */; };
729 2B7F4B921708365200A106A9 /* RemoveComments.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46661708365200A106A9 /* RemoveComments.h */; };
730 2B7F4B931708365200A106A9 /* RemoveComments.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46661708365200A106A9 /* RemoveComments.h */; };
731 2B7F4B941708365200A106A9 /* RemoveComments.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46661708365200A106A9 /* RemoveComments.h */; };
732 2B7F4B951708365200A106A9 /* RemoveComments.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46661708365200A106A9 /* RemoveComments.h */; };
733 2B7F4B961708365200A106A9 /* RemoveComments.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46661708365200A106A9 /* RemoveComments.h */; };
734 2B7F4B971708365200A106A9 /* RemoveRedundantMaterials.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46671708365200A106A9 /* RemoveRedundantMaterials.cpp */; };
735 2B7F4B981708365200A106A9 /* RemoveRedundantMaterials.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46671708365200A106A9 /* RemoveRedundantMaterials.cpp */; };
736 2B7F4B991708365200A106A9 /* RemoveRedundantMaterials.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46671708365200A106A9 /* RemoveRedundantMaterials.cpp */; };
737 2B7F4B9A1708365200A106A9 /* RemoveRedundantMaterials.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46671708365200A106A9 /* RemoveRedundantMaterials.cpp */; };
738 2B7F4B9B1708365200A106A9 /* RemoveRedundantMaterials.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46671708365200A106A9 /* RemoveRedundantMaterials.cpp */; };
739 2B7F4B9C1708365200A106A9 /* RemoveRedundantMaterials.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46681708365200A106A9 /* RemoveRedundantMaterials.h */; };
740 2B7F4B9D1708365200A106A9 /* RemoveRedundantMaterials.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46681708365200A106A9 /* RemoveRedundantMaterials.h */; };
741 2B7F4B9E1708365200A106A9 /* RemoveRedundantMaterials.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46681708365200A106A9 /* RemoveRedundantMaterials.h */; };
742 2B7F4B9F1708365200A106A9 /* RemoveRedundantMaterials.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46681708365200A106A9 /* RemoveRedundantMaterials.h */; };
743 2B7F4BA01708365200A106A9 /* RemoveRedundantMaterials.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46681708365200A106A9 /* RemoveRedundantMaterials.h */; };
744 2B7F4BA11708365200A106A9 /* RemoveVCProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46691708365200A106A9 /* RemoveVCProcess.cpp */; };
745 2B7F4BA21708365200A106A9 /* RemoveVCProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46691708365200A106A9 /* RemoveVCProcess.cpp */; };
746 2B7F4BA31708365200A106A9 /* RemoveVCProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46691708365200A106A9 /* RemoveVCProcess.cpp */; };
747 2B7F4BA41708365200A106A9 /* RemoveVCProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46691708365200A106A9 /* RemoveVCProcess.cpp */; };
748 2B7F4BA51708365200A106A9 /* RemoveVCProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46691708365200A106A9 /* RemoveVCProcess.cpp */; };
749 2B7F4BA61708365200A106A9 /* RemoveVCProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F466A1708365200A106A9 /* RemoveVCProcess.h */; };
750 2B7F4BA71708365200A106A9 /* RemoveVCProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F466A1708365200A106A9 /* RemoveVCProcess.h */; };
751 2B7F4BA81708365200A106A9 /* RemoveVCProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F466A1708365200A106A9 /* RemoveVCProcess.h */; };
752 2B7F4BA91708365200A106A9 /* RemoveVCProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F466A1708365200A106A9 /* RemoveVCProcess.h */; };
753 2B7F4BAA1708365200A106A9 /* RemoveVCProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F466A1708365200A106A9 /* RemoveVCProcess.h */; };
754 2B7F4BB01708365200A106A9 /* SceneCombiner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F466E1708365200A106A9 /* SceneCombiner.cpp */; };
755 2B7F4BB11708365200A106A9 /* SceneCombiner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F466E1708365200A106A9 /* SceneCombiner.cpp */; };
756 2B7F4BB21708365200A106A9 /* SceneCombiner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F466E1708365200A106A9 /* SceneCombiner.cpp */; };
757 2B7F4BB31708365200A106A9 /* SceneCombiner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F466E1708365200A106A9 /* SceneCombiner.cpp */; };
758 2B7F4BB41708365200A106A9 /* SceneCombiner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F466E1708365200A106A9 /* SceneCombiner.cpp */; };
759 2B7F4BB51708365200A106A9 /* SceneCombiner.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F466F1708365200A106A9 /* SceneCombiner.h */; };
760 2B7F4BB61708365200A106A9 /* SceneCombiner.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F466F1708365200A106A9 /* SceneCombiner.h */; };
761 2B7F4BB71708365200A106A9 /* SceneCombiner.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F466F1708365200A106A9 /* SceneCombiner.h */; };
762 2B7F4BB81708365200A106A9 /* SceneCombiner.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F466F1708365200A106A9 /* SceneCombiner.h */; };
763 2B7F4BB91708365200A106A9 /* SceneCombiner.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F466F1708365200A106A9 /* SceneCombiner.h */; };
764 2B7F4BBA1708365200A106A9 /* ScenePreprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46701708365200A106A9 /* ScenePreprocessor.cpp */; };
765 2B7F4BBB1708365200A106A9 /* ScenePreprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46701708365200A106A9 /* ScenePreprocessor.cpp */; };
766 2B7F4BBC1708365200A106A9 /* ScenePreprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46701708365200A106A9 /* ScenePreprocessor.cpp */; };
767 2B7F4BBD1708365200A106A9 /* ScenePreprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46701708365200A106A9 /* ScenePreprocessor.cpp */; };
768 2B7F4BBE1708365200A106A9 /* ScenePreprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46701708365200A106A9 /* ScenePreprocessor.cpp */; };
769 2B7F4BBF1708365200A106A9 /* ScenePreprocessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46711708365200A106A9 /* ScenePreprocessor.h */; };
770 2B7F4BC01708365200A106A9 /* ScenePreprocessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46711708365200A106A9 /* ScenePreprocessor.h */; };
771 2B7F4BC11708365200A106A9 /* ScenePreprocessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46711708365200A106A9 /* ScenePreprocessor.h */; };
772 2B7F4BC21708365200A106A9 /* ScenePreprocessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46711708365200A106A9 /* ScenePreprocessor.h */; };
773 2B7F4BC31708365200A106A9 /* ScenePreprocessor.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46711708365200A106A9 /* ScenePreprocessor.h */; };
774 2B7F4BC41708365200A106A9 /* ScenePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46721708365200A106A9 /* ScenePrivate.h */; };
775 2B7F4BC51708365200A106A9 /* ScenePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46721708365200A106A9 /* ScenePrivate.h */; };
776 2B7F4BC61708365200A106A9 /* ScenePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46721708365200A106A9 /* ScenePrivate.h */; };
777 2B7F4BC71708365200A106A9 /* ScenePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46721708365200A106A9 /* ScenePrivate.h */; };
778 2B7F4BC81708365200A106A9 /* ScenePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46721708365200A106A9 /* ScenePrivate.h */; };
779 2B7F4BC91708365200A106A9 /* SGSpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46731708365200A106A9 /* SGSpatialSort.cpp */; };
780 2B7F4BCA1708365200A106A9 /* SGSpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46731708365200A106A9 /* SGSpatialSort.cpp */; };
781 2B7F4BCB1708365200A106A9 /* SGSpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46731708365200A106A9 /* SGSpatialSort.cpp */; };
782 2B7F4BCC1708365200A106A9 /* SGSpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46731708365200A106A9 /* SGSpatialSort.cpp */; };
783 2B7F4BCD1708365200A106A9 /* SGSpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46731708365200A106A9 /* SGSpatialSort.cpp */; };
784 2B7F4BCE1708365200A106A9 /* SGSpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46741708365200A106A9 /* SGSpatialSort.h */; };
785 2B7F4BCF1708365200A106A9 /* SGSpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46741708365200A106A9 /* SGSpatialSort.h */; };
786 2B7F4BD01708365200A106A9 /* SGSpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46741708365200A106A9 /* SGSpatialSort.h */; };
787 2B7F4BD11708365200A106A9 /* SGSpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46741708365200A106A9 /* SGSpatialSort.h */; };
788 2B7F4BD21708365200A106A9 /* SGSpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46741708365200A106A9 /* SGSpatialSort.h */; };
789 2B7F4BD31708365200A106A9 /* SkeletonMeshBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46751708365200A106A9 /* SkeletonMeshBuilder.cpp */; };
790 2B7F4BD41708365200A106A9 /* SkeletonMeshBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46751708365200A106A9 /* SkeletonMeshBuilder.cpp */; };
791 2B7F4BD51708365200A106A9 /* SkeletonMeshBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46751708365200A106A9 /* SkeletonMeshBuilder.cpp */; };
792 2B7F4BD61708365200A106A9 /* SkeletonMeshBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46751708365200A106A9 /* SkeletonMeshBuilder.cpp */; };
793 2B7F4BD71708365200A106A9 /* SkeletonMeshBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46751708365200A106A9 /* SkeletonMeshBuilder.cpp */; };
794 2B7F4BD81708365200A106A9 /* SkeletonMeshBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46761708365200A106A9 /* SkeletonMeshBuilder.h */; };
795 2B7F4BD91708365200A106A9 /* SkeletonMeshBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46761708365200A106A9 /* SkeletonMeshBuilder.h */; };
796 2B7F4BDA1708365200A106A9 /* SkeletonMeshBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46761708365200A106A9 /* SkeletonMeshBuilder.h */; };
797 2B7F4BDB1708365200A106A9 /* SkeletonMeshBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46761708365200A106A9 /* SkeletonMeshBuilder.h */; };
798 2B7F4BDC1708365200A106A9 /* SkeletonMeshBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46761708365200A106A9 /* SkeletonMeshBuilder.h */; };
799 2B7F4BE71708365200A106A9 /* SmoothingGroups.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46791708365200A106A9 /* SmoothingGroups.h */; };
800 2B7F4BE81708365200A106A9 /* SmoothingGroups.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46791708365200A106A9 /* SmoothingGroups.h */; };
801 2B7F4BE91708365200A106A9 /* SmoothingGroups.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46791708365200A106A9 /* SmoothingGroups.h */; };
802 2B7F4BEA1708365200A106A9 /* SmoothingGroups.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46791708365200A106A9 /* SmoothingGroups.h */; };
803 2B7F4BEB1708365200A106A9 /* SmoothingGroups.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46791708365200A106A9 /* SmoothingGroups.h */; };
804 2B7F4BEC1708365200A106A9 /* SortByPTypeProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F467B1708365200A106A9 /* SortByPTypeProcess.cpp */; };
805 2B7F4BED1708365200A106A9 /* SortByPTypeProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F467B1708365200A106A9 /* SortByPTypeProcess.cpp */; };
806 2B7F4BEE1708365200A106A9 /* SortByPTypeProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F467B1708365200A106A9 /* SortByPTypeProcess.cpp */; };
807 2B7F4BEF1708365200A106A9 /* SortByPTypeProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F467B1708365200A106A9 /* SortByPTypeProcess.cpp */; };
808 2B7F4BF01708365200A106A9 /* SortByPTypeProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F467B1708365200A106A9 /* SortByPTypeProcess.cpp */; };
809 2B7F4BF11708365200A106A9 /* SortByPTypeProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F467C1708365200A106A9 /* SortByPTypeProcess.h */; };
810 2B7F4BF21708365200A106A9 /* SortByPTypeProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F467C1708365200A106A9 /* SortByPTypeProcess.h */; };
811 2B7F4BF31708365200A106A9 /* SortByPTypeProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F467C1708365200A106A9 /* SortByPTypeProcess.h */; };
812 2B7F4BF41708365200A106A9 /* SortByPTypeProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F467C1708365200A106A9 /* SortByPTypeProcess.h */; };
813 2B7F4BF51708365200A106A9 /* SortByPTypeProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F467C1708365200A106A9 /* SortByPTypeProcess.h */; };
814 2B7F4BF61708365200A106A9 /* SpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F467D1708365200A106A9 /* SpatialSort.cpp */; };
815 2B7F4BF71708365200A106A9 /* SpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F467D1708365200A106A9 /* SpatialSort.cpp */; };
816 2B7F4BF81708365200A106A9 /* SpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F467D1708365200A106A9 /* SpatialSort.cpp */; };
817 2B7F4BF91708365200A106A9 /* SpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F467D1708365200A106A9 /* SpatialSort.cpp */; };
818 2B7F4BFA1708365200A106A9 /* SpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F467D1708365200A106A9 /* SpatialSort.cpp */; };
819 2B7F4BFB1708365200A106A9 /* SpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F467E1708365200A106A9 /* SpatialSort.h */; };
820 2B7F4BFC1708365200A106A9 /* SpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F467E1708365200A106A9 /* SpatialSort.h */; };
821 2B7F4BFD1708365200A106A9 /* SpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F467E1708365200A106A9 /* SpatialSort.h */; };
822 2B7F4BFE1708365200A106A9 /* SpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F467E1708365200A106A9 /* SpatialSort.h */; };
823 2B7F4BFF1708365200A106A9 /* SpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F467E1708365200A106A9 /* SpatialSort.h */; };
824 2B7F4C001708365200A106A9 /* SplitByBoneCountProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F467F1708365200A106A9 /* SplitByBoneCountProcess.cpp */; };
825 2B7F4C011708365200A106A9 /* SplitByBoneCountProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F467F1708365200A106A9 /* SplitByBoneCountProcess.cpp */; };
826 2B7F4C021708365200A106A9 /* SplitByBoneCountProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F467F1708365200A106A9 /* SplitByBoneCountProcess.cpp */; };
827 2B7F4C031708365200A106A9 /* SplitByBoneCountProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F467F1708365200A106A9 /* SplitByBoneCountProcess.cpp */; };
828 2B7F4C041708365200A106A9 /* SplitByBoneCountProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F467F1708365200A106A9 /* SplitByBoneCountProcess.cpp */; };
829 2B7F4C051708365200A106A9 /* SplitByBoneCountProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46801708365200A106A9 /* SplitByBoneCountProcess.h */; };
830 2B7F4C061708365200A106A9 /* SplitByBoneCountProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46801708365200A106A9 /* SplitByBoneCountProcess.h */; };
831 2B7F4C071708365200A106A9 /* SplitByBoneCountProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46801708365200A106A9 /* SplitByBoneCountProcess.h */; };
832 2B7F4C081708365200A106A9 /* SplitByBoneCountProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46801708365200A106A9 /* SplitByBoneCountProcess.h */; };
833 2B7F4C091708365200A106A9 /* SplitByBoneCountProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46801708365200A106A9 /* SplitByBoneCountProcess.h */; };
834 2B7F4C0A1708365200A106A9 /* SplitLargeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46811708365200A106A9 /* SplitLargeMeshes.cpp */; };
835 2B7F4C0B1708365200A106A9 /* SplitLargeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46811708365200A106A9 /* SplitLargeMeshes.cpp */; };
836 2B7F4C0C1708365200A106A9 /* SplitLargeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46811708365200A106A9 /* SplitLargeMeshes.cpp */; };
837 2B7F4C0D1708365200A106A9 /* SplitLargeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46811708365200A106A9 /* SplitLargeMeshes.cpp */; };
838 2B7F4C0E1708365200A106A9 /* SplitLargeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46811708365200A106A9 /* SplitLargeMeshes.cpp */; };
839 2B7F4C0F1708365200A106A9 /* SplitLargeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46821708365200A106A9 /* SplitLargeMeshes.h */; };
840 2B7F4C101708365200A106A9 /* SplitLargeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46821708365200A106A9 /* SplitLargeMeshes.h */; };
841 2B7F4C111708365200A106A9 /* SplitLargeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46821708365200A106A9 /* SplitLargeMeshes.h */; };
842 2B7F4C121708365200A106A9 /* SplitLargeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46821708365200A106A9 /* SplitLargeMeshes.h */; };
843 2B7F4C131708365200A106A9 /* SplitLargeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46821708365200A106A9 /* SplitLargeMeshes.h */; };
844 2B7F4C141708365200A106A9 /* StandardShapes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46831708365200A106A9 /* StandardShapes.cpp */; };
845 2B7F4C151708365200A106A9 /* StandardShapes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46831708365200A106A9 /* StandardShapes.cpp */; };
846 2B7F4C161708365200A106A9 /* StandardShapes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46831708365200A106A9 /* StandardShapes.cpp */; };
847 2B7F4C171708365200A106A9 /* StandardShapes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46831708365200A106A9 /* StandardShapes.cpp */; };
848 2B7F4C181708365200A106A9 /* StandardShapes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46831708365200A106A9 /* StandardShapes.cpp */; };
849 2B7F4C191708365200A106A9 /* StandardShapes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46841708365200A106A9 /* StandardShapes.h */; };
850 2B7F4C1A1708365200A106A9 /* StandardShapes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46841708365200A106A9 /* StandardShapes.h */; };
851 2B7F4C1B1708365200A106A9 /* StandardShapes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46841708365200A106A9 /* StandardShapes.h */; };
852 2B7F4C1C1708365200A106A9 /* StandardShapes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46841708365200A106A9 /* StandardShapes.h */; };
853 2B7F4C1D1708365200A106A9 /* StandardShapes.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46841708365200A106A9 /* StandardShapes.h */; };
854 2B7F4C1E1708365200A106A9 /* StdOStreamLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46851708365200A106A9 /* StdOStreamLogStream.h */; };
855 2B7F4C1F1708365200A106A9 /* StdOStreamLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46851708365200A106A9 /* StdOStreamLogStream.h */; };
856 2B7F4C201708365200A106A9 /* StdOStreamLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46851708365200A106A9 /* StdOStreamLogStream.h */; };
857 2B7F4C211708365200A106A9 /* StdOStreamLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46851708365200A106A9 /* StdOStreamLogStream.h */; };
858 2B7F4C221708365200A106A9 /* StdOStreamLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46851708365200A106A9 /* StdOStreamLogStream.h */; };
859 2B7F4C231708365200A106A9 /* STEPFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46861708365200A106A9 /* STEPFile.h */; };
860 2B7F4C241708365200A106A9 /* STEPFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46861708365200A106A9 /* STEPFile.h */; };
861 2B7F4C251708365200A106A9 /* STEPFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46861708365200A106A9 /* STEPFile.h */; };
862 2B7F4C261708365200A106A9 /* STEPFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46861708365200A106A9 /* STEPFile.h */; };
863 2B7F4C271708365200A106A9 /* STEPFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46861708365200A106A9 /* STEPFile.h */; };
864 2B7F4C281708365200A106A9 /* STEPFileEncoding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46871708365200A106A9 /* STEPFileEncoding.cpp */; };
865 2B7F4C291708365200A106A9 /* STEPFileEncoding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46871708365200A106A9 /* STEPFileEncoding.cpp */; };
866 2B7F4C2A1708365200A106A9 /* STEPFileEncoding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46871708365200A106A9 /* STEPFileEncoding.cpp */; };
867 2B7F4C2B1708365200A106A9 /* STEPFileEncoding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46871708365200A106A9 /* STEPFileEncoding.cpp */; };
868 2B7F4C2C1708365200A106A9 /* STEPFileEncoding.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46871708365200A106A9 /* STEPFileEncoding.cpp */; };
869 2B7F4C2D1708365200A106A9 /* STEPFileEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46881708365200A106A9 /* STEPFileEncoding.h */; };
870 2B7F4C2E1708365200A106A9 /* STEPFileEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46881708365200A106A9 /* STEPFileEncoding.h */; };
871 2B7F4C2F1708365200A106A9 /* STEPFileEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46881708365200A106A9 /* STEPFileEncoding.h */; };
872 2B7F4C301708365200A106A9 /* STEPFileEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46881708365200A106A9 /* STEPFileEncoding.h */; };
873 2B7F4C311708365200A106A9 /* STEPFileEncoding.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46881708365200A106A9 /* STEPFileEncoding.h */; };
874 2B7F4C321708365200A106A9 /* STEPFileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46891708365200A106A9 /* STEPFileReader.cpp */; };
875 2B7F4C331708365200A106A9 /* STEPFileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46891708365200A106A9 /* STEPFileReader.cpp */; };
876 2B7F4C341708365200A106A9 /* STEPFileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46891708365200A106A9 /* STEPFileReader.cpp */; };
877 2B7F4C351708365200A106A9 /* STEPFileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46891708365200A106A9 /* STEPFileReader.cpp */; };
878 2B7F4C361708365200A106A9 /* STEPFileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46891708365200A106A9 /* STEPFileReader.cpp */; };
879 2B7F4C371708365200A106A9 /* STEPFileReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468A1708365200A106A9 /* STEPFileReader.h */; };
880 2B7F4C381708365200A106A9 /* STEPFileReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468A1708365200A106A9 /* STEPFileReader.h */; };
881 2B7F4C391708365200A106A9 /* STEPFileReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468A1708365200A106A9 /* STEPFileReader.h */; };
882 2B7F4C3A1708365200A106A9 /* STEPFileReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468A1708365200A106A9 /* STEPFileReader.h */; };
883 2B7F4C3B1708365200A106A9 /* STEPFileReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468A1708365200A106A9 /* STEPFileReader.h */; };
884 2B7F4C3C1708365200A106A9 /* STLExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F468B1708365200A106A9 /* STLExporter.cpp */; };
885 2B7F4C3D1708365200A106A9 /* STLExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F468B1708365200A106A9 /* STLExporter.cpp */; };
886 2B7F4C3E1708365200A106A9 /* STLExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F468B1708365200A106A9 /* STLExporter.cpp */; };
887 2B7F4C3F1708365200A106A9 /* STLExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F468B1708365200A106A9 /* STLExporter.cpp */; };
888 2B7F4C401708365200A106A9 /* STLExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F468B1708365200A106A9 /* STLExporter.cpp */; };
889 2B7F4C411708365200A106A9 /* STLExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468C1708365200A106A9 /* STLExporter.h */; };
890 2B7F4C421708365200A106A9 /* STLExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468C1708365200A106A9 /* STLExporter.h */; };
891 2B7F4C431708365200A106A9 /* STLExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468C1708365200A106A9 /* STLExporter.h */; };
892 2B7F4C441708365200A106A9 /* STLExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468C1708365200A106A9 /* STLExporter.h */; };
893 2B7F4C451708365200A106A9 /* STLExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468C1708365200A106A9 /* STLExporter.h */; };
894 2B7F4C461708365200A106A9 /* STLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F468D1708365200A106A9 /* STLLoader.cpp */; };
895 2B7F4C471708365200A106A9 /* STLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F468D1708365200A106A9 /* STLLoader.cpp */; };
896 2B7F4C481708365200A106A9 /* STLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F468D1708365200A106A9 /* STLLoader.cpp */; };
897 2B7F4C491708365200A106A9 /* STLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F468D1708365200A106A9 /* STLLoader.cpp */; };
898 2B7F4C4A1708365200A106A9 /* STLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F468D1708365200A106A9 /* STLLoader.cpp */; };
899 2B7F4C4B1708365200A106A9 /* STLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468E1708365200A106A9 /* STLLoader.h */; };
900 2B7F4C4C1708365200A106A9 /* STLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468E1708365200A106A9 /* STLLoader.h */; };
901 2B7F4C4D1708365200A106A9 /* STLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468E1708365200A106A9 /* STLLoader.h */; };
902 2B7F4C4E1708365200A106A9 /* STLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468E1708365200A106A9 /* STLLoader.h */; };
903 2B7F4C4F1708365200A106A9 /* STLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468E1708365200A106A9 /* STLLoader.h */; };
904 2B7F4C501708365200A106A9 /* StreamReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468F1708365200A106A9 /* StreamReader.h */; };
905 2B7F4C511708365200A106A9 /* StreamReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468F1708365200A106A9 /* StreamReader.h */; };
906 2B7F4C521708365200A106A9 /* StreamReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468F1708365200A106A9 /* StreamReader.h */; };
907 2B7F4C531708365200A106A9 /* StreamReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468F1708365200A106A9 /* StreamReader.h */; };
908 2B7F4C541708365200A106A9 /* StreamReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F468F1708365200A106A9 /* StreamReader.h */; };
909 2B7F4C551708365200A106A9 /* StringComparison.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46901708365200A106A9 /* StringComparison.h */; };
910 2B7F4C561708365200A106A9 /* StringComparison.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46901708365200A106A9 /* StringComparison.h */; };
911 2B7F4C571708365200A106A9 /* StringComparison.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46901708365200A106A9 /* StringComparison.h */; };
912 2B7F4C581708365200A106A9 /* StringComparison.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46901708365200A106A9 /* StringComparison.h */; };
913 2B7F4C591708365200A106A9 /* StringComparison.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46901708365200A106A9 /* StringComparison.h */; };
914 2B7F4C5A1708365200A106A9 /* Subdivision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46911708365200A106A9 /* Subdivision.cpp */; };
915 2B7F4C5B1708365200A106A9 /* Subdivision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46911708365200A106A9 /* Subdivision.cpp */; };
916 2B7F4C5C1708365200A106A9 /* Subdivision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46911708365200A106A9 /* Subdivision.cpp */; };
917 2B7F4C5D1708365200A106A9 /* Subdivision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46911708365200A106A9 /* Subdivision.cpp */; };
918 2B7F4C5E1708365200A106A9 /* Subdivision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46911708365200A106A9 /* Subdivision.cpp */; };
919 2B7F4C5F1708365200A106A9 /* Subdivision.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46921708365200A106A9 /* Subdivision.h */; };
920 2B7F4C601708365200A106A9 /* Subdivision.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46921708365200A106A9 /* Subdivision.h */; };
921 2B7F4C611708365200A106A9 /* Subdivision.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46921708365200A106A9 /* Subdivision.h */; };
922 2B7F4C621708365200A106A9 /* Subdivision.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46921708365200A106A9 /* Subdivision.h */; };
923 2B7F4C631708365200A106A9 /* Subdivision.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46921708365200A106A9 /* Subdivision.h */; };
924 2B7F4C641708365200A106A9 /* TargetAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46931708365200A106A9 /* TargetAnimation.cpp */; };
925 2B7F4C651708365200A106A9 /* TargetAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46931708365200A106A9 /* TargetAnimation.cpp */; };
926 2B7F4C661708365200A106A9 /* TargetAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46931708365200A106A9 /* TargetAnimation.cpp */; };
927 2B7F4C671708365200A106A9 /* TargetAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46931708365200A106A9 /* TargetAnimation.cpp */; };
928 2B7F4C681708365200A106A9 /* TargetAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46931708365200A106A9 /* TargetAnimation.cpp */; };
929 2B7F4C691708365200A106A9 /* TargetAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46941708365200A106A9 /* TargetAnimation.h */; };
930 2B7F4C6A1708365200A106A9 /* TargetAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46941708365200A106A9 /* TargetAnimation.h */; };
931 2B7F4C6B1708365200A106A9 /* TargetAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46941708365200A106A9 /* TargetAnimation.h */; };
932 2B7F4C6C1708365200A106A9 /* TargetAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46941708365200A106A9 /* TargetAnimation.h */; };
933 2B7F4C6D1708365200A106A9 /* TargetAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46941708365200A106A9 /* TargetAnimation.h */; };
934 2B7F4C781708365200A106A9 /* TextureTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46971708365200A106A9 /* TextureTransform.cpp */; };
935 2B7F4C791708365200A106A9 /* TextureTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46971708365200A106A9 /* TextureTransform.cpp */; };
936 2B7F4C7A1708365200A106A9 /* TextureTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46971708365200A106A9 /* TextureTransform.cpp */; };
937 2B7F4C7B1708365200A106A9 /* TextureTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46971708365200A106A9 /* TextureTransform.cpp */; };
938 2B7F4C7C1708365200A106A9 /* TextureTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46971708365200A106A9 /* TextureTransform.cpp */; };
939 2B7F4C7D1708365200A106A9 /* TextureTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46981708365200A106A9 /* TextureTransform.h */; };
940 2B7F4C7E1708365200A106A9 /* TextureTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46981708365200A106A9 /* TextureTransform.h */; };
941 2B7F4C7F1708365200A106A9 /* TextureTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46981708365200A106A9 /* TextureTransform.h */; };
942 2B7F4C801708365200A106A9 /* TextureTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46981708365200A106A9 /* TextureTransform.h */; };
943 2B7F4C811708365200A106A9 /* TextureTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46981708365200A106A9 /* TextureTransform.h */; };
944 2B7F4C821708365200A106A9 /* TinyFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46991708365200A106A9 /* TinyFormatter.h */; };
945 2B7F4C831708365200A106A9 /* TinyFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46991708365200A106A9 /* TinyFormatter.h */; };
946 2B7F4C841708365200A106A9 /* TinyFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46991708365200A106A9 /* TinyFormatter.h */; };
947 2B7F4C851708365200A106A9 /* TinyFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46991708365200A106A9 /* TinyFormatter.h */; };
948 2B7F4C861708365200A106A9 /* TinyFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46991708365200A106A9 /* TinyFormatter.h */; };
949 2B7F4C871708365200A106A9 /* TriangulateProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F469A1708365200A106A9 /* TriangulateProcess.cpp */; };
950 2B7F4C881708365200A106A9 /* TriangulateProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F469A1708365200A106A9 /* TriangulateProcess.cpp */; };
951 2B7F4C891708365200A106A9 /* TriangulateProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F469A1708365200A106A9 /* TriangulateProcess.cpp */; };
952 2B7F4C8A1708365200A106A9 /* TriangulateProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F469A1708365200A106A9 /* TriangulateProcess.cpp */; };
953 2B7F4C8B1708365200A106A9 /* TriangulateProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F469A1708365200A106A9 /* TriangulateProcess.cpp */; };
954 2B7F4C8C1708365200A106A9 /* TriangulateProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F469B1708365200A106A9 /* TriangulateProcess.h */; };
955 2B7F4C8D1708365200A106A9 /* TriangulateProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F469B1708365200A106A9 /* TriangulateProcess.h */; };
956 2B7F4C8E1708365200A106A9 /* TriangulateProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F469B1708365200A106A9 /* TriangulateProcess.h */; };
957 2B7F4C8F1708365200A106A9 /* TriangulateProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F469B1708365200A106A9 /* TriangulateProcess.h */; };
958 2B7F4C901708365200A106A9 /* TriangulateProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F469B1708365200A106A9 /* TriangulateProcess.h */; };
959 2B7F4C9B1708365200A106A9 /* ValidateDataStructure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F469E1708365200A106A9 /* ValidateDataStructure.cpp */; };
960 2B7F4C9C1708365200A106A9 /* ValidateDataStructure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F469E1708365200A106A9 /* ValidateDataStructure.cpp */; };
961 2B7F4C9D1708365200A106A9 /* ValidateDataStructure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F469E1708365200A106A9 /* ValidateDataStructure.cpp */; };
962 2B7F4C9E1708365200A106A9 /* ValidateDataStructure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F469E1708365200A106A9 /* ValidateDataStructure.cpp */; };
963 2B7F4C9F1708365200A106A9 /* ValidateDataStructure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F469E1708365200A106A9 /* ValidateDataStructure.cpp */; };
964 2B7F4CA01708365200A106A9 /* ValidateDataStructure.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F469F1708365200A106A9 /* ValidateDataStructure.h */; };
965 2B7F4CA11708365200A106A9 /* ValidateDataStructure.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F469F1708365200A106A9 /* ValidateDataStructure.h */; };
966 2B7F4CA21708365200A106A9 /* ValidateDataStructure.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F469F1708365200A106A9 /* ValidateDataStructure.h */; };
967 2B7F4CA31708365200A106A9 /* ValidateDataStructure.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F469F1708365200A106A9 /* ValidateDataStructure.h */; };
968 2B7F4CA41708365200A106A9 /* ValidateDataStructure.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F469F1708365200A106A9 /* ValidateDataStructure.h */; };
969 2B7F4CA51708365200A106A9 /* Vertex.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46A01708365200A106A9 /* Vertex.h */; };
970 2B7F4CA61708365200A106A9 /* Vertex.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46A01708365200A106A9 /* Vertex.h */; };
971 2B7F4CA71708365200A106A9 /* Vertex.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46A01708365200A106A9 /* Vertex.h */; };
972 2B7F4CA81708365200A106A9 /* Vertex.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46A01708365200A106A9 /* Vertex.h */; };
973 2B7F4CA91708365200A106A9 /* Vertex.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46A01708365200A106A9 /* Vertex.h */; };
974 2B7F4CAA1708365200A106A9 /* VertexTriangleAdjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46A11708365200A106A9 /* VertexTriangleAdjacency.cpp */; };
975 2B7F4CAB1708365200A106A9 /* VertexTriangleAdjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46A11708365200A106A9 /* VertexTriangleAdjacency.cpp */; };
976 2B7F4CAC1708365200A106A9 /* VertexTriangleAdjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46A11708365200A106A9 /* VertexTriangleAdjacency.cpp */; };
977 2B7F4CAD1708365200A106A9 /* VertexTriangleAdjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46A11708365200A106A9 /* VertexTriangleAdjacency.cpp */; };
978 2B7F4CAE1708365200A106A9 /* VertexTriangleAdjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2B7F46A11708365200A106A9 /* VertexTriangleAdjacency.cpp */; };
979 2B7F4CAF1708365200A106A9 /* VertexTriangleAdjacency.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46A21708365200A106A9 /* VertexTriangleAdjacency.h */; };
980 2B7F4CB01708365200A106A9 /* VertexTriangleAdjacency.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46A21708365200A106A9 /* VertexTriangleAdjacency.h */; };
981 2B7F4CB11708365200A106A9 /* VertexTriangleAdjacency.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46A21708365200A106A9 /* VertexTriangleAdjacency.h */; };
982 2B7F4CB21708365200A106A9 /* VertexTriangleAdjacency.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46A21708365200A106A9 /* VertexTriangleAdjacency.h */; };
983 2B7F4CB31708365200A106A9 /* VertexTriangleAdjacency.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46A21708365200A106A9 /* VertexTriangleAdjacency.h */; };
984 2B7F4CB41708365200A106A9 /* Win32DebugLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46A31708365200A106A9 /* Win32DebugLogStream.h */; };
985 2B7F4CB51708365200A106A9 /* Win32DebugLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46A31708365200A106A9 /* Win32DebugLogStream.h */; };
986 2B7F4CB61708365200A106A9 /* Win32DebugLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46A31708365200A106A9 /* Win32DebugLogStream.h */; };
987 2B7F4CB71708365200A106A9 /* Win32DebugLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46A31708365200A106A9 /* Win32DebugLogStream.h */; };
988 2B7F4CB81708365200A106A9 /* Win32DebugLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B7F46A31708365200A106A9 /* Win32DebugLogStream.h */; };
989 2BA44E11170862D800C78A66 /* libstdc++.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2BA44E10170862D800C78A66 /* libstdc++.dylib */; };
990 2BA44E12170862DE00C78A66 /* libstdc++.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2BA44E10170862D800C78A66 /* libstdc++.dylib */; };
991 2BA44E13170862E400C78A66 /* libstdc++.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2BA44E10170862D800C78A66 /* libstdc++.dylib */; };
992 2BA44E14170862EA00C78A66 /* libstdc++.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2BA44E10170862D800C78A66 /* libstdc++.dylib */; };
993 2BA44E1A1708680600C78A66 /* libstdc++.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 2BA44E10170862D800C78A66 /* libstdc++.dylib */; };
9994 3AB8A3AF0E50D67A00606590 /* MDCFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AB0E50D67A00606590 /* MDCFileData.h */; };
10995 3AB8A3B00E50D67A00606590 /* MDCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3AC0E50D67A00606590 /* MDCLoader.cpp */; };
11996 3AB8A3B10E50D67A00606590 /* MDCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AD0E50D67A00606590 /* MDCLoader.h */; };
12997 3AB8A3B20E50D67A00606590 /* MDCNormalTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AE0E50D67A00606590 /* MDCNormalTable.h */; };
13 3AB8A3B50E50D69D00606590 /* FixNormalsStep.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3B30E50D69D00606590 /* FixNormalsStep.cpp */; };
14 3AB8A3B60E50D69D00606590 /* FixNormalsStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B40E50D69D00606590 /* FixNormalsStep.h */; };
15998 3AB8A3BA0E50D6DB00606590 /* LWOFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B70E50D6DB00606590 /* LWOFileData.h */; };
16999 3AB8A3BB0E50D6DB00606590 /* LWOLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3B80E50D6DB00606590 /* LWOLoader.cpp */; };
171000 3AB8A3BC0E50D6DB00606590 /* LWOLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B90E50D6DB00606590 /* LWOLoader.h */; };
18 3AB8A3C40E50D74500606590 /* BaseProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3C30E50D74500606590 /* BaseProcess.cpp */; };
191001 3AB8A3C60E50D77900606590 /* HMPFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3C50E50D77900606590 /* HMPFileData.h */; };
20 3AB8A3CA0E50D7CC00606590 /* IFF.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3C90E50D7CC00606590 /* IFF.h */; };
21 3AB8A3CD0E50D7FF00606590 /* Hash.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3CB0E50D7FF00606590 /* Hash.h */; };
221002 3AB8A7DD0E53715F00606590 /* LWOMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A7DC0E53715F00606590 /* LWOMaterial.cpp */; };
231003 3AF45AF90E4B716800207D74 /* 3DSConverter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A860E4B716800207D74 /* 3DSConverter.cpp */; };
241004 3AF45AFB0E4B716800207D74 /* 3DSHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A880E4B716800207D74 /* 3DSHelper.h */; };
281008 3AF45B020E4B716800207D74 /* ASELoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A8F0E4B716800207D74 /* ASELoader.h */; };
291009 3AF45B030E4B716800207D74 /* ASEParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A900E4B716800207D74 /* ASEParser.cpp */; };
301010 3AF45B040E4B716800207D74 /* ASEParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A910E4B716800207D74 /* ASEParser.h */; };
31 3AF45B050E4B716800207D74 /* Assimp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A920E4B716800207D74 /* Assimp.cpp */; };
32 3AF45B060E4B716800207D74 /* BaseImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A930E4B716800207D74 /* BaseImporter.cpp */; };
33 3AF45B070E4B716800207D74 /* BaseImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A940E4B716800207D74 /* BaseImporter.h */; };
34 3AF45B080E4B716800207D74 /* BaseProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A950E4B716800207D74 /* BaseProcess.h */; };
35 3AF45B090E4B716800207D74 /* ByteSwap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A960E4B716800207D74 /* ByteSwap.h */; };
36 3AF45B0A0E4B716800207D74 /* CalcTangentsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A970E4B716800207D74 /* CalcTangentsProcess.cpp */; };
37 3AF45B0B0E4B716800207D74 /* CalcTangentsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A980E4B716800207D74 /* CalcTangentsProcess.h */; };
38 3AF45B0C0E4B716800207D74 /* ConvertToLHProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A990E4B716800207D74 /* ConvertToLHProcess.cpp */; };
39 3AF45B0D0E4B716800207D74 /* ConvertToLHProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9A0E4B716800207D74 /* ConvertToLHProcess.h */; };
40 3AF45B0E0E4B716800207D74 /* DefaultIOStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9B0E4B716800207D74 /* DefaultIOStream.cpp */; };
41 3AF45B0F0E4B716800207D74 /* DefaultIOStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9C0E4B716800207D74 /* DefaultIOStream.h */; };
42 3AF45B100E4B716800207D74 /* DefaultIOSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9D0E4B716800207D74 /* DefaultIOSystem.cpp */; };
43 3AF45B110E4B716800207D74 /* DefaultIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9E0E4B716800207D74 /* DefaultIOSystem.h */; };
44 3AF45B120E4B716800207D74 /* DefaultLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9F0E4B716800207D74 /* DefaultLogger.cpp */; };
45 3AF45B150E4B716800207D74 /* fast_atof.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA30E4B716800207D74 /* fast_atof.h */; };
46 3AF45B160E4B716800207D74 /* FileLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA40E4B716800207D74 /* FileLogStream.h */; };
47 3AF45B170E4B716800207D74 /* GenFaceNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AA50E4B716800207D74 /* GenFaceNormalsProcess.cpp */; };
48 3AF45B180E4B716800207D74 /* GenFaceNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA60E4B716800207D74 /* GenFaceNormalsProcess.h */; };
49 3AF45B190E4B716800207D74 /* GenVertexNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AA70E4B716800207D74 /* GenVertexNormalsProcess.cpp */; };
50 3AF45B1A0E4B716800207D74 /* GenVertexNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA80E4B716800207D74 /* GenVertexNormalsProcess.h */; };
511011 3AF45B1B0E4B716800207D74 /* HalfLifeFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA90E4B716800207D74 /* HalfLifeFileData.h */; };
521012 3AF45B1D0E4B716800207D74 /* HMPLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAB0E4B716800207D74 /* HMPLoader.cpp */; };
531013 3AF45B1E0E4B716800207D74 /* HMPLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AAC0E4B716800207D74 /* HMPLoader.h */; };
54 3AF45B1F0E4B716800207D74 /* Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAD0E4B716800207D74 /* Importer.cpp */; };
55 3AF45B200E4B716800207D74 /* ImproveCacheLocality.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAE0E4B716800207D74 /* ImproveCacheLocality.cpp */; };
56 3AF45B210E4B716800207D74 /* ImproveCacheLocality.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AAF0E4B716800207D74 /* ImproveCacheLocality.h */; };
57 3AF45B220E4B716800207D74 /* JoinVerticesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB00E4B716800207D74 /* JoinVerticesProcess.cpp */; };
58 3AF45B230E4B716800207D74 /* JoinVerticesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB10E4B716800207D74 /* JoinVerticesProcess.h */; };
59 3AF45B260E4B716800207D74 /* LimitBoneWeightsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB40E4B716800207D74 /* LimitBoneWeightsProcess.cpp */; };
60 3AF45B270E4B716800207D74 /* LimitBoneWeightsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB50E4B716800207D74 /* LimitBoneWeightsProcess.h */; };
61 3AF45B280E4B716800207D74 /* MaterialSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB60E4B716800207D74 /* MaterialSystem.cpp */; };
62 3AF45B290E4B716800207D74 /* MaterialSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB70E4B716800207D74 /* MaterialSystem.h */; };
631014 3AF45B2A0E4B716800207D74 /* MD2FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB80E4B716800207D74 /* MD2FileData.h */; };
641015 3AF45B2B0E4B716800207D74 /* MD2Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB90E4B716800207D74 /* MD2Loader.cpp */; };
651016 3AF45B2C0E4B716800207D74 /* MD2Loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABA0E4B716800207D74 /* MD2Loader.h */; };
761027 3AF45B3A0E4B716800207D74 /* MDLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC80E4B716800207D74 /* MDLLoader.cpp */; };
771028 3AF45B3B0E4B716800207D74 /* MDLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC90E4B716800207D74 /* MDLLoader.h */; };
781029 3AF45B3C0E4B716800207D74 /* MDLMaterialLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACA0E4B716800207D74 /* MDLMaterialLoader.cpp */; };
79 3AF45B3D0E4B716800207D74 /* ObjFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACB0E4B716800207D74 /* ObjFileData.h */; };
80 3AF45B3E0E4B716800207D74 /* ObjFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACC0E4B716800207D74 /* ObjFileImporter.cpp */; };
81 3AF45B3F0E4B716800207D74 /* ObjFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACD0E4B716800207D74 /* ObjFileImporter.h */; };
82 3AF45B400E4B716800207D74 /* ObjFileMtlImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACE0E4B716800207D74 /* ObjFileMtlImporter.cpp */; };
83 3AF45B410E4B716800207D74 /* ObjFileMtlImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACF0E4B716800207D74 /* ObjFileMtlImporter.h */; };
84 3AF45B420E4B716800207D74 /* ObjFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD00E4B716800207D74 /* ObjFileParser.cpp */; };
85 3AF45B430E4B716800207D74 /* ObjFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD10E4B716800207D74 /* ObjFileParser.h */; };
86 3AF45B440E4B716800207D74 /* ObjTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD20E4B716800207D74 /* ObjTools.h */; };
87 3AF45B450E4B716800207D74 /* ParsingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD30E4B716800207D74 /* ParsingUtils.h */; };
881030 3AF45B460E4B716800207D74 /* PlyLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD40E4B716800207D74 /* PlyLoader.cpp */; };
891031 3AF45B470E4B716800207D74 /* PlyLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD50E4B716800207D74 /* PlyLoader.h */; };
901032 3AF45B480E4B716800207D74 /* PlyParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD60E4B716800207D74 /* PlyParser.cpp */; };
911033 3AF45B490E4B716800207D74 /* PlyParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD70E4B716800207D74 /* PlyParser.h */; };
92 3AF45B4A0E4B716800207D74 /* PretransformVertices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD80E4B716800207D74 /* PretransformVertices.cpp */; };
93 3AF45B4B0E4B716800207D74 /* PretransformVertices.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD90E4B716800207D74 /* PretransformVertices.h */; };
94 3AF45B4C0E4B716800207D74 /* qnan.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADA0E4B716800207D74 /* qnan.h */; };
95 3AF45B4D0E4B716800207D74 /* RemoveComments.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ADB0E4B716800207D74 /* RemoveComments.cpp */; };
96 3AF45B4E0E4B716800207D74 /* RemoveComments.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADC0E4B716800207D74 /* RemoveComments.h */; };
97 3AF45B4F0E4B716800207D74 /* RemoveRedundantMaterials.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ADD0E4B716800207D74 /* RemoveRedundantMaterials.cpp */; };
98 3AF45B500E4B716800207D74 /* RemoveRedundantMaterials.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADE0E4B716800207D74 /* RemoveRedundantMaterials.h */; };
991034 3AF45B520E4B716800207D74 /* SMDLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE20E4B716800207D74 /* SMDLoader.cpp */; };
1001035 3AF45B530E4B716800207D74 /* SMDLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE30E4B716800207D74 /* SMDLoader.h */; };
101 3AF45B540E4B716800207D74 /* SpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE40E4B716800207D74 /* SpatialSort.cpp */; };
102 3AF45B550E4B716800207D74 /* SpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE50E4B716800207D74 /* SpatialSort.h */; };
103 3AF45B560E4B716800207D74 /* SplitLargeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE60E4B716800207D74 /* SplitLargeMeshes.cpp */; };
104 3AF45B570E4B716800207D74 /* SplitLargeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE70E4B716800207D74 /* SplitLargeMeshes.h */; };
105 3AF45B580E4B716800207D74 /* STLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE80E4B716800207D74 /* STLLoader.cpp */; };
106 3AF45B590E4B716800207D74 /* STLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE90E4B716800207D74 /* STLLoader.h */; };
107 3AF45B5A0E4B716800207D74 /* StringComparison.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEA0E4B716800207D74 /* StringComparison.h */; };
108 3AF45B5B0E4B716800207D74 /* TextureTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AEB0E4B716800207D74 /* TextureTransform.cpp */; };
109 3AF45B5C0E4B716800207D74 /* TextureTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEC0E4B716800207D74 /* TextureTransform.h */; };
110 3AF45B5D0E4B716800207D74 /* TriangulateProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AED0E4B716800207D74 /* TriangulateProcess.cpp */; };
111 3AF45B5E0E4B716800207D74 /* TriangulateProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEE0E4B716800207D74 /* TriangulateProcess.h */; };
112 3AF45B5F0E4B716800207D74 /* ValidateDataStructure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AEF0E4B716800207D74 /* ValidateDataStructure.cpp */; };
113 3AF45B600E4B716800207D74 /* ValidateDataStructure.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF00E4B716800207D74 /* ValidateDataStructure.h */; };
114 3AF45B610E4B716800207D74 /* VertexTriangleAdjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF10E4B716800207D74 /* VertexTriangleAdjacency.cpp */; };
115 3AF45B620E4B716800207D74 /* VertexTriangleAdjacency.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF20E4B716800207D74 /* VertexTriangleAdjacency.h */; };
116 3AF45B630E4B716800207D74 /* Win32DebugLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF30E4B716800207D74 /* Win32DebugLogStream.h */; };
1171036 3AF45B640E4B716800207D74 /* XFileHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF40E4B716800207D74 /* XFileHelper.h */; };
1181037 3AF45B650E4B716800207D74 /* XFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF50E4B716800207D74 /* XFileImporter.cpp */; };
1191038 3AF45B660E4B716800207D74 /* XFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF60E4B716800207D74 /* XFileImporter.h */; };
1591078 7411B19211416EBC00BCD793 /* UnrealLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B18C11416EBC00BCD793 /* UnrealLoader.h */; };
1601079 7411B19311416EBC00BCD793 /* UnrealLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B18B11416EBC00BCD793 /* UnrealLoader.cpp */; };
1611080 7411B19411416EBC00BCD793 /* UnrealLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B18C11416EBC00BCD793 /* UnrealLoader.h */; };
162 7411B1A611416EF400BCD793 /* FileSystemFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19711416EF400BCD793 /* FileSystemFilter.h */; };
163 7411B1A711416EF400BCD793 /* GenericProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19811416EF400BCD793 /* GenericProperty.h */; };
164 7411B1A811416EF400BCD793 /* MemoryIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19911416EF400BCD793 /* MemoryIOWrapper.h */; };
165 7411B1A911416EF400BCD793 /* OptimizeGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B19A11416EF400BCD793 /* OptimizeGraph.cpp */; };
166 7411B1AA11416EF400BCD793 /* OptimizeGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19B11416EF400BCD793 /* OptimizeGraph.h */; };
167 7411B1AB11416EF400BCD793 /* OptimizeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B19C11416EF400BCD793 /* OptimizeMeshes.cpp */; };
168 7411B1AC11416EF400BCD793 /* OptimizeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19D11416EF400BCD793 /* OptimizeMeshes.h */; };
169 7411B1AD11416EF400BCD793 /* ProcessHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19E11416EF400BCD793 /* ProcessHelper.h */; };
170 7411B1AE11416EF400BCD793 /* StdOStreamLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19F11416EF400BCD793 /* StdOStreamLogStream.h */; };
171 7411B1AF11416EF400BCD793 /* StreamReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A011416EF400BCD793 /* StreamReader.h */; };
172 7411B1B011416EF400BCD793 /* Subdivision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B1A111416EF400BCD793 /* Subdivision.cpp */; };
173 7411B1B111416EF400BCD793 /* Subdivision.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A211416EF400BCD793 /* Subdivision.h */; };
174 7411B1B211416EF400BCD793 /* TargetAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B1A311416EF400BCD793 /* TargetAnimation.cpp */; };
175 7411B1B311416EF400BCD793 /* TargetAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A411416EF400BCD793 /* TargetAnimation.h */; };
176 7411B1B411416EF400BCD793 /* Vertex.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A511416EF400BCD793 /* Vertex.h */; };
177 7411B1B511416EF400BCD793 /* FileSystemFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19711416EF400BCD793 /* FileSystemFilter.h */; };
178 7411B1B611416EF400BCD793 /* GenericProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19811416EF400BCD793 /* GenericProperty.h */; };
179 7411B1B711416EF400BCD793 /* MemoryIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19911416EF400BCD793 /* MemoryIOWrapper.h */; };
180 7411B1B811416EF400BCD793 /* OptimizeGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B19A11416EF400BCD793 /* OptimizeGraph.cpp */; };
181 7411B1B911416EF400BCD793 /* OptimizeGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19B11416EF400BCD793 /* OptimizeGraph.h */; };
182 7411B1BA11416EF400BCD793 /* OptimizeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B19C11416EF400BCD793 /* OptimizeMeshes.cpp */; };
183 7411B1BB11416EF400BCD793 /* OptimizeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19D11416EF400BCD793 /* OptimizeMeshes.h */; };
184 7411B1BC11416EF400BCD793 /* ProcessHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19E11416EF400BCD793 /* ProcessHelper.h */; };
185 7411B1BD11416EF400BCD793 /* StdOStreamLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19F11416EF400BCD793 /* StdOStreamLogStream.h */; };
186 7411B1BE11416EF400BCD793 /* StreamReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A011416EF400BCD793 /* StreamReader.h */; };
187 7411B1BF11416EF400BCD793 /* Subdivision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B1A111416EF400BCD793 /* Subdivision.cpp */; };
188 7411B1C011416EF400BCD793 /* Subdivision.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A211416EF400BCD793 /* Subdivision.h */; };
189 7411B1C111416EF400BCD793 /* TargetAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B1A311416EF400BCD793 /* TargetAnimation.cpp */; };
190 7411B1C211416EF400BCD793 /* TargetAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A411416EF400BCD793 /* TargetAnimation.h */; };
191 7411B1C311416EF400BCD793 /* Vertex.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A511416EF400BCD793 /* Vertex.h */; };
192 7411B1C411416EF400BCD793 /* FileSystemFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19711416EF400BCD793 /* FileSystemFilter.h */; };
193 7411B1C511416EF400BCD793 /* GenericProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19811416EF400BCD793 /* GenericProperty.h */; };
194 7411B1C611416EF400BCD793 /* MemoryIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19911416EF400BCD793 /* MemoryIOWrapper.h */; };
195 7411B1C711416EF400BCD793 /* OptimizeGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B19A11416EF400BCD793 /* OptimizeGraph.cpp */; };
196 7411B1C811416EF400BCD793 /* OptimizeGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19B11416EF400BCD793 /* OptimizeGraph.h */; };
197 7411B1C911416EF400BCD793 /* OptimizeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B19C11416EF400BCD793 /* OptimizeMeshes.cpp */; };
198 7411B1CA11416EF400BCD793 /* OptimizeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19D11416EF400BCD793 /* OptimizeMeshes.h */; };
199 7411B1CB11416EF400BCD793 /* ProcessHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19E11416EF400BCD793 /* ProcessHelper.h */; };
200 7411B1CC11416EF400BCD793 /* StdOStreamLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19F11416EF400BCD793 /* StdOStreamLogStream.h */; };
201 7411B1CD11416EF400BCD793 /* StreamReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A011416EF400BCD793 /* StreamReader.h */; };
202 7411B1CE11416EF400BCD793 /* Subdivision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B1A111416EF400BCD793 /* Subdivision.cpp */; };
203 7411B1CF11416EF400BCD793 /* Subdivision.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A211416EF400BCD793 /* Subdivision.h */; };
204 7411B1D011416EF400BCD793 /* TargetAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B1A311416EF400BCD793 /* TargetAnimation.cpp */; };
205 7411B1D111416EF400BCD793 /* TargetAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A411416EF400BCD793 /* TargetAnimation.h */; };
206 7411B1D211416EF400BCD793 /* Vertex.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A511416EF400BCD793 /* Vertex.h */; };
207 7411B1D311416EF400BCD793 /* FileSystemFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19711416EF400BCD793 /* FileSystemFilter.h */; };
208 7411B1D411416EF400BCD793 /* GenericProperty.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19811416EF400BCD793 /* GenericProperty.h */; };
209 7411B1D511416EF400BCD793 /* MemoryIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19911416EF400BCD793 /* MemoryIOWrapper.h */; };
210 7411B1D611416EF400BCD793 /* OptimizeGraph.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B19A11416EF400BCD793 /* OptimizeGraph.cpp */; };
211 7411B1D711416EF400BCD793 /* OptimizeGraph.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19B11416EF400BCD793 /* OptimizeGraph.h */; };
212 7411B1D811416EF400BCD793 /* OptimizeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B19C11416EF400BCD793 /* OptimizeMeshes.cpp */; };
213 7411B1D911416EF400BCD793 /* OptimizeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19D11416EF400BCD793 /* OptimizeMeshes.h */; };
214 7411B1DA11416EF400BCD793 /* ProcessHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19E11416EF400BCD793 /* ProcessHelper.h */; };
215 7411B1DB11416EF400BCD793 /* StdOStreamLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B19F11416EF400BCD793 /* StdOStreamLogStream.h */; };
216 7411B1DC11416EF400BCD793 /* StreamReader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A011416EF400BCD793 /* StreamReader.h */; };
217 7411B1DD11416EF400BCD793 /* Subdivision.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B1A111416EF400BCD793 /* Subdivision.cpp */; };
218 7411B1DE11416EF400BCD793 /* Subdivision.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A211416EF400BCD793 /* Subdivision.h */; };
219 7411B1DF11416EF400BCD793 /* TargetAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B1A311416EF400BCD793 /* TargetAnimation.cpp */; };
220 7411B1E011416EF400BCD793 /* TargetAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A411416EF400BCD793 /* TargetAnimation.h */; };
221 7411B1E111416EF400BCD793 /* Vertex.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B1A511416EF400BCD793 /* Vertex.h */; };
222 7437C959113F18C70067B9B9 /* foreach.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C950113F18C70067B9B9 /* foreach.hpp */; };
223 7437C95A113F18C70067B9B9 /* format.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C951113F18C70067B9B9 /* format.hpp */; };
224 7437C95B113F18C70067B9B9 /* common_factor_rt.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C953113F18C70067B9B9 /* common_factor_rt.hpp */; };
225 7437C95C113F18C70067B9B9 /* scoped_array.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C954113F18C70067B9B9 /* scoped_array.hpp */; };
226 7437C95D113F18C70067B9B9 /* scoped_ptr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C955113F18C70067B9B9 /* scoped_ptr.hpp */; };
227 7437C95E113F18C70067B9B9 /* static_assert.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C956113F18C70067B9B9 /* static_assert.hpp */; };
228 7437C95F113F18C70067B9B9 /* tuple.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C958113F18C70067B9B9 /* tuple.hpp */; };
229 7437C960113F18C70067B9B9 /* foreach.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C950113F18C70067B9B9 /* foreach.hpp */; };
230 7437C961113F18C70067B9B9 /* format.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C951113F18C70067B9B9 /* format.hpp */; };
231 7437C962113F18C70067B9B9 /* common_factor_rt.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C953113F18C70067B9B9 /* common_factor_rt.hpp */; };
232 7437C963113F18C70067B9B9 /* scoped_array.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C954113F18C70067B9B9 /* scoped_array.hpp */; };
233 7437C964113F18C70067B9B9 /* scoped_ptr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C955113F18C70067B9B9 /* scoped_ptr.hpp */; };
234 7437C965113F18C70067B9B9 /* static_assert.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C956113F18C70067B9B9 /* static_assert.hpp */; };
235 7437C966113F18C70067B9B9 /* tuple.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 7437C958113F18C70067B9B9 /* tuple.hpp */; };
2361081 745FF840113ECB080020C31B /* 3DSHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A880E4B716800207D74 /* 3DSHelper.h */; };
2371082 745FF841113ECB080020C31B /* 3DSLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A8A0E4B716800207D74 /* 3DSLoader.h */; };
2381083 745FF842113ECB080020C31B /* ASELoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A8F0E4B716800207D74 /* ASELoader.h */; };
2391084 745FF843113ECB080020C31B /* ASEParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A910E4B716800207D74 /* ASEParser.h */; };
240 745FF844113ECB080020C31B /* BaseImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A940E4B716800207D74 /* BaseImporter.h */; };
241 745FF845113ECB080020C31B /* BaseProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A950E4B716800207D74 /* BaseProcess.h */; };
242 745FF846113ECB080020C31B /* ByteSwap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A960E4B716800207D74 /* ByteSwap.h */; };
243 745FF847113ECB080020C31B /* CalcTangentsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A980E4B716800207D74 /* CalcTangentsProcess.h */; };
244 745FF848113ECB080020C31B /* ConvertToLHProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9A0E4B716800207D74 /* ConvertToLHProcess.h */; };
245 745FF849113ECB080020C31B /* DefaultIOStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9C0E4B716800207D74 /* DefaultIOStream.h */; };
246 745FF84A113ECB080020C31B /* DefaultIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9E0E4B716800207D74 /* DefaultIOSystem.h */; };
247 745FF84C113ECB080020C31B /* fast_atof.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA30E4B716800207D74 /* fast_atof.h */; };
248 745FF84D113ECB080020C31B /* FileLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA40E4B716800207D74 /* FileLogStream.h */; };
249 745FF84E113ECB080020C31B /* GenFaceNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA60E4B716800207D74 /* GenFaceNormalsProcess.h */; };
250 745FF84F113ECB080020C31B /* GenVertexNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA80E4B716800207D74 /* GenVertexNormalsProcess.h */; };
2511085 745FF850113ECB080020C31B /* HalfLifeFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA90E4B716800207D74 /* HalfLifeFileData.h */; };
2521086 745FF851113ECB080020C31B /* HMPLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AAC0E4B716800207D74 /* HMPLoader.h */; };
253 745FF852113ECB080020C31B /* ImproveCacheLocality.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AAF0E4B716800207D74 /* ImproveCacheLocality.h */; };
254 745FF853113ECB080020C31B /* JoinVerticesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB10E4B716800207D74 /* JoinVerticesProcess.h */; };
255 745FF854113ECB080020C31B /* LimitBoneWeightsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB50E4B716800207D74 /* LimitBoneWeightsProcess.h */; };
256 745FF855113ECB080020C31B /* MaterialSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB70E4B716800207D74 /* MaterialSystem.h */; };
2571087 745FF856113ECB080020C31B /* MD2FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB80E4B716800207D74 /* MD2FileData.h */; };
2581088 745FF857113ECB080020C31B /* MD2Loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABA0E4B716800207D74 /* MD2Loader.h */; };
2591089 745FF858113ECB080020C31B /* MD2NormalTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABB0E4B716800207D74 /* MD2NormalTable.h */; };
2641094 745FF85D113ECB080020C31B /* MDLDefaultColorMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC60E4B716800207D74 /* MDLDefaultColorMap.h */; };
2651095 745FF85E113ECB080020C31B /* MDLFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC70E4B716800207D74 /* MDLFileData.h */; };
2661096 745FF85F113ECB080020C31B /* MDLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC90E4B716800207D74 /* MDLLoader.h */; };
267 745FF860113ECB080020C31B /* ObjFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACB0E4B716800207D74 /* ObjFileData.h */; };
268 745FF861113ECB080020C31B /* ObjFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACD0E4B716800207D74 /* ObjFileImporter.h */; };
269 745FF862113ECB080020C31B /* ObjFileMtlImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACF0E4B716800207D74 /* ObjFileMtlImporter.h */; };
270 745FF863113ECB080020C31B /* ObjFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD10E4B716800207D74 /* ObjFileParser.h */; };
271 745FF864113ECB080020C31B /* ObjTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD20E4B716800207D74 /* ObjTools.h */; };
272 745FF865113ECB080020C31B /* ParsingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD30E4B716800207D74 /* ParsingUtils.h */; };
2731097 745FF866113ECB080020C31B /* PlyLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD50E4B716800207D74 /* PlyLoader.h */; };
2741098 745FF867113ECB080020C31B /* PlyParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD70E4B716800207D74 /* PlyParser.h */; };
275 745FF868113ECB080020C31B /* PretransformVertices.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD90E4B716800207D74 /* PretransformVertices.h */; };
276 745FF869113ECB080020C31B /* qnan.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADA0E4B716800207D74 /* qnan.h */; };
277 745FF86A113ECB080020C31B /* RemoveComments.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADC0E4B716800207D74 /* RemoveComments.h */; };
278 745FF86B113ECB080020C31B /* RemoveRedundantMaterials.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADE0E4B716800207D74 /* RemoveRedundantMaterials.h */; };
2791099 745FF86C113ECB080020C31B /* SMDLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE30E4B716800207D74 /* SMDLoader.h */; };
280 745FF86D113ECB080020C31B /* SpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE50E4B716800207D74 /* SpatialSort.h */; };
281 745FF86E113ECB080020C31B /* SplitLargeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE70E4B716800207D74 /* SplitLargeMeshes.h */; };
282 745FF86F113ECB080020C31B /* STLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE90E4B716800207D74 /* STLLoader.h */; };
283 745FF870113ECB080020C31B /* StringComparison.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEA0E4B716800207D74 /* StringComparison.h */; };
284 745FF871113ECB080020C31B /* TextureTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEC0E4B716800207D74 /* TextureTransform.h */; };
285 745FF872113ECB080020C31B /* TriangulateProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEE0E4B716800207D74 /* TriangulateProcess.h */; };
286 745FF873113ECB080020C31B /* ValidateDataStructure.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF00E4B716800207D74 /* ValidateDataStructure.h */; };
287 745FF874113ECB080020C31B /* VertexTriangleAdjacency.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF20E4B716800207D74 /* VertexTriangleAdjacency.h */; };
288 745FF875113ECB080020C31B /* Win32DebugLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF30E4B716800207D74 /* Win32DebugLogStream.h */; };
2891100 745FF876113ECB080020C31B /* XFileHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF40E4B716800207D74 /* XFileHelper.h */; };
2901101 745FF877113ECB080020C31B /* XFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF60E4B716800207D74 /* XFileImporter.h */; };
2911102 745FF878113ECB080020C31B /* XFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF80E4B716800207D74 /* XFileParser.h */; };
2921103 745FF87B113ECB080020C31B /* MDCFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AB0E50D67A00606590 /* MDCFileData.h */; };
2931104 745FF87C113ECB080020C31B /* MDCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AD0E50D67A00606590 /* MDCLoader.h */; };
2941105 745FF87D113ECB080020C31B /* MDCNormalTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AE0E50D67A00606590 /* MDCNormalTable.h */; };
295 745FF87E113ECB080020C31B /* FixNormalsStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B40E50D69D00606590 /* FixNormalsStep.h */; };
2961106 745FF87F113ECB080020C31B /* LWOFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B70E50D6DB00606590 /* LWOFileData.h */; };
2971107 745FF880113ECB080020C31B /* LWOLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B90E50D6DB00606590 /* LWOLoader.h */; };
2981108 745FF881113ECB080020C31B /* HMPFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3C50E50D77900606590 /* HMPFileData.h */; };
299 745FF883113ECB080020C31B /* IFF.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3C90E50D7CC00606590 /* IFF.h */; };
300 745FF884113ECB080020C31B /* Hash.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3CB0E50D7FF00606590 /* Hash.h */; };
3011109 745FF889113ECB080020C31B /* ACLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFD10F5DD87000124155 /* ACLoader.h */; };
3021110 745FF88A113ECB080020C31B /* IRRLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDA0F5DD90800124155 /* IRRLoader.h */; };
3031111 745FF88B113ECB080020C31B /* IRRMeshLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDC0F5DD90800124155 /* IRRMeshLoader.h */; };
3041112 745FF88C113ECB080020C31B /* IRRShared.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDE0F5DD90800124155 /* IRRShared.h */; };
305 745FF88D113ECB080020C31B /* ColladaHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFE80F5DD93600124155 /* ColladaHelper.h */; };
306 745FF88E113ECB080020C31B /* ColladaLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFEA0F5DD93600124155 /* ColladaLoader.h */; };
307 745FF88F113ECB080020C31B /* ColladaParser.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFEC0F5DD93600124155 /* ColladaParser.h */; };
3081113 745FF890113ECB080020C31B /* NFFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFF50F5DD96100124155 /* NFFLoader.h */; };
309 745FF891113ECB080020C31B /* SGSpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFFB0F5DD9A000124155 /* SGSpatialSort.h */; };
3101114 745FF892113ECB080020C31B /* Q3DLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0070F5DD9DD00124155 /* Q3DLoader.h */; };
3111115 745FF893113ECB080020C31B /* BVHLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB00C0F5DD9F400124155 /* BVHLoader.h */; };
3121116 745FF894113ECB080020C31B /* OFFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0130F5DDA1400124155 /* OFFLoader.h */; };
3141118 745FF896113ECB080020C31B /* DXFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0210F5DDA5700124155 /* DXFLoader.h */; };
3151119 745FF897113ECB080020C31B /* TerragenLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB02F0F5DDAB500124155 /* TerragenLoader.h */; };
3161120 745FF898113ECB080020C31B /* irrXMLWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0360F5DDB1B00124155 /* irrXMLWrapper.h */; };
317 745FF899113ECB080020C31B /* ScenePreprocessor.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0390F5DDB3200124155 /* ScenePreprocessor.h */; };
318 745FF89A113ECB080020C31B /* SceneCombiner.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB03B0F5DDB3200124155 /* SceneCombiner.h */; };
319 745FF89B113ECB080020C31B /* SortByPTypeProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0420F5DDB4600124155 /* SortByPTypeProcess.h */; };
320 745FF89C113ECB080020C31B /* FindDegenerates.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0470F5DDB6100124155 /* FindDegenerates.h */; };
321 745FF89D113ECB080020C31B /* ComputeUVMappingProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB04C0F5DDB8D00124155 /* ComputeUVMappingProcess.h */; };
322 745FF89E113ECB080020C31B /* StandardShapes.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0510F5DDBA800124155 /* StandardShapes.h */; };
323 745FF89F113ECB080020C31B /* FindInstancesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0560F5DDBBF00124155 /* FindInstancesProcess.h */; };
324 745FF8A0113ECB080020C31B /* RemoveVCProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB05A0F5DDBCB00124155 /* RemoveVCProcess.h */; };
325 745FF8A1113ECB080020C31B /* FindInvalidDataProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0600F5DDBE600124155 /* FindInvalidDataProcess.h */; };
326 745FF8A2113ECB080020C31B /* SkeletonMeshBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0640F5DDC0700124155 /* SkeletonMeshBuilder.h */; };
327 745FF8A3113ECB080020C31B /* SmoothingGroups.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0690F5DDC1E00124155 /* SmoothingGroups.h */; };
3281121 745FF8AA113ECB080020C31B /* B3DImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0870F5DDE0700124155 /* B3DImporter.h */; };
329 745FF8AE113ECB080020C31B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F90BB06D0F5DDCFC00124155 /* libz.dylib */; };
3301122 745FF8B0113ECB080020C31B /* 3DSConverter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A860E4B716800207D74 /* 3DSConverter.cpp */; };
3311123 745FF8B1113ECB080020C31B /* 3DSLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A890E4B716800207D74 /* 3DSLoader.cpp */; };
3321124 745FF8B3113ECB080020C31B /* ASELoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A8E0E4B716800207D74 /* ASELoader.cpp */; };
3331125 745FF8B4113ECB080020C31B /* ASEParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A900E4B716800207D74 /* ASEParser.cpp */; };
334 745FF8B5113ECB080020C31B /* Assimp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A920E4B716800207D74 /* Assimp.cpp */; };
335 745FF8B6113ECB080020C31B /* BaseImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A930E4B716800207D74 /* BaseImporter.cpp */; };
336 745FF8B7113ECB080020C31B /* CalcTangentsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A970E4B716800207D74 /* CalcTangentsProcess.cpp */; };
337 745FF8B8113ECB080020C31B /* ConvertToLHProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A990E4B716800207D74 /* ConvertToLHProcess.cpp */; };
338 745FF8B9113ECB080020C31B /* DefaultIOStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9B0E4B716800207D74 /* DefaultIOStream.cpp */; };
339 745FF8BA113ECB080020C31B /* DefaultIOSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9D0E4B716800207D74 /* DefaultIOSystem.cpp */; };
340 745FF8BB113ECB080020C31B /* DefaultLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9F0E4B716800207D74 /* DefaultLogger.cpp */; };
341 745FF8BD113ECB080020C31B /* GenFaceNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AA50E4B716800207D74 /* GenFaceNormalsProcess.cpp */; };
342 745FF8BE113ECB080020C31B /* GenVertexNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AA70E4B716800207D74 /* GenVertexNormalsProcess.cpp */; };
3431126 745FF8BF113ECB080020C31B /* HMPLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAB0E4B716800207D74 /* HMPLoader.cpp */; };
344 745FF8C0113ECB080020C31B /* Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAD0E4B716800207D74 /* Importer.cpp */; };
345 745FF8C1113ECB080020C31B /* ImproveCacheLocality.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAE0E4B716800207D74 /* ImproveCacheLocality.cpp */; };
346 745FF8C2113ECB080020C31B /* JoinVerticesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB00E4B716800207D74 /* JoinVerticesProcess.cpp */; };
347 745FF8C3113ECB080020C31B /* LimitBoneWeightsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB40E4B716800207D74 /* LimitBoneWeightsProcess.cpp */; };
348 745FF8C4113ECB080020C31B /* MaterialSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB60E4B716800207D74 /* MaterialSystem.cpp */; };
3491127 745FF8C5113ECB080020C31B /* MD2Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB90E4B716800207D74 /* MD2Loader.cpp */; };
3501128 745FF8C6113ECB080020C31B /* MD3Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ABD0E4B716800207D74 /* MD3Loader.cpp */; };
3511129 745FF8C7113ECB080020C31B /* MD5Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC20E4B716800207D74 /* MD5Loader.cpp */; };
3521130 745FF8C8113ECB080020C31B /* MD5Parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC40E4B716800207D74 /* MD5Parser.cpp */; };
3531131 745FF8C9113ECB080020C31B /* MDLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC80E4B716800207D74 /* MDLLoader.cpp */; };
3541132 745FF8CA113ECB080020C31B /* MDLMaterialLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACA0E4B716800207D74 /* MDLMaterialLoader.cpp */; };
355 745FF8CB113ECB080020C31B /* ObjFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACC0E4B716800207D74 /* ObjFileImporter.cpp */; };
356 745FF8CC113ECB080020C31B /* ObjFileMtlImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACE0E4B716800207D74 /* ObjFileMtlImporter.cpp */; };
357 745FF8CD113ECB080020C31B /* ObjFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD00E4B716800207D74 /* ObjFileParser.cpp */; };
3581133 745FF8CE113ECB080020C31B /* PlyLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD40E4B716800207D74 /* PlyLoader.cpp */; };
3591134 745FF8CF113ECB080020C31B /* PlyParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD60E4B716800207D74 /* PlyParser.cpp */; };
360 745FF8D0113ECB080020C31B /* PretransformVertices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD80E4B716800207D74 /* PretransformVertices.cpp */; };
361 745FF8D1113ECB080020C31B /* RemoveComments.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ADB0E4B716800207D74 /* RemoveComments.cpp */; };
362 745FF8D2113ECB080020C31B /* RemoveRedundantMaterials.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ADD0E4B716800207D74 /* RemoveRedundantMaterials.cpp */; };
3631135 745FF8D3113ECB080020C31B /* SMDLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE20E4B716800207D74 /* SMDLoader.cpp */; };
364 745FF8D4113ECB080020C31B /* SpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE40E4B716800207D74 /* SpatialSort.cpp */; };
365 745FF8D5113ECB080020C31B /* SplitLargeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE60E4B716800207D74 /* SplitLargeMeshes.cpp */; };
366 745FF8D6113ECB080020C31B /* STLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE80E4B716800207D74 /* STLLoader.cpp */; };
367 745FF8D7113ECB080020C31B /* TextureTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AEB0E4B716800207D74 /* TextureTransform.cpp */; };
368 745FF8D8113ECB080020C31B /* TriangulateProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AED0E4B716800207D74 /* TriangulateProcess.cpp */; };
369 745FF8D9113ECB080020C31B /* ValidateDataStructure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AEF0E4B716800207D74 /* ValidateDataStructure.cpp */; };
370 745FF8DA113ECB080020C31B /* VertexTriangleAdjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF10E4B716800207D74 /* VertexTriangleAdjacency.cpp */; };
3711136 745FF8DB113ECB080020C31B /* XFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF50E4B716800207D74 /* XFileImporter.cpp */; };
3721137 745FF8DC113ECB080020C31B /* XFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF70E4B716800207D74 /* XFileParser.cpp */; };
3731138 745FF8DD113ECB080020C31B /* MDCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3AC0E50D67A00606590 /* MDCLoader.cpp */; };
374 745FF8DE113ECB080020C31B /* FixNormalsStep.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3B30E50D69D00606590 /* FixNormalsStep.cpp */; };
3751139 745FF8DF113ECB080020C31B /* LWOLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3B80E50D6DB00606590 /* LWOLoader.cpp */; };
376 745FF8E0113ECB080020C31B /* BaseProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3C30E50D74500606590 /* BaseProcess.cpp */; };
3771140 745FF8E1113ECB080020C31B /* LWOMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A7DC0E53715F00606590 /* LWOMaterial.cpp */; };
3781141 745FF8E2113ECB080020C31B /* ACLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFD00F5DD87000124155 /* ACLoader.cpp */; };
3791142 745FF8E3113ECB080020C31B /* IRRLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFD90F5DD90800124155 /* IRRLoader.cpp */; };
3801143 745FF8E4113ECB080020C31B /* IRRMeshLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFDB0F5DD90800124155 /* IRRMeshLoader.cpp */; };
3811144 745FF8E5113ECB080020C31B /* IRRShared.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFDD0F5DD90800124155 /* IRRShared.cpp */; };
382 745FF8E6113ECB080020C31B /* ColladaLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFE90F5DD93600124155 /* ColladaLoader.cpp */; };
383 745FF8E7113ECB080020C31B /* ColladaParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFEB0F5DD93600124155 /* ColladaParser.cpp */; };
3841145 745FF8E8113ECB080020C31B /* NFFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFF60F5DD96100124155 /* NFFLoader.cpp */; };
385 745FF8E9113ECB080020C31B /* SGSpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFFC0F5DD9A000124155 /* SGSpatialSort.cpp */; };
3861146 745FF8EA113ECB080020C31B /* Q3DLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0060F5DD9DD00124155 /* Q3DLoader.cpp */; };
3871147 745FF8EB113ECB080020C31B /* BVHLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB00D0F5DD9F400124155 /* BVHLoader.cpp */; };
3881148 745FF8EC113ECB080020C31B /* OFFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0140F5DDA1400124155 /* OFFLoader.cpp */; };
3901150 745FF8EE113ECB080020C31B /* DXFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0220F5DDA5700124155 /* DXFLoader.cpp */; };
3911151 745FF8EF113ECB080020C31B /* LWOBLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0270F5DDA9200124155 /* LWOBLoader.cpp */; };
3921152 745FF8F0113ECB080020C31B /* TerragenLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0300F5DDAB500124155 /* TerragenLoader.cpp */; };
393 745FF8F1113ECB080020C31B /* SceneCombiner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB03A0F5DDB3200124155 /* SceneCombiner.cpp */; };
394 745FF8F2113ECB080020C31B /* ScenePreprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB03C0F5DDB3200124155 /* ScenePreprocessor.cpp */; };
395 745FF8F3113ECB080020C31B /* SortByPTypeProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0430F5DDB4600124155 /* SortByPTypeProcess.cpp */; };
396 745FF8F4113ECB080020C31B /* FindDegenerates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0480F5DDB6100124155 /* FindDegenerates.cpp */; };
397 745FF8F5113ECB080020C31B /* ComputeUVMappingProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB04D0F5DDB8D00124155 /* ComputeUVMappingProcess.cpp */; };
398 745FF8F6113ECB080020C31B /* StandardShapes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0520F5DDBA800124155 /* StandardShapes.cpp */; };
399 745FF8F7113ECB080020C31B /* FindInstancesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0570F5DDBBF00124155 /* FindInstancesProcess.cpp */; };
400 745FF8F8113ECB080020C31B /* RemoveVCProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB05B0F5DDBCB00124155 /* RemoveVCProcess.cpp */; };
401 745FF8F9113ECB080020C31B /* FindInvalidDataProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB05F0F5DDBE600124155 /* FindInvalidDataProcess.cpp */; };
402 745FF8FA113ECB080020C31B /* SkeletonMeshBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0650F5DDC0700124155 /* SkeletonMeshBuilder.cpp */; };
4031153 745FF8FC113ECB080020C31B /* B3DImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0880F5DDE0700124155 /* B3DImporter.cpp */; };
4041154 745FF923113ECC660020C31B /* 3DSHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A880E4B716800207D74 /* 3DSHelper.h */; };
4051155 745FF924113ECC660020C31B /* 3DSLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A8A0E4B716800207D74 /* 3DSLoader.h */; };
4061156 745FF925113ECC660020C31B /* ASELoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A8F0E4B716800207D74 /* ASELoader.h */; };
4071157 745FF926113ECC660020C31B /* ASEParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A910E4B716800207D74 /* ASEParser.h */; };
408 745FF927113ECC660020C31B /* BaseImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A940E4B716800207D74 /* BaseImporter.h */; };
409 745FF928113ECC660020C31B /* BaseProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A950E4B716800207D74 /* BaseProcess.h */; };
410 745FF929113ECC660020C31B /* ByteSwap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A960E4B716800207D74 /* ByteSwap.h */; };
411 745FF92A113ECC660020C31B /* CalcTangentsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A980E4B716800207D74 /* CalcTangentsProcess.h */; };
412 745FF92B113ECC660020C31B /* ConvertToLHProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9A0E4B716800207D74 /* ConvertToLHProcess.h */; };
413 745FF92C113ECC660020C31B /* DefaultIOStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9C0E4B716800207D74 /* DefaultIOStream.h */; };
414 745FF92D113ECC660020C31B /* DefaultIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9E0E4B716800207D74 /* DefaultIOSystem.h */; };
415 745FF92F113ECC660020C31B /* fast_atof.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA30E4B716800207D74 /* fast_atof.h */; };
416 745FF930113ECC660020C31B /* FileLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA40E4B716800207D74 /* FileLogStream.h */; };
417 745FF931113ECC660020C31B /* GenFaceNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA60E4B716800207D74 /* GenFaceNormalsProcess.h */; };
418 745FF932113ECC660020C31B /* GenVertexNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA80E4B716800207D74 /* GenVertexNormalsProcess.h */; };
4191158 745FF933113ECC660020C31B /* HalfLifeFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA90E4B716800207D74 /* HalfLifeFileData.h */; };
4201159 745FF934113ECC660020C31B /* HMPLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AAC0E4B716800207D74 /* HMPLoader.h */; };
421 745FF935113ECC660020C31B /* ImproveCacheLocality.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AAF0E4B716800207D74 /* ImproveCacheLocality.h */; };
422 745FF936113ECC660020C31B /* JoinVerticesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB10E4B716800207D74 /* JoinVerticesProcess.h */; };
423 745FF937113ECC660020C31B /* LimitBoneWeightsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB50E4B716800207D74 /* LimitBoneWeightsProcess.h */; };
424 745FF938113ECC660020C31B /* MaterialSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB70E4B716800207D74 /* MaterialSystem.h */; };
4251160 745FF939113ECC660020C31B /* MD2FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB80E4B716800207D74 /* MD2FileData.h */; };
4261161 745FF93A113ECC660020C31B /* MD2Loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABA0E4B716800207D74 /* MD2Loader.h */; };
4271162 745FF93B113ECC660020C31B /* MD2NormalTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABB0E4B716800207D74 /* MD2NormalTable.h */; };
4321167 745FF940113ECC660020C31B /* MDLDefaultColorMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC60E4B716800207D74 /* MDLDefaultColorMap.h */; };
4331168 745FF941113ECC660020C31B /* MDLFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC70E4B716800207D74 /* MDLFileData.h */; };
4341169 745FF942113ECC660020C31B /* MDLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC90E4B716800207D74 /* MDLLoader.h */; };
435 745FF943113ECC660020C31B /* ObjFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACB0E4B716800207D74 /* ObjFileData.h */; };
436 745FF944113ECC660020C31B /* ObjFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACD0E4B716800207D74 /* ObjFileImporter.h */; };
437 745FF945113ECC660020C31B /* ObjFileMtlImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACF0E4B716800207D74 /* ObjFileMtlImporter.h */; };
438 745FF946113ECC660020C31B /* ObjFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD10E4B716800207D74 /* ObjFileParser.h */; };
439 745FF947113ECC660020C31B /* ObjTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD20E4B716800207D74 /* ObjTools.h */; };
440 745FF948113ECC660020C31B /* ParsingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD30E4B716800207D74 /* ParsingUtils.h */; };
4411170 745FF949113ECC660020C31B /* PlyLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD50E4B716800207D74 /* PlyLoader.h */; };
4421171 745FF94A113ECC660020C31B /* PlyParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD70E4B716800207D74 /* PlyParser.h */; };
443 745FF94B113ECC660020C31B /* PretransformVertices.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD90E4B716800207D74 /* PretransformVertices.h */; };
444 745FF94C113ECC660020C31B /* qnan.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADA0E4B716800207D74 /* qnan.h */; };
445 745FF94D113ECC660020C31B /* RemoveComments.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADC0E4B716800207D74 /* RemoveComments.h */; };
446 745FF94E113ECC660020C31B /* RemoveRedundantMaterials.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADE0E4B716800207D74 /* RemoveRedundantMaterials.h */; };
4471172 745FF94F113ECC660020C31B /* SMDLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE30E4B716800207D74 /* SMDLoader.h */; };
448 745FF950113ECC660020C31B /* SpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE50E4B716800207D74 /* SpatialSort.h */; };
449 745FF951113ECC660020C31B /* SplitLargeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE70E4B716800207D74 /* SplitLargeMeshes.h */; };
450 745FF952113ECC660020C31B /* STLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE90E4B716800207D74 /* STLLoader.h */; };
451 745FF953113ECC660020C31B /* StringComparison.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEA0E4B716800207D74 /* StringComparison.h */; };
452 745FF954113ECC660020C31B /* TextureTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEC0E4B716800207D74 /* TextureTransform.h */; };
453 745FF955113ECC660020C31B /* TriangulateProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEE0E4B716800207D74 /* TriangulateProcess.h */; };
454 745FF956113ECC660020C31B /* ValidateDataStructure.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF00E4B716800207D74 /* ValidateDataStructure.h */; };
455 745FF957113ECC660020C31B /* VertexTriangleAdjacency.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF20E4B716800207D74 /* VertexTriangleAdjacency.h */; };
456 745FF958113ECC660020C31B /* Win32DebugLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF30E4B716800207D74 /* Win32DebugLogStream.h */; };
4571173 745FF959113ECC660020C31B /* XFileHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF40E4B716800207D74 /* XFileHelper.h */; };
4581174 745FF95A113ECC660020C31B /* XFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF60E4B716800207D74 /* XFileImporter.h */; };
4591175 745FF95B113ECC660020C31B /* XFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF80E4B716800207D74 /* XFileParser.h */; };
4601176 745FF95E113ECC660020C31B /* MDCFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AB0E50D67A00606590 /* MDCFileData.h */; };
4611177 745FF95F113ECC660020C31B /* MDCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AD0E50D67A00606590 /* MDCLoader.h */; };
4621178 745FF960113ECC660020C31B /* MDCNormalTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AE0E50D67A00606590 /* MDCNormalTable.h */; };
463 745FF961113ECC660020C31B /* FixNormalsStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B40E50D69D00606590 /* FixNormalsStep.h */; };
4641179 745FF962113ECC660020C31B /* LWOFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B70E50D6DB00606590 /* LWOFileData.h */; };
4651180 745FF963113ECC660020C31B /* LWOLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B90E50D6DB00606590 /* LWOLoader.h */; };
4661181 745FF964113ECC660020C31B /* HMPFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3C50E50D77900606590 /* HMPFileData.h */; };
467 745FF966113ECC660020C31B /* IFF.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3C90E50D7CC00606590 /* IFF.h */; };
468 745FF967113ECC660020C31B /* Hash.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3CB0E50D7FF00606590 /* Hash.h */; };
4691182 745FF96C113ECC660020C31B /* ACLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFD10F5DD87000124155 /* ACLoader.h */; };
4701183 745FF96D113ECC660020C31B /* IRRLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDA0F5DD90800124155 /* IRRLoader.h */; };
4711184 745FF96E113ECC660020C31B /* IRRMeshLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDC0F5DD90800124155 /* IRRMeshLoader.h */; };
4721185 745FF96F113ECC660020C31B /* IRRShared.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDE0F5DD90800124155 /* IRRShared.h */; };
473 745FF970113ECC660020C31B /* ColladaHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFE80F5DD93600124155 /* ColladaHelper.h */; };
474 745FF971113ECC660020C31B /* ColladaLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFEA0F5DD93600124155 /* ColladaLoader.h */; };
475 745FF972113ECC660020C31B /* ColladaParser.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFEC0F5DD93600124155 /* ColladaParser.h */; };
4761186 745FF973113ECC660020C31B /* NFFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFF50F5DD96100124155 /* NFFLoader.h */; };
477 745FF974113ECC660020C31B /* SGSpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFFB0F5DD9A000124155 /* SGSpatialSort.h */; };
4781187 745FF975113ECC660020C31B /* Q3DLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0070F5DD9DD00124155 /* Q3DLoader.h */; };
4791188 745FF976113ECC660020C31B /* BVHLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB00C0F5DD9F400124155 /* BVHLoader.h */; };
4801189 745FF977113ECC660020C31B /* OFFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0130F5DDA1400124155 /* OFFLoader.h */; };
4821191 745FF979113ECC660020C31B /* DXFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0210F5DDA5700124155 /* DXFLoader.h */; };
4831192 745FF97A113ECC660020C31B /* TerragenLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB02F0F5DDAB500124155 /* TerragenLoader.h */; };
4841193 745FF97B113ECC660020C31B /* irrXMLWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0360F5DDB1B00124155 /* irrXMLWrapper.h */; };
485 745FF97C113ECC660020C31B /* ScenePreprocessor.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0390F5DDB3200124155 /* ScenePreprocessor.h */; };
486 745FF97D113ECC660020C31B /* SceneCombiner.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB03B0F5DDB3200124155 /* SceneCombiner.h */; };
487 745FF97E113ECC660020C31B /* SortByPTypeProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0420F5DDB4600124155 /* SortByPTypeProcess.h */; };
488 745FF97F113ECC660020C31B /* FindDegenerates.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0470F5DDB6100124155 /* FindDegenerates.h */; };
489 745FF980113ECC660020C31B /* ComputeUVMappingProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB04C0F5DDB8D00124155 /* ComputeUVMappingProcess.h */; };
490 745FF981113ECC660020C31B /* StandardShapes.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0510F5DDBA800124155 /* StandardShapes.h */; };
491 745FF982113ECC660020C31B /* FindInstancesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0560F5DDBBF00124155 /* FindInstancesProcess.h */; };
492 745FF983113ECC660020C31B /* RemoveVCProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB05A0F5DDBCB00124155 /* RemoveVCProcess.h */; };
493 745FF984113ECC660020C31B /* FindInvalidDataProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0600F5DDBE600124155 /* FindInvalidDataProcess.h */; };
494 745FF985113ECC660020C31B /* SkeletonMeshBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0640F5DDC0700124155 /* SkeletonMeshBuilder.h */; };
495 745FF986113ECC660020C31B /* SmoothingGroups.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0690F5DDC1E00124155 /* SmoothingGroups.h */; };
4961194 745FF98D113ECC660020C31B /* B3DImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0870F5DDE0700124155 /* B3DImporter.h */; };
497 745FF991113ECC660020C31B /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F90BB06D0F5DDCFC00124155 /* libz.dylib */; };
4981195 745FF993113ECC660020C31B /* 3DSConverter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A860E4B716800207D74 /* 3DSConverter.cpp */; };
4991196 745FF994113ECC660020C31B /* 3DSLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A890E4B716800207D74 /* 3DSLoader.cpp */; };
5001197 745FF996113ECC660020C31B /* ASELoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A8E0E4B716800207D74 /* ASELoader.cpp */; };
5011198 745FF997113ECC660020C31B /* ASEParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A900E4B716800207D74 /* ASEParser.cpp */; };
502 745FF998113ECC660020C31B /* Assimp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A920E4B716800207D74 /* Assimp.cpp */; };
503 745FF999113ECC660020C31B /* BaseImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A930E4B716800207D74 /* BaseImporter.cpp */; };
504 745FF99A113ECC660020C31B /* CalcTangentsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A970E4B716800207D74 /* CalcTangentsProcess.cpp */; };
505 745FF99B113ECC660020C31B /* ConvertToLHProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A990E4B716800207D74 /* ConvertToLHProcess.cpp */; };
506 745FF99C113ECC660020C31B /* DefaultIOStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9B0E4B716800207D74 /* DefaultIOStream.cpp */; };
507 745FF99D113ECC660020C31B /* DefaultIOSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9D0E4B716800207D74 /* DefaultIOSystem.cpp */; };
508 745FF99E113ECC660020C31B /* DefaultLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9F0E4B716800207D74 /* DefaultLogger.cpp */; };
509 745FF9A0113ECC660020C31B /* GenFaceNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AA50E4B716800207D74 /* GenFaceNormalsProcess.cpp */; };
510 745FF9A1113ECC660020C31B /* GenVertexNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AA70E4B716800207D74 /* GenVertexNormalsProcess.cpp */; };
5111199 745FF9A2113ECC660020C31B /* HMPLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAB0E4B716800207D74 /* HMPLoader.cpp */; };
512 745FF9A3113ECC660020C31B /* Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAD0E4B716800207D74 /* Importer.cpp */; };
513 745FF9A4113ECC660020C31B /* ImproveCacheLocality.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAE0E4B716800207D74 /* ImproveCacheLocality.cpp */; };
514 745FF9A5113ECC660020C31B /* JoinVerticesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB00E4B716800207D74 /* JoinVerticesProcess.cpp */; };
515 745FF9A6113ECC660020C31B /* LimitBoneWeightsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB40E4B716800207D74 /* LimitBoneWeightsProcess.cpp */; };
516 745FF9A7113ECC660020C31B /* MaterialSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB60E4B716800207D74 /* MaterialSystem.cpp */; };
5171200 745FF9A8113ECC660020C31B /* MD2Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB90E4B716800207D74 /* MD2Loader.cpp */; };
5181201 745FF9A9113ECC660020C31B /* MD3Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ABD0E4B716800207D74 /* MD3Loader.cpp */; };
5191202 745FF9AA113ECC660020C31B /* MD5Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC20E4B716800207D74 /* MD5Loader.cpp */; };
5201203 745FF9AB113ECC660020C31B /* MD5Parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC40E4B716800207D74 /* MD5Parser.cpp */; };
5211204 745FF9AC113ECC660020C31B /* MDLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC80E4B716800207D74 /* MDLLoader.cpp */; };
5221205 745FF9AD113ECC660020C31B /* MDLMaterialLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACA0E4B716800207D74 /* MDLMaterialLoader.cpp */; };
523 745FF9AE113ECC660020C31B /* ObjFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACC0E4B716800207D74 /* ObjFileImporter.cpp */; };
524 745FF9AF113ECC660020C31B /* ObjFileMtlImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACE0E4B716800207D74 /* ObjFileMtlImporter.cpp */; };
525 745FF9B0113ECC660020C31B /* ObjFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD00E4B716800207D74 /* ObjFileParser.cpp */; };
5261206 745FF9B1113ECC660020C31B /* PlyLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD40E4B716800207D74 /* PlyLoader.cpp */; };
5271207 745FF9B2113ECC660020C31B /* PlyParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD60E4B716800207D74 /* PlyParser.cpp */; };
528 745FF9B3113ECC660020C31B /* PretransformVertices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD80E4B716800207D74 /* PretransformVertices.cpp */; };
529 745FF9B4113ECC660020C31B /* RemoveComments.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ADB0E4B716800207D74 /* RemoveComments.cpp */; };
530 745FF9B5113ECC660020C31B /* RemoveRedundantMaterials.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ADD0E4B716800207D74 /* RemoveRedundantMaterials.cpp */; };
5311208 745FF9B6113ECC660020C31B /* SMDLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE20E4B716800207D74 /* SMDLoader.cpp */; };
532 745FF9B7113ECC660020C31B /* SpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE40E4B716800207D74 /* SpatialSort.cpp */; };
533 745FF9B8113ECC660020C31B /* SplitLargeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE60E4B716800207D74 /* SplitLargeMeshes.cpp */; };
534 745FF9B9113ECC660020C31B /* STLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE80E4B716800207D74 /* STLLoader.cpp */; };
535 745FF9BA113ECC660020C31B /* TextureTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AEB0E4B716800207D74 /* TextureTransform.cpp */; };
536 745FF9BB113ECC660020C31B /* TriangulateProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AED0E4B716800207D74 /* TriangulateProcess.cpp */; };
537 745FF9BC113ECC660020C31B /* ValidateDataStructure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AEF0E4B716800207D74 /* ValidateDataStructure.cpp */; };
538 745FF9BD113ECC660020C31B /* VertexTriangleAdjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF10E4B716800207D74 /* VertexTriangleAdjacency.cpp */; };
5391209 745FF9BE113ECC660020C31B /* XFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF50E4B716800207D74 /* XFileImporter.cpp */; };
5401210 745FF9BF113ECC660020C31B /* XFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF70E4B716800207D74 /* XFileParser.cpp */; };
5411211 745FF9C0113ECC660020C31B /* MDCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3AC0E50D67A00606590 /* MDCLoader.cpp */; };
542 745FF9C1113ECC660020C31B /* FixNormalsStep.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3B30E50D69D00606590 /* FixNormalsStep.cpp */; };
5431212 745FF9C2113ECC660020C31B /* LWOLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3B80E50D6DB00606590 /* LWOLoader.cpp */; };
544 745FF9C3113ECC660020C31B /* BaseProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3C30E50D74500606590 /* BaseProcess.cpp */; };
5451213 745FF9C4113ECC660020C31B /* LWOMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A7DC0E53715F00606590 /* LWOMaterial.cpp */; };
5461214 745FF9C5113ECC660020C31B /* ACLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFD00F5DD87000124155 /* ACLoader.cpp */; };
5471215 745FF9C6113ECC660020C31B /* IRRLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFD90F5DD90800124155 /* IRRLoader.cpp */; };
5481216 745FF9C7113ECC660020C31B /* IRRMeshLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFDB0F5DD90800124155 /* IRRMeshLoader.cpp */; };
5491217 745FF9C8113ECC660020C31B /* IRRShared.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFDD0F5DD90800124155 /* IRRShared.cpp */; };
550 745FF9C9113ECC660020C31B /* ColladaLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFE90F5DD93600124155 /* ColladaLoader.cpp */; };
551 745FF9CA113ECC660020C31B /* ColladaParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFEB0F5DD93600124155 /* ColladaParser.cpp */; };
5521218 745FF9CB113ECC660020C31B /* NFFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFF60F5DD96100124155 /* NFFLoader.cpp */; };
553 745FF9CC113ECC660020C31B /* SGSpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFFC0F5DD9A000124155 /* SGSpatialSort.cpp */; };
5541219 745FF9CD113ECC660020C31B /* Q3DLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0060F5DD9DD00124155 /* Q3DLoader.cpp */; };
5551220 745FF9CE113ECC660020C31B /* BVHLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB00D0F5DD9F400124155 /* BVHLoader.cpp */; };
5561221 745FF9CF113ECC660020C31B /* OFFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0140F5DDA1400124155 /* OFFLoader.cpp */; };
5581223 745FF9D1113ECC660020C31B /* DXFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0220F5DDA5700124155 /* DXFLoader.cpp */; };
5591224 745FF9D2113ECC660020C31B /* LWOBLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0270F5DDA9200124155 /* LWOBLoader.cpp */; };
5601225 745FF9D3113ECC660020C31B /* TerragenLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0300F5DDAB500124155 /* TerragenLoader.cpp */; };
561 745FF9D4113ECC660020C31B /* SceneCombiner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB03A0F5DDB3200124155 /* SceneCombiner.cpp */; };
562 745FF9D5113ECC660020C31B /* ScenePreprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB03C0F5DDB3200124155 /* ScenePreprocessor.cpp */; };
563 745FF9D6113ECC660020C31B /* SortByPTypeProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0430F5DDB4600124155 /* SortByPTypeProcess.cpp */; };
564 745FF9D7113ECC660020C31B /* FindDegenerates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0480F5DDB6100124155 /* FindDegenerates.cpp */; };
565 745FF9D8113ECC660020C31B /* ComputeUVMappingProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB04D0F5DDB8D00124155 /* ComputeUVMappingProcess.cpp */; };
566 745FF9D9113ECC660020C31B /* StandardShapes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0520F5DDBA800124155 /* StandardShapes.cpp */; };
567 745FF9DA113ECC660020C31B /* FindInstancesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0570F5DDBBF00124155 /* FindInstancesProcess.cpp */; };
568 745FF9DB113ECC660020C31B /* RemoveVCProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB05B0F5DDBCB00124155 /* RemoveVCProcess.cpp */; };
569 745FF9DC113ECC660020C31B /* FindInvalidDataProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB05F0F5DDBE600124155 /* FindInvalidDataProcess.cpp */; };
570 745FF9DD113ECC660020C31B /* SkeletonMeshBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0650F5DDC0700124155 /* SkeletonMeshBuilder.cpp */; };
5711226 745FF9DF113ECC660020C31B /* B3DImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0880F5DDE0700124155 /* B3DImporter.cpp */; };
5721227 74C9BB5111ACBB1000AF885C /* BlenderDNA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB4911ACBB1000AF885C /* BlenderDNA.cpp */; };
5731228 74C9BB5211ACBB1000AF885C /* BlenderDNA.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB4A11ACBB1000AF885C /* BlenderDNA.h */; };
5971252 74C9BB6A11ACBB1000AF885C /* BlenderScene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB4E11ACBB1000AF885C /* BlenderScene.cpp */; };
5981253 74C9BB6B11ACBB1000AF885C /* BlenderScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB4F11ACBB1000AF885C /* BlenderScene.h */; };
5991254 74C9BB6C11ACBB1000AF885C /* BlenderSceneGen.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB5011ACBB1000AF885C /* BlenderSceneGen.h */; };
600 74C9BB7211ACBB3600AF885C /* pointer_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB6F11ACBB3600AF885C /* pointer_cast.hpp */; };
601 74C9BB7311ACBB3600AF885C /* shared_array.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB7011ACBB3600AF885C /* shared_array.hpp */; };
602 74C9BB7411ACBB3600AF885C /* shared_ptr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB7111ACBB3600AF885C /* shared_ptr.hpp */; };
603 74C9BB7511ACBB3600AF885C /* pointer_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB6F11ACBB3600AF885C /* pointer_cast.hpp */; };
604 74C9BB7611ACBB3600AF885C /* shared_array.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB7011ACBB3600AF885C /* shared_array.hpp */; };
605 74C9BB7711ACBB3600AF885C /* shared_ptr.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB7111ACBB3600AF885C /* shared_ptr.hpp */; };
606 74C9BB7E11ACBB7800AF885C /* MakeVerboseFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB7C11ACBB7800AF885C /* MakeVerboseFormat.cpp */; };
607 74C9BB7F11ACBB7800AF885C /* MakeVerboseFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB7D11ACBB7800AF885C /* MakeVerboseFormat.h */; };
608 74C9BB8011ACBB7800AF885C /* MakeVerboseFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB7C11ACBB7800AF885C /* MakeVerboseFormat.cpp */; };
609 74C9BB8111ACBB7800AF885C /* MakeVerboseFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB7D11ACBB7800AF885C /* MakeVerboseFormat.h */; };
610 74C9BB8211ACBB7800AF885C /* MakeVerboseFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB7C11ACBB7800AF885C /* MakeVerboseFormat.cpp */; };
611 74C9BB8311ACBB7800AF885C /* MakeVerboseFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB7D11ACBB7800AF885C /* MakeVerboseFormat.h */; };
612 74C9BB8411ACBB7800AF885C /* MakeVerboseFormat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB7C11ACBB7800AF885C /* MakeVerboseFormat.cpp */; };
613 74C9BB8511ACBB7800AF885C /* MakeVerboseFormat.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB7D11ACBB7800AF885C /* MakeVerboseFormat.h */; };
6141255 74C9BB8811ACBB9900AF885C /* AssimpPCH.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB8611ACBB9900AF885C /* AssimpPCH.cpp */; };
6151256 74C9BB8911ACBB9900AF885C /* AssimpPCH.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB8711ACBB9900AF885C /* AssimpPCH.h */; };
6161257 74C9BB8A11ACBB9900AF885C /* AssimpPCH.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB8611ACBB9900AF885C /* AssimpPCH.cpp */; };
6351276 74C9BBB511ACBC2600AF885C /* revision.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBB311ACBC2600AF885C /* revision.h */; };
6361277 74C9BBB611ACBC2600AF885C /* revision.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBB311ACBC2600AF885C /* revision.h */; };
6371278 74C9BBB711ACBC2600AF885C /* revision.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBB311ACBC2600AF885C /* revision.h */; };
638 74C9BBBF11ACBC6C00AF885C /* Exceptional.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBB11ACBC6C00AF885C /* Exceptional.h */; };
639 74C9BBC011ACBC6C00AF885C /* LineSplitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBC11ACBC6C00AF885C /* LineSplitter.h */; };
640 74C9BBC111ACBC6C00AF885C /* MD4FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBD11ACBC6C00AF885C /* MD4FileData.h */; };
641 74C9BBC211ACBC6C00AF885C /* TinyFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBE11ACBC6C00AF885C /* TinyFormatter.h */; };
642 74C9BBC311ACBC6C00AF885C /* Exceptional.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBB11ACBC6C00AF885C /* Exceptional.h */; };
643 74C9BBC411ACBC6C00AF885C /* LineSplitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBC11ACBC6C00AF885C /* LineSplitter.h */; };
644 74C9BBC511ACBC6C00AF885C /* MD4FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBD11ACBC6C00AF885C /* MD4FileData.h */; };
645 74C9BBC611ACBC6C00AF885C /* TinyFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBE11ACBC6C00AF885C /* TinyFormatter.h */; };
646 74C9BBC711ACBC6C00AF885C /* Exceptional.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBB11ACBC6C00AF885C /* Exceptional.h */; };
647 74C9BBC811ACBC6C00AF885C /* LineSplitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBC11ACBC6C00AF885C /* LineSplitter.h */; };
648 74C9BBC911ACBC6C00AF885C /* MD4FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBD11ACBC6C00AF885C /* MD4FileData.h */; };
649 74C9BBCA11ACBC6C00AF885C /* TinyFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBE11ACBC6C00AF885C /* TinyFormatter.h */; };
650 74C9BBCB11ACBC6C00AF885C /* Exceptional.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBB11ACBC6C00AF885C /* Exceptional.h */; };
651 74C9BBCC11ACBC6C00AF885C /* LineSplitter.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBC11ACBC6C00AF885C /* LineSplitter.h */; };
652 74C9BBCD11ACBC6C00AF885C /* MD4FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBD11ACBC6C00AF885C /* MD4FileData.h */; };
653 74C9BBCE11ACBC6C00AF885C /* TinyFormatter.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBBE11ACBC6C00AF885C /* TinyFormatter.h */; };
6541279 8E7ABBA8127E0F1A00512ED1 /* Q3BSPFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA1127E0F1A00512ED1 /* Q3BSPFileData.h */; };
6551280 8E7ABBA9127E0F1A00512ED1 /* Q3BSPFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBA2127E0F1A00512ED1 /* Q3BSPFileImporter.cpp */; };
6561281 8E7ABBAA127E0F1A00512ED1 /* Q3BSPFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA3127E0F1A00512ED1 /* Q3BSPFileImporter.h */; };
6991324 8E7ABBDA127E0F3800512ED1 /* BlenderIntermediate.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBCE127E0F3800512ED1 /* BlenderIntermediate.h */; };
7001325 8E7ABBDB127E0F3800512ED1 /* BlenderModifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBCF127E0F3800512ED1 /* BlenderModifier.cpp */; };
7011326 8E7ABBDC127E0F3800512ED1 /* BlenderModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBD0127E0F3800512ED1 /* BlenderModifier.h */; };
702 8E7ABBE3127E0FA400512ED1 /* assbin_chunks.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBDF127E0FA400512ED1 /* assbin_chunks.h */; };
703 8E7ABBE4127E0FA400512ED1 /* DefaultProgressHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE0127E0FA400512ED1 /* DefaultProgressHandler.h */; };
704 8E7ABBE5127E0FA400512ED1 /* Profiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE1127E0FA400512ED1 /* Profiler.h */; };
705 8E7ABBE6127E0FA400512ED1 /* pstdint.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE2127E0FA400512ED1 /* pstdint.h */; };
706 8E7ABBE7127E0FA400512ED1 /* assbin_chunks.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBDF127E0FA400512ED1 /* assbin_chunks.h */; };
707 8E7ABBE8127E0FA400512ED1 /* DefaultProgressHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE0127E0FA400512ED1 /* DefaultProgressHandler.h */; };
708 8E7ABBE9127E0FA400512ED1 /* Profiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE1127E0FA400512ED1 /* Profiler.h */; };
709 8E7ABBEA127E0FA400512ED1 /* pstdint.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE2127E0FA400512ED1 /* pstdint.h */; };
710 8E7ABBEB127E0FA400512ED1 /* assbin_chunks.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBDF127E0FA400512ED1 /* assbin_chunks.h */; };
711 8E7ABBEC127E0FA400512ED1 /* DefaultProgressHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE0127E0FA400512ED1 /* DefaultProgressHandler.h */; };
712 8E7ABBED127E0FA400512ED1 /* Profiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE1127E0FA400512ED1 /* Profiler.h */; };
713 8E7ABBEE127E0FA400512ED1 /* pstdint.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE2127E0FA400512ED1 /* pstdint.h */; };
714 8E7ABBEF127E0FA400512ED1 /* assbin_chunks.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBDF127E0FA400512ED1 /* assbin_chunks.h */; };
715 8E7ABBF0127E0FA400512ED1 /* DefaultProgressHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE0127E0FA400512ED1 /* DefaultProgressHandler.h */; };
716 8E7ABBF1127E0FA400512ED1 /* Profiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE1127E0FA400512ED1 /* Profiler.h */; };
717 8E7ABBF2127E0FA400512ED1 /* pstdint.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBE2127E0FA400512ED1 /* pstdint.h */; };
7181327 8E8DEE5C127E2B78005EF64D /* ConvertUTF.c in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE4B127E2B78005EF64D /* ConvertUTF.c */; };
7191328 8E8DEE5D127E2B78005EF64D /* ConvertUTF.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE4C127E2B78005EF64D /* ConvertUTF.h */; };
7201329 8E8DEE5E127E2B78005EF64D /* CXMLReaderImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE4F127E2B78005EF64D /* CXMLReaderImpl.h */; };
7711380 8E8DEE91127E2B78005EF64D /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE59127E2B78005EF64D /* ioapi.h */; };
7721381 8E8DEE92127E2B78005EF64D /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE5A127E2B78005EF64D /* unzip.c */; };
7731382 8E8DEE93127E2B78005EF64D /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE5B127E2B78005EF64D /* unzip.h */; };
774 F90BAFBA0F5DD68F00124155 /* libboost_date_time-xgcc40-mt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F90BAFB90F5DD68F00124155 /* libboost_date_time-xgcc40-mt.a */; };
775 F90BAFBC0F5DD6A800124155 /* libboost_thread-xgcc40-mt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F90BAFBB0F5DD6A800124155 /* libboost_thread-xgcc40-mt.a */; };
1383 B91974D1163AEA54009C397B /* 3DSHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A880E4B716800207D74 /* 3DSHelper.h */; };
1384 B91974D2163AEA54009C397B /* 3DSLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A8A0E4B716800207D74 /* 3DSLoader.h */; };
1385 B91974D3163AEA54009C397B /* ASELoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A8F0E4B716800207D74 /* ASELoader.h */; };
1386 B91974D4163AEA54009C397B /* ASEParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A910E4B716800207D74 /* ASEParser.h */; };
1387 B91974E0163AEA54009C397B /* HalfLifeFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA90E4B716800207D74 /* HalfLifeFileData.h */; };
1388 B91974E1163AEA54009C397B /* HMPLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AAC0E4B716800207D74 /* HMPLoader.h */; };
1389 B91974E6163AEA54009C397B /* MD2FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB80E4B716800207D74 /* MD2FileData.h */; };
1390 B91974E7163AEA54009C397B /* MD2Loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABA0E4B716800207D74 /* MD2Loader.h */; };
1391 B91974E8163AEA54009C397B /* MD2NormalTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABB0E4B716800207D74 /* MD2NormalTable.h */; };
1392 B91974E9163AEA54009C397B /* MD3FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABC0E4B716800207D74 /* MD3FileData.h */; };
1393 B91974EA163AEA54009C397B /* MD3Loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABE0E4B716800207D74 /* MD3Loader.h */; };
1394 B91974EB163AEA54009C397B /* MD5Loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC30E4B716800207D74 /* MD5Loader.h */; };
1395 B91974EC163AEA54009C397B /* MD5Parser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC50E4B716800207D74 /* MD5Parser.h */; };
1396 B91974ED163AEA54009C397B /* MDLDefaultColorMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC60E4B716800207D74 /* MDLDefaultColorMap.h */; };
1397 B91974EE163AEA54009C397B /* MDLFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC70E4B716800207D74 /* MDLFileData.h */; };
1398 B91974EF163AEA54009C397B /* MDLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC90E4B716800207D74 /* MDLLoader.h */; };
1399 B91974F6163AEA54009C397B /* PlyLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD50E4B716800207D74 /* PlyLoader.h */; };
1400 B91974F7163AEA54009C397B /* PlyParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD70E4B716800207D74 /* PlyParser.h */; };
1401 B91974FC163AEA54009C397B /* SMDLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE30E4B716800207D74 /* SMDLoader.h */; };
1402 B9197506163AEA54009C397B /* XFileHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF40E4B716800207D74 /* XFileHelper.h */; };
1403 B9197507163AEA54009C397B /* XFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF60E4B716800207D74 /* XFileImporter.h */; };
1404 B9197508163AEA54009C397B /* XFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF80E4B716800207D74 /* XFileParser.h */; };
1405 B9197509163AEA54009C397B /* MDCFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AB0E50D67A00606590 /* MDCFileData.h */; };
1406 B919750A163AEA54009C397B /* MDCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AD0E50D67A00606590 /* MDCLoader.h */; };
1407 B919750B163AEA54009C397B /* MDCNormalTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AE0E50D67A00606590 /* MDCNormalTable.h */; };
1408 B919750D163AEA54009C397B /* LWOFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B70E50D6DB00606590 /* LWOFileData.h */; };
1409 B919750E163AEA54009C397B /* LWOLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B90E50D6DB00606590 /* LWOLoader.h */; };
1410 B919750F163AEA54009C397B /* HMPFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3C50E50D77900606590 /* HMPFileData.h */; };
1411 B9197512163AEA54009C397B /* ACLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFD10F5DD87000124155 /* ACLoader.h */; };
1412 B9197513163AEA54009C397B /* IRRLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDA0F5DD90800124155 /* IRRLoader.h */; };
1413 B9197514163AEA54009C397B /* IRRMeshLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDC0F5DD90800124155 /* IRRMeshLoader.h */; };
1414 B9197515163AEA54009C397B /* IRRShared.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDE0F5DD90800124155 /* IRRShared.h */; };
1415 B9197519163AEA54009C397B /* NFFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFF50F5DD96100124155 /* NFFLoader.h */; };
1416 B919751B163AEA54009C397B /* Q3DLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0070F5DD9DD00124155 /* Q3DLoader.h */; };
1417 B919751C163AEA54009C397B /* BVHLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB00C0F5DD9F400124155 /* BVHLoader.h */; };
1418 B919751D163AEA54009C397B /* OFFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0130F5DDA1400124155 /* OFFLoader.h */; };
1419 B919751E163AEA54009C397B /* RawLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB01B0F5DDA4400124155 /* RawLoader.h */; };
1420 B919751F163AEA54009C397B /* DXFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0210F5DDA5700124155 /* DXFLoader.h */; };
1421 B9197520163AEA54009C397B /* TerragenLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB02F0F5DDAB500124155 /* TerragenLoader.h */; };
1422 B9197521163AEA54009C397B /* irrXMLWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0360F5DDB1B00124155 /* irrXMLWrapper.h */; };
1423 B919752D163AEA54009C397B /* B3DImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0870F5DDE0700124155 /* B3DImporter.h */; };
1424 B9197535163AEA54009C397B /* CSMLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B14F11416D5E00BCD793 /* CSMLoader.h */; };
1425 B9197536163AEA54009C397B /* LWSLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B15A11416DDD00BCD793 /* LWSLoader.h */; };
1426 B9197537163AEA54009C397B /* LWOAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B16411416DF400BCD793 /* LWOAnimation.h */; };
1427 B9197538163AEA54009C397B /* MS3DLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B17111416E2500BCD793 /* MS3DLoader.h */; };
1428 B9197539163AEA54009C397B /* UnrealLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 7411B18C11416EBC00BCD793 /* UnrealLoader.h */; };
1429 B9197545163AEA54009C397B /* BlenderDNA.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB4A11ACBB1000AF885C /* BlenderDNA.h */; };
1430 B9197546163AEA54009C397B /* BlenderLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB4D11ACBB1000AF885C /* BlenderLoader.h */; };
1431 B9197547163AEA54009C397B /* BlenderScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB4F11ACBB1000AF885C /* BlenderScene.h */; };
1432 B9197548163AEA54009C397B /* BlenderSceneGen.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB5011ACBB1000AF885C /* BlenderSceneGen.h */; };
1433 B919754D163AEA54009C397B /* AssimpPCH.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB8711ACBB9900AF885C /* AssimpPCH.h */; };
1434 B919754E163AEA54009C397B /* COBLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB9411ACBBBC00AF885C /* COBLoader.h */; };
1435 B919754F163AEA54009C397B /* COBScene.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BB9511ACBBBC00AF885C /* COBScene.h */; };
1436 B9197550163AEA54009C397B /* revision.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C9BBB311ACBC2600AF885C /* revision.h */; };
1437 B9197555163AEA54009C397B /* Q3BSPFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA1127E0F1A00512ED1 /* Q3BSPFileData.h */; };
1438 B9197556163AEA54009C397B /* Q3BSPFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA3127E0F1A00512ED1 /* Q3BSPFileImporter.h */; };
1439 B9197557163AEA54009C397B /* Q3BSPFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA5127E0F1A00512ED1 /* Q3BSPFileParser.h */; };
1440 B9197558163AEA54009C397B /* Q3BSPZipArchive.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBA7127E0F1A00512ED1 /* Q3BSPZipArchive.h */; };
1441 B9197559163AEA54009C397B /* NDOLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBC5127E0F2A00512ED1 /* NDOLoader.h */; };
1442 B919755A163AEA54009C397B /* BlenderIntermediate.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBCE127E0F3800512ED1 /* BlenderIntermediate.h */; };
1443 B919755B163AEA54009C397B /* BlenderModifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E7ABBD0127E0F3800512ED1 /* BlenderModifier.h */; };
1444 B9197560163AEA54009C397B /* ConvertUTF.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE4C127E2B78005EF64D /* ConvertUTF.h */; };
1445 B9197561163AEA54009C397B /* CXMLReaderImpl.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE4F127E2B78005EF64D /* CXMLReaderImpl.h */; };
1446 B9197562163AEA54009C397B /* heapsort.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE50127E2B78005EF64D /* heapsort.h */; };
1447 B9197563163AEA54009C397B /* irrArray.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE51127E2B78005EF64D /* irrArray.h */; };
1448 B9197564163AEA54009C397B /* irrString.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE52127E2B78005EF64D /* irrString.h */; };
1449 B9197565163AEA54009C397B /* irrTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE53127E2B78005EF64D /* irrTypes.h */; };
1450 B9197566163AEA54009C397B /* irrXML.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE55127E2B78005EF64D /* irrXML.h */; };
1451 B9197567163AEA54009C397B /* crypt.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE57127E2B78005EF64D /* crypt.h */; };
1452 B9197568163AEA54009C397B /* ioapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE59127E2B78005EF64D /* ioapi.h */; };
1453 B9197569163AEA54009C397B /* unzip.h in Headers */ = {isa = PBXBuildFile; fileRef = 8E8DEE5B127E2B78005EF64D /* unzip.h */; };
1454 B919756A163AEA54009C397B /* anim.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B751543268400E63FFE /* anim.h */; settings = {ATTRIBUTES = (Public, ); }; };
1455 B919756B163AEA54009C397B /* camera.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B771543268400E63FFE /* camera.h */; settings = {ATTRIBUTES = (Public, ); }; };
1456 B919756C163AEA54009C397B /* cexport.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B781543268400E63FFE /* cexport.h */; settings = {ATTRIBUTES = (Public, ); }; };
1457 B919756D163AEA54009C397B /* cfileio.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B791543268400E63FFE /* cfileio.h */; settings = {ATTRIBUTES = (Public, ); }; };
1458 B919756E163AEA54009C397B /* cimport.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7A1543268400E63FFE /* cimport.h */; settings = {ATTRIBUTES = (Public, ); }; };
1459 B919756F163AEA54009C397B /* color4.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7B1543268400E63FFE /* color4.h */; settings = {ATTRIBUTES = (Public, ); }; };
1460 B9197570163AEA54009C397B /* poppack1.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7E1543268400E63FFE /* poppack1.h */; settings = {ATTRIBUTES = (Public, ); }; };
1461 B9197571163AEA54009C397B /* pushpack1.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B7F1543268400E63FFE /* pushpack1.h */; settings = {ATTRIBUTES = (Public, ); }; };
1462 B9197572163AEA54009C397B /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B801543268400E63FFE /* config.h */; settings = {ATTRIBUTES = (Public, ); }; };
1463 B9197573163AEA54009C397B /* DefaultLogger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B811543268400E63FFE /* DefaultLogger.hpp */; settings = {ATTRIBUTES = (Public, ); }; };
1464 B9197574163AEA54009C397B /* defs.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B821543268400E63FFE /* defs.h */; settings = {ATTRIBUTES = (Public, ); }; };
1465 B9197575163AEA54009C397B /* Exporter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B831543268400E63FFE /* Exporter.hpp */; settings = {ATTRIBUTES = (Public, ); }; };
1466 B9197576163AEA54009C397B /* Importer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B841543268400E63FFE /* Importer.hpp */; settings = {ATTRIBUTES = (Public, ); }; };
1467 B9197577163AEA54009C397B /* importerdesc.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B851543268400E63FFE /* importerdesc.h */; settings = {ATTRIBUTES = (Public, ); }; };
1468 B9197578163AEA54009C397B /* IOStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B861543268400E63FFE /* IOStream.hpp */; settings = {ATTRIBUTES = (Public, ); }; };
1469 B9197579163AEA54009C397B /* IOSystem.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B871543268400E63FFE /* IOSystem.hpp */; settings = {ATTRIBUTES = (Public, ); }; };
1470 B919757A163AEA54009C397B /* light.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B881543268400E63FFE /* light.h */; settings = {ATTRIBUTES = (Public, ); }; };
1471 B919757B163AEA54009C397B /* Logger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B891543268400E63FFE /* Logger.hpp */; settings = {ATTRIBUTES = (Public, ); }; };
1472 B919757C163AEA54009C397B /* LogStream.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8A1543268400E63FFE /* LogStream.hpp */; settings = {ATTRIBUTES = (Public, ); }; };
1473 B919757D163AEA54009C397B /* material.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8B1543268400E63FFE /* material.h */; settings = {ATTRIBUTES = (Public, ); }; };
1474 B919757E163AEA54009C397B /* matrix3x3.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8D1543268400E63FFE /* matrix3x3.h */; settings = {ATTRIBUTES = (Public, ); }; };
1475 B919757F163AEA54009C397B /* matrix4x4.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B8F1543268400E63FFE /* matrix4x4.h */; settings = {ATTRIBUTES = (Public, ); }; };
1476 B9197580163AEA54009C397B /* mesh.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B911543268400E63FFE /* mesh.h */; settings = {ATTRIBUTES = (Public, ); }; };
1477 B9197581163AEA54009C397B /* NullLogger.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B921543268400E63FFE /* NullLogger.hpp */; settings = {ATTRIBUTES = (Public, ); }; };
1478 B9197582163AEA54009C397B /* postprocess.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B931543268400E63FFE /* postprocess.h */; settings = {ATTRIBUTES = (Public, ); }; };
1479 B9197583163AEA54009C397B /* ProgressHandler.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B941543268400E63FFE /* ProgressHandler.hpp */; settings = {ATTRIBUTES = (Public, ); }; };
1480 B9197584163AEA54009C397B /* quaternion.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B951543268400E63FFE /* quaternion.h */; settings = {ATTRIBUTES = (Public, ); }; };
1481 B9197585163AEA54009C397B /* scene.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B971543268400E63FFE /* scene.h */; settings = {ATTRIBUTES = (Public, ); }; };
1482 B9197586163AEA54009C397B /* texture.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B981543268400E63FFE /* texture.h */; settings = {ATTRIBUTES = (Public, ); }; };
1483 B9197587163AEA54009C397B /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B991543268400E63FFE /* types.h */; settings = {ATTRIBUTES = (Public, ); }; };
1484 B9197588163AEA54009C397B /* vector2.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B9A1543268400E63FFE /* vector2.h */; settings = {ATTRIBUTES = (Public, ); }; };
1485 B9197589163AEA54009C397B /* vector3.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B9C1543268400E63FFE /* vector3.h */; settings = {ATTRIBUTES = (Public, ); }; };
1486 B919758A163AEA54009C397B /* version.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B9E1543268400E63FFE /* version.h */; settings = {ATTRIBUTES = (Public, ); }; };
1487 B919758B163AEA54009C397B /* OgreImporter.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8C36154328B600E63FFE /* OgreImporter.hpp */; };
1488 B919758C163AEA54009C397B /* OgreXmlHelper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8C3A154328B600E63FFE /* OgreXmlHelper.hpp */; };
1489 B9197596163AEA54009C397B /* PlyExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F3115436269000682F3 /* PlyExporter.h */; };
1490 B919759C163AEA54009C397B /* crc32.h in Headers */ = {isa = PBXBuildFile; fileRef = F960704B154366AB004D91DD /* crc32.h */; };
1491 B919759D163AEA54009C397B /* deflate.h in Headers */ = {isa = PBXBuildFile; fileRef = F960704D154366AB004D91DD /* deflate.h */; };
1492 B919759E163AEA54009C397B /* inffast.h in Headers */ = {isa = PBXBuildFile; fileRef = F960704F154366AB004D91DD /* inffast.h */; };
1493 B919759F163AEA54009C397B /* inffixed.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607050154366AB004D91DD /* inffixed.h */; };
1494 B91975A0163AEA54009C397B /* inflate.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607052154366AB004D91DD /* inflate.h */; };
1495 B91975A1163AEA54009C397B /* inftrees.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607054154366AB004D91DD /* inftrees.h */; };
1496 B91975A2163AEA54009C397B /* trees.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607057154366AB004D91DD /* trees.h */; };
1497 B91975A3163AEA54009C397B /* zconf.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607058154366AB004D91DD /* zconf.h */; };
1498 B91975A4163AEA54009C397B /* zconf.in.h in Headers */ = {isa = PBXBuildFile; fileRef = F9607059154366AB004D91DD /* zconf.in.h */; };
1499 B91975A5163AEA54009C397B /* zlib.h in Headers */ = {isa = PBXBuildFile; fileRef = F960705A154366AB004D91DD /* zlib.h */; };
1500 B91975A6163AEA54009C397B /* zutil.h in Headers */ = {isa = PBXBuildFile; fileRef = F960705C154366AB004D91DD /* zutil.h */; };
1501 B91975A7163AEA54009C397B /* XGLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070B6154366ED004D91DD /* XGLLoader.h */; };
1502 B91975A8163AEA54009C397B /* clipper.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F96070C61543673B004D91DD /* clipper.hpp */; };
1503 B91975A9163AEA54009C397B /* shapes.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D31543675E004D91DD /* shapes.h */; };
1504 B91975AA163AEA54009C397B /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D41543675E004D91DD /* utils.h */; };
1505 B91975AB163AEA54009C397B /* poly2tri.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D51543675E004D91DD /* poly2tri.h */; };
1506 B91975AC163AEA54009C397B /* advancing_front.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070D81543675E004D91DD /* advancing_front.h */; };
1507 B91975AD163AEA54009C397B /* cdt.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070DA1543675E004D91DD /* cdt.h */; };
1508 B91975AE163AEA54009C397B /* sweep.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070DC1543675E004D91DD /* sweep.h */; };
1509 B91975AF163AEA54009C397B /* sweep_context.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070DE1543675E004D91DD /* sweep_context.h */; };
1510 B91975B0163AEA54009C397B /* ai_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA03515439DB3009EB9DD /* ai_assert.h */; settings = {ATTRIBUTES = (Public, ); }; };
1511 B91975B7163AEA54009C397B /* 3DSConverter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A860E4B716800207D74 /* 3DSConverter.cpp */; };
1512 B91975B8163AEA54009C397B /* 3DSLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A890E4B716800207D74 /* 3DSLoader.cpp */; };
1513 B91975B9163AEA54009C397B /* ASELoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A8E0E4B716800207D74 /* ASELoader.cpp */; };
1514 B91975BA163AEA54009C397B /* ASEParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A900E4B716800207D74 /* ASEParser.cpp */; };
1515 B91975C4163AEA54009C397B /* HMPLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAB0E4B716800207D74 /* HMPLoader.cpp */; };
1516 B91975CA163AEA54009C397B /* MD2Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB90E4B716800207D74 /* MD2Loader.cpp */; };
1517 B91975CB163AEA54009C397B /* MD3Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ABD0E4B716800207D74 /* MD3Loader.cpp */; };
1518 B91975CC163AEA54009C397B /* MD5Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC20E4B716800207D74 /* MD5Loader.cpp */; };
1519 B91975CD163AEA54009C397B /* MD5Parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC40E4B716800207D74 /* MD5Parser.cpp */; };
1520 B91975CE163AEA54009C397B /* MDLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC80E4B716800207D74 /* MDLLoader.cpp */; };
1521 B91975CF163AEA54009C397B /* MDLMaterialLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACA0E4B716800207D74 /* MDLMaterialLoader.cpp */; };
1522 B91975D3163AEA54009C397B /* PlyLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD40E4B716800207D74 /* PlyLoader.cpp */; };
1523 B91975D4163AEA54009C397B /* PlyParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD60E4B716800207D74 /* PlyParser.cpp */; };
1524 B91975D8163AEA54009C397B /* SMDLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE20E4B716800207D74 /* SMDLoader.cpp */; };
1525 B91975E0163AEA54009C397B /* XFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF50E4B716800207D74 /* XFileImporter.cpp */; };
1526 B91975E1163AEA54009C397B /* XFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF70E4B716800207D74 /* XFileParser.cpp */; };
1527 B91975E2163AEA54009C397B /* MDCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3AC0E50D67A00606590 /* MDCLoader.cpp */; };
1528 B91975E4163AEA54009C397B /* LWOLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3B80E50D6DB00606590 /* LWOLoader.cpp */; };
1529 B91975E6163AEA54009C397B /* LWOMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A7DC0E53715F00606590 /* LWOMaterial.cpp */; };
1530 B91975E7163AEA54009C397B /* ACLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFD00F5DD87000124155 /* ACLoader.cpp */; };
1531 B91975E8163AEA54009C397B /* IRRLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFD90F5DD90800124155 /* IRRLoader.cpp */; };
1532 B91975E9163AEA54009C397B /* IRRMeshLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFDB0F5DD90800124155 /* IRRMeshLoader.cpp */; };
1533 B91975EA163AEA54009C397B /* IRRShared.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFDD0F5DD90800124155 /* IRRShared.cpp */; };
1534 B91975ED163AEA54009C397B /* NFFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFF60F5DD96100124155 /* NFFLoader.cpp */; };
1535 B91975EF163AEA54009C397B /* Q3DLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0060F5DD9DD00124155 /* Q3DLoader.cpp */; };
1536 B91975F0163AEA54009C397B /* BVHLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB00D0F5DD9F400124155 /* BVHLoader.cpp */; };
1537 B91975F1163AEA54009C397B /* OFFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0140F5DDA1400124155 /* OFFLoader.cpp */; };
1538 B91975F2163AEA54009C397B /* RawLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB01C0F5DDA4400124155 /* RawLoader.cpp */; };
1539 B91975F3163AEA54009C397B /* DXFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0220F5DDA5700124155 /* DXFLoader.cpp */; };
1540 B91975F4163AEA54009C397B /* LWOBLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0270F5DDA9200124155 /* LWOBLoader.cpp */; };
1541 B91975F5163AEA54009C397B /* TerragenLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0300F5DDAB500124155 /* TerragenLoader.cpp */; };
1542 B9197600163AEA54009C397B /* B3DImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0880F5DDE0700124155 /* B3DImporter.cpp */; };
1543 B9197601163AEA54009C397B /* CSMLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B14E11416D5E00BCD793 /* CSMLoader.cpp */; };
1544 B9197602163AEA54009C397B /* LWSLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B15911416DDD00BCD793 /* LWSLoader.cpp */; };
1545 B9197603163AEA54009C397B /* LWOAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B16311416DF400BCD793 /* LWOAnimation.cpp */; };
1546 B9197604163AEA54009C397B /* MS3DLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B17011416E2500BCD793 /* MS3DLoader.cpp */; };
1547 B9197605163AEA54009C397B /* UnrealLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7411B18B11416EBC00BCD793 /* UnrealLoader.cpp */; };
1548 B919760A163AEA54009C397B /* BlenderDNA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB4911ACBB1000AF885C /* BlenderDNA.cpp */; };
1549 B919760B163AEA54009C397B /* BlenderLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB4C11ACBB1000AF885C /* BlenderLoader.cpp */; };
1550 B919760C163AEA54009C397B /* BlenderScene.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB4E11ACBB1000AF885C /* BlenderScene.cpp */; };
1551 B919760E163AEA54009C397B /* AssimpPCH.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB8611ACBB9900AF885C /* AssimpPCH.cpp */; };
1552 B919760F163AEA54009C397B /* COBLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 74C9BB9311ACBBBC00AF885C /* COBLoader.cpp */; };
1553 B9197610163AEA54009C397B /* Q3BSPFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBA2127E0F1A00512ED1 /* Q3BSPFileImporter.cpp */; };
1554 B9197611163AEA54009C397B /* Q3BSPFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBA4127E0F1A00512ED1 /* Q3BSPFileParser.cpp */; };
1555 B9197612163AEA54009C397B /* Q3BSPZipArchive.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBA6127E0F1A00512ED1 /* Q3BSPZipArchive.cpp */; };
1556 B9197613163AEA54009C397B /* NDOLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBC4127E0F2A00512ED1 /* NDOLoader.cpp */; };
1557 B9197614163AEA54009C397B /* BlenderModifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E7ABBCF127E0F3800512ED1 /* BlenderModifier.cpp */; };
1558 B9197615163AEA54009C397B /* ConvertUTF.c in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE4B127E2B78005EF64D /* ConvertUTF.c */; };
1559 B9197616163AEA54009C397B /* irrXML.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE54127E2B78005EF64D /* irrXML.cpp */; };
1560 B9197617163AEA54009C397B /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE58127E2B78005EF64D /* ioapi.c */; };
1561 B9197618163AEA54009C397B /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 8E8DEE5A127E2B78005EF64D /* unzip.c */; };
1562 B9197619163AEA54009C397B /* OgreImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C35154328B600E63FFE /* OgreImporter.cpp */; };
1563 B919761A163AEA54009C397B /* OgreMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C37154328B600E63FFE /* OgreMaterial.cpp */; };
1564 B919761B163AEA54009C397B /* OgreMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C38154328B600E63FFE /* OgreMesh.cpp */; };
1565 B919761C163AEA54009C397B /* OgreSkeleton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9BA8C39154328B600E63FFE /* OgreSkeleton.cpp */; };
1566 B9197620163AEA54009C397B /* PlyExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F3015436269000682F3 /* PlyExporter.cpp */; };
1567 B9197625163AEA54009C397B /* adler32.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607047154366AB004D91DD /* adler32.c */; };
1568 B9197626163AEA54009C397B /* compress.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607049154366AB004D91DD /* compress.c */; };
1569 B9197627163AEA54009C397B /* crc32.c in Sources */ = {isa = PBXBuildFile; fileRef = F960704A154366AB004D91DD /* crc32.c */; };
1570 B9197628163AEA54009C397B /* deflate.c in Sources */ = {isa = PBXBuildFile; fileRef = F960704C154366AB004D91DD /* deflate.c */; };
1571 B9197629163AEA54009C397B /* inffast.c in Sources */ = {isa = PBXBuildFile; fileRef = F960704E154366AB004D91DD /* inffast.c */; };
1572 B919762A163AEA54009C397B /* inflate.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607051154366AB004D91DD /* inflate.c */; };
1573 B919762B163AEA54009C397B /* inftrees.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607053154366AB004D91DD /* inftrees.c */; };
1574 B919762C163AEA54009C397B /* trees.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607056154366AB004D91DD /* trees.c */; };
1575 B919762D163AEA54009C397B /* zutil.c in Sources */ = {isa = PBXBuildFile; fileRef = F960705B154366AB004D91DD /* zutil.c */; };
1576 B919762E163AEA54009C397B /* XGLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F96070B5154366ED004D91DD /* XGLLoader.cpp */; };
1577 B919762F163AEA54009C397B /* clipper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F96070C51543673B004D91DD /* clipper.cpp */; };
1578 B9197630163AEA54009C397B /* shapes.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070D21543675E004D91DD /* shapes.cc */; };
1579 B9197631163AEA54009C397B /* advancing_front.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070D71543675E004D91DD /* advancing_front.cc */; };
1580 B9197632163AEA54009C397B /* cdt.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070D91543675E004D91DD /* cdt.cc */; };
1581 B9197633163AEA54009C397B /* sweep.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070DB1543675E004D91DD /* sweep.cc */; };
1582 B9197634163AEA54009C397B /* sweep_context.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070DD1543675E004D91DD /* sweep_context.cc */; };
7761583 F90BAFD20F5DD87000124155 /* ACLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFD00F5DD87000124155 /* ACLoader.cpp */; };
7771584 F90BAFD30F5DD87000124155 /* ACLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFD10F5DD87000124155 /* ACLoader.h */; };
7781585 F90BAFDF0F5DD90800124155 /* IRRLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFD90F5DD90800124155 /* IRRLoader.cpp */; };
7811588 F90BAFE20F5DD90800124155 /* IRRMeshLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDC0F5DD90800124155 /* IRRMeshLoader.h */; };
7821589 F90BAFE30F5DD90800124155 /* IRRShared.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFDD0F5DD90800124155 /* IRRShared.cpp */; };
7831590 F90BAFE40F5DD90800124155 /* IRRShared.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDE0F5DD90800124155 /* IRRShared.h */; };
784 F90BAFED0F5DD93600124155 /* ColladaHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFE80F5DD93600124155 /* ColladaHelper.h */; };
785 F90BAFEE0F5DD93600124155 /* ColladaLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFE90F5DD93600124155 /* ColladaLoader.cpp */; };
786 F90BAFEF0F5DD93600124155 /* ColladaLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFEA0F5DD93600124155 /* ColladaLoader.h */; };
787 F90BAFF00F5DD93600124155 /* ColladaParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFEB0F5DD93600124155 /* ColladaParser.cpp */; };
788 F90BAFF10F5DD93600124155 /* ColladaParser.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFEC0F5DD93600124155 /* ColladaParser.h */; };
7891591 F90BAFF70F5DD96100124155 /* NFFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFF50F5DD96100124155 /* NFFLoader.h */; };
7901592 F90BAFF80F5DD96100124155 /* NFFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFF60F5DD96100124155 /* NFFLoader.cpp */; };
791 F90BAFFD0F5DD9A000124155 /* SGSpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFFB0F5DD9A000124155 /* SGSpatialSort.h */; };
792 F90BAFFE0F5DD9A000124155 /* SGSpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFFC0F5DD9A000124155 /* SGSpatialSort.cpp */; };
7931593 F90BB0080F5DD9DD00124155 /* Q3DLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0060F5DD9DD00124155 /* Q3DLoader.cpp */; };
7941594 F90BB0090F5DD9DD00124155 /* Q3DLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0070F5DD9DD00124155 /* Q3DLoader.h */; };
7951595 F90BB00E0F5DD9F400124155 /* BVHLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB00C0F5DD9F400124155 /* BVHLoader.h */; };
8041604 F90BB0310F5DDAB500124155 /* TerragenLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB02F0F5DDAB500124155 /* TerragenLoader.h */; };
8051605 F90BB0320F5DDAB500124155 /* TerragenLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0300F5DDAB500124155 /* TerragenLoader.cpp */; };
8061606 F90BB0370F5DDB1B00124155 /* irrXMLWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0360F5DDB1B00124155 /* irrXMLWrapper.h */; };
807 F90BB03D0F5DDB3200124155 /* ScenePreprocessor.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0390F5DDB3200124155 /* ScenePreprocessor.h */; };
808 F90BB03E0F5DDB3200124155 /* SceneCombiner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB03A0F5DDB3200124155 /* SceneCombiner.cpp */; };
809 F90BB03F0F5DDB3200124155 /* SceneCombiner.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB03B0F5DDB3200124155 /* SceneCombiner.h */; };
810 F90BB0400F5DDB3200124155 /* ScenePreprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB03C0F5DDB3200124155 /* ScenePreprocessor.cpp */; };
811 F90BB0440F5DDB4600124155 /* SortByPTypeProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0420F5DDB4600124155 /* SortByPTypeProcess.h */; };
812 F90BB0450F5DDB4600124155 /* SortByPTypeProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0430F5DDB4600124155 /* SortByPTypeProcess.cpp */; };
813 F90BB0490F5DDB6100124155 /* FindDegenerates.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0470F5DDB6100124155 /* FindDegenerates.h */; };
814 F90BB04A0F5DDB6100124155 /* FindDegenerates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0480F5DDB6100124155 /* FindDegenerates.cpp */; };
815 F90BB04E0F5DDB8D00124155 /* ComputeUVMappingProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB04C0F5DDB8D00124155 /* ComputeUVMappingProcess.h */; };
816 F90BB04F0F5DDB8D00124155 /* ComputeUVMappingProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB04D0F5DDB8D00124155 /* ComputeUVMappingProcess.cpp */; };
817 F90BB0530F5DDBA800124155 /* StandardShapes.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0510F5DDBA800124155 /* StandardShapes.h */; };
818 F90BB0540F5DDBA800124155 /* StandardShapes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0520F5DDBA800124155 /* StandardShapes.cpp */; };
819 F90BB0580F5DDBBF00124155 /* FindInstancesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0560F5DDBBF00124155 /* FindInstancesProcess.h */; };
820 F90BB0590F5DDBBF00124155 /* FindInstancesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0570F5DDBBF00124155 /* FindInstancesProcess.cpp */; };
821 F90BB05C0F5DDBCB00124155 /* RemoveVCProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB05A0F5DDBCB00124155 /* RemoveVCProcess.h */; };
822 F90BB05D0F5DDBCB00124155 /* RemoveVCProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB05B0F5DDBCB00124155 /* RemoveVCProcess.cpp */; };
823 F90BB0610F5DDBE600124155 /* FindInvalidDataProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB05F0F5DDBE600124155 /* FindInvalidDataProcess.cpp */; };
824 F90BB0620F5DDBE600124155 /* FindInvalidDataProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0600F5DDBE600124155 /* FindInvalidDataProcess.h */; };
825 F90BB0660F5DDC0700124155 /* SkeletonMeshBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0640F5DDC0700124155 /* SkeletonMeshBuilder.h */; };
826 F90BB0670F5DDC0700124155 /* SkeletonMeshBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0650F5DDC0700124155 /* SkeletonMeshBuilder.cpp */; };
827 F90BB06B0F5DDC1E00124155 /* SmoothingGroups.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0690F5DDC1E00124155 /* SmoothingGroups.h */; };
828 F90BB06E0F5DDCFC00124155 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F90BB06D0F5DDCFC00124155 /* libz.dylib */; };
8291607 F90BB0890F5DDE0700124155 /* B3DImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0870F5DDE0700124155 /* B3DImporter.h */; };
8301608 F90BB08A0F5DDE0700124155 /* B3DImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0880F5DDE0700124155 /* B3DImporter.cpp */; };
831 F9606FF3154364E5004D91DD /* ProcessHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9606FF2154364E5004D91DD /* ProcessHelper.cpp */; };
832 F9606FF4154364E5004D91DD /* ProcessHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9606FF2154364E5004D91DD /* ProcessHelper.cpp */; };
833 F9606FF5154364E5004D91DD /* ProcessHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9606FF2154364E5004D91DD /* ProcessHelper.cpp */; };
834 F9606FF6154364E5004D91DD /* ProcessHelper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F9606FF2154364E5004D91DD /* ProcessHelper.cpp */; };
8351609 F960705D154366AB004D91DD /* adler32.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607047154366AB004D91DD /* adler32.c */; };
8361610 F960705E154366AB004D91DD /* compress.c in Sources */ = {isa = PBXBuildFile; fileRef = F9607049154366AB004D91DD /* compress.c */; };
8371611 F960705F154366AB004D91DD /* crc32.c in Sources */ = {isa = PBXBuildFile; fileRef = F960704A154366AB004D91DD /* crc32.c */; };
9761750 F960710C1543675E004D91DD /* sweep.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070DC1543675E004D91DD /* sweep.h */; };
9771751 F960710D1543675E004D91DD /* sweep_context.cc in Sources */ = {isa = PBXBuildFile; fileRef = F96070DD1543675E004D91DD /* sweep_context.cc */; };
9781752 F960710E1543675E004D91DD /* sweep_context.h in Headers */ = {isa = PBXBuildFile; fileRef = F96070DE1543675E004D91DD /* sweep_context.h */; };
979 F962E8880F5DE6B4009A5495 /* libboost_date_time-xgcc40-mt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F90BAFB90F5DD68F00124155 /* libboost_date_time-xgcc40-mt.a */; };
980 F962E8890F5DE6B4009A5495 /* libboost_thread-xgcc40-mt.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F90BAFBB0F5DD6A800124155 /* libboost_thread-xgcc40-mt.a */; };
981 F962E88A0F5DE6B4009A5495 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = F90BB06D0F5DDCFC00124155 /* libz.dylib */; };
9821753 F962E88B0F5DE6C8009A5495 /* 3DSConverter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A860E4B716800207D74 /* 3DSConverter.cpp */; };
9831754 F962E88C0F5DE6C8009A5495 /* 3DSLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A890E4B716800207D74 /* 3DSLoader.cpp */; };
9841755 F962E88E0F5DE6C8009A5495 /* ASELoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A8E0E4B716800207D74 /* ASELoader.cpp */; };
9851756 F962E88F0F5DE6C8009A5495 /* ASEParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A900E4B716800207D74 /* ASEParser.cpp */; };
986 F962E8900F5DE6C8009A5495 /* Assimp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A920E4B716800207D74 /* Assimp.cpp */; };
987 F962E8910F5DE6C8009A5495 /* BaseImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A930E4B716800207D74 /* BaseImporter.cpp */; };
988 F962E8920F5DE6C8009A5495 /* CalcTangentsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A970E4B716800207D74 /* CalcTangentsProcess.cpp */; };
989 F962E8930F5DE6C8009A5495 /* ConvertToLHProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A990E4B716800207D74 /* ConvertToLHProcess.cpp */; };
990 F962E8940F5DE6C8009A5495 /* DefaultIOStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9B0E4B716800207D74 /* DefaultIOStream.cpp */; };
991 F962E8950F5DE6C8009A5495 /* DefaultIOSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9D0E4B716800207D74 /* DefaultIOSystem.cpp */; };
992 F962E8960F5DE6C8009A5495 /* DefaultLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45A9F0E4B716800207D74 /* DefaultLogger.cpp */; };
993 F962E8980F5DE6C8009A5495 /* GenFaceNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AA50E4B716800207D74 /* GenFaceNormalsProcess.cpp */; };
994 F962E8990F5DE6C8009A5495 /* GenVertexNormalsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AA70E4B716800207D74 /* GenVertexNormalsProcess.cpp */; };
9951757 F962E89A0F5DE6C8009A5495 /* HMPLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAB0E4B716800207D74 /* HMPLoader.cpp */; };
996 F962E89B0F5DE6C8009A5495 /* Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAD0E4B716800207D74 /* Importer.cpp */; };
997 F962E89C0F5DE6C8009A5495 /* ImproveCacheLocality.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AAE0E4B716800207D74 /* ImproveCacheLocality.cpp */; };
998 F962E89D0F5DE6C8009A5495 /* JoinVerticesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB00E4B716800207D74 /* JoinVerticesProcess.cpp */; };
999 F962E89E0F5DE6C8009A5495 /* LimitBoneWeightsProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB40E4B716800207D74 /* LimitBoneWeightsProcess.cpp */; };
1000 F962E89F0F5DE6C8009A5495 /* MaterialSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB60E4B716800207D74 /* MaterialSystem.cpp */; };
10011758 F962E8A00F5DE6C8009A5495 /* MD2Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AB90E4B716800207D74 /* MD2Loader.cpp */; };
10021759 F962E8A10F5DE6C8009A5495 /* MD3Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ABD0E4B716800207D74 /* MD3Loader.cpp */; };
10031760 F962E8A20F5DE6C8009A5495 /* MD5Loader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC20E4B716800207D74 /* MD5Loader.cpp */; };
10041761 F962E8A30F5DE6C8009A5495 /* MD5Parser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC40E4B716800207D74 /* MD5Parser.cpp */; };
10051762 F962E8A40F5DE6C8009A5495 /* MDLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AC80E4B716800207D74 /* MDLLoader.cpp */; };
10061763 F962E8A50F5DE6C8009A5495 /* MDLMaterialLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACA0E4B716800207D74 /* MDLMaterialLoader.cpp */; };
1007 F962E8A60F5DE6C8009A5495 /* ObjFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACC0E4B716800207D74 /* ObjFileImporter.cpp */; };
1008 F962E8A70F5DE6C8009A5495 /* ObjFileMtlImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ACE0E4B716800207D74 /* ObjFileMtlImporter.cpp */; };
1009 F962E8A80F5DE6C8009A5495 /* ObjFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD00E4B716800207D74 /* ObjFileParser.cpp */; };
10101764 F962E8A90F5DE6C8009A5495 /* PlyLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD40E4B716800207D74 /* PlyLoader.cpp */; };
10111765 F962E8AA0F5DE6C8009A5495 /* PlyParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD60E4B716800207D74 /* PlyParser.cpp */; };
1012 F962E8AB0F5DE6C8009A5495 /* PretransformVertices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AD80E4B716800207D74 /* PretransformVertices.cpp */; };
1013 F962E8AC0F5DE6C8009A5495 /* RemoveComments.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ADB0E4B716800207D74 /* RemoveComments.cpp */; };
1014 F962E8AD0F5DE6C8009A5495 /* RemoveRedundantMaterials.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45ADD0E4B716800207D74 /* RemoveRedundantMaterials.cpp */; };
10151766 F962E8AE0F5DE6C8009A5495 /* SMDLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE20E4B716800207D74 /* SMDLoader.cpp */; };
1016 F962E8AF0F5DE6C8009A5495 /* SpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE40E4B716800207D74 /* SpatialSort.cpp */; };
1017 F962E8B00F5DE6C8009A5495 /* SplitLargeMeshes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE60E4B716800207D74 /* SplitLargeMeshes.cpp */; };
1018 F962E8B10F5DE6C8009A5495 /* STLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AE80E4B716800207D74 /* STLLoader.cpp */; };
1019 F962E8B20F5DE6C8009A5495 /* TextureTransform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AEB0E4B716800207D74 /* TextureTransform.cpp */; };
1020 F962E8B30F5DE6C8009A5495 /* TriangulateProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AED0E4B716800207D74 /* TriangulateProcess.cpp */; };
1021 F962E8B40F5DE6C8009A5495 /* ValidateDataStructure.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AEF0E4B716800207D74 /* ValidateDataStructure.cpp */; };
1022 F962E8B50F5DE6C8009A5495 /* VertexTriangleAdjacency.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF10E4B716800207D74 /* VertexTriangleAdjacency.cpp */; };
10231767 F962E8B60F5DE6C8009A5495 /* XFileImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF50E4B716800207D74 /* XFileImporter.cpp */; };
10241768 F962E8B70F5DE6C8009A5495 /* XFileParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AF45AF70E4B716800207D74 /* XFileParser.cpp */; };
10251769 F962E8B80F5DE6C8009A5495 /* MDCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3AC0E50D67A00606590 /* MDCLoader.cpp */; };
1026 F962E8B90F5DE6C8009A5495 /* FixNormalsStep.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3B30E50D69D00606590 /* FixNormalsStep.cpp */; };
10271770 F962E8BA0F5DE6C8009A5495 /* LWOLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3B80E50D6DB00606590 /* LWOLoader.cpp */; };
1028 F962E8BB0F5DE6C8009A5495 /* BaseProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A3C30E50D74500606590 /* BaseProcess.cpp */; };
10291771 F962E8BC0F5DE6C8009A5495 /* LWOMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3AB8A7DC0E53715F00606590 /* LWOMaterial.cpp */; };
10301772 F962E8BD0F5DE6C8009A5495 /* ACLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFD00F5DD87000124155 /* ACLoader.cpp */; };
10311773 F962E8BE0F5DE6C8009A5495 /* IRRLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFD90F5DD90800124155 /* IRRLoader.cpp */; };
10321774 F962E8BF0F5DE6C8009A5495 /* IRRMeshLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFDB0F5DD90800124155 /* IRRMeshLoader.cpp */; };
10331775 F962E8C00F5DE6C8009A5495 /* IRRShared.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFDD0F5DD90800124155 /* IRRShared.cpp */; };
1034 F962E8C10F5DE6C8009A5495 /* ColladaLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFE90F5DD93600124155 /* ColladaLoader.cpp */; };
1035 F962E8C20F5DE6C8009A5495 /* ColladaParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFEB0F5DD93600124155 /* ColladaParser.cpp */; };
10361776 F962E8C30F5DE6C8009A5495 /* NFFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFF60F5DD96100124155 /* NFFLoader.cpp */; };
1037 F962E8C40F5DE6C8009A5495 /* SGSpatialSort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BAFFC0F5DD9A000124155 /* SGSpatialSort.cpp */; };
10381777 F962E8C50F5DE6C8009A5495 /* Q3DLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0060F5DD9DD00124155 /* Q3DLoader.cpp */; };
10391778 F962E8C60F5DE6C8009A5495 /* BVHLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB00D0F5DD9F400124155 /* BVHLoader.cpp */; };
10401779 F962E8C70F5DE6C8009A5495 /* OFFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0140F5DDA1400124155 /* OFFLoader.cpp */; };
10421781 F962E8C90F5DE6C8009A5495 /* DXFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0220F5DDA5700124155 /* DXFLoader.cpp */; };
10431782 F962E8CA0F5DE6C8009A5495 /* LWOBLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0270F5DDA9200124155 /* LWOBLoader.cpp */; };
10441783 F962E8CB0F5DE6C8009A5495 /* TerragenLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0300F5DDAB500124155 /* TerragenLoader.cpp */; };
1045 F962E8CC0F5DE6C8009A5495 /* SceneCombiner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB03A0F5DDB3200124155 /* SceneCombiner.cpp */; };
1046 F962E8CD0F5DE6C8009A5495 /* ScenePreprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB03C0F5DDB3200124155 /* ScenePreprocessor.cpp */; };
1047 F962E8CE0F5DE6C8009A5495 /* SortByPTypeProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0430F5DDB4600124155 /* SortByPTypeProcess.cpp */; };
1048 F962E8CF0F5DE6C8009A5495 /* FindDegenerates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0480F5DDB6100124155 /* FindDegenerates.cpp */; };
1049 F962E8D00F5DE6C8009A5495 /* ComputeUVMappingProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB04D0F5DDB8D00124155 /* ComputeUVMappingProcess.cpp */; };
1050 F962E8D10F5DE6C8009A5495 /* StandardShapes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0520F5DDBA800124155 /* StandardShapes.cpp */; };
1051 F962E8D20F5DE6C8009A5495 /* FindInstancesProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0570F5DDBBF00124155 /* FindInstancesProcess.cpp */; };
1052 F962E8D30F5DE6C8009A5495 /* RemoveVCProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB05B0F5DDBCB00124155 /* RemoveVCProcess.cpp */; };
1053 F962E8D40F5DE6C8009A5495 /* FindInvalidDataProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB05F0F5DDBE600124155 /* FindInvalidDataProcess.cpp */; };
1054 F962E8D50F5DE6C8009A5495 /* SkeletonMeshBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0650F5DDC0700124155 /* SkeletonMeshBuilder.cpp */; };
10551784 F962E8D70F5DE6C8009A5495 /* B3DImporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F90BB0880F5DDE0700124155 /* B3DImporter.cpp */; };
10561785 F962E8ED0F5DE6E2009A5495 /* 3DSHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A880E4B716800207D74 /* 3DSHelper.h */; };
10571786 F962E8EE0F5DE6E2009A5495 /* 3DSLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A8A0E4B716800207D74 /* 3DSLoader.h */; };
10581787 F962E8EF0F5DE6E2009A5495 /* ASELoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A8F0E4B716800207D74 /* ASELoader.h */; };
10591788 F962E8F00F5DE6E2009A5495 /* ASEParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A910E4B716800207D74 /* ASEParser.h */; };
1060 F962E8F10F5DE6E2009A5495 /* BaseImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A940E4B716800207D74 /* BaseImporter.h */; };
1061 F962E8F20F5DE6E2009A5495 /* BaseProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A950E4B716800207D74 /* BaseProcess.h */; };
1062 F962E8F30F5DE6E2009A5495 /* ByteSwap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A960E4B716800207D74 /* ByteSwap.h */; };
1063 F962E8F40F5DE6E2009A5495 /* CalcTangentsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A980E4B716800207D74 /* CalcTangentsProcess.h */; };
1064 F962E8F50F5DE6E2009A5495 /* ConvertToLHProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9A0E4B716800207D74 /* ConvertToLHProcess.h */; };
1065 F962E8F60F5DE6E2009A5495 /* DefaultIOStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9C0E4B716800207D74 /* DefaultIOStream.h */; };
1066 F962E8F70F5DE6E2009A5495 /* DefaultIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45A9E0E4B716800207D74 /* DefaultIOSystem.h */; };
1067 F962E8F90F5DE6E2009A5495 /* fast_atof.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA30E4B716800207D74 /* fast_atof.h */; };
1068 F962E8FA0F5DE6E2009A5495 /* FileLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA40E4B716800207D74 /* FileLogStream.h */; };
1069 F962E8FB0F5DE6E2009A5495 /* GenFaceNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA60E4B716800207D74 /* GenFaceNormalsProcess.h */; };
1070 F962E8FC0F5DE6E2009A5495 /* GenVertexNormalsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA80E4B716800207D74 /* GenVertexNormalsProcess.h */; };
10711789 F962E8FD0F5DE6E2009A5495 /* HalfLifeFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AA90E4B716800207D74 /* HalfLifeFileData.h */; };
10721790 F962E8FE0F5DE6E2009A5495 /* HMPLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AAC0E4B716800207D74 /* HMPLoader.h */; };
1073 F962E8FF0F5DE6E2009A5495 /* ImproveCacheLocality.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AAF0E4B716800207D74 /* ImproveCacheLocality.h */; };
1074 F962E9000F5DE6E2009A5495 /* JoinVerticesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB10E4B716800207D74 /* JoinVerticesProcess.h */; };
1075 F962E9010F5DE6E2009A5495 /* LimitBoneWeightsProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB50E4B716800207D74 /* LimitBoneWeightsProcess.h */; };
1076 F962E9020F5DE6E2009A5495 /* MaterialSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB70E4B716800207D74 /* MaterialSystem.h */; };
10771791 F962E9030F5DE6E2009A5495 /* MD2FileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AB80E4B716800207D74 /* MD2FileData.h */; };
10781792 F962E9040F5DE6E2009A5495 /* MD2Loader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABA0E4B716800207D74 /* MD2Loader.h */; };
10791793 F962E9050F5DE6E2009A5495 /* MD2NormalTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ABB0E4B716800207D74 /* MD2NormalTable.h */; };
10841798 F962E90A0F5DE6E2009A5495 /* MDLDefaultColorMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC60E4B716800207D74 /* MDLDefaultColorMap.h */; };
10851799 F962E90B0F5DE6E2009A5495 /* MDLFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC70E4B716800207D74 /* MDLFileData.h */; };
10861800 F962E90C0F5DE6E2009A5495 /* MDLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AC90E4B716800207D74 /* MDLLoader.h */; };
1087 F962E90D0F5DE6E2009A5495 /* ObjFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACB0E4B716800207D74 /* ObjFileData.h */; };
1088 F962E90E0F5DE6E2009A5495 /* ObjFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACD0E4B716800207D74 /* ObjFileImporter.h */; };
1089 F962E90F0F5DE6E2009A5495 /* ObjFileMtlImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ACF0E4B716800207D74 /* ObjFileMtlImporter.h */; };
1090 F962E9100F5DE6E2009A5495 /* ObjFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD10E4B716800207D74 /* ObjFileParser.h */; };
1091 F962E9110F5DE6E2009A5495 /* ObjTools.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD20E4B716800207D74 /* ObjTools.h */; };
1092 F962E9120F5DE6E2009A5495 /* ParsingUtils.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD30E4B716800207D74 /* ParsingUtils.h */; };
10931801 F962E9130F5DE6E2009A5495 /* PlyLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD50E4B716800207D74 /* PlyLoader.h */; };
10941802 F962E9140F5DE6E2009A5495 /* PlyParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD70E4B716800207D74 /* PlyParser.h */; };
1095 F962E9150F5DE6E2009A5495 /* PretransformVertices.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AD90E4B716800207D74 /* PretransformVertices.h */; };
1096 F962E9160F5DE6E2009A5495 /* qnan.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADA0E4B716800207D74 /* qnan.h */; };
1097 F962E9170F5DE6E2009A5495 /* RemoveComments.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADC0E4B716800207D74 /* RemoveComments.h */; };
1098 F962E9180F5DE6E2009A5495 /* RemoveRedundantMaterials.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45ADE0E4B716800207D74 /* RemoveRedundantMaterials.h */; };
10991803 F962E9190F5DE6E2009A5495 /* SMDLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE30E4B716800207D74 /* SMDLoader.h */; };
1100 F962E91A0F5DE6E2009A5495 /* SpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE50E4B716800207D74 /* SpatialSort.h */; };
1101 F962E91B0F5DE6E2009A5495 /* SplitLargeMeshes.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE70E4B716800207D74 /* SplitLargeMeshes.h */; };
1102 F962E91C0F5DE6E2009A5495 /* STLLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AE90E4B716800207D74 /* STLLoader.h */; };
1103 F962E91D0F5DE6E2009A5495 /* StringComparison.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEA0E4B716800207D74 /* StringComparison.h */; };
1104 F962E91E0F5DE6E2009A5495 /* TextureTransform.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEC0E4B716800207D74 /* TextureTransform.h */; };
1105 F962E91F0F5DE6E2009A5495 /* TriangulateProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AEE0E4B716800207D74 /* TriangulateProcess.h */; };
1106 F962E9200F5DE6E2009A5495 /* ValidateDataStructure.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF00E4B716800207D74 /* ValidateDataStructure.h */; };
1107 F962E9210F5DE6E2009A5495 /* VertexTriangleAdjacency.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF20E4B716800207D74 /* VertexTriangleAdjacency.h */; };
1108 F962E9220F5DE6E2009A5495 /* Win32DebugLogStream.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF30E4B716800207D74 /* Win32DebugLogStream.h */; };
11091804 F962E9230F5DE6E2009A5495 /* XFileHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF40E4B716800207D74 /* XFileHelper.h */; };
11101805 F962E9240F5DE6E2009A5495 /* XFileImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF60E4B716800207D74 /* XFileImporter.h */; };
11111806 F962E9250F5DE6E2009A5495 /* XFileParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AF45AF80E4B716800207D74 /* XFileParser.h */; };
11121807 F962E9280F5DE6E2009A5495 /* MDCFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AB0E50D67A00606590 /* MDCFileData.h */; };
11131808 F962E9290F5DE6E2009A5495 /* MDCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AD0E50D67A00606590 /* MDCLoader.h */; };
11141809 F962E92A0F5DE6E2009A5495 /* MDCNormalTable.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3AE0E50D67A00606590 /* MDCNormalTable.h */; };
1115 F962E92B0F5DE6E2009A5495 /* FixNormalsStep.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B40E50D69D00606590 /* FixNormalsStep.h */; };
11161810 F962E92C0F5DE6E2009A5495 /* LWOFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B70E50D6DB00606590 /* LWOFileData.h */; };
11171811 F962E92D0F5DE6E2009A5495 /* LWOLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3B90E50D6DB00606590 /* LWOLoader.h */; };
11181812 F962E92E0F5DE6E2009A5495 /* HMPFileData.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3C50E50D77900606590 /* HMPFileData.h */; };
1119 F962E9300F5DE6E2009A5495 /* IFF.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3C90E50D7CC00606590 /* IFF.h */; };
1120 F962E9310F5DE6E2009A5495 /* Hash.h in Headers */ = {isa = PBXBuildFile; fileRef = 3AB8A3CB0E50D7FF00606590 /* Hash.h */; };
11211813 F962E9360F5DE6E2009A5495 /* ACLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFD10F5DD87000124155 /* ACLoader.h */; };
11221814 F962E9370F5DE6E2009A5495 /* IRRLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDA0F5DD90800124155 /* IRRLoader.h */; };
11231815 F962E9380F5DE6E2009A5495 /* IRRMeshLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDC0F5DD90800124155 /* IRRMeshLoader.h */; };
11241816 F962E9390F5DE6E2009A5495 /* IRRShared.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFDE0F5DD90800124155 /* IRRShared.h */; };
1125 F962E93A0F5DE6E2009A5495 /* ColladaHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFE80F5DD93600124155 /* ColladaHelper.h */; };
1126 F962E93B0F5DE6E2009A5495 /* ColladaLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFEA0F5DD93600124155 /* ColladaLoader.h */; };
1127 F962E93C0F5DE6E2009A5495 /* ColladaParser.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFEC0F5DD93600124155 /* ColladaParser.h */; };
11281817 F962E93D0F5DE6E2009A5495 /* NFFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFF50F5DD96100124155 /* NFFLoader.h */; };
1129 F962E93E0F5DE6E2009A5495 /* SGSpatialSort.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BAFFB0F5DD9A000124155 /* SGSpatialSort.h */; };
11301818 F962E93F0F5DE6E2009A5495 /* Q3DLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0070F5DD9DD00124155 /* Q3DLoader.h */; };
11311819 F962E9400F5DE6E2009A5495 /* BVHLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB00C0F5DD9F400124155 /* BVHLoader.h */; };
11321820 F962E9410F5DE6E2009A5495 /* OFFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0130F5DDA1400124155 /* OFFLoader.h */; };
11341822 F962E9430F5DE6E2009A5495 /* DXFLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0210F5DDA5700124155 /* DXFLoader.h */; };
11351823 F962E9440F5DE6E2009A5495 /* TerragenLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB02F0F5DDAB500124155 /* TerragenLoader.h */; };
11361824 F962E9450F5DE6E2009A5495 /* irrXMLWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0360F5DDB1B00124155 /* irrXMLWrapper.h */; };
1137 F962E9460F5DE6E2009A5495 /* ScenePreprocessor.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0390F5DDB3200124155 /* ScenePreprocessor.h */; };
1138 F962E9470F5DE6E2009A5495 /* SceneCombiner.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB03B0F5DDB3200124155 /* SceneCombiner.h */; };
1139 F962E9480F5DE6E2009A5495 /* SortByPTypeProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0420F5DDB4600124155 /* SortByPTypeProcess.h */; };
1140 F962E9490F5DE6E2009A5495 /* FindDegenerates.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0470F5DDB6100124155 /* FindDegenerates.h */; };
1141 F962E94A0F5DE6E2009A5495 /* ComputeUVMappingProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB04C0F5DDB8D00124155 /* ComputeUVMappingProcess.h */; };
1142 F962E94B0F5DE6E2009A5495 /* StandardShapes.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0510F5DDBA800124155 /* StandardShapes.h */; };
1143 F962E94C0F5DE6E2009A5495 /* FindInstancesProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0560F5DDBBF00124155 /* FindInstancesProcess.h */; };
1144 F962E94D0F5DE6E2009A5495 /* RemoveVCProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB05A0F5DDBCB00124155 /* RemoveVCProcess.h */; };
1145 F962E94E0F5DE6E2009A5495 /* FindInvalidDataProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0600F5DDBE600124155 /* FindInvalidDataProcess.h */; };
1146 F962E94F0F5DE6E2009A5495 /* SkeletonMeshBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0640F5DDC0700124155 /* SkeletonMeshBuilder.h */; };
1147 F962E9500F5DE6E2009A5495 /* SmoothingGroups.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0690F5DDC1E00124155 /* SmoothingGroups.h */; };
11481825 F962E9570F5DE6E2009A5495 /* B3DImporter.h in Headers */ = {isa = PBXBuildFile; fileRef = F90BB0870F5DDE0700124155 /* B3DImporter.h */; };
11491826 F97BA03615439DB3009EB9DD /* ai_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA03515439DB3009EB9DD /* ai_assert.h */; };
11501827 F97BA03715439DB3009EB9DD /* ai_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA03515439DB3009EB9DD /* ai_assert.h */; };
11511828 F97BA03815439DB3009EB9DD /* ai_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA03515439DB3009EB9DD /* ai_assert.h */; };
11521829 F97BA03915439DB3009EB9DD /* ai_assert.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA03515439DB3009EB9DD /* ai_assert.h */; };
1153 F97BA07015439FC3009EB9DD /* IFCCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06615439FC3009EB9DD /* IFCCurve.cpp */; };
1154 F97BA07115439FC3009EB9DD /* IFCGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06715439FC3009EB9DD /* IFCGeometry.cpp */; };
1155 F97BA07215439FC3009EB9DD /* IFCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06815439FC3009EB9DD /* IFCLoader.cpp */; };
1156 F97BA07315439FC3009EB9DD /* IFCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06915439FC3009EB9DD /* IFCLoader.h */; };
1157 F97BA07415439FC3009EB9DD /* IFCMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06A15439FC3009EB9DD /* IFCMaterial.cpp */; };
1158 F97BA07515439FC3009EB9DD /* IFCProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06B15439FC3009EB9DD /* IFCProfile.cpp */; };
1159 F97BA07615439FC3009EB9DD /* IFCReaderGen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06C15439FC3009EB9DD /* IFCReaderGen.cpp */; };
1160 F97BA07715439FC3009EB9DD /* IFCReaderGen.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06D15439FC3009EB9DD /* IFCReaderGen.h */; };
1161 F97BA07815439FC3009EB9DD /* IFCUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06E15439FC3009EB9DD /* IFCUtil.cpp */; };
1162 F97BA07915439FC3009EB9DD /* IFCUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06F15439FC3009EB9DD /* IFCUtil.h */; };
1163 F97BA07A15439FC3009EB9DD /* IFCCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06615439FC3009EB9DD /* IFCCurve.cpp */; };
1164 F97BA07B15439FC3009EB9DD /* IFCGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06715439FC3009EB9DD /* IFCGeometry.cpp */; };
1165 F97BA07C15439FC3009EB9DD /* IFCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06815439FC3009EB9DD /* IFCLoader.cpp */; };
1166 F97BA07D15439FC3009EB9DD /* IFCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06915439FC3009EB9DD /* IFCLoader.h */; };
1167 F97BA07E15439FC3009EB9DD /* IFCMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06A15439FC3009EB9DD /* IFCMaterial.cpp */; };
1168 F97BA07F15439FC3009EB9DD /* IFCProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06B15439FC3009EB9DD /* IFCProfile.cpp */; };
1169 F97BA08015439FC3009EB9DD /* IFCReaderGen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06C15439FC3009EB9DD /* IFCReaderGen.cpp */; };
1170 F97BA08115439FC3009EB9DD /* IFCReaderGen.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06D15439FC3009EB9DD /* IFCReaderGen.h */; };
1171 F97BA08215439FC3009EB9DD /* IFCUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06E15439FC3009EB9DD /* IFCUtil.cpp */; };
1172 F97BA08315439FC3009EB9DD /* IFCUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06F15439FC3009EB9DD /* IFCUtil.h */; };
1173 F97BA08415439FC3009EB9DD /* IFCCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06615439FC3009EB9DD /* IFCCurve.cpp */; };
1174 F97BA08515439FC3009EB9DD /* IFCGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06715439FC3009EB9DD /* IFCGeometry.cpp */; };
1175 F97BA08615439FC3009EB9DD /* IFCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06815439FC3009EB9DD /* IFCLoader.cpp */; };
1176 F97BA08715439FC3009EB9DD /* IFCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06915439FC3009EB9DD /* IFCLoader.h */; };
1177 F97BA08815439FC3009EB9DD /* IFCMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06A15439FC3009EB9DD /* IFCMaterial.cpp */; };
1178 F97BA08915439FC3009EB9DD /* IFCProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06B15439FC3009EB9DD /* IFCProfile.cpp */; };
1179 F97BA08A15439FC3009EB9DD /* IFCReaderGen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06C15439FC3009EB9DD /* IFCReaderGen.cpp */; };
1180 F97BA08B15439FC3009EB9DD /* IFCReaderGen.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06D15439FC3009EB9DD /* IFCReaderGen.h */; };
1181 F97BA08C15439FC3009EB9DD /* IFCUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06E15439FC3009EB9DD /* IFCUtil.cpp */; };
1182 F97BA08D15439FC3009EB9DD /* IFCUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06F15439FC3009EB9DD /* IFCUtil.h */; };
1183 F97BA08E15439FC3009EB9DD /* IFCCurve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06615439FC3009EB9DD /* IFCCurve.cpp */; };
1184 F97BA08F15439FC3009EB9DD /* IFCGeometry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06715439FC3009EB9DD /* IFCGeometry.cpp */; };
1185 F97BA09015439FC3009EB9DD /* IFCLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06815439FC3009EB9DD /* IFCLoader.cpp */; };
1186 F97BA09115439FC3009EB9DD /* IFCLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06915439FC3009EB9DD /* IFCLoader.h */; };
1187 F97BA09215439FC3009EB9DD /* IFCMaterial.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06A15439FC3009EB9DD /* IFCMaterial.cpp */; };
1188 F97BA09315439FC3009EB9DD /* IFCProfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06B15439FC3009EB9DD /* IFCProfile.cpp */; };
1189 F97BA09415439FC3009EB9DD /* IFCReaderGen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06C15439FC3009EB9DD /* IFCReaderGen.cpp */; };
1190 F97BA09515439FC3009EB9DD /* IFCReaderGen.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06D15439FC3009EB9DD /* IFCReaderGen.h */; };
1191 F97BA09615439FC3009EB9DD /* IFCUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F97BA06E15439FC3009EB9DD /* IFCUtil.cpp */; };
1192 F97BA09715439FC3009EB9DD /* IFCUtil.h in Headers */ = {isa = PBXBuildFile; fileRef = F97BA06F15439FC3009EB9DD /* IFCUtil.h */; };
1193 F99A9EB415436077000682F3 /* BlobIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EB315436077000682F3 /* BlobIOSystem.h */; };
1194 F99A9EB515436077000682F3 /* BlobIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EB315436077000682F3 /* BlobIOSystem.h */; };
1195 F99A9EB615436077000682F3 /* BlobIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EB315436077000682F3 /* BlobIOSystem.h */; };
1196 F99A9EB715436077000682F3 /* BlobIOSystem.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EB315436077000682F3 /* BlobIOSystem.h */; };
1197 F99A9EB915436098000682F3 /* lexical_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EB815436098000682F3 /* lexical_cast.hpp */; };
1198 F99A9EBA15436098000682F3 /* lexical_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EB815436098000682F3 /* lexical_cast.hpp */; };
1199 F99A9EBB15436098000682F3 /* lexical_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EB815436098000682F3 /* lexical_cast.hpp */; };
1200 F99A9EBC15436098000682F3 /* lexical_cast.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EB815436098000682F3 /* lexical_cast.hpp */; };
1201 F99A9EBE154360A0000682F3 /* make_shared.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EBD154360A0000682F3 /* make_shared.hpp */; };
1202 F99A9EBF154360A0000682F3 /* make_shared.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EBD154360A0000682F3 /* make_shared.hpp */; };
1203 F99A9EC0154360A0000682F3 /* make_shared.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EBD154360A0000682F3 /* make_shared.hpp */; };
1204 F99A9EC1154360A0000682F3 /* make_shared.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EBD154360A0000682F3 /* make_shared.hpp */; };
1205 F99A9EC3154360A5000682F3 /* noncopyable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EC2154360A5000682F3 /* noncopyable.hpp */; };
1206 F99A9EC4154360A5000682F3 /* noncopyable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EC2154360A5000682F3 /* noncopyable.hpp */; };
1207 F99A9EC5154360A5000682F3 /* noncopyable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EC2154360A5000682F3 /* noncopyable.hpp */; };
1208 F99A9EC6154360A5000682F3 /* noncopyable.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EC2154360A5000682F3 /* noncopyable.hpp */; };
1209 F99A9EC8154360B5000682F3 /* timer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EC7154360B5000682F3 /* timer.hpp */; };
1210 F99A9EC9154360B5000682F3 /* timer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EC7154360B5000682F3 /* timer.hpp */; };
1211 F99A9ECA154360B5000682F3 /* timer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EC7154360B5000682F3 /* timer.hpp */; };
1212 F99A9ECB154360B5000682F3 /* timer.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F99A9EC7154360B5000682F3 /* timer.hpp */; };
1213 F99A9ECD154360E2000682F3 /* CInterfaceIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9ECC154360E2000682F3 /* CInterfaceIOWrapper.h */; };
1214 F99A9ECE154360E2000682F3 /* CInterfaceIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9ECC154360E2000682F3 /* CInterfaceIOWrapper.h */; };
1215 F99A9ECF154360E2000682F3 /* CInterfaceIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9ECC154360E2000682F3 /* CInterfaceIOWrapper.h */; };
1216 F99A9ED0154360E2000682F3 /* CInterfaceIOWrapper.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9ECC154360E2000682F3 /* CInterfaceIOWrapper.h */; };
1217 F99A9ED315436125000682F3 /* DeboneProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9ED115436125000682F3 /* DeboneProcess.cpp */; };
1218 F99A9ED415436125000682F3 /* DeboneProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9ED215436125000682F3 /* DeboneProcess.h */; };
1219 F99A9ED515436125000682F3 /* DeboneProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9ED115436125000682F3 /* DeboneProcess.cpp */; };
1220 F99A9ED615436125000682F3 /* DeboneProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9ED215436125000682F3 /* DeboneProcess.h */; };
1221 F99A9ED715436125000682F3 /* DeboneProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9ED115436125000682F3 /* DeboneProcess.cpp */; };
1222 F99A9ED815436125000682F3 /* DeboneProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9ED215436125000682F3 /* DeboneProcess.h */; };
1223 F99A9ED915436125000682F3 /* DeboneProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9ED115436125000682F3 /* DeboneProcess.cpp */; };
1224 F99A9EDA15436125000682F3 /* DeboneProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9ED215436125000682F3 /* DeboneProcess.h */; };
1225 F99A9F18154361AD000682F3 /* ImporterRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F17154361AD000682F3 /* ImporterRegistry.cpp */; };
1226 F99A9F19154361AD000682F3 /* ImporterRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F17154361AD000682F3 /* ImporterRegistry.cpp */; };
1227 F99A9F1A154361AD000682F3 /* ImporterRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F17154361AD000682F3 /* ImporterRegistry.cpp */; };
1228 F99A9F1B154361AD000682F3 /* ImporterRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F17154361AD000682F3 /* ImporterRegistry.cpp */; };
1229 F99A9F1D154361D4000682F3 /* LogAux.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F1C154361D4000682F3 /* LogAux.h */; };
1230 F99A9F1E154361D4000682F3 /* LogAux.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F1C154361D4000682F3 /* LogAux.h */; };
1231 F99A9F1F154361D4000682F3 /* LogAux.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F1C154361D4000682F3 /* LogAux.h */; };
1232 F99A9F20154361D4000682F3 /* LogAux.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F1C154361D4000682F3 /* LogAux.h */; };
1233 F99A9F2815436207000682F3 /* M3Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F2615436207000682F3 /* M3Importer.cpp */; };
1234 F99A9F2915436207000682F3 /* M3Importer.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F2715436207000682F3 /* M3Importer.h */; };
1235 F99A9F2A15436207000682F3 /* M3Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F2615436207000682F3 /* M3Importer.cpp */; };
1236 F99A9F2B15436207000682F3 /* M3Importer.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F2715436207000682F3 /* M3Importer.h */; };
1237 F99A9F2C15436207000682F3 /* M3Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F2615436207000682F3 /* M3Importer.cpp */; };
1238 F99A9F2D15436207000682F3 /* M3Importer.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F2715436207000682F3 /* M3Importer.h */; };
1239 F99A9F2E15436207000682F3 /* M3Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F2615436207000682F3 /* M3Importer.cpp */; };
1240 F99A9F2F15436207000682F3 /* M3Importer.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F2715436207000682F3 /* M3Importer.h */; };
12411830 F99A9F3215436269000682F3 /* PlyExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F3015436269000682F3 /* PlyExporter.cpp */; };
12421831 F99A9F3315436269000682F3 /* PlyExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F3115436269000682F3 /* PlyExporter.h */; };
12431832 F99A9F3415436269000682F3 /* PlyExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F3015436269000682F3 /* PlyExporter.cpp */; };
12461835 F99A9F3715436269000682F3 /* PlyExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F3115436269000682F3 /* PlyExporter.h */; };
12471836 F99A9F3815436269000682F3 /* PlyExporter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F3015436269000682F3 /* PlyExporter.cpp */; };
12481837 F99A9F3915436269000682F3 /* PlyExporter.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F3115436269000682F3 /* PlyExporter.h */; };
1249 F99A9F3B15436286000682F3 /* PolyTools.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F3A15436286000682F3 /* PolyTools.h */; };
1250 F99A9F3C15436286000682F3 /* PolyTools.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F3A15436286000682F3 /* PolyTools.h */; };
1251 F99A9F3D15436286000682F3 /* PolyTools.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F3A15436286000682F3 /* PolyTools.h */; };
1252 F99A9F3E15436286000682F3 /* PolyTools.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F3A15436286000682F3 /* PolyTools.h */; };
1253 F99A9F401543629F000682F3 /* PostStepRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F3F1543629F000682F3 /* PostStepRegistry.cpp */; };
1254 F99A9F411543629F000682F3 /* PostStepRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F3F1543629F000682F3 /* PostStepRegistry.cpp */; };
1255 F99A9F421543629F000682F3 /* PostStepRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F3F1543629F000682F3 /* PostStepRegistry.cpp */; };
1256 F99A9F431543629F000682F3 /* PostStepRegistry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F3F1543629F000682F3 /* PostStepRegistry.cpp */; };
1257 F99A9F45154362DE000682F3 /* ScenePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F44154362DE000682F3 /* ScenePrivate.h */; };
1258 F99A9F46154362DE000682F3 /* ScenePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F44154362DE000682F3 /* ScenePrivate.h */; };
1259 F99A9F47154362DE000682F3 /* ScenePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F44154362DE000682F3 /* ScenePrivate.h */; };
1260 F99A9F48154362DE000682F3 /* ScenePrivate.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F44154362DE000682F3 /* ScenePrivate.h */; };
1261 F99A9F4B15436304000682F3 /* SplitByBoneCountProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F4915436304000682F3 /* SplitByBoneCountProcess.cpp */; };
1262 F99A9F4C15436304000682F3 /* SplitByBoneCountProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F4A15436304000682F3 /* SplitByBoneCountProcess.h */; };
1263 F99A9F4D15436304000682F3 /* SplitByBoneCountProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F4915436304000682F3 /* SplitByBoneCountProcess.cpp */; };
1264 F99A9F4E15436304000682F3 /* SplitByBoneCountProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F4A15436304000682F3 /* SplitByBoneCountProcess.h */; };
1265 F99A9F4F15436304000682F3 /* SplitByBoneCountProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F4915436304000682F3 /* SplitByBoneCountProcess.cpp */; };
1266 F99A9F5015436304000682F3 /* SplitByBoneCountProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F4A15436304000682F3 /* SplitByBoneCountProcess.h */; };
1267 F99A9F5115436304000682F3 /* SplitByBoneCountProcess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F4915436304000682F3 /* SplitByBoneCountProcess.cpp */; };
1268 F99A9F5215436304000682F3 /* SplitByBoneCountProcess.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F4A15436304000682F3 /* SplitByBoneCountProcess.h */; };
1269 F99A9F5C15436323000682F3 /* STEPFile.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F5915436323000682F3 /* STEPFile.h */; };
1270 F99A9F5D15436323000682F3 /* STEPFileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F5A15436323000682F3 /* STEPFileReader.cpp */; };
1271 F99A9F5E15436323000682F3 /* STEPFileReader.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F5B15436323000682F3 /* STEPFileReader.h */; };
1272 F99A9F5F15436323000682F3 /* STEPFile.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F5915436323000682F3 /* STEPFile.h */; };
1273 F99A9F6015436323000682F3 /* STEPFileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F5A15436323000682F3 /* STEPFileReader.cpp */; };
1274 F99A9F6115436323000682F3 /* STEPFileReader.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F5B15436323000682F3 /* STEPFileReader.h */; };
1275 F99A9F6215436323000682F3 /* STEPFile.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F5915436323000682F3 /* STEPFile.h */; };
1276 F99A9F6315436323000682F3 /* STEPFileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F5A15436323000682F3 /* STEPFileReader.cpp */; };
1277 F99A9F6415436323000682F3 /* STEPFileReader.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F5B15436323000682F3 /* STEPFileReader.h */; };
1278 F99A9F6515436323000682F3 /* STEPFile.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F5915436323000682F3 /* STEPFile.h */; };
1279 F99A9F6615436323000682F3 /* STEPFileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F99A9F5A15436323000682F3 /* STEPFileReader.cpp */; };
1280 F99A9F6715436323000682F3 /* STEPFileReader.h in Headers */ = {isa = PBXBuildFile; fileRef = F99A9F5B15436323000682F3 /* STEPFileReader.h */; };
12811838 F9BA8B9F1543268400E63FFE /* anim.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B751543268400E63FFE /* anim.h */; };
12821839 F9BA8BA11543268400E63FFE /* camera.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B771543268400E63FFE /* camera.h */; };
12831840 F9BA8BA21543268400E63FFE /* cexport.h in Headers */ = {isa = PBXBuildFile; fileRef = F9BA8B781543268400E63FFE /* cexport.h */; };
14371994 /* End PBXBuildFile section */
14381995
14391996 /* Begin PBXFileReference section */
1997 2B7F456D1708365100A106A9 /* assbin_chunks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = assbin_chunks.h; sourceTree = "<group>"; };
1998 2B7F456E1708365100A106A9 /* Assimp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Assimp.cpp; sourceTree = "<group>"; };
1999 2B7F456F1708365100A106A9 /* AssimpCExport.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AssimpCExport.cpp; sourceTree = "<group>"; };
2000 2B7F45741708365100A106A9 /* BaseImporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseImporter.cpp; sourceTree = "<group>"; };
2001 2B7F45751708365100A106A9 /* BaseImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseImporter.h; sourceTree = "<group>"; };
2002 2B7F45761708365100A106A9 /* BaseProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseProcess.cpp; sourceTree = "<group>"; };
2003 2B7F45771708365100A106A9 /* BaseProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseProcess.h; sourceTree = "<group>"; };
2004 2B7F45831708365100A106A9 /* BlobIOSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BlobIOSystem.h; sourceTree = "<group>"; };
2005 2B7F45861708365100A106A9 /* foreach.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = foreach.hpp; sourceTree = "<group>"; };
2006 2B7F45871708365100A106A9 /* format.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = format.hpp; sourceTree = "<group>"; };
2007 2B7F45881708365100A106A9 /* lexical_cast.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = lexical_cast.hpp; sourceTree = "<group>"; };
2008 2B7F45891708365100A106A9 /* LICENSE_1_0.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE_1_0.txt; sourceTree = "<group>"; };
2009 2B7F458A1708365100A106A9 /* make_shared.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = make_shared.hpp; sourceTree = "<group>"; };
2010 2B7F458C1708365100A106A9 /* common_factor_rt.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = common_factor_rt.hpp; sourceTree = "<group>"; };
2011 2B7F458D1708365100A106A9 /* noncopyable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = noncopyable.hpp; sourceTree = "<group>"; };
2012 2B7F458E1708365100A106A9 /* pointer_cast.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = pointer_cast.hpp; sourceTree = "<group>"; };
2013 2B7F458F1708365100A106A9 /* scoped_array.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = scoped_array.hpp; sourceTree = "<group>"; };
2014 2B7F45901708365100A106A9 /* scoped_ptr.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = scoped_ptr.hpp; sourceTree = "<group>"; };
2015 2B7F45911708365100A106A9 /* shared_array.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = shared_array.hpp; sourceTree = "<group>"; };
2016 2B7F45921708365100A106A9 /* shared_ptr.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = shared_ptr.hpp; sourceTree = "<group>"; };
2017 2B7F45931708365100A106A9 /* static_assert.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = static_assert.hpp; sourceTree = "<group>"; };
2018 2B7F45941708365100A106A9 /* timer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = timer.hpp; sourceTree = "<group>"; };
2019 2B7F45961708365100A106A9 /* tuple.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = tuple.hpp; sourceTree = "<group>"; };
2020 2B7F45991708365100A106A9 /* ByteSwap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ByteSwap.h; sourceTree = "<group>"; };
2021 2B7F459A1708365100A106A9 /* CalcTangentsProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CalcTangentsProcess.cpp; sourceTree = "<group>"; };
2022 2B7F459B1708365100A106A9 /* CalcTangentsProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CalcTangentsProcess.h; sourceTree = "<group>"; };
2023 2B7F459C1708365100A106A9 /* CInterfaceIOWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CInterfaceIOWrapper.h; sourceTree = "<group>"; };
2024 2B7F45A11708365100A106A9 /* ColladaExporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ColladaExporter.cpp; sourceTree = "<group>"; };
2025 2B7F45A21708365100A106A9 /* ColladaExporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColladaExporter.h; sourceTree = "<group>"; };
2026 2B7F45A31708365100A106A9 /* ColladaHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColladaHelper.h; sourceTree = "<group>"; };
2027 2B7F45A41708365100A106A9 /* ColladaLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ColladaLoader.cpp; sourceTree = "<group>"; };
2028 2B7F45A51708365100A106A9 /* ColladaLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColladaLoader.h; sourceTree = "<group>"; };
2029 2B7F45A61708365100A106A9 /* ColladaParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ColladaParser.cpp; sourceTree = "<group>"; };
2030 2B7F45A71708365100A106A9 /* ColladaParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColladaParser.h; sourceTree = "<group>"; };
2031 2B7F45A81708365100A106A9 /* ComputeUVMappingProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ComputeUVMappingProcess.cpp; sourceTree = "<group>"; };
2032 2B7F45A91708365100A106A9 /* ComputeUVMappingProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ComputeUVMappingProcess.h; sourceTree = "<group>"; };
2033 2B7F45AA1708365100A106A9 /* ConvertToLHProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConvertToLHProcess.cpp; sourceTree = "<group>"; };
2034 2B7F45AB1708365100A106A9 /* ConvertToLHProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConvertToLHProcess.h; sourceTree = "<group>"; };
2035 2B7F45AE1708365100A106A9 /* DeboneProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeboneProcess.cpp; sourceTree = "<group>"; };
2036 2B7F45AF1708365100A106A9 /* DeboneProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeboneProcess.h; sourceTree = "<group>"; };
2037 2B7F45B01708365100A106A9 /* DefaultIOStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DefaultIOStream.cpp; sourceTree = "<group>"; };
2038 2B7F45B11708365100A106A9 /* DefaultIOStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DefaultIOStream.h; sourceTree = "<group>"; };
2039 2B7F45B21708365100A106A9 /* DefaultIOSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DefaultIOSystem.cpp; sourceTree = "<group>"; };
2040 2B7F45B31708365100A106A9 /* DefaultIOSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DefaultIOSystem.h; sourceTree = "<group>"; };
2041 2B7F45B41708365100A106A9 /* DefaultLogger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DefaultLogger.cpp; sourceTree = "<group>"; };
2042 2B7F45B51708365100A106A9 /* DefaultProgressHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DefaultProgressHandler.h; sourceTree = "<group>"; };
2043 2B7F45B91708365100A106A9 /* Exceptional.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Exceptional.h; sourceTree = "<group>"; };
2044 2B7F45BA1708365100A106A9 /* Exporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Exporter.cpp; sourceTree = "<group>"; };
2045 2B7F45BB1708365100A106A9 /* fast_atof.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fast_atof.h; sourceTree = "<group>"; };
2046 2B7F45BC1708365100A106A9 /* FBXAnimation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FBXAnimation.cpp; sourceTree = "<group>"; };
2047 2B7F45BD1708365100A106A9 /* FBXBinaryTokenizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FBXBinaryTokenizer.cpp; sourceTree = "<group>"; };
2048 2B7F45BE1708365100A106A9 /* FBXCompileConfig.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBXCompileConfig.h; sourceTree = "<group>"; };
2049 2B7F45BF1708365100A106A9 /* FBXConverter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FBXConverter.cpp; sourceTree = "<group>"; };
2050 2B7F45C01708365100A106A9 /* FBXConverter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBXConverter.h; sourceTree = "<group>"; };
2051 2B7F45C11708365100A106A9 /* FBXDeformer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FBXDeformer.cpp; sourceTree = "<group>"; };
2052 2B7F45C21708365100A106A9 /* FBXDocument.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FBXDocument.cpp; sourceTree = "<group>"; };
2053 2B7F45C31708365100A106A9 /* FBXDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBXDocument.h; sourceTree = "<group>"; };
2054 2B7F45C41708365100A106A9 /* FBXDocumentUtil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FBXDocumentUtil.cpp; sourceTree = "<group>"; };
2055 2B7F45C51708365100A106A9 /* FBXDocumentUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBXDocumentUtil.h; sourceTree = "<group>"; };
2056 2B7F45C61708365100A106A9 /* FBXImporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FBXImporter.cpp; sourceTree = "<group>"; };
2057 2B7F45C71708365100A106A9 /* FBXImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBXImporter.h; sourceTree = "<group>"; };
2058 2B7F45C81708365100A106A9 /* FBXImportSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBXImportSettings.h; sourceTree = "<group>"; };
2059 2B7F45C91708365100A106A9 /* FBXMaterial.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FBXMaterial.cpp; sourceTree = "<group>"; };
2060 2B7F45CA1708365100A106A9 /* FBXMeshGeometry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FBXMeshGeometry.cpp; sourceTree = "<group>"; };
2061 2B7F45CB1708365100A106A9 /* FBXModel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FBXModel.cpp; sourceTree = "<group>"; };
2062 2B7F45CC1708365100A106A9 /* FBXNodeAttribute.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FBXNodeAttribute.cpp; sourceTree = "<group>"; };
2063 2B7F45CD1708365100A106A9 /* FBXParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FBXParser.cpp; sourceTree = "<group>"; };
2064 2B7F45CE1708365100A106A9 /* FBXParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBXParser.h; sourceTree = "<group>"; };
2065 2B7F45CF1708365100A106A9 /* FBXProperties.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FBXProperties.cpp; sourceTree = "<group>"; };
2066 2B7F45D01708365100A106A9 /* FBXProperties.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBXProperties.h; sourceTree = "<group>"; };
2067 2B7F45D11708365100A106A9 /* FBXTokenizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FBXTokenizer.cpp; sourceTree = "<group>"; };
2068 2B7F45D21708365100A106A9 /* FBXTokenizer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBXTokenizer.h; sourceTree = "<group>"; };
2069 2B7F45D31708365100A106A9 /* FBXUtil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FBXUtil.cpp; sourceTree = "<group>"; };
2070 2B7F45D41708365100A106A9 /* FBXUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBXUtil.h; sourceTree = "<group>"; };
2071 2B7F45D51708365100A106A9 /* FileLogStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileLogStream.h; sourceTree = "<group>"; };
2072 2B7F45D61708365100A106A9 /* FileSystemFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileSystemFilter.h; sourceTree = "<group>"; };
2073 2B7F45D71708365100A106A9 /* FindDegenerates.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FindDegenerates.cpp; sourceTree = "<group>"; };
2074 2B7F45D81708365100A106A9 /* FindDegenerates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FindDegenerates.h; sourceTree = "<group>"; };
2075 2B7F45D91708365100A106A9 /* FindInstancesProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FindInstancesProcess.cpp; sourceTree = "<group>"; };
2076 2B7F45DA1708365100A106A9 /* FindInstancesProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FindInstancesProcess.h; sourceTree = "<group>"; };
2077 2B7F45DB1708365100A106A9 /* FindInvalidDataProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FindInvalidDataProcess.cpp; sourceTree = "<group>"; };
2078 2B7F45DC1708365100A106A9 /* FindInvalidDataProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FindInvalidDataProcess.h; sourceTree = "<group>"; };
2079 2B7F45DD1708365100A106A9 /* FixNormalsStep.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FixNormalsStep.cpp; sourceTree = "<group>"; };
2080 2B7F45DE1708365100A106A9 /* FixNormalsStep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FixNormalsStep.h; sourceTree = "<group>"; };
2081 2B7F45DF1708365100A106A9 /* GenericProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GenericProperty.h; sourceTree = "<group>"; };
2082 2B7F45E01708365100A106A9 /* GenFaceNormalsProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GenFaceNormalsProcess.cpp; sourceTree = "<group>"; };
2083 2B7F45E11708365100A106A9 /* GenFaceNormalsProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GenFaceNormalsProcess.h; sourceTree = "<group>"; };
2084 2B7F45E21708365100A106A9 /* GenVertexNormalsProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GenVertexNormalsProcess.cpp; sourceTree = "<group>"; };
2085 2B7F45E31708365100A106A9 /* GenVertexNormalsProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GenVertexNormalsProcess.h; sourceTree = "<group>"; };
2086 2B7F45E51708365100A106A9 /* Hash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Hash.h; sourceTree = "<group>"; };
2087 2B7F45E91708365100A106A9 /* IFCBoolean.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCBoolean.cpp; path = ../../code/IFCBoolean.cpp; sourceTree = "<group>"; };
2088 2B7F45EA1708365100A106A9 /* IFCCurve.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCCurve.cpp; path = ../../code/IFCCurve.cpp; sourceTree = "<group>"; };
2089 2B7F45EB1708365100A106A9 /* IFCGeometry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCGeometry.cpp; path = ../../code/IFCGeometry.cpp; sourceTree = "<group>"; };
2090 2B7F45EC1708365100A106A9 /* IFCLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCLoader.cpp; path = ../../code/IFCLoader.cpp; sourceTree = "<group>"; };
2091 2B7F45ED1708365100A106A9 /* IFCLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IFCLoader.h; path = ../../code/IFCLoader.h; sourceTree = "<group>"; };
2092 2B7F45EE1708365100A106A9 /* IFCMaterial.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCMaterial.cpp; path = ../../code/IFCMaterial.cpp; sourceTree = "<group>"; };
2093 2B7F45EF1708365100A106A9 /* IFCOpenings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCOpenings.cpp; path = ../../code/IFCOpenings.cpp; sourceTree = "<group>"; };
2094 2B7F45F01708365100A106A9 /* IFCProfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCProfile.cpp; path = ../../code/IFCProfile.cpp; sourceTree = "<group>"; };
2095 2B7F45F11708365100A106A9 /* IFCReaderGen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCReaderGen.cpp; path = ../../code/IFCReaderGen.cpp; sourceTree = "<group>"; };
2096 2B7F45F21708365100A106A9 /* IFCReaderGen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IFCReaderGen.h; path = ../../code/IFCReaderGen.h; sourceTree = "<group>"; };
2097 2B7F45F31708365100A106A9 /* IFCUtil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCUtil.cpp; path = ../../code/IFCUtil.cpp; sourceTree = "<group>"; };
2098 2B7F45F41708365100A106A9 /* IFCUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IFCUtil.h; path = ../../code/IFCUtil.h; sourceTree = "<group>"; };
2099 2B7F45F51708365100A106A9 /* IFF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IFF.h; sourceTree = "<group>"; };
2100 2B7F45F61708365100A106A9 /* Importer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Importer.cpp; sourceTree = "<group>"; };
2101 2B7F45F71708365100A106A9 /* Importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Importer.h; sourceTree = "<group>"; };
2102 2B7F45F81708365100A106A9 /* ImporterRegistry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImporterRegistry.cpp; sourceTree = "<group>"; };
2103 2B7F45F91708365100A106A9 /* ImproveCacheLocality.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImproveCacheLocality.cpp; sourceTree = "<group>"; };
2104 2B7F45FA1708365100A106A9 /* ImproveCacheLocality.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImproveCacheLocality.h; sourceTree = "<group>"; };
2105 2B7F46021708365100A106A9 /* JoinVerticesProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JoinVerticesProcess.cpp; sourceTree = "<group>"; };
2106 2B7F46031708365100A106A9 /* JoinVerticesProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JoinVerticesProcess.h; sourceTree = "<group>"; };
2107 2B7F46041708365100A106A9 /* LimitBoneWeightsProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LimitBoneWeightsProcess.cpp; sourceTree = "<group>"; };
2108 2B7F46051708365100A106A9 /* LimitBoneWeightsProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LimitBoneWeightsProcess.h; sourceTree = "<group>"; };
2109 2B7F46061708365100A106A9 /* LineSplitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LineSplitter.h; sourceTree = "<group>"; };
2110 2B7F46071708365100A106A9 /* LogAux.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LogAux.h; sourceTree = "<group>"; };
2111 2B7F46141708365200A106A9 /* MakeVerboseFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MakeVerboseFormat.cpp; sourceTree = "<group>"; };
2112 2B7F46151708365200A106A9 /* MakeVerboseFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MakeVerboseFormat.h; sourceTree = "<group>"; };
2113 2B7F46161708365200A106A9 /* MaterialSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MaterialSystem.cpp; sourceTree = "<group>"; };
2114 2B7F46171708365200A106A9 /* MaterialSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MaterialSystem.h; sourceTree = "<group>"; };
2115 2B7F461F1708365200A106A9 /* MD4FileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MD4FileData.h; sourceTree = "<group>"; };
2116 2B7F462D1708365200A106A9 /* MemoryIOWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryIOWrapper.h; sourceTree = "<group>"; };
2117 2B7F46341708365200A106A9 /* ObjExporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ObjExporter.cpp; sourceTree = "<group>"; };
2118 2B7F46351708365200A106A9 /* ObjExporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjExporter.h; sourceTree = "<group>"; };
2119 2B7F46361708365200A106A9 /* ObjFileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjFileData.h; sourceTree = "<group>"; };
2120 2B7F46371708365200A106A9 /* ObjFileImporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ObjFileImporter.cpp; sourceTree = "<group>"; };
2121 2B7F46381708365200A106A9 /* ObjFileImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjFileImporter.h; sourceTree = "<group>"; };
2122 2B7F46391708365200A106A9 /* ObjFileMtlImporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ObjFileMtlImporter.cpp; sourceTree = "<group>"; };
2123 2B7F463A1708365200A106A9 /* ObjFileMtlImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjFileMtlImporter.h; sourceTree = "<group>"; };
2124 2B7F463B1708365200A106A9 /* ObjFileParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ObjFileParser.cpp; sourceTree = "<group>"; };
2125 2B7F463C1708365200A106A9 /* ObjFileParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjFileParser.h; sourceTree = "<group>"; };
2126 2B7F463D1708365200A106A9 /* ObjTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjTools.h; sourceTree = "<group>"; };
2127 2B7F46461708365200A106A9 /* OptimizeGraph.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OptimizeGraph.cpp; sourceTree = "<group>"; };
2128 2B7F46471708365200A106A9 /* OptimizeGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OptimizeGraph.h; sourceTree = "<group>"; };
2129 2B7F46481708365200A106A9 /* OptimizeMeshes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OptimizeMeshes.cpp; sourceTree = "<group>"; };
2130 2B7F46491708365200A106A9 /* OptimizeMeshes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OptimizeMeshes.h; sourceTree = "<group>"; };
2131 2B7F464A1708365200A106A9 /* ParsingUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParsingUtils.h; sourceTree = "<group>"; };
2132 2B7F46511708365200A106A9 /* PolyTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolyTools.h; sourceTree = "<group>"; };
2133 2B7F46521708365200A106A9 /* PostStepRegistry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PostStepRegistry.cpp; sourceTree = "<group>"; };
2134 2B7F46531708365200A106A9 /* PretransformVertices.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PretransformVertices.cpp; sourceTree = "<group>"; };
2135 2B7F46541708365200A106A9 /* PretransformVertices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PretransformVertices.h; sourceTree = "<group>"; };
2136 2B7F46551708365200A106A9 /* ProcessHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProcessHelper.cpp; sourceTree = "<group>"; };
2137 2B7F46561708365200A106A9 /* ProcessHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProcessHelper.h; sourceTree = "<group>"; };
2138 2B7F46571708365200A106A9 /* Profiler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Profiler.h; sourceTree = "<group>"; };
2139 2B7F46581708365200A106A9 /* pstdint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pstdint.h; sourceTree = "<group>"; };
2140 2B7F46621708365200A106A9 /* qnan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qnan.h; sourceTree = "<group>"; };
2141 2B7F46651708365200A106A9 /* RemoveComments.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemoveComments.cpp; sourceTree = "<group>"; };
2142 2B7F46661708365200A106A9 /* RemoveComments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoveComments.h; sourceTree = "<group>"; };
2143 2B7F46671708365200A106A9 /* RemoveRedundantMaterials.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemoveRedundantMaterials.cpp; sourceTree = "<group>"; };
2144 2B7F46681708365200A106A9 /* RemoveRedundantMaterials.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoveRedundantMaterials.h; sourceTree = "<group>"; };
2145 2B7F46691708365200A106A9 /* RemoveVCProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemoveVCProcess.cpp; sourceTree = "<group>"; };
2146 2B7F466A1708365200A106A9 /* RemoveVCProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoveVCProcess.h; sourceTree = "<group>"; };
2147 2B7F466E1708365200A106A9 /* SceneCombiner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SceneCombiner.cpp; sourceTree = "<group>"; };
2148 2B7F466F1708365200A106A9 /* SceneCombiner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SceneCombiner.h; sourceTree = "<group>"; };
2149 2B7F46701708365200A106A9 /* ScenePreprocessor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScenePreprocessor.cpp; sourceTree = "<group>"; };
2150 2B7F46711708365200A106A9 /* ScenePreprocessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScenePreprocessor.h; sourceTree = "<group>"; };
2151 2B7F46721708365200A106A9 /* ScenePrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScenePrivate.h; sourceTree = "<group>"; };
2152 2B7F46731708365200A106A9 /* SGSpatialSort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SGSpatialSort.cpp; sourceTree = "<group>"; };
2153 2B7F46741708365200A106A9 /* SGSpatialSort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGSpatialSort.h; sourceTree = "<group>"; };
2154 2B7F46751708365200A106A9 /* SkeletonMeshBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkeletonMeshBuilder.cpp; sourceTree = "<group>"; };
2155 2B7F46761708365200A106A9 /* SkeletonMeshBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkeletonMeshBuilder.h; sourceTree = "<group>"; };
2156 2B7F46791708365200A106A9 /* SmoothingGroups.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmoothingGroups.h; sourceTree = "<group>"; };
2157 2B7F467A1708365200A106A9 /* SmoothingGroups.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SmoothingGroups.inl; sourceTree = "<group>"; };
2158 2B7F467B1708365200A106A9 /* SortByPTypeProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SortByPTypeProcess.cpp; sourceTree = "<group>"; };
2159 2B7F467C1708365200A106A9 /* SortByPTypeProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SortByPTypeProcess.h; sourceTree = "<group>"; };
2160 2B7F467D1708365200A106A9 /* SpatialSort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpatialSort.cpp; sourceTree = "<group>"; };
2161 2B7F467E1708365200A106A9 /* SpatialSort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpatialSort.h; sourceTree = "<group>"; };
2162 2B7F467F1708365200A106A9 /* SplitByBoneCountProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SplitByBoneCountProcess.cpp; sourceTree = "<group>"; };
2163 2B7F46801708365200A106A9 /* SplitByBoneCountProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SplitByBoneCountProcess.h; sourceTree = "<group>"; };
2164 2B7F46811708365200A106A9 /* SplitLargeMeshes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SplitLargeMeshes.cpp; sourceTree = "<group>"; };
2165 2B7F46821708365200A106A9 /* SplitLargeMeshes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SplitLargeMeshes.h; sourceTree = "<group>"; };
2166 2B7F46831708365200A106A9 /* StandardShapes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StandardShapes.cpp; sourceTree = "<group>"; };
2167 2B7F46841708365200A106A9 /* StandardShapes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StandardShapes.h; sourceTree = "<group>"; };
2168 2B7F46851708365200A106A9 /* StdOStreamLogStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StdOStreamLogStream.h; sourceTree = "<group>"; };
2169 2B7F46861708365200A106A9 /* STEPFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = STEPFile.h; path = ../../code/STEPFile.h; sourceTree = "<group>"; };
2170 2B7F46871708365200A106A9 /* STEPFileEncoding.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = STEPFileEncoding.cpp; path = ../../code/STEPFileEncoding.cpp; sourceTree = "<group>"; };
2171 2B7F46881708365200A106A9 /* STEPFileEncoding.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = STEPFileEncoding.h; path = ../../code/STEPFileEncoding.h; sourceTree = "<group>"; };
2172 2B7F46891708365200A106A9 /* STEPFileReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = STEPFileReader.cpp; path = ../../code/STEPFileReader.cpp; sourceTree = "<group>"; };
2173 2B7F468A1708365200A106A9 /* STEPFileReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = STEPFileReader.h; path = ../../code/STEPFileReader.h; sourceTree = "<group>"; };
2174 2B7F468B1708365200A106A9 /* STLExporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = STLExporter.cpp; sourceTree = "<group>"; };
2175 2B7F468C1708365200A106A9 /* STLExporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = STLExporter.h; sourceTree = "<group>"; };
2176 2B7F468D1708365200A106A9 /* STLLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = STLLoader.cpp; sourceTree = "<group>"; };
2177 2B7F468E1708365200A106A9 /* STLLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = STLLoader.h; sourceTree = "<group>"; };
2178 2B7F468F1708365200A106A9 /* StreamReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StreamReader.h; sourceTree = "<group>"; };
2179 2B7F46901708365200A106A9 /* StringComparison.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StringComparison.h; sourceTree = "<group>"; };
2180 2B7F46911708365200A106A9 /* Subdivision.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Subdivision.cpp; sourceTree = "<group>"; };
2181 2B7F46921708365200A106A9 /* Subdivision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Subdivision.h; sourceTree = "<group>"; };
2182 2B7F46931708365200A106A9 /* TargetAnimation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TargetAnimation.cpp; sourceTree = "<group>"; };
2183 2B7F46941708365200A106A9 /* TargetAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TargetAnimation.h; sourceTree = "<group>"; };
2184 2B7F46971708365200A106A9 /* TextureTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureTransform.cpp; sourceTree = "<group>"; };
2185 2B7F46981708365200A106A9 /* TextureTransform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureTransform.h; sourceTree = "<group>"; };
2186 2B7F46991708365200A106A9 /* TinyFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TinyFormatter.h; sourceTree = "<group>"; };
2187 2B7F469A1708365200A106A9 /* TriangulateProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TriangulateProcess.cpp; sourceTree = "<group>"; };
2188 2B7F469B1708365200A106A9 /* TriangulateProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TriangulateProcess.h; sourceTree = "<group>"; };
2189 2B7F469E1708365200A106A9 /* ValidateDataStructure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ValidateDataStructure.cpp; sourceTree = "<group>"; };
2190 2B7F469F1708365200A106A9 /* ValidateDataStructure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ValidateDataStructure.h; sourceTree = "<group>"; };
2191 2B7F46A01708365200A106A9 /* Vertex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Vertex.h; sourceTree = "<group>"; };
2192 2B7F46A11708365200A106A9 /* VertexTriangleAdjacency.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VertexTriangleAdjacency.cpp; sourceTree = "<group>"; };
2193 2B7F46A21708365200A106A9 /* VertexTriangleAdjacency.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexTriangleAdjacency.h; sourceTree = "<group>"; };
2194 2B7F46A31708365200A106A9 /* Win32DebugLogStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Win32DebugLogStream.h; sourceTree = "<group>"; };
2195 2BA44E10170862D800C78A66 /* libstdc++.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libstdc++.dylib"; path = "Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/lib/libstdc++.dylib"; sourceTree = DEVELOPER_DIR; };
14402196 3AB8A3AB0E50D67A00606590 /* MDCFileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MDCFileData.h; sourceTree = "<group>"; };
14412197 3AB8A3AC0E50D67A00606590 /* MDCLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MDCLoader.cpp; sourceTree = "<group>"; };
14422198 3AB8A3AD0E50D67A00606590 /* MDCLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MDCLoader.h; sourceTree = "<group>"; };
14432199 3AB8A3AE0E50D67A00606590 /* MDCNormalTable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MDCNormalTable.h; sourceTree = "<group>"; };
1444 3AB8A3B30E50D69D00606590 /* FixNormalsStep.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FixNormalsStep.cpp; sourceTree = "<group>"; };
1445 3AB8A3B40E50D69D00606590 /* FixNormalsStep.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FixNormalsStep.h; sourceTree = "<group>"; };
14462200 3AB8A3B70E50D6DB00606590 /* LWOFileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LWOFileData.h; sourceTree = "<group>"; };
14472201 3AB8A3B80E50D6DB00606590 /* LWOLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LWOLoader.cpp; sourceTree = "<group>"; };
14482202 3AB8A3B90E50D6DB00606590 /* LWOLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LWOLoader.h; sourceTree = "<group>"; };
1449 3AB8A3C30E50D74500606590 /* BaseProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseProcess.cpp; sourceTree = "<group>"; };
14502203 3AB8A3C50E50D77900606590 /* HMPFileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HMPFileData.h; sourceTree = "<group>"; };
1451 3AB8A3C90E50D7CC00606590 /* IFF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IFF.h; sourceTree = "<group>"; };
1452 3AB8A3CB0E50D7FF00606590 /* Hash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Hash.h; sourceTree = "<group>"; };
14532204 3AB8A7DC0E53715F00606590 /* LWOMaterial.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LWOMaterial.cpp; sourceTree = "<group>"; };
14542205 3AF45A860E4B716800207D74 /* 3DSConverter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = 3DSConverter.cpp; sourceTree = "<group>"; };
14552206 3AF45A880E4B716800207D74 /* 3DSHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 3DSHelper.h; sourceTree = "<group>"; };
14592210 3AF45A8F0E4B716800207D74 /* ASELoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASELoader.h; sourceTree = "<group>"; };
14602211 3AF45A900E4B716800207D74 /* ASEParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ASEParser.cpp; sourceTree = "<group>"; };
14612212 3AF45A910E4B716800207D74 /* ASEParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ASEParser.h; sourceTree = "<group>"; };
1462 3AF45A920E4B716800207D74 /* Assimp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Assimp.cpp; sourceTree = "<group>"; };
1463 3AF45A930E4B716800207D74 /* BaseImporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BaseImporter.cpp; sourceTree = "<group>"; };
1464 3AF45A940E4B716800207D74 /* BaseImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseImporter.h; sourceTree = "<group>"; };
1465 3AF45A950E4B716800207D74 /* BaseProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BaseProcess.h; sourceTree = "<group>"; };
1466 3AF45A960E4B716800207D74 /* ByteSwap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ByteSwap.h; sourceTree = "<group>"; };
1467 3AF45A970E4B716800207D74 /* CalcTangentsProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CalcTangentsProcess.cpp; sourceTree = "<group>"; };
1468 3AF45A980E4B716800207D74 /* CalcTangentsProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CalcTangentsProcess.h; sourceTree = "<group>"; };
1469 3AF45A990E4B716800207D74 /* ConvertToLHProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ConvertToLHProcess.cpp; sourceTree = "<group>"; };
1470 3AF45A9A0E4B716800207D74 /* ConvertToLHProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConvertToLHProcess.h; sourceTree = "<group>"; };
1471 3AF45A9B0E4B716800207D74 /* DefaultIOStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DefaultIOStream.cpp; sourceTree = "<group>"; };
1472 3AF45A9C0E4B716800207D74 /* DefaultIOStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DefaultIOStream.h; sourceTree = "<group>"; };
1473 3AF45A9D0E4B716800207D74 /* DefaultIOSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DefaultIOSystem.cpp; sourceTree = "<group>"; };
1474 3AF45A9E0E4B716800207D74 /* DefaultIOSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DefaultIOSystem.h; sourceTree = "<group>"; };
1475 3AF45A9F0E4B716800207D74 /* DefaultLogger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DefaultLogger.cpp; sourceTree = "<group>"; };
1476 3AF45AA30E4B716800207D74 /* fast_atof.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fast_atof.h; sourceTree = "<group>"; };
1477 3AF45AA40E4B716800207D74 /* FileLogStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileLogStream.h; sourceTree = "<group>"; };
1478 3AF45AA50E4B716800207D74 /* GenFaceNormalsProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GenFaceNormalsProcess.cpp; sourceTree = "<group>"; };
1479 3AF45AA60E4B716800207D74 /* GenFaceNormalsProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GenFaceNormalsProcess.h; sourceTree = "<group>"; };
1480 3AF45AA70E4B716800207D74 /* GenVertexNormalsProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GenVertexNormalsProcess.cpp; sourceTree = "<group>"; };
1481 3AF45AA80E4B716800207D74 /* GenVertexNormalsProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GenVertexNormalsProcess.h; sourceTree = "<group>"; };
14822213 3AF45AA90E4B716800207D74 /* HalfLifeFileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HalfLifeFileData.h; sourceTree = "<group>"; };
14832214 3AF45AAB0E4B716800207D74 /* HMPLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HMPLoader.cpp; sourceTree = "<group>"; };
14842215 3AF45AAC0E4B716800207D74 /* HMPLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HMPLoader.h; sourceTree = "<group>"; };
1485 3AF45AAD0E4B716800207D74 /* Importer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Importer.cpp; sourceTree = "<group>"; };
1486 3AF45AAE0E4B716800207D74 /* ImproveCacheLocality.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImproveCacheLocality.cpp; sourceTree = "<group>"; };
1487 3AF45AAF0E4B716800207D74 /* ImproveCacheLocality.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImproveCacheLocality.h; sourceTree = "<group>"; };
1488 3AF45AB00E4B716800207D74 /* JoinVerticesProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JoinVerticesProcess.cpp; sourceTree = "<group>"; };
1489 3AF45AB10E4B716800207D74 /* JoinVerticesProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JoinVerticesProcess.h; sourceTree = "<group>"; };
1490 3AF45AB40E4B716800207D74 /* LimitBoneWeightsProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LimitBoneWeightsProcess.cpp; sourceTree = "<group>"; };
1491 3AF45AB50E4B716800207D74 /* LimitBoneWeightsProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LimitBoneWeightsProcess.h; sourceTree = "<group>"; };
1492 3AF45AB60E4B716800207D74 /* MaterialSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MaterialSystem.cpp; sourceTree = "<group>"; };
1493 3AF45AB70E4B716800207D74 /* MaterialSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MaterialSystem.h; sourceTree = "<group>"; };
14942216 3AF45AB80E4B716800207D74 /* MD2FileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MD2FileData.h; sourceTree = "<group>"; };
14952217 3AF45AB90E4B716800207D74 /* MD2Loader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MD2Loader.cpp; sourceTree = "<group>"; };
14962218 3AF45ABA0E4B716800207D74 /* MD2Loader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MD2Loader.h; sourceTree = "<group>"; };
15072229 3AF45AC80E4B716800207D74 /* MDLLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MDLLoader.cpp; sourceTree = "<group>"; };
15082230 3AF45AC90E4B716800207D74 /* MDLLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MDLLoader.h; sourceTree = "<group>"; };
15092231 3AF45ACA0E4B716800207D74 /* MDLMaterialLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MDLMaterialLoader.cpp; sourceTree = "<group>"; };
1510 3AF45ACB0E4B716800207D74 /* ObjFileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjFileData.h; sourceTree = "<group>"; };
1511 3AF45ACC0E4B716800207D74 /* ObjFileImporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ObjFileImporter.cpp; sourceTree = "<group>"; };
1512 3AF45ACD0E4B716800207D74 /* ObjFileImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjFileImporter.h; sourceTree = "<group>"; };
1513 3AF45ACE0E4B716800207D74 /* ObjFileMtlImporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ObjFileMtlImporter.cpp; sourceTree = "<group>"; };
1514 3AF45ACF0E4B716800207D74 /* ObjFileMtlImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjFileMtlImporter.h; sourceTree = "<group>"; };
1515 3AF45AD00E4B716800207D74 /* ObjFileParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ObjFileParser.cpp; sourceTree = "<group>"; };
1516 3AF45AD10E4B716800207D74 /* ObjFileParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjFileParser.h; sourceTree = "<group>"; };
1517 3AF45AD20E4B716800207D74 /* ObjTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjTools.h; sourceTree = "<group>"; };
1518 3AF45AD30E4B716800207D74 /* ParsingUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ParsingUtils.h; sourceTree = "<group>"; };
15192232 3AF45AD40E4B716800207D74 /* PlyLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PlyLoader.cpp; sourceTree = "<group>"; };
15202233 3AF45AD50E4B716800207D74 /* PlyLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlyLoader.h; sourceTree = "<group>"; };
15212234 3AF45AD60E4B716800207D74 /* PlyParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PlyParser.cpp; sourceTree = "<group>"; };
15222235 3AF45AD70E4B716800207D74 /* PlyParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlyParser.h; sourceTree = "<group>"; };
1523 3AF45AD80E4B716800207D74 /* PretransformVertices.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PretransformVertices.cpp; sourceTree = "<group>"; };
1524 3AF45AD90E4B716800207D74 /* PretransformVertices.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PretransformVertices.h; sourceTree = "<group>"; };
1525 3AF45ADA0E4B716800207D74 /* qnan.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = qnan.h; sourceTree = "<group>"; };
1526 3AF45ADB0E4B716800207D74 /* RemoveComments.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemoveComments.cpp; sourceTree = "<group>"; };
1527 3AF45ADC0E4B716800207D74 /* RemoveComments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoveComments.h; sourceTree = "<group>"; };
1528 3AF45ADD0E4B716800207D74 /* RemoveRedundantMaterials.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemoveRedundantMaterials.cpp; sourceTree = "<group>"; };
1529 3AF45ADE0E4B716800207D74 /* RemoveRedundantMaterials.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoveRedundantMaterials.h; sourceTree = "<group>"; };
15302236 3AF45AE20E4B716800207D74 /* SMDLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SMDLoader.cpp; sourceTree = "<group>"; };
15312237 3AF45AE30E4B716800207D74 /* SMDLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SMDLoader.h; sourceTree = "<group>"; };
1532 3AF45AE40E4B716800207D74 /* SpatialSort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SpatialSort.cpp; sourceTree = "<group>"; };
1533 3AF45AE50E4B716800207D74 /* SpatialSort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SpatialSort.h; sourceTree = "<group>"; };
1534 3AF45AE60E4B716800207D74 /* SplitLargeMeshes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SplitLargeMeshes.cpp; sourceTree = "<group>"; };
1535 3AF45AE70E4B716800207D74 /* SplitLargeMeshes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SplitLargeMeshes.h; sourceTree = "<group>"; };
1536 3AF45AE80E4B716800207D74 /* STLLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = STLLoader.cpp; sourceTree = "<group>"; };
1537 3AF45AE90E4B716800207D74 /* STLLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = STLLoader.h; sourceTree = "<group>"; };
1538 3AF45AEA0E4B716800207D74 /* StringComparison.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StringComparison.h; sourceTree = "<group>"; };
1539 3AF45AEB0E4B716800207D74 /* TextureTransform.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureTransform.cpp; sourceTree = "<group>"; };
1540 3AF45AEC0E4B716800207D74 /* TextureTransform.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureTransform.h; sourceTree = "<group>"; };
1541 3AF45AED0E4B716800207D74 /* TriangulateProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TriangulateProcess.cpp; sourceTree = "<group>"; };
1542 3AF45AEE0E4B716800207D74 /* TriangulateProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TriangulateProcess.h; sourceTree = "<group>"; };
1543 3AF45AEF0E4B716800207D74 /* ValidateDataStructure.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ValidateDataStructure.cpp; sourceTree = "<group>"; };
1544 3AF45AF00E4B716800207D74 /* ValidateDataStructure.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ValidateDataStructure.h; sourceTree = "<group>"; };
1545 3AF45AF10E4B716800207D74 /* VertexTriangleAdjacency.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VertexTriangleAdjacency.cpp; sourceTree = "<group>"; };
1546 3AF45AF20E4B716800207D74 /* VertexTriangleAdjacency.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VertexTriangleAdjacency.h; sourceTree = "<group>"; };
1547 3AF45AF30E4B716800207D74 /* Win32DebugLogStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Win32DebugLogStream.h; sourceTree = "<group>"; };
15482238 3AF45AF40E4B716800207D74 /* XFileHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFileHelper.h; sourceTree = "<group>"; };
15492239 3AF45AF50E4B716800207D74 /* XFileImporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XFileImporter.cpp; sourceTree = "<group>"; };
15502240 3AF45AF60E4B716800207D74 /* XFileImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XFileImporter.h; sourceTree = "<group>"; };
15602250 7411B17111416E2500BCD793 /* MS3DLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MS3DLoader.h; path = ../../code/MS3DLoader.h; sourceTree = SOURCE_ROOT; };
15612251 7411B18B11416EBC00BCD793 /* UnrealLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = UnrealLoader.cpp; path = ../../code/UnrealLoader.cpp; sourceTree = SOURCE_ROOT; };
15622252 7411B18C11416EBC00BCD793 /* UnrealLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UnrealLoader.h; path = ../../code/UnrealLoader.h; sourceTree = SOURCE_ROOT; };
1563 7411B19711416EF400BCD793 /* FileSystemFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FileSystemFilter.h; path = ../../code/FileSystemFilter.h; sourceTree = SOURCE_ROOT; };
1564 7411B19811416EF400BCD793 /* GenericProperty.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GenericProperty.h; path = ../../code/GenericProperty.h; sourceTree = SOURCE_ROOT; };
1565 7411B19911416EF400BCD793 /* MemoryIOWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MemoryIOWrapper.h; path = ../../code/MemoryIOWrapper.h; sourceTree = SOURCE_ROOT; };
1566 7411B19A11416EF400BCD793 /* OptimizeGraph.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OptimizeGraph.cpp; path = ../../code/OptimizeGraph.cpp; sourceTree = SOURCE_ROOT; };
1567 7411B19B11416EF400BCD793 /* OptimizeGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OptimizeGraph.h; path = ../../code/OptimizeGraph.h; sourceTree = SOURCE_ROOT; };
1568 7411B19C11416EF400BCD793 /* OptimizeMeshes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = OptimizeMeshes.cpp; path = ../../code/OptimizeMeshes.cpp; sourceTree = SOURCE_ROOT; };
1569 7411B19D11416EF400BCD793 /* OptimizeMeshes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OptimizeMeshes.h; path = ../../code/OptimizeMeshes.h; sourceTree = SOURCE_ROOT; };
1570 7411B19E11416EF400BCD793 /* ProcessHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ProcessHelper.h; path = ../../code/ProcessHelper.h; sourceTree = SOURCE_ROOT; };
1571 7411B19F11416EF400BCD793 /* StdOStreamLogStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StdOStreamLogStream.h; path = ../../code/StdOStreamLogStream.h; sourceTree = SOURCE_ROOT; };
1572 7411B1A011416EF400BCD793 /* StreamReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = StreamReader.h; path = ../../code/StreamReader.h; sourceTree = SOURCE_ROOT; };
1573 7411B1A111416EF400BCD793 /* Subdivision.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Subdivision.cpp; path = ../../code/Subdivision.cpp; sourceTree = SOURCE_ROOT; };
1574 7411B1A211416EF400BCD793 /* Subdivision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Subdivision.h; path = ../../code/Subdivision.h; sourceTree = SOURCE_ROOT; };
1575 7411B1A311416EF400BCD793 /* TargetAnimation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TargetAnimation.cpp; path = ../../code/TargetAnimation.cpp; sourceTree = SOURCE_ROOT; };
1576 7411B1A411416EF400BCD793 /* TargetAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TargetAnimation.h; path = ../../code/TargetAnimation.h; sourceTree = SOURCE_ROOT; };
1577 7411B1A511416EF400BCD793 /* Vertex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Vertex.h; path = ../../code/Vertex.h; sourceTree = SOURCE_ROOT; };
1578 7437C950113F18C70067B9B9 /* foreach.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = foreach.hpp; path = ../../code/BoostWorkaround/boost/foreach.hpp; sourceTree = SOURCE_ROOT; };
1579 7437C951113F18C70067B9B9 /* format.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = format.hpp; path = ../../code/BoostWorkaround/boost/format.hpp; sourceTree = SOURCE_ROOT; };
1580 7437C953113F18C70067B9B9 /* common_factor_rt.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = common_factor_rt.hpp; path = ../../code/BoostWorkaround/boost/math/common_factor_rt.hpp; sourceTree = SOURCE_ROOT; };
1581 7437C954113F18C70067B9B9 /* scoped_array.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = scoped_array.hpp; path = ../../code/BoostWorkaround/boost/scoped_array.hpp; sourceTree = SOURCE_ROOT; };
1582 7437C955113F18C70067B9B9 /* scoped_ptr.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = scoped_ptr.hpp; path = ../../code/BoostWorkaround/boost/scoped_ptr.hpp; sourceTree = SOURCE_ROOT; };
1583 7437C956113F18C70067B9B9 /* static_assert.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = static_assert.hpp; path = ../../code/BoostWorkaround/boost/static_assert.hpp; sourceTree = SOURCE_ROOT; };
1584 7437C958113F18C70067B9B9 /* tuple.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = tuple.hpp; path = ../../code/BoostWorkaround/boost/tuple/tuple.hpp; sourceTree = SOURCE_ROOT; };
15852253 74C9BB4911ACBB1000AF885C /* BlenderDNA.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BlenderDNA.cpp; path = ../../code/BlenderDNA.cpp; sourceTree = SOURCE_ROOT; };
15862254 74C9BB4A11ACBB1000AF885C /* BlenderDNA.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlenderDNA.h; path = ../../code/BlenderDNA.h; sourceTree = SOURCE_ROOT; };
15872255 74C9BB4B11ACBB1000AF885C /* BlenderDNA.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = BlenderDNA.inl; path = ../../code/BlenderDNA.inl; sourceTree = SOURCE_ROOT; };
15902258 74C9BB4E11ACBB1000AF885C /* BlenderScene.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BlenderScene.cpp; path = ../../code/BlenderScene.cpp; sourceTree = SOURCE_ROOT; };
15912259 74C9BB4F11ACBB1000AF885C /* BlenderScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlenderScene.h; path = ../../code/BlenderScene.h; sourceTree = SOURCE_ROOT; };
15922260 74C9BB5011ACBB1000AF885C /* BlenderSceneGen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlenderSceneGen.h; path = ../../code/BlenderSceneGen.h; sourceTree = SOURCE_ROOT; };
1593 74C9BB6F11ACBB3600AF885C /* pointer_cast.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = pointer_cast.hpp; path = ../../code/BoostWorkaround/boost/pointer_cast.hpp; sourceTree = SOURCE_ROOT; };
1594 74C9BB7011ACBB3600AF885C /* shared_array.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = shared_array.hpp; path = ../../code/BoostWorkaround/boost/shared_array.hpp; sourceTree = SOURCE_ROOT; };
1595 74C9BB7111ACBB3600AF885C /* shared_ptr.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = shared_ptr.hpp; path = ../../code/BoostWorkaround/boost/shared_ptr.hpp; sourceTree = SOURCE_ROOT; };
1596 74C9BB7C11ACBB7800AF885C /* MakeVerboseFormat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MakeVerboseFormat.cpp; path = ../../code/MakeVerboseFormat.cpp; sourceTree = SOURCE_ROOT; };
1597 74C9BB7D11ACBB7800AF885C /* MakeVerboseFormat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MakeVerboseFormat.h; path = ../../code/MakeVerboseFormat.h; sourceTree = SOURCE_ROOT; };
15982261 74C9BB8611ACBB9900AF885C /* AssimpPCH.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = AssimpPCH.cpp; path = ../../code/AssimpPCH.cpp; sourceTree = SOURCE_ROOT; };
15992262 74C9BB8711ACBB9900AF885C /* AssimpPCH.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AssimpPCH.h; path = ../../code/AssimpPCH.h; sourceTree = SOURCE_ROOT; };
16002263 74C9BB9311ACBBBC00AF885C /* COBLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = COBLoader.cpp; path = ../../code/COBLoader.cpp; sourceTree = SOURCE_ROOT; };
16012264 74C9BB9411ACBBBC00AF885C /* COBLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = COBLoader.h; path = ../../code/COBLoader.h; sourceTree = SOURCE_ROOT; };
16022265 74C9BB9511ACBBBC00AF885C /* COBScene.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = COBScene.h; path = ../../code/COBScene.h; sourceTree = SOURCE_ROOT; };
16032266 74C9BBB311ACBC2600AF885C /* revision.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = revision.h; path = ../../revision.h; sourceTree = SOURCE_ROOT; };
1604 74C9BBBB11ACBC6C00AF885C /* Exceptional.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Exceptional.h; path = ../../code/Exceptional.h; sourceTree = SOURCE_ROOT; };
1605 74C9BBBC11ACBC6C00AF885C /* LineSplitter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LineSplitter.h; path = ../../code/LineSplitter.h; sourceTree = SOURCE_ROOT; };
1606 74C9BBBD11ACBC6C00AF885C /* MD4FileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MD4FileData.h; path = ../../code/MD4FileData.h; sourceTree = SOURCE_ROOT; };
1607 74C9BBBE11ACBC6C00AF885C /* TinyFormatter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TinyFormatter.h; path = ../../code/TinyFormatter.h; sourceTree = SOURCE_ROOT; };
16082267 8E7ABBA1127E0F1A00512ED1 /* Q3BSPFileData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Q3BSPFileData.h; path = ../../code/Q3BSPFileData.h; sourceTree = SOURCE_ROOT; };
16092268 8E7ABBA2127E0F1A00512ED1 /* Q3BSPFileImporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Q3BSPFileImporter.cpp; path = ../../code/Q3BSPFileImporter.cpp; sourceTree = SOURCE_ROOT; };
16102269 8E7ABBA3127E0F1A00512ED1 /* Q3BSPFileImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Q3BSPFileImporter.h; path = ../../code/Q3BSPFileImporter.h; sourceTree = SOURCE_ROOT; };
16172276 8E7ABBCE127E0F3800512ED1 /* BlenderIntermediate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlenderIntermediate.h; path = ../../code/BlenderIntermediate.h; sourceTree = SOURCE_ROOT; };
16182277 8E7ABBCF127E0F3800512ED1 /* BlenderModifier.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = BlenderModifier.cpp; path = ../../code/BlenderModifier.cpp; sourceTree = SOURCE_ROOT; };
16192278 8E7ABBD0127E0F3800512ED1 /* BlenderModifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BlenderModifier.h; path = ../../code/BlenderModifier.h; sourceTree = SOURCE_ROOT; };
1620 8E7ABBDF127E0FA400512ED1 /* assbin_chunks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = assbin_chunks.h; sourceTree = "<group>"; };
1621 8E7ABBE0127E0FA400512ED1 /* DefaultProgressHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DefaultProgressHandler.h; sourceTree = "<group>"; };
1622 8E7ABBE1127E0FA400512ED1 /* Profiler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Profiler.h; sourceTree = "<group>"; };
1623 8E7ABBE2127E0FA400512ED1 /* pstdint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pstdint.h; sourceTree = "<group>"; };
16242279 8E8DEE4B127E2B78005EF64D /* ConvertUTF.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ConvertUTF.c; sourceTree = "<group>"; };
16252280 8E8DEE4C127E2B78005EF64D /* ConvertUTF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ConvertUTF.h; sourceTree = "<group>"; };
16262281 8E8DEE4F127E2B78005EF64D /* CXMLReaderImpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CXMLReaderImpl.h; sourceTree = "<group>"; };
16352290 8E8DEE59127E2B78005EF64D /* ioapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ioapi.h; sourceTree = "<group>"; };
16362291 8E8DEE5A127E2B78005EF64D /* unzip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = unzip.c; sourceTree = "<group>"; };
16372292 8E8DEE5B127E2B78005EF64D /* unzip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unzip.h; sourceTree = "<group>"; };
1638 8E8DEEA3127E2D59005EF64D /* libassimp.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libassimp.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
1639 8E8DEEA4127E2D59005EF64D /* libassimp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libassimp.a; sourceTree = BUILT_PRODUCTS_DIR; };
1640 8E8DEEA5127E2D59005EF64D /* libassimp.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libassimp.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
1641 8E8DEEA6127E2D59005EF64D /* libassimp.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libassimp.a; sourceTree = BUILT_PRODUCTS_DIR; };
1642 F90BAFB90F5DD68F00124155 /* libboost_date_time-xgcc40-mt.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libboost_date_time-xgcc40-mt.a"; path = "/usr/local/lib/libboost_date_time-xgcc40-mt.a"; sourceTree = "<absolute>"; };
1643 F90BAFBB0F5DD6A800124155 /* libboost_thread-xgcc40-mt.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = "libboost_thread-xgcc40-mt.a"; path = "/usr/local/lib/libboost_thread-xgcc40-mt.a"; sourceTree = "<absolute>"; };
2293 8E8DEEA3127E2D59005EF64D /* libassimpd.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libassimpd.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
2294 8E8DEEA4127E2D59005EF64D /* libassimpd.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libassimpd.a; sourceTree = BUILT_PRODUCTS_DIR; };
2295 8E8DEEA5127E2D59005EF64D /* libassimpd.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libassimpd.dylib; sourceTree = BUILT_PRODUCTS_DIR; };
2296 8E8DEEA6127E2D59005EF64D /* libassimpd.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libassimpd.a; sourceTree = BUILT_PRODUCTS_DIR; };
2297 B919763F163AEA54009C397B /* libassimp-ios.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libassimp-ios.a"; sourceTree = BUILT_PRODUCTS_DIR; };
16442298 F90BAFD00F5DD87000124155 /* ACLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ACLoader.cpp; sourceTree = "<group>"; };
16452299 F90BAFD10F5DD87000124155 /* ACLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ACLoader.h; sourceTree = "<group>"; };
16462300 F90BAFD90F5DD90800124155 /* IRRLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IRRLoader.cpp; sourceTree = "<group>"; };
16492303 F90BAFDC0F5DD90800124155 /* IRRMeshLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IRRMeshLoader.h; sourceTree = "<group>"; };
16502304 F90BAFDD0F5DD90800124155 /* IRRShared.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IRRShared.cpp; sourceTree = "<group>"; };
16512305 F90BAFDE0F5DD90800124155 /* IRRShared.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IRRShared.h; sourceTree = "<group>"; };
1652 F90BAFE80F5DD93600124155 /* ColladaHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColladaHelper.h; sourceTree = "<group>"; };
1653 F90BAFE90F5DD93600124155 /* ColladaLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ColladaLoader.cpp; sourceTree = "<group>"; };
1654 F90BAFEA0F5DD93600124155 /* ColladaLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColladaLoader.h; sourceTree = "<group>"; };
1655 F90BAFEB0F5DD93600124155 /* ColladaParser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ColladaParser.cpp; sourceTree = "<group>"; };
1656 F90BAFEC0F5DD93600124155 /* ColladaParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ColladaParser.h; sourceTree = "<group>"; };
16572306 F90BAFF50F5DD96100124155 /* NFFLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NFFLoader.h; sourceTree = "<group>"; };
16582307 F90BAFF60F5DD96100124155 /* NFFLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NFFLoader.cpp; sourceTree = "<group>"; };
1659 F90BAFFB0F5DD9A000124155 /* SGSpatialSort.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SGSpatialSort.h; sourceTree = "<group>"; };
1660 F90BAFFC0F5DD9A000124155 /* SGSpatialSort.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SGSpatialSort.cpp; sourceTree = "<group>"; };
16612308 F90BB0060F5DD9DD00124155 /* Q3DLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Q3DLoader.cpp; sourceTree = "<group>"; };
16622309 F90BB0070F5DD9DD00124155 /* Q3DLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Q3DLoader.h; sourceTree = "<group>"; };
16632310 F90BB00C0F5DD9F400124155 /* BVHLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BVHLoader.h; sourceTree = "<group>"; };
16722319 F90BB02F0F5DDAB500124155 /* TerragenLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TerragenLoader.h; sourceTree = "<group>"; };
16732320 F90BB0300F5DDAB500124155 /* TerragenLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TerragenLoader.cpp; sourceTree = "<group>"; };
16742321 F90BB0360F5DDB1B00124155 /* irrXMLWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = irrXMLWrapper.h; sourceTree = "<group>"; };
1675 F90BB0390F5DDB3200124155 /* ScenePreprocessor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScenePreprocessor.h; sourceTree = "<group>"; };
1676 F90BB03A0F5DDB3200124155 /* SceneCombiner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SceneCombiner.cpp; sourceTree = "<group>"; };
1677 F90BB03B0F5DDB3200124155 /* SceneCombiner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SceneCombiner.h; sourceTree = "<group>"; };
1678 F90BB03C0F5DDB3200124155 /* ScenePreprocessor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScenePreprocessor.cpp; sourceTree = "<group>"; };
1679 F90BB0420F5DDB4600124155 /* SortByPTypeProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SortByPTypeProcess.h; sourceTree = "<group>"; };
1680 F90BB0430F5DDB4600124155 /* SortByPTypeProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SortByPTypeProcess.cpp; sourceTree = "<group>"; };
1681 F90BB0470F5DDB6100124155 /* FindDegenerates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FindDegenerates.h; sourceTree = "<group>"; };
1682 F90BB0480F5DDB6100124155 /* FindDegenerates.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FindDegenerates.cpp; sourceTree = "<group>"; };
1683 F90BB04C0F5DDB8D00124155 /* ComputeUVMappingProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ComputeUVMappingProcess.h; sourceTree = "<group>"; };
1684 F90BB04D0F5DDB8D00124155 /* ComputeUVMappingProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ComputeUVMappingProcess.cpp; sourceTree = "<group>"; };
1685 F90BB0510F5DDBA800124155 /* StandardShapes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StandardShapes.h; sourceTree = "<group>"; };
1686 F90BB0520F5DDBA800124155 /* StandardShapes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StandardShapes.cpp; sourceTree = "<group>"; };
1687 F90BB0560F5DDBBF00124155 /* FindInstancesProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FindInstancesProcess.h; sourceTree = "<group>"; };
1688 F90BB0570F5DDBBF00124155 /* FindInstancesProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FindInstancesProcess.cpp; sourceTree = "<group>"; };
1689 F90BB05A0F5DDBCB00124155 /* RemoveVCProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoveVCProcess.h; sourceTree = "<group>"; };
1690 F90BB05B0F5DDBCB00124155 /* RemoveVCProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemoveVCProcess.cpp; sourceTree = "<group>"; };
1691 F90BB05F0F5DDBE600124155 /* FindInvalidDataProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FindInvalidDataProcess.cpp; sourceTree = "<group>"; };
1692 F90BB0600F5DDBE600124155 /* FindInvalidDataProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FindInvalidDataProcess.h; sourceTree = "<group>"; };
1693 F90BB0640F5DDC0700124155 /* SkeletonMeshBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkeletonMeshBuilder.h; sourceTree = "<group>"; };
1694 F90BB0650F5DDC0700124155 /* SkeletonMeshBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SkeletonMeshBuilder.cpp; sourceTree = "<group>"; };
1695 F90BB0690F5DDC1E00124155 /* SmoothingGroups.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmoothingGroups.h; sourceTree = "<group>"; };
1696 F90BB06A0F5DDC1E00124155 /* SmoothingGroups.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = SmoothingGroups.inl; sourceTree = "<group>"; };
1697 F90BB06D0F5DDCFC00124155 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; sourceTree = "<absolute>"; };
16982322 F90BB0870F5DDE0700124155 /* B3DImporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = B3DImporter.h; path = ../../code/B3DImporter.h; sourceTree = SOURCE_ROOT; };
16992323 F90BB0880F5DDE0700124155 /* B3DImporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = B3DImporter.cpp; path = ../../code/B3DImporter.cpp; sourceTree = SOURCE_ROOT; };
1700 F9606FF2154364E5004D91DD /* ProcessHelper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProcessHelper.cpp; sourceTree = "<group>"; };
17012324 F9607047154366AB004D91DD /* adler32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = adler32.c; sourceTree = "<group>"; };
17022325 F9607049154366AB004D91DD /* compress.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = compress.c; sourceTree = "<group>"; };
17032326 F960704A154366AB004D91DD /* crc32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = crc32.c; sourceTree = "<group>"; };
17352358 F96070DD1543675E004D91DD /* sweep_context.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sweep_context.cc; sourceTree = "<group>"; };
17362359 F96070DE1543675E004D91DD /* sweep_context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sweep_context.h; sourceTree = "<group>"; };
17372360 F97BA03515439DB3009EB9DD /* ai_assert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ai_assert.h; sourceTree = "<group>"; };
1738 F97BA06615439FC3009EB9DD /* IFCCurve.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCCurve.cpp; path = ../../code/IFCCurve.cpp; sourceTree = SOURCE_ROOT; };
1739 F97BA06715439FC3009EB9DD /* IFCGeometry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCGeometry.cpp; path = ../../code/IFCGeometry.cpp; sourceTree = SOURCE_ROOT; };
1740 F97BA06815439FC3009EB9DD /* IFCLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCLoader.cpp; path = ../../code/IFCLoader.cpp; sourceTree = SOURCE_ROOT; };
1741 F97BA06915439FC3009EB9DD /* IFCLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IFCLoader.h; path = ../../code/IFCLoader.h; sourceTree = SOURCE_ROOT; };
1742 F97BA06A15439FC3009EB9DD /* IFCMaterial.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCMaterial.cpp; path = ../../code/IFCMaterial.cpp; sourceTree = SOURCE_ROOT; };
1743 F97BA06B15439FC3009EB9DD /* IFCProfile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCProfile.cpp; path = ../../code/IFCProfile.cpp; sourceTree = SOURCE_ROOT; };
1744 F97BA06C15439FC3009EB9DD /* IFCReaderGen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCReaderGen.cpp; path = ../../code/IFCReaderGen.cpp; sourceTree = SOURCE_ROOT; };
1745 F97BA06D15439FC3009EB9DD /* IFCReaderGen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IFCReaderGen.h; path = ../../code/IFCReaderGen.h; sourceTree = SOURCE_ROOT; };
1746 F97BA06E15439FC3009EB9DD /* IFCUtil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = IFCUtil.cpp; path = ../../code/IFCUtil.cpp; sourceTree = SOURCE_ROOT; };
1747 F97BA06F15439FC3009EB9DD /* IFCUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = IFCUtil.h; path = ../../code/IFCUtil.h; sourceTree = SOURCE_ROOT; };
1748 F99A9EB315436077000682F3 /* BlobIOSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BlobIOSystem.h; sourceTree = "<group>"; };
1749 F99A9EB815436098000682F3 /* lexical_cast.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = lexical_cast.hpp; sourceTree = "<group>"; };
1750 F99A9EBD154360A0000682F3 /* make_shared.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = make_shared.hpp; sourceTree = "<group>"; };
1751 F99A9EC2154360A5000682F3 /* noncopyable.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = noncopyable.hpp; sourceTree = "<group>"; };
1752 F99A9EC7154360B5000682F3 /* timer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = timer.hpp; sourceTree = "<group>"; };
1753 F99A9ECC154360E2000682F3 /* CInterfaceIOWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CInterfaceIOWrapper.h; sourceTree = "<group>"; };
1754 F99A9ED115436125000682F3 /* DeboneProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeboneProcess.cpp; sourceTree = "<group>"; };
1755 F99A9ED215436125000682F3 /* DeboneProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeboneProcess.h; sourceTree = "<group>"; };
1756 F99A9F17154361AD000682F3 /* ImporterRegistry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImporterRegistry.cpp; sourceTree = "<group>"; };
1757 F99A9F1C154361D4000682F3 /* LogAux.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LogAux.h; sourceTree = "<group>"; };
1758 F99A9F2615436207000682F3 /* M3Importer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = M3Importer.cpp; path = ../../code/M3Importer.cpp; sourceTree = SOURCE_ROOT; };
1759 F99A9F2715436207000682F3 /* M3Importer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = M3Importer.h; path = ../../code/M3Importer.h; sourceTree = SOURCE_ROOT; };
17602361 F99A9F3015436269000682F3 /* PlyExporter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PlyExporter.cpp; sourceTree = "<group>"; };
17612362 F99A9F3115436269000682F3 /* PlyExporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlyExporter.h; sourceTree = "<group>"; };
1762 F99A9F3A15436286000682F3 /* PolyTools.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PolyTools.h; sourceTree = "<group>"; };
1763 F99A9F3F1543629F000682F3 /* PostStepRegistry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PostStepRegistry.cpp; sourceTree = "<group>"; };
1764 F99A9F44154362DE000682F3 /* ScenePrivate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScenePrivate.h; sourceTree = "<group>"; };
1765 F99A9F4915436304000682F3 /* SplitByBoneCountProcess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SplitByBoneCountProcess.cpp; sourceTree = "<group>"; };
1766 F99A9F4A15436304000682F3 /* SplitByBoneCountProcess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SplitByBoneCountProcess.h; sourceTree = "<group>"; };
1767 F99A9F5915436323000682F3 /* STEPFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = STEPFile.h; path = ../../code/STEPFile.h; sourceTree = SOURCE_ROOT; };
1768 F99A9F5A15436323000682F3 /* STEPFileReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = STEPFileReader.cpp; path = ../../code/STEPFileReader.cpp; sourceTree = SOURCE_ROOT; };
1769 F99A9F5B15436323000682F3 /* STEPFileReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = STEPFileReader.h; path = ../../code/STEPFileReader.h; sourceTree = SOURCE_ROOT; };
17702363 F9BA8B751543268400E63FFE /* anim.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = anim.h; sourceTree = "<group>"; };
17712364 F9BA8B771543268400E63FFE /* camera.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = camera.h; sourceTree = "<group>"; };
17722365 F9BA8B781543268400E63FFE /* cexport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cexport.h; sourceTree = "<group>"; };
18202413 isa = PBXFrameworksBuildPhase;
18212414 buildActionMask = 2147483647;
18222415 files = (
1823 745FF8AE113ECB080020C31B /* libz.dylib in Frameworks */,
2416 2BA44E13170862E400C78A66 /* libstdc++.dylib in Frameworks */,
18242417 );
18252418 runOnlyForDeploymentPostprocessing = 0;
18262419 };
18282421 isa = PBXFrameworksBuildPhase;
18292422 buildActionMask = 2147483647;
18302423 files = (
1831 745FF991113ECC660020C31B /* libz.dylib in Frameworks */,
2424 2BA44E14170862EA00C78A66 /* libstdc++.dylib in Frameworks */,
2425 );
2426 runOnlyForDeploymentPostprocessing = 0;
2427 };
2428 B91975B4163AEA54009C397B /* Frameworks */ = {
2429 isa = PBXFrameworksBuildPhase;
2430 buildActionMask = 2147483647;
2431 files = (
2432 2BA44E1A1708680600C78A66 /* libstdc++.dylib in Frameworks */,
18322433 );
18332434 runOnlyForDeploymentPostprocessing = 0;
18342435 };
18362437 isa = PBXFrameworksBuildPhase;
18372438 buildActionMask = 2147483647;
18382439 files = (
1839 F90BAFBA0F5DD68F00124155 /* libboost_date_time-xgcc40-mt.a in Frameworks */,
1840 F90BAFBC0F5DD6A800124155 /* libboost_thread-xgcc40-mt.a in Frameworks */,
1841 F90BB06E0F5DDCFC00124155 /* libz.dylib in Frameworks */,
2440 2BA44E11170862D800C78A66 /* libstdc++.dylib in Frameworks */,
18422441 );
18432442 runOnlyForDeploymentPostprocessing = 0;
18442443 };
18462445 isa = PBXFrameworksBuildPhase;
18472446 buildActionMask = 2147483647;
18482447 files = (
1849 F962E8880F5DE6B4009A5495 /* libboost_date_time-xgcc40-mt.a in Frameworks */,
1850 F962E8890F5DE6B4009A5495 /* libboost_thread-xgcc40-mt.a in Frameworks */,
1851 F962E88A0F5DE6B4009A5495 /* libz.dylib in Frameworks */,
2448 2BA44E12170862DE00C78A66 /* libstdc++.dylib in Frameworks */,
18522449 );
18532450 runOnlyForDeploymentPostprocessing = 0;
18542451 };
18582455 034768DDFF38A45A11DB9C8B /* Products */ = {
18592456 isa = PBXGroup;
18602457 children = (
1861 8E8DEEA3127E2D59005EF64D /* libassimp.dylib */,
1862 8E8DEEA4127E2D59005EF64D /* libassimp.a */,
1863 8E8DEEA5127E2D59005EF64D /* libassimp.dylib */,
1864 8E8DEEA6127E2D59005EF64D /* libassimp.a */,
2458 8E8DEEA3127E2D59005EF64D /* libassimpd.dylib */,
2459 8E8DEEA4127E2D59005EF64D /* libassimpd.a */,
2460 8E8DEEA5127E2D59005EF64D /* libassimpd.dylib */,
2461 8E8DEEA6127E2D59005EF64D /* libassimpd.a */,
2462 B919763F163AEA54009C397B /* libassimp-ios.a */,
18652463 );
18662464 name = Products;
18672465 sourceTree = "<group>";
18802478 0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = {
18812479 isa = PBXGroup;
18822480 children = (
1883 F90BB06D0F5DDCFC00124155 /* libz.dylib */,
1884 F90BAFBB0F5DD6A800124155 /* libboost_thread-xgcc40-mt.a */,
1885 F90BAFB90F5DD68F00124155 /* libboost_date_time-xgcc40-mt.a */,
2481 2BA44E10170862D800C78A66 /* libstdc++.dylib */,
18862482 );
18872483 name = "External Frameworks and Libraries";
18882484 sourceTree = "<group>";
18902486 08FB77ACFE841707C02AAC07 /* Source */ = {
18912487 isa = PBXGroup;
18922488 children = (
1893 3AF45A850E4B716800207D74 /* code */,
2489 2B7F45621708365100A106A9 /* code */,
18942490 F90BB0830F5DDDC700124155 /* importers */,
18952491 3AF45A520E4B715000207D74 /* include */,
18962492 74C9BB8611ACBB9900AF885C /* AssimpPCH.cpp */,
18982494 74C9BBB311ACBC2600AF885C /* revision.h */,
18992495 );
19002496 name = Source;
2497 sourceTree = "<group>";
2498 };
2499 2B7F45621708365100A106A9 /* code */ = {
2500 isa = PBXGroup;
2501 children = (
2502 2B7F45841708365100A106A9 /* BoostWorkaround */,
2503 2B7F456D1708365100A106A9 /* assbin_chunks.h */,
2504 2B7F456E1708365100A106A9 /* Assimp.cpp */,
2505 2B7F456F1708365100A106A9 /* AssimpCExport.cpp */,
2506 2B7F45741708365100A106A9 /* BaseImporter.cpp */,
2507 2B7F45751708365100A106A9 /* BaseImporter.h */,
2508 2B7F45761708365100A106A9 /* BaseProcess.cpp */,
2509 2B7F45771708365100A106A9 /* BaseProcess.h */,
2510 2B7F45831708365100A106A9 /* BlobIOSystem.h */,
2511 2B7F45991708365100A106A9 /* ByteSwap.h */,
2512 2B7F459A1708365100A106A9 /* CalcTangentsProcess.cpp */,
2513 2B7F459B1708365100A106A9 /* CalcTangentsProcess.h */,
2514 2B7F459C1708365100A106A9 /* CInterfaceIOWrapper.h */,
2515 2B7F45A81708365100A106A9 /* ComputeUVMappingProcess.cpp */,
2516 2B7F45A91708365100A106A9 /* ComputeUVMappingProcess.h */,
2517 2B7F45AA1708365100A106A9 /* ConvertToLHProcess.cpp */,
2518 2B7F45AB1708365100A106A9 /* ConvertToLHProcess.h */,
2519 2B7F45AE1708365100A106A9 /* DeboneProcess.cpp */,
2520 2B7F45AF1708365100A106A9 /* DeboneProcess.h */,
2521 2B7F45B01708365100A106A9 /* DefaultIOStream.cpp */,
2522 2B7F45B11708365100A106A9 /* DefaultIOStream.h */,
2523 2B7F45B21708365100A106A9 /* DefaultIOSystem.cpp */,
2524 2B7F45B31708365100A106A9 /* DefaultIOSystem.h */,
2525 2B7F45B41708365100A106A9 /* DefaultLogger.cpp */,
2526 2B7F45B51708365100A106A9 /* DefaultProgressHandler.h */,
2527 2B7F45B91708365100A106A9 /* Exceptional.h */,
2528 2B7F45BA1708365100A106A9 /* Exporter.cpp */,
2529 2B7F45BB1708365100A106A9 /* fast_atof.h */,
2530 2B7F45BC1708365100A106A9 /* FBXAnimation.cpp */,
2531 2B7F45BD1708365100A106A9 /* FBXBinaryTokenizer.cpp */,
2532 2B7F45BE1708365100A106A9 /* FBXCompileConfig.h */,
2533 2B7F45BF1708365100A106A9 /* FBXConverter.cpp */,
2534 2B7F45C01708365100A106A9 /* FBXConverter.h */,
2535 2B7F45C11708365100A106A9 /* FBXDeformer.cpp */,
2536 2B7F45C21708365100A106A9 /* FBXDocument.cpp */,
2537 2B7F45C31708365100A106A9 /* FBXDocument.h */,
2538 2B7F45C41708365100A106A9 /* FBXDocumentUtil.cpp */,
2539 2B7F45C51708365100A106A9 /* FBXDocumentUtil.h */,
2540 2B7F45C61708365100A106A9 /* FBXImporter.cpp */,
2541 2B7F45C71708365100A106A9 /* FBXImporter.h */,
2542 2B7F45C81708365100A106A9 /* FBXImportSettings.h */,
2543 2B7F45C91708365100A106A9 /* FBXMaterial.cpp */,
2544 2B7F45CA1708365100A106A9 /* FBXMeshGeometry.cpp */,
2545 2B7F45CB1708365100A106A9 /* FBXModel.cpp */,
2546 2B7F45CC1708365100A106A9 /* FBXNodeAttribute.cpp */,
2547 2B7F45CD1708365100A106A9 /* FBXParser.cpp */,
2548 2B7F45CE1708365100A106A9 /* FBXParser.h */,
2549 2B7F45CF1708365100A106A9 /* FBXProperties.cpp */,
2550 2B7F45D01708365100A106A9 /* FBXProperties.h */,
2551 2B7F45D11708365100A106A9 /* FBXTokenizer.cpp */,
2552 2B7F45D21708365100A106A9 /* FBXTokenizer.h */,
2553 2B7F45D31708365100A106A9 /* FBXUtil.cpp */,
2554 2B7F45D41708365100A106A9 /* FBXUtil.h */,
2555 2B7F45D51708365100A106A9 /* FileLogStream.h */,
2556 2B7F45D61708365100A106A9 /* FileSystemFilter.h */,
2557 2B7F45D71708365100A106A9 /* FindDegenerates.cpp */,
2558 2B7F45D81708365100A106A9 /* FindDegenerates.h */,
2559 2B7F45D91708365100A106A9 /* FindInstancesProcess.cpp */,
2560 2B7F45DA1708365100A106A9 /* FindInstancesProcess.h */,
2561 2B7F45DB1708365100A106A9 /* FindInvalidDataProcess.cpp */,
2562 2B7F45DC1708365100A106A9 /* FindInvalidDataProcess.h */,
2563 2B7F45DD1708365100A106A9 /* FixNormalsStep.cpp */,
2564 2B7F45DE1708365100A106A9 /* FixNormalsStep.h */,
2565 2B7F45DF1708365100A106A9 /* GenericProperty.h */,
2566 2B7F45E01708365100A106A9 /* GenFaceNormalsProcess.cpp */,
2567 2B7F45E11708365100A106A9 /* GenFaceNormalsProcess.h */,
2568 2B7F45E21708365100A106A9 /* GenVertexNormalsProcess.cpp */,
2569 2B7F45E31708365100A106A9 /* GenVertexNormalsProcess.h */,
2570 2B7F45E51708365100A106A9 /* Hash.h */,
2571 2B7F45F51708365100A106A9 /* IFF.h */,
2572 2B7F45F61708365100A106A9 /* Importer.cpp */,
2573 2B7F45F71708365100A106A9 /* Importer.h */,
2574 2B7F45F81708365100A106A9 /* ImporterRegistry.cpp */,
2575 2B7F45F91708365100A106A9 /* ImproveCacheLocality.cpp */,
2576 2B7F45FA1708365100A106A9 /* ImproveCacheLocality.h */,
2577 2B7F46021708365100A106A9 /* JoinVerticesProcess.cpp */,
2578 2B7F46031708365100A106A9 /* JoinVerticesProcess.h */,
2579 2B7F46041708365100A106A9 /* LimitBoneWeightsProcess.cpp */,
2580 2B7F46051708365100A106A9 /* LimitBoneWeightsProcess.h */,
2581 2B7F46061708365100A106A9 /* LineSplitter.h */,
2582 2B7F46071708365100A106A9 /* LogAux.h */,
2583 2B7F46141708365200A106A9 /* MakeVerboseFormat.cpp */,
2584 2B7F46151708365200A106A9 /* MakeVerboseFormat.h */,
2585 2B7F46161708365200A106A9 /* MaterialSystem.cpp */,
2586 2B7F46171708365200A106A9 /* MaterialSystem.h */,
2587 2B7F461F1708365200A106A9 /* MD4FileData.h */,
2588 2B7F462D1708365200A106A9 /* MemoryIOWrapper.h */,
2589 2B7F46461708365200A106A9 /* OptimizeGraph.cpp */,
2590 2B7F46471708365200A106A9 /* OptimizeGraph.h */,
2591 2B7F46481708365200A106A9 /* OptimizeMeshes.cpp */,
2592 2B7F46491708365200A106A9 /* OptimizeMeshes.h */,
2593 2B7F464A1708365200A106A9 /* ParsingUtils.h */,
2594 2B7F46511708365200A106A9 /* PolyTools.h */,
2595 2B7F46521708365200A106A9 /* PostStepRegistry.cpp */,
2596 2B7F46531708365200A106A9 /* PretransformVertices.cpp */,
2597 2B7F46541708365200A106A9 /* PretransformVertices.h */,
2598 2B7F46551708365200A106A9 /* ProcessHelper.cpp */,
2599 2B7F46561708365200A106A9 /* ProcessHelper.h */,
2600 2B7F46571708365200A106A9 /* Profiler.h */,
2601 2B7F46581708365200A106A9 /* pstdint.h */,
2602 2B7F46621708365200A106A9 /* qnan.h */,
2603 2B7F46651708365200A106A9 /* RemoveComments.cpp */,
2604 2B7F46661708365200A106A9 /* RemoveComments.h */,
2605 2B7F46671708365200A106A9 /* RemoveRedundantMaterials.cpp */,
2606 2B7F46681708365200A106A9 /* RemoveRedundantMaterials.h */,
2607 2B7F46691708365200A106A9 /* RemoveVCProcess.cpp */,
2608 2B7F466A1708365200A106A9 /* RemoveVCProcess.h */,
2609 2B7F466E1708365200A106A9 /* SceneCombiner.cpp */,
2610 2B7F466F1708365200A106A9 /* SceneCombiner.h */,
2611 2B7F46701708365200A106A9 /* ScenePreprocessor.cpp */,
2612 2B7F46711708365200A106A9 /* ScenePreprocessor.h */,
2613 2B7F46721708365200A106A9 /* ScenePrivate.h */,
2614 2B7F46731708365200A106A9 /* SGSpatialSort.cpp */,
2615 2B7F46741708365200A106A9 /* SGSpatialSort.h */,
2616 2B7F46751708365200A106A9 /* SkeletonMeshBuilder.cpp */,
2617 2B7F46761708365200A106A9 /* SkeletonMeshBuilder.h */,
2618 2B7F46791708365200A106A9 /* SmoothingGroups.h */,
2619 2B7F467A1708365200A106A9 /* SmoothingGroups.inl */,
2620 2B7F467B1708365200A106A9 /* SortByPTypeProcess.cpp */,
2621 2B7F467C1708365200A106A9 /* SortByPTypeProcess.h */,
2622 2B7F467D1708365200A106A9 /* SpatialSort.cpp */,
2623 2B7F467E1708365200A106A9 /* SpatialSort.h */,
2624 2B7F467F1708365200A106A9 /* SplitByBoneCountProcess.cpp */,
2625 2B7F46801708365200A106A9 /* SplitByBoneCountProcess.h */,
2626 2B7F46811708365200A106A9 /* SplitLargeMeshes.cpp */,
2627 2B7F46821708365200A106A9 /* SplitLargeMeshes.h */,
2628 2B7F46831708365200A106A9 /* StandardShapes.cpp */,
2629 2B7F46841708365200A106A9 /* StandardShapes.h */,
2630 2B7F46851708365200A106A9 /* StdOStreamLogStream.h */,
2631 2B7F468F1708365200A106A9 /* StreamReader.h */,
2632 2B7F46901708365200A106A9 /* StringComparison.h */,
2633 2B7F46911708365200A106A9 /* Subdivision.cpp */,
2634 2B7F46921708365200A106A9 /* Subdivision.h */,
2635 2B7F46931708365200A106A9 /* TargetAnimation.cpp */,
2636 2B7F46941708365200A106A9 /* TargetAnimation.h */,
2637 2B7F46971708365200A106A9 /* TextureTransform.cpp */,
2638 2B7F46981708365200A106A9 /* TextureTransform.h */,
2639 2B7F46991708365200A106A9 /* TinyFormatter.h */,
2640 2B7F469A1708365200A106A9 /* TriangulateProcess.cpp */,
2641 2B7F469B1708365200A106A9 /* TriangulateProcess.h */,
2642 2B7F469E1708365200A106A9 /* ValidateDataStructure.cpp */,
2643 2B7F469F1708365200A106A9 /* ValidateDataStructure.h */,
2644 2B7F46A01708365200A106A9 /* Vertex.h */,
2645 2B7F46A11708365200A106A9 /* VertexTriangleAdjacency.cpp */,
2646 2B7F46A21708365200A106A9 /* VertexTriangleAdjacency.h */,
2647 2B7F46A31708365200A106A9 /* Win32DebugLogStream.h */,
2648 );
2649 name = code;
2650 path = ../../code;
2651 sourceTree = "<group>";
2652 };
2653 2B7F45841708365100A106A9 /* BoostWorkaround */ = {
2654 isa = PBXGroup;
2655 children = (
2656 2B7F45851708365100A106A9 /* boost */,
2657 );
2658 path = BoostWorkaround;
2659 sourceTree = "<group>";
2660 };
2661 2B7F45851708365100A106A9 /* boost */ = {
2662 isa = PBXGroup;
2663 children = (
2664 2B7F45861708365100A106A9 /* foreach.hpp */,
2665 2B7F45871708365100A106A9 /* format.hpp */,
2666 2B7F45881708365100A106A9 /* lexical_cast.hpp */,
2667 2B7F45891708365100A106A9 /* LICENSE_1_0.txt */,
2668 2B7F458A1708365100A106A9 /* make_shared.hpp */,
2669 2B7F458B1708365100A106A9 /* math */,
2670 2B7F458D1708365100A106A9 /* noncopyable.hpp */,
2671 2B7F458E1708365100A106A9 /* pointer_cast.hpp */,
2672 2B7F458F1708365100A106A9 /* scoped_array.hpp */,
2673 2B7F45901708365100A106A9 /* scoped_ptr.hpp */,
2674 2B7F45911708365100A106A9 /* shared_array.hpp */,
2675 2B7F45921708365100A106A9 /* shared_ptr.hpp */,
2676 2B7F45931708365100A106A9 /* static_assert.hpp */,
2677 2B7F45941708365100A106A9 /* timer.hpp */,
2678 2B7F45951708365100A106A9 /* tuple */,
2679 );
2680 path = boost;
2681 sourceTree = "<group>";
2682 };
2683 2B7F458B1708365100A106A9 /* math */ = {
2684 isa = PBXGroup;
2685 children = (
2686 2B7F458C1708365100A106A9 /* common_factor_rt.hpp */,
2687 );
2688 path = math;
2689 sourceTree = "<group>";
2690 };
2691 2B7F45951708365100A106A9 /* tuple */ = {
2692 isa = PBXGroup;
2693 children = (
2694 2B7F45961708365100A106A9 /* tuple.hpp */,
2695 );
2696 path = tuple;
19012697 sourceTree = "<group>";
19022698 };
19032699 3AB8A3A70E50D59500606590 /* MDC */ = {
19362732 path = ../../include;
19372733 sourceTree = SOURCE_ROOT;
19382734 };
1939 3AF45A850E4B716800207D74 /* code */ = {
1940 isa = PBXGroup;
1941 children = (
1942 7437C94E113F18C70067B9B9 /* BoostWorkaround */,
1943 8E7ABBDF127E0FA400512ED1 /* assbin_chunks.h */,
1944 3AF45A920E4B716800207D74 /* Assimp.cpp */,
1945 3AF45A930E4B716800207D74 /* BaseImporter.cpp */,
1946 3AF45A940E4B716800207D74 /* BaseImporter.h */,
1947 3AB8A3C30E50D74500606590 /* BaseProcess.cpp */,
1948 3AF45A950E4B716800207D74 /* BaseProcess.h */,
1949 F99A9EB315436077000682F3 /* BlobIOSystem.h */,
1950 3AF45A960E4B716800207D74 /* ByteSwap.h */,
1951 3AF45A970E4B716800207D74 /* CalcTangentsProcess.cpp */,
1952 3AF45A980E4B716800207D74 /* CalcTangentsProcess.h */,
1953 F99A9ECC154360E2000682F3 /* CInterfaceIOWrapper.h */,
1954 F90BB04D0F5DDB8D00124155 /* ComputeUVMappingProcess.cpp */,
1955 F90BB04C0F5DDB8D00124155 /* ComputeUVMappingProcess.h */,
1956 3AF45A990E4B716800207D74 /* ConvertToLHProcess.cpp */,
1957 3AF45A9A0E4B716800207D74 /* ConvertToLHProcess.h */,
1958 F99A9ED115436125000682F3 /* DeboneProcess.cpp */,
1959 F99A9ED215436125000682F3 /* DeboneProcess.h */,
1960 3AF45A9B0E4B716800207D74 /* DefaultIOStream.cpp */,
1961 3AF45A9C0E4B716800207D74 /* DefaultIOStream.h */,
1962 3AF45A9D0E4B716800207D74 /* DefaultIOSystem.cpp */,
1963 3AF45A9E0E4B716800207D74 /* DefaultIOSystem.h */,
1964 3AF45A9F0E4B716800207D74 /* DefaultLogger.cpp */,
1965 8E7ABBE0127E0FA400512ED1 /* DefaultProgressHandler.h */,
1966 74C9BBBB11ACBC6C00AF885C /* Exceptional.h */,
1967 3AF45AA30E4B716800207D74 /* fast_atof.h */,
1968 3AF45AA40E4B716800207D74 /* FileLogStream.h */,
1969 7411B19711416EF400BCD793 /* FileSystemFilter.h */,
1970 F90BB0480F5DDB6100124155 /* FindDegenerates.cpp */,
1971 F90BB0470F5DDB6100124155 /* FindDegenerates.h */,
1972 F90BB0570F5DDBBF00124155 /* FindInstancesProcess.cpp */,
1973 F90BB0560F5DDBBF00124155 /* FindInstancesProcess.h */,
1974 F90BB05F0F5DDBE600124155 /* FindInvalidDataProcess.cpp */,
1975 F90BB0600F5DDBE600124155 /* FindInvalidDataProcess.h */,
1976 3AB8A3B30E50D69D00606590 /* FixNormalsStep.cpp */,
1977 3AB8A3B40E50D69D00606590 /* FixNormalsStep.h */,
1978 7411B19811416EF400BCD793 /* GenericProperty.h */,
1979 3AF45AA50E4B716800207D74 /* GenFaceNormalsProcess.cpp */,
1980 3AF45AA60E4B716800207D74 /* GenFaceNormalsProcess.h */,
1981 3AF45AA70E4B716800207D74 /* GenVertexNormalsProcess.cpp */,
1982 3AF45AA80E4B716800207D74 /* GenVertexNormalsProcess.h */,
1983 3AB8A3CB0E50D7FF00606590 /* Hash.h */,
1984 3AB8A3C90E50D7CC00606590 /* IFF.h */,
1985 3AF45AAD0E4B716800207D74 /* Importer.cpp */,
1986 F99A9F17154361AD000682F3 /* ImporterRegistry.cpp */,
1987 3AF45AAE0E4B716800207D74 /* ImproveCacheLocality.cpp */,
1988 3AF45AAF0E4B716800207D74 /* ImproveCacheLocality.h */,
1989 3AF45AB00E4B716800207D74 /* JoinVerticesProcess.cpp */,
1990 3AF45AB10E4B716800207D74 /* JoinVerticesProcess.h */,
1991 3AF45AB40E4B716800207D74 /* LimitBoneWeightsProcess.cpp */,
1992 3AF45AB50E4B716800207D74 /* LimitBoneWeightsProcess.h */,
1993 74C9BBBC11ACBC6C00AF885C /* LineSplitter.h */,
1994 F99A9F1C154361D4000682F3 /* LogAux.h */,
1995 74C9BB7C11ACBB7800AF885C /* MakeVerboseFormat.cpp */,
1996 74C9BB7D11ACBB7800AF885C /* MakeVerboseFormat.h */,
1997 3AF45AB60E4B716800207D74 /* MaterialSystem.cpp */,
1998 3AF45AB70E4B716800207D74 /* MaterialSystem.h */,
1999 74C9BBBD11ACBC6C00AF885C /* MD4FileData.h */,
2000 7411B19911416EF400BCD793 /* MemoryIOWrapper.h */,
2001 7411B19A11416EF400BCD793 /* OptimizeGraph.cpp */,
2002 7411B19B11416EF400BCD793 /* OptimizeGraph.h */,
2003 7411B19C11416EF400BCD793 /* OptimizeMeshes.cpp */,
2004 7411B19D11416EF400BCD793 /* OptimizeMeshes.h */,
2005 3AF45AD30E4B716800207D74 /* ParsingUtils.h */,
2006 F99A9F3A15436286000682F3 /* PolyTools.h */,
2007 F99A9F3F1543629F000682F3 /* PostStepRegistry.cpp */,
2008 3AF45AD80E4B716800207D74 /* PretransformVertices.cpp */,
2009 3AF45AD90E4B716800207D74 /* PretransformVertices.h */,
2010 F9606FF2154364E5004D91DD /* ProcessHelper.cpp */,
2011 7411B19E11416EF400BCD793 /* ProcessHelper.h */,
2012 8E7ABBE1127E0FA400512ED1 /* Profiler.h */,
2013 8E7ABBE2127E0FA400512ED1 /* pstdint.h */,
2014 3AF45ADA0E4B716800207D74 /* qnan.h */,
2015 3AF45ADB0E4B716800207D74 /* RemoveComments.cpp */,
2016 3AF45ADC0E4B716800207D74 /* RemoveComments.h */,
2017 3AF45ADD0E4B716800207D74 /* RemoveRedundantMaterials.cpp */,
2018 3AF45ADE0E4B716800207D74 /* RemoveRedundantMaterials.h */,
2019 F90BB05B0F5DDBCB00124155 /* RemoveVCProcess.cpp */,
2020 F90BB05A0F5DDBCB00124155 /* RemoveVCProcess.h */,
2021 F90BB03A0F5DDB3200124155 /* SceneCombiner.cpp */,
2022 F90BB03B0F5DDB3200124155 /* SceneCombiner.h */,
2023 F90BB03C0F5DDB3200124155 /* ScenePreprocessor.cpp */,
2024 F90BB0390F5DDB3200124155 /* ScenePreprocessor.h */,
2025 F99A9F44154362DE000682F3 /* ScenePrivate.h */,
2026 F90BAFFC0F5DD9A000124155 /* SGSpatialSort.cpp */,
2027 F90BAFFB0F5DD9A000124155 /* SGSpatialSort.h */,
2028 F90BB0650F5DDC0700124155 /* SkeletonMeshBuilder.cpp */,
2029 F90BB0640F5DDC0700124155 /* SkeletonMeshBuilder.h */,
2030 F90BB0690F5DDC1E00124155 /* SmoothingGroups.h */,
2031 F90BB06A0F5DDC1E00124155 /* SmoothingGroups.inl */,
2032 F90BB0430F5DDB4600124155 /* SortByPTypeProcess.cpp */,
2033 F90BB0420F5DDB4600124155 /* SortByPTypeProcess.h */,
2034 3AF45AE40E4B716800207D74 /* SpatialSort.cpp */,
2035 3AF45AE50E4B716800207D74 /* SpatialSort.h */,
2036 F99A9F4915436304000682F3 /* SplitByBoneCountProcess.cpp */,
2037 F99A9F4A15436304000682F3 /* SplitByBoneCountProcess.h */,
2038 3AF45AE60E4B716800207D74 /* SplitLargeMeshes.cpp */,
2039 3AF45AE70E4B716800207D74 /* SplitLargeMeshes.h */,
2040 F90BB0520F5DDBA800124155 /* StandardShapes.cpp */,
2041 F90BB0510F5DDBA800124155 /* StandardShapes.h */,
2042 7411B19F11416EF400BCD793 /* StdOStreamLogStream.h */,
2043 7411B1A011416EF400BCD793 /* StreamReader.h */,
2044 3AF45AEA0E4B716800207D74 /* StringComparison.h */,
2045 7411B1A111416EF400BCD793 /* Subdivision.cpp */,
2046 7411B1A211416EF400BCD793 /* Subdivision.h */,
2047 7411B1A311416EF400BCD793 /* TargetAnimation.cpp */,
2048 7411B1A411416EF400BCD793 /* TargetAnimation.h */,
2049 3AF45AEB0E4B716800207D74 /* TextureTransform.cpp */,
2050 3AF45AEC0E4B716800207D74 /* TextureTransform.h */,
2051 74C9BBBE11ACBC6C00AF885C /* TinyFormatter.h */,
2052 3AF45AED0E4B716800207D74 /* TriangulateProcess.cpp */,
2053 3AF45AEE0E4B716800207D74 /* TriangulateProcess.h */,
2054 3AF45AEF0E4B716800207D74 /* ValidateDataStructure.cpp */,
2055 3AF45AF00E4B716800207D74 /* ValidateDataStructure.h */,
2056 7411B1A511416EF400BCD793 /* Vertex.h */,
2057 3AF45AF10E4B716800207D74 /* VertexTriangleAdjacency.cpp */,
2058 3AF45AF20E4B716800207D74 /* VertexTriangleAdjacency.h */,
2059 3AF45AF30E4B716800207D74 /* Win32DebugLogStream.h */,
2060 );
2061 name = code;
2062 path = ../../code;
2063 sourceTree = SOURCE_ROOT;
2064 };
20652735 3AF45B690E4B722000207D74 /* 3DS */ = {
20662736 isa = PBXGroup;
20672737 children = (
21492819 3AF45B8C0E4B75F200207D74 /* Obj */ = {
21502820 isa = PBXGroup;
21512821 children = (
2152 3AF45ACB0E4B716800207D74 /* ObjFileData.h */,
2153 3AF45ACC0E4B716800207D74 /* ObjFileImporter.cpp */,
2154 3AF45ACD0E4B716800207D74 /* ObjFileImporter.h */,
2155 3AF45ACE0E4B716800207D74 /* ObjFileMtlImporter.cpp */,
2156 3AF45ACF0E4B716800207D74 /* ObjFileMtlImporter.h */,
2157 3AF45AD00E4B716800207D74 /* ObjFileParser.cpp */,
2158 3AF45AD10E4B716800207D74 /* ObjFileParser.h */,
2159 3AF45AD20E4B716800207D74 /* ObjTools.h */,
2822 2B7F46341708365200A106A9 /* ObjExporter.cpp */,
2823 2B7F46351708365200A106A9 /* ObjExporter.h */,
2824 2B7F46361708365200A106A9 /* ObjFileData.h */,
2825 2B7F46371708365200A106A9 /* ObjFileImporter.cpp */,
2826 2B7F46381708365200A106A9 /* ObjFileImporter.h */,
2827 2B7F46391708365200A106A9 /* ObjFileMtlImporter.cpp */,
2828 2B7F463A1708365200A106A9 /* ObjFileMtlImporter.h */,
2829 2B7F463B1708365200A106A9 /* ObjFileParser.cpp */,
2830 2B7F463C1708365200A106A9 /* ObjFileParser.h */,
2831 2B7F463D1708365200A106A9 /* ObjTools.h */,
21602832 );
21612833 name = Obj;
21622834 path = ../../code;
22022874 3AF45B910E4B77BE00207D74 /* STL */ = {
22032875 isa = PBXGroup;
22042876 children = (
2205 3AF45AE80E4B716800207D74 /* STLLoader.cpp */,
2206 3AF45AE90E4B716800207D74 /* STLLoader.h */,
2877 2B7F468B1708365200A106A9 /* STLExporter.cpp */,
2878 2B7F468C1708365200A106A9 /* STLExporter.h */,
2879 2B7F468D1708365200A106A9 /* STLLoader.cpp */,
2880 2B7F468E1708365200A106A9 /* STLLoader.h */,
22072881 );
22082882 name = STL;
22092883 path = ../../code;
22572931 );
22582932 name = Unreal;
22592933 sourceTree = "<group>";
2260 };
2261 7437C94E113F18C70067B9B9 /* BoostWorkaround */ = {
2262 isa = PBXGroup;
2263 children = (
2264 7437C94F113F18C70067B9B9 /* boost */,
2265 );
2266 name = BoostWorkaround;
2267 path = ../../code/BoostWorkaround;
2268 sourceTree = SOURCE_ROOT;
2269 };
2270 7437C94F113F18C70067B9B9 /* boost */ = {
2271 isa = PBXGroup;
2272 children = (
2273 7437C952113F18C70067B9B9 /* math */,
2274 7437C957113F18C70067B9B9 /* tuple */,
2275 7437C950113F18C70067B9B9 /* foreach.hpp */,
2276 7437C951113F18C70067B9B9 /* format.hpp */,
2277 F99A9EB815436098000682F3 /* lexical_cast.hpp */,
2278 F99A9EBD154360A0000682F3 /* make_shared.hpp */,
2279 F99A9EC2154360A5000682F3 /* noncopyable.hpp */,
2280 74C9BB6F11ACBB3600AF885C /* pointer_cast.hpp */,
2281 7437C954113F18C70067B9B9 /* scoped_array.hpp */,
2282 7437C955113F18C70067B9B9 /* scoped_ptr.hpp */,
2283 74C9BB7011ACBB3600AF885C /* shared_array.hpp */,
2284 74C9BB7111ACBB3600AF885C /* shared_ptr.hpp */,
2285 7437C956113F18C70067B9B9 /* static_assert.hpp */,
2286 F99A9EC7154360B5000682F3 /* timer.hpp */,
2287 );
2288 name = boost;
2289 path = ../../code/BoostWorkaround/boost;
2290 sourceTree = SOURCE_ROOT;
2291 };
2292 7437C952113F18C70067B9B9 /* math */ = {
2293 isa = PBXGroup;
2294 children = (
2295 7437C953113F18C70067B9B9 /* common_factor_rt.hpp */,
2296 );
2297 name = math;
2298 path = ../../code/BoostWorkaround/boost/math;
2299 sourceTree = SOURCE_ROOT;
2300 };
2301 7437C957113F18C70067B9B9 /* tuple */ = {
2302 isa = PBXGroup;
2303 children = (
2304 7437C958113F18C70067B9B9 /* tuple.hpp */,
2305 );
2306 name = tuple;
2307 path = ../../code/BoostWorkaround/boost/tuple;
2308 sourceTree = SOURCE_ROOT;
23092934 };
23102935 74C9BB4611ACBAE500AF885C /* Blender */ = {
23112936 isa = PBXGroup;
24213046 F90BAFE60F5DD91F00124155 /* COLLADA */ = {
24223047 isa = PBXGroup;
24233048 children = (
2424 F90BAFE80F5DD93600124155 /* ColladaHelper.h */,
2425 F90BAFE90F5DD93600124155 /* ColladaLoader.cpp */,
2426 F90BAFEA0F5DD93600124155 /* ColladaLoader.h */,
2427 F90BAFEB0F5DD93600124155 /* ColladaParser.cpp */,
2428 F90BAFEC0F5DD93600124155 /* ColladaParser.h */,
3049 2B7F45A11708365100A106A9 /* ColladaExporter.cpp */,
3050 2B7F45A21708365100A106A9 /* ColladaExporter.h */,
3051 2B7F45A31708365100A106A9 /* ColladaHelper.h */,
3052 2B7F45A41708365100A106A9 /* ColladaLoader.cpp */,
3053 2B7F45A51708365100A106A9 /* ColladaLoader.h */,
3054 2B7F45A61708365100A106A9 /* ColladaParser.cpp */,
3055 2B7F45A71708365100A106A9 /* ColladaParser.h */,
24293056 );
24303057 name = COLLADA;
24313058 path = ../../code;
25333160 F90BAFD40F5DD8F200124155 /* IRR */,
25343161 3AB8A3A80E50D5F400606590 /* LWO */,
25353162 7411B15811416D6600BCD793 /* LWS */,
2536 F99A9F21154361F8000682F3 /* M3 */,
25373163 3AF45B870E4B74DA00207D74 /* MD2 */,
25383164 3AF45B880E4B751000207D74 /* MD3 */,
25393165 3AF45B8A0E4B755E00207D74 /* MD5 */,
26533279 F97BA06415439FB2009EB9DD /* IFC */ = {
26543280 isa = PBXGroup;
26553281 children = (
2656 F97BA06615439FC3009EB9DD /* IFCCurve.cpp */,
2657 F97BA06715439FC3009EB9DD /* IFCGeometry.cpp */,
2658 F97BA06815439FC3009EB9DD /* IFCLoader.cpp */,
2659 F97BA06915439FC3009EB9DD /* IFCLoader.h */,
2660 F97BA06A15439FC3009EB9DD /* IFCMaterial.cpp */,
2661 F97BA06B15439FC3009EB9DD /* IFCProfile.cpp */,
2662 F97BA06C15439FC3009EB9DD /* IFCReaderGen.cpp */,
2663 F97BA06D15439FC3009EB9DD /* IFCReaderGen.h */,
2664 F97BA06E15439FC3009EB9DD /* IFCUtil.cpp */,
2665 F97BA06F15439FC3009EB9DD /* IFCUtil.h */,
3282 2B7F45E91708365100A106A9 /* IFCBoolean.cpp */,
3283 2B7F45EA1708365100A106A9 /* IFCCurve.cpp */,
3284 2B7F45EB1708365100A106A9 /* IFCGeometry.cpp */,
3285 2B7F45EC1708365100A106A9 /* IFCLoader.cpp */,
3286 2B7F45ED1708365100A106A9 /* IFCLoader.h */,
3287 2B7F45EE1708365100A106A9 /* IFCMaterial.cpp */,
3288 2B7F45EF1708365100A106A9 /* IFCOpenings.cpp */,
3289 2B7F45F01708365100A106A9 /* IFCProfile.cpp */,
3290 2B7F45F11708365100A106A9 /* IFCReaderGen.cpp */,
3291 2B7F45F21708365100A106A9 /* IFCReaderGen.h */,
3292 2B7F45F31708365100A106A9 /* IFCUtil.cpp */,
3293 2B7F45F41708365100A106A9 /* IFCUtil.h */,
26663294 );
26673295 name = IFC;
2668 sourceTree = "<group>";
2669 };
2670 F99A9F21154361F8000682F3 /* M3 */ = {
2671 isa = PBXGroup;
2672 children = (
2673 F99A9F2615436207000682F3 /* M3Importer.cpp */,
2674 F99A9F2715436207000682F3 /* M3Importer.h */,
2675 );
2676 name = M3;
26773296 sourceTree = "<group>";
26783297 };
26793298 F99A9F5315436318000682F3 /* STEP */ = {
26803299 isa = PBXGroup;
26813300 children = (
2682 F99A9F5915436323000682F3 /* STEPFile.h */,
2683 F99A9F5A15436323000682F3 /* STEPFileReader.cpp */,
2684 F99A9F5B15436323000682F3 /* STEPFileReader.h */,
3301 2B7F46861708365200A106A9 /* STEPFile.h */,
3302 2B7F46871708365200A106A9 /* STEPFileEncoding.cpp */,
3303 2B7F46881708365200A106A9 /* STEPFileEncoding.h */,
3304 2B7F46891708365200A106A9 /* STEPFileReader.cpp */,
3305 2B7F468A1708365200A106A9 /* STEPFileReader.h */,
26853306 );
26863307 name = STEP;
26873308 sourceTree = "<group>";
27533374 745FF841113ECB080020C31B /* 3DSLoader.h in Headers */,
27543375 745FF842113ECB080020C31B /* ASELoader.h in Headers */,
27553376 745FF843113ECB080020C31B /* ASEParser.h in Headers */,
2756 745FF844113ECB080020C31B /* BaseImporter.h in Headers */,
2757 745FF845113ECB080020C31B /* BaseProcess.h in Headers */,
2758 745FF846113ECB080020C31B /* ByteSwap.h in Headers */,
2759 745FF847113ECB080020C31B /* CalcTangentsProcess.h in Headers */,
2760 745FF848113ECB080020C31B /* ConvertToLHProcess.h in Headers */,
2761 745FF849113ECB080020C31B /* DefaultIOStream.h in Headers */,
2762 745FF84A113ECB080020C31B /* DefaultIOSystem.h in Headers */,
2763 745FF84C113ECB080020C31B /* fast_atof.h in Headers */,
2764 745FF84D113ECB080020C31B /* FileLogStream.h in Headers */,
2765 745FF84E113ECB080020C31B /* GenFaceNormalsProcess.h in Headers */,
2766 745FF84F113ECB080020C31B /* GenVertexNormalsProcess.h in Headers */,
27673377 745FF850113ECB080020C31B /* HalfLifeFileData.h in Headers */,
27683378 745FF851113ECB080020C31B /* HMPLoader.h in Headers */,
2769 745FF852113ECB080020C31B /* ImproveCacheLocality.h in Headers */,
2770 745FF853113ECB080020C31B /* JoinVerticesProcess.h in Headers */,
2771 745FF854113ECB080020C31B /* LimitBoneWeightsProcess.h in Headers */,
2772 745FF855113ECB080020C31B /* MaterialSystem.h in Headers */,
27733379 745FF856113ECB080020C31B /* MD2FileData.h in Headers */,
27743380 745FF857113ECB080020C31B /* MD2Loader.h in Headers */,
27753381 745FF858113ECB080020C31B /* MD2NormalTable.h in Headers */,
27803386 745FF85D113ECB080020C31B /* MDLDefaultColorMap.h in Headers */,
27813387 745FF85E113ECB080020C31B /* MDLFileData.h in Headers */,
27823388 745FF85F113ECB080020C31B /* MDLLoader.h in Headers */,
2783 745FF860113ECB080020C31B /* ObjFileData.h in Headers */,
2784 745FF861113ECB080020C31B /* ObjFileImporter.h in Headers */,
2785 745FF862113ECB080020C31B /* ObjFileMtlImporter.h in Headers */,
2786 745FF863113ECB080020C31B /* ObjFileParser.h in Headers */,
2787 745FF864113ECB080020C31B /* ObjTools.h in Headers */,
2788 745FF865113ECB080020C31B /* ParsingUtils.h in Headers */,
27893389 745FF866113ECB080020C31B /* PlyLoader.h in Headers */,
27903390 745FF867113ECB080020C31B /* PlyParser.h in Headers */,
2791 745FF868113ECB080020C31B /* PretransformVertices.h in Headers */,
2792 745FF869113ECB080020C31B /* qnan.h in Headers */,
2793 745FF86A113ECB080020C31B /* RemoveComments.h in Headers */,
2794 745FF86B113ECB080020C31B /* RemoveRedundantMaterials.h in Headers */,
27953391 745FF86C113ECB080020C31B /* SMDLoader.h in Headers */,
2796 745FF86D113ECB080020C31B /* SpatialSort.h in Headers */,
2797 745FF86E113ECB080020C31B /* SplitLargeMeshes.h in Headers */,
2798 745FF86F113ECB080020C31B /* STLLoader.h in Headers */,
2799 745FF870113ECB080020C31B /* StringComparison.h in Headers */,
2800 745FF871113ECB080020C31B /* TextureTransform.h in Headers */,
2801 745FF872113ECB080020C31B /* TriangulateProcess.h in Headers */,
2802 745FF873113ECB080020C31B /* ValidateDataStructure.h in Headers */,
2803 745FF874113ECB080020C31B /* VertexTriangleAdjacency.h in Headers */,
2804 745FF875113ECB080020C31B /* Win32DebugLogStream.h in Headers */,
28053392 745FF876113ECB080020C31B /* XFileHelper.h in Headers */,
28063393 745FF877113ECB080020C31B /* XFileImporter.h in Headers */,
28073394 745FF878113ECB080020C31B /* XFileParser.h in Headers */,
28083395 745FF87B113ECB080020C31B /* MDCFileData.h in Headers */,
28093396 745FF87C113ECB080020C31B /* MDCLoader.h in Headers */,
28103397 745FF87D113ECB080020C31B /* MDCNormalTable.h in Headers */,
2811 745FF87E113ECB080020C31B /* FixNormalsStep.h in Headers */,
28123398 745FF87F113ECB080020C31B /* LWOFileData.h in Headers */,
28133399 745FF880113ECB080020C31B /* LWOLoader.h in Headers */,
28143400 745FF881113ECB080020C31B /* HMPFileData.h in Headers */,
2815 745FF883113ECB080020C31B /* IFF.h in Headers */,
2816 745FF884113ECB080020C31B /* Hash.h in Headers */,
28173401 745FF889113ECB080020C31B /* ACLoader.h in Headers */,
28183402 745FF88A113ECB080020C31B /* IRRLoader.h in Headers */,
28193403 745FF88B113ECB080020C31B /* IRRMeshLoader.h in Headers */,
28203404 745FF88C113ECB080020C31B /* IRRShared.h in Headers */,
2821 745FF88D113ECB080020C31B /* ColladaHelper.h in Headers */,
2822 745FF88E113ECB080020C31B /* ColladaLoader.h in Headers */,
2823 745FF88F113ECB080020C31B /* ColladaParser.h in Headers */,
28243405 745FF890113ECB080020C31B /* NFFLoader.h in Headers */,
2825 745FF891113ECB080020C31B /* SGSpatialSort.h in Headers */,
28263406 745FF892113ECB080020C31B /* Q3DLoader.h in Headers */,
28273407 745FF893113ECB080020C31B /* BVHLoader.h in Headers */,
28283408 745FF894113ECB080020C31B /* OFFLoader.h in Headers */,
28303410 745FF896113ECB080020C31B /* DXFLoader.h in Headers */,
28313411 745FF897113ECB080020C31B /* TerragenLoader.h in Headers */,
28323412 745FF898113ECB080020C31B /* irrXMLWrapper.h in Headers */,
2833 745FF899113ECB080020C31B /* ScenePreprocessor.h in Headers */,
2834 745FF89A113ECB080020C31B /* SceneCombiner.h in Headers */,
2835 745FF89B113ECB080020C31B /* SortByPTypeProcess.h in Headers */,
2836 745FF89C113ECB080020C31B /* FindDegenerates.h in Headers */,
2837 745FF89D113ECB080020C31B /* ComputeUVMappingProcess.h in Headers */,
2838 745FF89E113ECB080020C31B /* StandardShapes.h in Headers */,
2839 745FF89F113ECB080020C31B /* FindInstancesProcess.h in Headers */,
2840 745FF8A0113ECB080020C31B /* RemoveVCProcess.h in Headers */,
2841 745FF8A1113ECB080020C31B /* FindInvalidDataProcess.h in Headers */,
2842 745FF8A2113ECB080020C31B /* SkeletonMeshBuilder.h in Headers */,
2843 745FF8A3113ECB080020C31B /* SmoothingGroups.h in Headers */,
28443413 745FF8AA113ECB080020C31B /* B3DImporter.h in Headers */,
2845 7437C960113F18C70067B9B9 /* foreach.hpp in Headers */,
2846 7437C961113F18C70067B9B9 /* format.hpp in Headers */,
2847 7437C962113F18C70067B9B9 /* common_factor_rt.hpp in Headers */,
2848 7437C963113F18C70067B9B9 /* scoped_array.hpp in Headers */,
2849 7437C964113F18C70067B9B9 /* scoped_ptr.hpp in Headers */,
2850 7437C965113F18C70067B9B9 /* static_assert.hpp in Headers */,
2851 7437C966113F18C70067B9B9 /* tuple.hpp in Headers */,
28523414 7411B15311416D5E00BCD793 /* CSMLoader.h in Headers */,
28533415 7411B15E11416DDD00BCD793 /* LWSLoader.h in Headers */,
28543416 7411B16811416DF400BCD793 /* LWOAnimation.h in Headers */,
28553417 7411B17511416E2500BCD793 /* MS3DLoader.h in Headers */,
28563418 7411B19011416EBC00BCD793 /* UnrealLoader.h in Headers */,
2857 7411B1B511416EF400BCD793 /* FileSystemFilter.h in Headers */,
2858 7411B1B611416EF400BCD793 /* GenericProperty.h in Headers */,
2859 7411B1B711416EF400BCD793 /* MemoryIOWrapper.h in Headers */,
2860 7411B1B911416EF400BCD793 /* OptimizeGraph.h in Headers */,
2861 7411B1BB11416EF400BCD793 /* OptimizeMeshes.h in Headers */,
2862 7411B1BC11416EF400BCD793 /* ProcessHelper.h in Headers */,
2863 7411B1BD11416EF400BCD793 /* StdOStreamLogStream.h in Headers */,
2864 7411B1BE11416EF400BCD793 /* StreamReader.h in Headers */,
2865 7411B1C011416EF400BCD793 /* Subdivision.h in Headers */,
2866 7411B1C211416EF400BCD793 /* TargetAnimation.h in Headers */,
2867 7411B1C311416EF400BCD793 /* Vertex.h in Headers */,
28683419 74C9BB6011ACBB1000AF885C /* BlenderDNA.h in Headers */,
28693420 74C9BB6211ACBB1000AF885C /* BlenderLoader.h in Headers */,
28703421 74C9BB6411ACBB1000AF885C /* BlenderScene.h in Headers */,
28713422 74C9BB6511ACBB1000AF885C /* BlenderSceneGen.h in Headers */,
2872 74C9BB7211ACBB3600AF885C /* pointer_cast.hpp in Headers */,
2873 74C9BB7311ACBB3600AF885C /* shared_array.hpp in Headers */,
2874 74C9BB7411ACBB3600AF885C /* shared_ptr.hpp in Headers */,
2875 74C9BB7F11ACBB7800AF885C /* MakeVerboseFormat.h in Headers */,
28763423 74C9BB8911ACBB9900AF885C /* AssimpPCH.h in Headers */,
28773424 74C9BB9711ACBBBC00AF885C /* COBLoader.h in Headers */,
28783425 74C9BB9811ACBBBC00AF885C /* COBScene.h in Headers */,
28793426 74C9BBB411ACBC2600AF885C /* revision.h in Headers */,
2880 74C9BBBF11ACBC6C00AF885C /* Exceptional.h in Headers */,
2881 74C9BBC011ACBC6C00AF885C /* LineSplitter.h in Headers */,
2882 74C9BBC111ACBC6C00AF885C /* MD4FileData.h in Headers */,
2883 74C9BBC211ACBC6C00AF885C /* TinyFormatter.h in Headers */,
28843427 8E7ABBA8127E0F1A00512ED1 /* Q3BSPFileData.h in Headers */,
28853428 8E7ABBAA127E0F1A00512ED1 /* Q3BSPFileImporter.h in Headers */,
28863429 8E7ABBAC127E0F1A00512ED1 /* Q3BSPFileParser.h in Headers */,
28883431 8E7ABBC7127E0F2A00512ED1 /* NDOLoader.h in Headers */,
28893432 8E7ABBD1127E0F3800512ED1 /* BlenderIntermediate.h in Headers */,
28903433 8E7ABBD3127E0F3800512ED1 /* BlenderModifier.h in Headers */,
2891 8E7ABBE3127E0FA400512ED1 /* assbin_chunks.h in Headers */,
2892 8E7ABBE4127E0FA400512ED1 /* DefaultProgressHandler.h in Headers */,
2893 8E7ABBE5127E0FA400512ED1 /* Profiler.h in Headers */,
2894 8E7ABBE6127E0FA400512ED1 /* pstdint.h in Headers */,
28953434 8E8DEE5D127E2B78005EF64D /* ConvertUTF.h in Headers */,
28963435 8E8DEE5E127E2B78005EF64D /* CXMLReaderImpl.h in Headers */,
28973436 8E8DEE5F127E2B78005EF64D /* heapsort.h in Headers */,
29373476 F9BA8C041543268400E63FFE /* version.h in Headers */,
29383477 F9BA8C48154328B600E63FFE /* OgreImporter.hpp in Headers */,
29393478 F9BA8C4C154328B600E63FFE /* OgreXmlHelper.hpp in Headers */,
2940 F99A9EB615436077000682F3 /* BlobIOSystem.h in Headers */,
2941 F99A9EBB15436098000682F3 /* lexical_cast.hpp in Headers */,
2942 F99A9EC0154360A0000682F3 /* make_shared.hpp in Headers */,
2943 F99A9EC5154360A5000682F3 /* noncopyable.hpp in Headers */,
2944 F99A9ECA154360B5000682F3 /* timer.hpp in Headers */,
2945 F99A9ECF154360E2000682F3 /* CInterfaceIOWrapper.h in Headers */,
2946 F99A9ED815436125000682F3 /* DeboneProcess.h in Headers */,
2947 F99A9F1F154361D4000682F3 /* LogAux.h in Headers */,
2948 F99A9F2D15436207000682F3 /* M3Importer.h in Headers */,
29493479 F99A9F3715436269000682F3 /* PlyExporter.h in Headers */,
2950 F99A9F3D15436286000682F3 /* PolyTools.h in Headers */,
2951 F99A9F47154362DE000682F3 /* ScenePrivate.h in Headers */,
2952 F99A9F5015436304000682F3 /* SplitByBoneCountProcess.h in Headers */,
2953 F99A9F6215436323000682F3 /* STEPFile.h in Headers */,
2954 F99A9F6415436323000682F3 /* STEPFileReader.h in Headers */,
29553480 F9607088154366AB004D91DD /* crc32.h in Headers */,
29563481 F960708A154366AB004D91DD /* deflate.h in Headers */,
29573482 F960708C154366AB004D91DD /* inffast.h in Headers */,
29733498 F96071001543675E004D91DD /* sweep.h in Headers */,
29743499 F96071021543675E004D91DD /* sweep_context.h in Headers */,
29753500 F97BA03815439DB3009EB9DD /* ai_assert.h in Headers */,
2976 F97BA08715439FC3009EB9DD /* IFCLoader.h in Headers */,
2977 F97BA08B15439FC3009EB9DD /* IFCReaderGen.h in Headers */,
2978 F97BA08D15439FC3009EB9DD /* IFCUtil.h in Headers */,
3501 2B7F46DF1708365200A106A9 /* assbin_chunks.h in Headers */,
3502 2B7F47071708365200A106A9 /* BaseImporter.h in Headers */,
3503 2B7F47111708365200A106A9 /* BaseProcess.h in Headers */,
3504 2B7F47481708365200A106A9 /* BlobIOSystem.h in Headers */,
3505 2B7F474D1708365200A106A9 /* foreach.hpp in Headers */,
3506 2B7F47521708365200A106A9 /* format.hpp in Headers */,
3507 2B7F47571708365200A106A9 /* lexical_cast.hpp in Headers */,
3508 2B7F475C1708365200A106A9 /* make_shared.hpp in Headers */,
3509 2B7F47611708365200A106A9 /* common_factor_rt.hpp in Headers */,
3510 2B7F47661708365200A106A9 /* noncopyable.hpp in Headers */,
3511 2B7F476B1708365200A106A9 /* pointer_cast.hpp in Headers */,
3512 2B7F47701708365200A106A9 /* scoped_array.hpp in Headers */,
3513 2B7F47751708365200A106A9 /* scoped_ptr.hpp in Headers */,
3514 2B7F477A1708365200A106A9 /* shared_array.hpp in Headers */,
3515 2B7F477F1708365200A106A9 /* shared_ptr.hpp in Headers */,
3516 2B7F47841708365200A106A9 /* static_assert.hpp in Headers */,
3517 2B7F47891708365200A106A9 /* timer.hpp in Headers */,
3518 2B7F478E1708365200A106A9 /* tuple.hpp in Headers */,
3519 2B7F479D1708365200A106A9 /* ByteSwap.h in Headers */,
3520 2B7F47A71708365200A106A9 /* CalcTangentsProcess.h in Headers */,
3521 2B7F47AC1708365200A106A9 /* CInterfaceIOWrapper.h in Headers */,
3522 2B7F47C51708365200A106A9 /* ColladaExporter.h in Headers */,
3523 2B7F47CA1708365200A106A9 /* ColladaHelper.h in Headers */,
3524 2B7F47D41708365200A106A9 /* ColladaLoader.h in Headers */,
3525 2B7F47DE1708365200A106A9 /* ColladaParser.h in Headers */,
3526 2B7F47E81708365200A106A9 /* ComputeUVMappingProcess.h in Headers */,
3527 2B7F47F21708365200A106A9 /* ConvertToLHProcess.h in Headers */,
3528 2B7F48061708365200A106A9 /* DeboneProcess.h in Headers */,
3529 2B7F48101708365200A106A9 /* DefaultIOStream.h in Headers */,
3530 2B7F481A1708365200A106A9 /* DefaultIOSystem.h in Headers */,
3531 2B7F48241708365200A106A9 /* DefaultProgressHandler.h in Headers */,
3532 2B7F48381708365200A106A9 /* Exceptional.h in Headers */,
3533 2B7F48421708365200A106A9 /* fast_atof.h in Headers */,
3534 2B7F48511708365200A106A9 /* FBXCompileConfig.h in Headers */,
3535 2B7F485B1708365200A106A9 /* FBXConverter.h in Headers */,
3536 2B7F486A1708365200A106A9 /* FBXDocument.h in Headers */,
3537 2B7F48741708365200A106A9 /* FBXDocumentUtil.h in Headers */,
3538 2B7F487E1708365200A106A9 /* FBXImporter.h in Headers */,
3539 2B7F48831708365200A106A9 /* FBXImportSettings.h in Headers */,
3540 2B7F48A11708365200A106A9 /* FBXParser.h in Headers */,
3541 2B7F48AB1708365200A106A9 /* FBXProperties.h in Headers */,
3542 2B7F48B51708365200A106A9 /* FBXTokenizer.h in Headers */,
3543 2B7F48BF1708365200A106A9 /* FBXUtil.h in Headers */,
3544 2B7F48C41708365200A106A9 /* FileLogStream.h in Headers */,
3545 2B7F48C91708365200A106A9 /* FileSystemFilter.h in Headers */,
3546 2B7F48D31708365200A106A9 /* FindDegenerates.h in Headers */,
3547 2B7F48DD1708365200A106A9 /* FindInstancesProcess.h in Headers */,
3548 2B7F48E71708365200A106A9 /* FindInvalidDataProcess.h in Headers */,
3549 2B7F48F11708365200A106A9 /* FixNormalsStep.h in Headers */,
3550 2B7F48F61708365200A106A9 /* GenericProperty.h in Headers */,
3551 2B7F49001708365200A106A9 /* GenFaceNormalsProcess.h in Headers */,
3552 2B7F490A1708365200A106A9 /* GenVertexNormalsProcess.h in Headers */,
3553 2B7F49141708365200A106A9 /* Hash.h in Headers */,
3554 2B7F493C1708365200A106A9 /* IFCLoader.h in Headers */,
3555 2B7F49551708365200A106A9 /* IFCReaderGen.h in Headers */,
3556 2B7F495F1708365200A106A9 /* IFCUtil.h in Headers */,
3557 2B7F49641708365200A106A9 /* IFF.h in Headers */,
3558 2B7F496E1708365200A106A9 /* Importer.h in Headers */,
3559 2B7F497D1708365200A106A9 /* ImproveCacheLocality.h in Headers */,
3560 2B7F49AA1708365200A106A9 /* JoinVerticesProcess.h in Headers */,
3561 2B7F49B41708365200A106A9 /* LimitBoneWeightsProcess.h in Headers */,
3562 2B7F49B91708365200A106A9 /* LineSplitter.h in Headers */,
3563 2B7F49BE1708365200A106A9 /* LogAux.h in Headers */,
3564 2B7F49FF1708365200A106A9 /* MakeVerboseFormat.h in Headers */,
3565 2B7F4A091708365200A106A9 /* MaterialSystem.h in Headers */,
3566 2B7F4A311708365200A106A9 /* MD4FileData.h in Headers */,
3567 2B7F4A771708365200A106A9 /* MemoryIOWrapper.h in Headers */,
3568 2B7F4A9F1708365200A106A9 /* ObjExporter.h in Headers */,
3569 2B7F4AA41708365200A106A9 /* ObjFileData.h in Headers */,
3570 2B7F4AAE1708365200A106A9 /* ObjFileImporter.h in Headers */,
3571 2B7F4AB81708365200A106A9 /* ObjFileMtlImporter.h in Headers */,
3572 2B7F4AC21708365200A106A9 /* ObjFileParser.h in Headers */,
3573 2B7F4AC71708365200A106A9 /* ObjTools.h in Headers */,
3574 2B7F4AF91708365200A106A9 /* OptimizeGraph.h in Headers */,
3575 2B7F4B031708365200A106A9 /* OptimizeMeshes.h in Headers */,
3576 2B7F4B081708365200A106A9 /* ParsingUtils.h in Headers */,
3577 2B7F4B2B1708365200A106A9 /* PolyTools.h in Headers */,
3578 2B7F4B3A1708365200A106A9 /* PretransformVertices.h in Headers */,
3579 2B7F4B441708365200A106A9 /* ProcessHelper.h in Headers */,
3580 2B7F4B491708365200A106A9 /* Profiler.h in Headers */,
3581 2B7F4B4E1708365200A106A9 /* pstdint.h in Headers */,
3582 2B7F4B801708365200A106A9 /* qnan.h in Headers */,
3583 2B7F4B941708365200A106A9 /* RemoveComments.h in Headers */,
3584 2B7F4B9E1708365200A106A9 /* RemoveRedundantMaterials.h in Headers */,
3585 2B7F4BA81708365200A106A9 /* RemoveVCProcess.h in Headers */,
3586 2B7F4BB71708365200A106A9 /* SceneCombiner.h in Headers */,
3587 2B7F4BC11708365200A106A9 /* ScenePreprocessor.h in Headers */,
3588 2B7F4BC61708365200A106A9 /* ScenePrivate.h in Headers */,
3589 2B7F4BD01708365200A106A9 /* SGSpatialSort.h in Headers */,
3590 2B7F4BDA1708365200A106A9 /* SkeletonMeshBuilder.h in Headers */,
3591 2B7F4BE91708365200A106A9 /* SmoothingGroups.h in Headers */,
3592 2B7F4BF31708365200A106A9 /* SortByPTypeProcess.h in Headers */,
3593 2B7F4BFD1708365200A106A9 /* SpatialSort.h in Headers */,
3594 2B7F4C071708365200A106A9 /* SplitByBoneCountProcess.h in Headers */,
3595 2B7F4C111708365200A106A9 /* SplitLargeMeshes.h in Headers */,
3596 2B7F4C1B1708365200A106A9 /* StandardShapes.h in Headers */,
3597 2B7F4C201708365200A106A9 /* StdOStreamLogStream.h in Headers */,
3598 2B7F4C251708365200A106A9 /* STEPFile.h in Headers */,
3599 2B7F4C2F1708365200A106A9 /* STEPFileEncoding.h in Headers */,
3600 2B7F4C391708365200A106A9 /* STEPFileReader.h in Headers */,
3601 2B7F4C431708365200A106A9 /* STLExporter.h in Headers */,
3602 2B7F4C4D1708365200A106A9 /* STLLoader.h in Headers */,
3603 2B7F4C521708365200A106A9 /* StreamReader.h in Headers */,
3604 2B7F4C571708365200A106A9 /* StringComparison.h in Headers */,
3605 2B7F4C611708365200A106A9 /* Subdivision.h in Headers */,
3606 2B7F4C6B1708365200A106A9 /* TargetAnimation.h in Headers */,
3607 2B7F4C7F1708365200A106A9 /* TextureTransform.h in Headers */,
3608 2B7F4C841708365200A106A9 /* TinyFormatter.h in Headers */,
3609 2B7F4C8E1708365200A106A9 /* TriangulateProcess.h in Headers */,
3610 2B7F4CA21708365200A106A9 /* ValidateDataStructure.h in Headers */,
3611 2B7F4CA71708365200A106A9 /* Vertex.h in Headers */,
3612 2B7F4CB11708365200A106A9 /* VertexTriangleAdjacency.h in Headers */,
3613 2B7F4CB61708365200A106A9 /* Win32DebugLogStream.h in Headers */,
29793614 );
29803615 runOnlyForDeploymentPostprocessing = 0;
29813616 };
29873622 745FF924113ECC660020C31B /* 3DSLoader.h in Headers */,
29883623 745FF925113ECC660020C31B /* ASELoader.h in Headers */,
29893624 745FF926113ECC660020C31B /* ASEParser.h in Headers */,
2990 745FF927113ECC660020C31B /* BaseImporter.h in Headers */,
2991 745FF928113ECC660020C31B /* BaseProcess.h in Headers */,
2992 745FF929113ECC660020C31B /* ByteSwap.h in Headers */,
2993 745FF92A113ECC660020C31B /* CalcTangentsProcess.h in Headers */,
2994 745FF92B113ECC660020C31B /* ConvertToLHProcess.h in Headers */,
2995 745FF92C113ECC660020C31B /* DefaultIOStream.h in Headers */,
2996 745FF92D113ECC660020C31B /* DefaultIOSystem.h in Headers */,
2997 745FF92F113ECC660020C31B /* fast_atof.h in Headers */,
2998 745FF930113ECC660020C31B /* FileLogStream.h in Headers */,
2999 745FF931113ECC660020C31B /* GenFaceNormalsProcess.h in Headers */,
3000 745FF932113ECC660020C31B /* GenVertexNormalsProcess.h in Headers */,
30013625 745FF933113ECC660020C31B /* HalfLifeFileData.h in Headers */,
30023626 745FF934113ECC660020C31B /* HMPLoader.h in Headers */,
3003 745FF935113ECC660020C31B /* ImproveCacheLocality.h in Headers */,
3004 745FF936113ECC660020C31B /* JoinVerticesProcess.h in Headers */,
3005 745FF937113ECC660020C31B /* LimitBoneWeightsProcess.h in Headers */,
3006 745FF938113ECC660020C31B /* MaterialSystem.h in Headers */,
30073627 745FF939113ECC660020C31B /* MD2FileData.h in Headers */,
30083628 745FF93A113ECC660020C31B /* MD2Loader.h in Headers */,
30093629 745FF93B113ECC660020C31B /* MD2NormalTable.h in Headers */,
30143634 745FF940113ECC660020C31B /* MDLDefaultColorMap.h in Headers */,
30153635 745FF941113ECC660020C31B /* MDLFileData.h in Headers */,
30163636 745FF942113ECC660020C31B /* MDLLoader.h in Headers */,
3017 745FF943113ECC660020C31B /* ObjFileData.h in Headers */,
3018 745FF944113ECC660020C31B /* ObjFileImporter.h in Headers */,
3019 745FF945113ECC660020C31B /* ObjFileMtlImporter.h in Headers */,
3020 745FF946113ECC660020C31B /* ObjFileParser.h in Headers */,
3021 745FF947113ECC660020C31B /* ObjTools.h in Headers */,
3022 745FF948113ECC660020C31B /* ParsingUtils.h in Headers */,
30233637 745FF949113ECC660020C31B /* PlyLoader.h in Headers */,
30243638 745FF94A113ECC660020C31B /* PlyParser.h in Headers */,
3025 745FF94B113ECC660020C31B /* PretransformVertices.h in Headers */,
3026 745FF94C113ECC660020C31B /* qnan.h in Headers */,
3027 745FF94D113ECC660020C31B /* RemoveComments.h in Headers */,
3028 745FF94E113ECC660020C31B /* RemoveRedundantMaterials.h in Headers */,
30293639 745FF94F113ECC660020C31B /* SMDLoader.h in Headers */,
3030 745FF950113ECC660020C31B /* SpatialSort.h in Headers */,
3031 745FF951113ECC660020C31B /* SplitLargeMeshes.h in Headers */,
3032 745FF952113ECC660020C31B /* STLLoader.h in Headers */,
3033 745FF953113ECC660020C31B /* StringComparison.h in Headers */,
3034 745FF954113ECC660020C31B /* TextureTransform.h in Headers */,
3035 745FF955113ECC660020C31B /* TriangulateProcess.h in Headers */,
3036 745FF956113ECC660020C31B /* ValidateDataStructure.h in Headers */,
3037 745FF957113ECC660020C31B /* VertexTriangleAdjacency.h in Headers */,
3038 745FF958113ECC660020C31B /* Win32DebugLogStream.h in Headers */,
30393640 745FF959113ECC660020C31B /* XFileHelper.h in Headers */,
30403641 745FF95A113ECC660020C31B /* XFileImporter.h in Headers */,
30413642 745FF95B113ECC660020C31B /* XFileParser.h in Headers */,
30423643 745FF95E113ECC660020C31B /* MDCFileData.h in Headers */,
30433644 745FF95F113ECC660020C31B /* MDCLoader.h in Headers */,
30443645 745FF960113ECC660020C31B /* MDCNormalTable.h in Headers */,
3045 745FF961113ECC660020C31B /* FixNormalsStep.h in Headers */,
30463646 745FF962113ECC660020C31B /* LWOFileData.h in Headers */,
30473647 745FF963113ECC660020C31B /* LWOLoader.h in Headers */,
30483648 745FF964113ECC660020C31B /* HMPFileData.h in Headers */,
3049 745FF966113ECC660020C31B /* IFF.h in Headers */,
3050 745FF967113ECC660020C31B /* Hash.h in Headers */,
30513649 745FF96C113ECC660020C31B /* ACLoader.h in Headers */,
30523650 745FF96D113ECC660020C31B /* IRRLoader.h in Headers */,
30533651 745FF96E113ECC660020C31B /* IRRMeshLoader.h in Headers */,
30543652 745FF96F113ECC660020C31B /* IRRShared.h in Headers */,
3055 745FF970113ECC660020C31B /* ColladaHelper.h in Headers */,
3056 745FF971113ECC660020C31B /* ColladaLoader.h in Headers */,
3057 745FF972113ECC660020C31B /* ColladaParser.h in Headers */,
30583653 745FF973113ECC660020C31B /* NFFLoader.h in Headers */,
3059 745FF974113ECC660020C31B /* SGSpatialSort.h in Headers */,
30603654 745FF975113ECC660020C31B /* Q3DLoader.h in Headers */,
30613655 745FF976113ECC660020C31B /* BVHLoader.h in Headers */,
30623656 745FF977113ECC660020C31B /* OFFLoader.h in Headers */,
30643658 745FF979113ECC660020C31B /* DXFLoader.h in Headers */,
30653659 745FF97A113ECC660020C31B /* TerragenLoader.h in Headers */,
30663660 745FF97B113ECC660020C31B /* irrXMLWrapper.h in Headers */,
3067 745FF97C113ECC660020C31B /* ScenePreprocessor.h in Headers */,
3068 745FF97D113ECC660020C31B /* SceneCombiner.h in Headers */,
3069 745FF97E113ECC660020C31B /* SortByPTypeProcess.h in Headers */,
3070 745FF97F113ECC660020C31B /* FindDegenerates.h in Headers */,
3071 745FF980113ECC660020C31B /* ComputeUVMappingProcess.h in Headers */,
3072 745FF981113ECC660020C31B /* StandardShapes.h in Headers */,
3073 745FF982113ECC660020C31B /* FindInstancesProcess.h in Headers */,
3074 745FF983113ECC660020C31B /* RemoveVCProcess.h in Headers */,
3075 745FF984113ECC660020C31B /* FindInvalidDataProcess.h in Headers */,
3076 745FF985113ECC660020C31B /* SkeletonMeshBuilder.h in Headers */,
3077 745FF986113ECC660020C31B /* SmoothingGroups.h in Headers */,
30783661 745FF98D113ECC660020C31B /* B3DImporter.h in Headers */,
3079 7437C959113F18C70067B9B9 /* foreach.hpp in Headers */,
3080 7437C95A113F18C70067B9B9 /* format.hpp in Headers */,
3081 7437C95B113F18C70067B9B9 /* common_factor_rt.hpp in Headers */,
3082 7437C95C113F18C70067B9B9 /* scoped_array.hpp in Headers */,
3083 7437C95D113F18C70067B9B9 /* scoped_ptr.hpp in Headers */,
3084 7437C95E113F18C70067B9B9 /* static_assert.hpp in Headers */,
3085 7437C95F113F18C70067B9B9 /* tuple.hpp in Headers */,
30863662 7411B15111416D5E00BCD793 /* CSMLoader.h in Headers */,
30873663 7411B15C11416DDD00BCD793 /* LWSLoader.h in Headers */,
30883664 7411B16611416DF400BCD793 /* LWOAnimation.h in Headers */,
30893665 7411B17311416E2500BCD793 /* MS3DLoader.h in Headers */,
30903666 7411B18E11416EBC00BCD793 /* UnrealLoader.h in Headers */,
3091 7411B1A611416EF400BCD793 /* FileSystemFilter.h in Headers */,
3092 7411B1A711416EF400BCD793 /* GenericProperty.h in Headers */,
3093 7411B1A811416EF400BCD793 /* MemoryIOWrapper.h in Headers */,
3094 7411B1AA11416EF400BCD793 /* OptimizeGraph.h in Headers */,
3095 7411B1AC11416EF400BCD793 /* OptimizeMeshes.h in Headers */,
3096 7411B1AD11416EF400BCD793 /* ProcessHelper.h in Headers */,
3097 7411B1AE11416EF400BCD793 /* StdOStreamLogStream.h in Headers */,
3098 7411B1AF11416EF400BCD793 /* StreamReader.h in Headers */,
3099 7411B1B111416EF400BCD793 /* Subdivision.h in Headers */,
3100 7411B1B311416EF400BCD793 /* TargetAnimation.h in Headers */,
3101 7411B1B411416EF400BCD793 /* Vertex.h in Headers */,
31023667 74C9BB6711ACBB1000AF885C /* BlenderDNA.h in Headers */,
31033668 74C9BB6911ACBB1000AF885C /* BlenderLoader.h in Headers */,
31043669 74C9BB6B11ACBB1000AF885C /* BlenderScene.h in Headers */,
31053670 74C9BB6C11ACBB1000AF885C /* BlenderSceneGen.h in Headers */,
3106 74C9BB7511ACBB3600AF885C /* pointer_cast.hpp in Headers */,
3107 74C9BB7611ACBB3600AF885C /* shared_array.hpp in Headers */,
3108 74C9BB7711ACBB3600AF885C /* shared_ptr.hpp in Headers */,
3109 74C9BB8111ACBB7800AF885C /* MakeVerboseFormat.h in Headers */,
31103671 74C9BB8B11ACBB9900AF885C /* AssimpPCH.h in Headers */,
31113672 74C9BB9A11ACBBBC00AF885C /* COBLoader.h in Headers */,
31123673 74C9BB9B11ACBBBC00AF885C /* COBScene.h in Headers */,
31133674 74C9BBB511ACBC2600AF885C /* revision.h in Headers */,
3114 74C9BBC311ACBC6C00AF885C /* Exceptional.h in Headers */,
3115 74C9BBC411ACBC6C00AF885C /* LineSplitter.h in Headers */,
3116 74C9BBC511ACBC6C00AF885C /* MD4FileData.h in Headers */,
3117 74C9BBC611ACBC6C00AF885C /* TinyFormatter.h in Headers */,
31183675 8E7ABBBD127E0F1A00512ED1 /* Q3BSPFileData.h in Headers */,
31193676 8E7ABBBF127E0F1A00512ED1 /* Q3BSPFileImporter.h in Headers */,
31203677 8E7ABBC1127E0F1A00512ED1 /* Q3BSPFileParser.h in Headers */,
31223679 8E7ABBCD127E0F2A00512ED1 /* NDOLoader.h in Headers */,
31233680 8E7ABBDA127E0F3800512ED1 /* BlenderIntermediate.h in Headers */,
31243681 8E7ABBDC127E0F3800512ED1 /* BlenderModifier.h in Headers */,
3125 8E7ABBEF127E0FA400512ED1 /* assbin_chunks.h in Headers */,
3126 8E7ABBF0127E0FA400512ED1 /* DefaultProgressHandler.h in Headers */,
3127 8E7ABBF1127E0FA400512ED1 /* Profiler.h in Headers */,
3128 8E7ABBF2127E0FA400512ED1 /* pstdint.h in Headers */,
31293682 8E8DEE87127E2B78005EF64D /* ConvertUTF.h in Headers */,
31303683 8E8DEE88127E2B78005EF64D /* CXMLReaderImpl.h in Headers */,
31313684 8E8DEE89127E2B78005EF64D /* heapsort.h in Headers */,
31713724 F9BA8C261543268400E63FFE /* version.h in Headers */,
31723725 F9BA8C4E154328B600E63FFE /* OgreImporter.hpp in Headers */,
31733726 F9BA8C52154328B600E63FFE /* OgreXmlHelper.hpp in Headers */,
3174 F99A9EB715436077000682F3 /* BlobIOSystem.h in Headers */,
3175 F99A9EBC15436098000682F3 /* lexical_cast.hpp in Headers */,
3176 F99A9EC1154360A0000682F3 /* make_shared.hpp in Headers */,
3177 F99A9EC6154360A5000682F3 /* noncopyable.hpp in Headers */,
3178 F99A9ECB154360B5000682F3 /* timer.hpp in Headers */,
3179 F99A9ED0154360E2000682F3 /* CInterfaceIOWrapper.h in Headers */,
3180 F99A9EDA15436125000682F3 /* DeboneProcess.h in Headers */,
3181 F99A9F20154361D4000682F3 /* LogAux.h in Headers */,
3182 F99A9F2F15436207000682F3 /* M3Importer.h in Headers */,
31833727 F99A9F3915436269000682F3 /* PlyExporter.h in Headers */,
3184 F99A9F3E15436286000682F3 /* PolyTools.h in Headers */,
3185 F99A9F48154362DE000682F3 /* ScenePrivate.h in Headers */,
3186 F99A9F5215436304000682F3 /* SplitByBoneCountProcess.h in Headers */,
3187 F99A9F6515436323000682F3 /* STEPFile.h in Headers */,
3188 F99A9F6715436323000682F3 /* STEPFileReader.h in Headers */,
31893728 F960709C154366AB004D91DD /* crc32.h in Headers */,
31903729 F960709E154366AB004D91DD /* deflate.h in Headers */,
31913730 F96070A0154366AB004D91DD /* inffast.h in Headers */,
32073746 F960710C1543675E004D91DD /* sweep.h in Headers */,
32083747 F960710E1543675E004D91DD /* sweep_context.h in Headers */,
32093748 F97BA03915439DB3009EB9DD /* ai_assert.h in Headers */,
3210 F97BA09115439FC3009EB9DD /* IFCLoader.h in Headers */,
3211 F97BA09515439FC3009EB9DD /* IFCReaderGen.h in Headers */,
3212 F97BA09715439FC3009EB9DD /* IFCUtil.h in Headers */,
3749 2B7F46E01708365200A106A9 /* assbin_chunks.h in Headers */,
3750 2B7F47081708365200A106A9 /* BaseImporter.h in Headers */,
3751 2B7F47121708365200A106A9 /* BaseProcess.h in Headers */,
3752 2B7F47491708365200A106A9 /* BlobIOSystem.h in Headers */,
3753 2B7F474E1708365200A106A9 /* foreach.hpp in Headers */,
3754 2B7F47531708365200A106A9 /* format.hpp in Headers */,
3755 2B7F47581708365200A106A9 /* lexical_cast.hpp in Headers */,
3756 2B7F475D1708365200A106A9 /* make_shared.hpp in Headers */,
3757 2B7F47621708365200A106A9 /* common_factor_rt.hpp in Headers */,
3758 2B7F47671708365200A106A9 /* noncopyable.hpp in Headers */,
3759 2B7F476C1708365200A106A9 /* pointer_cast.hpp in Headers */,
3760 2B7F47711708365200A106A9 /* scoped_array.hpp in Headers */,
3761 2B7F47761708365200A106A9 /* scoped_ptr.hpp in Headers */,
3762 2B7F477B1708365200A106A9 /* shared_array.hpp in Headers */,
3763 2B7F47801708365200A106A9 /* shared_ptr.hpp in Headers */,
3764 2B7F47851708365200A106A9 /* static_assert.hpp in Headers */,
3765 2B7F478A1708365200A106A9 /* timer.hpp in Headers */,
3766 2B7F478F1708365200A106A9 /* tuple.hpp in Headers */,
3767 2B7F479E1708365200A106A9 /* ByteSwap.h in Headers */,
3768 2B7F47A81708365200A106A9 /* CalcTangentsProcess.h in Headers */,
3769 2B7F47AD1708365200A106A9 /* CInterfaceIOWrapper.h in Headers */,
3770 2B7F47C61708365200A106A9 /* ColladaExporter.h in Headers */,
3771 2B7F47CB1708365200A106A9 /* ColladaHelper.h in Headers */,
3772 2B7F47D51708365200A106A9 /* ColladaLoader.h in Headers */,
3773 2B7F47DF1708365200A106A9 /* ColladaParser.h in Headers */,
3774 2B7F47E91708365200A106A9 /* ComputeUVMappingProcess.h in Headers */,
3775 2B7F47F31708365200A106A9 /* ConvertToLHProcess.h in Headers */,
3776 2B7F48071708365200A106A9 /* DeboneProcess.h in Headers */,
3777 2B7F48111708365200A106A9 /* DefaultIOStream.h in Headers */,
3778 2B7F481B1708365200A106A9 /* DefaultIOSystem.h in Headers */,
3779 2B7F48251708365200A106A9 /* DefaultProgressHandler.h in Headers */,
3780 2B7F48391708365200A106A9 /* Exceptional.h in Headers */,
3781 2B7F48431708365200A106A9 /* fast_atof.h in Headers */,
3782 2B7F48521708365200A106A9 /* FBXCompileConfig.h in Headers */,
3783 2B7F485C1708365200A106A9 /* FBXConverter.h in Headers */,
3784 2B7F486B1708365200A106A9 /* FBXDocument.h in Headers */,
3785 2B7F48751708365200A106A9 /* FBXDocumentUtil.h in Headers */,
3786 2B7F487F1708365200A106A9 /* FBXImporter.h in Headers */,
3787 2B7F48841708365200A106A9 /* FBXImportSettings.h in Headers */,
3788 2B7F48A21708365200A106A9 /* FBXParser.h in Headers */,
3789 2B7F48AC1708365200A106A9 /* FBXProperties.h in Headers */,
3790 2B7F48B61708365200A106A9 /* FBXTokenizer.h in Headers */,
3791 2B7F48C01708365200A106A9 /* FBXUtil.h in Headers */,
3792 2B7F48C51708365200A106A9 /* FileLogStream.h in Headers */,
3793 2B7F48CA1708365200A106A9 /* FileSystemFilter.h in Headers */,
3794 2B7F48D41708365200A106A9 /* FindDegenerates.h in Headers */,
3795 2B7F48DE1708365200A106A9 /* FindInstancesProcess.h in Headers */,
3796 2B7F48E81708365200A106A9 /* FindInvalidDataProcess.h in Headers */,
3797 2B7F48F21708365200A106A9 /* FixNormalsStep.h in Headers */,
3798 2B7F48F71708365200A106A9 /* GenericProperty.h in Headers */,
3799 2B7F49011708365200A106A9 /* GenFaceNormalsProcess.h in Headers */,
3800 2B7F490B1708365200A106A9 /* GenVertexNormalsProcess.h in Headers */,
3801 2B7F49151708365200A106A9 /* Hash.h in Headers */,
3802 2B7F493D1708365200A106A9 /* IFCLoader.h in Headers */,
3803 2B7F49561708365200A106A9 /* IFCReaderGen.h in Headers */,
3804 2B7F49601708365200A106A9 /* IFCUtil.h in Headers */,
3805 2B7F49651708365200A106A9 /* IFF.h in Headers */,
3806 2B7F496F1708365200A106A9 /* Importer.h in Headers */,
3807 2B7F497E1708365200A106A9 /* ImproveCacheLocality.h in Headers */,
3808 2B7F49AB1708365200A106A9 /* JoinVerticesProcess.h in Headers */,
3809 2B7F49B51708365200A106A9 /* LimitBoneWeightsProcess.h in Headers */,
3810 2B7F49BA1708365200A106A9 /* LineSplitter.h in Headers */,
3811 2B7F49BF1708365200A106A9 /* LogAux.h in Headers */,
3812 2B7F4A001708365200A106A9 /* MakeVerboseFormat.h in Headers */,
3813 2B7F4A0A1708365200A106A9 /* MaterialSystem.h in Headers */,
3814 2B7F4A321708365200A106A9 /* MD4FileData.h in Headers */,
3815 2B7F4A781708365200A106A9 /* MemoryIOWrapper.h in Headers */,
3816 2B7F4AA01708365200A106A9 /* ObjExporter.h in Headers */,
3817 2B7F4AA51708365200A106A9 /* ObjFileData.h in Headers */,
3818 2B7F4AAF1708365200A106A9 /* ObjFileImporter.h in Headers */,
3819 2B7F4AB91708365200A106A9 /* ObjFileMtlImporter.h in Headers */,
3820 2B7F4AC31708365200A106A9 /* ObjFileParser.h in Headers */,
3821 2B7F4AC81708365200A106A9 /* ObjTools.h in Headers */,
3822 2B7F4AFA1708365200A106A9 /* OptimizeGraph.h in Headers */,
3823 2B7F4B041708365200A106A9 /* OptimizeMeshes.h in Headers */,
3824 2B7F4B091708365200A106A9 /* ParsingUtils.h in Headers */,
3825 2B7F4B2C1708365200A106A9 /* PolyTools.h in Headers */,
3826 2B7F4B3B1708365200A106A9 /* PretransformVertices.h in Headers */,
3827 2B7F4B451708365200A106A9 /* ProcessHelper.h in Headers */,
3828 2B7F4B4A1708365200A106A9 /* Profiler.h in Headers */,
3829 2B7F4B4F1708365200A106A9 /* pstdint.h in Headers */,
3830 2B7F4B811708365200A106A9 /* qnan.h in Headers */,
3831 2B7F4B951708365200A106A9 /* RemoveComments.h in Headers */,
3832 2B7F4B9F1708365200A106A9 /* RemoveRedundantMaterials.h in Headers */,
3833 2B7F4BA91708365200A106A9 /* RemoveVCProcess.h in Headers */,
3834 2B7F4BB81708365200A106A9 /* SceneCombiner.h in Headers */,
3835 2B7F4BC21708365200A106A9 /* ScenePreprocessor.h in Headers */,
3836 2B7F4BC71708365200A106A9 /* ScenePrivate.h in Headers */,
3837 2B7F4BD11708365200A106A9 /* SGSpatialSort.h in Headers */,
3838 2B7F4BDB1708365200A106A9 /* SkeletonMeshBuilder.h in Headers */,
3839 2B7F4BEA1708365200A106A9 /* SmoothingGroups.h in Headers */,
3840 2B7F4BF41708365200A106A9 /* SortByPTypeProcess.h in Headers */,
3841 2B7F4BFE1708365200A106A9 /* SpatialSort.h in Headers */,
3842 2B7F4C081708365200A106A9 /* SplitByBoneCountProcess.h in Headers */,
3843 2B7F4C121708365200A106A9 /* SplitLargeMeshes.h in Headers */,
3844 2B7F4C1C1708365200A106A9 /* StandardShapes.h in Headers */,
3845 2B7F4C211708365200A106A9 /* StdOStreamLogStream.h in Headers */,
3846 2B7F4C261708365200A106A9 /* STEPFile.h in Headers */,
3847 2B7F4C301708365200A106A9 /* STEPFileEncoding.h in Headers */,
3848 2B7F4C3A1708365200A106A9 /* STEPFileReader.h in Headers */,
3849 2B7F4C441708365200A106A9 /* STLExporter.h in Headers */,
3850 2B7F4C4E1708365200A106A9 /* STLLoader.h in Headers */,
3851 2B7F4C531708365200A106A9 /* StreamReader.h in Headers */,
3852 2B7F4C581708365200A106A9 /* StringComparison.h in Headers */,
3853 2B7F4C621708365200A106A9 /* Subdivision.h in Headers */,
3854 2B7F4C6C1708365200A106A9 /* TargetAnimation.h in Headers */,
3855 2B7F4C801708365200A106A9 /* TextureTransform.h in Headers */,
3856 2B7F4C851708365200A106A9 /* TinyFormatter.h in Headers */,
3857 2B7F4C8F1708365200A106A9 /* TriangulateProcess.h in Headers */,
3858 2B7F4CA31708365200A106A9 /* ValidateDataStructure.h in Headers */,
3859 2B7F4CA81708365200A106A9 /* Vertex.h in Headers */,
3860 2B7F4CB21708365200A106A9 /* VertexTriangleAdjacency.h in Headers */,
3861 2B7F4CB71708365200A106A9 /* Win32DebugLogStream.h in Headers */,
3862 );
3863 runOnlyForDeploymentPostprocessing = 0;
3864 };
3865 B91974D0163AEA54009C397B /* Headers */ = {
3866 isa = PBXHeadersBuildPhase;
3867 buildActionMask = 2147483647;
3868 files = (
3869 B91974D1163AEA54009C397B /* 3DSHelper.h in Headers */,
3870 B91974D2163AEA54009C397B /* 3DSLoader.h in Headers */,
3871 B91974D3163AEA54009C397B /* ASELoader.h in Headers */,
3872 B91974D4163AEA54009C397B /* ASEParser.h in Headers */,
3873 B91974E0163AEA54009C397B /* HalfLifeFileData.h in Headers */,
3874 B91974E1163AEA54009C397B /* HMPLoader.h in Headers */,
3875 B91974E6163AEA54009C397B /* MD2FileData.h in Headers */,
3876 B91974E7163AEA54009C397B /* MD2Loader.h in Headers */,
3877 B91974E8163AEA54009C397B /* MD2NormalTable.h in Headers */,
3878 B91974E9163AEA54009C397B /* MD3FileData.h in Headers */,
3879 B91974EA163AEA54009C397B /* MD3Loader.h in Headers */,
3880 B91974EB163AEA54009C397B /* MD5Loader.h in Headers */,
3881 B91974EC163AEA54009C397B /* MD5Parser.h in Headers */,
3882 B91974ED163AEA54009C397B /* MDLDefaultColorMap.h in Headers */,
3883 B91974EE163AEA54009C397B /* MDLFileData.h in Headers */,
3884 B91974EF163AEA54009C397B /* MDLLoader.h in Headers */,
3885 B91974F6163AEA54009C397B /* PlyLoader.h in Headers */,
3886 B91974F7163AEA54009C397B /* PlyParser.h in Headers */,
3887 B91974FC163AEA54009C397B /* SMDLoader.h in Headers */,
3888 B9197506163AEA54009C397B /* XFileHelper.h in Headers */,
3889 B9197507163AEA54009C397B /* XFileImporter.h in Headers */,
3890 B9197508163AEA54009C397B /* XFileParser.h in Headers */,
3891 B9197509163AEA54009C397B /* MDCFileData.h in Headers */,
3892 B919750A163AEA54009C397B /* MDCLoader.h in Headers */,
3893 B919750B163AEA54009C397B /* MDCNormalTable.h in Headers */,
3894 B919750D163AEA54009C397B /* LWOFileData.h in Headers */,
3895 B919750E163AEA54009C397B /* LWOLoader.h in Headers */,
3896 B919750F163AEA54009C397B /* HMPFileData.h in Headers */,
3897 B9197512163AEA54009C397B /* ACLoader.h in Headers */,
3898 B9197513163AEA54009C397B /* IRRLoader.h in Headers */,
3899 B9197514163AEA54009C397B /* IRRMeshLoader.h in Headers */,
3900 B9197515163AEA54009C397B /* IRRShared.h in Headers */,
3901 B9197519163AEA54009C397B /* NFFLoader.h in Headers */,
3902 B919751B163AEA54009C397B /* Q3DLoader.h in Headers */,
3903 B919751C163AEA54009C397B /* BVHLoader.h in Headers */,
3904 B919751D163AEA54009C397B /* OFFLoader.h in Headers */,
3905 B919751E163AEA54009C397B /* RawLoader.h in Headers */,
3906 B919751F163AEA54009C397B /* DXFLoader.h in Headers */,
3907 B9197520163AEA54009C397B /* TerragenLoader.h in Headers */,
3908 B9197521163AEA54009C397B /* irrXMLWrapper.h in Headers */,
3909 B919752D163AEA54009C397B /* B3DImporter.h in Headers */,
3910 B9197535163AEA54009C397B /* CSMLoader.h in Headers */,
3911 B9197536163AEA54009C397B /* LWSLoader.h in Headers */,
3912 B9197537163AEA54009C397B /* LWOAnimation.h in Headers */,
3913 B9197538163AEA54009C397B /* MS3DLoader.h in Headers */,
3914 B9197539163AEA54009C397B /* UnrealLoader.h in Headers */,
3915 B9197545163AEA54009C397B /* BlenderDNA.h in Headers */,
3916 B9197546163AEA54009C397B /* BlenderLoader.h in Headers */,
3917 B9197547163AEA54009C397B /* BlenderScene.h in Headers */,
3918 B9197548163AEA54009C397B /* BlenderSceneGen.h in Headers */,
3919 B919754D163AEA54009C397B /* AssimpPCH.h in Headers */,
3920 B919754E163AEA54009C397B /* COBLoader.h in Headers */,
3921 B919754F163AEA54009C397B /* COBScene.h in Headers */,
3922 B9197550163AEA54009C397B /* revision.h in Headers */,
3923 B9197555163AEA54009C397B /* Q3BSPFileData.h in Headers */,
3924 B9197556163AEA54009C397B /* Q3BSPFileImporter.h in Headers */,
3925 B9197557163AEA54009C397B /* Q3BSPFileParser.h in Headers */,
3926 B9197558163AEA54009C397B /* Q3BSPZipArchive.h in Headers */,
3927 B9197559163AEA54009C397B /* NDOLoader.h in Headers */,
3928 B919755A163AEA54009C397B /* BlenderIntermediate.h in Headers */,
3929 B919755B163AEA54009C397B /* BlenderModifier.h in Headers */,
3930 B9197560163AEA54009C397B /* ConvertUTF.h in Headers */,
3931 B9197561163AEA54009C397B /* CXMLReaderImpl.h in Headers */,
3932 B9197562163AEA54009C397B /* heapsort.h in Headers */,
3933 B9197563163AEA54009C397B /* irrArray.h in Headers */,
3934 B9197564163AEA54009C397B /* irrString.h in Headers */,
3935 B9197565163AEA54009C397B /* irrTypes.h in Headers */,
3936 B9197566163AEA54009C397B /* irrXML.h in Headers */,
3937 B9197567163AEA54009C397B /* crypt.h in Headers */,
3938 B9197568163AEA54009C397B /* ioapi.h in Headers */,
3939 B9197569163AEA54009C397B /* unzip.h in Headers */,
3940 B919756A163AEA54009C397B /* anim.h in Headers */,
3941 B919756B163AEA54009C397B /* camera.h in Headers */,
3942 B919756C163AEA54009C397B /* cexport.h in Headers */,
3943 B919756D163AEA54009C397B /* cfileio.h in Headers */,
3944 B919756E163AEA54009C397B /* cimport.h in Headers */,
3945 B919756F163AEA54009C397B /* color4.h in Headers */,
3946 B9197570163AEA54009C397B /* poppack1.h in Headers */,
3947 B9197571163AEA54009C397B /* pushpack1.h in Headers */,
3948 B9197572163AEA54009C397B /* config.h in Headers */,
3949 B9197573163AEA54009C397B /* DefaultLogger.hpp in Headers */,
3950 B9197574163AEA54009C397B /* defs.h in Headers */,
3951 B9197575163AEA54009C397B /* Exporter.hpp in Headers */,
3952 B9197576163AEA54009C397B /* Importer.hpp in Headers */,
3953 B9197577163AEA54009C397B /* importerdesc.h in Headers */,
3954 B9197578163AEA54009C397B /* IOStream.hpp in Headers */,
3955 B9197579163AEA54009C397B /* IOSystem.hpp in Headers */,
3956 B919757A163AEA54009C397B /* light.h in Headers */,
3957 B919757B163AEA54009C397B /* Logger.hpp in Headers */,
3958 B919757C163AEA54009C397B /* LogStream.hpp in Headers */,
3959 B919757D163AEA54009C397B /* material.h in Headers */,
3960 B919757E163AEA54009C397B /* matrix3x3.h in Headers */,
3961 B919757F163AEA54009C397B /* matrix4x4.h in Headers */,
3962 B9197580163AEA54009C397B /* mesh.h in Headers */,
3963 B9197581163AEA54009C397B /* NullLogger.hpp in Headers */,
3964 B9197582163AEA54009C397B /* postprocess.h in Headers */,
3965 B9197583163AEA54009C397B /* ProgressHandler.hpp in Headers */,
3966 B9197584163AEA54009C397B /* quaternion.h in Headers */,
3967 B9197585163AEA54009C397B /* scene.h in Headers */,
3968 B9197586163AEA54009C397B /* texture.h in Headers */,
3969 B9197587163AEA54009C397B /* types.h in Headers */,
3970 B9197588163AEA54009C397B /* vector2.h in Headers */,
3971 B9197589163AEA54009C397B /* vector3.h in Headers */,
3972 B919758A163AEA54009C397B /* version.h in Headers */,
3973 B919758B163AEA54009C397B /* OgreImporter.hpp in Headers */,
3974 B919758C163AEA54009C397B /* OgreXmlHelper.hpp in Headers */,
3975 B9197596163AEA54009C397B /* PlyExporter.h in Headers */,
3976 B919759C163AEA54009C397B /* crc32.h in Headers */,
3977 B919759D163AEA54009C397B /* deflate.h in Headers */,
3978 B919759E163AEA54009C397B /* inffast.h in Headers */,
3979 B919759F163AEA54009C397B /* inffixed.h in Headers */,
3980 B91975A0163AEA54009C397B /* inflate.h in Headers */,
3981 B91975A1163AEA54009C397B /* inftrees.h in Headers */,
3982 B91975A2163AEA54009C397B /* trees.h in Headers */,
3983 B91975A3163AEA54009C397B /* zconf.h in Headers */,
3984 B91975A4163AEA54009C397B /* zconf.in.h in Headers */,
3985 B91975A5163AEA54009C397B /* zlib.h in Headers */,
3986 B91975A6163AEA54009C397B /* zutil.h in Headers */,
3987 B91975A7163AEA54009C397B /* XGLLoader.h in Headers */,
3988 B91975A8163AEA54009C397B /* clipper.hpp in Headers */,
3989 B91975A9163AEA54009C397B /* shapes.h in Headers */,
3990 B91975AA163AEA54009C397B /* utils.h in Headers */,
3991 B91975AB163AEA54009C397B /* poly2tri.h in Headers */,
3992 B91975AC163AEA54009C397B /* advancing_front.h in Headers */,
3993 B91975AD163AEA54009C397B /* cdt.h in Headers */,
3994 B91975AE163AEA54009C397B /* sweep.h in Headers */,
3995 B91975AF163AEA54009C397B /* sweep_context.h in Headers */,
3996 B91975B0163AEA54009C397B /* ai_assert.h in Headers */,
3997 2B7F46E11708365200A106A9 /* assbin_chunks.h in Headers */,
3998 2B7F47091708365200A106A9 /* BaseImporter.h in Headers */,
3999 2B7F47131708365200A106A9 /* BaseProcess.h in Headers */,
4000 2B7F474A1708365200A106A9 /* BlobIOSystem.h in Headers */,
4001 2B7F474F1708365200A106A9 /* foreach.hpp in Headers */,
4002 2B7F47541708365200A106A9 /* format.hpp in Headers */,
4003 2B7F47591708365200A106A9 /* lexical_cast.hpp in Headers */,
4004 2B7F475E1708365200A106A9 /* make_shared.hpp in Headers */,
4005 2B7F47631708365200A106A9 /* common_factor_rt.hpp in Headers */,
4006 2B7F47681708365200A106A9 /* noncopyable.hpp in Headers */,
4007 2B7F476D1708365200A106A9 /* pointer_cast.hpp in Headers */,
4008 2B7F47721708365200A106A9 /* scoped_array.hpp in Headers */,
4009 2B7F47771708365200A106A9 /* scoped_ptr.hpp in Headers */,
4010 2B7F477C1708365200A106A9 /* shared_array.hpp in Headers */,
4011 2B7F47811708365200A106A9 /* shared_ptr.hpp in Headers */,
4012 2B7F47861708365200A106A9 /* static_assert.hpp in Headers */,
4013 2B7F478B1708365200A106A9 /* timer.hpp in Headers */,
4014 2B7F47901708365200A106A9 /* tuple.hpp in Headers */,
4015 2B7F479F1708365200A106A9 /* ByteSwap.h in Headers */,
4016 2B7F47A91708365200A106A9 /* CalcTangentsProcess.h in Headers */,
4017 2B7F47AE1708365200A106A9 /* CInterfaceIOWrapper.h in Headers */,
4018 2B7F47C71708365200A106A9 /* ColladaExporter.h in Headers */,
4019 2B7F47CC1708365200A106A9 /* ColladaHelper.h in Headers */,
4020 2B7F47D61708365200A106A9 /* ColladaLoader.h in Headers */,
4021 2B7F47E01708365200A106A9 /* ColladaParser.h in Headers */,
4022 2B7F47EA1708365200A106A9 /* ComputeUVMappingProcess.h in Headers */,
4023 2B7F47F41708365200A106A9 /* ConvertToLHProcess.h in Headers */,
4024 2B7F48081708365200A106A9 /* DeboneProcess.h in Headers */,
4025 2B7F48121708365200A106A9 /* DefaultIOStream.h in Headers */,
4026 2B7F481C1708365200A106A9 /* DefaultIOSystem.h in Headers */,
4027 2B7F48261708365200A106A9 /* DefaultProgressHandler.h in Headers */,
4028 2B7F483A1708365200A106A9 /* Exceptional.h in Headers */,
4029 2B7F48441708365200A106A9 /* fast_atof.h in Headers */,
4030 2B7F48531708365200A106A9 /* FBXCompileConfig.h in Headers */,
4031 2B7F485D1708365200A106A9 /* FBXConverter.h in Headers */,
4032 2B7F486C1708365200A106A9 /* FBXDocument.h in Headers */,
4033 2B7F48761708365200A106A9 /* FBXDocumentUtil.h in Headers */,
4034 2B7F48801708365200A106A9 /* FBXImporter.h in Headers */,
4035 2B7F48851708365200A106A9 /* FBXImportSettings.h in Headers */,
4036 2B7F48A31708365200A106A9 /* FBXParser.h in Headers */,
4037 2B7F48AD1708365200A106A9 /* FBXProperties.h in Headers */,
4038 2B7F48B71708365200A106A9 /* FBXTokenizer.h in Headers */,
4039 2B7F48C11708365200A106A9 /* FBXUtil.h in Headers */,
4040 2B7F48C61708365200A106A9 /* FileLogStream.h in Headers */,
4041 2B7F48CB1708365200A106A9 /* FileSystemFilter.h in Headers */,
4042 2B7F48D51708365200A106A9 /* FindDegenerates.h in Headers */,
4043 2B7F48DF1708365200A106A9 /* FindInstancesProcess.h in Headers */,
4044 2B7F48E91708365200A106A9 /* FindInvalidDataProcess.h in Headers */,
4045 2B7F48F31708365200A106A9 /* FixNormalsStep.h in Headers */,
4046 2B7F48F81708365200A106A9 /* GenericProperty.h in Headers */,
4047 2B7F49021708365200A106A9 /* GenFaceNormalsProcess.h in Headers */,
4048 2B7F490C1708365200A106A9 /* GenVertexNormalsProcess.h in Headers */,
4049 2B7F49161708365200A106A9 /* Hash.h in Headers */,
4050 2B7F493E1708365200A106A9 /* IFCLoader.h in Headers */,
4051 2B7F49571708365200A106A9 /* IFCReaderGen.h in Headers */,
4052 2B7F49611708365200A106A9 /* IFCUtil.h in Headers */,
4053 2B7F49661708365200A106A9 /* IFF.h in Headers */,
4054 2B7F49701708365200A106A9 /* Importer.h in Headers */,
4055 2B7F497F1708365200A106A9 /* ImproveCacheLocality.h in Headers */,
4056 2B7F49AC1708365200A106A9 /* JoinVerticesProcess.h in Headers */,
4057 2B7F49B61708365200A106A9 /* LimitBoneWeightsProcess.h in Headers */,
4058 2B7F49BB1708365200A106A9 /* LineSplitter.h in Headers */,
4059 2B7F49C01708365200A106A9 /* LogAux.h in Headers */,
4060 2B7F4A011708365200A106A9 /* MakeVerboseFormat.h in Headers */,
4061 2B7F4A0B1708365200A106A9 /* MaterialSystem.h in Headers */,
4062 2B7F4A331708365200A106A9 /* MD4FileData.h in Headers */,
4063 2B7F4A791708365200A106A9 /* MemoryIOWrapper.h in Headers */,
4064 2B7F4AA11708365200A106A9 /* ObjExporter.h in Headers */,
4065 2B7F4AA61708365200A106A9 /* ObjFileData.h in Headers */,
4066 2B7F4AB01708365200A106A9 /* ObjFileImporter.h in Headers */,
4067 2B7F4ABA1708365200A106A9 /* ObjFileMtlImporter.h in Headers */,
4068 2B7F4AC41708365200A106A9 /* ObjFileParser.h in Headers */,
4069 2B7F4AC91708365200A106A9 /* ObjTools.h in Headers */,
4070 2B7F4AFB1708365200A106A9 /* OptimizeGraph.h in Headers */,
4071 2B7F4B051708365200A106A9 /* OptimizeMeshes.h in Headers */,
4072 2B7F4B0A1708365200A106A9 /* ParsingUtils.h in Headers */,
4073 2B7F4B2D1708365200A106A9 /* PolyTools.h in Headers */,
4074 2B7F4B3C1708365200A106A9 /* PretransformVertices.h in Headers */,
4075 2B7F4B461708365200A106A9 /* ProcessHelper.h in Headers */,
4076 2B7F4B4B1708365200A106A9 /* Profiler.h in Headers */,
4077 2B7F4B501708365200A106A9 /* pstdint.h in Headers */,
4078 2B7F4B821708365200A106A9 /* qnan.h in Headers */,
4079 2B7F4B961708365200A106A9 /* RemoveComments.h in Headers */,
4080 2B7F4BA01708365200A106A9 /* RemoveRedundantMaterials.h in Headers */,
4081 2B7F4BAA1708365200A106A9 /* RemoveVCProcess.h in Headers */,
4082 2B7F4BB91708365200A106A9 /* SceneCombiner.h in Headers */,
4083 2B7F4BC31708365200A106A9 /* ScenePreprocessor.h in Headers */,
4084 2B7F4BC81708365200A106A9 /* ScenePrivate.h in Headers */,
4085 2B7F4BD21708365200A106A9 /* SGSpatialSort.h in Headers */,
4086 2B7F4BDC1708365200A106A9 /* SkeletonMeshBuilder.h in Headers */,
4087 2B7F4BEB1708365200A106A9 /* SmoothingGroups.h in Headers */,
4088 2B7F4BF51708365200A106A9 /* SortByPTypeProcess.h in Headers */,
4089 2B7F4BFF1708365200A106A9 /* SpatialSort.h in Headers */,
4090 2B7F4C091708365200A106A9 /* SplitByBoneCountProcess.h in Headers */,
4091 2B7F4C131708365200A106A9 /* SplitLargeMeshes.h in Headers */,
4092 2B7F4C1D1708365200A106A9 /* StandardShapes.h in Headers */,
4093 2B7F4C221708365200A106A9 /* StdOStreamLogStream.h in Headers */,
4094 2B7F4C271708365200A106A9 /* STEPFile.h in Headers */,
4095 2B7F4C311708365200A106A9 /* STEPFileEncoding.h in Headers */,
4096 2B7F4C3B1708365200A106A9 /* STEPFileReader.h in Headers */,
4097 2B7F4C451708365200A106A9 /* STLExporter.h in Headers */,
4098 2B7F4C4F1708365200A106A9 /* STLLoader.h in Headers */,
4099 2B7F4C541708365200A106A9 /* StreamReader.h in Headers */,
4100 2B7F4C591708365200A106A9 /* StringComparison.h in Headers */,
4101 2B7F4C631708365200A106A9 /* Subdivision.h in Headers */,
4102 2B7F4C6D1708365200A106A9 /* TargetAnimation.h in Headers */,
4103 2B7F4C811708365200A106A9 /* TextureTransform.h in Headers */,
4104 2B7F4C861708365200A106A9 /* TinyFormatter.h in Headers */,
4105 2B7F4C901708365200A106A9 /* TriangulateProcess.h in Headers */,
4106 2B7F4CA41708365200A106A9 /* ValidateDataStructure.h in Headers */,
4107 2B7F4CA91708365200A106A9 /* Vertex.h in Headers */,
4108 2B7F4CB31708365200A106A9 /* VertexTriangleAdjacency.h in Headers */,
4109 2B7F4CB81708365200A106A9 /* Win32DebugLogStream.h in Headers */,
32134110 );
32144111 runOnlyForDeploymentPostprocessing = 0;
32154112 };
32214118 3AF45AFD0E4B716800207D74 /* 3DSLoader.h in Headers */,
32224119 3AF45B020E4B716800207D74 /* ASELoader.h in Headers */,
32234120 3AF45B040E4B716800207D74 /* ASEParser.h in Headers */,
3224 3AF45B070E4B716800207D74 /* BaseImporter.h in Headers */,
3225 3AF45B080E4B716800207D74 /* BaseProcess.h in Headers */,
3226 3AF45B090E4B716800207D74 /* ByteSwap.h in Headers */,
3227 3AF45B0B0E4B716800207D74 /* CalcTangentsProcess.h in Headers */,
3228 3AF45B0D0E4B716800207D74 /* ConvertToLHProcess.h in Headers */,
3229 3AF45B0F0E4B716800207D74 /* DefaultIOStream.h in Headers */,
3230 3AF45B110E4B716800207D74 /* DefaultIOSystem.h in Headers */,
3231 3AF45B150E4B716800207D74 /* fast_atof.h in Headers */,
3232 3AF45B160E4B716800207D74 /* FileLogStream.h in Headers */,
3233 3AF45B180E4B716800207D74 /* GenFaceNormalsProcess.h in Headers */,
3234 3AF45B1A0E4B716800207D74 /* GenVertexNormalsProcess.h in Headers */,
32354121 3AF45B1B0E4B716800207D74 /* HalfLifeFileData.h in Headers */,
32364122 3AF45B1E0E4B716800207D74 /* HMPLoader.h in Headers */,
3237 3AF45B210E4B716800207D74 /* ImproveCacheLocality.h in Headers */,
3238 3AF45B230E4B716800207D74 /* JoinVerticesProcess.h in Headers */,
3239 3AF45B270E4B716800207D74 /* LimitBoneWeightsProcess.h in Headers */,
3240 3AF45B290E4B716800207D74 /* MaterialSystem.h in Headers */,
32414123 3AF45B2A0E4B716800207D74 /* MD2FileData.h in Headers */,
32424124 3AF45B2C0E4B716800207D74 /* MD2Loader.h in Headers */,
32434125 3AF45B2D0E4B716800207D74 /* MD2NormalTable.h in Headers */,
32484130 3AF45B380E4B716800207D74 /* MDLDefaultColorMap.h in Headers */,
32494131 3AF45B390E4B716800207D74 /* MDLFileData.h in Headers */,
32504132 3AF45B3B0E4B716800207D74 /* MDLLoader.h in Headers */,
3251 3AF45B3D0E4B716800207D74 /* ObjFileData.h in Headers */,
3252 3AF45B3F0E4B716800207D74 /* ObjFileImporter.h in Headers */,
3253 3AF45B410E4B716800207D74 /* ObjFileMtlImporter.h in Headers */,
3254 3AF45B430E4B716800207D74 /* ObjFileParser.h in Headers */,
3255 3AF45B440E4B716800207D74 /* ObjTools.h in Headers */,
3256 3AF45B450E4B716800207D74 /* ParsingUtils.h in Headers */,
32574133 3AF45B470E4B716800207D74 /* PlyLoader.h in Headers */,
32584134 3AF45B490E4B716800207D74 /* PlyParser.h in Headers */,
3259 3AF45B4B0E4B716800207D74 /* PretransformVertices.h in Headers */,
3260 3AF45B4C0E4B716800207D74 /* qnan.h in Headers */,
3261 3AF45B4E0E4B716800207D74 /* RemoveComments.h in Headers */,
3262 3AF45B500E4B716800207D74 /* RemoveRedundantMaterials.h in Headers */,
32634135 3AF45B530E4B716800207D74 /* SMDLoader.h in Headers */,
3264 3AF45B550E4B716800207D74 /* SpatialSort.h in Headers */,
3265 3AF45B570E4B716800207D74 /* SplitLargeMeshes.h in Headers */,
3266 3AF45B590E4B716800207D74 /* STLLoader.h in Headers */,
3267 3AF45B5A0E4B716800207D74 /* StringComparison.h in Headers */,
3268 3AF45B5C0E4B716800207D74 /* TextureTransform.h in Headers */,
3269 3AF45B5E0E4B716800207D74 /* TriangulateProcess.h in Headers */,
3270 3AF45B600E4B716800207D74 /* ValidateDataStructure.h in Headers */,
3271 3AF45B620E4B716800207D74 /* VertexTriangleAdjacency.h in Headers */,
3272 3AF45B630E4B716800207D74 /* Win32DebugLogStream.h in Headers */,
32734136 3AF45B640E4B716800207D74 /* XFileHelper.h in Headers */,
32744137 3AF45B660E4B716800207D74 /* XFileImporter.h in Headers */,
32754138 3AF45B680E4B716800207D74 /* XFileParser.h in Headers */,
32764139 3AB8A3AF0E50D67A00606590 /* MDCFileData.h in Headers */,
32774140 3AB8A3B10E50D67A00606590 /* MDCLoader.h in Headers */,
32784141 3AB8A3B20E50D67A00606590 /* MDCNormalTable.h in Headers */,
3279 3AB8A3B60E50D69D00606590 /* FixNormalsStep.h in Headers */,
32804142 3AB8A3BA0E50D6DB00606590 /* LWOFileData.h in Headers */,
32814143 3AB8A3BC0E50D6DB00606590 /* LWOLoader.h in Headers */,
32824144 3AB8A3C60E50D77900606590 /* HMPFileData.h in Headers */,
3283 3AB8A3CA0E50D7CC00606590 /* IFF.h in Headers */,
3284 3AB8A3CD0E50D7FF00606590 /* Hash.h in Headers */,
32854145 F90BAFD30F5DD87000124155 /* ACLoader.h in Headers */,
32864146 F90BAFE00F5DD90800124155 /* IRRLoader.h in Headers */,
32874147 F90BAFE20F5DD90800124155 /* IRRMeshLoader.h in Headers */,
32884148 F90BAFE40F5DD90800124155 /* IRRShared.h in Headers */,
3289 F90BAFED0F5DD93600124155 /* ColladaHelper.h in Headers */,
3290 F90BAFEF0F5DD93600124155 /* ColladaLoader.h in Headers */,
3291 F90BAFF10F5DD93600124155 /* ColladaParser.h in Headers */,
32924149 F90BAFF70F5DD96100124155 /* NFFLoader.h in Headers */,
3293 F90BAFFD0F5DD9A000124155 /* SGSpatialSort.h in Headers */,
32944150 F90BB0090F5DD9DD00124155 /* Q3DLoader.h in Headers */,
32954151 F90BB00E0F5DD9F400124155 /* BVHLoader.h in Headers */,
32964152 F90BB0150F5DDA1400124155 /* OFFLoader.h in Headers */,
32984154 F90BB0230F5DDA5700124155 /* DXFLoader.h in Headers */,
32994155 F90BB0310F5DDAB500124155 /* TerragenLoader.h in Headers */,
33004156 F90BB0370F5DDB1B00124155 /* irrXMLWrapper.h in Headers */,
3301 F90BB03D0F5DDB3200124155 /* ScenePreprocessor.h in Headers */,
3302 F90BB03F0F5DDB3200124155 /* SceneCombiner.h in Headers */,
3303 F90BB0440F5DDB4600124155 /* SortByPTypeProcess.h in Headers */,
3304 F90BB0490F5DDB6100124155 /* FindDegenerates.h in Headers */,
3305 F90BB04E0F5DDB8D00124155 /* ComputeUVMappingProcess.h in Headers */,
3306 F90BB0530F5DDBA800124155 /* StandardShapes.h in Headers */,
3307 F90BB0580F5DDBBF00124155 /* FindInstancesProcess.h in Headers */,
3308 F90BB05C0F5DDBCB00124155 /* RemoveVCProcess.h in Headers */,
3309 F90BB0620F5DDBE600124155 /* FindInvalidDataProcess.h in Headers */,
3310 F90BB0660F5DDC0700124155 /* SkeletonMeshBuilder.h in Headers */,
3311 F90BB06B0F5DDC1E00124155 /* SmoothingGroups.h in Headers */,
33124157 F90BB0890F5DDE0700124155 /* B3DImporter.h in Headers */,
33134158 7411B15511416D5E00BCD793 /* CSMLoader.h in Headers */,
33144159 7411B16011416DDD00BCD793 /* LWSLoader.h in Headers */,
33154160 7411B16A11416DF400BCD793 /* LWOAnimation.h in Headers */,
33164161 7411B17711416E2500BCD793 /* MS3DLoader.h in Headers */,
33174162 7411B19211416EBC00BCD793 /* UnrealLoader.h in Headers */,
3318 7411B1C411416EF400BCD793 /* FileSystemFilter.h in Headers */,
3319 7411B1C511416EF400BCD793 /* GenericProperty.h in Headers */,
3320 7411B1C611416EF400BCD793 /* MemoryIOWrapper.h in Headers */,
3321 7411B1C811416EF400BCD793 /* OptimizeGraph.h in Headers */,
3322 7411B1CA11416EF400BCD793 /* OptimizeMeshes.h in Headers */,
3323 7411B1CB11416EF400BCD793 /* ProcessHelper.h in Headers */,
3324 7411B1CC11416EF400BCD793 /* StdOStreamLogStream.h in Headers */,
3325 7411B1CD11416EF400BCD793 /* StreamReader.h in Headers */,
3326 7411B1CF11416EF400BCD793 /* Subdivision.h in Headers */,
3327 7411B1D111416EF400BCD793 /* TargetAnimation.h in Headers */,
3328 7411B1D211416EF400BCD793 /* Vertex.h in Headers */,
33294163 74C9BB5211ACBB1000AF885C /* BlenderDNA.h in Headers */,
33304164 74C9BB5411ACBB1000AF885C /* BlenderLoader.h in Headers */,
33314165 74C9BB5611ACBB1000AF885C /* BlenderScene.h in Headers */,
33324166 74C9BB5711ACBB1000AF885C /* BlenderSceneGen.h in Headers */,
3333 74C9BB8311ACBB7800AF885C /* MakeVerboseFormat.h in Headers */,
33344167 74C9BB8D11ACBB9900AF885C /* AssimpPCH.h in Headers */,
33354168 74C9BB9D11ACBBBC00AF885C /* COBLoader.h in Headers */,
33364169 74C9BB9E11ACBBBC00AF885C /* COBScene.h in Headers */,
33374170 74C9BBB611ACBC2600AF885C /* revision.h in Headers */,
3338 74C9BBC711ACBC6C00AF885C /* Exceptional.h in Headers */,
3339 74C9BBC811ACBC6C00AF885C /* LineSplitter.h in Headers */,
3340 74C9BBC911ACBC6C00AF885C /* MD4FileData.h in Headers */,
3341 74C9BBCA11ACBC6C00AF885C /* TinyFormatter.h in Headers */,
33424171 8E7ABBAF127E0F1A00512ED1 /* Q3BSPFileData.h in Headers */,
33434172 8E7ABBB1127E0F1A00512ED1 /* Q3BSPFileImporter.h in Headers */,
33444173 8E7ABBB3127E0F1A00512ED1 /* Q3BSPFileParser.h in Headers */,
33464175 8E7ABBC9127E0F2A00512ED1 /* NDOLoader.h in Headers */,
33474176 8E7ABBD4127E0F3800512ED1 /* BlenderIntermediate.h in Headers */,
33484177 8E7ABBD6127E0F3800512ED1 /* BlenderModifier.h in Headers */,
3349 8E7ABBE7127E0FA400512ED1 /* assbin_chunks.h in Headers */,
3350 8E7ABBE8127E0FA400512ED1 /* DefaultProgressHandler.h in Headers */,
3351 8E7ABBE9127E0FA400512ED1 /* Profiler.h in Headers */,
3352 8E7ABBEA127E0FA400512ED1 /* pstdint.h in Headers */,
33534178 8E8DEE6B127E2B78005EF64D /* ConvertUTF.h in Headers */,
33544179 8E8DEE6C127E2B78005EF64D /* CXMLReaderImpl.h in Headers */,
33554180 8E8DEE6D127E2B78005EF64D /* heapsort.h in Headers */,
33954220 F9BA8BC01543268400E63FFE /* version.h in Headers */,
33964221 F9BA8C3C154328B600E63FFE /* OgreImporter.hpp in Headers */,
33974222 F9BA8C40154328B600E63FFE /* OgreXmlHelper.hpp in Headers */,
3398 F99A9EB415436077000682F3 /* BlobIOSystem.h in Headers */,
3399 F99A9EB915436098000682F3 /* lexical_cast.hpp in Headers */,
3400 F99A9EBE154360A0000682F3 /* make_shared.hpp in Headers */,
3401 F99A9EC3154360A5000682F3 /* noncopyable.hpp in Headers */,
3402 F99A9EC8154360B5000682F3 /* timer.hpp in Headers */,
3403 F99A9ECD154360E2000682F3 /* CInterfaceIOWrapper.h in Headers */,
3404 F99A9ED415436125000682F3 /* DeboneProcess.h in Headers */,
3405 F99A9F1D154361D4000682F3 /* LogAux.h in Headers */,
3406 F99A9F2915436207000682F3 /* M3Importer.h in Headers */,
34074223 F99A9F3315436269000682F3 /* PlyExporter.h in Headers */,
3408 F99A9F3B15436286000682F3 /* PolyTools.h in Headers */,
3409 F99A9F45154362DE000682F3 /* ScenePrivate.h in Headers */,
3410 F99A9F4C15436304000682F3 /* SplitByBoneCountProcess.h in Headers */,
3411 F99A9F5C15436323000682F3 /* STEPFile.h in Headers */,
3412 F99A9F5E15436323000682F3 /* STEPFileReader.h in Headers */,
34134224 F9607060154366AB004D91DD /* crc32.h in Headers */,
34144225 F9607062154366AB004D91DD /* deflate.h in Headers */,
34154226 F9607064154366AB004D91DD /* inffast.h in Headers */,
34314242 F96070E81543675E004D91DD /* sweep.h in Headers */,
34324243 F96070EA1543675E004D91DD /* sweep_context.h in Headers */,
34334244 F97BA03615439DB3009EB9DD /* ai_assert.h in Headers */,
3434 F97BA07315439FC3009EB9DD /* IFCLoader.h in Headers */,
3435 F97BA07715439FC3009EB9DD /* IFCReaderGen.h in Headers */,
3436 F97BA07915439FC3009EB9DD /* IFCUtil.h in Headers */,
4245 2B7F46DD1708365200A106A9 /* assbin_chunks.h in Headers */,
4246 2B7F47051708365200A106A9 /* BaseImporter.h in Headers */,
4247 2B7F470F1708365200A106A9 /* BaseProcess.h in Headers */,
4248 2B7F47461708365200A106A9 /* BlobIOSystem.h in Headers */,
4249 2B7F474B1708365200A106A9 /* foreach.hpp in Headers */,
4250 2B7F47501708365200A106A9 /* format.hpp in Headers */,
4251 2B7F47551708365200A106A9 /* lexical_cast.hpp in Headers */,
4252 2B7F475A1708365200A106A9 /* make_shared.hpp in Headers */,
4253 2B7F475F1708365200A106A9 /* common_factor_rt.hpp in Headers */,
4254 2B7F47641708365200A106A9 /* noncopyable.hpp in Headers */,
4255 2B7F47691708365200A106A9 /* pointer_cast.hpp in Headers */,
4256 2B7F476E1708365200A106A9 /* scoped_array.hpp in Headers */,
4257 2B7F47731708365200A106A9 /* scoped_ptr.hpp in Headers */,
4258 2B7F47781708365200A106A9 /* shared_array.hpp in Headers */,
4259 2B7F477D1708365200A106A9 /* shared_ptr.hpp in Headers */,
4260 2B7F47821708365200A106A9 /* static_assert.hpp in Headers */,
4261 2B7F47871708365200A106A9 /* timer.hpp in Headers */,
4262 2B7F478C1708365200A106A9 /* tuple.hpp in Headers */,
4263 2B7F479B1708365200A106A9 /* ByteSwap.h in Headers */,
4264 2B7F47A51708365200A106A9 /* CalcTangentsProcess.h in Headers */,
4265 2B7F47AA1708365200A106A9 /* CInterfaceIOWrapper.h in Headers */,
4266 2B7F47C31708365200A106A9 /* ColladaExporter.h in Headers */,
4267 2B7F47C81708365200A106A9 /* ColladaHelper.h in Headers */,
4268 2B7F47D21708365200A106A9 /* ColladaLoader.h in Headers */,
4269 2B7F47DC1708365200A106A9 /* ColladaParser.h in Headers */,
4270 2B7F47E61708365200A106A9 /* ComputeUVMappingProcess.h in Headers */,
4271 2B7F47F01708365200A106A9 /* ConvertToLHProcess.h in Headers */,
4272 2B7F48041708365200A106A9 /* DeboneProcess.h in Headers */,
4273 2B7F480E1708365200A106A9 /* DefaultIOStream.h in Headers */,
4274 2B7F48181708365200A106A9 /* DefaultIOSystem.h in Headers */,
4275 2B7F48221708365200A106A9 /* DefaultProgressHandler.h in Headers */,
4276 2B7F48361708365200A106A9 /* Exceptional.h in Headers */,
4277 2B7F48401708365200A106A9 /* fast_atof.h in Headers */,
4278 2B7F484F1708365200A106A9 /* FBXCompileConfig.h in Headers */,
4279 2B7F48591708365200A106A9 /* FBXConverter.h in Headers */,
4280 2B7F48681708365200A106A9 /* FBXDocument.h in Headers */,
4281 2B7F48721708365200A106A9 /* FBXDocumentUtil.h in Headers */,
4282 2B7F487C1708365200A106A9 /* FBXImporter.h in Headers */,
4283 2B7F48811708365200A106A9 /* FBXImportSettings.h in Headers */,
4284 2B7F489F1708365200A106A9 /* FBXParser.h in Headers */,
4285 2B7F48A91708365200A106A9 /* FBXProperties.h in Headers */,
4286 2B7F48B31708365200A106A9 /* FBXTokenizer.h in Headers */,
4287 2B7F48BD1708365200A106A9 /* FBXUtil.h in Headers */,
4288 2B7F48C21708365200A106A9 /* FileLogStream.h in Headers */,
4289 2B7F48C71708365200A106A9 /* FileSystemFilter.h in Headers */,
4290 2B7F48D11708365200A106A9 /* FindDegenerates.h in Headers */,
4291 2B7F48DB1708365200A106A9 /* FindInstancesProcess.h in Headers */,
4292 2B7F48E51708365200A106A9 /* FindInvalidDataProcess.h in Headers */,
4293 2B7F48EF1708365200A106A9 /* FixNormalsStep.h in Headers */,
4294 2B7F48F41708365200A106A9 /* GenericProperty.h in Headers */,
4295 2B7F48FE1708365200A106A9 /* GenFaceNormalsProcess.h in Headers */,
4296 2B7F49081708365200A106A9 /* GenVertexNormalsProcess.h in Headers */,
4297 2B7F49121708365200A106A9 /* Hash.h in Headers */,
4298 2B7F493A1708365200A106A9 /* IFCLoader.h in Headers */,
4299 2B7F49531708365200A106A9 /* IFCReaderGen.h in Headers */,
4300 2B7F495D1708365200A106A9 /* IFCUtil.h in Headers */,
4301 2B7F49621708365200A106A9 /* IFF.h in Headers */,
4302 2B7F496C1708365200A106A9 /* Importer.h in Headers */,
4303 2B7F497B1708365200A106A9 /* ImproveCacheLocality.h in Headers */,
4304 2B7F49A81708365200A106A9 /* JoinVerticesProcess.h in Headers */,
4305 2B7F49B21708365200A106A9 /* LimitBoneWeightsProcess.h in Headers */,
4306 2B7F49B71708365200A106A9 /* LineSplitter.h in Headers */,
4307 2B7F49BC1708365200A106A9 /* LogAux.h in Headers */,
4308 2B7F49FD1708365200A106A9 /* MakeVerboseFormat.h in Headers */,
4309 2B7F4A071708365200A106A9 /* MaterialSystem.h in Headers */,
4310 2B7F4A2F1708365200A106A9 /* MD4FileData.h in Headers */,
4311 2B7F4A751708365200A106A9 /* MemoryIOWrapper.h in Headers */,
4312 2B7F4A9D1708365200A106A9 /* ObjExporter.h in Headers */,
4313 2B7F4AA21708365200A106A9 /* ObjFileData.h in Headers */,
4314 2B7F4AAC1708365200A106A9 /* ObjFileImporter.h in Headers */,
4315 2B7F4AB61708365200A106A9 /* ObjFileMtlImporter.h in Headers */,
4316 2B7F4AC01708365200A106A9 /* ObjFileParser.h in Headers */,
4317 2B7F4AC51708365200A106A9 /* ObjTools.h in Headers */,
4318 2B7F4AF71708365200A106A9 /* OptimizeGraph.h in Headers */,
4319 2B7F4B011708365200A106A9 /* OptimizeMeshes.h in Headers */,
4320 2B7F4B061708365200A106A9 /* ParsingUtils.h in Headers */,
4321 2B7F4B291708365200A106A9 /* PolyTools.h in Headers */,
4322 2B7F4B381708365200A106A9 /* PretransformVertices.h in Headers */,
4323 2B7F4B421708365200A106A9 /* ProcessHelper.h in Headers */,
4324 2B7F4B471708365200A106A9 /* Profiler.h in Headers */,
4325 2B7F4B4C1708365200A106A9 /* pstdint.h in Headers */,
4326 2B7F4B7E1708365200A106A9 /* qnan.h in Headers */,
4327 2B7F4B921708365200A106A9 /* RemoveComments.h in Headers */,
4328 2B7F4B9C1708365200A106A9 /* RemoveRedundantMaterials.h in Headers */,
4329 2B7F4BA61708365200A106A9 /* RemoveVCProcess.h in Headers */,
4330 2B7F4BB51708365200A106A9 /* SceneCombiner.h in Headers */,
4331 2B7F4BBF1708365200A106A9 /* ScenePreprocessor.h in Headers */,
4332 2B7F4BC41708365200A106A9 /* ScenePrivate.h in Headers */,
4333 2B7F4BCE1708365200A106A9 /* SGSpatialSort.h in Headers */,
4334 2B7F4BD81708365200A106A9 /* SkeletonMeshBuilder.h in Headers */,
4335 2B7F4BE71708365200A106A9 /* SmoothingGroups.h in Headers */,
4336 2B7F4BF11708365200A106A9 /* SortByPTypeProcess.h in Headers */,
4337 2B7F4BFB1708365200A106A9 /* SpatialSort.h in Headers */,
4338 2B7F4C051708365200A106A9 /* SplitByBoneCountProcess.h in Headers */,
4339 2B7F4C0F1708365200A106A9 /* SplitLargeMeshes.h in Headers */,
4340 2B7F4C191708365200A106A9 /* StandardShapes.h in Headers */,
4341 2B7F4C1E1708365200A106A9 /* StdOStreamLogStream.h in Headers */,
4342 2B7F4C231708365200A106A9 /* STEPFile.h in Headers */,
4343 2B7F4C2D1708365200A106A9 /* STEPFileEncoding.h in Headers */,
4344 2B7F4C371708365200A106A9 /* STEPFileReader.h in Headers */,
4345 2B7F4C411708365200A106A9 /* STLExporter.h in Headers */,
4346 2B7F4C4B1708365200A106A9 /* STLLoader.h in Headers */,
4347 2B7F4C501708365200A106A9 /* StreamReader.h in Headers */,
4348 2B7F4C551708365200A106A9 /* StringComparison.h in Headers */,
4349 2B7F4C5F1708365200A106A9 /* Subdivision.h in Headers */,
4350 2B7F4C691708365200A106A9 /* TargetAnimation.h in Headers */,
4351 2B7F4C7D1708365200A106A9 /* TextureTransform.h in Headers */,
4352 2B7F4C821708365200A106A9 /* TinyFormatter.h in Headers */,
4353 2B7F4C8C1708365200A106A9 /* TriangulateProcess.h in Headers */,
4354 2B7F4CA01708365200A106A9 /* ValidateDataStructure.h in Headers */,
4355 2B7F4CA51708365200A106A9 /* Vertex.h in Headers */,
4356 2B7F4CAF1708365200A106A9 /* VertexTriangleAdjacency.h in Headers */,
4357 2B7F4CB41708365200A106A9 /* Win32DebugLogStream.h in Headers */,
34374358 );
34384359 runOnlyForDeploymentPostprocessing = 0;
34394360 };
34454366 F962E8EE0F5DE6E2009A5495 /* 3DSLoader.h in Headers */,
34464367 F962E8EF0F5DE6E2009A5495 /* ASELoader.h in Headers */,
34474368 F962E8F00F5DE6E2009A5495 /* ASEParser.h in Headers */,
3448 F962E8F10F5DE6E2009A5495 /* BaseImporter.h in Headers */,
3449 F962E8F20F5DE6E2009A5495 /* BaseProcess.h in Headers */,
3450 F962E8F30F5DE6E2009A5495 /* ByteSwap.h in Headers */,
3451 F962E8F40F5DE6E2009A5495 /* CalcTangentsProcess.h in Headers */,
3452 F962E8F50F5DE6E2009A5495 /* ConvertToLHProcess.h in Headers */,
3453 F962E8F60F5DE6E2009A5495 /* DefaultIOStream.h in Headers */,
3454 F962E8F70F5DE6E2009A5495 /* DefaultIOSystem.h in Headers */,
3455 F962E8F90F5DE6E2009A5495 /* fast_atof.h in Headers */,
3456 F962E8FA0F5DE6E2009A5495 /* FileLogStream.h in Headers */,
3457 F962E8FB0F5DE6E2009A5495 /* GenFaceNormalsProcess.h in Headers */,
3458 F962E8FC0F5DE6E2009A5495 /* GenVertexNormalsProcess.h in Headers */,
34594369 F962E8FD0F5DE6E2009A5495 /* HalfLifeFileData.h in Headers */,
34604370 F962E8FE0F5DE6E2009A5495 /* HMPLoader.h in Headers */,
3461 F962E8FF0F5DE6E2009A5495 /* ImproveCacheLocality.h in Headers */,
3462 F962E9000F5DE6E2009A5495 /* JoinVerticesProcess.h in Headers */,
3463 F962E9010F5DE6E2009A5495 /* LimitBoneWeightsProcess.h in Headers */,
3464 F962E9020F5DE6E2009A5495 /* MaterialSystem.h in Headers */,
34654371 F962E9030F5DE6E2009A5495 /* MD2FileData.h in Headers */,
34664372 F962E9040F5DE6E2009A5495 /* MD2Loader.h in Headers */,
34674373 F962E9050F5DE6E2009A5495 /* MD2NormalTable.h in Headers */,
34724378 F962E90A0F5DE6E2009A5495 /* MDLDefaultColorMap.h in Headers */,
34734379 F962E90B0F5DE6E2009A5495 /* MDLFileData.h in Headers */,
34744380 F962E90C0F5DE6E2009A5495 /* MDLLoader.h in Headers */,
3475 F962E90D0F5DE6E2009A5495 /* ObjFileData.h in Headers */,
3476 F962E90E0F5DE6E2009A5495 /* ObjFileImporter.h in Headers */,
3477 F962E90F0F5DE6E2009A5495 /* ObjFileMtlImporter.h in Headers */,
3478 F962E9100F5DE6E2009A5495 /* ObjFileParser.h in Headers */,
3479 F962E9110F5DE6E2009A5495 /* ObjTools.h in Headers */,
3480 F962E9120F5DE6E2009A5495 /* ParsingUtils.h in Headers */,
34814381 F962E9130F5DE6E2009A5495 /* PlyLoader.h in Headers */,
34824382 F962E9140F5DE6E2009A5495 /* PlyParser.h in Headers */,
3483 F962E9150F5DE6E2009A5495 /* PretransformVertices.h in Headers */,
3484 F962E9160F5DE6E2009A5495 /* qnan.h in Headers */,
3485 F962E9170F5DE6E2009A5495 /* RemoveComments.h in Headers */,
3486 F962E9180F5DE6E2009A5495 /* RemoveRedundantMaterials.h in Headers */,
34874383 F962E9190F5DE6E2009A5495 /* SMDLoader.h in Headers */,
3488 F962E91A0F5DE6E2009A5495 /* SpatialSort.h in Headers */,
3489 F962E91B0F5DE6E2009A5495 /* SplitLargeMeshes.h in Headers */,
3490 F962E91C0F5DE6E2009A5495 /* STLLoader.h in Headers */,
3491 F962E91D0F5DE6E2009A5495 /* StringComparison.h in Headers */,
3492 F962E91E0F5DE6E2009A5495 /* TextureTransform.h in Headers */,
3493 F962E91F0F5DE6E2009A5495 /* TriangulateProcess.h in Headers */,
3494 F962E9200F5DE6E2009A5495 /* ValidateDataStructure.h in Headers */,
3495 F962E9210F5DE6E2009A5495 /* VertexTriangleAdjacency.h in Headers */,
3496 F962E9220F5DE6E2009A5495 /* Win32DebugLogStream.h in Headers */,
34974384 F962E9230F5DE6E2009A5495 /* XFileHelper.h in Headers */,
34984385 F962E9240F5DE6E2009A5495 /* XFileImporter.h in Headers */,
34994386 F962E9250F5DE6E2009A5495 /* XFileParser.h in Headers */,
35004387 F962E9280F5DE6E2009A5495 /* MDCFileData.h in Headers */,
35014388 F962E9290F5DE6E2009A5495 /* MDCLoader.h in Headers */,
35024389 F962E92A0F5DE6E2009A5495 /* MDCNormalTable.h in Headers */,
3503 F962E92B0F5DE6E2009A5495 /* FixNormalsStep.h in Headers */,
35044390 F962E92C0F5DE6E2009A5495 /* LWOFileData.h in Headers */,
35054391 F962E92D0F5DE6E2009A5495 /* LWOLoader.h in Headers */,
35064392 F962E92E0F5DE6E2009A5495 /* HMPFileData.h in Headers */,
3507 F962E9300F5DE6E2009A5495 /* IFF.h in Headers */,
3508 F962E9310F5DE6E2009A5495 /* Hash.h in Headers */,
35094393 F962E9360F5DE6E2009A5495 /* ACLoader.h in Headers */,
35104394 F962E9370F5DE6E2009A5495 /* IRRLoader.h in Headers */,
35114395 F962E9380F5DE6E2009A5495 /* IRRMeshLoader.h in Headers */,
35124396 F962E9390F5DE6E2009A5495 /* IRRShared.h in Headers */,
3513 F962E93A0F5DE6E2009A5495 /* ColladaHelper.h in Headers */,
3514 F962E93B0F5DE6E2009A5495 /* ColladaLoader.h in Headers */,
3515 F962E93C0F5DE6E2009A5495 /* ColladaParser.h in Headers */,
35164397 F962E93D0F5DE6E2009A5495 /* NFFLoader.h in Headers */,
3517 F962E93E0F5DE6E2009A5495 /* SGSpatialSort.h in Headers */,
35184398 F962E93F0F5DE6E2009A5495 /* Q3DLoader.h in Headers */,
35194399 F962E9400F5DE6E2009A5495 /* BVHLoader.h in Headers */,
35204400 F962E9410F5DE6E2009A5495 /* OFFLoader.h in Headers */,
35224402 F962E9430F5DE6E2009A5495 /* DXFLoader.h in Headers */,
35234403 F962E9440F5DE6E2009A5495 /* TerragenLoader.h in Headers */,
35244404 F962E9450F5DE6E2009A5495 /* irrXMLWrapper.h in Headers */,
3525 F962E9460F5DE6E2009A5495 /* ScenePreprocessor.h in Headers */,
3526 F962E9470F5DE6E2009A5495 /* SceneCombiner.h in Headers */,
3527 F962E9480F5DE6E2009A5495 /* SortByPTypeProcess.h in Headers */,
3528 F962E9490F5DE6E2009A5495 /* FindDegenerates.h in Headers */,
3529 F962E94A0F5DE6E2009A5495 /* ComputeUVMappingProcess.h in Headers */,
3530 F962E94B0F5DE6E2009A5495 /* StandardShapes.h in Headers */,
3531 F962E94C0F5DE6E2009A5495 /* FindInstancesProcess.h in Headers */,
3532 F962E94D0F5DE6E2009A5495 /* RemoveVCProcess.h in Headers */,
3533 F962E94E0F5DE6E2009A5495 /* FindInvalidDataProcess.h in Headers */,
3534 F962E94F0F5DE6E2009A5495 /* SkeletonMeshBuilder.h in Headers */,
3535 F962E9500F5DE6E2009A5495 /* SmoothingGroups.h in Headers */,
35364405 F962E9570F5DE6E2009A5495 /* B3DImporter.h in Headers */,
35374406 7411B15711416D5E00BCD793 /* CSMLoader.h in Headers */,
35384407 7411B16211416DDD00BCD793 /* LWSLoader.h in Headers */,
35394408 7411B16C11416DF400BCD793 /* LWOAnimation.h in Headers */,
35404409 7411B17911416E2500BCD793 /* MS3DLoader.h in Headers */,
35414410 7411B19411416EBC00BCD793 /* UnrealLoader.h in Headers */,
3542 7411B1D311416EF400BCD793 /* FileSystemFilter.h in Headers */,
3543 7411B1D411416EF400BCD793 /* GenericProperty.h in Headers */,
3544 7411B1D511416EF400BCD793 /* MemoryIOWrapper.h in Headers */,
3545 7411B1D711416EF400BCD793 /* OptimizeGraph.h in Headers */,
3546 7411B1D911416EF400BCD793 /* OptimizeMeshes.h in Headers */,
3547 7411B1DA11416EF400BCD793 /* ProcessHelper.h in Headers */,
3548 7411B1DB11416EF400BCD793 /* StdOStreamLogStream.h in Headers */,
3549 7411B1DC11416EF400BCD793 /* StreamReader.h in Headers */,
3550 7411B1DE11416EF400BCD793 /* Subdivision.h in Headers */,
3551 7411B1E011416EF400BCD793 /* TargetAnimation.h in Headers */,
3552 7411B1E111416EF400BCD793 /* Vertex.h in Headers */,
35534411 74C9BB5911ACBB1000AF885C /* BlenderDNA.h in Headers */,
35544412 74C9BB5B11ACBB1000AF885C /* BlenderLoader.h in Headers */,
35554413 74C9BB5D11ACBB1000AF885C /* BlenderScene.h in Headers */,
35564414 74C9BB5E11ACBB1000AF885C /* BlenderSceneGen.h in Headers */,
3557 74C9BB8511ACBB7800AF885C /* MakeVerboseFormat.h in Headers */,
35584415 74C9BB8F11ACBB9900AF885C /* AssimpPCH.h in Headers */,
35594416 74C9BBA011ACBBBC00AF885C /* COBLoader.h in Headers */,
35604417 74C9BBA111ACBBBC00AF885C /* COBScene.h in Headers */,
35614418 74C9BBB711ACBC2600AF885C /* revision.h in Headers */,
3562 74C9BBCB11ACBC6C00AF885C /* Exceptional.h in Headers */,
3563 74C9BBCC11ACBC6C00AF885C /* LineSplitter.h in Headers */,
3564 74C9BBCD11ACBC6C00AF885C /* MD4FileData.h in Headers */,
3565 74C9BBCE11ACBC6C00AF885C /* TinyFormatter.h in Headers */,
35664419 8E7ABBB6127E0F1A00512ED1 /* Q3BSPFileData.h in Headers */,
35674420 8E7ABBB8127E0F1A00512ED1 /* Q3BSPFileImporter.h in Headers */,
35684421 8E7ABBBA127E0F1A00512ED1 /* Q3BSPFileParser.h in Headers */,
35704423 8E7ABBCB127E0F2A00512ED1 /* NDOLoader.h in Headers */,
35714424 8E7ABBD7127E0F3800512ED1 /* BlenderIntermediate.h in Headers */,
35724425 8E7ABBD9127E0F3800512ED1 /* BlenderModifier.h in Headers */,
3573 8E7ABBEB127E0FA400512ED1 /* assbin_chunks.h in Headers */,
3574 8E7ABBEC127E0FA400512ED1 /* DefaultProgressHandler.h in Headers */,
3575 8E7ABBED127E0FA400512ED1 /* Profiler.h in Headers */,
3576 8E7ABBEE127E0FA400512ED1 /* pstdint.h in Headers */,
35774426 8E8DEE79127E2B78005EF64D /* ConvertUTF.h in Headers */,
35784427 8E8DEE7A127E2B78005EF64D /* CXMLReaderImpl.h in Headers */,
35794428 8E8DEE7B127E2B78005EF64D /* heapsort.h in Headers */,
36194468 F9BA8BE21543268400E63FFE /* version.h in Headers */,
36204469 F9BA8C42154328B600E63FFE /* OgreImporter.hpp in Headers */,
36214470 F9BA8C46154328B600E63FFE /* OgreXmlHelper.hpp in Headers */,
3622 F99A9EB515436077000682F3 /* BlobIOSystem.h in Headers */,
3623 F99A9EBA15436098000682F3 /* lexical_cast.hpp in Headers */,
3624 F99A9EBF154360A0000682F3 /* make_shared.hpp in Headers */,
3625 F99A9EC4154360A5000682F3 /* noncopyable.hpp in Headers */,
3626 F99A9EC9154360B5000682F3 /* timer.hpp in Headers */,
3627 F99A9ECE154360E2000682F3 /* CInterfaceIOWrapper.h in Headers */,
3628 F99A9ED615436125000682F3 /* DeboneProcess.h in Headers */,
3629 F99A9F1E154361D4000682F3 /* LogAux.h in Headers */,
3630 F99A9F2B15436207000682F3 /* M3Importer.h in Headers */,
36314471 F99A9F3515436269000682F3 /* PlyExporter.h in Headers */,
3632 F99A9F3C15436286000682F3 /* PolyTools.h in Headers */,
3633 F99A9F46154362DE000682F3 /* ScenePrivate.h in Headers */,
3634 F99A9F4E15436304000682F3 /* SplitByBoneCountProcess.h in Headers */,
3635 F99A9F5F15436323000682F3 /* STEPFile.h in Headers */,
3636 F99A9F6115436323000682F3 /* STEPFileReader.h in Headers */,
36374472 F9607074154366AB004D91DD /* crc32.h in Headers */,
36384473 F9607076154366AB004D91DD /* deflate.h in Headers */,
36394474 F9607078154366AB004D91DD /* inffast.h in Headers */,
36554490 F96070F41543675E004D91DD /* sweep.h in Headers */,
36564491 F96070F61543675E004D91DD /* sweep_context.h in Headers */,
36574492 F97BA03715439DB3009EB9DD /* ai_assert.h in Headers */,
3658 F97BA07D15439FC3009EB9DD /* IFCLoader.h in Headers */,
3659 F97BA08115439FC3009EB9DD /* IFCReaderGen.h in Headers */,
3660 F97BA08315439FC3009EB9DD /* IFCUtil.h in Headers */,
4493 2B7F46DE1708365200A106A9 /* assbin_chunks.h in Headers */,
4494 2B7F47061708365200A106A9 /* BaseImporter.h in Headers */,
4495 2B7F47101708365200A106A9 /* BaseProcess.h in Headers */,
4496 2B7F47471708365200A106A9 /* BlobIOSystem.h in Headers */,
4497 2B7F474C1708365200A106A9 /* foreach.hpp in Headers */,
4498 2B7F47511708365200A106A9 /* format.hpp in Headers */,
4499 2B7F47561708365200A106A9 /* lexical_cast.hpp in Headers */,
4500 2B7F475B1708365200A106A9 /* make_shared.hpp in Headers */,
4501 2B7F47601708365200A106A9 /* common_factor_rt.hpp in Headers */,
4502 2B7F47651708365200A106A9 /* noncopyable.hpp in Headers */,
4503 2B7F476A1708365200A106A9 /* pointer_cast.hpp in Headers */,
4504 2B7F476F1708365200A106A9 /* scoped_array.hpp in Headers */,
4505 2B7F47741708365200A106A9 /* scoped_ptr.hpp in Headers */,
4506 2B7F47791708365200A106A9 /* shared_array.hpp in Headers */,
4507 2B7F477E1708365200A106A9 /* shared_ptr.hpp in Headers */,
4508 2B7F47831708365200A106A9 /* static_assert.hpp in Headers */,
4509 2B7F47881708365200A106A9 /* timer.hpp in Headers */,
4510 2B7F478D1708365200A106A9 /* tuple.hpp in Headers */,
4511 2B7F479C1708365200A106A9 /* ByteSwap.h in Headers */,
4512 2B7F47A61708365200A106A9 /* CalcTangentsProcess.h in Headers */,
4513 2B7F47AB1708365200A106A9 /* CInterfaceIOWrapper.h in Headers */,
4514 2B7F47C41708365200A106A9 /* ColladaExporter.h in Headers */,
4515 2B7F47C91708365200A106A9 /* ColladaHelper.h in Headers */,
4516 2B7F47D31708365200A106A9 /* ColladaLoader.h in Headers */,
4517 2B7F47DD1708365200A106A9 /* ColladaParser.h in Headers */,
4518 2B7F47E71708365200A106A9 /* ComputeUVMappingProcess.h in Headers */,
4519 2B7F47F11708365200A106A9 /* ConvertToLHProcess.h in Headers */,
4520 2B7F48051708365200A106A9 /* DeboneProcess.h in Headers */,
4521 2B7F480F1708365200A106A9 /* DefaultIOStream.h in Headers */,
4522 2B7F48191708365200A106A9 /* DefaultIOSystem.h in Headers */,
4523 2B7F48231708365200A106A9 /* DefaultProgressHandler.h in Headers */,
4524 2B7F48371708365200A106A9 /* Exceptional.h in Headers */,
4525 2B7F48411708365200A106A9 /* fast_atof.h in Headers */,
4526 2B7F48501708365200A106A9 /* FBXCompileConfig.h in Headers */,
4527 2B7F485A1708365200A106A9 /* FBXConverter.h in Headers */,
4528 2B7F48691708365200A106A9 /* FBXDocument.h in Headers */,
4529 2B7F48731708365200A106A9 /* FBXDocumentUtil.h in Headers */,
4530 2B7F487D1708365200A106A9 /* FBXImporter.h in Headers */,
4531 2B7F48821708365200A106A9 /* FBXImportSettings.h in Headers */,
4532 2B7F48A01708365200A106A9 /* FBXParser.h in Headers */,
4533 2B7F48AA1708365200A106A9 /* FBXProperties.h in Headers */,
4534 2B7F48B41708365200A106A9 /* FBXTokenizer.h in Headers */,
4535 2B7F48BE1708365200A106A9 /* FBXUtil.h in Headers */,
4536 2B7F48C31708365200A106A9 /* FileLogStream.h in Headers */,
4537 2B7F48C81708365200A106A9 /* FileSystemFilter.h in Headers */,
4538 2B7F48D21708365200A106A9 /* FindDegenerates.h in Headers */,
4539 2B7F48DC1708365200A106A9 /* FindInstancesProcess.h in Headers */,
4540 2B7F48E61708365200A106A9 /* FindInvalidDataProcess.h in Headers */,
4541 2B7F48F01708365200A106A9 /* FixNormalsStep.h in Headers */,
4542 2B7F48F51708365200A106A9 /* GenericProperty.h in Headers */,
4543 2B7F48FF1708365200A106A9 /* GenFaceNormalsProcess.h in Headers */,
4544 2B7F49091708365200A106A9 /* GenVertexNormalsProcess.h in Headers */,
4545 2B7F49131708365200A106A9 /* Hash.h in Headers */,
4546 2B7F493B1708365200A106A9 /* IFCLoader.h in Headers */,
4547 2B7F49541708365200A106A9 /* IFCReaderGen.h in Headers */,
4548 2B7F495E1708365200A106A9 /* IFCUtil.h in Headers */,
4549 2B7F49631708365200A106A9 /* IFF.h in Headers */,
4550 2B7F496D1708365200A106A9 /* Importer.h in Headers */,
4551 2B7F497C1708365200A106A9 /* ImproveCacheLocality.h in Headers */,
4552 2B7F49A91708365200A106A9 /* JoinVerticesProcess.h in Headers */,
4553 2B7F49B31708365200A106A9 /* LimitBoneWeightsProcess.h in Headers */,
4554 2B7F49B81708365200A106A9 /* LineSplitter.h in Headers */,
4555 2B7F49BD1708365200A106A9 /* LogAux.h in Headers */,
4556 2B7F49FE1708365200A106A9 /* MakeVerboseFormat.h in Headers */,
4557 2B7F4A081708365200A106A9 /* MaterialSystem.h in Headers */,
4558 2B7F4A301708365200A106A9 /* MD4FileData.h in Headers */,
4559 2B7F4A761708365200A106A9 /* MemoryIOWrapper.h in Headers */,
4560 2B7F4A9E1708365200A106A9 /* ObjExporter.h in Headers */,
4561 2B7F4AA31708365200A106A9 /* ObjFileData.h in Headers */,
4562 2B7F4AAD1708365200A106A9 /* ObjFileImporter.h in Headers */,
4563 2B7F4AB71708365200A106A9 /* ObjFileMtlImporter.h in Headers */,
4564 2B7F4AC11708365200A106A9 /* ObjFileParser.h in Headers */,
4565 2B7F4AC61708365200A106A9 /* ObjTools.h in Headers */,
4566 2B7F4AF81708365200A106A9 /* OptimizeGraph.h in Headers */,
4567 2B7F4B021708365200A106A9 /* OptimizeMeshes.h in Headers */,
4568 2B7F4B071708365200A106A9 /* ParsingUtils.h in Headers */,
4569 2B7F4B2A1708365200A106A9 /* PolyTools.h in Headers */,
4570 2B7F4B391708365200A106A9 /* PretransformVertices.h in Headers */,
4571 2B7F4B431708365200A106A9 /* ProcessHelper.h in Headers */,
4572 2B7F4B481708365200A106A9 /* Profiler.h in Headers */,
4573 2B7F4B4D1708365200A106A9 /* pstdint.h in Headers */,
4574 2B7F4B7F1708365200A106A9 /* qnan.h in Headers */,
4575 2B7F4B931708365200A106A9 /* RemoveComments.h in Headers */,
4576 2B7F4B9D1708365200A106A9 /* RemoveRedundantMaterials.h in Headers */,
4577 2B7F4BA71708365200A106A9 /* RemoveVCProcess.h in Headers */,
4578 2B7F4BB61708365200A106A9 /* SceneCombiner.h in Headers */,
4579 2B7F4BC01708365200A106A9 /* ScenePreprocessor.h in Headers */,
4580 2B7F4BC51708365200A106A9 /* ScenePrivate.h in Headers */,
4581 2B7F4BCF1708365200A106A9 /* SGSpatialSort.h in Headers */,
4582 2B7F4BD91708365200A106A9 /* SkeletonMeshBuilder.h in Headers */,
4583 2B7F4BE81708365200A106A9 /* SmoothingGroups.h in Headers */,
4584 2B7F4BF21708365200A106A9 /* SortByPTypeProcess.h in Headers */,
4585 2B7F4BFC1708365200A106A9 /* SpatialSort.h in Headers */,
4586 2B7F4C061708365200A106A9 /* SplitByBoneCountProcess.h in Headers */,
4587 2B7F4C101708365200A106A9 /* SplitLargeMeshes.h in Headers */,
4588 2B7F4C1A1708365200A106A9 /* StandardShapes.h in Headers */,
4589 2B7F4C1F1708365200A106A9 /* StdOStreamLogStream.h in Headers */,
4590 2B7F4C241708365200A106A9 /* STEPFile.h in Headers */,
4591 2B7F4C2E1708365200A106A9 /* STEPFileEncoding.h in Headers */,
4592 2B7F4C381708365200A106A9 /* STEPFileReader.h in Headers */,
4593 2B7F4C421708365200A106A9 /* STLExporter.h in Headers */,
4594 2B7F4C4C1708365200A106A9 /* STLLoader.h in Headers */,
4595 2B7F4C511708365200A106A9 /* StreamReader.h in Headers */,
4596 2B7F4C561708365200A106A9 /* StringComparison.h in Headers */,
4597 2B7F4C601708365200A106A9 /* Subdivision.h in Headers */,
4598 2B7F4C6A1708365200A106A9 /* TargetAnimation.h in Headers */,
4599 2B7F4C7E1708365200A106A9 /* TextureTransform.h in Headers */,
4600 2B7F4C831708365200A106A9 /* TinyFormatter.h in Headers */,
4601 2B7F4C8D1708365200A106A9 /* TriangulateProcess.h in Headers */,
4602 2B7F4CA11708365200A106A9 /* ValidateDataStructure.h in Headers */,
4603 2B7F4CA61708365200A106A9 /* Vertex.h in Headers */,
4604 2B7F4CB01708365200A106A9 /* VertexTriangleAdjacency.h in Headers */,
4605 2B7F4CB51708365200A106A9 /* Win32DebugLogStream.h in Headers */,
36614606 );
36624607 runOnlyForDeploymentPostprocessing = 0;
36634608 };
36784623 );
36794624 name = "assimp-no-boost";
36804625 productName = libassimp;
3681 productReference = 8E8DEEA5127E2D59005EF64D /* libassimp.dylib */;
4626 productReference = 8E8DEEA5127E2D59005EF64D /* libassimpd.dylib */;
36824627 productType = "com.apple.product-type.library.dynamic";
36834628 };
36844629 745FF90C113ECC660020C31B /* assimp-static-no-boost */ = {
36954640 );
36964641 name = "assimp-static-no-boost";
36974642 productName = "assimp-static";
3698 productReference = 8E8DEEA6127E2D59005EF64D /* libassimp.a */;
4643 productReference = 8E8DEEA6127E2D59005EF64D /* libassimpd.a */;
4644 productType = "com.apple.product-type.library.static";
4645 };
4646 B91974CF163AEA54009C397B /* assimp-ios-static-no-boost */ = {
4647 isa = PBXNativeTarget;
4648 buildConfigurationList = B919763C163AEA54009C397B /* Build configuration list for PBXNativeTarget "assimp-ios-static-no-boost" */;
4649 buildPhases = (
4650 B91974D0163AEA54009C397B /* Headers */,
4651 B91975B4163AEA54009C397B /* Frameworks */,
4652 B91975B6163AEA54009C397B /* Sources */,
4653 );
4654 buildRules = (
4655 );
4656 dependencies = (
4657 );
4658 name = "assimp-ios-static-no-boost";
4659 productName = "assimp-static";
4660 productReference = B919763F163AEA54009C397B /* libassimp-ios.a */;
36994661 productType = "com.apple.product-type.library.static";
37004662 };
37014663 D2AAC09C05546B4700DB518D /* assimp */ = {
37124674 );
37134675 name = assimp;
37144676 productName = libassimp;
3715 productReference = 8E8DEEA3127E2D59005EF64D /* libassimp.dylib */;
4677 productReference = 8E8DEEA3127E2D59005EF64D /* libassimpd.dylib */;
37164678 productType = "com.apple.product-type.library.dynamic";
37174679 };
37184680 F962E8830F5DE66A009A5495 /* assimp-static */ = {
37294691 );
37304692 name = "assimp-static";
37314693 productName = "assimp-static";
3732 productReference = 8E8DEEA4127E2D59005EF64D /* libassimp.a */;
4694 productReference = 8E8DEEA4127E2D59005EF64D /* libassimpd.a */;
37334695 productType = "com.apple.product-type.library.static";
37344696 };
37354697 /* End PBXNativeTarget section */
37394701 isa = PBXProject;
37404702 attributes = {
37414703 BuildIndependentTargetsInParallel = YES;
4704 LastUpgradeCheck = 0460;
37424705 };
37434706 buildConfigurationList = 1DEB916408733D950010E9CD /* Build configuration list for PBXProject "assimp" */;
3744 compatibilityVersion = "Xcode 3.0";
4707 compatibilityVersion = "Xcode 3.2";
37454708 developmentRegion = English;
37464709 hasScannedForEncodings = 1;
37474710 knownRegions = (
37594722 F962E8830F5DE66A009A5495 /* assimp-static */,
37604723 745FF829113ECB080020C31B /* assimp-no-boost */,
37614724 745FF90C113ECC660020C31B /* assimp-static-no-boost */,
4725 B91974CF163AEA54009C397B /* assimp-ios-static-no-boost */,
37624726 );
37634727 };
37644728 /* End PBXProject section */
37724736 745FF8B1113ECB080020C31B /* 3DSLoader.cpp in Sources */,
37734737 745FF8B3113ECB080020C31B /* ASELoader.cpp in Sources */,
37744738 745FF8B4113ECB080020C31B /* ASEParser.cpp in Sources */,
3775 745FF8B5113ECB080020C31B /* Assimp.cpp in Sources */,
3776 745FF8B6113ECB080020C31B /* BaseImporter.cpp in Sources */,
3777 745FF8B7113ECB080020C31B /* CalcTangentsProcess.cpp in Sources */,
3778 745FF8B8113ECB080020C31B /* ConvertToLHProcess.cpp in Sources */,
3779 745FF8B9113ECB080020C31B /* DefaultIOStream.cpp in Sources */,
3780 745FF8BA113ECB080020C31B /* DefaultIOSystem.cpp in Sources */,
3781 745FF8BB113ECB080020C31B /* DefaultLogger.cpp in Sources */,
3782 745FF8BD113ECB080020C31B /* GenFaceNormalsProcess.cpp in Sources */,
3783 745FF8BE113ECB080020C31B /* GenVertexNormalsProcess.cpp in Sources */,
37844739 745FF8BF113ECB080020C31B /* HMPLoader.cpp in Sources */,
3785 745FF8C0113ECB080020C31B /* Importer.cpp in Sources */,
3786 745FF8C1113ECB080020C31B /* ImproveCacheLocality.cpp in Sources */,
3787 745FF8C2113ECB080020C31B /* JoinVerticesProcess.cpp in Sources */,
3788 745FF8C3113ECB080020C31B /* LimitBoneWeightsProcess.cpp in Sources */,
3789 745FF8C4113ECB080020C31B /* MaterialSystem.cpp in Sources */,
37904740 745FF8C5113ECB080020C31B /* MD2Loader.cpp in Sources */,
37914741 745FF8C6113ECB080020C31B /* MD3Loader.cpp in Sources */,
37924742 745FF8C7113ECB080020C31B /* MD5Loader.cpp in Sources */,
37934743 745FF8C8113ECB080020C31B /* MD5Parser.cpp in Sources */,
37944744 745FF8C9113ECB080020C31B /* MDLLoader.cpp in Sources */,
37954745 745FF8CA113ECB080020C31B /* MDLMaterialLoader.cpp in Sources */,
3796 745FF8CB113ECB080020C31B /* ObjFileImporter.cpp in Sources */,
3797 745FF8CC113ECB080020C31B /* ObjFileMtlImporter.cpp in Sources */,
3798 745FF8CD113ECB080020C31B /* ObjFileParser.cpp in Sources */,
37994746 745FF8CE113ECB080020C31B /* PlyLoader.cpp in Sources */,
38004747 745FF8CF113ECB080020C31B /* PlyParser.cpp in Sources */,
3801 745FF8D0113ECB080020C31B /* PretransformVertices.cpp in Sources */,
3802 745FF8D1113ECB080020C31B /* RemoveComments.cpp in Sources */,
3803 745FF8D2113ECB080020C31B /* RemoveRedundantMaterials.cpp in Sources */,
38044748 745FF8D3113ECB080020C31B /* SMDLoader.cpp in Sources */,
3805 745FF8D4113ECB080020C31B /* SpatialSort.cpp in Sources */,
3806 745FF8D5113ECB080020C31B /* SplitLargeMeshes.cpp in Sources */,
3807 745FF8D6113ECB080020C31B /* STLLoader.cpp in Sources */,
3808 745FF8D7113ECB080020C31B /* TextureTransform.cpp in Sources */,
3809 745FF8D8113ECB080020C31B /* TriangulateProcess.cpp in Sources */,
3810 745FF8D9113ECB080020C31B /* ValidateDataStructure.cpp in Sources */,
3811 745FF8DA113ECB080020C31B /* VertexTriangleAdjacency.cpp in Sources */,
38124749 745FF8DB113ECB080020C31B /* XFileImporter.cpp in Sources */,
38134750 745FF8DC113ECB080020C31B /* XFileParser.cpp in Sources */,
38144751 745FF8DD113ECB080020C31B /* MDCLoader.cpp in Sources */,
3815 745FF8DE113ECB080020C31B /* FixNormalsStep.cpp in Sources */,
38164752 745FF8DF113ECB080020C31B /* LWOLoader.cpp in Sources */,
3817 745FF8E0113ECB080020C31B /* BaseProcess.cpp in Sources */,
38184753 745FF8E1113ECB080020C31B /* LWOMaterial.cpp in Sources */,
38194754 745FF8E2113ECB080020C31B /* ACLoader.cpp in Sources */,
38204755 745FF8E3113ECB080020C31B /* IRRLoader.cpp in Sources */,
38214756 745FF8E4113ECB080020C31B /* IRRMeshLoader.cpp in Sources */,
38224757 745FF8E5113ECB080020C31B /* IRRShared.cpp in Sources */,
3823 745FF8E6113ECB080020C31B /* ColladaLoader.cpp in Sources */,
3824 745FF8E7113ECB080020C31B /* ColladaParser.cpp in Sources */,
38254758 745FF8E8113ECB080020C31B /* NFFLoader.cpp in Sources */,
3826 745FF8E9113ECB080020C31B /* SGSpatialSort.cpp in Sources */,
38274759 745FF8EA113ECB080020C31B /* Q3DLoader.cpp in Sources */,
38284760 745FF8EB113ECB080020C31B /* BVHLoader.cpp in Sources */,
38294761 745FF8EC113ECB080020C31B /* OFFLoader.cpp in Sources */,
38314763 745FF8EE113ECB080020C31B /* DXFLoader.cpp in Sources */,
38324764 745FF8EF113ECB080020C31B /* LWOBLoader.cpp in Sources */,
38334765 745FF8F0113ECB080020C31B /* TerragenLoader.cpp in Sources */,
3834 745FF8F1113ECB080020C31B /* SceneCombiner.cpp in Sources */,
3835 745FF8F2113ECB080020C31B /* ScenePreprocessor.cpp in Sources */,
3836 745FF8F3113ECB080020C31B /* SortByPTypeProcess.cpp in Sources */,
3837 745FF8F4113ECB080020C31B /* FindDegenerates.cpp in Sources */,
3838 745FF8F5113ECB080020C31B /* ComputeUVMappingProcess.cpp in Sources */,
3839 745FF8F6113ECB080020C31B /* StandardShapes.cpp in Sources */,
3840 745FF8F7113ECB080020C31B /* FindInstancesProcess.cpp in Sources */,
3841 745FF8F8113ECB080020C31B /* RemoveVCProcess.cpp in Sources */,
3842 745FF8F9113ECB080020C31B /* FindInvalidDataProcess.cpp in Sources */,
3843 745FF8FA113ECB080020C31B /* SkeletonMeshBuilder.cpp in Sources */,
38444766 745FF8FC113ECB080020C31B /* B3DImporter.cpp in Sources */,
38454767 7411B15211416D5E00BCD793 /* CSMLoader.cpp in Sources */,
38464768 7411B15D11416DDD00BCD793 /* LWSLoader.cpp in Sources */,
38474769 7411B16711416DF400BCD793 /* LWOAnimation.cpp in Sources */,
38484770 7411B17411416E2500BCD793 /* MS3DLoader.cpp in Sources */,
38494771 7411B18F11416EBC00BCD793 /* UnrealLoader.cpp in Sources */,
3850 7411B1B811416EF400BCD793 /* OptimizeGraph.cpp in Sources */,
3851 7411B1BA11416EF400BCD793 /* OptimizeMeshes.cpp in Sources */,
3852 7411B1BF11416EF400BCD793 /* Subdivision.cpp in Sources */,
3853 7411B1C111416EF400BCD793 /* TargetAnimation.cpp in Sources */,
38544772 74C9BB5F11ACBB1000AF885C /* BlenderDNA.cpp in Sources */,
38554773 74C9BB6111ACBB1000AF885C /* BlenderLoader.cpp in Sources */,
38564774 74C9BB6311ACBB1000AF885C /* BlenderScene.cpp in Sources */,
3857 74C9BB7E11ACBB7800AF885C /* MakeVerboseFormat.cpp in Sources */,
38584775 74C9BB8811ACBB9900AF885C /* AssimpPCH.cpp in Sources */,
38594776 74C9BB9611ACBBBC00AF885C /* COBLoader.cpp in Sources */,
38604777 8E7ABBA9127E0F1A00512ED1 /* Q3BSPFileImporter.cpp in Sources */,
38704787 F9BA8C49154328B600E63FFE /* OgreMaterial.cpp in Sources */,
38714788 F9BA8C4A154328B600E63FFE /* OgreMesh.cpp in Sources */,
38724789 F9BA8C4B154328B600E63FFE /* OgreSkeleton.cpp in Sources */,
3873 F99A9ED715436125000682F3 /* DeboneProcess.cpp in Sources */,
3874 F99A9F1A154361AD000682F3 /* ImporterRegistry.cpp in Sources */,
3875 F99A9F2C15436207000682F3 /* M3Importer.cpp in Sources */,
38764790 F99A9F3615436269000682F3 /* PlyExporter.cpp in Sources */,
3877 F99A9F421543629F000682F3 /* PostStepRegistry.cpp in Sources */,
3878 F99A9F4F15436304000682F3 /* SplitByBoneCountProcess.cpp in Sources */,
3879 F99A9F6315436323000682F3 /* STEPFileReader.cpp in Sources */,
3880 F9606FF5154364E5004D91DD /* ProcessHelper.cpp in Sources */,
38814791 F9607085154366AB004D91DD /* adler32.c in Sources */,
38824792 F9607086154366AB004D91DD /* compress.c in Sources */,
38834793 F9607087154366AB004D91DD /* crc32.c in Sources */,
38944804 F96070FD1543675E004D91DD /* cdt.cc in Sources */,
38954805 F96070FF1543675E004D91DD /* sweep.cc in Sources */,
38964806 F96071011543675E004D91DD /* sweep_context.cc in Sources */,
3897 F97BA08415439FC3009EB9DD /* IFCCurve.cpp in Sources */,
3898 F97BA08515439FC3009EB9DD /* IFCGeometry.cpp in Sources */,
3899 F97BA08615439FC3009EB9DD /* IFCLoader.cpp in Sources */,
3900 F97BA08815439FC3009EB9DD /* IFCMaterial.cpp in Sources */,
3901 F97BA08915439FC3009EB9DD /* IFCProfile.cpp in Sources */,
3902 F97BA08A15439FC3009EB9DD /* IFCReaderGen.cpp in Sources */,
3903 F97BA08C15439FC3009EB9DD /* IFCUtil.cpp in Sources */,
4807 2B7F46E41708365200A106A9 /* Assimp.cpp in Sources */,
4808 2B7F46E91708365200A106A9 /* AssimpCExport.cpp in Sources */,
4809 2B7F47021708365200A106A9 /* BaseImporter.cpp in Sources */,
4810 2B7F470C1708365200A106A9 /* BaseProcess.cpp in Sources */,
4811 2B7F47A21708365200A106A9 /* CalcTangentsProcess.cpp in Sources */,
4812 2B7F47C01708365200A106A9 /* ColladaExporter.cpp in Sources */,
4813 2B7F47CF1708365200A106A9 /* ColladaLoader.cpp in Sources */,
4814 2B7F47D91708365200A106A9 /* ColladaParser.cpp in Sources */,
4815 2B7F47E31708365200A106A9 /* ComputeUVMappingProcess.cpp in Sources */,
4816 2B7F47ED1708365200A106A9 /* ConvertToLHProcess.cpp in Sources */,
4817 2B7F48011708365200A106A9 /* DeboneProcess.cpp in Sources */,
4818 2B7F480B1708365200A106A9 /* DefaultIOStream.cpp in Sources */,
4819 2B7F48151708365200A106A9 /* DefaultIOSystem.cpp in Sources */,
4820 2B7F481F1708365200A106A9 /* DefaultLogger.cpp in Sources */,
4821 2B7F483D1708365200A106A9 /* Exporter.cpp in Sources */,
4822 2B7F48471708365200A106A9 /* FBXAnimation.cpp in Sources */,
4823 2B7F484C1708365200A106A9 /* FBXBinaryTokenizer.cpp in Sources */,
4824 2B7F48561708365200A106A9 /* FBXConverter.cpp in Sources */,
4825 2B7F48601708365200A106A9 /* FBXDeformer.cpp in Sources */,
4826 2B7F48651708365200A106A9 /* FBXDocument.cpp in Sources */,
4827 2B7F486F1708365200A106A9 /* FBXDocumentUtil.cpp in Sources */,
4828 2B7F48791708365200A106A9 /* FBXImporter.cpp in Sources */,
4829 2B7F48881708365200A106A9 /* FBXMaterial.cpp in Sources */,
4830 2B7F488D1708365200A106A9 /* FBXMeshGeometry.cpp in Sources */,
4831 2B7F48921708365200A106A9 /* FBXModel.cpp in Sources */,
4832 2B7F48971708365200A106A9 /* FBXNodeAttribute.cpp in Sources */,
4833 2B7F489C1708365200A106A9 /* FBXParser.cpp in Sources */,
4834 2B7F48A61708365200A106A9 /* FBXProperties.cpp in Sources */,
4835 2B7F48B01708365200A106A9 /* FBXTokenizer.cpp in Sources */,
4836 2B7F48BA1708365200A106A9 /* FBXUtil.cpp in Sources */,
4837 2B7F48CE1708365200A106A9 /* FindDegenerates.cpp in Sources */,
4838 2B7F48D81708365200A106A9 /* FindInstancesProcess.cpp in Sources */,
4839 2B7F48E21708365200A106A9 /* FindInvalidDataProcess.cpp in Sources */,
4840 2B7F48EC1708365200A106A9 /* FixNormalsStep.cpp in Sources */,
4841 2B7F48FB1708365200A106A9 /* GenFaceNormalsProcess.cpp in Sources */,
4842 2B7F49051708365200A106A9 /* GenVertexNormalsProcess.cpp in Sources */,
4843 2B7F49281708365200A106A9 /* IFCBoolean.cpp in Sources */,
4844 2B7F492D1708365200A106A9 /* IFCCurve.cpp in Sources */,
4845 2B7F49321708365200A106A9 /* IFCGeometry.cpp in Sources */,
4846 2B7F49371708365200A106A9 /* IFCLoader.cpp in Sources */,
4847 2B7F49411708365200A106A9 /* IFCMaterial.cpp in Sources */,
4848 2B7F49461708365200A106A9 /* IFCOpenings.cpp in Sources */,
4849 2B7F494B1708365200A106A9 /* IFCProfile.cpp in Sources */,
4850 2B7F49501708365200A106A9 /* IFCReaderGen.cpp in Sources */,
4851 2B7F495A1708365200A106A9 /* IFCUtil.cpp in Sources */,
4852 2B7F49691708365200A106A9 /* Importer.cpp in Sources */,
4853 2B7F49731708365200A106A9 /* ImporterRegistry.cpp in Sources */,
4854 2B7F49781708365200A106A9 /* ImproveCacheLocality.cpp in Sources */,
4855 2B7F49A51708365200A106A9 /* JoinVerticesProcess.cpp in Sources */,
4856 2B7F49AF1708365200A106A9 /* LimitBoneWeightsProcess.cpp in Sources */,
4857 2B7F49FA1708365200A106A9 /* MakeVerboseFormat.cpp in Sources */,
4858 2B7F4A041708365200A106A9 /* MaterialSystem.cpp in Sources */,
4859 2B7F4A9A1708365200A106A9 /* ObjExporter.cpp in Sources */,
4860 2B7F4AA91708365200A106A9 /* ObjFileImporter.cpp in Sources */,
4861 2B7F4AB31708365200A106A9 /* ObjFileMtlImporter.cpp in Sources */,
4862 2B7F4ABD1708365200A106A9 /* ObjFileParser.cpp in Sources */,
4863 2B7F4AF41708365200A106A9 /* OptimizeGraph.cpp in Sources */,
4864 2B7F4AFE1708365200A106A9 /* OptimizeMeshes.cpp in Sources */,
4865 2B7F4B301708365200A106A9 /* PostStepRegistry.cpp in Sources */,
4866 2B7F4B351708365200A106A9 /* PretransformVertices.cpp in Sources */,
4867 2B7F4B3F1708365200A106A9 /* ProcessHelper.cpp in Sources */,
4868 2B7F4B8F1708365200A106A9 /* RemoveComments.cpp in Sources */,
4869 2B7F4B991708365200A106A9 /* RemoveRedundantMaterials.cpp in Sources */,
4870 2B7F4BA31708365200A106A9 /* RemoveVCProcess.cpp in Sources */,
4871 2B7F4BB21708365200A106A9 /* SceneCombiner.cpp in Sources */,
4872 2B7F4BBC1708365200A106A9 /* ScenePreprocessor.cpp in Sources */,
4873 2B7F4BCB1708365200A106A9 /* SGSpatialSort.cpp in Sources */,
4874 2B7F4BD51708365200A106A9 /* SkeletonMeshBuilder.cpp in Sources */,
4875 2B7F4BEE1708365200A106A9 /* SortByPTypeProcess.cpp in Sources */,
4876 2B7F4BF81708365200A106A9 /* SpatialSort.cpp in Sources */,
4877 2B7F4C021708365200A106A9 /* SplitByBoneCountProcess.cpp in Sources */,
4878 2B7F4C0C1708365200A106A9 /* SplitLargeMeshes.cpp in Sources */,
4879 2B7F4C161708365200A106A9 /* StandardShapes.cpp in Sources */,
4880 2B7F4C2A1708365200A106A9 /* STEPFileEncoding.cpp in Sources */,
4881 2B7F4C341708365200A106A9 /* STEPFileReader.cpp in Sources */,
4882 2B7F4C3E1708365200A106A9 /* STLExporter.cpp in Sources */,
4883 2B7F4C481708365200A106A9 /* STLLoader.cpp in Sources */,
4884 2B7F4C5C1708365200A106A9 /* Subdivision.cpp in Sources */,
4885 2B7F4C661708365200A106A9 /* TargetAnimation.cpp in Sources */,
4886 2B7F4C7A1708365200A106A9 /* TextureTransform.cpp in Sources */,
4887 2B7F4C891708365200A106A9 /* TriangulateProcess.cpp in Sources */,
4888 2B7F4C9D1708365200A106A9 /* ValidateDataStructure.cpp in Sources */,
4889 2B7F4CAC1708365200A106A9 /* VertexTriangleAdjacency.cpp in Sources */,
39044890 );
39054891 runOnlyForDeploymentPostprocessing = 0;
39064892 };
39124898 745FF994113ECC660020C31B /* 3DSLoader.cpp in Sources */,
39134899 745FF996113ECC660020C31B /* ASELoader.cpp in Sources */,
39144900 745FF997113ECC660020C31B /* ASEParser.cpp in Sources */,
3915 745FF998113ECC660020C31B /* Assimp.cpp in Sources */,
3916 745FF999113ECC660020C31B /* BaseImporter.cpp in Sources */,
3917 745FF99A113ECC660020C31B /* CalcTangentsProcess.cpp in Sources */,
3918 745FF99B113ECC660020C31B /* ConvertToLHProcess.cpp in Sources */,
3919 745FF99C113ECC660020C31B /* DefaultIOStream.cpp in Sources */,
3920 745FF99D113ECC660020C31B /* DefaultIOSystem.cpp in Sources */,
3921 745FF99E113ECC660020C31B /* DefaultLogger.cpp in Sources */,
3922 745FF9A0113ECC660020C31B /* GenFaceNormalsProcess.cpp in Sources */,
3923 745FF9A1113ECC660020C31B /* GenVertexNormalsProcess.cpp in Sources */,
39244901 745FF9A2113ECC660020C31B /* HMPLoader.cpp in Sources */,
3925 745FF9A3113ECC660020C31B /* Importer.cpp in Sources */,
3926 745FF9A4113ECC660020C31B /* ImproveCacheLocality.cpp in Sources */,
3927 745FF9A5113ECC660020C31B /* JoinVerticesProcess.cpp in Sources */,
3928 745FF9A6113ECC660020C31B /* LimitBoneWeightsProcess.cpp in Sources */,
3929 745FF9A7113ECC660020C31B /* MaterialSystem.cpp in Sources */,
39304902 745FF9A8113ECC660020C31B /* MD2Loader.cpp in Sources */,
39314903 745FF9A9113ECC660020C31B /* MD3Loader.cpp in Sources */,
39324904 745FF9AA113ECC660020C31B /* MD5Loader.cpp in Sources */,
39334905 745FF9AB113ECC660020C31B /* MD5Parser.cpp in Sources */,
39344906 745FF9AC113ECC660020C31B /* MDLLoader.cpp in Sources */,
39354907 745FF9AD113ECC660020C31B /* MDLMaterialLoader.cpp in Sources */,
3936 745FF9AE113ECC660020C31B /* ObjFileImporter.cpp in Sources */,
3937 745FF9AF113ECC660020C31B /* ObjFileMtlImporter.cpp in Sources */,
3938 745FF9B0113ECC660020C31B /* ObjFileParser.cpp in Sources */,
39394908 745FF9B1113ECC660020C31B /* PlyLoader.cpp in Sources */,
39404909 745FF9B2113ECC660020C31B /* PlyParser.cpp in Sources */,
3941 745FF9B3113ECC660020C31B /* PretransformVertices.cpp in Sources */,
3942 745FF9B4113ECC660020C31B /* RemoveComments.cpp in Sources */,
3943 745FF9B5113ECC660020C31B /* RemoveRedundantMaterials.cpp in Sources */,
39444910 745FF9B6113ECC660020C31B /* SMDLoader.cpp in Sources */,
3945 745FF9B7113ECC660020C31B /* SpatialSort.cpp in Sources */,
3946 745FF9B8113ECC660020C31B /* SplitLargeMeshes.cpp in Sources */,
3947 745FF9B9113ECC660020C31B /* STLLoader.cpp in Sources */,
3948 745FF9BA113ECC660020C31B /* TextureTransform.cpp in Sources */,
3949 745FF9BB113ECC660020C31B /* TriangulateProcess.cpp in Sources */,
3950 745FF9BC113ECC660020C31B /* ValidateDataStructure.cpp in Sources */,
3951 745FF9BD113ECC660020C31B /* VertexTriangleAdjacency.cpp in Sources */,
39524911 745FF9BE113ECC660020C31B /* XFileImporter.cpp in Sources */,
39534912 745FF9BF113ECC660020C31B /* XFileParser.cpp in Sources */,
39544913 745FF9C0113ECC660020C31B /* MDCLoader.cpp in Sources */,
3955 745FF9C1113ECC660020C31B /* FixNormalsStep.cpp in Sources */,
39564914 745FF9C2113ECC660020C31B /* LWOLoader.cpp in Sources */,
3957 745FF9C3113ECC660020C31B /* BaseProcess.cpp in Sources */,
39584915 745FF9C4113ECC660020C31B /* LWOMaterial.cpp in Sources */,
39594916 745FF9C5113ECC660020C31B /* ACLoader.cpp in Sources */,
39604917 745FF9C6113ECC660020C31B /* IRRLoader.cpp in Sources */,
39614918 745FF9C7113ECC660020C31B /* IRRMeshLoader.cpp in Sources */,
39624919 745FF9C8113ECC660020C31B /* IRRShared.cpp in Sources */,
3963 745FF9C9113ECC660020C31B /* ColladaLoader.cpp in Sources */,
3964 745FF9CA113ECC660020C31B /* ColladaParser.cpp in Sources */,
39654920 745FF9CB113ECC660020C31B /* NFFLoader.cpp in Sources */,
3966 745FF9CC113ECC660020C31B /* SGSpatialSort.cpp in Sources */,
39674921 745FF9CD113ECC660020C31B /* Q3DLoader.cpp in Sources */,
39684922 745FF9CE113ECC660020C31B /* BVHLoader.cpp in Sources */,
39694923 745FF9CF113ECC660020C31B /* OFFLoader.cpp in Sources */,
39714925 745FF9D1113ECC660020C31B /* DXFLoader.cpp in Sources */,
39724926 745FF9D2113ECC660020C31B /* LWOBLoader.cpp in Sources */,
39734927 745FF9D3113ECC660020C31B /* TerragenLoader.cpp in Sources */,
3974 745FF9D4113ECC660020C31B /* SceneCombiner.cpp in Sources */,
3975 745FF9D5113ECC660020C31B /* ScenePreprocessor.cpp in Sources */,
3976 745FF9D6113ECC660020C31B /* SortByPTypeProcess.cpp in Sources */,
3977 745FF9D7113ECC660020C31B /* FindDegenerates.cpp in Sources */,
3978 745FF9D8113ECC660020C31B /* ComputeUVMappingProcess.cpp in Sources */,
3979 745FF9D9113ECC660020C31B /* StandardShapes.cpp in Sources */,
3980 745FF9DA113ECC660020C31B /* FindInstancesProcess.cpp in Sources */,
3981 745FF9DB113ECC660020C31B /* RemoveVCProcess.cpp in Sources */,
3982 745FF9DC113ECC660020C31B /* FindInvalidDataProcess.cpp in Sources */,
3983 745FF9DD113ECC660020C31B /* SkeletonMeshBuilder.cpp in Sources */,
39844928 745FF9DF113ECC660020C31B /* B3DImporter.cpp in Sources */,
39854929 7411B15011416D5E00BCD793 /* CSMLoader.cpp in Sources */,
39864930 7411B15B11416DDD00BCD793 /* LWSLoader.cpp in Sources */,
39874931 7411B16511416DF400BCD793 /* LWOAnimation.cpp in Sources */,
39884932 7411B17211416E2500BCD793 /* MS3DLoader.cpp in Sources */,
39894933 7411B18D11416EBC00BCD793 /* UnrealLoader.cpp in Sources */,
3990 7411B1A911416EF400BCD793 /* OptimizeGraph.cpp in Sources */,
3991 7411B1AB11416EF400BCD793 /* OptimizeMeshes.cpp in Sources */,
3992 7411B1B011416EF400BCD793 /* Subdivision.cpp in Sources */,
3993 7411B1B211416EF400BCD793 /* TargetAnimation.cpp in Sources */,
39944934 74C9BB6611ACBB1000AF885C /* BlenderDNA.cpp in Sources */,
39954935 74C9BB6811ACBB1000AF885C /* BlenderLoader.cpp in Sources */,
39964936 74C9BB6A11ACBB1000AF885C /* BlenderScene.cpp in Sources */,
3997 74C9BB8011ACBB7800AF885C /* MakeVerboseFormat.cpp in Sources */,
39984937 74C9BB8A11ACBB9900AF885C /* AssimpPCH.cpp in Sources */,
39994938 74C9BB9911ACBBBC00AF885C /* COBLoader.cpp in Sources */,
40004939 8E7ABBBE127E0F1A00512ED1 /* Q3BSPFileImporter.cpp in Sources */,
40104949 F9BA8C4F154328B600E63FFE /* OgreMaterial.cpp in Sources */,
40114950 F9BA8C50154328B600E63FFE /* OgreMesh.cpp in Sources */,
40124951 F9BA8C51154328B600E63FFE /* OgreSkeleton.cpp in Sources */,
4013 F99A9ED915436125000682F3 /* DeboneProcess.cpp in Sources */,
4014 F99A9F1B154361AD000682F3 /* ImporterRegistry.cpp in Sources */,
4015 F99A9F2E15436207000682F3 /* M3Importer.cpp in Sources */,
40164952 F99A9F3815436269000682F3 /* PlyExporter.cpp in Sources */,
4017 F99A9F431543629F000682F3 /* PostStepRegistry.cpp in Sources */,
4018 F99A9F5115436304000682F3 /* SplitByBoneCountProcess.cpp in Sources */,
4019 F99A9F6615436323000682F3 /* STEPFileReader.cpp in Sources */,
4020 F9606FF6154364E5004D91DD /* ProcessHelper.cpp in Sources */,
40214953 F9607099154366AB004D91DD /* adler32.c in Sources */,
40224954 F960709A154366AB004D91DD /* compress.c in Sources */,
40234955 F960709B154366AB004D91DD /* crc32.c in Sources */,
40344966 F96071091543675E004D91DD /* cdt.cc in Sources */,
40354967 F960710B1543675E004D91DD /* sweep.cc in Sources */,
40364968 F960710D1543675E004D91DD /* sweep_context.cc in Sources */,
4037 F97BA08E15439FC3009EB9DD /* IFCCurve.cpp in Sources */,
4038 F97BA08F15439FC3009EB9DD /* IFCGeometry.cpp in Sources */,
4039 F97BA09015439FC3009EB9DD /* IFCLoader.cpp in Sources */,
4040 F97BA09215439FC3009EB9DD /* IFCMaterial.cpp in Sources */,
4041 F97BA09315439FC3009EB9DD /* IFCProfile.cpp in Sources */,
4042 F97BA09415439FC3009EB9DD /* IFCReaderGen.cpp in Sources */,
4043 F97BA09615439FC3009EB9DD /* IFCUtil.cpp in Sources */,
4969 2B7F46E51708365200A106A9 /* Assimp.cpp in Sources */,
4970 2B7F46EA1708365200A106A9 /* AssimpCExport.cpp in Sources */,
4971 2B7F47031708365200A106A9 /* BaseImporter.cpp in Sources */,
4972 2B7F470D1708365200A106A9 /* BaseProcess.cpp in Sources */,
4973 2B7F47A31708365200A106A9 /* CalcTangentsProcess.cpp in Sources */,
4974 2B7F47C11708365200A106A9 /* ColladaExporter.cpp in Sources */,
4975 2B7F47D01708365200A106A9 /* ColladaLoader.cpp in Sources */,
4976 2B7F47DA1708365200A106A9 /* ColladaParser.cpp in Sources */,
4977 2B7F47E41708365200A106A9 /* ComputeUVMappingProcess.cpp in Sources */,
4978 2B7F47EE1708365200A106A9 /* ConvertToLHProcess.cpp in Sources */,
4979 2B7F48021708365200A106A9 /* DeboneProcess.cpp in Sources */,
4980 2B7F480C1708365200A106A9 /* DefaultIOStream.cpp in Sources */,
4981 2B7F48161708365200A106A9 /* DefaultIOSystem.cpp in Sources */,
4982 2B7F48201708365200A106A9 /* DefaultLogger.cpp in Sources */,
4983 2B7F483E1708365200A106A9 /* Exporter.cpp in Sources */,
4984 2B7F48481708365200A106A9 /* FBXAnimation.cpp in Sources */,
4985 2B7F484D1708365200A106A9 /* FBXBinaryTokenizer.cpp in Sources */,
4986 2B7F48571708365200A106A9 /* FBXConverter.cpp in Sources */,
4987 2B7F48611708365200A106A9 /* FBXDeformer.cpp in Sources */,
4988 2B7F48661708365200A106A9 /* FBXDocument.cpp in Sources */,
4989 2B7F48701708365200A106A9 /* FBXDocumentUtil.cpp in Sources */,
4990 2B7F487A1708365200A106A9 /* FBXImporter.cpp in Sources */,
4991 2B7F48891708365200A106A9 /* FBXMaterial.cpp in Sources */,
4992 2B7F488E1708365200A106A9 /* FBXMeshGeometry.cpp in Sources */,
4993 2B7F48931708365200A106A9 /* FBXModel.cpp in Sources */,
4994 2B7F48981708365200A106A9 /* FBXNodeAttribute.cpp in Sources */,
4995 2B7F489D1708365200A106A9 /* FBXParser.cpp in Sources */,
4996 2B7F48A71708365200A106A9 /* FBXProperties.cpp in Sources */,
4997 2B7F48B11708365200A106A9 /* FBXTokenizer.cpp in Sources */,
4998 2B7F48BB1708365200A106A9 /* FBXUtil.cpp in Sources */,
4999 2B7F48CF1708365200A106A9 /* FindDegenerates.cpp in Sources */,
5000 2B7F48D91708365200A106A9 /* FindInstancesProcess.cpp in Sources */,
5001 2B7F48E31708365200A106A9 /* FindInvalidDataProcess.cpp in Sources */,
5002 2B7F48ED1708365200A106A9 /* FixNormalsStep.cpp in Sources */,
5003 2B7F48FC1708365200A106A9 /* GenFaceNormalsProcess.cpp in Sources */,
5004 2B7F49061708365200A106A9 /* GenVertexNormalsProcess.cpp in Sources */,
5005 2B7F49291708365200A106A9 /* IFCBoolean.cpp in Sources */,
5006 2B7F492E1708365200A106A9 /* IFCCurve.cpp in Sources */,
5007 2B7F49331708365200A106A9 /* IFCGeometry.cpp in Sources */,
5008 2B7F49381708365200A106A9 /* IFCLoader.cpp in Sources */,
5009 2B7F49421708365200A106A9 /* IFCMaterial.cpp in Sources */,
5010 2B7F49471708365200A106A9 /* IFCOpenings.cpp in Sources */,
5011 2B7F494C1708365200A106A9 /* IFCProfile.cpp in Sources */,
5012 2B7F49511708365200A106A9 /* IFCReaderGen.cpp in Sources */,
5013 2B7F495B1708365200A106A9 /* IFCUtil.cpp in Sources */,
5014 2B7F496A1708365200A106A9 /* Importer.cpp in Sources */,
5015 2B7F49741708365200A106A9 /* ImporterRegistry.cpp in Sources */,
5016 2B7F49791708365200A106A9 /* ImproveCacheLocality.cpp in Sources */,
5017 2B7F49A61708365200A106A9 /* JoinVerticesProcess.cpp in Sources */,
5018 2B7F49B01708365200A106A9 /* LimitBoneWeightsProcess.cpp in Sources */,
5019 2B7F49FB1708365200A106A9 /* MakeVerboseFormat.cpp in Sources */,
5020 2B7F4A051708365200A106A9 /* MaterialSystem.cpp in Sources */,
5021 2B7F4A9B1708365200A106A9 /* ObjExporter.cpp in Sources */,
5022 2B7F4AAA1708365200A106A9 /* ObjFileImporter.cpp in Sources */,
5023 2B7F4AB41708365200A106A9 /* ObjFileMtlImporter.cpp in Sources */,
5024 2B7F4ABE1708365200A106A9 /* ObjFileParser.cpp in Sources */,
5025 2B7F4AF51708365200A106A9 /* OptimizeGraph.cpp in Sources */,
5026 2B7F4AFF1708365200A106A9 /* OptimizeMeshes.cpp in Sources */,
5027 2B7F4B311708365200A106A9 /* PostStepRegistry.cpp in Sources */,
5028 2B7F4B361708365200A106A9 /* PretransformVertices.cpp in Sources */,
5029 2B7F4B401708365200A106A9 /* ProcessHelper.cpp in Sources */,
5030 2B7F4B901708365200A106A9 /* RemoveComments.cpp in Sources */,
5031 2B7F4B9A1708365200A106A9 /* RemoveRedundantMaterials.cpp in Sources */,
5032 2B7F4BA41708365200A106A9 /* RemoveVCProcess.cpp in Sources */,
5033 2B7F4BB31708365200A106A9 /* SceneCombiner.cpp in Sources */,
5034 2B7F4BBD1708365200A106A9 /* ScenePreprocessor.cpp in Sources */,
5035 2B7F4BCC1708365200A106A9 /* SGSpatialSort.cpp in Sources */,
5036 2B7F4BD61708365200A106A9 /* SkeletonMeshBuilder.cpp in Sources */,
5037 2B7F4BEF1708365200A106A9 /* SortByPTypeProcess.cpp in Sources */,
5038 2B7F4BF91708365200A106A9 /* SpatialSort.cpp in Sources */,
5039 2B7F4C031708365200A106A9 /* SplitByBoneCountProcess.cpp in Sources */,
5040 2B7F4C0D1708365200A106A9 /* SplitLargeMeshes.cpp in Sources */,
5041 2B7F4C171708365200A106A9 /* StandardShapes.cpp in Sources */,
5042 2B7F4C2B1708365200A106A9 /* STEPFileEncoding.cpp in Sources */,
5043 2B7F4C351708365200A106A9 /* STEPFileReader.cpp in Sources */,
5044 2B7F4C3F1708365200A106A9 /* STLExporter.cpp in Sources */,
5045 2B7F4C491708365200A106A9 /* STLLoader.cpp in Sources */,
5046 2B7F4C5D1708365200A106A9 /* Subdivision.cpp in Sources */,
5047 2B7F4C671708365200A106A9 /* TargetAnimation.cpp in Sources */,
5048 2B7F4C7B1708365200A106A9 /* TextureTransform.cpp in Sources */,
5049 2B7F4C8A1708365200A106A9 /* TriangulateProcess.cpp in Sources */,
5050 2B7F4C9E1708365200A106A9 /* ValidateDataStructure.cpp in Sources */,
5051 2B7F4CAD1708365200A106A9 /* VertexTriangleAdjacency.cpp in Sources */,
5052 );
5053 runOnlyForDeploymentPostprocessing = 0;
5054 };
5055 B91975B6163AEA54009C397B /* Sources */ = {
5056 isa = PBXSourcesBuildPhase;
5057 buildActionMask = 2147483647;
5058 files = (
5059 B91975B7163AEA54009C397B /* 3DSConverter.cpp in Sources */,
5060 B91975B8163AEA54009C397B /* 3DSLoader.cpp in Sources */,
5061 B91975B9163AEA54009C397B /* ASELoader.cpp in Sources */,
5062 B91975BA163AEA54009C397B /* ASEParser.cpp in Sources */,
5063 B91975C4163AEA54009C397B /* HMPLoader.cpp in Sources */,
5064 B91975CA163AEA54009C397B /* MD2Loader.cpp in Sources */,
5065 B91975CB163AEA54009C397B /* MD3Loader.cpp in Sources */,
5066 B91975CC163AEA54009C397B /* MD5Loader.cpp in Sources */,
5067 B91975CD163AEA54009C397B /* MD5Parser.cpp in Sources */,
5068 B91975CE163AEA54009C397B /* MDLLoader.cpp in Sources */,
5069 B91975CF163AEA54009C397B /* MDLMaterialLoader.cpp in Sources */,
5070 B91975D3163AEA54009C397B /* PlyLoader.cpp in Sources */,
5071 B91975D4163AEA54009C397B /* PlyParser.cpp in Sources */,
5072 B91975D8163AEA54009C397B /* SMDLoader.cpp in Sources */,
5073 B91975E0163AEA54009C397B /* XFileImporter.cpp in Sources */,
5074 B91975E1163AEA54009C397B /* XFileParser.cpp in Sources */,
5075 B91975E2163AEA54009C397B /* MDCLoader.cpp in Sources */,
5076 B91975E4163AEA54009C397B /* LWOLoader.cpp in Sources */,
5077 B91975E6163AEA54009C397B /* LWOMaterial.cpp in Sources */,
5078 B91975E7163AEA54009C397B /* ACLoader.cpp in Sources */,
5079 B91975E8163AEA54009C397B /* IRRLoader.cpp in Sources */,
5080 B91975E9163AEA54009C397B /* IRRMeshLoader.cpp in Sources */,
5081 B91975EA163AEA54009C397B /* IRRShared.cpp in Sources */,
5082 B91975ED163AEA54009C397B /* NFFLoader.cpp in Sources */,
5083 B91975EF163AEA54009C397B /* Q3DLoader.cpp in Sources */,
5084 B91975F0163AEA54009C397B /* BVHLoader.cpp in Sources */,
5085 B91975F1163AEA54009C397B /* OFFLoader.cpp in Sources */,
5086 B91975F2163AEA54009C397B /* RawLoader.cpp in Sources */,
5087 B91975F3163AEA54009C397B /* DXFLoader.cpp in Sources */,
5088 B91975F4163AEA54009C397B /* LWOBLoader.cpp in Sources */,
5089 B91975F5163AEA54009C397B /* TerragenLoader.cpp in Sources */,
5090 B9197600163AEA54009C397B /* B3DImporter.cpp in Sources */,
5091 B9197601163AEA54009C397B /* CSMLoader.cpp in Sources */,
5092 B9197602163AEA54009C397B /* LWSLoader.cpp in Sources */,
5093 B9197603163AEA54009C397B /* LWOAnimation.cpp in Sources */,
5094 B9197604163AEA54009C397B /* MS3DLoader.cpp in Sources */,
5095 B9197605163AEA54009C397B /* UnrealLoader.cpp in Sources */,
5096 B919760A163AEA54009C397B /* BlenderDNA.cpp in Sources */,
5097 B919760B163AEA54009C397B /* BlenderLoader.cpp in Sources */,
5098 B919760C163AEA54009C397B /* BlenderScene.cpp in Sources */,
5099 B919760E163AEA54009C397B /* AssimpPCH.cpp in Sources */,
5100 B919760F163AEA54009C397B /* COBLoader.cpp in Sources */,
5101 B9197610163AEA54009C397B /* Q3BSPFileImporter.cpp in Sources */,
5102 B9197611163AEA54009C397B /* Q3BSPFileParser.cpp in Sources */,
5103 B9197612163AEA54009C397B /* Q3BSPZipArchive.cpp in Sources */,
5104 B9197613163AEA54009C397B /* NDOLoader.cpp in Sources */,
5105 B9197614163AEA54009C397B /* BlenderModifier.cpp in Sources */,
5106 B9197615163AEA54009C397B /* ConvertUTF.c in Sources */,
5107 B9197616163AEA54009C397B /* irrXML.cpp in Sources */,
5108 B9197617163AEA54009C397B /* ioapi.c in Sources */,
5109 B9197618163AEA54009C397B /* unzip.c in Sources */,
5110 B9197619163AEA54009C397B /* OgreImporter.cpp in Sources */,
5111 B919761A163AEA54009C397B /* OgreMaterial.cpp in Sources */,
5112 B919761B163AEA54009C397B /* OgreMesh.cpp in Sources */,
5113 B919761C163AEA54009C397B /* OgreSkeleton.cpp in Sources */,
5114 B9197620163AEA54009C397B /* PlyExporter.cpp in Sources */,
5115 B9197625163AEA54009C397B /* adler32.c in Sources */,
5116 B9197626163AEA54009C397B /* compress.c in Sources */,
5117 B9197627163AEA54009C397B /* crc32.c in Sources */,
5118 B9197628163AEA54009C397B /* deflate.c in Sources */,
5119 B9197629163AEA54009C397B /* inffast.c in Sources */,
5120 B919762A163AEA54009C397B /* inflate.c in Sources */,
5121 B919762B163AEA54009C397B /* inftrees.c in Sources */,
5122 B919762C163AEA54009C397B /* trees.c in Sources */,
5123 B919762D163AEA54009C397B /* zutil.c in Sources */,
5124 B919762E163AEA54009C397B /* XGLLoader.cpp in Sources */,
5125 B919762F163AEA54009C397B /* clipper.cpp in Sources */,
5126 B9197630163AEA54009C397B /* shapes.cc in Sources */,
5127 B9197631163AEA54009C397B /* advancing_front.cc in Sources */,
5128 B9197632163AEA54009C397B /* cdt.cc in Sources */,
5129 B9197633163AEA54009C397B /* sweep.cc in Sources */,
5130 B9197634163AEA54009C397B /* sweep_context.cc in Sources */,
5131 2B7F46E61708365200A106A9 /* Assimp.cpp in Sources */,
5132 2B7F46EB1708365200A106A9 /* AssimpCExport.cpp in Sources */,
5133 2B7F47041708365200A106A9 /* BaseImporter.cpp in Sources */,
5134 2B7F470E1708365200A106A9 /* BaseProcess.cpp in Sources */,
5135 2B7F47A41708365200A106A9 /* CalcTangentsProcess.cpp in Sources */,
5136 2B7F47C21708365200A106A9 /* ColladaExporter.cpp in Sources */,
5137 2B7F47D11708365200A106A9 /* ColladaLoader.cpp in Sources */,
5138 2B7F47DB1708365200A106A9 /* ColladaParser.cpp in Sources */,
5139 2B7F47E51708365200A106A9 /* ComputeUVMappingProcess.cpp in Sources */,
5140 2B7F47EF1708365200A106A9 /* ConvertToLHProcess.cpp in Sources */,
5141 2B7F48031708365200A106A9 /* DeboneProcess.cpp in Sources */,
5142 2B7F480D1708365200A106A9 /* DefaultIOStream.cpp in Sources */,
5143 2B7F48171708365200A106A9 /* DefaultIOSystem.cpp in Sources */,
5144 2B7F48211708365200A106A9 /* DefaultLogger.cpp in Sources */,
5145 2B7F483F1708365200A106A9 /* Exporter.cpp in Sources */,
5146 2B7F48491708365200A106A9 /* FBXAnimation.cpp in Sources */,
5147 2B7F484E1708365200A106A9 /* FBXBinaryTokenizer.cpp in Sources */,
5148 2B7F48581708365200A106A9 /* FBXConverter.cpp in Sources */,
5149 2B7F48621708365200A106A9 /* FBXDeformer.cpp in Sources */,
5150 2B7F48671708365200A106A9 /* FBXDocument.cpp in Sources */,
5151 2B7F48711708365200A106A9 /* FBXDocumentUtil.cpp in Sources */,
5152 2B7F487B1708365200A106A9 /* FBXImporter.cpp in Sources */,
5153 2B7F488A1708365200A106A9 /* FBXMaterial.cpp in Sources */,
5154 2B7F488F1708365200A106A9 /* FBXMeshGeometry.cpp in Sources */,
5155 2B7F48941708365200A106A9 /* FBXModel.cpp in Sources */,
5156 2B7F48991708365200A106A9 /* FBXNodeAttribute.cpp in Sources */,
5157 2B7F489E1708365200A106A9 /* FBXParser.cpp in Sources */,
5158 2B7F48A81708365200A106A9 /* FBXProperties.cpp in Sources */,
5159 2B7F48B21708365200A106A9 /* FBXTokenizer.cpp in Sources */,
5160 2B7F48BC1708365200A106A9 /* FBXUtil.cpp in Sources */,
5161 2B7F48D01708365200A106A9 /* FindDegenerates.cpp in Sources */,
5162 2B7F48DA1708365200A106A9 /* FindInstancesProcess.cpp in Sources */,
5163 2B7F48E41708365200A106A9 /* FindInvalidDataProcess.cpp in Sources */,
5164 2B7F48EE1708365200A106A9 /* FixNormalsStep.cpp in Sources */,
5165 2B7F48FD1708365200A106A9 /* GenFaceNormalsProcess.cpp in Sources */,
5166 2B7F49071708365200A106A9 /* GenVertexNormalsProcess.cpp in Sources */,
5167 2B7F492A1708365200A106A9 /* IFCBoolean.cpp in Sources */,
5168 2B7F492F1708365200A106A9 /* IFCCurve.cpp in Sources */,
5169 2B7F49341708365200A106A9 /* IFCGeometry.cpp in Sources */,
5170 2B7F49391708365200A106A9 /* IFCLoader.cpp in Sources */,
5171 2B7F49431708365200A106A9 /* IFCMaterial.cpp in Sources */,
5172 2B7F49481708365200A106A9 /* IFCOpenings.cpp in Sources */,
5173 2B7F494D1708365200A106A9 /* IFCProfile.cpp in Sources */,
5174 2B7F49521708365200A106A9 /* IFCReaderGen.cpp in Sources */,
5175 2B7F495C1708365200A106A9 /* IFCUtil.cpp in Sources */,
5176 2B7F496B1708365200A106A9 /* Importer.cpp in Sources */,
5177 2B7F49751708365200A106A9 /* ImporterRegistry.cpp in Sources */,
5178 2B7F497A1708365200A106A9 /* ImproveCacheLocality.cpp in Sources */,
5179 2B7F49A71708365200A106A9 /* JoinVerticesProcess.cpp in Sources */,
5180 2B7F49B11708365200A106A9 /* LimitBoneWeightsProcess.cpp in Sources */,
5181 2B7F49FC1708365200A106A9 /* MakeVerboseFormat.cpp in Sources */,
5182 2B7F4A061708365200A106A9 /* MaterialSystem.cpp in Sources */,
5183 2B7F4A9C1708365200A106A9 /* ObjExporter.cpp in Sources */,
5184 2B7F4AAB1708365200A106A9 /* ObjFileImporter.cpp in Sources */,
5185 2B7F4AB51708365200A106A9 /* ObjFileMtlImporter.cpp in Sources */,
5186 2B7F4ABF1708365200A106A9 /* ObjFileParser.cpp in Sources */,
5187 2B7F4AF61708365200A106A9 /* OptimizeGraph.cpp in Sources */,
5188 2B7F4B001708365200A106A9 /* OptimizeMeshes.cpp in Sources */,
5189 2B7F4B321708365200A106A9 /* PostStepRegistry.cpp in Sources */,
5190 2B7F4B371708365200A106A9 /* PretransformVertices.cpp in Sources */,
5191 2B7F4B411708365200A106A9 /* ProcessHelper.cpp in Sources */,
5192 2B7F4B911708365200A106A9 /* RemoveComments.cpp in Sources */,
5193 2B7F4B9B1708365200A106A9 /* RemoveRedundantMaterials.cpp in Sources */,
5194 2B7F4BA51708365200A106A9 /* RemoveVCProcess.cpp in Sources */,
5195 2B7F4BB41708365200A106A9 /* SceneCombiner.cpp in Sources */,
5196 2B7F4BBE1708365200A106A9 /* ScenePreprocessor.cpp in Sources */,
5197 2B7F4BCD1708365200A106A9 /* SGSpatialSort.cpp in Sources */,
5198 2B7F4BD71708365200A106A9 /* SkeletonMeshBuilder.cpp in Sources */,
5199 2B7F4BF01708365200A106A9 /* SortByPTypeProcess.cpp in Sources */,
5200 2B7F4BFA1708365200A106A9 /* SpatialSort.cpp in Sources */,
5201 2B7F4C041708365200A106A9 /* SplitByBoneCountProcess.cpp in Sources */,
5202 2B7F4C0E1708365200A106A9 /* SplitLargeMeshes.cpp in Sources */,
5203 2B7F4C181708365200A106A9 /* StandardShapes.cpp in Sources */,
5204 2B7F4C2C1708365200A106A9 /* STEPFileEncoding.cpp in Sources */,
5205 2B7F4C361708365200A106A9 /* STEPFileReader.cpp in Sources */,
5206 2B7F4C401708365200A106A9 /* STLExporter.cpp in Sources */,
5207 2B7F4C4A1708365200A106A9 /* STLLoader.cpp in Sources */,
5208 2B7F4C5E1708365200A106A9 /* Subdivision.cpp in Sources */,
5209 2B7F4C681708365200A106A9 /* TargetAnimation.cpp in Sources */,
5210 2B7F4C7C1708365200A106A9 /* TextureTransform.cpp in Sources */,
5211 2B7F4C8B1708365200A106A9 /* TriangulateProcess.cpp in Sources */,
5212 2B7F4C9F1708365200A106A9 /* ValidateDataStructure.cpp in Sources */,
5213 2B7F4CAE1708365200A106A9 /* VertexTriangleAdjacency.cpp in Sources */,
40445214 );
40455215 runOnlyForDeploymentPostprocessing = 0;
40465216 };
40525222 3AF45AFC0E4B716800207D74 /* 3DSLoader.cpp in Sources */,
40535223 3AF45B010E4B716800207D74 /* ASELoader.cpp in Sources */,
40545224 3AF45B030E4B716800207D74 /* ASEParser.cpp in Sources */,
4055 3AF45B050E4B716800207D74 /* Assimp.cpp in Sources */,
4056 3AF45B060E4B716800207D74 /* BaseImporter.cpp in Sources */,
4057 3AF45B0A0E4B716800207D74 /* CalcTangentsProcess.cpp in Sources */,
4058 3AF45B0C0E4B716800207D74 /* ConvertToLHProcess.cpp in Sources */,
4059 3AF45B0E0E4B716800207D74 /* DefaultIOStream.cpp in Sources */,
4060 3AF45B100E4B716800207D74 /* DefaultIOSystem.cpp in Sources */,
4061 3AF45B120E4B716800207D74 /* DefaultLogger.cpp in Sources */,
4062 3AF45B170E4B716800207D74 /* GenFaceNormalsProcess.cpp in Sources */,
4063 3AF45B190E4B716800207D74 /* GenVertexNormalsProcess.cpp in Sources */,
40645225 3AF45B1D0E4B716800207D74 /* HMPLoader.cpp in Sources */,
4065 3AF45B1F0E4B716800207D74 /* Importer.cpp in Sources */,
4066 3AF45B200E4B716800207D74 /* ImproveCacheLocality.cpp in Sources */,
4067 3AF45B220E4B716800207D74 /* JoinVerticesProcess.cpp in Sources */,
4068 3AF45B260E4B716800207D74 /* LimitBoneWeightsProcess.cpp in Sources */,
4069 3AF45B280E4B716800207D74 /* MaterialSystem.cpp in Sources */,
40705226 3AF45B2B0E4B716800207D74 /* MD2Loader.cpp in Sources */,
40715227 3AF45B2F0E4B716800207D74 /* MD3Loader.cpp in Sources */,
40725228 3AF45B340E4B716800207D74 /* MD5Loader.cpp in Sources */,
40735229 3AF45B360E4B716800207D74 /* MD5Parser.cpp in Sources */,
40745230 3AF45B3A0E4B716800207D74 /* MDLLoader.cpp in Sources */,
40755231 3AF45B3C0E4B716800207D74 /* MDLMaterialLoader.cpp in Sources */,
4076 3AF45B3E0E4B716800207D74 /* ObjFileImporter.cpp in Sources */,
4077 3AF45B400E4B716800207D74 /* ObjFileMtlImporter.cpp in Sources */,
4078 3AF45B420E4B716800207D74 /* ObjFileParser.cpp in Sources */,
40795232 3AF45B460E4B716800207D74 /* PlyLoader.cpp in Sources */,
40805233 3AF45B480E4B716800207D74 /* PlyParser.cpp in Sources */,
4081 3AF45B4A0E4B716800207D74 /* PretransformVertices.cpp in Sources */,
4082 3AF45B4D0E4B716800207D74 /* RemoveComments.cpp in Sources */,
4083 3AF45B4F0E4B716800207D74 /* RemoveRedundantMaterials.cpp in Sources */,
40845234 3AF45B520E4B716800207D74 /* SMDLoader.cpp in Sources */,
4085 3AF45B540E4B716800207D74 /* SpatialSort.cpp in Sources */,
4086 3AF45B560E4B716800207D74 /* SplitLargeMeshes.cpp in Sources */,
4087 3AF45B580E4B716800207D74 /* STLLoader.cpp in Sources */,
4088 3AF45B5B0E4B716800207D74 /* TextureTransform.cpp in Sources */,
4089 3AF45B5D0E4B716800207D74 /* TriangulateProcess.cpp in Sources */,
4090 3AF45B5F0E4B716800207D74 /* ValidateDataStructure.cpp in Sources */,
4091 3AF45B610E4B716800207D74 /* VertexTriangleAdjacency.cpp in Sources */,
40925235 3AF45B650E4B716800207D74 /* XFileImporter.cpp in Sources */,
40935236 3AF45B670E4B716800207D74 /* XFileParser.cpp in Sources */,
40945237 3AB8A3B00E50D67A00606590 /* MDCLoader.cpp in Sources */,
4095 3AB8A3B50E50D69D00606590 /* FixNormalsStep.cpp in Sources */,
40965238 3AB8A3BB0E50D6DB00606590 /* LWOLoader.cpp in Sources */,
4097 3AB8A3C40E50D74500606590 /* BaseProcess.cpp in Sources */,
40985239 3AB8A7DD0E53715F00606590 /* LWOMaterial.cpp in Sources */,
40995240 F90BAFD20F5DD87000124155 /* ACLoader.cpp in Sources */,
41005241 F90BAFDF0F5DD90800124155 /* IRRLoader.cpp in Sources */,
41015242 F90BAFE10F5DD90800124155 /* IRRMeshLoader.cpp in Sources */,
41025243 F90BAFE30F5DD90800124155 /* IRRShared.cpp in Sources */,
4103 F90BAFEE0F5DD93600124155 /* ColladaLoader.cpp in Sources */,
4104 F90BAFF00F5DD93600124155 /* ColladaParser.cpp in Sources */,
41055244 F90BAFF80F5DD96100124155 /* NFFLoader.cpp in Sources */,
4106 F90BAFFE0F5DD9A000124155 /* SGSpatialSort.cpp in Sources */,
41075245 F90BB0080F5DD9DD00124155 /* Q3DLoader.cpp in Sources */,
41085246 F90BB00F0F5DD9F400124155 /* BVHLoader.cpp in Sources */,
41095247 F90BB0160F5DDA1400124155 /* OFFLoader.cpp in Sources */,
41115249 F90BB0240F5DDA5700124155 /* DXFLoader.cpp in Sources */,
41125250 F90BB0280F5DDA9200124155 /* LWOBLoader.cpp in Sources */,
41135251 F90BB0320F5DDAB500124155 /* TerragenLoader.cpp in Sources */,
4114 F90BB03E0F5DDB3200124155 /* SceneCombiner.cpp in Sources */,
4115 F90BB0400F5DDB3200124155 /* ScenePreprocessor.cpp in Sources */,
4116 F90BB0450F5DDB4600124155 /* SortByPTypeProcess.cpp in Sources */,
4117 F90BB04A0F5DDB6100124155 /* FindDegenerates.cpp in Sources */,
4118 F90BB04F0F5DDB8D00124155 /* ComputeUVMappingProcess.cpp in Sources */,
4119 F90BB0540F5DDBA800124155 /* StandardShapes.cpp in Sources */,
4120 F90BB0590F5DDBBF00124155 /* FindInstancesProcess.cpp in Sources */,
4121 F90BB05D0F5DDBCB00124155 /* RemoveVCProcess.cpp in Sources */,
4122 F90BB0610F5DDBE600124155 /* FindInvalidDataProcess.cpp in Sources */,
4123 F90BB0670F5DDC0700124155 /* SkeletonMeshBuilder.cpp in Sources */,
41245252 F90BB08A0F5DDE0700124155 /* B3DImporter.cpp in Sources */,
41255253 7411B15411416D5E00BCD793 /* CSMLoader.cpp in Sources */,
41265254 7411B15F11416DDD00BCD793 /* LWSLoader.cpp in Sources */,
41275255 7411B16911416DF400BCD793 /* LWOAnimation.cpp in Sources */,
41285256 7411B17611416E2500BCD793 /* MS3DLoader.cpp in Sources */,
41295257 7411B19111416EBC00BCD793 /* UnrealLoader.cpp in Sources */,
4130 7411B1C711416EF400BCD793 /* OptimizeGraph.cpp in Sources */,
4131 7411B1C911416EF400BCD793 /* OptimizeMeshes.cpp in Sources */,
4132 7411B1CE11416EF400BCD793 /* Subdivision.cpp in Sources */,
4133 7411B1D011416EF400BCD793 /* TargetAnimation.cpp in Sources */,
41345258 74C9BB5111ACBB1000AF885C /* BlenderDNA.cpp in Sources */,
41355259 74C9BB5311ACBB1000AF885C /* BlenderLoader.cpp in Sources */,
41365260 74C9BB5511ACBB1000AF885C /* BlenderScene.cpp in Sources */,
4137 74C9BB8211ACBB7800AF885C /* MakeVerboseFormat.cpp in Sources */,
41385261 74C9BB8C11ACBB9900AF885C /* AssimpPCH.cpp in Sources */,
41395262 74C9BB9C11ACBBBC00AF885C /* COBLoader.cpp in Sources */,
41405263 8E7ABBB0127E0F1A00512ED1 /* Q3BSPFileImporter.cpp in Sources */,
41505273 F9BA8C3D154328B600E63FFE /* OgreMaterial.cpp in Sources */,
41515274 F9BA8C3E154328B600E63FFE /* OgreMesh.cpp in Sources */,
41525275 F9BA8C3F154328B600E63FFE /* OgreSkeleton.cpp in Sources */,
4153 F99A9ED315436125000682F3 /* DeboneProcess.cpp in Sources */,
4154 F99A9F18154361AD000682F3 /* ImporterRegistry.cpp in Sources */,
4155 F99A9F2815436207000682F3 /* M3Importer.cpp in Sources */,
41565276 F99A9F3215436269000682F3 /* PlyExporter.cpp in Sources */,
4157 F99A9F401543629F000682F3 /* PostStepRegistry.cpp in Sources */,
4158 F99A9F4B15436304000682F3 /* SplitByBoneCountProcess.cpp in Sources */,
4159 F99A9F5D15436323000682F3 /* STEPFileReader.cpp in Sources */,
4160 F9606FF3154364E5004D91DD /* ProcessHelper.cpp in Sources */,
41615277 F960705D154366AB004D91DD /* adler32.c in Sources */,
41625278 F960705E154366AB004D91DD /* compress.c in Sources */,
41635279 F960705F154366AB004D91DD /* crc32.c in Sources */,
41745290 F96070E51543675E004D91DD /* cdt.cc in Sources */,
41755291 F96070E71543675E004D91DD /* sweep.cc in Sources */,
41765292 F96070E91543675E004D91DD /* sweep_context.cc in Sources */,
4177 F97BA07015439FC3009EB9DD /* IFCCurve.cpp in Sources */,
4178 F97BA07115439FC3009EB9DD /* IFCGeometry.cpp in Sources */,
4179 F97BA07215439FC3009EB9DD /* IFCLoader.cpp in Sources */,
4180 F97BA07415439FC3009EB9DD /* IFCMaterial.cpp in Sources */,
4181 F97BA07515439FC3009EB9DD /* IFCProfile.cpp in Sources */,
4182 F97BA07615439FC3009EB9DD /* IFCReaderGen.cpp in Sources */,
4183 F97BA07815439FC3009EB9DD /* IFCUtil.cpp in Sources */,
5293 2B7F46E21708365200A106A9 /* Assimp.cpp in Sources */,
5294 2B7F46E71708365200A106A9 /* AssimpCExport.cpp in Sources */,
5295 2B7F47001708365200A106A9 /* BaseImporter.cpp in Sources */,
5296 2B7F470A1708365200A106A9 /* BaseProcess.cpp in Sources */,
5297 2B7F47A01708365200A106A9 /* CalcTangentsProcess.cpp in Sources */,
5298 2B7F47BE1708365200A106A9 /* ColladaExporter.cpp in Sources */,
5299 2B7F47CD1708365200A106A9 /* ColladaLoader.cpp in Sources */,
5300 2B7F47D71708365200A106A9 /* ColladaParser.cpp in Sources */,
5301 2B7F47E11708365200A106A9 /* ComputeUVMappingProcess.cpp in Sources */,
5302 2B7F47EB1708365200A106A9 /* ConvertToLHProcess.cpp in Sources */,
5303 2B7F47FF1708365200A106A9 /* DeboneProcess.cpp in Sources */,
5304 2B7F48091708365200A106A9 /* DefaultIOStream.cpp in Sources */,
5305 2B7F48131708365200A106A9 /* DefaultIOSystem.cpp in Sources */,
5306 2B7F481D1708365200A106A9 /* DefaultLogger.cpp in Sources */,
5307 2B7F483B1708365200A106A9 /* Exporter.cpp in Sources */,
5308 2B7F48451708365200A106A9 /* FBXAnimation.cpp in Sources */,
5309 2B7F484A1708365200A106A9 /* FBXBinaryTokenizer.cpp in Sources */,
5310 2B7F48541708365200A106A9 /* FBXConverter.cpp in Sources */,
5311 2B7F485E1708365200A106A9 /* FBXDeformer.cpp in Sources */,
5312 2B7F48631708365200A106A9 /* FBXDocument.cpp in Sources */,
5313 2B7F486D1708365200A106A9 /* FBXDocumentUtil.cpp in Sources */,
5314 2B7F48771708365200A106A9 /* FBXImporter.cpp in Sources */,
5315 2B7F48861708365200A106A9 /* FBXMaterial.cpp in Sources */,
5316 2B7F488B1708365200A106A9 /* FBXMeshGeometry.cpp in Sources */,
5317 2B7F48901708365200A106A9 /* FBXModel.cpp in Sources */,
5318 2B7F48951708365200A106A9 /* FBXNodeAttribute.cpp in Sources */,
5319 2B7F489A1708365200A106A9 /* FBXParser.cpp in Sources */,
5320 2B7F48A41708365200A106A9 /* FBXProperties.cpp in Sources */,
5321 2B7F48AE1708365200A106A9 /* FBXTokenizer.cpp in Sources */,
5322 2B7F48B81708365200A106A9 /* FBXUtil.cpp in Sources */,
5323 2B7F48CC1708365200A106A9 /* FindDegenerates.cpp in Sources */,
5324 2B7F48D61708365200A106A9 /* FindInstancesProcess.cpp in Sources */,
5325 2B7F48E01708365200A106A9 /* FindInvalidDataProcess.cpp in Sources */,
5326 2B7F48EA1708365200A106A9 /* FixNormalsStep.cpp in Sources */,
5327 2B7F48F91708365200A106A9 /* GenFaceNormalsProcess.cpp in Sources */,
5328 2B7F49031708365200A106A9 /* GenVertexNormalsProcess.cpp in Sources */,
5329 2B7F49261708365200A106A9 /* IFCBoolean.cpp in Sources */,
5330 2B7F492B1708365200A106A9 /* IFCCurve.cpp in Sources */,
5331 2B7F49301708365200A106A9 /* IFCGeometry.cpp in Sources */,
5332 2B7F49351708365200A106A9 /* IFCLoader.cpp in Sources */,
5333 2B7F493F1708365200A106A9 /* IFCMaterial.cpp in Sources */,
5334 2B7F49441708365200A106A9 /* IFCOpenings.cpp in Sources */,
5335 2B7F49491708365200A106A9 /* IFCProfile.cpp in Sources */,
5336 2B7F494E1708365200A106A9 /* IFCReaderGen.cpp in Sources */,
5337 2B7F49581708365200A106A9 /* IFCUtil.cpp in Sources */,
5338 2B7F49671708365200A106A9 /* Importer.cpp in Sources */,
5339 2B7F49711708365200A106A9 /* ImporterRegistry.cpp in Sources */,
5340 2B7F49761708365200A106A9 /* ImproveCacheLocality.cpp in Sources */,
5341 2B7F49A31708365200A106A9 /* JoinVerticesProcess.cpp in Sources */,
5342 2B7F49AD1708365200A106A9 /* LimitBoneWeightsProcess.cpp in Sources */,
5343 2B7F49F81708365200A106A9 /* MakeVerboseFormat.cpp in Sources */,
5344 2B7F4A021708365200A106A9 /* MaterialSystem.cpp in Sources */,
5345 2B7F4A981708365200A106A9 /* ObjExporter.cpp in Sources */,
5346 2B7F4AA71708365200A106A9 /* ObjFileImporter.cpp in Sources */,
5347 2B7F4AB11708365200A106A9 /* ObjFileMtlImporter.cpp in Sources */,
5348 2B7F4ABB1708365200A106A9 /* ObjFileParser.cpp in Sources */,
5349 2B7F4AF21708365200A106A9 /* OptimizeGraph.cpp in Sources */,
5350 2B7F4AFC1708365200A106A9 /* OptimizeMeshes.cpp in Sources */,
5351 2B7F4B2E1708365200A106A9 /* PostStepRegistry.cpp in Sources */,
5352 2B7F4B331708365200A106A9 /* PretransformVertices.cpp in Sources */,
5353 2B7F4B3D1708365200A106A9 /* ProcessHelper.cpp in Sources */,
5354 2B7F4B8D1708365200A106A9 /* RemoveComments.cpp in Sources */,
5355 2B7F4B971708365200A106A9 /* RemoveRedundantMaterials.cpp in Sources */,
5356 2B7F4BA11708365200A106A9 /* RemoveVCProcess.cpp in Sources */,
5357 2B7F4BB01708365200A106A9 /* SceneCombiner.cpp in Sources */,
5358 2B7F4BBA1708365200A106A9 /* ScenePreprocessor.cpp in Sources */,
5359 2B7F4BC91708365200A106A9 /* SGSpatialSort.cpp in Sources */,
5360 2B7F4BD31708365200A106A9 /* SkeletonMeshBuilder.cpp in Sources */,
5361 2B7F4BEC1708365200A106A9 /* SortByPTypeProcess.cpp in Sources */,
5362 2B7F4BF61708365200A106A9 /* SpatialSort.cpp in Sources */,
5363 2B7F4C001708365200A106A9 /* SplitByBoneCountProcess.cpp in Sources */,
5364 2B7F4C0A1708365200A106A9 /* SplitLargeMeshes.cpp in Sources */,
5365 2B7F4C141708365200A106A9 /* StandardShapes.cpp in Sources */,
5366 2B7F4C281708365200A106A9 /* STEPFileEncoding.cpp in Sources */,
5367 2B7F4C321708365200A106A9 /* STEPFileReader.cpp in Sources */,
5368 2B7F4C3C1708365200A106A9 /* STLExporter.cpp in Sources */,
5369 2B7F4C461708365200A106A9 /* STLLoader.cpp in Sources */,
5370 2B7F4C5A1708365200A106A9 /* Subdivision.cpp in Sources */,
5371 2B7F4C641708365200A106A9 /* TargetAnimation.cpp in Sources */,
5372 2B7F4C781708365200A106A9 /* TextureTransform.cpp in Sources */,
5373 2B7F4C871708365200A106A9 /* TriangulateProcess.cpp in Sources */,
5374 2B7F4C9B1708365200A106A9 /* ValidateDataStructure.cpp in Sources */,
5375 2B7F4CAA1708365200A106A9 /* VertexTriangleAdjacency.cpp in Sources */,
41845376 );
41855377 runOnlyForDeploymentPostprocessing = 0;
41865378 };
41925384 F962E88C0F5DE6C8009A5495 /* 3DSLoader.cpp in Sources */,
41935385 F962E88E0F5DE6C8009A5495 /* ASELoader.cpp in Sources */,
41945386 F962E88F0F5DE6C8009A5495 /* ASEParser.cpp in Sources */,
4195 F962E8900F5DE6C8009A5495 /* Assimp.cpp in Sources */,
4196 F962E8910F5DE6C8009A5495 /* BaseImporter.cpp in Sources */,
4197 F962E8920F5DE6C8009A5495 /* CalcTangentsProcess.cpp in Sources */,
4198 F962E8930F5DE6C8009A5495 /* ConvertToLHProcess.cpp in Sources */,
4199 F962E8940F5DE6C8009A5495 /* DefaultIOStream.cpp in Sources */,
4200 F962E8950F5DE6C8009A5495 /* DefaultIOSystem.cpp in Sources */,
4201 F962E8960F5DE6C8009A5495 /* DefaultLogger.cpp in Sources */,
4202 F962E8980F5DE6C8009A5495 /* GenFaceNormalsProcess.cpp in Sources */,
4203 F962E8990F5DE6C8009A5495 /* GenVertexNormalsProcess.cpp in Sources */,
42045387 F962E89A0F5DE6C8009A5495 /* HMPLoader.cpp in Sources */,
4205 F962E89B0F5DE6C8009A5495 /* Importer.cpp in Sources */,
4206 F962E89C0F5DE6C8009A5495 /* ImproveCacheLocality.cpp in Sources */,
4207 F962E89D0F5DE6C8009A5495 /* JoinVerticesProcess.cpp in Sources */,
4208 F962E89E0F5DE6C8009A5495 /* LimitBoneWeightsProcess.cpp in Sources */,
4209 F962E89F0F5DE6C8009A5495 /* MaterialSystem.cpp in Sources */,
42105388 F962E8A00F5DE6C8009A5495 /* MD2Loader.cpp in Sources */,
42115389 F962E8A10F5DE6C8009A5495 /* MD3Loader.cpp in Sources */,
42125390 F962E8A20F5DE6C8009A5495 /* MD5Loader.cpp in Sources */,
42135391 F962E8A30F5DE6C8009A5495 /* MD5Parser.cpp in Sources */,
42145392 F962E8A40F5DE6C8009A5495 /* MDLLoader.cpp in Sources */,
42155393 F962E8A50F5DE6C8009A5495 /* MDLMaterialLoader.cpp in Sources */,
4216 F962E8A60F5DE6C8009A5495 /* ObjFileImporter.cpp in Sources */,
4217 F962E8A70F5DE6C8009A5495 /* ObjFileMtlImporter.cpp in Sources */,
4218 F962E8A80F5DE6C8009A5495 /* ObjFileParser.cpp in Sources */,
42195394 F962E8A90F5DE6C8009A5495 /* PlyLoader.cpp in Sources */,
42205395 F962E8AA0F5DE6C8009A5495 /* PlyParser.cpp in Sources */,
4221 F962E8AB0F5DE6C8009A5495 /* PretransformVertices.cpp in Sources */,
4222 F962E8AC0F5DE6C8009A5495 /* RemoveComments.cpp in Sources */,
4223 F962E8AD0F5DE6C8009A5495 /* RemoveRedundantMaterials.cpp in Sources */,
42245396 F962E8AE0F5DE6C8009A5495 /* SMDLoader.cpp in Sources */,
4225 F962E8AF0F5DE6C8009A5495 /* SpatialSort.cpp in Sources */,
4226 F962E8B00F5DE6C8009A5495 /* SplitLargeMeshes.cpp in Sources */,
4227 F962E8B10F5DE6C8009A5495 /* STLLoader.cpp in Sources */,
4228 F962E8B20F5DE6C8009A5495 /* TextureTransform.cpp in Sources */,
4229 F962E8B30F5DE6C8009A5495 /* TriangulateProcess.cpp in Sources */,
4230 F962E8B40F5DE6C8009A5495 /* ValidateDataStructure.cpp in Sources */,
4231 F962E8B50F5DE6C8009A5495 /* VertexTriangleAdjacency.cpp in Sources */,
42325397 F962E8B60F5DE6C8009A5495 /* XFileImporter.cpp in Sources */,
42335398 F962E8B70F5DE6C8009A5495 /* XFileParser.cpp in Sources */,
42345399 F962E8B80F5DE6C8009A5495 /* MDCLoader.cpp in Sources */,
4235 F962E8B90F5DE6C8009A5495 /* FixNormalsStep.cpp in Sources */,
42365400 F962E8BA0F5DE6C8009A5495 /* LWOLoader.cpp in Sources */,
4237 F962E8BB0F5DE6C8009A5495 /* BaseProcess.cpp in Sources */,
42385401 F962E8BC0F5DE6C8009A5495 /* LWOMaterial.cpp in Sources */,
42395402 F962E8BD0F5DE6C8009A5495 /* ACLoader.cpp in Sources */,
42405403 F962E8BE0F5DE6C8009A5495 /* IRRLoader.cpp in Sources */,
42415404 F962E8BF0F5DE6C8009A5495 /* IRRMeshLoader.cpp in Sources */,
42425405 F962E8C00F5DE6C8009A5495 /* IRRShared.cpp in Sources */,
4243 F962E8C10F5DE6C8009A5495 /* ColladaLoader.cpp in Sources */,
4244 F962E8C20F5DE6C8009A5495 /* ColladaParser.cpp in Sources */,
42455406 F962E8C30F5DE6C8009A5495 /* NFFLoader.cpp in Sources */,
4246 F962E8C40F5DE6C8009A5495 /* SGSpatialSort.cpp in Sources */,
42475407 F962E8C50F5DE6C8009A5495 /* Q3DLoader.cpp in Sources */,
42485408 F962E8C60F5DE6C8009A5495 /* BVHLoader.cpp in Sources */,
42495409 F962E8C70F5DE6C8009A5495 /* OFFLoader.cpp in Sources */,
42515411 F962E8C90F5DE6C8009A5495 /* DXFLoader.cpp in Sources */,
42525412 F962E8CA0F5DE6C8009A5495 /* LWOBLoader.cpp in Sources */,
42535413 F962E8CB0F5DE6C8009A5495 /* TerragenLoader.cpp in Sources */,
4254 F962E8CC0F5DE6C8009A5495 /* SceneCombiner.cpp in Sources */,
4255 F962E8CD0F5DE6C8009A5495 /* ScenePreprocessor.cpp in Sources */,
4256 F962E8CE0F5DE6C8009A5495 /* SortByPTypeProcess.cpp in Sources */,
4257 F962E8CF0F5DE6C8009A5495 /* FindDegenerates.cpp in Sources */,
4258 F962E8D00F5DE6C8009A5495 /* ComputeUVMappingProcess.cpp in Sources */,
4259 F962E8D10F5DE6C8009A5495 /* StandardShapes.cpp in Sources */,
4260 F962E8D20F5DE6C8009A5495 /* FindInstancesProcess.cpp in Sources */,
4261 F962E8D30F5DE6C8009A5495 /* RemoveVCProcess.cpp in Sources */,
4262 F962E8D40F5DE6C8009A5495 /* FindInvalidDataProcess.cpp in Sources */,
4263 F962E8D50F5DE6C8009A5495 /* SkeletonMeshBuilder.cpp in Sources */,
42645414 F962E8D70F5DE6C8009A5495 /* B3DImporter.cpp in Sources */,
42655415 7411B15611416D5E00BCD793 /* CSMLoader.cpp in Sources */,
42665416 7411B16111416DDD00BCD793 /* LWSLoader.cpp in Sources */,
42675417 7411B16B11416DF400BCD793 /* LWOAnimation.cpp in Sources */,
42685418 7411B17811416E2500BCD793 /* MS3DLoader.cpp in Sources */,
42695419 7411B19311416EBC00BCD793 /* UnrealLoader.cpp in Sources */,
4270 7411B1D611416EF400BCD793 /* OptimizeGraph.cpp in Sources */,
4271 7411B1D811416EF400BCD793 /* OptimizeMeshes.cpp in Sources */,
4272 7411B1DD11416EF400BCD793 /* Subdivision.cpp in Sources */,
4273 7411B1DF11416EF400BCD793 /* TargetAnimation.cpp in Sources */,
42745420 74C9BB5811ACBB1000AF885C /* BlenderDNA.cpp in Sources */,
42755421 74C9BB5A11ACBB1000AF885C /* BlenderLoader.cpp in Sources */,
42765422 74C9BB5C11ACBB1000AF885C /* BlenderScene.cpp in Sources */,
4277 74C9BB8411ACBB7800AF885C /* MakeVerboseFormat.cpp in Sources */,
42785423 74C9BB8E11ACBB9900AF885C /* AssimpPCH.cpp in Sources */,
42795424 74C9BB9F11ACBBBC00AF885C /* COBLoader.cpp in Sources */,
42805425 8E7ABBB7127E0F1A00512ED1 /* Q3BSPFileImporter.cpp in Sources */,
42905435 F9BA8C43154328B600E63FFE /* OgreMaterial.cpp in Sources */,
42915436 F9BA8C44154328B600E63FFE /* OgreMesh.cpp in Sources */,
42925437 F9BA8C45154328B600E63FFE /* OgreSkeleton.cpp in Sources */,
4293 F99A9ED515436125000682F3 /* DeboneProcess.cpp in Sources */,
4294 F99A9F19154361AD000682F3 /* ImporterRegistry.cpp in Sources */,
4295 F99A9F2A15436207000682F3 /* M3Importer.cpp in Sources */,
42965438 F99A9F3415436269000682F3 /* PlyExporter.cpp in Sources */,
4297 F99A9F411543629F000682F3 /* PostStepRegistry.cpp in Sources */,
4298 F99A9F4D15436304000682F3 /* SplitByBoneCountProcess.cpp in Sources */,
4299 F99A9F6015436323000682F3 /* STEPFileReader.cpp in Sources */,
4300 F9606FF4154364E5004D91DD /* ProcessHelper.cpp in Sources */,
43015439 F9607071154366AB004D91DD /* adler32.c in Sources */,
43025440 F9607072154366AB004D91DD /* compress.c in Sources */,
43035441 F9607073154366AB004D91DD /* crc32.c in Sources */,
43145452 F96070F11543675E004D91DD /* cdt.cc in Sources */,
43155453 F96070F31543675E004D91DD /* sweep.cc in Sources */,
43165454 F96070F51543675E004D91DD /* sweep_context.cc in Sources */,
4317 F97BA07A15439FC3009EB9DD /* IFCCurve.cpp in Sources */,
4318 F97BA07B15439FC3009EB9DD /* IFCGeometry.cpp in Sources */,
4319 F97BA07C15439FC3009EB9DD /* IFCLoader.cpp in Sources */,
4320 F97BA07E15439FC3009EB9DD /* IFCMaterial.cpp in Sources */,
4321 F97BA07F15439FC3009EB9DD /* IFCProfile.cpp in Sources */,
4322 F97BA08015439FC3009EB9DD /* IFCReaderGen.cpp in Sources */,
4323 F97BA08215439FC3009EB9DD /* IFCUtil.cpp in Sources */,
5455 2B7F46E31708365200A106A9 /* Assimp.cpp in Sources */,
5456 2B7F46E81708365200A106A9 /* AssimpCExport.cpp in Sources */,
5457 2B7F47011708365200A106A9 /* BaseImporter.cpp in Sources */,
5458 2B7F470B1708365200A106A9 /* BaseProcess.cpp in Sources */,
5459 2B7F47A11708365200A106A9 /* CalcTangentsProcess.cpp in Sources */,
5460 2B7F47BF1708365200A106A9 /* ColladaExporter.cpp in Sources */,
5461 2B7F47CE1708365200A106A9 /* ColladaLoader.cpp in Sources */,
5462 2B7F47D81708365200A106A9 /* ColladaParser.cpp in Sources */,
5463 2B7F47E21708365200A106A9 /* ComputeUVMappingProcess.cpp in Sources */,
5464 2B7F47EC1708365200A106A9 /* ConvertToLHProcess.cpp in Sources */,
5465 2B7F48001708365200A106A9 /* DeboneProcess.cpp in Sources */,
5466 2B7F480A1708365200A106A9 /* DefaultIOStream.cpp in Sources */,
5467 2B7F48141708365200A106A9 /* DefaultIOSystem.cpp in Sources */,
5468 2B7F481E1708365200A106A9 /* DefaultLogger.cpp in Sources */,
5469 2B7F483C1708365200A106A9 /* Exporter.cpp in Sources */,
5470 2B7F48461708365200A106A9 /* FBXAnimation.cpp in Sources */,
5471 2B7F484B1708365200A106A9 /* FBXBinaryTokenizer.cpp in Sources */,
5472 2B7F48551708365200A106A9 /* FBXConverter.cpp in Sources */,
5473 2B7F485F1708365200A106A9 /* FBXDeformer.cpp in Sources */,
5474 2B7F48641708365200A106A9 /* FBXDocument.cpp in Sources */,
5475 2B7F486E1708365200A106A9 /* FBXDocumentUtil.cpp in Sources */,
5476 2B7F48781708365200A106A9 /* FBXImporter.cpp in Sources */,
5477 2B7F48871708365200A106A9 /* FBXMaterial.cpp in Sources */,
5478 2B7F488C1708365200A106A9 /* FBXMeshGeometry.cpp in Sources */,
5479 2B7F48911708365200A106A9 /* FBXModel.cpp in Sources */,
5480 2B7F48961708365200A106A9 /* FBXNodeAttribute.cpp in Sources */,
5481 2B7F489B1708365200A106A9 /* FBXParser.cpp in Sources */,
5482 2B7F48A51708365200A106A9 /* FBXProperties.cpp in Sources */,
5483 2B7F48AF1708365200A106A9 /* FBXTokenizer.cpp in Sources */,
5484 2B7F48B91708365200A106A9 /* FBXUtil.cpp in Sources */,
5485 2B7F48CD1708365200A106A9 /* FindDegenerates.cpp in Sources */,
5486 2B7F48D71708365200A106A9 /* FindInstancesProcess.cpp in Sources */,
5487 2B7F48E11708365200A106A9 /* FindInvalidDataProcess.cpp in Sources */,
5488 2B7F48EB1708365200A106A9 /* FixNormalsStep.cpp in Sources */,
5489 2B7F48FA1708365200A106A9 /* GenFaceNormalsProcess.cpp in Sources */,
5490 2B7F49041708365200A106A9 /* GenVertexNormalsProcess.cpp in Sources */,
5491 2B7F49271708365200A106A9 /* IFCBoolean.cpp in Sources */,
5492 2B7F492C1708365200A106A9 /* IFCCurve.cpp in Sources */,
5493 2B7F49311708365200A106A9 /* IFCGeometry.cpp in Sources */,
5494 2B7F49361708365200A106A9 /* IFCLoader.cpp in Sources */,
5495 2B7F49401708365200A106A9 /* IFCMaterial.cpp in Sources */,
5496 2B7F49451708365200A106A9 /* IFCOpenings.cpp in Sources */,
5497 2B7F494A1708365200A106A9 /* IFCProfile.cpp in Sources */,
5498 2B7F494F1708365200A106A9 /* IFCReaderGen.cpp in Sources */,
5499 2B7F49591708365200A106A9 /* IFCUtil.cpp in Sources */,
5500 2B7F49681708365200A106A9 /* Importer.cpp in Sources */,
5501 2B7F49721708365200A106A9 /* ImporterRegistry.cpp in Sources */,
5502 2B7F49771708365200A106A9 /* ImproveCacheLocality.cpp in Sources */,
5503 2B7F49A41708365200A106A9 /* JoinVerticesProcess.cpp in Sources */,
5504 2B7F49AE1708365200A106A9 /* LimitBoneWeightsProcess.cpp in Sources */,
5505 2B7F49F91708365200A106A9 /* MakeVerboseFormat.cpp in Sources */,
5506 2B7F4A031708365200A106A9 /* MaterialSystem.cpp in Sources */,
5507 2B7F4A991708365200A106A9 /* ObjExporter.cpp in Sources */,
5508 2B7F4AA81708365200A106A9 /* ObjFileImporter.cpp in Sources */,
5509 2B7F4AB21708365200A106A9 /* ObjFileMtlImporter.cpp in Sources */,
5510 2B7F4ABC1708365200A106A9 /* ObjFileParser.cpp in Sources */,
5511 2B7F4AF31708365200A106A9 /* OptimizeGraph.cpp in Sources */,
5512 2B7F4AFD1708365200A106A9 /* OptimizeMeshes.cpp in Sources */,
5513 2B7F4B2F1708365200A106A9 /* PostStepRegistry.cpp in Sources */,
5514 2B7F4B341708365200A106A9 /* PretransformVertices.cpp in Sources */,
5515 2B7F4B3E1708365200A106A9 /* ProcessHelper.cpp in Sources */,
5516 2B7F4B8E1708365200A106A9 /* RemoveComments.cpp in Sources */,
5517 2B7F4B981708365200A106A9 /* RemoveRedundantMaterials.cpp in Sources */,
5518 2B7F4BA21708365200A106A9 /* RemoveVCProcess.cpp in Sources */,
5519 2B7F4BB11708365200A106A9 /* SceneCombiner.cpp in Sources */,
5520 2B7F4BBB1708365200A106A9 /* ScenePreprocessor.cpp in Sources */,
5521 2B7F4BCA1708365200A106A9 /* SGSpatialSort.cpp in Sources */,
5522 2B7F4BD41708365200A106A9 /* SkeletonMeshBuilder.cpp in Sources */,
5523 2B7F4BED1708365200A106A9 /* SortByPTypeProcess.cpp in Sources */,
5524 2B7F4BF71708365200A106A9 /* SpatialSort.cpp in Sources */,
5525 2B7F4C011708365200A106A9 /* SplitByBoneCountProcess.cpp in Sources */,
5526 2B7F4C0B1708365200A106A9 /* SplitLargeMeshes.cpp in Sources */,
5527 2B7F4C151708365200A106A9 /* StandardShapes.cpp in Sources */,
5528 2B7F4C291708365200A106A9 /* STEPFileEncoding.cpp in Sources */,
5529 2B7F4C331708365200A106A9 /* STEPFileReader.cpp in Sources */,
5530 2B7F4C3D1708365200A106A9 /* STLExporter.cpp in Sources */,
5531 2B7F4C471708365200A106A9 /* STLLoader.cpp in Sources */,
5532 2B7F4C5B1708365200A106A9 /* Subdivision.cpp in Sources */,
5533 2B7F4C651708365200A106A9 /* TargetAnimation.cpp in Sources */,
5534 2B7F4C791708365200A106A9 /* TextureTransform.cpp in Sources */,
5535 2B7F4C881708365200A106A9 /* TriangulateProcess.cpp in Sources */,
5536 2B7F4C9C1708365200A106A9 /* ValidateDataStructure.cpp in Sources */,
5537 2B7F4CAB1708365200A106A9 /* VertexTriangleAdjacency.cpp in Sources */,
43245538 );
43255539 runOnlyForDeploymentPostprocessing = 0;
43265540 };
43305544 1DEB916108733D950010E9CD /* Debug */ = {
43315545 isa = XCBuildConfiguration;
43325546 buildSettings = {
5547 COMBINE_HIDPI_IMAGES = YES;
43335548 COPY_PHASE_STRIP = NO;
43345549 DEBUG_INFORMATION_FORMAT = stabs;
43355550 EXECUTABLE_PREFIX = lib;
43365551 GCC_DYNAMIC_NO_PIC = NO;
4337 GCC_ENABLE_FIX_AND_CONTINUE = YES;
43385552 GCC_MODEL_TUNING = G5;
43395553 GCC_OPTIMIZATION_LEVEL = 0;
43405554 GCC_PREPROCESSOR_DEFINITIONS = "";
5555 GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
5556 HEADER_SEARCH_PATHS = /usr/local/include;
43415557 LD_DYLIB_INSTALL_NAME = libassimpd.dylib;
4342 LIBRARY_SEARCH_PATHS = (
4343 "$(inherited)",
4344 "\"$(SRCROOT)/../../../boost_1_35_0/bin.v2/libs/date_time/build/darwin/release/architecture-combined/macosx-version-10.4/threading-multi\"",
4345 "\"$(SRCROOT)/../../../boost_1_35_0/bin.v2/libs/thread/build/darwin/release/architecture-combined/macosx-version-10.4/threading-multi\"",
4346 );
5558 LIBRARY_SEARCH_PATHS = "$(inherited)";
43475559 PRODUCT_NAME = assimpd;
5560 SDKROOT = macosx;
5561 VALID_ARCHS = "i386 x86_64 armv7 armv6";
43485562 ZERO_LINK = YES;
43495563 };
43505564 name = Debug;
43525566 1DEB916208733D950010E9CD /* Release */ = {
43535567 isa = XCBuildConfiguration;
43545568 buildSettings = {
5569 COMBINE_HIDPI_IMAGES = YES;
43555570 DEBUG_INFORMATION_FORMAT = stabs;
43565571 EXECUTABLE_PREFIX = lib;
43575572 GCC_MODEL_TUNING = G5;
4358 LIBRARY_SEARCH_PATHS = (
4359 "$(inherited)",
4360 "\"$(SRCROOT)/../../../boost_1_35_0/bin.v2/libs/date_time/build/darwin/release/architecture-combined/macosx-version-10.4/threading-multi\"",
4361 "\"$(SRCROOT)/../../../boost_1_35_0/bin.v2/libs/thread/build/darwin/release/architecture-combined/macosx-version-10.4/threading-multi\"",
4362 );
5573 GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
5574 HEADER_SEARCH_PATHS = /usr/local/include;
5575 LIBRARY_SEARCH_PATHS = "$(inherited)";
43635576 PRODUCT_NAME = assimp;
5577 SDKROOT = macosx;
43645578 STRIP_INSTALLED_PRODUCT = YES;
43655579 STRIP_STYLE = "non-global";
5580 VALID_ARCHS = "i386 x86_64 armv7 armv6";
43665581 };
43675582 name = Release;
43685583 };
43705585 isa = XCBuildConfiguration;
43715586 buildSettings = {
43725587 ALWAYS_SEARCH_USER_PATHS = NO;
4373 ARCHS = "$(ONLY_ACTIVE_ARCH_PRE_XCODE_3_1)";
5588 ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
43745589 CONFIGURATION_BUILD_DIR = "$(SYMROOT)";
43755590 CONFIGURATION_TEMP_DIR = "$(OBJROOT)";
43765591 GCC_DEBUGGING_SYMBOLS = full;
43885603 LD_DYLIB_INSTALL_NAME = libassimp.dylib;
43895604 LIBRARY_SEARCH_PATHS = /usr/local/lib;
43905605 OBJROOT = "../../obj/$(PROJECT_NAME)_$(CONFIGURATION)_MacOSX";
4391 ONLY_ACTIVE_ARCH_PRE_XCODE_3_1 = "$(NATIVE_ARCH)";
5606 ONLY_ACTIVE_ARCH = YES;
43925607 OTHER_LDFLAGS = "";
4393 PREBINDING = NO;
43945608 SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
43955609 SYMROOT = "../../bin/$(PROJECT_NAME)_$(CONFIGURATION)_MacOSX";
4396 VALID_ARCHS = "i386 x86_64";
43975610 };
43985611 name = Debug;
43995612 };
44015614 isa = XCBuildConfiguration;
44025615 buildSettings = {
44035616 ALWAYS_SEARCH_USER_PATHS = NO;
4404 ARCHS = "$(ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1)";
4405 ARCHS_STANDARD_32_BIT_PRE_XCODE_3_1 = "ppc i386";
5617 ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
44065618 CONFIGURATION_BUILD_DIR = "$(SYMROOT)";
44075619 CONFIGURATION_TEMP_DIR = "$(OBJROOT)";
44085620 GCC_INCREASE_PRECOMPILED_HEADER_SHARING = YES;
44195631 LIBRARY_SEARCH_PATHS = /usr/local/lib;
44205632 OBJROOT = "../../obj/$(PROJECT_NAME)_$(CONFIGURATION)_MacOSX";
44215633 OTHER_LDFLAGS = "";
4422 PREBINDING = NO;
44235634 SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk";
44245635 SYMROOT = "../../bin/$(PROJECT_NAME)_$(CONFIGURATION)_MacOSX";
4425 VALID_ARCHS = "i386 x86_64";
44265636 };
44275637 name = Release;
44285638 };
44295639 745FF8FE113ECB080020C31B /* Debug */ = {
44305640 isa = XCBuildConfiguration;
44315641 buildSettings = {
5642 ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
5643 COMBINE_HIDPI_IMAGES = YES;
44325644 COPY_PHASE_STRIP = NO;
44335645 DEBUG_INFORMATION_FORMAT = stabs;
44345646 EXECUTABLE_PREFIX = lib;
44355647 GCC_DYNAMIC_NO_PIC = NO;
4436 GCC_ENABLE_FIX_AND_CONTINUE = YES;
44375648 GCC_MODEL_TUNING = G5;
44385649 GCC_OPTIMIZATION_LEVEL = 0;
44395650 GCC_PREPROCESSOR_DEFINITIONS = ASSIMP_BUILD_BOOST_WORKAROUND;
5651 GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
44405652 HEADER_SEARCH_PATHS = "${SRCROOT}/../../code/BoostWorkaround";
44415653 LD_DYLIB_INSTALL_NAME = libassimpd.dylib;
44425654 LIBRARY_SEARCH_PATHS = "$(inherited)";
44435655 PRODUCT_NAME = assimpd;
5656 SDKROOT = macosx;
5657 VALID_ARCHS = "i386 x86_64 armv6 armv7";
44445658 ZERO_LINK = YES;
44455659 };
44465660 name = Debug;
44485662 745FF8FF113ECB080020C31B /* Release */ = {
44495663 isa = XCBuildConfiguration;
44505664 buildSettings = {
5665 ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
5666 COMBINE_HIDPI_IMAGES = YES;
44515667 DEBUG_INFORMATION_FORMAT = stabs;
44525668 EXECUTABLE_PREFIX = lib;
44535669 GCC_MODEL_TUNING = G5;
44555671 NDEBUG,
44565672 ASSIMP_BUILD_BOOST_WORKAROUND,
44575673 );
5674 GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
44585675 HEADER_SEARCH_PATHS = "${SRCROOT}/../../code/BoostWorkaround";
44595676 LIBRARY_SEARCH_PATHS = "$(inherited)";
44605677 PRODUCT_NAME = assimp;
5678 SDKROOT = macosx;
44615679 STRIP_INSTALLED_PRODUCT = YES;
44625680 STRIP_STYLE = "non-global";
5681 VALID_ARCHS = "i386 x86_64 armv6 armv7";
44635682 };
44645683 name = Release;
44655684 };
44675686 isa = XCBuildConfiguration;
44685687 buildSettings = {
44695688 ALWAYS_SEARCH_USER_PATHS = NO;
5689 ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
5690 COMBINE_HIDPI_IMAGES = YES;
44705691 COPY_PHASE_STRIP = NO;
4471 DEBUG_INFORMATION_FORMAT = stabs;
44725692 GCC_DYNAMIC_NO_PIC = NO;
4473 GCC_ENABLE_FIX_AND_CONTINUE = YES;
44745693 GCC_ENABLE_SYMBOL_SEPARATION = NO;
44755694 GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
44765695 GCC_MODEL_TUNING = G5;
44775696 GCC_OPTIMIZATION_LEVEL = 0;
44785697 GCC_PREPROCESSOR_DEFINITIONS = ASSIMP_BUILD_BOOST_WORKAROUND;
5698 GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
44795699 HEADER_SEARCH_PATHS = "${SRCROOT}/../../code/BoostWorkaround";
44805700 INSTALL_PATH = /usr/local/lib;
44815701 LD_DYLIB_INSTALL_NAME = "";
4482 PREBINDING = NO;
5702 ONLY_ACTIVE_ARCH = NO;
44835703 PRODUCT_NAME = assimpd;
5704 SDKROOT = macosx;
44845705 SEPARATE_STRIP = NO;
44855706 SKIP_INSTALL = YES;
44865707 STRIP_INSTALLED_PRODUCT = NO;
5708 VALID_ARCHS = "x86_64 i386";
44875709 };
44885710 name = Debug;
44895711 };
44915713 isa = XCBuildConfiguration;
44925714 buildSettings = {
44935715 ALWAYS_SEARCH_USER_PATHS = NO;
5716 ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
5717 COMBINE_HIDPI_IMAGES = YES;
44945718 COPY_PHASE_STRIP = YES;
4495 DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
4496 GCC_ENABLE_FIX_AND_CONTINUE = NO;
44975719 GCC_ENABLE_SYMBOL_SEPARATION = NO;
44985720 GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
44995721 GCC_MODEL_TUNING = G5;
45015723 NDEBUG,
45025724 ASSIMP_BUILD_BOOST_WORKAROUND,
45035725 );
5726 GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
45045727 HEADER_SEARCH_PATHS = "${SRCROOT}/../../code/BoostWorkaround";
45055728 INSTALL_PATH = /usr/local/lib;
4506 PREBINDING = NO;
45075729 PRODUCT_NAME = assimp;
5730 SDKROOT = macosx;
45085731 SEPARATE_STRIP = NO;
45095732 SKIP_INSTALL = YES;
45105733 STRIP_INSTALLED_PRODUCT = NO;
5734 VALID_ARCHS = "x86_64 i386";
5735 ZERO_LINK = NO;
5736 };
5737 name = Release;
5738 };
5739 B919763D163AEA54009C397B /* Debug */ = {
5740 isa = XCBuildConfiguration;
5741 buildSettings = {
5742 ALWAYS_SEARCH_USER_PATHS = NO;
5743 COPY_PHASE_STRIP = NO;
5744 GCC_DYNAMIC_NO_PIC = NO;
5745 GCC_ENABLE_SYMBOL_SEPARATION = NO;
5746 GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
5747 GCC_MODEL_TUNING = G5;
5748 GCC_OPTIMIZATION_LEVEL = 0;
5749 GCC_PREPROCESSOR_DEFINITIONS = ASSIMP_BUILD_BOOST_WORKAROUND;
5750 GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
5751 HEADER_SEARCH_PATHS = "${SRCROOT}/../../code/BoostWorkaround";
5752 INSTALL_PATH = /usr/local/lib;
5753 LD_DYLIB_INSTALL_NAME = "";
5754 LIBRARY_SEARCH_PATHS = (
5755 "$(inherited)",
5756 "\"$(SYSTEM_APPS_DIR)/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/lib\"",
5757 );
5758 OBJROOT = "../../obj/$(PROJECT_NAME)_$(CONFIGURATION)_iOS";
5759 ONLY_ACTIVE_ARCH = NO;
5760 PRODUCT_NAME = "assimp-ios";
5761 SDKROOT = iphoneos;
5762 SEPARATE_STRIP = NO;
5763 SKIP_INSTALL = YES;
5764 STRIP_INSTALLED_PRODUCT = NO;
5765 SYMROOT = "../../bin/$(PROJECT_NAME)_$(CONFIGURATION)_iOS";
5766 };
5767 name = Debug;
5768 };
5769 B919763E163AEA54009C397B /* Release */ = {
5770 isa = XCBuildConfiguration;
5771 buildSettings = {
5772 ALWAYS_SEARCH_USER_PATHS = NO;
5773 COPY_PHASE_STRIP = YES;
5774 GCC_ENABLE_SYMBOL_SEPARATION = NO;
5775 GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
5776 GCC_MODEL_TUNING = G5;
5777 GCC_PREPROCESSOR_DEFINITIONS = (
5778 NDEBUG,
5779 ASSIMP_BUILD_BOOST_WORKAROUND,
5780 );
5781 GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
5782 HEADER_SEARCH_PATHS = "${SRCROOT}/../../code/BoostWorkaround";
5783 INSTALL_PATH = /usr/local/lib;
5784 LIBRARY_SEARCH_PATHS = (
5785 "$(inherited)",
5786 "\"$(SYSTEM_APPS_DIR)/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/lib\"",
5787 );
5788 OBJROOT = "../../obj/$(PROJECT_NAME)_$(CONFIGURATION)_iOS";
5789 ONLY_ACTIVE_ARCH = NO;
5790 PRODUCT_NAME = "assimp-ios";
5791 SDKROOT = iphoneos;
5792 SEPARATE_STRIP = NO;
5793 SKIP_INSTALL = YES;
5794 STRIP_INSTALLED_PRODUCT = NO;
5795 SYMROOT = "../../bin/$(PROJECT_NAME)_$(CONFIGURATION)_iOS";
45115796 ZERO_LINK = NO;
45125797 };
45135798 name = Release;
45165801 isa = XCBuildConfiguration;
45175802 buildSettings = {
45185803 ALWAYS_SEARCH_USER_PATHS = NO;
5804 ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
5805 COMBINE_HIDPI_IMAGES = YES;
45195806 COPY_PHASE_STRIP = NO;
45205807 DEBUG_INFORMATION_FORMAT = stabs;
45215808 GCC_DYNAMIC_NO_PIC = NO;
4522 GCC_ENABLE_FIX_AND_CONTINUE = YES;
45235809 GCC_ENABLE_SYMBOL_SEPARATION = NO;
45245810 GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
45255811 GCC_MODEL_TUNING = G5;
45265812 GCC_OPTIMIZATION_LEVEL = 0;
45275813 GCC_PREPROCESSOR_DEFINITIONS = "";
5814 GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
5815 HEADER_SEARCH_PATHS = /usr/local/include;
45285816 INSTALL_PATH = /usr/local/lib;
45295817 LD_DYLIB_INSTALL_NAME = "";
4530 PREBINDING = NO;
45315818 PRODUCT_NAME = assimpd;
5819 SDKROOT = macosx;
45325820 SEPARATE_STRIP = NO;
45335821 SKIP_INSTALL = YES;
45345822 STRIP_INSTALLED_PRODUCT = NO;
5823 VALID_ARCHS = "i386 x86_64 armv7 armv6";
45355824 };
45365825 name = Debug;
45375826 };
45395828 isa = XCBuildConfiguration;
45405829 buildSettings = {
45415830 ALWAYS_SEARCH_USER_PATHS = NO;
5831 ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
5832 COMBINE_HIDPI_IMAGES = YES;
45425833 COPY_PHASE_STRIP = YES;
45435834 DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
4544 GCC_ENABLE_FIX_AND_CONTINUE = NO;
45455835 GCC_ENABLE_SYMBOL_SEPARATION = NO;
45465836 GCC_INLINES_ARE_PRIVATE_EXTERN = YES;
45475837 GCC_MODEL_TUNING = G5;
5838 GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
5839 HEADER_SEARCH_PATHS = /usr/local/include;
45485840 INSTALL_PATH = /usr/local/lib;
4549 PREBINDING = NO;
45505841 PRODUCT_NAME = assimp;
5842 SDKROOT = macosx;
45515843 SEPARATE_STRIP = NO;
45525844 SKIP_INSTALL = YES;
45535845 STRIP_INSTALLED_PRODUCT = NO;
5846 VALID_ARCHS = "i386 x86_64 armv7 armv6";
45545847 ZERO_LINK = NO;
45555848 };
45565849 name = Release;
45945887 defaultConfigurationIsVisible = 0;
45955888 defaultConfigurationName = Release;
45965889 };
5890 B919763C163AEA54009C397B /* Build configuration list for PBXNativeTarget "assimp-ios-static-no-boost" */ = {
5891 isa = XCConfigurationList;
5892 buildConfigurations = (
5893 B919763D163AEA54009C397B /* Debug */,
5894 B919763E163AEA54009C397B /* Release */,
5895 );
5896 defaultConfigurationIsVisible = 0;
5897 defaultConfigurationName = Release;
5898 };
45975899 F962E8870F5DE689009A5495 /* Build configuration list for PBXNativeTarget "assimp-static" */ = {
45985900 isa = XCConfigurationList;
45995901 buildConfigurations = (
46065908 /* End XCConfigurationList section */
46075909 };
46085910 rootObject = 0867D690FE84028FC02AAC07 /* Project object */;
4609 }
5911 }