Hi all,<div><br></div><div>I want to add two surfaces in to a same window. But when I add the second surface the first surface can&#39;t be seen. It worked well when I viewed only the points without creating the surfaces. </div>
<div>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.</div><div>The code I have done so far is given below.</div>
<div><br></div><div>vtkPoints *points = newPts;//ReadCFDData2();</div><div> vtkPoints *suction_points = newPtsSuction;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span></div><div>  vtkSmartPointer&lt;vtkPolyData&gt; polydata = vtkSmartPointer&lt;vtkPolyData&gt;::New();</div>
<div>  polydata-&gt;SetPoints(points);</div><div><br></div><div>  vtkSmartPointer&lt;vtkPolyData&gt; suction_polydata = vtkSmartPointer&lt;vtkPolyData&gt;::New();</div><div>  suction_polydata-&gt;SetPoints(suction_points);</div>
<div><br></div><div>  vtkSmartPointer&lt;vtkDoubleArray&gt; weights = vtkSmartPointer&lt;vtkDoubleArray&gt;::New();</div><div>  weights-&gt;SetNumberOfValues(PoValues.GetSize());</div><div>  for(int i=0; i&lt; PoValues.GetSize();i++){</div>
<div>  weights-&gt;SetValue(i, PoValues[i]);</div><div>  }</div><div><br></div><div>  </div><div>  vtkSmartPointer&lt;vtkDoubleArray&gt; suction_weights = vtkSmartPointer&lt;vtkDoubleArray&gt;::New();</div><div>  suction_weights-&gt;SetNumberOfValues(PoValuesSuction.GetSize());</div>
<div>  for(int i=0; i&lt; PoValuesSuction.GetSize();i++){</div><div>  suction_weights-&gt;SetValue(i, PoValuesSuction[i]);</div><div>  }</div><div><br></div><div> </div><div>  vtkSmartPointer&lt;vtkVertexGlyphFilter&gt; glyphFilter = vtkSmartPointer&lt;vtkVertexGlyphFilter&gt;::New();</div>
<div>  glyphFilter-&gt;SetInputConnection(polydata-&gt;GetProducerPort());</div><div>  glyphFilter-&gt;Update();</div><div><br></div><div>  vtkSmartPointer&lt;vtkVertexGlyphFilter&gt; suction_glyphFilter = vtkSmartPointer&lt;vtkVertexGlyphFilter&gt;::New();</div>
<div>  suction_glyphFilter-&gt;SetInputConnection(suction_polydata-&gt;GetProducerPort());</div><div>  suction_glyphFilter-&gt;Update();</div><div> </div><div>  // Create a plane </div><div> // vtkSmartPointer&lt;vtkPlane&gt; plane = vtkSmartPointer&lt;vtkPlane&gt;::New();</div>
<div>  //plane-&gt;SetOrigin(polydata-&gt;GetCenter());</div><div>  //plane-&gt;SetNormal(1,1,1);</div><div><br></div><div>  </div><div>  // Construct the surface and create isosurface.<span class="Apple-tab-span" style="white-space:pre">        </span></div>
<div>  vtkSmartPointer&lt;vtkSurfaceReconstructionFilter&gt; surf = vtkSmartPointer&lt;vtkSurfaceReconstructionFilter&gt;::New();</div><div><br></div><div>  surf-&gt;SetInput(polydata);</div><div> //</div><div>  vtkSmartPointer&lt;vtkContourFilter&gt; cf =  vtkSmartPointer&lt;vtkContourFilter&gt;::New();</div>
<div>  cf-&gt;SetInputConnection(surf-&gt;GetOutputPort());</div><div>  cf-&gt;Update();</div><div><br></div><div>  // Construct the suction blade surface and create isosurface.<span class="Apple-tab-span" style="white-space:pre">        </span></div>
<div>  vtkSmartPointer&lt;vtkSurfaceReconstructionFilter&gt; suction_surf = vtkSmartPointer&lt;vtkSurfaceReconstructionFilter&gt;::New();</div><div><br></div><div>  suction_surf-&gt;SetInput(suction_polydata);</div><div> //</div>
<div>  vtkSmartPointer&lt;vtkContourFilter&gt; suction_cf =  vtkSmartPointer&lt;vtkContourFilter&gt;::New();</div><div>  suction_cf-&gt;SetInputConnection(suction_surf-&gt;GetOutputPort());</div><div>  suction_cf-&gt;Update();</div>
<div><br></div><div> vtkPolyData* outputPolyData = cf-&gt;GetOutput(); </div><div> vtkPolyData* suction_outputPolyData = suction_cf-&gt;GetOutput(); </div><div><br></div><div>  //double bounds[6];</div><div>  //outputPolyData-&gt;GetBounds(bounds);</div>
<div> </div><div>  // Find min and max z</div><div> // double minz = bounds[4];</div><div> // double maxz = bounds[5];</div><div> </div><div> </div><div>  // Create the color map</div><div>  vtkSmartPointer&lt;vtkLookupTable&gt; colorLookupTable = vtkSmartPointer&lt;vtkLookupTable&gt;::New();</div>
<div>colorLookupTable-&gt;SetHueRange(0.667,0.0);</div><div>colorLookupTable-&gt;SetNumberOfColors(16);</div><div><br></div><div> // colorLookupTable-&gt;SetTableRange(minz, maxz);</div><div><br></div><div>  colorLookupTable-&gt;Build();</div>
<div><br></div><div>  // Create the color map</div><div>  vtkSmartPointer&lt;vtkLookupTable&gt; colorLookupTable_s = vtkSmartPointer&lt;vtkLookupTable&gt;::New();</div><div>colorLookupTable_s-&gt;SetHueRange(0.667,0.0);</div>
<div>colorLookupTable_s-&gt;SetNumberOfColors(16);</div><div><br></div><div> // colorLookupTable-&gt;SetTableRange(minz, maxz);</div><div><br></div><div>  colorLookupTable_s-&gt;Build();</div><div> </div><div>  // Generate the colors for each point based on the color map</div>
<div>/*  vtkSmartPointer&lt;vtkUnsignedCharArray&gt; colors = </div><div>    vtkSmartPointer&lt;vtkUnsignedCharArray&gt;::New();</div><div>  colors-&gt;SetNumberOfComponents(3);</div><div>  colors-&gt;SetName(&quot;Colors&quot;);</div>
<div>  for(int i = 0; i &lt; outputPolyData-&gt;GetNumberOfPoints(); i++)</div><div>    {</div><div>    double p[3];</div><div>    outputPolyData-&gt;GetPoint(i,p);</div><div> </div><div>    double dcolor[3];</div><div>    colorLookupTable-&gt;GetColor(PoValues[i], dcolor);</div>
<div>    unsigned char color[3];</div><div>    for(unsigned int j = 0; j &lt; 3; j++)</div><div>      {</div><div>      color[j] = static_cast&lt;unsigned char&gt;(255.0 * dcolor[j]);</div><div>      }</div><div><br></div>
<div>    colors-&gt;InsertNextTupleValue(color);</div><div>    }</div><div> </div><div>  outputPolyData-&gt;GetPointData()-&gt;SetScalars(colors);*/</div><div> // double min = minimumValue(PoValues);</div><div>     int length = PoValues.GetSize();// establish size of array</div>
<div>     double max = PoValues[0];       // start with max = first element</div><div><br></div><div>     for(int i = 1; i&lt;length; i++)</div><div>     {</div><div>          if(PoValues[i] &gt; max)</div><div>                max = PoValues[i];</div>
<div>     }</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span> double min = PoValues[0];</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span> for(int i = 1; i&lt;length; i++)</div>
<div>     {</div><div>          if(PoValues[i] &lt; min)</div><div>                min = PoValues[i];</div><div>     }</div><div>     </div><div><br></div><div>  colorLookupTable-&gt;SetTableRange( min,max);</div><div>  outputPolyData-&gt;GetPointData()-&gt;SetScalars(weights);</div>
<div><br></div><div>  int length_s = PoValuesSuction.GetSize();// establish size of array</div><div>     double max_s = PoValuesSuction[0];       // start with max = first element</div><div><br></div><div>     for(int i = 1; i&lt;length_s; i++)</div>
<div>     {</div><div>          if(PoValuesSuction[i] &gt; max_s)</div><div>                max_s = PoValuesSuction[i];</div><div>     }</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span> double min_s = PoValuesSuction[0];</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span> for(int i = 1; i&lt;length_s; i++)</div><div>     {</div><div>          if(PoValuesSuction[i] &lt; min_s)</div><div>                min_s = PoValuesSuction[i];</div>
<div>     }</div><div>     </div><div><br></div><div>  colorLookupTable_s-&gt;SetTableRange( min_s,max_s);</div><div>  suction_outputPolyData-&gt;GetPointData()-&gt;SetScalars(suction_weights);</div><div> </div><div>  // Create a mapper and actor</div>
<div>  vtkSmartPointer&lt;vtkPolyDataMapper&gt; mapper = vtkSmartPointer&lt;vtkPolyDataMapper&gt;::New();</div><div>  mapper-&gt;SetInputConnection(/*reverse-&gt;GetOutputPort()*/cf-&gt;GetOutputPort());</div><div> mapper-&gt;ScalarVisibilityOn();</div>
<div>  mapper-&gt;SetColorModeToMapScalars();</div><div>  mapper-&gt;SetLookupTable(colorLookupTable);</div><div>  mapper-&gt;SetScalarMaterialModeToDefault();</div><div> mapper-&gt;SetScalarRange(min,max);</div><div>  vtkSmartPointer&lt;vtkActor&gt; actor = vtkSmartPointer&lt;vtkActor&gt;::New();</div>
<div>   //actor-&gt;GetProperty()-&gt;SetColor(1.0, 0.8941, 0.7686); // bisque</div><div>  actor-&gt;SetMapper(mapper);</div><div><br></div><div>  </div><div>  // Create a mapper and actor for suction blade</div><div>  vtkSmartPointer&lt;vtkPolyDataMapper&gt; suction_mapper = vtkSmartPointer&lt;vtkPolyDataMapper&gt;::New();</div>
<div>  suction_mapper-&gt;SetInputConnection(/*reverse-&gt;GetOutputPort()*/suction_cf-&gt;GetOutputPort());</div><div> suction_mapper-&gt;ScalarVisibilityOn();</div><div>  suction_mapper-&gt;SetColorModeToMapScalars();</div>
<div>  suction_mapper-&gt;SetLookupTable(colorLookupTable_s);</div><div>  suction_mapper-&gt;SetScalarMaterialModeToDefault();</div><div> suction_mapper-&gt;SetScalarRange(min_s,max_s);</div><div>  vtkSmartPointer&lt;vtkActor&gt; suction_actor = vtkSmartPointer&lt;vtkActor&gt;::New();</div>
<div> //  actor-&gt;GetProperty()-&gt;SetColor(1.0, 0.8941, 0.7686); // bisque</div><div>  suction_actor-&gt;SetMapper(suction_mapper);</div><div> </div><div>  //Create a renderer, render window, and interactor</div><div>
  vtkSmartPointer&lt;vtkRenderer&gt; renderer = vtkSmartPointer&lt;vtkRenderer&gt;::New();</div><div>  renderer-&gt;SetViewport( 0., 0., 0.5, 1. );</div><div>  renderer-&gt;SetBackground( 0.2, 0.2, 0.8 );</div><div>  </div>
