Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "mitkTransferFunctionPropertyDeserializer.h"
00019
00020 namespace mitk {
00021
00022 mitk::TransferFunctionPropertyDeserializer::TransferFunctionPropertyDeserializer()
00023 {
00024 }
00025
00026 mitk::TransferFunctionPropertyDeserializer::~TransferFunctionPropertyDeserializer()
00027 {
00028 }
00029
00030 BaseProperty::Pointer mitk::TransferFunctionPropertyDeserializer::Deserialize(TiXmlElement* element)
00031 {
00032 if (!element)
00033 return NULL;
00034
00035 TransferFunction::Pointer tf = TransferFunction::New();
00036
00037
00038 TiXmlElement* scalarOpacityPointlist = element->FirstChildElement("ScalarOpacity");
00039 if (scalarOpacityPointlist == NULL)
00040 return NULL;
00041
00042 tf->ClearScalarOpacityPoints();
00043
00044 for( TiXmlElement* pointElement = scalarOpacityPointlist->FirstChildElement("point"); pointElement != NULL; pointElement = pointElement->NextSiblingElement("point"))
00045 {
00046 double x;
00047 double y;
00048 if (pointElement->QueryDoubleAttribute("x", &x) == TIXML_WRONG_TYPE)
00049 return NULL;
00050 if (pointElement->QueryDoubleAttribute("y", &y) == TIXML_WRONG_TYPE)
00051 return NULL;
00052 tf->AddScalarOpacityPoint(x, y);
00053 }
00054
00055 TiXmlElement* gradientOpacityPointlist = element->FirstChildElement("GradientOpacity");
00056 if (gradientOpacityPointlist == NULL)
00057 return NULL;
00058
00059 tf->ClearGradientOpacityPoints();
00060
00061 for( TiXmlElement* pointElement = gradientOpacityPointlist->FirstChildElement("point"); pointElement != NULL; pointElement = pointElement->NextSiblingElement("point"))
00062 {
00063 double x;
00064 double y;
00065 if (pointElement->QueryDoubleAttribute("x", &x) == TIXML_WRONG_TYPE)
00066 return NULL;
00067 if (pointElement->QueryDoubleAttribute("y", &y) == TIXML_WRONG_TYPE)
00068 return NULL;
00069 tf->AddGradientOpacityPoint(x, y);
00070 }
00071
00072 TiXmlElement* rgbPointlist = element->FirstChildElement("Color");
00073 if (rgbPointlist == NULL)
00074 return NULL;
00075 vtkColorTransferFunction* ctf = tf->GetColorTransferFunction();
00076 if (ctf == NULL)
00077 return NULL;
00078
00079 ctf->RemoveAllPoints();
00080
00081 for( TiXmlElement* pointElement = rgbPointlist->FirstChildElement("point"); pointElement != NULL; pointElement = pointElement->NextSiblingElement("point"))
00082 {
00083 double x;
00084 double r,g,b, midpoint, sharpness;
00085 if (pointElement->QueryDoubleAttribute("x", &x) == TIXML_WRONG_TYPE)
00086 return NULL;
00087 if (pointElement->QueryDoubleAttribute("r", &r) == TIXML_WRONG_TYPE)
00088 return NULL;
00089 if (pointElement->QueryDoubleAttribute("g", &g) == TIXML_WRONG_TYPE)
00090 return NULL;
00091 if (pointElement->QueryDoubleAttribute("b", &b) == TIXML_WRONG_TYPE)
00092 return NULL;
00093 if (pointElement->QueryDoubleAttribute("midpoint", &midpoint) == TIXML_WRONG_TYPE)
00094 return NULL;
00095 if (pointElement->QueryDoubleAttribute("sharpness", &sharpness) == TIXML_WRONG_TYPE)
00096 return NULL;
00097 ctf->AddRGBPoint(x, r, g, b, midpoint, sharpness);
00098 }
00099 return TransferFunctionProperty::New(tf).GetPointer();
00100 }
00101
00102 mitk::TransferFunction::Pointer mitk::TransferFunctionPropertyDeserializer::DeserializeTransferFunction( const char *filePath )
00103 {
00104 TiXmlDocument document( filePath );
00105
00106 if (!document.LoadFile())
00107 {
00108 MITK_ERROR << "Could not open/read/parse " << filePath << "\nTinyXML reports: " << document.ErrorDesc() << std::endl;
00109 return NULL;
00110 }
00111
00112
00113 int fileVersion = 1;
00114 TiXmlElement* versionObject = document.FirstChildElement("Version");
00115 if (versionObject)
00116 {
00117 if ( versionObject->QueryIntAttribute( "TransferfunctionVersion", &fileVersion ) != TIXML_SUCCESS )
00118 {
00119 MITK_WARN << "Transferfunction file " << filePath << " does not contain version information! Trying version 1 format.";
00120 }
00121 }
00122
00123 TiXmlElement* input = document.FirstChildElement("TransferFunction");
00124
00125 TransferFunctionPropertyDeserializer::Pointer tfpd = TransferFunctionPropertyDeserializer::New();
00126 BaseProperty::Pointer bp = tfpd->Deserialize(input);
00127 TransferFunctionProperty::Pointer tfp = dynamic_cast<TransferFunctionProperty*>(bp.GetPointer());
00128
00129 if(tfp.IsNotNull())
00130 {
00131 TransferFunction::Pointer tf = tfp->GetValue();
00132 return tf;
00133 }
00134 MITK_WARN << "Can't deserialize transferfunction";
00135 return NULL;
00136 }
00137 }
00138
00139 MITK_REGISTER_SERIALIZER(TransferFunctionPropertyDeserializer);