From 20b35ec4eaec1a51183fbe9957bece68d31576d7 Mon Sep 17 00:00:00 2001 From: Thomas Krijnen Date: Sun, 8 Jul 2018 11:08:07 +0200 Subject: [PATCH] Preprocessor stuff for stp and igs serializers --- src/ifcconvert/IfcConvert.cpp | 8 +++++++- src/serializers/IgesSerializer.h | 10 ++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/ifcconvert/IfcConvert.cpp b/src/ifcconvert/IfcConvert.cpp index 0a46961a3d..8d8ad7293b 100644 --- a/src/ifcconvert/IfcConvert.cpp +++ b/src/ifcconvert/IfcConvert.cpp @@ -35,9 +35,12 @@ #include "../ifcgeom_schema_agnostic/IfcGeomIterator.h" -#include #include +#if OCC_VERSION_HEX < 0x60900 +#include +#endif + #include #include @@ -562,7 +565,10 @@ int main(int argc, char** argv) } else if (output_extension == ".stp") { serializer = new StepSerializer(output_temp_filename, settings); } else if (output_extension == ".igs") { +#if OCC_VERSION_HEX < 0x60900 + // According to https://tracker.dev.opencascade.org/view.php?id=25689 something has been fixed in 6.9.0 IGESControl_Controller::Init(); // work around Open Cascade bug +#endif serializer = new IgesSerializer(output_temp_filename, settings); } else if (output_extension == ".svg") { settings.set(IfcGeom::IteratorSettings::DISABLE_TRIANGULATION, true); diff --git a/src/serializers/IgesSerializer.h b/src/serializers/IgesSerializer.h index 7f608d9e53..93fca9b514 100644 --- a/src/serializers/IgesSerializer.h +++ b/src/serializers/IgesSerializer.h @@ -21,9 +21,15 @@ #define IGESSERIALIZER_H #include "OpenCascadeBasedSerializer.h" +#include "../ifcparse/IfcLogger.h" #include + +#ifndef HAVE_CONFIG_H +/// @note this is brittle, but apparently the only way to differentiate OCCT +/// from OCE. In the latter including this header fails for some versions. #include +#endif class IgesSerializer : public OpenCascadeBasedSerializer { @@ -45,8 +51,12 @@ public: void setUnitNameAndMagnitude(const std::string& /*name*/, float magnitude) { const char* symbol = getSymbolForUnitMagnitude(magnitude); if (symbol) { +#ifdef HAVE_CONFIG_H + Logger::Warning("Setting IGES units not supported on OCE"); +#else Interface_Static::SetCVal("xstep.cascade.unit", symbol); Interface_Static::SetCVal("write.iges.unit", symbol); +#endif } } };