[vtkusers] Problem with surface reconstruction and contour filter in C++.
    Andrew J. P. Maclean 
    a.maclean at acfr.usyd.edu.au
       
    Mon Oct 14 02:52:32 EDT 2002
    
    
  
I am using the latest nightly build (13-Oct-2002). 
 
I seem to be unable to reconstruct a surface using
vtkSurfaceReconstructionFilter in C++ with the following code:
 
// Filled a vtkPolyData structure with points from
//$VTK_DATA_ROOT/Data/cactus.3337.pts.
      nPts = polyData->GetNumberOfPoints(); 
      // A nPts = 3337 points
      polyData->GetBounds(bounds);
 
      polyData->Modified();
      surf->SetInput( polyData );
      surf->Update();
      nPts = ((vtkDataSet * )surf->GetOutput())->GetNumberOfPoints();
      // B nPts = 75760 points
      ((vtkDataSet * )surf->GetOutput())->GetBounds(bounds);
 
      // Contour at 0 to extract the surface.
      vtkContourFilter * cf = vtkContourFilter::New();
      cf->SetInput( (vtkDataSet * )surf->GetOutput());
      cf->SetValue(0,0.0);
      cf->Update();
      nPts = cf->GetOutput()->GetNumberOfPoints();
      // C nPts = 0 points
      cf->GetOutput()->GetBounds(bounds);
 
      // Sometimes the contouring algorithm can create a volume whose
gradient
      // vector and ordering of polygon (using the right hand rule) are 
      // inconsistent. vtkReverseSense cures this problem.  
      vtkReverseSense * rev = vtkReverseSense::New();
      rev->SetInput(cf->GetOutput());
      rev->ReverseCellsOn();
      rev->ReverseNormalsOn();
      rev->Update();
 
      polyData->DeepCopy(rev->GetOutput());
 
 
This is a translation of the TCL code in the example
reconstructSurface.tcl. 
polyData is a vtkPolyData structure filled with points from the file
$VTK_DATA_ROOT/Data/cactus.3337.pts
nPts at point A has the value: 3337. At B, npts = 75760, which is
expected as the surface
has been constructed. However at C, nPts is zero and the bounds all have
VTK_LARGE_FLOAT in them!
The contour filter doesn't seem to be producing any output. 
One oddity now is that I have had to put in the type conversion
(vtkDataSet * ) at the indicated points as a result of the VC7 compiler
telling me: 
'vtkDataSetToPolyDataFilter::SetInput' : cannot convert parameter 1 from
'vtkImageData *' to 'vtkDataSet *'
        Types pointed to are unrelated; conversion requires
reinterpret_cast, C-style cast or function-style cast
 
I thought that vtkContourFilter takes any dataset (and this is supported
by the documentation).
This type conversion did not have to be specified in the older nightly
builds ( before August).
Another oddity is that the TCL example code works OK ( I am using
TCL8.4.0).
 
 
Can someone please help?
 
Thanks
   Andrew
 
 
___________________________________________
Andrew J. P. Maclean
Postal:
Australian Centre for Field Robotics
The Rose Street Building J04
The University of Sydney  2006  NSW
AUSTRALIA
 
Room:  106
Phone: +61 2 9351 3283
Fax:   +61 2 9351 7474
       http://www.acfr.usyd.edu.au/
 
___________________________________________
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20021014/761593d0/attachment.htm>
    
    
More information about the vtkusers
mailing list