Add IFCCONVERT_DOUBLE_PRECISION build option

This commit is contained in:
Stinkfist0
2016-03-10 17:00:06 +02:00
parent 4953b35849
commit b9c5b0e6c8
5 changed files with 35 additions and 30 deletions
+5 -1
View File
@@ -24,7 +24,7 @@ project (IfcOpenShell)
OPTION(UNICODE_SUPPORT "Build IfcOpenShell with Unicode support (requires ICU)." ON) OPTION(UNICODE_SUPPORT "Build IfcOpenShell with Unicode support (requires ICU)." ON)
OPTION(COLLADA_SUPPORT "Build IfcConvert with COLLADA support (requires OpenCOLLADA)." ON) OPTION(COLLADA_SUPPORT "Build IfcConvert with COLLADA support (requires OpenCOLLADA)." ON)
OPTION(ENABLE_BUILD_OPTIMIZATIONS "Enable certain compiler and linker optimizations on RelWithDebInfo and Release builds." OFF) OPTION(ENABLE_BUILD_OPTIMIZATIONS "Enable certain compiler and linker optimizations on RelWithDebInfo and Release builds." OFF)
#TODO OPTION(IFCCONVERT_DOUBLE_PRECISION "IfcConvert: Use double precision floating-point numbers." OFF) OPTION(IFCCONVERT_DOUBLE_PRECISION "IfcConvert: Use double precision floating-point numbers." ON)
OPTION(USE_IFC4 "Use IFC 4 instead of IFC 2x3 (full rebuild recommended when switching this)" OFF) OPTION(USE_IFC4 "Use IFC 4 instead of IFC 2x3 (full rebuild recommended when switching this)" OFF)
OPTION(BUILD_IFCPYTHON "Build IfcPython." ON) OPTION(BUILD_IFCPYTHON "Build IfcPython." ON)
OPTION(BUILD_EXAMPLES "Build example applications." ON) OPTION(BUILD_EXAMPLES "Build example applications." ON)
@@ -397,6 +397,10 @@ if(NOT WIN32)
LINK_DIRECTORIES(${LINK_DIRECTORIES} /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64) LINK_DIRECTORIES(${LINK_DIRECTORIES} /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64)
endif() endif()
# IfcConvert
if (IFCCONVERT_DOUBLE_PRECISION)
add_definitions(-DIFCCONVERT_DOUBLE_PRECISION)
endif()
file(GLOB IFCCONVERT_CPP_FILES ../src/ifcconvert/*.cpp) file(GLOB IFCCONVERT_CPP_FILES ../src/ifcconvert/*.cpp)
file(GLOB IFCCONVERT_H_FILES ../src/ifcconvert/*.h) file(GLOB IFCCONVERT_H_FILES ../src/ifcconvert/*.h)
set(IFCCONVERT_FILES ${IFCCONVERT_CPP_FILES} ${IFCCONVERT_H_FILES}) set(IFCCONVERT_FILES ${IFCCONVERT_CPP_FILES} ${IFCCONVERT_H_FILES})
+5 -1
View File
@@ -20,7 +20,11 @@
#ifndef GEOMETRYSERIALIZER_H #ifndef GEOMETRYSERIALIZER_H
#define GEOMETRYSERIALIZER_H #define GEOMETRYSERIALIZER_H
typedef double real_t; /**< @todo Will be configurable */ #ifdef IFCCONVERT_DOUBLE_PRECISION
typedef double real_t;
#else
typedef float real_t;
#endif
#include "../ifcconvert/Serializer.h" #include "../ifcconvert/Serializer.h"
#include "../ifcgeom/IfcGeomIterator.h" #include "../ifcgeom/IfcGeomIterator.h"
@@ -36,7 +36,7 @@ bool OpenCascadeBasedSerializer::ready() {
return succeeded; return succeeded;
} }
void OpenCascadeBasedSerializer::write(const IfcGeom::BRepElement<double>* o) { void OpenCascadeBasedSerializer::write(const IfcGeom::BRepElement<real_t>* o) {
for (IfcGeom::IfcRepresentationShapeItems::const_iterator it = o->geometry().begin(); it != o->geometry().end(); ++ it) { for (IfcGeom::IfcRepresentationShapeItems::const_iterator it = o->geometry().begin(); it != o->geometry().end(); ++ it) {
gp_GTrsf gtrsf = it->Placement(); gp_GTrsf gtrsf = it->Placement();
+22 -25
View File
@@ -22,15 +22,13 @@
#ifndef SVGSERIALIZER_H #ifndef SVGSERIALIZER_H
#define SVGSERIALIZER_H #define SVGSERIALIZER_H
#include "../ifcconvert/GeometrySerializer.h"
#include "../ifcconvert/util.h"
#include <sstream> #include <sstream>
#include <string> #include <string>
#include <limits> #include <limits>
#include "../ifcgeom/IfcGeomIterator.h"
#include "../ifcconvert/GeometrySerializer.h"
#include "../ifcconvert/util.h"
class SvgSerializer : public GeometrySerializer { class SvgSerializer : public GeometrySerializer {
public: public:
typedef std::pair<std::string, std::vector<util::string_buffer> > path_object; typedef std::pair<std::string, std::vector<util::string_buffer> > path_object;
@@ -45,7 +43,7 @@ protected:
std::vector< boost::shared_ptr<util::string_buffer::float_item> > radii; std::vector< boost::shared_ptr<util::string_buffer::float_item> > radii;
IfcParse::IfcFile* file; IfcParse::IfcFile* file;
public: public:
explicit SvgSerializer(const std::string& out_filename, const IfcGeom::IteratorSettings &settings) SvgSerializer(const std::string& out_filename, const IfcGeom::IteratorSettings &settings)
: GeometrySerializer(settings) : GeometrySerializer(settings)
, svg_file(out_filename.c_str()) , svg_file(out_filename.c_str())
, xmin(+std::numeric_limits<double>::infinity()) , xmin(+std::numeric_limits<double>::infinity())
@@ -55,25 +53,24 @@ public:
, rescale(false) , rescale(false)
, file(0) , file(0)
{} {}
virtual void addXCoordinate(const boost::shared_ptr<util::string_buffer::float_item>& fi) { xcoords.push_back(fi); } void addXCoordinate(const boost::shared_ptr<util::string_buffer::float_item>& fi) { xcoords.push_back(fi); }
virtual void addYCoordinate(const boost::shared_ptr<util::string_buffer::float_item>& fi) { ycoords.push_back(fi); } void addYCoordinate(const boost::shared_ptr<util::string_buffer::float_item>& fi) { ycoords.push_back(fi); }
virtual void addSizeComponent(const boost::shared_ptr<util::string_buffer::float_item>& fi) { radii.push_back(fi); } void addSizeComponent(const boost::shared_ptr<util::string_buffer::float_item>& fi) { radii.push_back(fi); }
virtual void growBoundingBox(double x, double y) { if (x < xmin) xmin = x; if (x > xmax) xmax = x; if (y < ymin) ymin = y; if (y > ymax) ymax = y; } void growBoundingBox(double x, double y) { if (x < xmin) xmin = x; if (x > xmax) xmax = x; if (y < ymin) ymin = y; if (y > ymax) ymax = y; }
virtual ~SvgSerializer() {} void writeHeader();
virtual void writeHeader(); bool ready();
virtual bool ready(); void write(const IfcGeom::TriangulationElement<real_t>* /*o*/) {}
virtual void write(const IfcGeom::TriangulationElement<real_t>* /*o*/) {} void write(const IfcGeom::BRepElement<real_t>* o);
virtual void write(const IfcGeom::BRepElement<real_t>* o); void write(path_object& p, const TopoDS_Wire& wire);
virtual void write(path_object& p, const TopoDS_Wire& wire); path_object& start_path(IfcSchema::IfcBuildingStorey* storey, const std::string& id);
virtual path_object& start_path(IfcSchema::IfcBuildingStorey* storey, const std::string& id); bool isTesselated() const { return false; }
virtual bool isTesselated() const { return false; } void finalize();
virtual void finalize(); void setUnitNameAndMagnitude(const std::string& /*name*/, float /*magnitude*/) {}
virtual void setUnitNameAndMagnitude(const std::string& /*name*/, float /*magnitude*/) {} void setFile(IfcParse::IfcFile* f) { file = f; }
virtual void setFile(IfcParse::IfcFile* f) { file = f; } void setBoundingRectangle(double width, double height);
virtual void setBoundingRectangle(double width, double height); void setSectionHeight(double h) { section_height = h; }
virtual void setSectionHeight(double h) { section_height = h; } std::string nameElement(const IfcGeom::Element<real_t>* elem);
virtual std::string nameElement(const IfcGeom::Element<double>* elem); std::string nameElement(const IfcSchema::IfcProduct* elem);
virtual std::string nameElement(const IfcSchema::IfcProduct* elem);
}; };
#endif #endif
+2 -2
View File
@@ -45,8 +45,8 @@ public:
bool ready(); bool ready();
void writeHeader(); void writeHeader();
void writeMaterial(const IfcGeom::Material& style); void writeMaterial(const IfcGeom::Material& style);
void write(const IfcGeom::TriangulationElement<double>* o); void write(const IfcGeom::TriangulationElement<real_t>* o);
void write(const IfcGeom::BRepElement<double>* /*o*/) {} void write(const IfcGeom::BRepElement<real_t>* /*o*/) {}
void finalize() {} void finalize() {}
bool isTesselated() const { return true; } bool isTesselated() const { return true; }
void setUnitNameAndMagnitude(const std::string& /*name*/, float /*magnitude*/) {} void setUnitNameAndMagnitude(const std::string& /*name*/, float /*magnitude*/) {}