<div>  vtkSmartPointer&lt;vtkRenderer&gt; suction_renderer = vtkSmartPointer&lt;vtkRenderer&gt;::New();</div><div>  suction_renderer-&gt;SetViewport( 0.5, 0., 1., 1. );</div><div>  suction_renderer-&gt;SetBackground( 0.8, 0.2, 0.2 );</div>
<div><br></div><div>  </div><div>  vtkSmartPointer&lt;vtkRenderWindow&gt; renderWindow = vtkSmartPointer&lt;vtkRenderWindow&gt;::New();</div><div>  renderWindow-&gt;AddRenderer(renderer);</div><div>  renderWindow-&gt;AddRenderer(suction_renderer);</div>
<div>  vtkSmartPointer&lt;vtkRenderWindowInteractor&gt; renderWindowInteractor = vtkSmartPointer&lt;vtkRenderWindowInteractor&gt;::New();</div><div>  renderWindowInteractor-&gt;SetRenderWindow(renderWindow);</div><div><br>
</div><div> // vtkSmartPointer&lt;vtkRenderWindowInteractor&gt; interactor = vtkSmartPointer&lt;vtkRenderWindowInteractor&gt;::New();</div><div>  //interactor-&gt;SetRenderWindow( renderWindow );</div><div>  //Add the actor to the scene</div>
<div>  renderer-&gt;AddViewProp(actor);</div><div>  suction_renderer-&gt;AddViewProp(suction_actor);</div><div> // renderer-&gt;SetBackground(.1, .6, .3); // Background color green</div><div> </div><div>  //Render and interact</div>
<div>  renderWindow-&gt;Render();</div><div>  renderWindowInteractor-&gt;Start(); <br clear="all"><div><br></div><div>Please give me your ideas.</div><div>Thanks.</div>-- <br><div></div><font color="#666666">Gish</font><br>

</div>