[vtkusers] vtkSmoothPolyDataFilter won't work
LinX
camilo.jimenez at spymac.com
Sun Jun 12 12:47:45 EDT 2005
I created an helicodal image:
#define MPath(i,j,k) (\
(i-25+5*cos(k/20))*(i-25+5*cos(k/20))+\
(j-25+5*cos(k/20))*(j-25+5*cos(k/20))<100 \
? 0 : 100) // Helix
/******************************************************
int sx = 50, sy = 50, sz = 256;
float hx = 1;
float hy = 1;
float hz = 1;
Image->SetDimensions( sx, sy, sz );
Image->SetSpacing ( hx, hy, hz );
Image->SetScalarTypeToUnsignedShort();
Image->Update();
unsigned short *lImageP = NULL;
lImageP = (unsigned short*) Image->GetScalarPointer( );
for( k=0; k<sz; k++ ){
for( j=0; j<sy; j++ ){
for( i=0; i<sx; i++ ){
lImageP[index++] = MPath((double)i,(double)j,(double)k);
}
}
}
Image->Update();
/******************************************************
I want a smooth polydata of the interface so I use vtkImageMarchingCubes.
The problem now is that the vtkImageMarchingCubes's output is really coarse, so I
pass it throught a vtkSmoothPolyDataFilter:
/******************************************************
vtkImageMarchingCubes *lMCubes = vtkImageMarchingCubes::New();
lMCubes->SetInput( Image );
lMCubes->SetValue( 0,0 );
lMCubes->UpdateWholeExtent();
vtkSmoothPolyDataFilter *lSmooth = vtkSmoothPolyDataFilter::New();
lSmooth->SetInput( lMCubes->GetOutput() );
lSmooth->SetNumberOfIterations(100);
lSmooth->SetConvergence(0);
lSmooth->UpdateWholeExtent();
vtkPolyDataMapper *lMapper = vtkPolyDataMapper::New();
lMapper->SetInput( lSmooth->GetOutput() );
/******************************************************
But nothing happens!!.
Then I tried passing it throught 10(ten) vtkPolyDataNormals changing the angles
an the output is as coarse as in the principle!!.
I really need to smooth the polyData a lot.
Any suggestion??.
LinX
More information about the vtkusers
mailing list