[Insight-users] Fault while writing Mesh Spatial Object to Spatial
Object Writer
Julien Jomier
julien.jomier at kitware.com
Wed Apr 19 13:20:09 EDT 2006
Hi Ritesh,
I just tested your test program on MSVC 8 with ITK cvs and it runs fine.
What version of ITK are you using? Can you try the cvs version?
There is a small issue with the pixel type conversion. I'm looking into
that right now. I'll keep you posted.
Julien
Ritesh Bafna wrote:
> Hi,
>
> We are working mesh generation from image data. We would like to save
> the meshes in meta format. However, when we use the SpatialObjectWriter
> a segmentation fault is generated when writing on the cell traits. All
> of the point location and connectivity information is written properly
> to the file. We have code that is able to write the meshes appropriately
> in other another format, but would like to include this is an option for
> loading the meshes into VTK and paraview. Here is an example of the code
> generating the problem:
>
> typedef itk::DefaultStaticMeshTraits< unsigned long , 3, 3, double,
> double, double > MeshTraitType;
> typedef itk::Mesh< unsigned long, 3, MeshTraitType > MeshType; .
> .
> .
> finalMesh = MeshFilter->GetOutput();
>
> typedef itk::MeshSpatialObject< MeshType > MeshSpatialObjectType;
>
> MeshSpatialObjectType::Pointer meshSpatialObject =
> MeshSpatialObjectType::New();
> meshSpatialObject->SetMesh( finalMesh );
> meshSpatialObject->ComputeLocalBoundingBox();
>
> typedef itk::SpatialObjectWriter<3, unsigned long, MeshTraitType>
> WriterType;
> WriterType::Pointer writer = WriterType::New();
> writer->SetInput( meshSpatialObject );
> writer->SetFileName( "myMesh.meta" );
> try
> {
> writer->Update( );
> }
>
> catch (itk::ExceptionObject &ex)
> {
> std::cout << ex << std::endl;
> }
>
>
> Also, Please find attached a test program which I have written to test
> this functionality
>
> Thanks
> Ritesh
>
>
> ------------------------------------------------------------------------
>
>
> #if defined(_MSC_VER)
> #pragma warning ( disable : 4786 )
> #endif
>
> // Software Guide : BeginLatex
> //
> // This section illustrates the full power of
> // \href{http://www.boost.org/more/generic_programming.html}{Generic
> // Programming}. This is sometimes perceived as \emph{too much of a good
> // thing}!
> //
> // The toolkit has been designed to offer flexibility while keeping the
> // complexity of the code to a moderate level. This is achieved in the Mesh by
> // hiding most of its parameters and defining reasonable defaults for them.
> //
> // The generic concept of a mesh integrates many different elements. It is
> // possible in principle to use independent types for every one of such
> // elements. The mechanism used in generic programming for specifying the many
>
>
>
> // Software Guide : BeginCodeSnippet
> #include "itkMesh.h"
> #include "itkDefaultStaticMeshTraits.h"
> #include "itkAutomaticTopologyMeshSource.h"
> #include <itkMeshSpatialObject.h>
> #include <itkSpatialObjectWriter.h>
> #include <itkSpatialObjectReader.h>
>
> int main(int, char *[])
> {
>
> const unsigned int PointDimension = 3;
> const unsigned int MaxTopologicalDimension = 3;
>
> typedef unsigned long PixelType;
> typedef double CellDataType;
>
> typedef double CoordinateType;
> typedef double InterpolationWeightType;
>
> typedef itk::DefaultStaticMeshTraits< PixelType, PointDimension, MaxTopologicalDimension,
> CoordinateType, InterpolationWeightType, CellDataType > MeshTraitType;
>
> typedef itk::Mesh< PixelType, PointDimension, MeshTraitType > MeshType;
>
> typedef itk::AutomaticTopologyMeshSource< MeshType > MeshSourceType;
> MeshSourceType::Pointer meshSource;
>
> meshSource = MeshSourceType::New( );
> meshSource->AddHexahedron(
> meshSource->AddPoint( 13.5, -20.5, 10.5 ),
> meshSource->AddPoint( 13.5, -17.5, 10.5 ),
> meshSource->AddPoint( 16.5, -17.5, 10.5 ),
> meshSource->AddPoint( 16.5, -20.5, 10.5 ),
> meshSource->AddPoint( 13.5, -20.5, 7.5 ),
> meshSource->AddPoint( 13.5, -17.5, 7.5 ),
> meshSource->AddPoint( 16.5, -17.5, 7.5 ),
> meshSource->AddPoint( 16.5, -20.5, 7.5 ));
>
> std::cout << " Points = " << meshSource->GetOutput()->GetNumberOfPoints() << std::endl;
> std::cout << " Cells = " << meshSource->GetOutput()->GetNumberOfCells() << std::endl;
>
> CellDataType value = 3000.50;
> meshSource->GetOutput()->SetCellData( 1, value );
>
> CellDataType cellData;
> meshSource->GetOutput()->GetCellData( 1, &cellData );
>
> std::cout << " cell data from GetCellData() method = " << cellData << std::endl;
>
> typedef itk::MeshSpatialObject< MeshType > MeshSpatialObjectType;
>
> MeshSpatialObjectType::Pointer meshSpatialObject = MeshSpatialObjectType::New();
> meshSpatialObject->SetMesh( meshSource->GetOutput() );
> meshSpatialObject->ComputeLocalBoundingBox();
>
> typedef itk::SpatialObjectWriter<3, unsigned long, MeshTraitType> WriterType;
> WriterType::Pointer writer = WriterType::New();
> writer->SetInput( meshSpatialObject );
> writer->SetFileName( "myMesh.meta" );
>
> try
> {
> writer->Update( );
> }
>
> catch (itk::ExceptionObject &ex)
> {
> std::cout << ex << std::endl;
> }
>
> return 0;
> }
>
>
>
> ------------------------------------------------------------------------
>
> PROJECT(CellTraitTest)
>
> FIND_PACKAGE(ITK)
> IF(ITK_FOUND)
> INCLUDE(${ITK_USE_FILE})
> ELSE(ITK_FOUND)
> MESSAGE(FATAL_ERROR
> "Cannot build my program without ITK. Please set ITK_DIR.")
> ENDIF(ITK_FOUND)
>
> ADD_EXECUTABLE(CellTraitTest Test.cxx)
> TARGET_LINK_LIBRARIES(CellTraitTest ITKCommon ITKBasicFilters ITKIO)
>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org
> http://www.itk.org/mailman/listinfo/insight-users
More information about the Insight-users
mailing list