[vtkusers] Problem with showing two surfaces in the same window - VTK

Gishara Indeewarie gish.777 at gmail.com
Wed Feb 8 05:21:23 EST 2012


Hi all,

I want to add two surfaces in to a same window. But when I add the second
surface the first surface can't be seen. It worked well when I viewed only
the points without creating the surfaces.
I have managed to show the two surfaces but in different viewports, but I
want to show it in the same where the user can view the relevant positions
of the surfaces.
The code I have done so far is given below.

vtkPoints *points = newPts;//ReadCFDData2();
 vtkPoints *suction_points = newPtsSuction;

  vtkSmartPointer<vtkPolyData> polydata =
vtkSmartPointer<vtkPolyData>::New();
  polydata->SetPoints(points);

  vtkSmartPointer<vtkPolyData> suction_polydata =
vtkSmartPointer<vtkPolyData>::New();
  suction_polydata->SetPoints(suction_points);

  vtkSmartPointer<vtkDoubleArray> weights =
vtkSmartPointer<vtkDoubleArray>::New();
  weights->SetNumberOfValues(PoValues.GetSize());
  for(int i=0; i< PoValues.GetSize();i++){
  weights->SetValue(i, PoValues[i]);
  }


  vtkSmartPointer<vtkDoubleArray> suction_weights =
vtkSmartPointer<vtkDoubleArray>::New();
  suction_weights->SetNumberOfValues(PoValuesSuction.GetSize());
  for(int i=0; i< PoValuesSuction.GetSize();i++){
  suction_weights->SetValue(i, PoValuesSuction[i]);
  }


  vtkSmartPointer<vtkVertexGlyphFilter> glyphFilter =
vtkSmartPointer<vtkVertexGlyphFilter>::New();
  glyphFilter->SetInputConnection(polydata->GetProducerPort());
  glyphFilter->Update();

  vtkSmartPointer<vtkVertexGlyphFilter> suction_glyphFilter =
vtkSmartPointer<vtkVertexGlyphFilter>::New();

suction_glyphFilter->SetInputConnection(suction_polydata->GetProducerPort());
  suction_glyphFilter->Update();

  // Create a plane
 // vtkSmartPointer<vtkPlane> plane = vtkSmartPointer<vtkPlane>::New();
  //plane->SetOrigin(polydata->GetCenter());
  //plane->SetNormal(1,1,1);


  // Construct the surface and create isosurface.
  vtkSmartPointer<vtkSurfaceReconstructionFilter> surf =
vtkSmartPointer<vtkSurfaceReconstructionFilter>::New();

  surf->SetInput(polydata);
 //
  vtkSmartPointer<vtkContourFilter> cf =
 vtkSmartPointer<vtkContourFilter>::New();
  cf->SetInputConnection(surf->GetOutputPort());
  cf->Update();

  // Construct the suction blade surface and create isosurface.
  vtkSmartPointer<vtkSurfaceReconstructionFilter> suction_surf =
vtkSmartPointer<vtkSurfaceReconstructionFilter>::New();

  suction_surf->SetInput(suction_polydata);
 //
  vtkSmartPointer<vtkContourFilter> suction_cf =
 vtkSmartPointer<vtkContourFilter>::New();
  suction_cf->SetInputConnection(suction_surf->GetOutputPort());
  suction_cf->Update();

 vtkPolyData* outputPolyData = cf->GetOutput();
 vtkPolyData* suction_outputPolyData = suction_cf->GetOutput();

  //double bounds[6];
  //outputPolyData->GetBounds(bounds);

  // Find min and max z
 // double minz = bounds[4];
 // double maxz = bounds[5];


  // Create the color map
  vtkSmartPointer<vtkLookupTable> colorLookupTable =
vtkSmartPointer<vtkLookupTable>::New();
colorLookupTable->SetHueRange(0.667,0.0);
colorLookupTable->SetNumberOfColors(16);

 // colorLookupTable->SetTableRange(minz, maxz);

  colorLookupTable->Build();

  // Create the color map
  vtkSmartPointer<vtkLookupTable> colorLookupTable_s =
vtkSmartPointer<vtkLookupTable>::New();
colorLookupTable_s->SetHueRange(0.667,0.0);
colorLookupTable_s->SetNumberOfColors(16);

 // colorLookupTable->SetTableRange(minz, maxz);

  colorLookupTable_s->Build();

  // Generate the colors for each point based on the color map
