Merge branch 'master' into opengex_support
commit
063b2733fc
|
@ -48,7 +48,7 @@ set(ASSIMP_LIBRARY_SUFFIX "" CACHE STRING "Suffix to append to library names")
|
||||||
option(ASSIMP_ANDROID_JNIIOSYSTEM "Android JNI IOSystem support is active" OFF)
|
option(ASSIMP_ANDROID_JNIIOSYSTEM "Android JNI IOSystem support is active" OFF)
|
||||||
|
|
||||||
# Workaround to be able to deal with compiler bug "Too many sections" with mingw.
|
# Workaround to be able to deal with compiler bug "Too many sections" with mingw.
|
||||||
if( CMAKE_COMPILER_IS_MINGW )
|
if( CMAKE_COMPILER_IS_MINGW )
|
||||||
ADD_DEFINITIONS(-DASSIMP_BUILD_NO_IFC_IMPORTER )
|
ADD_DEFINITIONS(-DASSIMP_BUILD_NO_IFC_IMPORTER )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ SET( ASSIMP_INCLUDE_INSTALL_DIR "include" CACHE PATH
|
||||||
SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE PATH
|
SET( ASSIMP_BIN_INSTALL_DIR "bin" CACHE PATH
|
||||||
"Path the tool executables are installed to." )
|
"Path the tool executables are installed to." )
|
||||||
|
|
||||||
SET(ASSIMP_DEBUG_POSTFIX "d" CACHE STRING "Debug Postfitx for lib, samples and tools")
|
SET(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "Debug Postfitx for lib, samples and tools")
|
||||||
|
|
||||||
# Allow the user to build a shared or static library
|
# Allow the user to build a shared or static library
|
||||||
option ( BUILD_SHARED_LIBS "Build a shared version of the library" ON )
|
option ( BUILD_SHARED_LIBS "Build a shared version of the library" ON )
|
||||||
|
@ -108,7 +108,7 @@ IF ( ASSIMP_ENABLE_BOOST_WORKAROUND )
|
||||||
MESSAGE( STATUS "Building a non-boost version of Assimp." )
|
MESSAGE( STATUS "Building a non-boost version of Assimp." )
|
||||||
ELSE ( ASSIMP_ENABLE_BOOST_WORKAROUND )
|
ELSE ( ASSIMP_ENABLE_BOOST_WORKAROUND )
|
||||||
SET( Boost_DETAILED_FAILURE_MSG ON )
|
SET( Boost_DETAILED_FAILURE_MSG ON )
|
||||||
SET( Boost_ADDITIONAL_VERSIONS "1.47" "1.47.0" "1.48.0" "1.48" "1.49" "1.49.0" "1.50" "1.50.0" "1.51" "1.51.0" "1.52.0" "1.53.0" "1.54.0" "1.55" "1.55.0" "1.56" "1.56.0" "1.57" "1.57.0" )
|
SET( Boost_ADDITIONAL_VERSIONS "1.47" "1.47.0" "1.48.0" "1.48" "1.49" "1.49.0" "1.50" "1.50.0" "1.51" "1.51.0" "1.52.0" "1.53.0" "1.54.0" "1.55" "1.55.0" "1.56" "1.56.0" "1.57" "1.57.0" )
|
||||||
FIND_PACKAGE( Boost )
|
FIND_PACKAGE( Boost )
|
||||||
IF ( NOT Boost_FOUND )
|
IF ( NOT Boost_FOUND )
|
||||||
MESSAGE( FATAL_ERROR
|
MESSAGE( FATAL_ERROR
|
||||||
|
@ -165,7 +165,7 @@ IF ( ASSIMP_NO_EXPORT )
|
||||||
MESSAGE( STATUS "Build an import-only version of Assimp." )
|
MESSAGE( STATUS "Build an import-only version of Assimp." )
|
||||||
ENDIF( ASSIMP_NO_EXPORT )
|
ENDIF( ASSIMP_NO_EXPORT )
|
||||||
|
|
||||||
SET ( ASSIMP_BUILD_ARCHITECTURE "" CACHE STRING
|
SET ( ASSIMP_BUILD_ARCHITECTURE "" CACHE STRING
|
||||||
"describe the current architecture."
|
"describe the current architecture."
|
||||||
)
|
)
|
||||||
IF ( ASSIMP_BUILD_ARCHITECTURE STREQUAL "")
|
IF ( ASSIMP_BUILD_ARCHITECTURE STREQUAL "")
|
||||||
|
@ -174,7 +174,7 @@ ELSE ( ASSIMP_BUILD_ARCHITECTURE STREQUAL "")
|
||||||
ENDIF ( ASSIMP_BUILD_ARCHITECTURE STREQUAL "")
|
ENDIF ( ASSIMP_BUILD_ARCHITECTURE STREQUAL "")
|
||||||
|
|
||||||
# ${CMAKE_GENERATOR}
|
# ${CMAKE_GENERATOR}
|
||||||
SET ( ASSIMP_BUILD_COMPILER "" CACHE STRING
|
SET ( ASSIMP_BUILD_COMPILER "" CACHE STRING
|
||||||
"describe the current compiler."
|
"describe the current compiler."
|
||||||
)
|
)
|
||||||
IF ( ASSIMP_BUILD_COMPILER STREQUAL "")
|
IF ( ASSIMP_BUILD_COMPILER STREQUAL "")
|
||||||
|
@ -212,7 +212,7 @@ option ( ASSIMP_BUILD_TESTS
|
||||||
"If the test suite for Assimp is built in addition to the library."
|
"If the test suite for Assimp is built in addition to the library."
|
||||||
ON
|
ON
|
||||||
)
|
)
|
||||||
|
|
||||||
IF ( ASSIMP_BUILD_TESTS )
|
IF ( ASSIMP_BUILD_TESTS )
|
||||||
ADD_SUBDIRECTORY( test/ )
|
ADD_SUBDIRECTORY( test/ )
|
||||||
ENDIF ( ASSIMP_BUILD_TESTS )
|
ENDIF ( ASSIMP_BUILD_TESTS )
|
||||||
|
|
|
@ -40,9 +40,7 @@ set( ASSIMP_LINK_FLAGS "" )
|
||||||
set( ASSIMP_LIBRARY_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_LIB_INSTALL_DIR@")
|
set( ASSIMP_LIBRARY_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_LIB_INSTALL_DIR@")
|
||||||
set( ASSIMP_INCLUDE_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_INCLUDE_INSTALL_DIR@")
|
set( ASSIMP_INCLUDE_DIRS "${ASSIMP_ROOT_DIR}/@ASSIMP_INCLUDE_INSTALL_DIR@")
|
||||||
set( ASSIMP_LIBRARIES assimp${ASSIMP_LIBRARY_SUFFIX})
|
set( ASSIMP_LIBRARIES assimp${ASSIMP_LIBRARY_SUFFIX})
|
||||||
if (CMAKE_BUILD_TYPE EQUAL "DEBUG")
|
set( ASSIMP_LIBRARIES ${ASSIMP_LIBRARIES}@CMAKE_DEBUG_POSTFIX@)
|
||||||
set( ASSIMP_LIBRARIES ${ASSIMP_LIBRARIES}D)
|
|
||||||
endif (CMAKE_BUILD_TYPE EQUAL "DEBUG")
|
|
||||||
|
|
||||||
# search for the boost version assimp was compiled with
|
# search for the boost version assimp was compiled with
|
||||||
#set(Boost_USE_MULTITHREAD ON)
|
#set(Boost_USE_MULTITHREAD ON)
|
||||||
|
|
|
@ -205,7 +205,7 @@ SET( Collada_SRCS
|
||||||
ColladaParser.cpp
|
ColladaParser.cpp
|
||||||
ColladaParser.h
|
ColladaParser.h
|
||||||
ColladaExporter.h
|
ColladaExporter.h
|
||||||
ColladaExporter.cpp
|
ColladaExporter.cpp
|
||||||
)
|
)
|
||||||
SOURCE_GROUP( Collada FILES ${Collada_SRCS})
|
SOURCE_GROUP( Collada FILES ${Collada_SRCS})
|
||||||
|
|
||||||
|
@ -330,7 +330,7 @@ SET( Obj_SRCS
|
||||||
ObjFileParser.cpp
|
ObjFileParser.cpp
|
||||||
ObjFileParser.h
|
ObjFileParser.h
|
||||||
ObjTools.h
|
ObjTools.h
|
||||||
|
|
||||||
ObjExporter.h
|
ObjExporter.h
|
||||||
ObjExporter.cpp
|
ObjExporter.cpp
|
||||||
)
|
)
|
||||||
|
@ -603,14 +603,14 @@ SET( ConvertUTF_SRCS
|
||||||
)
|
)
|
||||||
SOURCE_GROUP( ConvertUTF FILES ${ConvertUTF_SRCS})
|
SOURCE_GROUP( ConvertUTF FILES ${ConvertUTF_SRCS})
|
||||||
|
|
||||||
SET( Clipper_SRCS
|
SET( Clipper_SRCS
|
||||||
../contrib/clipper/clipper.hpp
|
../contrib/clipper/clipper.hpp
|
||||||
../contrib/clipper/clipper.cpp
|
../contrib/clipper/clipper.cpp
|
||||||
)
|
)
|
||||||
SOURCE_GROUP( Clipper FILES ${Clipper_SRCS})
|
SOURCE_GROUP( Clipper FILES ${Clipper_SRCS})
|
||||||
|
|
||||||
|
|
||||||
SET( Poly2Tri_SRCS
|
SET( Poly2Tri_SRCS
|
||||||
../contrib/poly2tri/poly2tri/common/shapes.cc
|
../contrib/poly2tri/poly2tri/common/shapes.cc
|
||||||
../contrib/poly2tri/poly2tri/common/shapes.h
|
../contrib/poly2tri/poly2tri/common/shapes.h
|
||||||
../contrib/poly2tri/poly2tri/common/utils.h
|
../contrib/poly2tri/poly2tri/common/utils.h
|
||||||
|
@ -706,7 +706,7 @@ SET( assimp_src
|
||||||
${IFC_SRCS}
|
${IFC_SRCS}
|
||||||
${XGL_SRCS}
|
${XGL_SRCS}
|
||||||
${FBX_SRCS}
|
${FBX_SRCS}
|
||||||
|
|
||||||
# Third-party libraries
|
# Third-party libraries
|
||||||
${IrrXML_SRCS}
|
${IrrXML_SRCS}
|
||||||
${ConvertUTF_SRCS}
|
${ConvertUTF_SRCS}
|
||||||
|
@ -718,7 +718,7 @@ SET( assimp_src
|
||||||
|
|
||||||
${PUBLIC_HEADERS}
|
${PUBLIC_HEADERS}
|
||||||
${COMPILER_HEADERS}
|
${COMPILER_HEADERS}
|
||||||
|
|
||||||
# Old precompiled header
|
# Old precompiled header
|
||||||
# (removed because the precompiled header is not updated when visual studio switch configuration which leads to failed compilation.
|
# (removed because the precompiled header is not updated when visual studio switch configuration which leads to failed compilation.
|
||||||
# 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.)
|
# 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.)
|
||||||
|
@ -729,8 +729,6 @@ SET( assimp_src
|
||||||
|
|
||||||
ADD_LIBRARY( assimp ${assimp_src} )
|
ADD_LIBRARY( assimp ${assimp_src} )
|
||||||
|
|
||||||
SET_PROPERTY(TARGET assimp PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX})
|
|
||||||
|
|
||||||
TARGET_LINK_LIBRARIES(assimp ${ZLIB_LIBRARIES})
|
TARGET_LINK_LIBRARIES(assimp ${ZLIB_LIBRARIES})
|
||||||
|
|
||||||
if(ANDROID AND ASSIMP_ANDROID_JNIIOSYSTEM)
|
if(ANDROID AND ASSIMP_ANDROID_JNIIOSYSTEM)
|
||||||
|
@ -739,10 +737,24 @@ if(ANDROID AND ASSIMP_ANDROID_JNIIOSYSTEM)
|
||||||
target_link_libraries(assimp android_jniiosystem)
|
target_link_libraries(assimp android_jniiosystem)
|
||||||
endif(ANDROID AND ASSIMP_ANDROID_JNIIOSYSTEM)
|
endif(ANDROID AND ASSIMP_ANDROID_JNIIOSYSTEM)
|
||||||
|
|
||||||
|
if( MSVC )
|
||||||
|
# in order to prevent DLL hell, each of the DLLs have to be suffixed with the major version and msvc prefix
|
||||||
|
if( MSVC70 OR MSVC71 )
|
||||||
|
set(MSVC_PREFIX "vc70")
|
||||||
|
elseif( MSVC80 )
|
||||||
|
set(MSVC_PREFIX "vc80")
|
||||||
|
elseif( MSVC90 )
|
||||||
|
set(MSVC_PREFIX "vc90")
|
||||||
|
else()
|
||||||
|
set(MSVC_PREFIX "vc100")
|
||||||
|
endif()
|
||||||
|
set(LIBRARY_SUFFIX "${ASSIMP_LIBRARY_SUFFIX}-${MSVC_PREFIX}-mt" CACHE STRING "the suffix for the assimp windows library" FORCE)
|
||||||
|
endif()
|
||||||
|
|
||||||
SET_TARGET_PROPERTIES( assimp PROPERTIES
|
SET_TARGET_PROPERTIES( assimp PROPERTIES
|
||||||
VERSION ${ASSIMP_VERSION}
|
VERSION ${ASSIMP_VERSION}
|
||||||
SOVERSION ${ASSIMP_SOVERSION} # use full version
|
SOVERSION ${ASSIMP_SOVERSION} # use full version
|
||||||
OUTPUT_NAME assimp${ASSIMP_LIBRARY_SUFFIX}
|
OUTPUT_NAME assimp${LIBRARY_SUFFIX}
|
||||||
)
|
)
|
||||||
|
|
||||||
if (APPLE)
|
if (APPLE)
|
||||||
|
@ -772,7 +784,7 @@ if (ASSIMP_ANDROID_JNIIOSYSTEM)
|
||||||
endif(ASSIMP_ANDROID_JNIIOSYSTEM)
|
endif(ASSIMP_ANDROID_JNIIOSYSTEM)
|
||||||
|
|
||||||
if(MSVC AND ASSIMP_INSTALL_PDB)
|
if(MSVC AND ASSIMP_INSTALL_PDB)
|
||||||
install(FILES ${Assimp_BINARY_DIR}/code/Debug/assimp${ASSIMP_DEBUG_POSTFIX}.pdb
|
install(FILES ${Assimp_BINARY_DIR}/code/Debug/assimp${CMAKE_DEBUG_POSTFIX}.pdb
|
||||||
DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
|
DESTINATION ${ASSIMP_LIB_INSTALL_DIR}
|
||||||
CONFIGURATIONS Debug
|
CONFIGURATIONS Debug
|
||||||
)
|
)
|
||||||
|
|
|
@ -985,6 +985,47 @@ void ColladaLoader::CreateAnimation( aiScene* pScene, const ColladaParser& pPars
|
||||||
entry.mTransformId = srcChannel.mTarget.substr( slashPos+1);
|
entry.mTransformId = srcChannel.mTarget.substr( slashPos+1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string::size_type bracketPos = srcChannel.mTarget.find('(');
|
||||||
|
if (bracketPos != std::string::npos)
|
||||||
|
{
|
||||||
|
entry.mTransformId = srcChannel.mTarget.substr(slashPos + 1, bracketPos - slashPos - 1);
|
||||||
|
std::string subElement = srcChannel.mTarget.substr(bracketPos);
|
||||||
|
|
||||||
|
if (subElement == "(0)(0)")
|
||||||
|
entry.mSubElement = 0;
|
||||||
|
else if (subElement == "(1)(0)")
|
||||||
|
entry.mSubElement = 1;
|
||||||
|
else if (subElement == "(2)(0)")
|
||||||
|
entry.mSubElement = 2;
|
||||||
|
else if (subElement == "(3)(0)")
|
||||||
|
entry.mSubElement = 3;
|
||||||
|
else if (subElement == "(0)(1)")
|
||||||
|
entry.mSubElement = 4;
|
||||||
|
else if (subElement == "(1)(1)")
|
||||||
|
entry.mSubElement = 5;
|
||||||
|
else if (subElement == "(2)(1)")
|
||||||
|
entry.mSubElement = 6;
|
||||||
|
else if (subElement == "(3)(1)")
|
||||||
|
entry.mSubElement = 7;
|
||||||
|
else if (subElement == "(0)(2)")
|
||||||
|
entry.mSubElement = 8;
|
||||||
|
else if (subElement == "(1)(2)")
|
||||||
|
entry.mSubElement = 9;
|
||||||
|
else if (subElement == "(2)(2)")
|
||||||
|
entry.mSubElement = 10;
|
||||||
|
else if (subElement == "(3)(2)")
|
||||||
|
entry.mSubElement = 11;
|
||||||
|
else if (subElement == "(0)(3)")
|
||||||
|
entry.mSubElement = 12;
|
||||||
|
else if (subElement == "(1)(3)")
|
||||||
|
entry.mSubElement = 13;
|
||||||
|
else if (subElement == "(2)(3)")
|
||||||
|
entry.mSubElement = 14;
|
||||||
|
else if (subElement == "(3)(3)")
|
||||||
|
entry.mSubElement = 15;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// determine which transform step is affected by this channel
|
// determine which transform step is affected by this channel
|
||||||
entry.mTransformIndex = SIZE_MAX;
|
entry.mTransformIndex = SIZE_MAX;
|
||||||
for( size_t a = 0; a < srcNode->mTransforms.size(); ++a)
|
for( size_t a = 0; a < srcNode->mTransforms.size(); ++a)
|
||||||
|
|
|
@ -549,7 +549,9 @@ void ReadBinaryDataArray(char type, uint32_t count, const char*& data, const cha
|
||||||
zstream.data_type = Z_BINARY;
|
zstream.data_type = Z_BINARY;
|
||||||
|
|
||||||
// http://hewgill.com/journal/entries/349-how-to-decompress-gzip-stream-with-zlib
|
// http://hewgill.com/journal/entries/349-how-to-decompress-gzip-stream-with-zlib
|
||||||
inflateInit(&zstream);
|
if(Z_OK != inflateInit(&zstream)) {
|
||||||
|
ParseError("failure initializing zlib");
|
||||||
|
}
|
||||||
|
|
||||||
zstream.next_in = reinterpret_cast<Bytef*>( const_cast<char*>(data) );
|
zstream.next_in = reinterpret_cast<Bytef*>( const_cast<char*>(data) );
|
||||||
zstream.avail_in = comp_len;
|
zstream.avail_in = comp_len;
|
||||||
|
|
|
@ -91,7 +91,7 @@ public:
|
||||||
a = std::fmod(a,static_cast<IfcFloat>( AI_MATH_TWO_PI ));
|
a = std::fmod(a,static_cast<IfcFloat>( AI_MATH_TWO_PI ));
|
||||||
b = std::fmod(b,static_cast<IfcFloat>( AI_MATH_TWO_PI ));
|
b = std::fmod(b,static_cast<IfcFloat>( AI_MATH_TWO_PI ));
|
||||||
const IfcFloat setting = static_cast<IfcFloat>( AI_MATH_PI * conv.settings.conicSamplingAngle / 180.0 );
|
const IfcFloat setting = static_cast<IfcFloat>( AI_MATH_PI * conv.settings.conicSamplingAngle / 180.0 );
|
||||||
return static_cast<size_t>( std::ceil(abs( b-a)) / setting);
|
return static_cast<size_t>( std::ceil(std::abs( b-a)) / setting);
|
||||||
}
|
}
|
||||||
|
|
||||||
// --------------------------------------------------
|
// --------------------------------------------------
|
||||||
|
@ -276,7 +276,7 @@ public:
|
||||||
IfcFloat acc = 0;
|
IfcFloat acc = 0;
|
||||||
BOOST_FOREACH(const CurveEntry& entry, curves) {
|
BOOST_FOREACH(const CurveEntry& entry, curves) {
|
||||||
const ParamRange& range = entry.first->GetParametricRange();
|
const ParamRange& range = entry.first->GetParametricRange();
|
||||||
const IfcFloat delta = abs(range.second-range.first);
|
const IfcFloat delta = std::abs(range.second-range.first);
|
||||||
if (u < acc+delta) {
|
if (u < acc+delta) {
|
||||||
return entry.first->Eval( entry.second ? (u-acc) + range.first : range.second-(u-acc));
|
return entry.first->Eval( entry.second ? (u-acc) + range.first : range.second-(u-acc));
|
||||||
}
|
}
|
||||||
|
@ -295,7 +295,7 @@ public:
|
||||||
IfcFloat acc = 0;
|
IfcFloat acc = 0;
|
||||||
BOOST_FOREACH(const CurveEntry& entry, curves) {
|
BOOST_FOREACH(const CurveEntry& entry, curves) {
|
||||||
const ParamRange& range = entry.first->GetParametricRange();
|
const ParamRange& range = entry.first->GetParametricRange();
|
||||||
const IfcFloat delta = abs(range.second-range.first);
|
const IfcFloat delta = std::abs(range.second-range.first);
|
||||||
if (a <= acc+delta && b >= acc) {
|
if (a <= acc+delta && b >= acc) {
|
||||||
const IfcFloat at = std::max(static_cast<IfcFloat>( 0. ),a-acc), bt = std::min(delta,b-acc);
|
const IfcFloat at = std::max(static_cast<IfcFloat>( 0. ),a-acc), bt = std::min(delta,b-acc);
|
||||||
cnt += entry.first->EstimateSampleCount( entry.second ? at + range.first : range.second - bt, entry.second ? bt + range.first : range.second - at );
|
cnt += entry.first->EstimateSampleCount( entry.second ? at + range.first : range.second - bt, entry.second ? bt + range.first : range.second - at );
|
||||||
|
@ -569,7 +569,7 @@ bool Curve :: InRange(IfcFloat u) const
|
||||||
IfcFloat Curve :: GetParametricRangeDelta() const
|
IfcFloat Curve :: GetParametricRangeDelta() const
|
||||||
{
|
{
|
||||||
const ParamRange& range = GetParametricRange();
|
const ParamRange& range = GetParametricRange();
|
||||||
return abs(range.second - range.first);
|
return std::abs(range.second - range.first);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
|
|
@ -375,21 +375,21 @@ void ProcessSweptDiskSolid(const IfcSweptDiskSolid solid, TempMesh& result, Conv
|
||||||
bool take_any = false;
|
bool take_any = false;
|
||||||
|
|
||||||
for (unsigned int i = 0; i < 2; ++i, take_any = true) {
|
for (unsigned int i = 0; i < 2; ++i, take_any = true) {
|
||||||
if ((last_dir == 0 || take_any) && abs(d.x) > 1e-6) {
|
if ((last_dir == 0 || take_any) && std::abs(d.x) > 1e-6) {
|
||||||
q.y = startvec.y;
|
q.y = startvec.y;
|
||||||
q.z = startvec.z;
|
q.z = startvec.z;
|
||||||
q.x = -(d.y * q.y + d.z * q.z) / d.x;
|
q.x = -(d.y * q.y + d.z * q.z) / d.x;
|
||||||
last_dir = 0;
|
last_dir = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if ((last_dir == 1 || take_any) && abs(d.y) > 1e-6) {
|
else if ((last_dir == 1 || take_any) && std::abs(d.y) > 1e-6) {
|
||||||
q.x = startvec.x;
|
q.x = startvec.x;
|
||||||
q.z = startvec.z;
|
q.z = startvec.z;
|
||||||
q.y = -(d.x * q.x + d.z * q.z) / d.y;
|
q.y = -(d.x * q.x + d.z * q.z) / d.y;
|
||||||
last_dir = 1;
|
last_dir = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if ((last_dir == 2 && abs(d.z) > 1e-6) || take_any) {
|
else if ((last_dir == 2 && std::abs(d.z) > 1e-6) || take_any) {
|
||||||
q.y = startvec.y;
|
q.y = startvec.y;
|
||||||
q.x = startvec.x;
|
q.x = startvec.x;
|
||||||
q.z = -(d.y * q.y + d.x * q.x) / d.z;
|
q.z = -(d.y * q.y + d.x * q.x) / d.z;
|
||||||
|
|
|
@ -1244,7 +1244,7 @@ bool GenerateOpenings(std::vector<TempOpening>& openings,
|
||||||
const IfcVector3& face_nor = ((profile_verts[vi_total+2] - profile_verts[vi_total]) ^
|
const IfcVector3& face_nor = ((profile_verts[vi_total+2] - profile_verts[vi_total]) ^
|
||||||
(profile_verts[vi_total+1] - profile_verts[vi_total])).Normalize();
|
(profile_verts[vi_total+1] - profile_verts[vi_total])).Normalize();
|
||||||
|
|
||||||
const IfcFloat abs_dot_face_nor = abs(nor * face_nor);
|
const IfcFloat abs_dot_face_nor = std::abs(nor * face_nor);
|
||||||
if (abs_dot_face_nor < 0.9) {
|
if (abs_dot_face_nor < 0.9) {
|
||||||
vi_total += profile_vertcnts[f];
|
vi_total += profile_vertcnts[f];
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -50,6 +50,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
#if defined(_MSC_VER) && (_MSC_VER <= 1500)
|
#if defined(_MSC_VER) && (_MSC_VER <= 1500)
|
||||||
#include "Compiler/pstdint.h"
|
#include "Compiler/pstdint.h"
|
||||||
#else
|
#else
|
||||||
|
#include <limits.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -273,11 +273,10 @@ template<typename TReal>
|
||||||
inline aiVector3t<TReal> aiQuaterniont<TReal>::Rotate (const aiVector3t<TReal>& v)
|
inline aiVector3t<TReal> aiQuaterniont<TReal>::Rotate (const aiVector3t<TReal>& v)
|
||||||
{
|
{
|
||||||
aiQuaterniont q2(0.f,v.x,v.y,v.z), q = *this, qinv = q;
|
aiQuaterniont q2(0.f,v.x,v.y,v.z), q = *this, qinv = q;
|
||||||
q.Conjugate();
|
qinv.Conjugate();
|
||||||
|
|
||||||
q = q*q2*qinv;
|
q = q*q2*qinv;
|
||||||
return aiVector3t<TReal>(q.x,q.y,q.z);
|
return aiVector3t<TReal>(q.x,q.y,q.z);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
#-*- coding: UTF-8 -*-
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
PyAssimp
|
PyAssimp
|
||||||
|
|
||||||
|
@ -21,37 +19,31 @@ logger = logging.getLogger("pyassimp")
|
||||||
logger.addHandler(logging.NullHandler())
|
logger.addHandler(logging.NullHandler())
|
||||||
|
|
||||||
from . import structs
|
from . import structs
|
||||||
from .errors import AssimpError
|
|
||||||
from . import helper
|
from . import helper
|
||||||
|
from . import postprocess
|
||||||
|
from .errors import AssimpError
|
||||||
|
from .formats import available_formats
|
||||||
|
|
||||||
assimp_structs_as_tuple = (
|
class AssimpLib(object):
|
||||||
structs.Matrix4x4,
|
"""
|
||||||
structs.Matrix3x3,
|
Assimp-Singleton
|
||||||
structs.Vector2D,
|
"""
|
||||||
structs.Vector3D,
|
load, load_mem, release, dll = helper.search_library()
|
||||||
structs.Color3D,
|
_assimp_lib = AssimpLib()
|
||||||
structs.Color4D,
|
|
||||||
structs.Quaternion,
|
|
||||||
structs.Plane,
|
|
||||||
structs.Texel)
|
|
||||||
|
|
||||||
def make_tuple(ai_obj, type = None):
|
def make_tuple(ai_obj, type = None):
|
||||||
res = None
|
res = None
|
||||||
|
|
||||||
if isinstance(ai_obj, structs.Matrix4x4):
|
if isinstance(ai_obj, structs.Matrix4x4):
|
||||||
res = numpy.array([getattr(ai_obj, e[0]) for e in ai_obj._fields_]).reshape((4,4))
|
res = numpy.array([getattr(ai_obj, e[0]) for e in ai_obj._fields_]).reshape((4,4))
|
||||||
#import pdb;pdb.set_trace()
|
|
||||||
elif isinstance(ai_obj, structs.Matrix3x3):
|
elif isinstance(ai_obj, structs.Matrix3x3):
|
||||||
res = numpy.array([getattr(ai_obj, e[0]) for e in ai_obj._fields_]).reshape((3,3))
|
res = numpy.array([getattr(ai_obj, e[0]) for e in ai_obj._fields_]).reshape((3,3))
|
||||||
else:
|
else:
|
||||||
res = numpy.array([getattr(ai_obj, e[0]) for e in ai_obj._fields_])
|
res = numpy.array([getattr(ai_obj, e[0]) for e in ai_obj._fields_])
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
# It is faster and more correct to have an init function for each assimp class
|
# It is faster and more correct to have an init function for each assimp class
|
||||||
def _init_face(aiFace):
|
def _init_face(aiFace):
|
||||||
aiFace.indices = [aiFace.mIndices[i] for i in range(aiFace.mNumIndices)]
|
aiFace.indices = [aiFace.mIndices[i] for i in range(aiFace.mNumIndices)]
|
||||||
|
|
||||||
assimp_struct_inits = { structs.Face : _init_face }
|
assimp_struct_inits = { structs.Face : _init_face }
|
||||||
|
|
||||||
def call_init(obj, caller = None):
|
def call_init(obj, caller = None):
|
||||||
|
@ -112,7 +104,7 @@ def _init(self, target = None, parent = None):
|
||||||
obj = getattr(self, m)
|
obj = getattr(self, m)
|
||||||
|
|
||||||
# Create tuples
|
# Create tuples
|
||||||
if isinstance(obj, assimp_structs_as_tuple):
|
if isinstance(obj, structs.assimp_structs_as_tuple):
|
||||||
setattr(target, name, make_tuple(obj))
|
setattr(target, name, make_tuple(obj))
|
||||||
logger.debug(str(self) + ": Added array " + str(getattr(target, name)) + " as self." + name.lower())
|
logger.debug(str(self) + ": Added array " + str(getattr(target, name)) + " as self." + name.lower())
|
||||||
continue
|
continue
|
||||||
|
@ -142,7 +134,7 @@ def _init(self, target = None, parent = None):
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if obj._type_ in assimp_structs_as_tuple:
|
if obj._type_ in structs.assimp_structs_as_tuple:
|
||||||
setattr(target, name, numpy.array([make_tuple(obj[i]) for i in range(length)], dtype=numpy.float32))
|
setattr(target, name, numpy.array([make_tuple(obj[i]) for i in range(length)], dtype=numpy.float32))
|
||||||
|
|
||||||
logger.debug(str(self) + ": Added an array of numpy arrays (type "+ str(type(obj)) + ") as self." + name)
|
logger.debug(str(self) + ": Added an array of numpy arrays (type "+ str(type(obj)) + ") as self." + name)
|
||||||
|
@ -178,19 +170,16 @@ def _init(self, target = None, parent = None):
|
||||||
" a post-processing to triangulate your"
|
" a post-processing to triangulate your"
|
||||||
" faces.")
|
" faces.")
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
else: # starts with 'm' but not iterable
|
else: # starts with 'm' but not iterable
|
||||||
|
|
||||||
setattr(target, name, obj)
|
setattr(target, name, obj)
|
||||||
logger.debug("Added " + name + " as self." + name + " (type: " + str(type(obj)) + ")")
|
logger.debug("Added " + name + " as self." + name + " (type: " + str(type(obj)) + ")")
|
||||||
|
|
||||||
if _is_init_type(obj):
|
if _is_init_type(obj):
|
||||||
call_init(obj, target)
|
call_init(obj, target)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if isinstance(self, structs.Mesh):
|
if isinstance(self, structs.Mesh):
|
||||||
_finalize_mesh(self, target)
|
_finalize_mesh(self, target)
|
||||||
|
|
||||||
|
@ -200,14 +189,6 @@ def _init(self, target = None, parent = None):
|
||||||
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
class AssimpLib(object):
|
|
||||||
"""
|
|
||||||
Assimp-Singleton
|
|
||||||
"""
|
|
||||||
load, load_mem, release, dll = helper.search_library()
|
|
||||||
|
|
||||||
#the loader as singleton
|
|
||||||
_assimp_lib = AssimpLib()
|
|
||||||
|
|
||||||
def pythonize_assimp(type, obj, scene):
|
def pythonize_assimp(type, obj, scene):
|
||||||
""" This method modify the Assimp data structures
|
""" This method modify the Assimp data structures
|
||||||
|
@ -247,17 +228,16 @@ def recur_pythonize(node, scene):
|
||||||
pythonize the assimp datastructures.
|
pythonize the assimp datastructures.
|
||||||
'''
|
'''
|
||||||
node.meshes = pythonize_assimp("MESH", node.meshes, scene)
|
node.meshes = pythonize_assimp("MESH", node.meshes, scene)
|
||||||
|
|
||||||
for mesh in node.meshes:
|
for mesh in node.meshes:
|
||||||
mesh.material = scene.materials[mesh.materialindex]
|
mesh.material = scene.materials[mesh.materialindex]
|
||||||
|
|
||||||
for cam in scene.cameras:
|
for cam in scene.cameras:
|
||||||
pythonize_assimp("ADDTRANSFORMATION", cam, scene)
|
pythonize_assimp("ADDTRANSFORMATION", cam, scene)
|
||||||
|
|
||||||
for c in node.children:
|
for c in node.children:
|
||||||
recur_pythonize(c, scene)
|
recur_pythonize(c, scene)
|
||||||
|
|
||||||
def load(filename, processing=0, file_type=None):
|
def load(filename,
|
||||||
|
file_type = None,
|
||||||
|
processing = postprocess.aiProcess_Triangulate):
|
||||||
'''
|
'''
|
||||||
Load a model into a scene. On failure throws AssimpError.
|
Load a model into a scene. On failure throws AssimpError.
|
||||||
|
|
||||||
|
@ -267,12 +247,17 @@ def load(filename, processing=0, file_type=None):
|
||||||
If a file object is passed, file_type MUST be specified
|
If a file object is passed, file_type MUST be specified
|
||||||
Otherwise Assimp has no idea which importer to use.
|
Otherwise Assimp has no idea which importer to use.
|
||||||
This is named 'filename' so as to not break legacy code.
|
This is named 'filename' so as to not break legacy code.
|
||||||
processing: assimp processing parameters
|
processing: assimp postprocessing parameters. Verbose keywords are imported
|
||||||
file_type: string, such as 'stl'
|
from postprocessing, and the parameters can be combined bitwise to
|
||||||
|
generate the final processing value. Note that the default value will
|
||||||
|
triangulate quad faces. Example of generating other possible values:
|
||||||
|
processing = (pyassimp.postprocess.aiProcess_Triangulate |
|
||||||
|
pyassimp.postprocess.aiProcess_OptimizeMeshes)
|
||||||
|
file_type: string of file extension, such as 'stl'
|
||||||
|
|
||||||
Returns
|
Returns
|
||||||
---------
|
---------
|
||||||
Scene object with model-data
|
Scene object with model data
|
||||||
'''
|
'''
|
||||||
|
|
||||||
if hasattr(filename, 'read'):
|
if hasattr(filename, 'read'):
|
||||||
|
|
|
@ -0,0 +1,41 @@
|
||||||
|
FORMATS = ["CSM",
|
||||||
|
"LWS",
|
||||||
|
"B3D",
|
||||||
|
"COB",
|
||||||
|
"PLY",
|
||||||
|
"IFC",
|
||||||
|
"OFF",
|
||||||
|
"SMD",
|
||||||
|
"IRRMESH",
|
||||||
|
"3D",
|
||||||
|
"DAE",
|
||||||
|
"MDL",
|
||||||
|
"HMP",
|
||||||
|
"TER",
|
||||||
|
"WRL",
|
||||||
|
"XML",
|
||||||
|
"NFF",
|
||||||
|
"AC",
|
||||||
|
"OBJ",
|
||||||
|
"3DS",
|
||||||
|
"STL",
|
||||||
|
"IRR",
|
||||||
|
"Q3O",
|
||||||
|
"Q3D"
|
||||||
|
"MS3D",
|
||||||
|
"Q3S",
|
||||||
|
"ZGL",
|
||||||
|
"MD2",
|
||||||
|
"X",
|
||||||
|
"BLEND",
|
||||||
|
"XGL",
|
||||||
|
"MD5MESH",
|
||||||
|
"MAX",
|
||||||
|
"LXO",
|
||||||
|
"DXF",
|
||||||
|
"BVH",
|
||||||
|
"LWO",
|
||||||
|
"NDO"]
|
||||||
|
|
||||||
|
def available_formats():
|
||||||
|
return FORMATS
|
|
@ -897,3 +897,13 @@ class Scene(Structure):
|
||||||
# the scene.
|
# the scene.
|
||||||
("mCameras", POINTER(POINTER(Camera))),
|
("mCameras", POINTER(POINTER(Camera))),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
assimp_structs_as_tuple = (Matrix4x4,
|
||||||
|
Matrix3x3,
|
||||||
|
Vector2D,
|
||||||
|
Vector3D,
|
||||||
|
Color3D,
|
||||||
|
Color4D,
|
||||||
|
Quaternion,
|
||||||
|
Plane,
|
||||||
|
Texel)
|
||||||
|
|
|
@ -19,16 +19,16 @@ INCLUDE_DIRECTORIES(
|
||||||
${GLUT_INCLUDE_DIR}
|
${GLUT_INCLUDE_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
LINK_DIRECTORIES(
|
LINK_DIRECTORIES(
|
||||||
${Assimp_BINARY_DIR}
|
${Assimp_BINARY_DIR}
|
||||||
${Assimp_BINARY_DIR}/lib
|
${Assimp_BINARY_DIR}/lib
|
||||||
)
|
)
|
||||||
|
|
||||||
ADD_EXECUTABLE( assimp_simpleogl
|
ADD_EXECUTABLE( assimp_simpleogl
|
||||||
Sample_SimpleOpenGL.c
|
Sample_SimpleOpenGL.c
|
||||||
)
|
)
|
||||||
|
|
||||||
SET_PROPERTY(TARGET assimp_simpleogl PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX})
|
SET_PROPERTY(TARGET assimp_simpleogl PROPERTY DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})
|
||||||
|
|
||||||
TARGET_LINK_LIBRARIES( assimp_simpleogl assimp ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} ${M_LIB} )
|
TARGET_LINK_LIBRARIES( assimp_simpleogl assimp ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} ${M_LIB} )
|
||||||
SET_TARGET_PROPERTIES( assimp_simpleogl PROPERTIES
|
SET_TARGET_PROPERTIES( assimp_simpleogl PROPERTIES
|
||||||
|
@ -37,4 +37,4 @@ SET_TARGET_PROPERTIES( assimp_simpleogl PROPERTIES
|
||||||
|
|
||||||
INSTALL( TARGETS assimp_simpleogl
|
INSTALL( TARGETS assimp_simpleogl
|
||||||
DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-dev
|
DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-dev
|
||||||
)
|
)
|
||||||
|
|
|
@ -19,8 +19,8 @@ INCLUDE_DIRECTORIES(
|
||||||
${Assimp_SOURCE_DIR}/samples/DevIL/include/
|
${Assimp_SOURCE_DIR}/samples/DevIL/include/
|
||||||
)
|
)
|
||||||
|
|
||||||
LINK_DIRECTORIES(
|
LINK_DIRECTORIES(
|
||||||
${Assimp_BINARY_DIR}
|
${Assimp_BINARY_DIR}
|
||||||
${Assimp_BINARY_DIR}/lib/
|
${Assimp_BINARY_DIR}/lib/
|
||||||
${Assimp_SOURCE_DIR}/samples/DevIL/lib/
|
${Assimp_SOURCE_DIR}/samples/DevIL/lib/
|
||||||
)
|
)
|
||||||
|
@ -30,7 +30,7 @@ ADD_EXECUTABLE( assimp_simpletexturedogl WIN32
|
||||||
SimpleTexturedOpenGL/src/model_loading.cpp
|
SimpleTexturedOpenGL/src/model_loading.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
SET_PROPERTY(TARGET assimp_simpletexturedogl PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX})
|
SET_PROPERTY(TARGET assimp_simpletexturedogl PROPERTY DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})
|
||||||
|
|
||||||
TARGET_LINK_LIBRARIES( assimp_simpletexturedogl assimp ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} DevIL.lib )
|
TARGET_LINK_LIBRARIES( assimp_simpletexturedogl assimp ${OPENGL_LIBRARIES} ${GLUT_LIBRARIES} DevIL.lib )
|
||||||
|
|
||||||
|
@ -40,4 +40,4 @@ SET_TARGET_PROPERTIES( assimp_simpletexturedogl PROPERTIES
|
||||||
|
|
||||||
INSTALL( TARGETS assimp_simpletexturedogl
|
INSTALL( TARGETS assimp_simpletexturedogl
|
||||||
DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-dev
|
DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-dev
|
||||||
)
|
)
|
||||||
|
|
|
@ -52,7 +52,7 @@ add_executable( unit
|
||||||
${TEST_SRCS}
|
${TEST_SRCS}
|
||||||
)
|
)
|
||||||
|
|
||||||
SET_PROPERTY( TARGET assimp PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX} )
|
SET_PROPERTY( TARGET assimp PROPERTY DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX} )
|
||||||
|
|
||||||
add_dependencies( unit gtest )
|
add_dependencies( unit gtest )
|
||||||
target_link_libraries( unit assimp
|
target_link_libraries( unit assimp
|
||||||
|
|
|
@ -19,7 +19,7 @@ ADD_EXECUTABLE( assimp_cmd
|
||||||
Export.cpp
|
Export.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
SET_PROPERTY(TARGET assimp_cmd PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX})
|
SET_PROPERTY(TARGET assimp_cmd PROPERTY DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})
|
||||||
|
|
||||||
IF( WIN32 )
|
IF( WIN32 )
|
||||||
ADD_CUSTOM_COMMAND(TARGET assimp_cmd
|
ADD_CUSTOM_COMMAND(TARGET assimp_cmd
|
||||||
|
@ -35,4 +35,4 @@ SET_TARGET_PROPERTIES( assimp_cmd PROPERTIES
|
||||||
|
|
||||||
INSTALL( TARGETS assimp_cmd
|
INSTALL( TARGETS assimp_cmd
|
||||||
DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-bin
|
DESTINATION "${ASSIMP_BIN_INSTALL_DIR}" COMPONENT assimp-bin
|
||||||
)
|
)
|
||||||
|
|
|
@ -112,12 +112,12 @@ unsigned int CountAnimChannels(const aiScene* scene)
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------
|
||||||
unsigned int GetAvgFacePerMesh(const aiScene* scene) {
|
unsigned int GetAvgFacePerMesh(const aiScene* scene) {
|
||||||
return static_cast<unsigned int>(CountFaces(scene)/scene->mNumMeshes);
|
return (scene->mNumMeshes != 0) ? static_cast<unsigned int>(CountFaces(scene)/scene->mNumMeshes) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------
|
||||||
unsigned int GetAvgVertsPerMesh(const aiScene* scene) {
|
unsigned int GetAvgVertsPerMesh(const aiScene* scene) {
|
||||||
return static_cast<unsigned int>(CountVertices(scene)/scene->mNumMeshes);
|
return (scene->mNumMeshes != 0) ? static_cast<unsigned int>(CountVertices(scene)/scene->mNumMeshes) : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------------
|
||||||
|
|
|
@ -42,7 +42,7 @@ ADD_EXECUTABLE( assimp_viewer WIN32
|
||||||
txi.bmp
|
txi.bmp
|
||||||
)
|
)
|
||||||
|
|
||||||
SET_PROPERTY(TARGET assimp_viewer PROPERTY DEBUG_POSTFIX ${ASSIMP_DEBUG_POSTFIX})
|
SET_PROPERTY(TARGET assimp_viewer PROPERTY DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})
|
||||||
|
|
||||||
|
|
||||||
IF ( MSVC )
|
IF ( MSVC )
|
||||||
|
@ -52,7 +52,7 @@ ENDIF ( MSVC )
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
ADD_CUSTOM_COMMAND(TARGET assimp_viewer
|
ADD_CUSTOM_COMMAND(TARGET assimp_viewer
|
||||||
PRE_BUILD
|
PRE_BUILD
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:assimp> $<TARGET_FILE_DIR:assimp_viewer>
|
COMMAND ${CMAKE_COMMAND} -E copy_if_different $<TARGET_FILE:assimp> $<TARGET_FILE_DIR:assimp_viewer>
|
||||||
MAIN_DEPENDENCY assimp)
|
MAIN_DEPENDENCY assimp)
|
||||||
|
|
Loading…
Reference in New Issue