[vtkusers] Apparent VTK bug?
    Sidney Cadot 
    sidney at v2e.nl
       
    Wed Mar  6 18:05:39 EST 2002
    
    
  
Hi everybody,
Below, a rather small piece of VTK code is given that should render a
point cloud, and it does if the number of points is >= 8191, on my Linux
machine. However, if the number of points is 8190 or less, it seg-faults
within the VTK libs.
Could anybody give this code a go and see if it works? I'm flabbergasted!
Best regards,
  Sidney Cadot
=============== to compile and link (on my Linux machine):
g++ -W -Wall -Werror -O2 -ansi -pedantic -I/usr/local/include/vtk  -c \
   -o tri-sphere.o tri-sphere.cpp
g++ -L/usr/local/lib/vtk -L/usr/X11R6/lib  tri-sphere.o  -lGL -lXt \
  -lvtkRendering -lvtkGraphics -lvtkFiltering -lvtkCommon  -o tri-sphere
=============== the code (tri-sphere.cpp)
#include <stdio.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindow.h>
#include <vtkRenderWindowInteractor.h>
double rnd(const double min, const double max)
{
  return min+rand()*(max-min)/RAND_MAX;
}
int main(int argc, char *argv[])
{
  int N = 10000;
  if (argc==2)
    sscanf(argv[1],"%d", &N);
  // create actor
  vtkPoints    * points   = vtkPoints::New();
  vtkCellArray * vertices = vtkCellArray::New();
  for(int i=0;i<N;i++)
    {
      double x = rnd(-1,1);
      double y = rnd(-1,1);
      double z = rnd(-1,1);
      vtkIdType newpointID = points->InsertNextPoint(x,y,z);
      vertices->InsertCellPoint(newpointID);
    }
  vtkPolyData *poly = vtkPolyData::New();
  poly->SetPoints(points);
  poly->SetVerts(vertices);
  vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
  mapper->SetInput(poly); poly->Delete();
  vtkActor *actor = vtkActor::New();
  actor->SetMapper(mapper); mapper->Delete();
  // create renderer
  vtkRenderer *renderer = vtkRenderer::New();
  renderer->AddActor(actor); actor->Delete();
  vtkRenderWindow *rwindow = vtkRenderWindow::New();
  rwindow->AddRenderer(renderer); renderer->Delete();
  vtkRenderWindowInteractor *interactor = vtkRenderWindowInteractor::New();
  interactor->SetRenderWindow(rwindow); rwindow->Delete();
  // render & interact!
  
  interactor->Render();
  interactor->Start();
  // clean up
  interactor->Delete();
  points->Delete();
  return 0;
}
    
    
More information about the vtkusers
mailing list