17 #ifndef __itkMetaDTITubeConverter_txx
18 #define __itkMetaDTITubeConverter_txx
27 template <
unsigned int NDimensions>
36 template <
unsigned int NDimensions>
42 typename DTITubeSpatialObjectType::Pointer tub =
43 DTITubeSpatialObjectType::New();
44 double spacing[NDimensions];
46 unsigned int ndims = tube->NDims();
47 for(
unsigned int ii=0;ii<ndims;ii++)
49 spacing[ii]=tube->ElementSpacing()[ii];
52 tub->GetIndexToObjectTransform()->SetScaleComponent(spacing);
53 tub->GetProperty()->SetName(tube->Name());
54 tub->SetParentPoint(tube->ParentPoint());
55 tub->SetId(tube->ID());
56 tub->SetParentId(tube->ParentID());
57 tub->GetProperty()->SetRed(tube->Color()[0]);
58 tub->GetProperty()->SetGreen(tube->Color()[1]);
59 tub->GetProperty()->SetBlue(tube->Color()[2]);
60 tub->GetProperty()->SetAlpha(tube->Color()[3]);
63 typedef TubePointType* TubePointPointer;
65 typedef MetaDTITube::PointListType ListType;
66 ListType::iterator it2 = tube->GetPoints().begin();
73 for(
unsigned int identifier=0;identifier< tube->GetPoints().size();identifier++)
77 typedef typename DTITubeSpatialObjectType::PointType PointType;
80 for(
unsigned int ii=0;ii<ndims;ii++)
82 point[ii]=(*it2)->m_X[ii];
86 const DTITubePnt::FieldListType & metaFields = (*it2)->GetExtraFields();
87 DTITubePnt::FieldListType::const_iterator extraIt = metaFields.begin();
88 while(extraIt != metaFields.end())
91 if( ((*extraIt).first !=
"r")
92 && ((*extraIt).first !=
"v1x")
93 && ((*extraIt).first !=
"v1y")
94 && ((*extraIt).first !=
"v1z")
95 && ((*extraIt).first !=
"v2x")
96 && ((*extraIt).first !=
"v2y")
97 && ((*extraIt).first !=
"v2z")
98 && ((*extraIt).first !=
"tx")
99 && ((*extraIt).first !=
"ty")
100 && ((*extraIt).first !=
"tz")
101 && ((*extraIt).first !=
"red")
102 && ((*extraIt).first !=
"green")
103 && ((*extraIt).first !=
"blue")
104 && ((*extraIt).first !=
"alpha")
105 && ((*extraIt).first !=
"id")
108 pnt.AddField((*extraIt).first.c_str(),(*extraIt).second);
113 pnt.SetPosition(point);
115 float* tensor =
new float[6];
117 for(
unsigned int ii=0;ii<6;ii++)
119 tensor[ii]=(*it2)->m_TensorMatrix[ii];
121 pnt.SetTensorMatrix(tensor);
127 if((*it2)->GetField(
"r") != -1)
129 pnt.SetRadius((*it2)->GetField(
"r"));
132 if((*it2)->GetField(
"v1x") != -1)
134 v[0]= (*it2)->GetField(
"v1x");
135 v[1]= (*it2)->GetField(
"v1y");
138 v[2]= (*it2)->GetField(
"v1z");
144 if((*it2)->GetField(
"v2x") != -1)
146 v[0]= (*it2)->GetField(
"v2x");
147 v[1]= (*it2)->GetField(
"v2y");
150 v[2]= (*it2)->GetField(
"v2z");
155 if((*it2)->GetField(
"tx") != -1)
157 t[0]= (*it2)->GetField(
"tx");
158 t[1]= (*it2)->GetField(
"ty");
161 t[2]= (*it2)->GetField(
"tz");
167 if((*it2)->GetField(
"red") != -1)
169 pnt.SetRed((*it2)->GetField(
"red"));
172 if((*it2)->GetField(
"green") != -1)
174 pnt.SetGreen((*it2)->GetField(
"green"));
177 if((*it2)->GetField(
"blue") != -1)
179 pnt.SetBlue((*it2)->GetField(
"blue"));
182 if((*it2)->GetField(
"alpha") != -1)
184 pnt.SetAlpha((*it2)->GetField(
"alpha"));
187 if((*it2)->GetField(
"id") != -1)
189 pnt.SetID((
int)((*it2)->GetField(
"id")));
192 tub->GetPoints().push_back(pnt);
200 template <
unsigned int NDimensions>
205 MetaDTITube* tube =
new MetaDTITube(NDimensions);
208 bool writeNormal1 =
false;
209 bool writeNormal2 =
false;
210 bool writeTangent =
false;
211 bool writeRadius =
false;
212 bool writeColor =
false;
213 bool writeAlpha =
false;
214 bool writeID =
false;
216 typename SpatialObjectType::PointListType::const_iterator i;
217 for(i = dynamic_cast<SpatialObjectType*>(spatialObject)->GetPoints().begin();
222 if((*i).GetID() != -1)
227 if((*i).GetRadius() != 0)
233 for(d=0;d<NDimensions;d++)
235 if((*i).GetNormal1()[d] != 0)
239 if((*i).GetNormal2()[d] != 0)
243 if((*i).GetTangent()[d] != 0)
250 if( ((*i).GetRed() != 1.0)
251 || ((*i).GetGreen() != 0.0)
252 || ((*i).GetBlue() != 0.0)
258 if((*i).GetAlpha() != 1.0)
265 for(i = dynamic_cast<SpatialObjectType*>(spatialObject)->GetPoints().begin();
269 DTITubePnt* pnt =
new DTITubePnt(NDimensions);
271 for(
unsigned int d=0;d<NDimensions;d++)
273 pnt->m_X[d] = (*i).GetPosition()[d];
276 const DTITubePnt::FieldListType & metaFields = (*i).GetFields();
277 DTITubePnt::FieldListType::const_iterator extraIt = metaFields.begin();
278 while(extraIt != metaFields.end())
280 pnt->AddField((*extraIt).first.c_str(),(*extraIt).second);
284 for(
unsigned int d=0;d<6;d++)
286 pnt->m_TensorMatrix[d]=(*i).GetTensorMatrix()[d];
292 pnt->AddField(
"id",(*i).GetID());
297 pnt->AddField(
"r",(*i).GetRadius());
302 pnt->AddField(
"v1x",(*i).GetNormal1()[0]);
303 pnt->AddField(
"v1y",(*i).GetNormal1()[1]);
306 pnt->AddField(
"v1z",(*i).GetNormal1()[2]);
312 pnt->AddField(
"v2x",(*i).GetNormal2()[0]);
313 pnt->AddField(
"v2y",(*i).GetNormal2()[1]);
316 pnt->AddField(
"v2z",(*i).GetNormal2()[2]);
322 pnt->AddField(
"tx",(*i).GetTangent()[0]);
323 pnt->AddField(
"ty",(*i).GetTangent()[1]);
326 pnt->AddField(
"tz",(*i).GetTangent()[2]);
333 pnt->AddField(
"red",(*i).GetRed());
334 pnt->AddField(
"green",(*i).GetGreen());
335 pnt->AddField(
"blue",(*i).GetBlue());
340 pnt->AddField(
"alpha",(*i).GetAlpha());
343 tube->GetPoints().push_back(pnt);
346 tube->PointDim(
"x y z tensor1 tensor2 tensor3 tensor4 tensor5 tensor6");
349 for(
unsigned int ii=0;ii<4;ii++)
355 tube->ID( spatialObject->
GetId());
359 tube->ParentID(spatialObject->
GetParent()->GetId());
362 tube->NPoints(tube->GetPoints().size());
364 for(
unsigned int ii=0;ii<NDimensions;ii++)
374 template <
unsigned int NDimensions>
380 MetaDTITube* Tube =
new MetaDTITube();
382 spatialObject = MetaDTITubeToDTITubeSpatialObject(Tube);
384 return spatialObject;
389 template <
unsigned int NDimensions>
394 MetaDTITube* Tube = DTITubeSpatialObjectToMetaDTITube(spatialObject);