mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-23 04:29:55 +00:00
Conversion back from hdf to spf, referenced profile
This commit is contained in:
@@ -1898,6 +1898,8 @@ public:
|
|||||||
|
|
||||||
return inst_name;
|
return inst_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
H5::H5File& file() { return file_; }
|
||||||
};
|
};
|
||||||
|
|
||||||
void visit(instance_resolver& resolver, std::ostream& output, void* buffer, H5::DataType* dt, const std::string& name = no_name, const std::bitset<64>& bitmask = many_trues, int padded_length=-1) {
|
void visit(instance_resolver& resolver, std::ostream& output, void* buffer, H5::DataType* dt, const std::string& name = no_name, const std::bitset<64>& bitmask = many_trues, int padded_length=-1) {
|
||||||
@@ -2073,6 +2075,41 @@ void visit(instance_resolver& resolver, std::ostream& output, void* buffer, H5::
|
|||||||
}
|
}
|
||||||
output << ")";
|
output << ")";
|
||||||
dt2.close();
|
dt2.close();
|
||||||
|
} else if (dt->getClass() == H5T_REFERENCE) {
|
||||||
|
hid_t setid = H5Rdereference(resolver.file().getId(), H5R_DATASET_REGION, buffer);
|
||||||
|
hid_t spaceid = H5Rget_region(resolver.file().getId(), H5R_DATASET_REGION, buffer);
|
||||||
|
|
||||||
|
H5::DataSet dset(setid);
|
||||||
|
H5::DataSpace dspace(spaceid);
|
||||||
|
H5::CompType dtype = dset.getCompType();
|
||||||
|
|
||||||
|
if (dspace.getSelectNpoints() != 1) {
|
||||||
|
throw std::runtime_error("Unexpected number of points selected");
|
||||||
|
}
|
||||||
|
|
||||||
|
hsize_t selected;
|
||||||
|
dspace.getSelectElemPointlist(0, 1, &selected);
|
||||||
|
|
||||||
|
hsize_t dims = 1;
|
||||||
|
H5::DataSpace memspace(1, &dims);
|
||||||
|
|
||||||
|
uint8_t* buffer = new uint8_t[dtype.getSize()];
|
||||||
|
dset.read(buffer, dtype, memspace, dspace);
|
||||||
|
|
||||||
|
const int i = dtype.getMemberIndex(Entity_Instance_Identifier);
|
||||||
|
const size_t offs = dtype.getMemberOffset(i);
|
||||||
|
H5::DataType instidt = dtype.getMemberDataType(i);
|
||||||
|
|
||||||
|
const int name = read<int>(buffer + offs, &instidt);
|
||||||
|
output << "#" << name;
|
||||||
|
|
||||||
|
instidt.close();
|
||||||
|
dtype.close();
|
||||||
|
dspace.close();
|
||||||
|
memspace.close();
|
||||||
|
dset.close();
|
||||||
|
|
||||||
|
delete[] buffer;
|
||||||
} else {
|
} else {
|
||||||
throw std::runtime_error("Unexpected datatype encountered");
|
throw std::runtime_error("Unexpected datatype encountered");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user