[ITK-users] Do any of the mesh file formats store CellData?
DVigneault
davis.vigneault at gmail.com
Thu Aug 13 13:55:04 EDT 2015
All--
Do any of the mesh file formats supported by ITK store CellData information?
I've done a test where I've (a) created a mesh, (b) associated a value with
each cell, (c) written it to file, (d) read it back in, and (e) attempted to
read the associated value. I did this for each file format. When I ask for
the cell's data, .vtk and .gii formats return uninitialized data, whereas
.obj, .byu, .fcv, .fsa, .fsb, and .off segfault.
I looked through itk::MeshFileWriter to see whether there were an option
(such as WriteCellDataOn()), and there is a method WriteCellData() [1], but
it is protected. Looking at the header files of some of the individual
writer objects (itkVTKPolyDataMeshIO, itkOBJMeshIO, etc), it looks like the
WriteCellData(void *buffer) method is abstract.
[1]
http://www.itk.org/Doxygen/html/classitk_1_1MeshFileWriter.html#a1819df60ed20493f64a84c1728ddf26b
I've pasted below the test program, in case the problem is due to a mistake
I've made there.
Best, and thanks!
--Davis
#include "itkMesh.h"
#include "itkMeshFileReader.h"
#include "itkMeshFileWriter.h"
#include "itkRegularSphereMeshSource.h"
const unsigned int Dimension = 3;
typedef float TCoordinate;
typedef itk::Mesh< TCoordinate, Dimension > TMesh;
typedef itk::RegularSphereMeshSource< TMesh > TSphere;
typedef itk::MeshFileReader< TMesh > TMeshReader;
typedef itk::MeshFileWriter< TMesh > TMeshWriter;
int main( int argc, char* argv[] )
{
auto sphere = TSphere::New();
sphere->Update();
auto mesh = sphere->GetOutput();
double value = 10;
for (unsigned int i = 0; i < mesh->GetNumberOfCells(); ++i)
mesh->SetCellData( i, value);
std::cout << mesh->GetCellData()->ElementAt(0) << std::endl; // 10
auto meshWriter = TMeshWriter::New();
meshWriter->SetFileName( argv[1] );
meshWriter->SetInput( mesh );
meshWriter->Update();
auto reader = TMeshReader::New();
reader->SetFileName( argv[1] );
reader->ReadPointData();
reader->Update();
float value2;
auto mesh2 = reader->GetOutput();
mesh2->SetCellData(0, value2);
mesh2->GetCellData()->ElementAt(0);
std::cout << value2 << std::endl; // Segfault or uninitialized
return EXIT_SUCCESS;
}
--
View this message in context: http://itk-insight-users.2283740.n2.nabble.com/Do-any-of-the-mesh-file-formats-store-CellData-tp7587666.html
Sent from the ITK Insight Users mailing list archive at Nabble.com.
More information about the Insight-users
mailing list