[Insight-users] Trouble reading mesh from meta-file
Dominique Zosso
zosso at tele.ucl.ac.be
Thu Dec 8 18:17:13 EST 2005
Hi Julien,
I still encounter trouble when trying to read the mesh from the file, now. I
try to read "mesh.meta" (in attachment in separate mail) with the code
snippet given below.
The reader crashes with a seg fault in the mittle of execution, no itk
exception being thrown. See console output below.
Normally, the file contains a MeshSpatialObject. However, there seems to be
a problem with some MetaTags? Am I missing something? Are there some errors
in the code below?
Further, assume we COULD read the SpatialObject from the file, we first get
a GroupSpatialObject, is this correct? [at least I read this in the
SoftwareGuide]
We can then extract the children of this group via its GetChildren method
and STL-List dereferencing. Now we have a SmartPointer to a SpatialObject.
But how call the GetMesh-method of the initial MeshSpatialObject? I tried to
typecast the SpatialObject-SmartPointer into a
MeshSpatialObject-SmartPointer, but this looks very ugly to me... Is there
another (an more elegant) way to access the GetMesh-method for this
child-Object? In fact, I cannot find any suitable example in the
SoftwareGuide. Those examples are limited to virtual methods only, that are
already known in SpatialObject.
Thank you in advance,
Dominique
Code snippet:
***********
const unsigned short int Dimension = 3;
// Derive other types from this Base type traits
typedef itk::IndexedTriangleMesh< short int > MeshType;
// typedefs for the mesh reader and writer
typedef itk::Mesh< MeshType::PixelType, Dimension, MeshType::MeshTraits >
NormalMeshType;
typedef itk::MeshSpatialObject< NormalMeshType > MeshSpatialObjectType;
typedef itk::SpatialObject< Dimension > SpatialObjectType;
typedef itk::GroupSpatialObject< Dimension > GroupSpatialObjectType;
typedef itk::SpatialObjectReader< Dimension, NormalMeshType::PixelType,
NormalMeshType::MeshTraits > MeshReaderType;
...
std::cout << " Reading input mesh " << argv[1] << " ... " << std::endl;
MeshReaderType::Pointer meshReader = MeshReaderType::New();
meshReader->SetFileName( argv[1] );
try
{
meshReader->Update();
}
catch ( itk::ExceptionObject & err )
{
std::cerr << " Could not read input mesh " << argv[1] << std::endl;
std::cerr << err << std::endl;
return EXIT_FAILURE;
}
std::cout << " SpatialObject read, unwrapping... " << std::endl;
MeshReaderType::SceneType * scene = meshReader->GetScene();
MeshReaderType::GroupType * group = meshReader->GetGroup();
std::cout << " #objects : " << scene->GetNumberOfObjects() << " #children
: " << group->GetNumberOfChildren() << std::endl;
SpatialObjectType::ChildrenListType * children = group->GetChildren();
// get first element int the children list
std::cout << " First child : " << (*(children->begin()));
// very ugly typecast SpatialObject::Pointer -->
MeshSpatialObject::Pointer
MeshSpatialObjectType::Pointer inputMeshSpatialObject = *
(MeshSpatialObjectType::Pointer *)(&(*(children->begin())));
NormalMeshType::Pointer inputMesh = inputMeshSpatialObject->GetMesh();
delete children;
Console output:
************
Reading input mesh mesh.meta ...
Skipping unrecognized field NCellData
Skipping unrecognized field CellDataSize
Skipping unrecognized field CellData
Skipping unrecognized field
Skipping unrecognized field
Erreur de segmentation
---
Dominique Zosso
cand. ing. el. EPFL
More information about the Insight-users
mailing list