/*  vtkSmartPointer<vtkUnsignedCharArray> colors =
    vtkSmartPointer<vtkUnsignedCharArray>::New();
  colors->SetNumberOfComponents(3);
  colors->SetName("Colors");
  for(int i = 0; i < outputPolyData->GetNumberOfPoints(); i++)
    {
    double p[3];
    outputPolyData->GetPoint(i,p);

    double dcolor[3];
    colorLookupTable->GetColor(PoValues[i], dcolor);
    unsigned char color[3];
    for(unsigned int j = 0; j < 3; j++)
      {
      color[j] = static_cast<unsigned char>(255.0 * dcolor[j]);
      }

    colors->InsertNextTupleValue(color);
    }

  outputPolyData->GetPointData()->SetScalars(colors);*/
 // double min = minimumValue(PoValues);
     int length = PoValues.GetSize();// establish size of array
     double max = PoValues[0];       // start with max = first element

     for(int i = 1; i<length; i++)
     {
          if(PoValues[i] > max)
                max = PoValues[i];
     }

 double min = PoValues[0];

 for(int i = 1; i<length; i++)
     {
          if(PoValues[i] < min)
                min = PoValues[i];
     }


  colorLookupTable->SetTableRange( min,max);
  outputPolyData->GetPointData()->SetScalars(weights);

  int length_s = PoValuesSuction.GetSize();// establish size of array
     double max_s = PoValuesSuction[0];       // start with max = first
element

     for(int i = 1; i<length_s; i++)
     {
          if(PoValuesSuction[i] > max_s)
                max_s = PoValuesSuction[i];
     }

 double min_s = PoValuesSuction[0];

 for(int i = 1; i<length_s; i++)
     {
          if(PoValuesSuction[i] < min_s)
                min_s = PoValuesSuction[i];
     }


  colorLookupTable_s->SetTableRange( min_s,max_s);
  suction_outputPolyData->GetPointData()->SetScalars(suction_weights);

  // Create a mapper and actor
  vtkSmartPointer<vtkPolyDataMapper> mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();

mapper->SetInputConnection(/*reverse->GetOutputPort()*/cf->GetOutputPort());
 mapper->ScalarVisibilityOn();
  mapper->SetColorModeToMapScalars();
  mapper->SetLookupTable(colorLookupTable);
  mapper->SetScalarMaterialModeToDefault();
 mapper->SetScalarRange(min,max);
  vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
   //actor->GetProperty()->SetColor(1.0, 0.8941, 0.7686); // bisque
  actor->SetMapper(mapper);


  // Create a mapper and actor for suction blade
  vtkSmartPointer<vtkPolyDataMapper> suction_mapper =
vtkSmartPointer<vtkPolyDataMapper>::New();

suction_mapper->SetInputConnection(/*reverse->GetOutputPort()*/suction_cf->GetOutputPort());
 suction_mapper->ScalarVisibilityOn();
  suction_mapper->SetColorModeToMapScalars();
  suction_mapper->SetLookupTable(colorLookupTable_s);
  suction_mapper->SetScalarMaterialModeToDefault();
 suction_mapper->SetScalarRange(min_s,max_s);
  vtkSmartPointer<vtkActor> suction_actor =
vtkSmartPointer<vtkActor>::New();
 //  actor->GetProperty()->SetColor(1.0, 0.8941, 0.7686); // bisque
  suction_actor->SetMapper(suction_mapper);

  //Create a renderer, render window, and interactor
  vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
  renderer->SetViewport( 0., 0., 0.5, 1. );
  renderer->SetBackground( 0.2, 0.2, 0.8 );

  vtkSmartPointer<vtkRenderer> suction_renderer =
vtkSmartPointer<vtkRenderer>::New();
  suction_renderer->SetViewport( 0.5, 0., 1., 1. );
  suction_renderer->SetBackground( 0.8, 0.2, 0.2 );


  vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
  renderWindow->AddRenderer(renderer);
  renderWindow->AddRenderer(suction_renderer);
  vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
  renderWindowInteractor->SetRenderWindow(renderWindow);

 // vtkSmartPointer<vtkRenderWindowInteractor> interactor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
  //interactor->SetRenderWindow( renderWindow );
  //Add the actor to the scene
  renderer->AddViewProp(actor);
  suction_renderer->AddViewProp(suction_actor);
 // renderer->SetBackground(.1, .6, .3); // Background color green

  //Render and interact
  renderWindow->Render();
  renderWindowInteractor->Start();

Please give me your ideas.
Thanks.
-- 
Gish
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20120208/80694601/attachment.htm>


More information about the vtkusers mailing list