37 #include <vtkImageData.h>
38 #include <vtkMetaImageReader.h>
39 #include <vtkSmartPointer.h>
40 #include <vtkMetaImageWriter.h>
42 #include <vtkPolyData.h>
43 #include <vtkPolyDataReader.h>
44 #include <vtkPolyDataWriter.h>
45 #include <vtkSTLReader.h>
46 #include <vtkImageChangeInformation.h>
47 #include "vtkMINCImageReader.h"
48 #include "vtkTransform.h"
49 #include "vtkCommand.h"
50 #include <vtkPNGReader.h>
53 #include <QDomDocument>
56 #include <QTextStream>
89 boost::shared_ptr<QMutex> StaticMutexVtkLocker::mMutex;
111 virtual void Execute(vtkObject* caller,
unsigned long,
void* text)
113 mMessage = QString(reinterpret_cast<char*> (text));
117 static bool checkedRead(vtkSmartPointer<vtkAlgorithm> reader, QString filename)
119 vtkSmartPointer<ErrorObserver> errorObserver = vtkSmartPointer<ErrorObserver>::New();
120 reader->AddObserver(
"ErrorEvent", errorObserver);
128 if (!errorObserver->mMessage.isEmpty())
130 reportError(
"Load of data [" + filename +
"] failed with message:\n"
131 + errorObserver->mMessage);
144 reader->ReleaseDataFlagOn();
150 zeroer->SetInputConnection(reader->GetOutputPort());
151 zeroer->SetOutputOrigin(0, 0, 0);
153 return zeroer->GetOutput();
158 return this->
readInto(boost::dynamic_pointer_cast<Image>(data), filename);
172 image->setVtkImageData(raw);
177 image->get_rMd_History()->setRegistration(rMd);
178 image->setModality(customReader->readModality());
179 image->setImageType(customReader->readImageType());
183 double level = customReader->readKey(
"WindowLevel").toDouble(&ok1);
184 double window = customReader->readKey(
"WindowWidth").toDouble(&ok2);
188 image->setInitialWindowLevel(window, level);
189 image->resetTransferFunctions();
206 writer->SetInputData(image->getBaseVtkImageData());
207 writer->SetFileDimensionality(3);
209 QDir().mkpath(QFileInfo(filename).path());
213 writer->SetCompression(
false);
220 customReader->setTransform(image->get_rMd());
221 customReader->setModality(image->getModality());
222 customReader->setImageType(image->getImageType());
223 customReader->setKey(
"WindowLevel",
qstring_cast(image->getInitialWindowLevel()));
224 customReader->setKey(
"WindowWidth",
qstring_cast(image->getInitialWindowWidth()));
225 customReader->setKey(
"Creator", QString(
"CustusX_%1").arg(CustusX_VERSION_STRING));
235 return this->
readInto(boost::dynamic_pointer_cast<Image>(data), filename);
245 image->setVtkImageData(raw);
259 pngReader->SetFileName(filename.toStdString().c_str());
261 return pngReader->GetOutput();
270 return this->
readInto(boost::dynamic_pointer_cast<Mesh>(data), filename);
280 mesh->setVtkPolyData(raw);
305 return this->
readInto(boost::dynamic_pointer_cast<Mesh>(data), filename);
315 mesh->setVtkPolyData(raw);
347 DataReaderPtr DataReaderWriter::findReader(
const QString& path,
const QString& type)
349 for (DataReadersType::iterator iter = mDataReaders.begin(); iter != mDataReaders.end(); ++iter)
351 if ((*iter)->canLoad(type, path))
361 return reader->loadVtkImageData(filename);
369 return reader->loadVtkPolyData(filename);
377 return reader->canLoadDataType();
383 DataReaderPtr reader = this->findReader(path, data->getType());
385 reader->readInto(data, path);
391 data->setFilename(path);
QString qstring_cast(const T &val)
void reportError(QString msg)
virtual vtkPolyDataPtr loadVtkPolyData(QString filename)
QString findDataTypeFromFile(QString filename)
virtual bool readInto(DataPtr data, QString path)
Transform3D Transform3D
Transform3D is a representation of an affine 3D transform.
static ErrorObserver * New()
virtual vtkPolyDataPtr loadVtkPolyData(QString filename)
boost::shared_ptr< class Image > ImagePtr
vtkSmartPointer< vtkImageChangeInformation > vtkImageChangeInformationPtr
cstring_cast_Placeholder cstring_cast(const T &val)
virtual DataPtr load(const QString &uid, const QString &filename)
boost::shared_ptr< DataReader > DataReaderPtr
vtkPolyDataPtr loadVtkPolyData(QString filename)
boost::shared_ptr< class Data > DataPtr
virtual void Execute(vtkObject *caller, unsigned long, void *text)
vtkSmartPointer< class vtkMetaImageReader > vtkMetaImageReaderPtr
boost::shared_ptr< class CustomMetaImage > CustomMetaImagePtr
vtkSmartPointer< class vtkPolyData > vtkPolyDataPtr
virtual bool readInto(DataPtr data, QString path)
vtkSmartPointer< class vtkSTLReader > vtkSTLReaderPtr
vtkSmartPointer< class vtkPNGReader > vtkPNGReaderPtr
vtkSmartPointer< class vtkMetaImageWriter > vtkMetaImageWriterPtr
virtual DataPtr load(const QString &uid, const QString &filename)
QString changeExtension(QString name, QString ext)
void readInto(DataPtr data, QString path)
virtual vtkImageDataPtr loadVtkImageData(QString filename)
static bool checkedRead(vtkSmartPointer< vtkAlgorithm > reader, QString filename)
Reader for portable network graphics .png files.
vtkSmartPointer< class vtkPolyDataReader > vtkPolyDataReaderPtr
virtual bool readInto(DataPtr data, QString path)
boost::shared_ptr< class Mesh > MeshPtr
vtkImageDataPtr loadVtkImageData(QString filename)
virtual DataPtr load(const QString &uid, const QString &filename)