23 if (
const auto *prop =
29 if (!transferfunction)
32 auto element =
new TiXmlElement(
"TransferFunction");
35 auto scalarOpacityPointlist =
new TiXmlElement(
"ScalarOpacity");
38 for (
auto iter = scalarOpacityPoints.begin(); iter != scalarOpacityPoints.end(); ++iter)
40 auto pointel =
new TiXmlElement(
"point");
41 pointel->SetAttribute(
"x", boost::lexical_cast<std::string>(iter->first));
42 pointel->SetAttribute(
"y", boost::lexical_cast<std::string>(iter->second));
43 scalarOpacityPointlist->LinkEndChild(pointel);
45 element->LinkEndChild(scalarOpacityPointlist);
47 auto gradientOpacityPointlist =
new TiXmlElement(
"GradientOpacity");
49 for (
auto iter = gradientOpacityPoints.begin(); iter != gradientOpacityPoints.end(); ++iter)
51 auto pointel =
new TiXmlElement(
"point");
52 pointel->SetAttribute(
"x", boost::lexical_cast<std::string>(iter->first));
53 pointel->SetAttribute(
"y", boost::lexical_cast<std::string>(iter->second));
54 gradientOpacityPointlist->LinkEndChild(pointel);
56 element->LinkEndChild(gradientOpacityPointlist);
62 auto pointlist =
new TiXmlElement(
"Color");
63 for (
int i = 0; i < ctf->GetSize(); i++)
66 ctf->GetNodeValue(i, myVal);
67 auto pointel =
new TiXmlElement(
"point");
68 pointel->SetAttribute(
"x", boost::lexical_cast<std::string>(myVal[0]));
69 pointel->SetAttribute(
"r", boost::lexical_cast<std::string>(myVal[1]));
70 pointel->SetAttribute(
"g", boost::lexical_cast<std::string>(myVal[2]));
71 pointel->SetAttribute(
"b", boost::lexical_cast<std::string>(myVal[3]));
72 pointel->SetAttribute(
"midpoint", boost::lexical_cast<std::string>(myVal[4]));
73 pointel->SetAttribute(
"sharpness", boost::lexical_cast<std::string>(myVal[5]));
74 pointlist->LinkEndChild(pointel);
76 element->LinkEndChild(pointlist);
88 TiXmlElement *s = tfps->Serialize();
92 MITK_ERROR <<
"cant serialize transfer function";
97 TiXmlDocument document;
98 auto decl =
new TiXmlDeclaration(
102 document.LinkEndChild(decl);
104 auto version =
new TiXmlElement(
"Version");
105 version->SetAttribute(
"TransferfunctionVersion", 1);
107 document.LinkEndChild(version);
108 document.LinkEndChild(s);
110 if (!document.SaveFile(filename))
112 MITK_ERROR <<
"Could not write scene to " << filename <<
"\nTinyXML reports '" << document.ErrorDesc() <<
"'";
128 TiXmlElement *scalarOpacityPointlist = element->FirstChildElement(
"ScalarOpacity");
129 if (scalarOpacityPointlist ==
nullptr)
134 tf->ClearScalarOpacityPoints();
138 for (TiXmlElement *pointElement = scalarOpacityPointlist->FirstChildElement(
"point"); pointElement !=
nullptr;
139 pointElement = pointElement->NextSiblingElement(
"point"))
143 if (pointElement->QueryStringAttribute(
"x", &x) != TIXML_SUCCESS)
145 if (pointElement->QueryStringAttribute(
"y", &y) != TIXML_SUCCESS)
147 tf->AddScalarOpacityPoint(boost::lexical_cast<double>(x), boost::lexical_cast<double>(y));
150 TiXmlElement *gradientOpacityPointlist = element->FirstChildElement(
"GradientOpacity");
151 if (gradientOpacityPointlist ==
nullptr)
156 tf->ClearGradientOpacityPoints();
158 for (TiXmlElement *pointElement = gradientOpacityPointlist->FirstChildElement(
"point"); pointElement !=
nullptr;
159 pointElement = pointElement->NextSiblingElement(
"point"))
163 if (pointElement->QueryStringAttribute(
"x", &x) != TIXML_SUCCESS)
165 if (pointElement->QueryStringAttribute(
"y", &y) != TIXML_SUCCESS)
167 tf->AddGradientOpacityPoint(boost::lexical_cast<double>(x), boost::lexical_cast<double>(y));
170 TiXmlElement *rgbPointlist = element->FirstChildElement(
"Color");
171 if (rgbPointlist ==
nullptr)
175 vtkColorTransferFunction *ctf = tf->GetColorTransferFunction();
181 ctf->RemoveAllPoints();
183 for (TiXmlElement *pointElement = rgbPointlist->FirstChildElement(
"point"); pointElement !=
nullptr;
184 pointElement = pointElement->NextSiblingElement(
"point"))
187 std::string r, g, b, midpoint, sharpness;
188 if (pointElement->QueryStringAttribute(
"x", &x) != TIXML_SUCCESS)
190 if (pointElement->QueryStringAttribute(
"r", &r) != TIXML_SUCCESS)
192 if (pointElement->QueryStringAttribute(
"g", &g) != TIXML_SUCCESS)
194 if (pointElement->QueryStringAttribute(
"b", &b) != TIXML_SUCCESS)
196 if (pointElement->QueryStringAttribute(
"midpoint", &midpoint) != TIXML_SUCCESS)
198 if (pointElement->QueryStringAttribute(
"sharpness", &sharpness) != TIXML_SUCCESS)
200 ctf->AddRGBPoint(boost::lexical_cast<double>(x),
201 boost::lexical_cast<double>(r),
202 boost::lexical_cast<double>(g),
203 boost::lexical_cast<double>(b),
204 boost::lexical_cast<double>(midpoint),
205 boost::lexical_cast<double>(sharpness));
208 catch (boost::bad_lexical_cast &e)
210 MITK_ERROR <<
"Could not parse string as number: " << e.what();
219 const char *filePath)
221 TiXmlDocument document(filePath);
223 if (!document.LoadFile())
225 MITK_ERROR <<
"Could not open/read/parse " << filePath <<
"\nTinyXML reports: " << document.ErrorDesc()
232 TiXmlElement *versionObject = document.FirstChildElement(
"Version");
235 if (versionObject->QueryIntAttribute(
"TransferfunctionVersion", &fileVersion) != TIXML_SUCCESS)
237 MITK_WARN <<
"Transferfunction file " << filePath
238 <<
" does not contain version information! Trying version 1 format.";
242 TiXmlElement *input = document.FirstChildElement(
"TransferFunction");
253 MITK_WARN <<
"Can't deserialize transfer function";
virtual vtkColorTransferFunction * GetColorTransferFunction()
Get/Set wrapped vtk transfer function.
The TransferFunctionProperty class Property class for the mitk::TransferFunction. ...
static bool SerializeTransferFunction(const char *filename, TransferFunction::Pointer tf)
~TransferFunctionPropertySerializer() override
BaseProperty::Pointer Deserialize(TiXmlElement *element) override
Deserializes given TiXmlElement.
TiXmlElement * Serialize() override
Serializes given BaseProperty object.
The TransferFunction class A wrapper class for VTK scalar opacity, gradient opacity, and color transfer functions.Holds a copy of each of the three standard VTK transfer functions (scalar opacity, gradient opacity, color) and provides an interface for manipulating their control points. Each original function can be retrieved by a Get() method.
DataCollection - Class to facilitate loading/accessing structured data.
static TransferFunction::Pointer DeserializeTransferFunction(const char *filePath)
TransferFunction::ControlPoints & GetScalarOpacityPoints()
Get a copy of the scalar opacity transfer function control-points.
Convenience class to temporarily change the current locale.
MITK_REGISTER_SERIALIZER(TransferFunctionPropertySerializer)
std::vector< std::pair< double, double > > ControlPoints
BaseProperty::ConstPointer m_Property
TransferFunctionPropertySerializer()
TransferFunction::ControlPoints & GetGradientOpacityPoints()
Get a copy of the gradient opacity transfer function control-points.