[vtkusers] vtkSurfaceReconstructionFilter

Tim Hutton T.Hutton at eastman.ucl.ac.uk
Thu Nov 28 07:04:05 EST 2002


Hi George,

The usual caveats apply - vtkSurfaceReconstructionFilter only works well on 
densely-sampled *closed* surfaces. If your data does not fulfill these 
requirements then you need to use something else. 
vtkPowerCrustSurfaceReconstruction could be retrofitted for 3.2 without too 
much difficulty I think, you could try this?

Tim.

At 12:54 28/11/2002 +0100, you wrote:
>Hi all,
>I am trying to use vtkSurfaceReconstructionFilter to generate a surface
>of the two upper planes of a wedge model (see the program below) from
>vtkPoints. If I display the vtkPoints as a cloud of points (by entering
>1), the surface looks perfect. But when I use the
>vtkSurfaceReconstructionFilter (by entering 2), the surface looks
>disjointed and there also appears an extra plane! What am I doing wrong?
> >From the archives, I didn't get any useful hint of going about it apart
>from using vtkPowerCrustSurfaceReconstruction which requires vtk4 (I am
>still using 3.2). Any other options available?
>
>Regards
>George
>
>#include "vtkRenderer.h"
>#include "vtkRenderWindow.h"
>#include "vtkRenderWindowInteractor.h"
>#include "vtkWedge.h"
>#include "vtkPolyDataMapper.h"
>#include "vtkActor.h"
>#include "vtkPoints.h"
>#include "vtkUnstructuredGrid.h"
>#include "vtkDataSetMapper.h"
>#include "vtkDataSetWriter.h"
>#include "vtkTriangleFilter.h"
>#include "vtkGaussianSplatter.h"
>#include "vtkContourFilter.h"
>#include "vtkSurfaceReconstructionFilter.h"
>#include "vtkReverseSense.h"
>#include "vtkDelaunay3D.h"
>
>
>#include "SaveImage.h"
>
>void main( int argc, char *argv[] )
>{
>   // create a rendering window and renderer
>   vtkRenderer *ren = vtkRenderer::New();
>   vtkRenderWindow *renWindow = vtkRenderWindow::New();
>     renWindow->AddRenderer(ren);
>   vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
>     iren->SetRenderWindow(renWindow);
>   renWindow->SetSize( 300, 300 );
>
>
>// Create points
>   vtkPoints *wedgePoints = vtkPoints::New();
>    wedgePoints->SetNumberOfPoints(3321);
>
>vtkScalars *scalars = vtkScalars::New(VTK_INT);
>vtkCellArray *verts = vtkCellArray::New();
>int x, z, i, n;
>i=0;
>
>for (x=0; x<41; x++)
>  {
>     for (z=0; z<41; z++)
>
>       {
>         if (z !=40)
>   {
>            wedgePoints->InsertPoint(i,x,0.5*z,z);
>            scalars->InsertScalar(i, i);
>            //int Id = i;
>            verts->InsertNextCell(1, &i);
>            i +=1;
>
>     wedgePoints->InsertPoint(i,x,(40-0.5*z),z);
>            scalars->InsertScalar(i, i);
>
>            verts->InsertNextCell(1, &i);
>
>            i +=1;
>
>           }
>          else
>           {
>            wedgePoints->InsertPoint(i,x,0.5*z,z);
>            scalars->InsertScalar(i, i);
>            //int Id = i;
>            verts->InsertNextCell(1, &i);
>
>            i +=1;
>
>            }
>       }
>   }
>
>   cout<<"Total number of Points:"<<i<<"\n";
>
>
>   vtkPolyData *wedgeData = vtkPolyData::New();
>       wedgeData->SetPoints(wedgePoints);
>       wedgeData->GetPointData()->SetScalars(scalars);
>       wedgeData->SetVerts(verts);
>
>
>
>vtkSurfaceReconstructionFilter *surf =
>vtkSurfaceReconstructionFilter::New();
>     surf->SetInput(wedgeData);
>
>vtkContourFilter *cf = vtkContourFilter::New();
>     cf->SetInput(surf->GetOutput());
>     cf->SetValue(0, 0.0);
>
>vtkPolyDataMapper *wedgeMapper = vtkPolyDataMapper::New();
>
>cout<<"Enter 1 to display data as a cloud of points or 2 as a surface
>using vtkSurfaceReconstructionFilter:\n";
>
>cin>>n;
>
>if (n==1) {
>
>// Display the data as a cloud of points
>
>       wedgeMapper->SetInput(wedgeData);
>       wedgeMapper->ScalarVisibilityOff();
>           }
>
>else if (n==2) {
>
>//Use vtkSurfaceReconstructionFilter
>
>       wedgeMapper->SetInput(cf->GetOutput());
>       wedgeMapper->ScalarVisibilityOff();
>                  }
>
>vtkActor *wedgeActor = vtkActor::New();
>        wedgeActor->SetMapper(wedgeMapper);
>        wedgeActor->GetProperty()->SetColor(1, 0.8, 0.8);
>
>
>
>   vtkDataSetWriter *dsw = vtkDataSetWriter::New();
>     dsw->SetInput(cf->GetOutput());
>     dsw->SetFileName("../../../vtkdata/Wedge.vtk");
>     //dsw->Write();
>     //dsw->Update();
>
>   // assign our actor to the renderer
>   ren->AddActor(wedgeActor);
>   ren->SetBackground(1, 1, 1); // Set background white
>
>   // draw the resulting scene
>   renWindow->Render();
>
>   SAVEIMAGE( renWindow );
>
>   //  Begin mouse interaction
>   iren->Start();
>
>   // Clean up
>   wedgePoints->Delete();
>   scalars->Delete();
>   verts->Delete();
>   ren->Delete();
>   renWindow->Delete();
>   iren->Delete();
>   wedgeData->Delete();
>   surf->Delete();
>   cf->Delete();
>   //reverse->Delete();
>   wedgeMapper->Delete();
>   wedgeActor->Delete();
>   //del->Delete();
>}
>
>
>_______________________________________________
>This is the private VTK discussion list.
>Please keep messages on-topic. Check the FAQ at: 
><http://public.kitware.com/cgi-bin/vtkfaq>
>Follow this link to subscribe/unsubscribe:
>http://public.kitware.com/mailman/listinfo/vtkusers





More information about the vtkusers mailing list