[vtkusers] vtkContourFilter & vtkStructuredGrid
    Luke J West 
    ljw at soc.soton.ac.uk
       
    Thu May 29 09:55:51 EDT 2003
    
    
  
Hi,
  I'm trying to perform a trivial task - generate an isosurface of a
vtkStructuredGrid with vtkContourFilter, but I don't seem to have the brainpower
to make it to work!
(I did managed to vtkContourFilter some vtkImageData, but that's not the natural
representation of my data.)
I can render my structured grid with vtkStructuredGridGeometryFilter to create
an array of coloured points in the render window (using an appropriate
vtkLookupTable), but vtkContourFilter gives a segmentation violation (yes - I'm
using C++).
I have populated my vtkStructuredGrid as follows at the end of this message -
have I made a juvenile schoolboy-type error :) ?
Any suggestions very gratefully received
Luke J West : Research Assistant : e-Science
--------------------------------------------
Rm. 566/12, School of Ocean & Earth Sciences
Southampton Oceanography Centre, Southampton
SO14 3ZH  United Kingdom
--------------------------------------------
Tel: +44 23 8059 4801  Fax: +44 23 8059 3052
Mob: +44 79 6107 4783
// my code follows...
 vtkPoints *XYZPts = vtkPoints::New();
  XYZPts->Allocate(size);
 vtkFloatArray* scalars = vtkFloatArray::New();
  scalars->SetNumberOfComponents(1);
  scalars->SetNumberOfTuples(size);
 {
  int    offset =0;
  float* data=new float[size];
  for(int i=0;i<dims[0];i++)
   for(int j=0;j<dims[1];j++)
    for(int k=0;k<dims[2];k++)
    {
     XYZPts->SetPoint(off,i,j,k); // i.e. just a rectilinear grid
     scalars->InsertComponent(offset,0,func(i,j,k));
     offset++;
    }
 }
 vtkStructuredGrid* XYZGrid = vtkStructuredGrid::New();
  XYZGrid->SetDimensions(dims[0],dims[1],dims[2]);
  XYZGrid->SetPoints(XYZPts);
  XYZGrid->GetPointData()->SetScalars(scalars);
 vtkContourFilter* XYZContour = vtkContourFilter::New();
  XYZContour->SetInput(XYZGrid);
  XYZContour->GenerateValues(5,0,1);
 vtkPolyDataNormals* XYZNormals = vtkPolyDataNormals::New();
  XYZNormals->SetInput(XYZContour->GetOutput());
  XYZNormals->SetFeatureAngle(45);
  polydata=XYZNormals->GetOutput();
 vtkPolyDataMapper* XYZMapper;
  XYZMapper=vtkPolyDataMapper::New();
  XYZMapper->SetInput(XYZNormals->GetOutput());
//
// followed by the actor and rendering stuff which works fine.
    
    
More information about the vtkusers
mailing list