#include <mitkPlanarFigureWriter.h>
Public Types | |
typedef PlanarFigureWriter | Self |
typedef mitk::FileWriter | Superclass |
typedef itk::SmartPointer< Self > | Pointer |
typedef itk::SmartPointer < const Self > | ConstPointer |
typedef mitk::PlanarFigure | InputType |
typedef InputType::Pointer | InputTypePointer |
Public Member Functions | |
virtual const char * | GetClassName () const |
virtual void | Write () |
virtual void | Update () |
virtual void | SetFileName (const char *_arg) |
virtual const char * | GetFileName () const |
virtual void | SetFilePrefix (const char *_arg) |
virtual const char * | GetFilePrefix () const |
virtual void | SetFilePattern (const char *_arg) |
virtual const char * | GetFilePattern () const |
void | SetInput (InputType *input) |
void | SetInput (const unsigned int &num, InputType *input) |
PlanarFigure * | GetInput () |
PlanarFigure * | GetInput (const unsigned int &num) |
virtual std::vector< std::string > | GetPossibleFileExtensions () |
Return the possible file extensions for the data type associated with the writer. | |
virtual std::string | GetFileExtension () |
Return the extension to be added to the filename. | |
virtual bool | CanWriteDataType (DataNode *) |
Check if the Writer can write the Content of the. | |
virtual std::string | GetWritenMIMEType () |
Return the MimeType of the saved File. | |
virtual void | SetInput (DataNode *) |
Set the DataTreenode as Input. Important: The Writer always have a SetInput-Function. | |
virtual bool | GetSuccess () const |
Static Public Member Functions | |
static Pointer | New () |
Protected Member Functions | |
PlanarFigureWriter () | |
virtual | ~PlanarFigureWriter () |
virtual void | GenerateData () |
virtual void | ResizeInputs (const unsigned int &num) |
TiXmlElement * | CreateXMLVectorElement (const char *name, itk::FixedArray< mitk::ScalarType, 3 > v) |
creates a TinyXML element that contains x, y, and z values | |
Protected Attributes | |
std::string | m_FileName |
std::string | m_FilePrefix |
std::string | m_FilePattern |
std::string | m_Extension |
std::string | m_MimeType |
bool | m_Success |
XML-based writer for mitk::PlanarFigures.
Definition at line 37 of file mitkPlanarFigureWriter.h.
typedef itk::SmartPointer<const Self> mitk::PlanarFigureWriter::ConstPointer |
Reimplemented from mitk::FileWriter.
Definition at line 41 of file mitkPlanarFigureWriter.h.
Definition at line 45 of file mitkPlanarFigureWriter.h.
Definition at line 49 of file mitkPlanarFigureWriter.h.
typedef itk::SmartPointer<Self> mitk::PlanarFigureWriter::Pointer |
Reimplemented from mitk::FileWriter.
Definition at line 41 of file mitkPlanarFigureWriter.h.
Reimplemented from mitk::FileWriter.
Definition at line 41 of file mitkPlanarFigureWriter.h.
Reimplemented from mitk::FileWriter.
Definition at line 41 of file mitkPlanarFigureWriter.h.
mitk::PlanarFigureWriter::PlanarFigureWriter | ( | ) | [protected] |
Constructor.
Definition at line 24 of file mitkPlanarFigureWriter.cpp.
: m_FileName(""), m_FilePrefix(""), m_FilePattern(""), m_Extension(".pf"), m_MimeType("application/MITK.PlanarFigure"), m_Success(false) { this->SetNumberOfRequiredInputs( 1 ); this->SetNumberOfOutputs( 0 ); //this->SetNthOutput( 0, mitk::PlanarFigure::New().GetPointer() ); }
mitk::PlanarFigureWriter::~PlanarFigureWriter | ( | ) | [protected, virtual] |
bool mitk::PlanarFigureWriter::CanWriteDataType | ( | DataNode * | input ) | [virtual] |
Check if the Writer can write the Content of the.
Reimplemented from mitk::FileWriter.
Definition at line 234 of file mitkPlanarFigureWriter.cpp.
References mitk::DataNode::GetData().
{ if ( input == NULL ) return false; mitk::BaseData* data = input->GetData(); if ( data == NULL) return false; mitk::PlanarFigure::Pointer PlanarFigure = dynamic_cast<mitk::PlanarFigure*>( data ); if( PlanarFigure.IsNull() ) return false; // add code for special subclasses here return true; }
TiXmlElement * mitk::PlanarFigureWriter::CreateXMLVectorElement | ( | const char * | name, |
itk::FixedArray< mitk::ScalarType, 3 > | v | ||
) | [protected] |
creates a TinyXML element that contains x, y, and z values
Documentation
[in] | name | the name of the XML element |
[in] | v | the vector or point that contains the x, y and z values |
Definition at line 184 of file mitkPlanarFigureWriter.cpp.
References TiXmlElement::SetDoubleAttribute().
{ TiXmlElement* vElement = new TiXmlElement(name); vElement->SetDoubleAttribute("x", v.GetElement(0)); vElement->SetDoubleAttribute("y", v.GetElement(1)); vElement->SetDoubleAttribute("z", v.GetElement(2)); return vElement; }
void mitk::PlanarFigureWriter::GenerateData | ( | ) | [protected, virtual] |
Writes the a .pf file in xml format that contains all input planar figures
Definition at line 38 of file mitkPlanarFigureWriter.cpp.
References TiXmlDocument::ErrorDesc(), mitk::Geometry3D::GetBounds(), mitk::Geometry3D::GetIndexToWorldTransform(), mitk::Geometry3D::GetOrigin(), mitk::Geometry3D::GetSpacing(), TiXmlNode::LinkEndChild(), MITK_ERROR, TiXmlDocument::SaveFile(), mitk::BasePropertySerializer::Serialize(), TiXmlElement::SetAttribute(), TiXmlElement::SetDoubleAttribute(), and mitk::BasePropertySerializer::SetProperty().
{ m_Success = false; if (m_FileName.empty()) { MITK_ERROR << "Could not write planar figures. File name is invalid"; throw std::invalid_argument("file name is empty"); } TiXmlDocument document; TiXmlDeclaration* decl = new TiXmlDeclaration( "1.0", "", "" ); // TODO what to write here? encoding? etc.... document.LinkEndChild( decl ); TiXmlElement* version = new TiXmlElement("Version"); version->SetAttribute("Writer", __FILE__ ); version->SetAttribute("CVSRevision", "$Revision: 17055 $" ); version->SetAttribute("FileVersion", 1 ); document.LinkEndChild(version); /* create xml element for each input */ for ( unsigned int i = 0 ; i < this->GetNumberOfInputs(); ++i ) { // Create root element for this PlanarFigure InputType::Pointer pf = this->GetInput( i ); if (pf.IsNull()) continue; TiXmlElement* pfElement = new TiXmlElement("PlanarFigure"); pfElement->SetAttribute("type", pf->GetNameOfClass()); document.LinkEndChild(pfElement); PlanarFigure::VertexContainerType* vertices = pf->GetControlPoints(); if (vertices == NULL) continue; // Serialize property list of PlanarFigure mitk::PropertyList::Pointer propertyList = pf->GetPropertyList(); mitk::PropertyList::PropertyMap::const_iterator it; for ( it = propertyList->GetMap()->begin(); it != propertyList->GetMap()->end(); ++it ) { // Create seralizer for this property const mitk::BaseProperty* prop = it->second.first; std::string serializerName = std::string( prop->GetNameOfClass() ) + "Serializer"; std::list< itk::LightObject::Pointer > allSerializers = itk::ObjectFactoryBase::CreateAllInstance( serializerName.c_str() ); if ( allSerializers.size() != 1 ) { // No or too many serializer(s) found, skip this property continue; } mitk::BasePropertySerializer* serializer = dynamic_cast< mitk::BasePropertySerializer* >( allSerializers.begin()->GetPointer() ); if ( serializer == NULL ) { // Serializer not valid; skip this property } TiXmlElement* keyElement = new TiXmlElement( "property" ); keyElement->SetAttribute( "key", it->first ); keyElement->SetAttribute( "type", prop->GetNameOfClass() ); serializer->SetProperty( prop ); TiXmlElement* valueElement = NULL; try { valueElement = serializer->Serialize(); } catch (...) { } if ( valueElement == NULL ) { // Serialization failed; skip this property continue; } // Add value to property element keyElement->LinkEndChild( valueElement ); // Append serialized property to property list pfElement->LinkEndChild( keyElement ); } // Serialize control points of PlanarFigure TiXmlElement* controlPointsElement = new TiXmlElement("ControlPoints"); pfElement->LinkEndChild(controlPointsElement); for (unsigned int i = 0; i < pf->GetNumberOfControlPoints(); i++) { TiXmlElement* vElement = new TiXmlElement("Vertex"); vElement->SetAttribute("id", i); vElement->SetDoubleAttribute("x", pf->GetControlPoint(i)[0]); vElement->SetDoubleAttribute("y", pf->GetControlPoint(i)[1]); controlPointsElement->LinkEndChild(vElement); } TiXmlElement* geoElement = new TiXmlElement("Geometry"); const PlaneGeometry* planeGeo = dynamic_cast<const PlaneGeometry*>(pf->GetGeometry2D()); if (planeGeo != NULL) { // Write parameters of IndexToWorldTransform of the PlaneGeometry typedef mitk::AffineGeometryFrame3D::TransformType TransformType; const TransformType* affineGeometry = planeGeo->GetIndexToWorldTransform(); const TransformType::ParametersType& parameters = affineGeometry->GetParameters(); TiXmlElement* vElement = new TiXmlElement( "transformParam" ); for ( unsigned int i = 0; i < affineGeometry->GetNumberOfParameters(); ++i ) { std::stringstream paramName; paramName << "param" << i; vElement->SetDoubleAttribute( paramName.str().c_str(), parameters.GetElement( i ) ); } geoElement->LinkEndChild( vElement ); // Write bounds of the PlaneGeometry typedef mitk::Geometry3D::BoundsArrayType BoundsArrayType; const BoundsArrayType& bounds = planeGeo->GetBounds(); vElement = new TiXmlElement( "boundsParam" ); for ( unsigned int i = 0; i < 6; ++i ) { std::stringstream boundName; boundName << "bound" << i; vElement->SetDoubleAttribute( boundName.str().c_str(), bounds.GetElement( i ) ); } geoElement->LinkEndChild( vElement ); // Write spacing and origin of the PlaneGeometry Vector3D spacing = planeGeo->GetSpacing(); Point3D origin = planeGeo->GetOrigin(); geoElement->LinkEndChild(this->CreateXMLVectorElement("Spacing", spacing)); geoElement->LinkEndChild(this->CreateXMLVectorElement("Origin", origin)); pfElement->LinkEndChild(geoElement); } } if (document.SaveFile( m_FileName) == false) { MITK_ERROR << "Could not write planar figures to " << m_FileName << "\nTinyXML reports '" << document.ErrorDesc() << "'"; throw std::ios_base::failure("Error during writing of planar figure xml file."); } m_Success = true; }
virtual const char* mitk::PlanarFigureWriter::GetClassName | ( | ) | const [virtual] |
Reimplemented from mitk::FileWriter.
std::string mitk::PlanarFigureWriter::GetFileExtension | ( | ) | [virtual] |
Return the extension to be added to the filename.
Reimplemented from mitk::FileWriter.
Definition at line 272 of file mitkPlanarFigureWriter.cpp.
{ return m_Extension; }
virtual const char* mitk::PlanarFigureWriter::GetFileName | ( | ) | const [virtual] |
Implements mitk::FileWriter.
virtual const char* mitk::PlanarFigureWriter::GetFilePattern | ( | ) | const [virtual] |
Implements mitk::FileWriter.
virtual const char* mitk::PlanarFigureWriter::GetFilePrefix | ( | ) | const [virtual] |
Implements mitk::FileWriter.
mitk::PlanarFigure * mitk::PlanarFigureWriter::GetInput | ( | void | ) |
Definition at line 219 of file mitkPlanarFigureWriter.cpp.
mitk::PlanarFigure * mitk::PlanarFigureWriter::GetInput | ( | const unsigned int & | num ) |
num | the index of the desired output object. |
Definition at line 228 of file mitkPlanarFigureWriter.cpp.
{ return dynamic_cast<InputType*> ( this->ProcessObject::GetInput( num ) ); }
std::vector< std::string > mitk::PlanarFigureWriter::GetPossibleFileExtensions | ( | ) | [virtual] |
Return the possible file extensions for the data type associated with the writer.
Implements mitk::FileWriter.
Definition at line 264 of file mitkPlanarFigureWriter.cpp.
{ std::vector<std::string> possibleFileExtensions; possibleFileExtensions.push_back(m_Extension); return possibleFileExtensions; }
virtual bool mitk::PlanarFigureWriter::GetSuccess | ( | ) | const [virtual] |
std::string mitk::PlanarFigureWriter::GetWritenMIMEType | ( | ) | [virtual] |
Return the MimeType of the saved File.
Reimplemented from mitk::FileWriter.
Definition at line 258 of file mitkPlanarFigureWriter.cpp.
{ return m_MimeType; }
static Pointer mitk::PlanarFigureWriter::New | ( | ) | [static] |
void mitk::PlanarFigureWriter::ResizeInputs | ( | const unsigned int & | num ) | [protected, virtual] |
Resizes the number of inputs of the writer. The inputs are initialized by empty PlanarFigures
num | the new number of inputs |
Definition at line 194 of file mitkPlanarFigureWriter.cpp.
{ //unsigned int prevNum = this->GetNumberOfInputs(); this->SetNumberOfInputs( num ); //for ( unsigned int i = prevNum; i < num; ++i ) //{ // this->SetNthInput( i, mitk::PlanarFigure::New().GetPointer() ); //} }
virtual void mitk::PlanarFigureWriter::SetFileName | ( | const char * | _arg ) | [virtual] |
Sets the filename of the file to write.
FileName | the name of the file to write. |
Implements mitk::FileWriter.
virtual void mitk::PlanarFigureWriter::SetFilePattern | ( | const char * | _arg ) | [virtual] |
Implements mitk::FileWriter.
virtual void mitk::PlanarFigureWriter::SetFilePrefix | ( | const char * | _arg ) | [virtual] |
Implements mitk::FileWriter.
void mitk::PlanarFigureWriter::SetInput | ( | const unsigned int & | num, |
InputType * | input | ||
) |
Sets the n'th input object for the filter. If num is larger than GetNumberOfInputs() the number of inputs is resized appropriately.
input | the n'th input for the filter. |
Definition at line 211 of file mitkPlanarFigureWriter.cpp.
{ if ( id >= this->GetNumberOfInputs() ) this->ResizeInputs( id + 1 ); this->ProcessObject::SetNthInput( id, PlanarFigure ); }
void mitk::PlanarFigureWriter::SetInput | ( | InputType * | input ) |
Sets the 0'th input object for the filter.
input | the first input for the filter. |
Definition at line 205 of file mitkPlanarFigureWriter.cpp.
{ this->ProcessObject::SetNthInput( 0, PlanarFigure ); }
void mitk::PlanarFigureWriter::SetInput | ( | DataNode * | input ) | [virtual] |
Set the DataTreenode as Input. Important: The Writer always have a SetInput-Function.
Reimplemented from mitk::FileWriter.
Definition at line 251 of file mitkPlanarFigureWriter.cpp.
References mitk::DataNode::GetData().
{ if (this->CanWriteDataType(input)) this->ProcessObject::SetNthInput( 0, dynamic_cast<mitk::PlanarFigure*>( input->GetData() ) ); }
virtual void mitk::PlanarFigureWriter::Update | ( | ) | [inline, virtual] |
Definition at line 43 of file mitkPlanarFigureWriter.h.
virtual void mitk::PlanarFigureWriter::Write | ( | ) | [inline, virtual] |
Implements mitk::FileWriter.
Definition at line 43 of file mitkPlanarFigureWriter.h.
std::string mitk::PlanarFigureWriter::m_Extension [protected] |
Definition at line 176 of file mitkPlanarFigureWriter.h.
std::string mitk::PlanarFigureWriter::m_FileName [protected] |
Definition at line 173 of file mitkPlanarFigureWriter.h.
std::string mitk::PlanarFigureWriter::m_FilePattern [protected] |
Definition at line 175 of file mitkPlanarFigureWriter.h.
std::string mitk::PlanarFigureWriter::m_FilePrefix [protected] |
Definition at line 174 of file mitkPlanarFigureWriter.h.
std::string mitk::PlanarFigureWriter::m_MimeType [protected] |
Definition at line 177 of file mitkPlanarFigureWriter.h.
bool mitk::PlanarFigureWriter::m_Success [protected] |
Definition at line 178 of file mitkPlanarFigureWriter.h.