[Insight-users] itkmesh to vtk polydata
tony hakki
tony2007vtk at yahoo.com
Tue Feb 20 09:23:27 EST 2007
Does anybody try the following code,does it work correctly?
* Convert itk mesh to vtk PolyData */
/************************************************************************/
void MeshToPolyData(MeshType* mesh, vtkPolyData* polydata)
{
// Get the number of points in the mesh
int numPoints = mesh->GetNumberOfPoints();
if(numPoints == 0)
{
mesh->Print(std::cerr);
}
// Create the vtkPoints object and set the number of points
vtkPoints* vpoints = vtkPoints::New();
vpoints->SetNumberOfPoints(numPoints);
// iterate over all the points in the itk mesh filling in
// the vtkPoints object as we go
MeshType::PointsContainer::Pointer points = mesh->GetPoints();
for(MeshType::PointsContainer::Iterator i = points->Begin(); i !=
points->End(); ++i)
{
// Get the point index from the point container iterator
int idx = i->Index();
// Set the vtk point at the index with the the coord array from itk
// itk returns a const pointer, but vtk is not const correct, so
// we have to use a const cast to get rid of the const
vpoints->SetPoint(idx, const_cast<FLOAT*>(i->Value().GetDataPointer()));
}
// Set the points on the vtk grid
polydata->SetPoints(vpoints);
// Now create the cells using the MulitVisitor
// 1. Create a MultiVisitor
MeshType::CellType::MultiVisitor::Pointer mv =
MeshType::CellType::MultiVisitor::New();
// 2. Create a triangle and quadrilateral visitor
TriangleVisitor::Pointer tv = TriangleVisitor::New();
QuadrilateralVisitor::Pointer qv = QuadrilateralVisitor::New();
// 3. Set up the visitors
int vtkCellCount = 0; // running counter for current cell being
inserted into vtk
int numCells = mesh->GetNumberOfCells();
int *types = new int[numCells]; // type array for vtk
// create vtk cells and estimate the size
vtkCellArray* cells = vtkCellArray::New();
cells->EstimateSize(numCells, 4);
// Set the TypeArray CellCount and CellArray for both visitors
tv->SetTypeArray(types);
tv->SetCellCounter(&vtkCellCount);
tv->SetCellArray(cells);
qv->SetTypeArray(types);
qv->SetCellCounter(&vtkCellCount);
qv->SetCellArray(cells);
// add the visitors to the multivisitor
mv->AddVisitor(tv);
mv->AddVisitor(qv);
// Now ask the mesh to accept the multivisitor which
// will Call Visit for each cell in the mesh that matches the
// cell types of the visitors added to the MultiVisitor
mesh->Accept(mv);
// Now set the cells on the vtk polydata
polydata->SetPolys(cells);
// Clean up vtk objects (no vtkSmartPointer ... )
cells->Delete();
vpoints->Delete();
}
____________________________________________________________________________________
Don't get soaked. Take a quick peak at the forecast
with the Yahoo! Search weather shortcut.
http://tools.search.yahoo.com/shortcuts/#loc_weather
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://public.kitware.com/pipermail/insight-users/attachments/20070220/1d08cb88/attachment.html
More information about the Insight-users
mailing list