void OpenCascadeBasedSerializer::write(const IfcGeom::BRepElement<real_t>* o) { for (IfcGeom::IfcRepresentationShapeItems::const_iterator it = o->geometry().begin(); it != o->geometry().end(); ++ it) { gp_GTrsf gtrsf = it->Placement(); const gp_Trsf& o_trsf = o->transformation().data(); gtrsf.PreMultiply(o_trsf); if (o->geometry().settings().get(IfcGeom::IteratorSettings::CONVERT_BACK_UNITS)) { gp_Trsf scale; scale.SetScaleFactor(1.0 / o->geometry().settings().unit_magnitude()); gtrsf.PreMultiply(scale); } const TopoDS_Shape& s = it->Shape(); bool trsf_valid = false; gp_Trsf trsf; try { trsf = gtrsf.Trsf(); trsf_valid = true; } catch (...) {} const TopoDS_Shape moved_shape = trsf_valid ? BRepBuilderAPI_Transform(s, trsf, true).Shape() : BRepBuilderAPI_GTransform(s, gtrsf, true).Shape(); writeShape(moved_shape); } }
void writeGeometry(CborEncoder *enc0, Geometry geometry) { if (geometry.selector == 0) { CborEncoder enc1; CborEncoder* enc = &enc1; cbor_encoder_create_array(enc0, enc, 2); cbor_encode_uint(enc, (uint64_t)geometry.selector); writeShape(enc, geometry.data.ShapeGeometry.value0); cbor_encoder_close_container_checked(enc0, enc); }; if (geometry.selector == 1) { CborEncoder enc1; CborEncoder* enc = &enc1; cbor_encoder_create_array(enc0, enc, 2); cbor_encode_uint(enc, (uint64_t)geometry.selector); cbor_encode_text_stringz(enc, geometry.data.ResourceGeometry.value0.c_str()); cbor_encoder_close_container_checked(enc0, enc); }; }
void OpenCascadeBasedSerializer::write(const IfcGeom::BRepElement<real_t>* o) { for (IfcGeom::IfcRepresentationShapeItems::const_iterator it = o->geometry().begin(); it != o->geometry().end(); ++ it) { gp_GTrsf gtrsf = it->Placement(); const gp_Trsf& o_trsf = o->transformation().data(); gtrsf.PreMultiply(o_trsf); if (o->geometry().settings().get(IfcGeom::IteratorSettings::CONVERT_BACK_UNITS)) { gp_Trsf scale; scale.SetScaleFactor(1.0 / o->geometry().settings().unit_magnitude()); gtrsf.PreMultiply(scale); } const TopoDS_Shape& s = it->Shape(); const TopoDS_Shape moved_shape = IfcGeom::Kernel::apply_transformation(s, gtrsf); writeShape(moved_shape); } }