UT_Error IE_Imp_EPUB::_loadFile(GsfInput* input) { m_epub = gsf_infile_zip_new(input, NULL); if (m_epub == NULL) { UT_DEBUGMSG(("Can`t create gsf input zip object\n")); return UT_ERROR; } UT_DEBUGMSG(("Reading metadata\n")); if (readMetadata() != UT_OK) { UT_DEBUGMSG(("Failed to read metadata\n")); return UT_ERROR; } UT_DEBUGMSG(("Reading package information\n")); if (readPackage() != UT_OK) { UT_DEBUGMSG(("Failed to read package information\n")); return UT_ERROR; } UT_DEBUGMSG(("Uncompressing OPS data\n")); if (uncompress() != UT_OK) { UT_DEBUGMSG(("Failed to uncompress data\n")); return UT_ERROR; } UT_DEBUGMSG(("Reading OPS data\n")); if (readStructure() != UT_OK) { UT_DEBUGMSG(("Failed to read OPS data\n")); return UT_ERROR; } return UT_OK; }
std::vector<VolumeURL> ECAT7VolumeReader::listVolumes(const std::string& url) const throw (tgt::FileException) { VolumeURL urlOrigin(url); std::string fileName = urlOrigin.getPath(); ECAT7VolumeReader::ECAT7Structure s = readStructure(fileName); std::vector<VolumeURL> result; for(size_t i=0; i<s.subVolumes_.size(); i++) { VolumeURL origin("ecat7", fileName); origin.addSearchParameter("volumeId", itos(s.subVolumes_[i].de_.id_)); origin.getMetaDataContainer().addMetaData("volumeId", new IntMetaData(s.subVolumes_[i].de_.id_)); origin.getMetaDataContainer().addMetaData("Spacing", new Vec3MetaData(s.subVolumes_[i].getSpacing())); origin.getMetaDataContainer().addMetaData("Dimensions", new IVec3MetaData(s.subVolumes_[i].getDimensions())); s.transformMetaData(origin.getMetaDataContainer(), static_cast<int>(i)); result.push_back(origin); } return result; }
VolumeList* ECAT7VolumeReader::read(const std::string &url, int volumeId) throw(tgt::CorruptedFileException, tgt::IOException, std::bad_alloc) { LINFO("Loading dataset " << url << " vid: " << volumeId); VolumeURL origin(url); std::string fileName = origin.getPath(); FILE* fin = fopen(fileName.c_str(), "rb"); if(!fin) { throw tgt::FileNotFoundException("ECAT7: File not found", fileName); } ECAT7VolumeReader::ECAT7Structure s = readStructure(fileName); VolumeList* vc = new VolumeList(); for(size_t i=0; i<s.subVolumes_.size(); i++) { fseek(fin, s.subVolumes_[i].de_.startBlock_ * 512, SEEK_SET); fseek(fin, 512, SEEK_CUR); //skip past header (already read) tgt::svec3 dimensions = s.subVolumes_[i].getDimensions(); //tgt::mat4 m = s.subVolumes_[i].getTransformation(); tgt::vec3 spacing = s.subVolumes_[i].getSpacing(); tgt::vec3 offset = s.subVolumes_[i].getOffset(); if(volumeId != -1) { if(volumeId != s.subVolumes_[i].getId()) continue; } if(s.subVolumes_[i].ih_.num_dimensions != 3) continue; if (getProgressBar()) { getProgressBar()->setTitle("Loading Volume"); getProgressBar()->setProgressMessage("Loading volume: " + fileName); } VolumeRAM* vol; RealWorldMapping denormalize; if(s.h_.file_type == 6) { vol = new VolumeRAM_UInt8(dimensions); denormalize = RealWorldMapping::createDenormalizingMapping<uint8_t>(); } else if(s.h_.file_type == 7) { vol = new VolumeRAM_UInt16(dimensions); denormalize = RealWorldMapping::createDenormalizingMapping<uint16_t>(); } else { LERROR("Unknown file format detected."); return 0; } float scale = s.subVolumes_[i].ih_.scale_factor * s.h_.ecat_calibration_factor; RealWorldMapping rwm(scale, 0.0f, s.h_.data_units); VolumeReader::read(vol, fin); // Assume that the pixel size values given in the ecat header are in cm. Multiply spacing and offset // with 0.1 to convert to mm. Volume* vh = new Volume(vol, spacing * 0.1f, offset * 0.1f); vh->setRealWorldMapping(RealWorldMapping::combine(denormalize, rwm)); if(s.swapEndianness_) VolumeOperatorSwapEndianness::APPLY_OP(vh); // TODO: This must depend on some parameter in the headers, figure out which and how bool mirrorZ = true; if(mirrorZ) { Volume* mirrored = VolumeOperatorMirrorZ::APPLY_OP(vh); delete vh; vh = mirrored; } VolumeURL o("ecat7", fileName); o.addSearchParameter("volumeId", itos(s.subVolumes_[i].de_.id_)); vh->setOrigin(o); s.transformMetaData(vh->getMetaDataContainer(), static_cast<int>(i)); if(length(offset) == 0.f) centerVolume(vh); vc->add(vh); if (getProgressBar()) getProgressBar()->hide(); } fclose(fin); return vc; }
int readFct_(void *buf, struct csys_function *fct, COUNT fd) { if(DosLseek(fd, fct->csys_rpos, 0) >= 0) return readStructure(buf, fct->csys_length, fd); return err(); }