mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-17 14:02:27 +00:00
Implement shape serialization for cgal, possibility to supply geometry library to iterator in py
This commit is contained in:
@@ -145,11 +145,6 @@ IfcGeom::Representation::Serialization::Serialization(const BRep& brep)
|
||||
: Representation(brep.settings())
|
||||
, id_(brep.id())
|
||||
{
|
||||
#ifdef IFOPSH_WITH_OPENCASCADE
|
||||
ConversionResultShape* shape = brep.as_compound();
|
||||
TopoDS_Compound compound = TopoDS::Compound(((ifcopenshell::geometry::OpenCascadeShape*)shape)->shape());
|
||||
delete shape;
|
||||
|
||||
for (auto it = brep.begin(); it != brep.end(); ++it) {
|
||||
int sid = -1;
|
||||
|
||||
@@ -175,12 +170,24 @@ IfcGeom::Representation::Serialization::Serialization(const BRep& brep)
|
||||
surface_style_ids_.push_back(sid);
|
||||
}
|
||||
|
||||
std::stringstream sstream;
|
||||
BRepTools::Write(compound,sstream);
|
||||
brep_data_ = sstream.str();
|
||||
#else
|
||||
throw std::runtime_error("Not available without Open Cascade");
|
||||
#endif
|
||||
if (brep.begin() != brep.end()) {
|
||||
if (dynamic_cast<ifcopenshell::geometry::OpenCascadeShape*>(brep.begin()->Shape())) {
|
||||
ConversionResultShape* shape = brep.as_compound();
|
||||
shape->Serialize(brep_data_);
|
||||
delete shape;
|
||||
} else {
|
||||
for (auto it = brep.begin(); it != brep.end(); ++it) {
|
||||
std::string part;
|
||||
it->Shape()->Serialize(part);
|
||||
if (brep_data_.size()) {
|
||||
brep_data_ = brep_data_ + "\n---\n" + part;
|
||||
} else {
|
||||
brep_data_ = part;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
IfcGeom::ConversionResultShape* IfcGeom::Representation::BRep::as_compound(bool force_meters) const {
|
||||
|
||||
@@ -753,6 +753,24 @@ namespace IfcGeom {
|
||||
{
|
||||
}
|
||||
|
||||
Iterator(const std::string& geometry_library, const IteratorSettings& settings, IfcParse::IfcFile* file)
|
||||
: settings_(settings)
|
||||
, ifc_file(file)
|
||||
, owns_ifc_file(false)
|
||||
, num_threads_(1)
|
||||
, geometry_library_(geometry_library)
|
||||
{
|
||||
}
|
||||
|
||||
Iterator(const std::string& geometry_library, const IteratorSettings& settings, IfcParse::IfcFile* file, int num_threads)
|
||||
: settings_(settings)
|
||||
, ifc_file(file)
|
||||
, owns_ifc_file(false)
|
||||
, num_threads_(num_threads)
|
||||
, geometry_library_(geometry_library)
|
||||
{
|
||||
}
|
||||
|
||||
~Iterator() {
|
||||
if (owns_ifc_file) {
|
||||
delete ifc_file;
|
||||
|
||||
@@ -102,6 +102,12 @@ void ifcopenshell::geometry::CgalShape::Triangulate(const IfcGeom::IteratorSetti
|
||||
|
||||
}
|
||||
|
||||
void ifcopenshell::geometry::CgalShape::Serialize(std::string& r) const {
|
||||
std::stringstream sstream;
|
||||
sstream << shape_;
|
||||
r = sstream.str();
|
||||
}
|
||||
|
||||
#include <CGAL/Polygon_mesh_processing/bbox.h>
|
||||
|
||||
double ifcopenshell::geometry::CgalShape::bounding_box(void *& b) const {
|
||||
|
||||
@@ -96,9 +96,7 @@ namespace ifcopenshell { namespace geometry {
|
||||
|
||||
virtual void Triangulate(const IfcGeom::IteratorSettings& settings, const ifcopenshell::geometry::taxonomy::matrix4& place, IfcGeom::Representation::Triangulation* t, int surface_style_id) const;
|
||||
|
||||
virtual void Serialize(std::string&) const {
|
||||
throw std::runtime_error("Not implemented");
|
||||
}
|
||||
virtual void Serialize(std::string&) const;
|
||||
|
||||
virtual IfcGeom::ConversionResultShape* clone() const {
|
||||
return new CgalShape(shape_);
|
||||
|
||||
@@ -217,6 +217,12 @@ void ifcopenshell::geometry::OpenCascadeShape::Triangulate(const IfcGeom::Iterat
|
||||
BRepTools::Clean(shape_);
|
||||
}
|
||||
|
||||
void ifcopenshell::geometry::OpenCascadeShape::Serialize(std::string& r) const {
|
||||
std::stringstream sstream;
|
||||
BRepTools::Write(shape_, sstream);
|
||||
r = sstream.str();
|
||||
}
|
||||
|
||||
int ifcopenshell::geometry::OpenCascadeShape::surface_genus() const {
|
||||
throw std::runtime_error("Not implemented");
|
||||
}
|
||||
|
||||
@@ -49,9 +49,7 @@ namespace ifcopenshell {
|
||||
|
||||
virtual void Triangulate(const IfcGeom::IteratorSettings& settings, const ifcopenshell::geometry::taxonomy::matrix4& place, IfcGeom::Representation::Triangulation* t, int surface_style_id) const;
|
||||
|
||||
virtual void Serialize(std::string&) const {
|
||||
throw std::runtime_error("Not implemented");
|
||||
}
|
||||
virtual void Serialize(std::string&) const;
|
||||
|
||||
virtual IfcGeom::ConversionResultShape* clone() const {
|
||||
return new OpenCascadeShape(shape_);
|
||||
|
||||
Reference in New Issue
Block a user