#ifndef ITERATOR_KERNEL_H #define ITERATOR_KERNEL_H #include "../ifcparse/IfcFile.h" #include "../ifcgeom/ConversionSettings.h" #include "../ifcgeom/ConversionResult.h" #include "../ifcgeom/abstract_mapping.h" #include "../ifcgeom/ConversionSettings.h" #include "../ifcgeom/AbstractKernel.h" #include "../ifcgeom/IfcGeomElement.h" #include namespace ifcopenshell { namespace geometry { class Converter { public: typedef boost::shared_ptr brep_ptr; private: std::string geometry_library_; abstract_mapping* mapping_; kernels::AbstractKernel* kernel_; IfcGeom::IteratorSettings settings_; std::map cache_; public: kernels::AbstractKernel* kernel() { return kernel_; } Converter(const std::string& geometry_library, IfcParse::IfcFile* file, IfcGeom::IteratorSettings& settings); ~Converter() {} abstract_mapping* mapping() const { return mapping_; } /* virtual NativeElement* convert( const IteratorSettings& settings, IfcUtil::IfcBaseClass* representation, IfcUtil::IfcBaseClass* product) { return implementation_->convert(settings, representation, product); } */ double total_map_time = 0.; double total_geom_time = 0.; IfcGeom::ConversionResults convert(IfcUtil::IfcBaseClass* item) { std::clock_t map_start = std::clock(); auto geom_item = mapping_->map(item); std::clock_t geom_start = std::clock(); IfcGeom::ConversionResults results; kernel_->convert(geom_item, results); std::clock_t geom_end = std::clock(); total_map_time += (geom_start - map_start) / (double) CLOCKS_PER_SEC; total_geom_time += (geom_end - geom_start) / (double) CLOCKS_PER_SEC; return results; } IfcGeom::BRepElement* create_brep_for_representation_and_product(const IfcUtil::IfcBaseEntity* representation, const IfcUtil::IfcBaseEntity* product); // IfcGeom::BRepElement* create_brep_for_processed_representation(const IfcUtil::IfcBaseEntity* representation, const IfcUtil::IfcBaseEntity* product, IfcGeom::BRepElement* brep); IfcGeom::BRepElement* create_brep_for_representation_and_product(taxonomy::ptr, const IfcUtil::IfcBaseEntity* product, const taxonomy::matrix4::ptr& place); IfcGeom::BRepElement* create_brep_for_processed_representation(const IfcUtil::IfcBaseEntity* product, const taxonomy::matrix4::ptr& place, IfcGeom::BRepElement*); }; }} #endif