From 48bf67f82e07f02b210452539a0bc8adf1b932f4 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Thu, 22 Feb 2024 19:19:27 +1100 Subject: [PATCH] Minor fixes to bugs in H5 saving --- src/ifcgeom_schema_agnostic/IfcGeomTree.h | 26 ++++++----------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/src/ifcgeom_schema_agnostic/IfcGeomTree.h b/src/ifcgeom_schema_agnostic/IfcGeomTree.h index a188c1fd46..803733b563 100644 --- a/src/ifcgeom_schema_agnostic/IfcGeomTree.h +++ b/src/ifcgeom_schema_agnostic/IfcGeomTree.h @@ -1649,14 +1649,6 @@ namespace IfcGeom { } } - uint8_t hexStringToByte(const std::string& hexStr) { - uint8_t byte; - std::stringstream ss; - ss << std::hex << hexStr; - ss >> byte; - return byte; - } - void write_h5() { H5::H5File file("filename.h5", H5F_ACC_TRUNC); H5::Group shapes = file.createGroup("/shapes"); @@ -1792,11 +1784,10 @@ namespace IfcGeom { std::vector uuids_array; for (const auto& id_str : global_ids) { for (size_t i = 0; i < id_str.length(); i += 2) { - std::string byteStr = id_str.substr(i, 2); - uint8_t byte = hexStringToByte(byteStr); - uuids_array.push_back(byte); + uuids_array.push_back(std::stoi(id_str.substr(i, 2), 0, 16)); } } + hsize_t global_ids_dims[2] = {global_ids.size(), 16}; // 16 bytes per UUID H5::DataSpace global_ids_dataspace(2, global_ids_dims); H5::DataSet global_ids_dataset = file.createDataSet("element_global_ids", H5::PredType::NATIVE_UINT8, global_ids_dataspace); @@ -1827,26 +1818,26 @@ namespace IfcGeom { dataset.write(flat_matrices.data(), H5::PredType::NATIVE_FLOAT); // Write element_shape_ids - size_t total_shapes = element_shape_ids.size(); hsize_t element_shape_ids_dims[1] = {element_shape_ids.size()}; H5::DataSpace element_shape_ids_dataspace(1, element_shape_ids_dims); H5::DSetCreatPropList element_shape_ids_propList; element_shape_ids_propList.setChunk(1, element_shape_ids_dims); element_shape_ids_propList.setDeflate(9); - if (total_shapes < (1 << 8)) { + if (geometry_index < (1 << 8)) { H5::DataType dtype = H5::PredType::NATIVE_UINT8; std::vector element_shape_ids_dtype(element_shape_ids.begin(), element_shape_ids.end()); H5::DataSet element_shape_ids_dataset = file.createDataSet("element_shape_ids", dtype, element_shape_ids_dataspace, element_shape_ids_propList); element_shape_ids_dataset.write(element_shape_ids_dtype.data(), dtype); - } else if (total_shapes < (1 << 16)) { + } else if (geometry_index < (1 << 16)) { H5::DataType dtype = H5::PredType::NATIVE_UINT16; std::vector element_shape_ids_dtype(element_shape_ids.begin(), element_shape_ids.end()); H5::DataSet element_shape_ids_dataset = file.createDataSet("element_shape_ids", dtype, element_shape_ids_dataspace, element_shape_ids_propList); element_shape_ids_dataset.write(element_shape_ids_dtype.data(), dtype); - } else if (total_shapes < (1 << 32)) { + } else if (geometry_index < (1UL << 32)) { H5::DataType dtype = H5::PredType::NATIVE_UINT32; + std::vector element_shape_ids_dtype(element_shape_ids.begin(), element_shape_ids.end()); H5::DataSet element_shape_ids_dataset = file.createDataSet("element_shape_ids", dtype, element_shape_ids_dataspace, element_shape_ids_propList); - element_shape_ids_dataset.write(element_shape_ids.data(), dtype); + element_shape_ids_dataset.write(element_shape_ids_dtype.data(), dtype); } // Write colours @@ -1941,7 +1932,6 @@ namespace IfcGeom { std::vector elements; int offset = 0; - int material_offset = 0; std::vector chunked_verts; std::vector chunked_faces; std::vector chunked_materials; @@ -2008,7 +1998,6 @@ namespace IfcGeom { } offset += verts.size() / 3; - material_offset += shape.materials.size(); if (offset > chunk_size) { elements.push_back({ @@ -2021,7 +2010,6 @@ namespace IfcGeom { chunked_materials.clear(); chunked_material_ids.clear(); offset = 0; - material_offset = 0; } }