[vtkusers] help needed setting up the colormap/lookuptable/mapper in C++

Eduardo K. Saldanha eks05 at inf.ufpr.br
Mon Aug 13 21:16:04 EDT 2007


I only found the member setScalarRange in mappers, so i changed to the
setScalars as I had told

#include <cstdlib>
#include <ctime>
#include <iostream>

#include "vtkCellArray.h"

#include "vtkPoints.h"
#include "vtkPolyData.h"

#include "vtkPolyDataWriter.h"

#include "vtkDoubleArray.h"
#include "vtkPointData.h"


using namespace std;


int main(int argc, char** argv)
{
  int i;
  int num_points = 100;

  double x,y,z; // data points
  double rnd_min=1.0, rnd_max=-1.0; // cache the range for SetScalarRange

  vtkPoints *points = vtkPoints::New();
  vtkDoubleArray *scalars = vtkDoubleArray::New();

  srand48((unsigned)time(NULL));

  for (i=0; i<num_points; i++)
    {
      // the original code read in XYZ triplets, but for testing
      // just randomly create XY and set the Z to be on a slanted
      // plane

      x = drand48();
      y = drand48();
      z = (x+y)/2.0;

      if (z < rnd_min) rnd_min = z;
      if (z > rnd_max) rnd_max = z;

      points->InsertPoint(i, x, y, z);

      scalars->InsertNextValue(z);
    }


  vtkCellArray *polys = vtkCellArray::New();

  polys->InsertNextCell(points->GetNumberOfPoints());
  for (i=0; i<points->GetNumberOfPoints(); i++)
    {
      polys->InsertCellPoint(i);
    }


  vtkPolyData *polyData = vtkPolyData::New();
  polyData->SetPoints(points);
  polyData->SetPolys(polys);
  polyData->GetPointData()->SetScalars(scalars);

  polyData->Update();


  vtkPolyDataWriter* writer1 = vtkPolyDataWriter::New();

  writer1->SetInput(polyData);
  writer1->SetFileName( "tst_points.vtk" );
  writer1->Update();

  writer1->Delete();

  return 0;
}


2007/8/13, David, John <john.david at uconn.edu>:
>
> > put the header
> > #include "vtkPointData.h"
>
> it is already in there...
>
> Hmmm... tell you what.  At the end you will find a minimal case (but with full source) to reproduce this problem.
>
>
>   EBo --
>
> ps: I've appended the code instead of attaching it to the email just in case the server strips attachments by default.
>
> ===============================================
>
>
> #include <cstdlib>
> #include <ctime>
> #include <iostream>
>
> #include "vtkCellArray.h"
>
> #include "vtkPoints.h"
> #include "vtkPolyData.h"
>
> #include "vtkPolyDataWriter.h"
>
> #include "vtkDoubleArray.h"
>
>
> using namespace std;
>
>
> int
> main(int argc, char** argv)
> {
>     int i;
>     int num_points = 100;
>
>     double x,y,z; // data points
>     double rnd_min=1.0, rnd_max=-1.0; // cache the range for SetScalarRange
>
>         vtkPoints *points = vtkPoints::New();
>     vtkDoubleArray *scalars = vtkDoubleArray::New();
>
>     srand48((unsigned)time(NULL));
>
>     for (i=0; i<num_points; i++)
>     {
>         // the original code read in XYZ triplets, but for testing
>         // just randomly create XY and set the Z to be on a slanted
>         // plane
>
>         x = drand48();
>         y = drand48();
>         z = (x+y)/2.0;
>
>         if (z < rnd_min) rnd_min = z;
>         if (z > rnd_max) rnd_max = z;
>
>         points->InsertPoint(i, x, y, z);
>
>         scalars->InsertNextValue(z);
>     }
>
>
>         vtkCellArray *polys = vtkCellArray::New();
>
>     polys->InsertNextCell(points->GetNumberOfPoints());
>     for (i=0; i<points->GetNumberOfPoints(); i++)
>     {
>         polys->InsertCellPoint(i);
>     }
>
>
>         vtkPolyData *polyData = vtkPolyData::New();
>         polyData->SetPoints(points);
>         polyData->SetPolys(polys);
>
> // problem line
> polyData->GetPointData()->SetScalarRange( rnd_min, rnd_max );
>
>     polyData->Update();
>
>
>     vtkPolyDataWriter* writer1 = vtkPolyDataWriter::New();
>
>     writer1->SetInput(polyData);
>     writer1->SetFileName( "tst_points.vtk" );
>     writer1->Update();
>
>     writer1->Delete();
>
>     return 0;
> }
>



More information about the vtkusers mailing list