17 #ifndef __itkMetaSceneConverter_txx
18 #define __itkMetaSceneConverter_txx
58 template <
unsigned int NDimensions,
typename PixelType,
typename TMeshTraits>
65 m_BinaryPoints =
false;
66 m_TransformPrecision = 6;
67 m_WriteImagesInSeparateFile =
false;
71 template <
unsigned int NDimensions,
typename PixelType,
typename TMeshTraits>
77 template <
unsigned int NDimensions,
typename PixelType,
typename TMeshTraits>
82 typename SpatialObjectType::TransformType::InputPointType center =
90 for (
unsigned int row = 0; row<NDimensions; row++)
92 for(
unsigned int col = 0; col<NDimensions; col++)
94 m_Orientation[p++] = matrix[row][col];
98 for (
unsigned int i = 0; i<NDimensions; i++)
100 m_Position[i] = offset[i];
101 m_CenterOfRotation[i] = center[i];
104 obj->CenterOfRotation(m_CenterOfRotation);
105 obj->TransformMatrix(m_Orientation);
106 obj->Offset(m_Position);
107 obj->SetDoublePrecision(m_TransformPrecision);
110 template <
unsigned int NDimensions,
typename PixelType,
typename TMeshTraits>
116 SpatialObjectType::TransformType::New();
118 typename SpatialObjectType::TransformType::InputPointType center;
123 for (
unsigned int row = 0; row<NDimensions; row++)
125 for(
unsigned int col = 0; col<NDimensions; col++)
127 matrix[row][col] = (meta->Orientation())[p++];
131 for (
unsigned int i = 0; i<NDimensions; i++)
133 offset[i] = (meta->Position())[i];
134 center[i] = (meta->CenterOfRotation())[i];
144 template <
unsigned int NDimensions,
typename PixelType,
typename TMeshTraits>
151 MetaScene::ObjectListType * list = mScene->GetObjectList();
152 MetaScene::ObjectListType::iterator it = list->begin();
153 MetaScene::ObjectListType::iterator itEnd = list->end();
158 if(!strncmp((*it)->ObjectTypeName(),
"Tube",4))
161 if(!strncmp((*it)->ObjectSubTypeName(),
"Vessel",6))
166 (MetaVesselTube*)*it);
167 this->SetTransform(so, *it);
168 soScene->AddSpatialObject(so);
170 else if(!strncmp((*it)->ObjectSubTypeName(),
"DTI",3))
176 this->SetTransform(so, *it);
177 soScene->AddSpatialObject(so);
184 this->SetTransform(so, *it);
185 soScene->AddSpatialObject(so);
189 if(!strncmp((*it)->ObjectTypeName(),
"Group",5) ||
190 !strncmp((*it)->ObjectTypeName(),
"AffineTransform",15))
195 this->SetTransform(so, *it);
196 soScene->AddSpatialObject(so);
199 if(!strncmp((*it)->ObjectTypeName(),
"Ellipse",7))
204 this->SetTransform(so, *it);
205 soScene->AddSpatialObject( so);
208 if(!strncmp((*it)->ObjectTypeName(),
"Arrow",5))
213 this->SetTransform(so, *it);
214 soScene->AddSpatialObject( so);
217 if(!strncmp((*it)->ObjectTypeName(),
"Image",5))
220 if(!strncmp((*it)->ObjectSubTypeName(),
"Mask",6))
225 this->SetTransform(so, *it);
226 soScene->AddSpatialObject(so);
233 this->SetTransform(so, *it);
234 soScene->AddSpatialObject(so);
238 if(!strncmp((*it)->ObjectTypeName(),
"Blob",4))
243 this->SetTransform(so, *it);
247 if(!strncmp((*it)->ObjectTypeName(),
"Landmark",8))
256 if(!strncmp((*it)->ObjectTypeName(),
"Surface",7))
261 this->SetTransform(so, *it);
262 soScene->AddSpatialObject( so);
265 if(!strncmp((*it)->ObjectTypeName(),
"Line",4))
270 this->SetTransform(so, *it);
271 soScene->AddSpatialObject( so);
274 if(!strncmp((*it)->ObjectTypeName(),
"Mesh",4))
280 this->SetTransform(so, *it);
281 soScene->AddSpatialObject( so);
284 if(!strncmp((*it)->ObjectTypeName(),
"Contour",7))
296 soScene->FixHierarchy();
303 template <
unsigned int NDimensions,
typename PixelType,
typename TMeshTraits>
308 MetaScene* mScene =
new MetaScene;
311 mScene->SetEvent(m_Event);
314 ScenePointer soScene = CreateSpatialObjectScene(mScene);
321 template <
unsigned int NDimensions,
typename PixelType,
typename TMeshTraits>
326 MetaScene * metaScene =
new MetaScene(NDimensions);
328 metaScene->BinaryData(m_BinaryPoints);
330 float* spacing =
new float[NDimensions];
331 for(
unsigned int i=0;i<NDimensions;i++)
335 metaScene->ElementSpacing(spacing);
340 ListType * childrenList = scene->
GetObjects(depth, name);
341 typename ListType::iterator it = childrenList->begin();
342 typename ListType::iterator itEnd = childrenList->end();
346 if(!strncmp((*it)->GetTypeName(),
"GroupSpatialObject",18) ||
347 !strncmp((*it)->GetTypeName(),
"AffineTransformSpatialObject",28))
352 (*it).GetPointer()));
353 if((*it)->GetParent())
355 group->ParentID((*it)->GetParent()->GetId());
357 group->Name((*it)->GetProperty()->GetName().c_str());
358 this->SetTransform(group, (*it)->GetObjectToParentTransform());
359 metaScene->AddObject(group);
361 if(!strncmp((*it)->GetTypeName(),
"TubeSpatialObject",17))
366 (*it).GetPointer()));
367 if((*it)->GetParent())
369 tube->ParentID((*it)->GetParent()->GetId());
371 tube->Name((*it)->GetProperty()->GetName().c_str());
372 this->SetTransform(tube, (*it)->GetObjectToParentTransform());
373 metaScene->AddObject(tube);
376 if(!strncmp((*it)->GetTypeName(),
"VesselTubeSpatialObject",23))
381 (*it).GetPointer()));
382 if((*it)->GetParent())
384 tube->ParentID((*it)->GetParent()->GetId());
386 tube->Name((*it)->GetProperty()->GetName().c_str());
387 this->SetTransform(tube, (*it)->GetObjectToParentTransform());
388 metaScene->AddObject(tube);
391 if(!strncmp((*it)->GetTypeName(),
"DTITubeSpatialObject",20))
396 (*it).GetPointer()));
397 if((*it)->GetParent())
399 tube->ParentID((*it)->GetParent()->GetId());
401 tube->Name((*it)->GetProperty()->GetName().c_str());
402 this->SetTransform(tube, (*it)->GetObjectToParentTransform());
403 metaScene->AddObject(tube);
406 if(!strncmp((*it)->GetTypeName(),
"EllipseSpatialObject",20))
411 (*it).GetPointer()));
413 if((*it)->GetParent())
415 ellipse->ParentID((*it)->GetParent()->GetId());
417 ellipse->Name((*it)->GetProperty()->GetName().c_str());
418 this->SetTransform(ellipse, (*it)->GetObjectToParentTransform());
419 metaScene->AddObject(ellipse);
423 if(!strncmp((*it)->GetTypeName(),
"ArrowSpatialObject",18))
428 (*it).GetPointer()));
430 if((*it)->GetParent())
432 arrow->ParentID((*it)->GetParent()->GetId());
434 arrow->Name((*it)->GetProperty()->GetName().c_str());
435 this->SetTransform(arrow, (*it)->GetObjectToParentTransform());
436 metaScene->AddObject(arrow);
439 if(!strncmp((*it)->GetTypeName(),
"ImageSpatialObject",17)
440 || !strncmp((*it)->GetTypeName(),
"ImageMaskSpatialObject",21))
443 if(!strncmp((*it)->GetTypeName(),
"ImageMaskSpatialObject",21))
448 (*it).GetPointer()));
449 image->ObjectSubTypeName(
"Mask");
456 (*it).GetPointer()));
459 if((*it)->GetParent())
461 image->ParentID((*it)->GetParent()->GetId());
464 if(m_WriteImagesInSeparateFile)
466 if((*it)->GetProperty()->GetName().size() == 0)
468 std::cout <<
"Error: you should set the image name when using"
469 <<
" WriteImagesInSeparateFile." << std::endl;
470 std::cout <<
"The image will be written locally." << std::endl;
471 image->ElementDataFileName(
"LOCAL");
475 std::string filename = (*it)->GetProperty()->GetName();
477 image->ElementDataFileName(filename.c_str());
482 image->ElementDataFileName(
"LOCAL");
485 image->BinaryData(
true);
486 image->Name((*it)->GetProperty()->GetName().c_str());
487 this->SetTransform(image, (*it)->GetObjectToParentTransform());
488 metaScene->AddObject(image);
491 if(!strncmp((*it)->GetTypeName(),
"BlobSpatialObject",17))
496 (*it).GetPointer()));
497 if((*it)->GetParent())
499 blob->ParentID((*it)->GetParent()->GetId());
501 blob->BinaryData(
true);
502 blob->Name((*it)->GetProperty()->GetName().c_str());
503 this->SetTransform(blob, (*it)->GetObjectToParentTransform());
504 metaScene->AddObject(blob);
507 if(!strncmp((*it)->GetTypeName(),
"LandmarkSpatialObject",20))
512 (*it).GetPointer()));
513 if((*it)->GetParent())
515 landmark->ParentID((*it)->GetParent()->GetId());
517 landmark->BinaryData(
true);
518 landmark->Name((*it)->GetProperty()->GetName().c_str());
519 metaScene->AddObject(landmark);
522 if(!strncmp((*it)->GetTypeName(),
"ContourSpatialObject",20))
527 (*it).GetPointer()));
528 if((*it)->GetParent())
530 contour->ParentID((*it)->GetParent()->GetId());
532 contour->BinaryData(
true);
533 contour->Name((*it)->GetProperty()->GetName().c_str());
534 metaScene->AddObject(contour);
537 if(!strncmp((*it)->GetTypeName(),
"SurfaceSpatialObject",20))
542 (*it).GetPointer()));
543 if((*it)->GetParent())
545 surface->ParentID((*it)->GetParent()->GetId());
547 surface->Name((*it)->GetProperty()->GetName().c_str());
548 this->SetTransform(surface, (*it)->GetObjectToParentTransform());
549 metaScene->AddObject(surface);
552 if(!strncmp((*it)->GetTypeName(),
"LineSpatialObject",17))
557 (*it).GetPointer()));
558 if((*it)->GetParent())
560 line->ParentID((*it)->GetParent()->GetId());
562 line->Name((*it)->GetProperty()->GetName().c_str());
563 this->SetTransform(line, (*it)->GetObjectToParentTransform());
564 metaScene->AddObject(line);
567 if(!strncmp((*it)->GetTypeName(),
"MeshSpatialObject",17))
573 if((*it)->GetParent())
575 mesh->ParentID((*it)->GetParent()->GetId());
577 mesh->Name((*it)->GetProperty()->GetName().c_str());
578 this->SetTransform(mesh, (*it)->GetObjectToParentTransform());
579 metaScene->AddObject(mesh);
593 template <
unsigned int NDimensions,
typename PixelType,
typename TMeshTraits>
597 unsigned int depth,
char * soName)
599 MetaScene * metaScene = this->CreateMetaScene(scene, depth, soName);
601 metaScene->Write(fileName);