mitk::TransferFunction::Pointer mitk::TransferFunctionPropertySerializer::DeserializeTransferFunction( const char *filePath ) { TiXmlDocument document( filePath ); if (!document.LoadFile()) { MITK_ERROR << "Could not open/read/parse " << filePath << "\nTinyXML reports: " << document.ErrorDesc() << std::endl; return NULL; } // find version node --> note version in some variable int fileVersion = 1; TiXmlElement* versionObject = document.FirstChildElement("Version"); if (versionObject) { if ( versionObject->QueryIntAttribute( "TransferfunctionVersion", &fileVersion ) != TIXML_SUCCESS ) { MITK_WARN << "Transferfunction file " << filePath << " does not contain version information! Trying version 1 format."; } } TiXmlElement* input = document.FirstChildElement("TransferFunction"); TransferFunctionPropertySerializer::Pointer tfpd = TransferFunctionPropertySerializer::New(); BaseProperty::Pointer bp = tfpd->Deserialize(input); TransferFunctionProperty::Pointer tfp = dynamic_cast<TransferFunctionProperty*>(bp.GetPointer()); if(tfp.IsNotNull()) { TransferFunction::Pointer tf = tfp->GetValue(); return tf; } MITK_WARN << "Can't deserialize transferfunction"; return NULL; }
bool mitk::PropertyListDeserializerV1::Deserialize() { bool error(false); m_PropertyList = PropertyList::New(); TiXmlDocument document( m_Filename ); if (!document.LoadFile()) { MITK_ERROR << "Could not open/read/parse " << m_Filename << "\nTinyXML reports: " << document.ErrorDesc() << std::endl; return false; } for( TiXmlElement* propertyElement = document.FirstChildElement("property"); propertyElement != NULL; propertyElement = propertyElement->NextSiblingElement("property") ) { const char* keya = propertyElement->Attribute("key"); std::string key( keya ? keya : ""); const char* typea = propertyElement->Attribute("type"); std::string type( typea ? typea : ""); // hand propertyElement to specific reader std::stringstream propertyDeserializerClassName; propertyDeserializerClassName << type << "Serializer"; std::list<itk::LightObject::Pointer> readers = itk::ObjectFactoryBase::CreateAllInstance(propertyDeserializerClassName.str().c_str()); if (readers.size() < 1) { MITK_ERROR << "No property reader found for " << type; error = true; } if (readers.size() > 1) { MITK_WARN << "Multiple property readers found for " << type << ". Using arbitrary first one."; } for ( std::list<itk::LightObject::Pointer>::iterator iter = readers.begin(); iter != readers.end(); ++iter ) { if (BasePropertySerializer* reader = dynamic_cast<BasePropertySerializer*>( iter->GetPointer() ) ) { BaseProperty::Pointer property = reader->Deserialize( propertyElement->FirstChildElement() ); if (property.IsNotNull()) { m_PropertyList->ReplaceProperty(key, property); } else { MITK_ERROR << "There were errors while loding property '" << key << "' of type " << type << ". Your data may be corrupted"; error = true; } break; } } } return !error; }
bool mitk::CheckUID(const mitk::BaseData* data, const NodeUIDType& uid) { bool result = false; BaseProperty::Pointer uidProp = data->GetProperty(mitk::Prop_UID); if (uidProp.IsNotNull()) { result = uidProp->GetValueAsString() == uid; } return result; };
mitk::NodeUIDType mitk::EnsureUID(mitk::BaseData* data) { if (!data) { mitkThrow() << "Cannot ensure node UID. Passed node pointer is nullptr."; } BaseProperty::Pointer uidProp = data->GetProperty(mitk::Prop_UID); std::string propUID = ""; if (uidProp.IsNotNull()) { propUID = uidProp->GetValueAsString(); } else { mitk::UIDGenerator generator; propUID = generator.GetUID(); data->SetProperty(mitk::Prop_UID, mitk::StringProperty::New(propUID)); } return propUID; };