浏览代码

- Ifc: enable double-precision arithmetics for the entire pipeline. This does fix bugs, but unfortunately not all if them.

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@1143 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
aramis_acg 13 年之前
父节点
当前提交
15e50959e6
共有 3 个文件被更改,包括 6 次插入3 次删除
  1. 4 1
      code/IFCLoader.cpp
  2. 1 1
      code/IFCUtil.cpp
  3. 1 1
      code/IFCUtil.h

+ 4 - 1
code/IFCLoader.cpp

@@ -325,7 +325,10 @@ void SetCoordinateSpace(ConversionData& conv)
 void ResolveObjectPlacement(aiMatrix4x4& m, const IfcObjectPlacement& place, ConversionData& conv)
 {
 	if (const IfcLocalPlacement* const local = place.ToPtr<IfcLocalPlacement>()){
-		ConvertAxisPlacement(m, *local->RelativePlacement, conv);
+		IfcMatrix4 tmp;
+		ConvertAxisPlacement(tmp, *local->RelativePlacement, conv);
+
+		m = static_cast<aiMatrix4x4>(tmp);
 
 		if (local->PlacementRelTo) {
 			aiMatrix4x4 tmp;

+ 1 - 1
code/IFCUtil.cpp

@@ -269,7 +269,7 @@ void ConvertColor(aiColor4D& out, const IfcColourRgb& in)
 void ConvertColor(aiColor4D& out, const IfcColourOrFactor& in,ConversionData& conv,const aiColor4D* base)
 {
 	if (const EXPRESS::REAL* const r = in.ToPtr<EXPRESS::REAL>()) {
-		out.r = out.g = out.b = *r;
+		out.r = out.g = out.b = static_cast<float>(*r);
 		if(base) {
 			out.r *= static_cast<float>( base->r );
 			out.g *= static_cast<float>( base->g );

+ 1 - 1
code/IFCUtil.h

@@ -51,7 +51,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 namespace Assimp {
 namespace IFC {
 
-	typedef float IfcFloat;
+	typedef double IfcFloat;
 
 	// IfcFloat-precision math data types
 	typedef aiVector2t<IfcFloat> IfcVector2;