[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