Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "mitkNavigationDataObjectVisualizationFilter.h"
00018
00019 #include "mitkDataStorage.h"
00020
00021
00022 mitk::NavigationDataObjectVisualizationFilter::NavigationDataObjectVisualizationFilter()
00023 : NavigationDataToNavigationDataFilter(),
00024 m_RepresentationList(), m_TransformPosition(), m_TransformOrientation()
00025 {
00026 }
00027
00028
00029 mitk::NavigationDataObjectVisualizationFilter::~NavigationDataObjectVisualizationFilter()
00030 {
00031 m_RepresentationList.clear();
00032 }
00033
00034
00035 const mitk::BaseData* mitk::NavigationDataObjectVisualizationFilter::GetRepresentationObject(unsigned int idx)
00036 {
00037
00038
00039
00040
00041
00042
00043
00044 RepresentationPointerMap::const_iterator iter = m_RepresentationList.find(idx);
00045 if (iter != m_RepresentationList.end())
00046 return iter->second;
00047
00048 return NULL;
00049 }
00050
00051
00052 void mitk::NavigationDataObjectVisualizationFilter::SetRepresentationObject(unsigned int idx, BaseData* data)
00053 {
00054
00055
00056
00057
00058
00059
00060
00061
00062 m_RepresentationList[idx] = RepresentationPointer(data);
00063
00064
00065
00066 }
00067
00068
00069 void mitk::NavigationDataObjectVisualizationFilter::GenerateData()
00070 {
00071
00072 DataObjectPointerArray inputs = this->GetInputs();
00073 for (unsigned int index=0; index < inputs.size(); index++)
00074 {
00075
00076 const mitk::NavigationData* nd = this->GetInput(index);
00077 assert(nd);
00078
00079 mitk::NavigationData* output = this->GetOutput(index);
00080 assert(output);
00081
00082
00083 if (!nd->IsDataValid())
00084 {
00085 output->SetDataValid(false);
00086 continue;
00087 }
00088 output->Graft(nd);
00089 const mitk::BaseData* data = this->GetRepresentationObject(index);
00090 if (data == NULL)
00091 {
00092 itkWarningMacro("NavigationDataObjectVisualizationFilter: Wrong/No BaseData associated with input.");
00093 return;
00094 }
00095
00096
00097 mitk::AffineTransform3D::Pointer affineTransform = data->GetGeometry()->GetIndexToWorldTransform();
00098 if (affineTransform.IsNull())
00099 {
00100
00101 itkWarningMacro("NavigationDataObjectVisualizationFilter: AffineTransform IndexToWorldTransform not initialized!");
00102 return;
00103 }
00104
00105
00106 mitk::Vector3D spacing = data->GetGeometry()->GetSpacing();
00107
00108 float scale[] = {1.0, 1.0, 1.0};
00109 data->GetGeometry()->SetSpacing(scale);
00110
00111
00112 affineTransform->SetIdentity();
00113
00114
00115 if (this->GetTransformOrientation(index) == true)
00116 {
00117
00118 static itk::QuaternionRigidTransform<double>::Pointer quatTransform = itk::QuaternionRigidTransform<double>::New();
00119
00120 mitk::NavigationData::OrientationType orientation = nd->GetOrientation();
00121
00122 vnl_quaternion<double> doubleQuaternion(orientation.x(), orientation.y(), orientation.z(), orientation.r());
00123 quatTransform->SetIdentity();
00124 quatTransform->SetRotation(doubleQuaternion);
00125 quatTransform->Modified();
00126
00127
00128
00129 static AffineTransform3D::MatrixType m;
00130 mitk::TransferMatrix(quatTransform->GetMatrix(), m);
00131 affineTransform->SetMatrix(m);
00132 }
00133 if (this->GetTransformPosition(index) == true)
00134 {
00136 mitk::Vector3D pos;
00137 pos.Set_vnl_vector(nd->GetPosition().Get_vnl_vector());
00138 affineTransform->SetOffset(pos);
00139 }
00140 affineTransform->Modified();
00141
00142 data->GetGeometry()->SetIndexToWorldTransform(affineTransform);
00143
00144 data->GetGeometry()->SetSpacing(spacing);
00145 data->GetGeometry()->TransferItkToVtkTransform();
00146 data->GetGeometry()->Modified();
00147 data->Modified();
00148 output->SetDataValid(true);
00149 }
00150 }
00151
00152
00153 void mitk::NavigationDataObjectVisualizationFilter::SetTransformPosition( unsigned int index, bool applyTransform )
00154 {
00155 itkDebugMacro("setting TransformPosition for index " << index << " to " << applyTransform);
00156 BooleanInputMap::const_iterator it = this->m_TransformPosition.find(index);
00157 if ((it != this->m_TransformPosition.end()) && (it->second == applyTransform))
00158 return;
00159
00160 this->m_TransformPosition[index] = applyTransform;
00161 this->Modified(); \
00162 }
00163
00164
00165 bool mitk::NavigationDataObjectVisualizationFilter::GetTransformPosition( unsigned int index ) const
00166 {
00167 itkDebugMacro("returning TransformPosition for index " << index);
00168 BooleanInputMap::const_iterator it = this->m_TransformPosition.find(index);
00169 if (it != this->m_TransformPosition.end())
00170 return it->second;
00171 else
00172 return true;
00173 }
00174
00175
00176 void mitk::NavigationDataObjectVisualizationFilter::TransformPositionOn( unsigned int index )
00177 {
00178 this->SetTransformPosition(index, true);
00179 }
00180
00181
00182 void mitk::NavigationDataObjectVisualizationFilter::TransformPositionOff( unsigned int index )
00183 {
00184 this->SetTransformPosition(index, false);
00185 }
00186
00187
00188 void mitk::NavigationDataObjectVisualizationFilter::SetTransformOrientation( unsigned int index, bool applyTransform )
00189 {
00190 itkDebugMacro("setting TransformOrientation for index " << index << " to " << applyTransform);
00191 BooleanInputMap::const_iterator it = this->m_TransformOrientation.find(index);
00192 if ((it != this->m_TransformOrientation.end()) && (it->second == applyTransform))
00193 return;
00194
00195 this->m_TransformOrientation[index] = applyTransform;
00196 this->Modified(); \
00197 }
00198
00199
00200 bool mitk::NavigationDataObjectVisualizationFilter::GetTransformOrientation( unsigned int index ) const
00201 {
00202 itkDebugMacro("returning TransformOrientation for index " << index);
00203 BooleanInputMap::const_iterator it = this->m_TransformOrientation.find(index);
00204 if (it != this->m_TransformOrientation.end())
00205 return it->second;
00206 else
00207 return true;
00208 }
00209
00210
00211 void mitk::NavigationDataObjectVisualizationFilter::TransformOrientationOn( unsigned int index )
00212 {
00213 this->SetTransformOrientation(index, true);
00214 }
00215
00216
00217 void mitk::NavigationDataObjectVisualizationFilter::TransformOrientationOff( unsigned int index )
00218 {
00219 this->SetTransformOrientation(index, false);
00220 }