[Insight-users] MeshSpatialObject in 2D
Gheorghe Postelnicu
gheorghe.postelnicu at gmail.com
Tue Aug 22 10:05:31 EDT 2006
Hi again,
Below is some code modified from
Examples/SpatialObjects/MeshSpatialObject.cxx, which fails with a
glib_detected.... exception. Below is my code and right after, the gdb
bt. Thanks,
=========================================================================*/
#if defined(_MSC_VER)
#pragma warning ( disable : 4786 )
#endif
#include <itkDefaultDynamicMeshTraits.h>
#include <itkMesh.h>
#include <itkLineCell.h>
// Software Guide : BeginLatex
//
// \index{itk::MeshSpatialObject}
//
// A \doxygen{MeshSpatialObject} contains a pointer to an
// notion of spatial transformations and parent-child hierarchy.
// This example shows how to create an \doxygen{MeshSpatialObject},
// use it to form a binary image and how to write the mesh on disk.
//
// Let's begin by including the appropriate header file.
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
#include <itkMeshSpatialObject.h>
#include <itkSpatialObjectReader.h>
#include <itkSpatialObjectWriter.h>
#include <itkSpatialObjectToImageFilter.h>
// Software Guide : EndCodeSnippet
int main(int, char * [] )
{
typedef itk::DefaultDynamicMeshTraits< float , 2, 2 > MeshTrait;
typedef itk::Mesh<float,2,MeshTrait> MeshType;
typedef MeshType::CellTraits CellTraits;
typedef itk::CellInterface< float, CellTraits > CellInterfaceType;
typedef itk::LineCell<CellInterfaceType> LineCellType;
typedef MeshType::PointType PointType;
typedef MeshType::CellType CellType;
typedef CellType::CellAutoPointer CellAutoPointer;
// Software Guide : EndCodeSnippet
// Software Guide : BeginCodeSnippet
MeshType::Pointer myMesh = MeshType::New();
MeshType::CoordRepType testPointCoords[6][2]
= { {0,0}, {9,0}, {9,9},
{10,10}, {20,10}, {10,20} };
unsigned long tetraPoints[6] = {0,1,2,4,5};
int i;
for(i=0; i < 6 ; ++i)
{
myMesh->SetPoint(i, PointType(testPointCoords[i]));
}
myMesh->SetCellsAllocationMethod(
MeshType::CellsAllocatedDynamicallyCellByCell );
unsigned int count = 0;
for(unsigned int ui=0; ui <2; ++ui)
{
CellAutoPointer testCell1;
testCell1.TakeOwnership( new LineCellType );
for(unsigned idx = 0; idx<3; ++idx, ++count)
testCell1->SetPointId(idx, tetraPoints[count]);
myMesh->SetCell(ui, testCell1 );
}
typedef itk::MeshSpatialObject<MeshType> MeshSpatialObjectType;
MeshSpatialObjectType::Pointer myMeshSpatialObject =
MeshSpatialObjectType::New();
myMeshSpatialObject->SetMesh(myMesh);
myMeshSpatialObject->GetMesh();
myMeshSpatialObject->ComputeBoundingBox();
std::cout << "Mesh bounds : " <<
myMeshSpatialObject->GetBoundingBox()->GetBounds() << std::endl;
std::cout << " Mesh minimum : "
<< myMeshSpatialObject->GetBoundingBox()->GetMinimum() << std::endl;
MeshSpatialObjectType::PointType myPhysicalPoint;
myPhysicalPoint.Fill(1);
std::cout << "Is my physical point inside? : " <<
myMeshSpatialObject->IsInside(myPhysicalPoint) << std::endl;
return EXIT_SUCCESS;
}
(gdb) run
Starting program:
/autofs/space/asterix_001/users/postelni/code/mriScout/itkInside/build/line
[Thread debugging using libthread_db enabled]
[New Thread 182913315616 (LWP 26338)]
Mesh bounds : [0, 20, 0, 20]
Mesh minimum : [0, 0]
Is my physical point inside? : 0
*** glibc detected *** free(): invalid next size (fast): 0x000000000057b330 ***
Program received signal SIGABRT, Aborted.
[Switching to Thread 182913315616 (LWP 26338)]
0x0000003d1732e2ed in raise () from /lib64/tls/libc.so.6
(gdb) bt
#0 0x0000003d1732e2ed in raise () from /lib64/tls/libc.so.6
#1 0x0000003d1732fa3e in abort () from /lib64/tls/libc.so.6
#2 0x0000003d17362d41 in __libc_message () from /lib64/tls/libc.so.6
#3 0x0000003d1736881e in _int_free () from /lib64/tls/libc.so.6
#4 0x0000003d17368b66 in free () from /lib64/tls/libc.so.6
#5 0x0000003d1a2ae19e in operator delete () from /usr/lib64/libstdc++.so.6
#6 0x000000000044d516 in ~LineCell (this=0x57b330)
at /space/asterix/1/users/postelni/packages/itk/current/Code/Common/itkLineCell.h:86
#7 0x00000000004364f5 in itk::Mesh<float, 2u,
itk::DefaultDynamicMeshTraits<float, 2u, 2u, floa
, float, float> >::ReleaseCellsMemory (this=0x57ac60)
at /space/asterix/1/users/postelni/packages/itk/current/Code/Common/itkMesh.txx:1142
#8 0x000000000044da2d in ~Mesh (this=0x57ac60)
at /space/asterix/1/users/postelni/packages/itk/current/Code/Common/itkMesh.txx:1058
#9 0x0000002a9574aaf9 in itk::Object::UnRegister ()
from /space/asterix/1/users/postelni/packages/itk/build/rls-dynamic/bin/libITKCommon.so.2.8
#10 0x000000000043311a in itk::SmartPointer<itk::Mesh<float, 2u,
itk::DefaultDynamicMeshTraits<f
oat, 2u, 2u, float, float, float> > >::UnRegister (this=0x7fbffff2a0)
at /space/asterix/1/users/postelni/packages/itk/current/Code/Common/itkSmartPointer.h:148
#11 0x0000000000432663 in ~SmartPointer (this=0x7fbffff2a0)
at /space/asterix/1/users/postelni/packages/itk/current/Code/Common/itkSmartPointer.h:65
#12 0x00000000004323c0 in main ()
at /autofs/homes/011/postelni/symAsterix/code/mriScout/itkInside/mainLine.cpp:101
--
Gheorghe Postelnicu, PhD
MGH, Harvard Medical School
More information about the Insight-users
mailing list