void ModelSeries::addReconstruction( ::fwMedData::ModelSeries::sptr& _modelSeries, ::fwData::Reconstruction::sptr& _rec) { ::fwMedData::ModelSeries::ReconstructionVectorType recDB = _modelSeries->getReconstructionDB(); FW_RAISE_IF("Reconstruction is invalid.", _rec == nullptr); FW_RAISE_IF("Reconstruction already exists in ModelSeries.", std::find(recDB.begin(), recDB.end(), _rec) != recDB.end()); recDB.push_back(_rec); _modelSeries->setReconstructionDB(recDB); }
void MetaImageReader::read() { assert( !m_object.expired() ); assert( m_object.lock() ); ::fwData::Image::sptr pImage = this->getConcreteObject(); vtkSmartPointer< vtkMetaImageReader > reader = vtkSmartPointer< vtkMetaImageReader >::New(); reader->SetFileName(this->getFile().string().c_str()); Progressor progress(reader, this->getSptr(), this->getFile().string()); reader->Update(); reader->UpdateInformation(); reader->PropagateUpdateExtent(); vtkDataObject *obj = reader->GetOutput(); vtkImageData* img = vtkImageData::SafeDownCast(obj); FW_RAISE_IF("MetaImageReader cannot read mhd image file :"<<this->getFile().string(), !img); try { ::fwVtkIO::fromVTKImage( img, pImage); } catch( std::exception &e) { FW_RAISE("MetaImage to fwData::Image failed : "<<e.what()); } }
void ImageReader::read() { assert( !m_object.expired() ); assert( m_object.lock() ); ::fwData::Image::sptr pImage = getConcreteObject(); vtkSmartPointer< vtkGenericDataObjectReader > reader = vtkSmartPointer< vtkGenericDataObjectReader >::New(); reader->SetFileName(this->getFile().string().c_str()); //add progress observation Progressor progress(reader, this->getSptr(), this->getFile().string()); reader->Update(); vtkDataObject *obj = reader->GetOutput(); vtkImageData* img = vtkImageData::SafeDownCast(obj); FW_RAISE_IF("ImageReader cannot read VTK image file :"<<this->getFile().string(), !img); try { ::vtkIO::fromVTKImage( img, pImage); } catch( std::exception &e) { FW_RAISE("VTKImage to fwData::Image failed "<<e.what()); } }
void MeshReader::read() { assert( !m_object.expired() ); assert( m_object.lock() ); ::fwData::Mesh::sptr pMesh = getConcreteObject(); vtkSmartPointer< vtkGenericDataObjectReader > reader = vtkSmartPointer< vtkGenericDataObjectReader >::New(); reader->SetFileName(this->getFile().string().c_str()); //add progress observation Progressor progress(reader, this->getSptr(), this->getFile().string()); reader->Update(); vtkDataObject *obj = reader->GetOutput(); vtkPolyData* mesh = vtkPolyData::SafeDownCast(obj); FW_RAISE_IF("MeshReader cannot read VTK Mesh file : "<< this->getFile().string(), !mesh); ::vtkIO::helper::Mesh::fromVTKMesh(mesh, pMesh); }
void SeriesDBLazyReader::scanFiles( ::gdcm::Scanner & scanner, const std::vector< std::string > & filenames ) { scanner.AddTag( seriesUIDTag ); scanner.AddTag( seriesDateTag ); scanner.AddTag( seriesTimeTag ); scanner.AddTag( seriesTypeTag ); scanner.AddTag( seriesDescriptionTag ); scanner.AddTag( seriesPhysicianNamesTag ); scanner.AddTag( equipmentInstitutionNameTag ); scanner.AddTag( patientNameTag ); scanner.AddTag( patientIDTag ); scanner.AddTag( patientBirthdateTag ); scanner.AddTag( patientSexTag ); scanner.AddTag( studyUIDTag ); scanner.AddTag( studyUIDTag ); scanner.AddTag( studyDateTag ); scanner.AddTag( studyTimeTag ); scanner.AddTag( studyReferingPhysicianNameTag ); scanner.AddTag( studyDescriptionTag ); scanner.AddTag( studyPatientAgeTag ); scanner.AddTag( imageTypeTag ); scanner.AddTag( acquisitionDateTag ); scanner.AddTag( acquisitionTimeTag ); scanner.AddTag( sliceThicknessTag ); scanner.AddTag( windowCenterTag ); scanner.AddTag( windowWidthTag ); bool scanIsOk = scanner.Scan( filenames ); FW_RAISE_IF( "Sorry, dicom scanner failed", !scanIsOk ); }
void SSliceIndexDicomPullerEditor::readImage(std::size_t selectedSliceIndex) { // DicomSeries ::fwMedData::DicomSeries::csptr dicomSeries = this->getInOut< ::fwMedData::DicomSeries >("series"); SLM_ASSERT("DicomSeries should not be null !", dicomSeries); if( dicomSeries->getModality() != "CT" && dicomSeries->getModality() != "MR" && dicomSeries->getModality() != "XA") { return; } // Clear temporary seriesDB ::fwMedDataTools::helper::SeriesDB sDBTempohelper(m_tempSeriesDB); sDBTempohelper.clear(); // Creates unique temporary folder, no need to check if exists before (see ::fwTools::System::getTemporaryFolder) ::boost::filesystem::path path = ::fwTools::System::getTemporaryFolder("dicom"); ::boost::filesystem::path tmpPath = path / "tmp"; SLM_INFO("Create " + tmpPath.string()); ::boost::filesystem::create_directories(tmpPath); const auto& binaries = dicomSeries->getDicomContainer(); auto iter = binaries.find(selectedSliceIndex); OSLM_ASSERT("Index '"<<selectedSliceIndex<<"' is not found in DicomSeries", iter != binaries.end()); const ::fwMemory::BufferObject::sptr bufferObj = iter->second; const ::fwMemory::BufferObject::Lock lockerDest(bufferObj); const char* buffer = static_cast<char*>(lockerDest.getBuffer()); const size_t size = bufferObj->getSize(); ::boost::filesystem::path dest = tmpPath / std::to_string(selectedSliceIndex); ::boost::filesystem::ofstream fs(dest, std::ios::binary|std::ios::trunc); FW_RAISE_IF("Can't open '" << tmpPath << "' for write.", !fs.good()); fs.write(buffer, size); fs.close(); // Read image m_dicomReader.lock()->setFolder(tmpPath); if(!m_dicomReader.expired()) { m_dicomReader.lock()->update(); if(m_dicomReader.expired() || m_dicomReader.lock()->isStopped()) { return; } } else { return; } //Copy image ::fwMedData::ImageSeries::sptr imageSeries; if(m_tempSeriesDB->getContainer().size() > 0) { imageSeries = ::fwMedData::ImageSeries::dynamicCast(*(m_tempSeriesDB->getContainer().begin())); } if(imageSeries) { ::fwData::Image::sptr newImage = imageSeries->getImage(); ::fwData::Image::SizeType newSize = newImage->getSize(); newImage->setField(::fwDataTools::fieldHelper::Image::m_axialSliceIndexId, m_axialIndex); m_frontalIndex->setValue(static_cast<int>(newSize[0]/2)); newImage->setField(::fwDataTools::fieldHelper::Image::m_frontalSliceIndexId, m_frontalIndex); m_sagittalIndex->setValue(static_cast<int>(newSize[1]/2)); newImage->setField(::fwDataTools::fieldHelper::Image::m_sagittalSliceIndexId, m_sagittalIndex); this->setOutput("image", newImage); } ::boost::system::error_code ec; ::boost::filesystem::remove_all(path, ec); SLM_ERROR_IF("remove_all error for path " + path.string() + ": " + ec.message(), ec.value()); }