diff --git a/src/serializers/HdfSerializer.cpp b/src/serializers/HdfSerializer.cpp index 2aadb2cf90..d0e2caa7a8 100644 --- a/src/serializers/HdfSerializer.cpp +++ b/src/serializers/HdfSerializer.cpp @@ -233,7 +233,9 @@ namespace { } } -void HdfSerializer::read_surface_style(surface_style_serialization& s, ifcopenshell::geometry::taxonomy::style& gss) { +void HdfSerializer::read_surface_style(const surface_style_serialization& s, + ifcopenshell::geometry::taxonomy::style& gss, + IfcParse::IfcFile& f) { if (strlen(s.name) || s.id) { if (s.diffuse[0] == s.diffuse[0]) { gss.diffuse = ifcopenshell::geometry::taxonomy::colour(s.diffuse[0], s.diffuse[1], s.diffuse[2]); @@ -247,6 +249,9 @@ void HdfSerializer::read_surface_style(surface_style_serialization& s, ifcopensh if (s.specularity == s.specularity) { gss.specularity = s.specularity; } + if (s.id != 0) { + gss.instance = f.instance_by_id(s.id)->as(); + } } } @@ -355,7 +360,7 @@ IfcGeom::Element* HdfSerializer::read(IfcParse::IfcFile& f, const std::string& g matrix->components() << Eigen::Map(&part.matrix[0][0]); auto style_ptr = ifcopenshell::geometry::taxonomy::make(); - read_surface_style(part.surface_style, *style_ptr); + read_surface_style(part.surface_style, *style_ptr, f); shapes.push_back(IfcGeom::ConversionResult(part.id, matrix, new ifcopenshell::geometry::OpenCascadeShape(shp), style_ptr)); } @@ -421,7 +426,7 @@ IfcGeom::Element* HdfSerializer::read(IfcParse::IfcFile& f, const std::string& g for (size_t i = 0; i < surface_styles.size(); ++i) { surface_style_ptrs[i] = ifcopenshell::geometry::taxonomy::make(); - read_surface_style(surface_styles[i], *surface_style_ptrs[i]); + read_surface_style(surface_styles[i], *surface_style_ptrs[i], f); } triangulation_geometry = boost::shared_ptr(new IfcGeom::Representation::Triangulation( diff --git a/src/serializers/HdfSerializer.h b/src/serializers/HdfSerializer.h index 2a57910f46..6dab05eaad 100644 --- a/src/serializers/HdfSerializer.h +++ b/src/serializers/HdfSerializer.h @@ -90,7 +90,9 @@ private: std::map group_cache_; H5::Group createRepresentationGroup(const H5::Group& element_group, const std::string& gid); - void read_surface_style(surface_style_serialization& serialized_style, ifcopenshell::geometry::taxonomy::style& style); + void read_surface_style(const surface_style_serialization& s, + ifcopenshell::geometry::taxonomy::style& gss, + IfcParse::IfcFile& f); void write_style(surface_style_serialization& data, const ifcopenshell::geometry::taxonomy::style::ptr& s); public: