From e62ce005dc2fe801e97d78dc837555f2d7212aea Mon Sep 17 00:00:00 2001 From: aothms Date: Tue, 1 Dec 2015 11:14:50 +0100 Subject: [PATCH] Work on unit issues with step and iges files --- src/ifcconvert/IgesSerializer.h | 1 + src/ifcconvert/OpenCascadeBasedSerializer.cpp | 6 ++++++ src/ifcconvert/StepSerializer.h | 1 + 3 files changed, 8 insertions(+) diff --git a/src/ifcconvert/IgesSerializer.h b/src/ifcconvert/IgesSerializer.h index 8591af9902..fccb0a09f1 100644 --- a/src/ifcconvert/IgesSerializer.h +++ b/src/ifcconvert/IgesSerializer.h @@ -46,6 +46,7 @@ public: void setUnitNameAndMagnitude(const std::string& name, float magnitude) { const char* symbol = getSymbolForUnitMagnitude(magnitude); if (symbol) { + Interface_Static::SetCVal("xstep.cascade.unit", symbol); Interface_Static::SetCVal("write.iges.unit", symbol); } } diff --git a/src/ifcconvert/OpenCascadeBasedSerializer.cpp b/src/ifcconvert/OpenCascadeBasedSerializer.cpp index 3dc8ad9386..2dbb642c3d 100644 --- a/src/ifcconvert/OpenCascadeBasedSerializer.cpp +++ b/src/ifcconvert/OpenCascadeBasedSerializer.cpp @@ -42,6 +42,12 @@ void OpenCascadeBasedSerializer::write(const IfcGeom::BRepElement* o) { const gp_Trsf& o_trsf = o->transformation().data(); gtrsf.PreMultiply(o_trsf); + + if (o->geometry().settings().convert_back_units()) { + gp_Trsf scale; + scale.SetScaleFactor(1.0 / o->geometry().settings().unit_magnitude()); + gtrsf.PreMultiply(scale); + } const TopoDS_Shape& s = it->Shape(); diff --git a/src/ifcconvert/StepSerializer.h b/src/ifcconvert/StepSerializer.h index 4667104a38..9d8ca7b211 100644 --- a/src/ifcconvert/StepSerializer.h +++ b/src/ifcconvert/StepSerializer.h @@ -52,6 +52,7 @@ public: void setUnitNameAndMagnitude(const std::string& name, float magnitude) { const char* symbol = getSymbolForUnitMagnitude(magnitude); if (symbol) { + Interface_Static::SetCVal("xstep.cascade.unit", symbol); Interface_Static::SetCVal("write.step.unit", symbol); } }