Thanks David. I fixed my problem by adding two actors to the same renderer as per the example. (I was adding two renderers before) Thanks again.<br><br><div class="gmail_quote">On Wed, Feb 8, 2012 at 6:01 PM, David Doria <span dir="ltr"><<a href="mailto:daviddoria@gmail.com">daviddoria@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Wed, Feb 8, 2012 at 5:21 AM, Gishara Indeewarie <<a href="mailto:gish.777@gmail.com">gish.777@gmail.com</a>> wrote:<br>
> Hi all,<br>
><br>
> I want to add two surfaces in to a same window. But when I add the second<br>
> surface the first surface can't be seen. It worked well when I viewed only<br>
> the points without creating the surfaces.<br>
> I have managed to show the two surfaces but in different viewports, but I<br>
> want to show it in the same where the user can view the relevant positions<br>
> of the surfaces.<br>
> The code I have done so far is given below.<br>
><br>
> vtkPoints *points = newPts;//ReadCFDData2();<br>
> vtkPoints *suction_points = newPtsSuction;<br>
><br>
> vtkSmartPointer<vtkPolyData> polydata =<br>
> vtkSmartPointer<vtkPolyData>::New();<br>
> polydata->SetPoints(points);<br>
><br>
> vtkSmartPointer<vtkPolyData> suction_polydata =<br>
> vtkSmartPointer<vtkPolyData>::New();<br>
> suction_polydata->SetPoints(suction_points);<br>
><br>
> vtkSmartPointer<vtkDoubleArray> weights =<br>
> vtkSmartPointer<vtkDoubleArray>::New();<br>
> weights->SetNumberOfValues(PoValues.GetSize());<br>
> for(int i=0; i< PoValues.GetSize();i++){<br>
> weights->SetValue(i, PoValues[i]);<br>
> }<br>
><br>
><br>
> vtkSmartPointer<vtkDoubleArray> suction_weights =<br>
> vtkSmartPointer<vtkDoubleArray>::New();<br>
> suction_weights->SetNumberOfValues(PoValuesSuction.GetSize());<br>
> for(int i=0; i< PoValuesSuction.GetSize();i++){<br>
> suction_weights->SetValue(i, PoValuesSuction[i]);<br>
> }<br>
><br>
><br>
> vtkSmartPointer<vtkVertexGlyphFilter> glyphFilter =<br>
> vtkSmartPointer<vtkVertexGlyphFilter>::New();<br>
> glyphFilter->SetInputConnection(polydata->GetProducerPort());<br>
> glyphFilter->Update();<br>
><br>
> vtkSmartPointer<vtkVertexGlyphFilter> suction_glyphFilter =<br>
> vtkSmartPointer<vtkVertexGlyphFilter>::New();<br>
><br>
> suction_glyphFilter->SetInputConnection(suction_polydata->GetProducerPort());<br>
> suction_glyphFilter->Update();<br>
><br>
> // Create a plane<br>
> // vtkSmartPointer<vtkPlane> plane = vtkSmartPointer<vtkPlane>::New();<br>
> //plane->SetOrigin(polydata->GetCenter());<br>
> //plane->SetNormal(1,1,1);<br>
><br>
><br>
> // Construct the surface and create isosurface.<br>
> vtkSmartPointer<vtkSurfaceReconstructionFilter> surf =<br>
> vtkSmartPointer<vtkSurfaceReconstructionFilter>::New();<br>
><br>
> surf->SetInput(polydata);<br>
> //<br>
> vtkSmartPointer<vtkContourFilter> cf =<br>
> vtkSmartPointer<vtkContourFilter>::New();<br>
> cf->SetInputConnection(surf->GetOutputPort());<br>
> cf->Update();<br>
><br>
> // Construct the suction blade surface and create isosurface.<br>
> vtkSmartPointer<vtkSurfaceReconstructionFilter> suction_surf =<br>
> vtkSmartPointer<vtkSurfaceReconstructionFilter>::New();<br>
><br>
> suction_surf->SetInput(suction_polydata);<br>
> //<br>
> vtkSmartPointer<vtkContourFilter> suction_cf =<br>
> vtkSmartPointer<vtkContourFilter>::New();<br>
> suction_cf->SetInputConnection(suction_surf->GetOutputPort());<br>
> suction_cf->Update();<br>
><br>
> vtkPolyData* outputPolyData = cf->GetOutput();<br>
> vtkPolyData* suction_outputPolyData = suction_cf->GetOutput();<br>
><br>
> //double bounds[6];<br>
> //outputPolyData->GetBounds(bounds);<br>
><br>
> // Find min and max z<br>
> // double minz = bounds[4];<br>
> // double maxz = bounds[5];<br>
><br>
><br>
> // Create the color map<br>
> vtkSmartPointer<vtkLookupTable> colorLookupTable =<br>
> vtkSmartPointer<vtkLookupTable>::New();<br>
> colorLookupTable->SetHueRange(0.667,0.0);<br>
> colorLookupTable->SetNumberOfColors(16);<br>
><br>
> // colorLookupTable->SetTableRange(minz, maxz);<br>
><br>
> colorLookupTable->Build();<br>
><br>
> // Create the color map<br>
> vtkSmartPointer<vtkLookupTable> colorLookupTable_s =<br>
> vtkSmartPointer<vtkLookupTable>::New();<br>
> colorLookupTable_s->SetHueRange(0.667,0.0);<br>
> colorLookupTable_s->SetNumberOfColors(16);<br>
><br>
> // colorLookupTable->SetTableRange(minz, maxz);<br>
><br>
> colorLookupTable_s->Build();<br>
><br>
> // Generate the colors for each point based on the color map<br>
> /* vtkSmartPointer<vtkUnsignedCharArray> colors =<br>
> vtkSmartPointer<vtkUnsignedCharArray>::New();<br>
> colors->SetNumberOfComponents(3);<br>
> colors->SetName("Colors");<br>
> for(int i = 0; i < outputPolyData->GetNumberOfPoints(); i++)<br>
> {<br>
> double p[3];<br>
> outputPolyData->GetPoint(i,p);<br>
><br>
> double dcolor[3];<br>
> colorLookupTable->GetColor(PoValues[i], dcolor);<br>
> unsigned char color[3];<br>
> for(unsigned int j = 0; j < 3; j++)<br>
> {<br>
> color[j] = static_cast<unsigned char>(255.0 * dcolor[j]);<br>
> }<br>
><br>
> colors->InsertNextTupleValue(color);<br>
> }<br>
><br>
> outputPolyData->GetPointData()->SetScalars(colors);*/<br>
> // double min = minimumValue(PoValues);<br>
> int length = PoValues.GetSize();// establish size of array<br>
> double max = PoValues[0]; // start with max = first element<br>
><br>
> for(int i = 1; i<length; i++)<br>
> {<br>
> if(PoValues[i] > max)<br>
> max = PoValues[i];<br>
> }<br>
><br>
> double min = PoValues[0];<br>
><br>
> for(int i = 1; i<length; i++)<br>
> {<br>
> if(PoValues[i] < min)<br>
> min = PoValues[i];<br>
> }<br>
><br>
><br>
> colorLookupTable->SetTableRange( min,max);<br>
> outputPolyData->GetPointData()->SetScalars(weights);<br>
><br>
> int length_s = PoValuesSuction.GetSize();// establish size of array<br>
> double max_s = PoValuesSuction[0]; // start with max = first<br>
> element<br>
><br>
> for(int i = 1; i<length_s; i++)<br>
> {<br>
> if(PoValuesSuction[i] > max_s)<br>
> max_s = PoValuesSuction[i];<br>
> }<br>
><br>
> double min_s = PoValuesSuction[0];<br>
><br>
> for(int i = 1; i<length_s; i++)<br>
> {<br>
> if(PoValuesSuction[i] < min_s)<br>
> min_s = PoValuesSuction[i];<br>
> }<br>
><br>
><br>
> colorLookupTable_s->SetTableRange( min_s,max_s);<br>
> suction_outputPolyData->GetPointData()->SetScalars(suction_weights);<br>
><br>
> // Create a mapper and actor<br>
> vtkSmartPointer<vtkPolyDataMapper> mapper =<br>
> vtkSmartPointer<vtkPolyDataMapper>::New();<br>
><br>
> mapper->SetInputConnection(/*reverse->GetOutputPort()*/cf->GetOutputPort());<br>
> mapper->ScalarVisibilityOn();<br>
> mapper->SetColorModeToMapScalars();<br>
> mapper->SetLookupTable(colorLookupTable);<br>
> mapper->SetScalarMaterialModeToDefault();<br>
> mapper->SetScalarRange(min,max);<br>
> vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();<br>
> //actor->GetProperty()->SetColor(1.0, 0.8941, 0.7686); // bisque<br>
> actor->SetMapper(mapper);<br>
><br>
><br>
> // Create a mapper and actor for suction blade<br>
> vtkSmartPointer<vtkPolyDataMapper> suction_mapper =<br>
> vtkSmartPointer<vtkPolyDataMapper>::New();<br>
><br>
> suction_mapper->SetInputConnection(/*reverse->GetOutputPort()*/suction_cf->GetOutputPort());<br>
> suction_mapper->ScalarVisibilityOn();<br>
> suction_mapper->SetColorModeToMapScalars();<br>
> suction_mapper->SetLookupTable(colorLookupTable_s);<br>
> suction_mapper->SetScalarMaterialModeToDefault();<br>
> suction_mapper->SetScalarRange(min_s,max_s);<br>
> vtkSmartPointer<vtkActor> suction_actor =<br>
> vtkSmartPointer<vtkActor>::New();<br>
> // actor->GetProperty()->SetColor(1.0, 0.8941, 0.7686); // bisque<br>
> suction_actor->SetMapper(suction_mapper);<br>
><br>
> //Create a renderer, render window, and interactor<br>
> vtkSmartPointer<vtkRenderer> renderer =<br>
> vtkSmartPointer<vtkRenderer>::New();<br>
> renderer->SetViewport( 0., 0., 0.5, 1. );<br>
> renderer->SetBackground( 0.2, 0.2, 0.8 );<br>
><br>
> vtkSmartPointer<vtkRenderer> suction_renderer =<br>
> vtkSmartPointer<vtkRenderer>::New();<br>
> suction_renderer->SetViewport( 0.5, 0., 1., 1. );<br>
> suction_renderer->SetBackground( 0.8, 0.2, 0.2 );<br>
><br>
><br>
> vtkSmartPointer<vtkRenderWindow> renderWindow =<br>
> vtkSmartPointer<vtkRenderWindow>::New();<br>
> renderWindow->AddRenderer(renderer);<br>
> renderWindow->AddRenderer(suction_renderer);<br>
> vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =<br>
> vtkSmartPointer<vtkRenderWindowInteractor>::New();<br>
> renderWindowInteractor->SetRenderWindow(renderWindow);<br>
><br>
> // vtkSmartPointer<vtkRenderWindowInteractor> interactor =<br>
> vtkSmartPointer<vtkRenderWindowInteractor>::New();<br>
> //interactor->SetRenderWindow( renderWindow );<br>
> //Add the actor to the scene<br>
> renderer->AddViewProp(actor);<br>
> suction_renderer->AddViewProp(suction_actor);<br>
> // renderer->SetBackground(.1, .6, .3); // Background color green<br>
><br>
> //Render and interact<br>
> renderWindow->Render();<br>
> renderWindowInteractor->Start();<br>
><br>
> Please give me your ideas.<br>
> Thanks.<br>
> --<br>
> Gish<br>
<br>
</div></div>Please create an as-simple-as-possible example of what you are trying to do.<br>
<br>
>From your actual question, it sounds like you just want to add two<br>
objects to a scene. You seem to be doing it correctly at a glance, but<br>
convince yourself using a short, compilable example like this:<br>
<br>
<a href="http://www.vtk.org/Wiki/VTK/Examples/Cxx/Visualization/MoveActor" target="_blank">http://www.vtk.org/Wiki/VTK/Examples/Cxx/Visualization/MoveActor</a><br>
<br>
I would start from something like that and gradually add back in the<br>
rest of your code (i.e. the surface creation, coloring, etc) and see<br>
when you don't get what you'd expect. Then you can ask a succinct<br>
question and hopefully we can help.<br>
<span class="HOEnZb"><font color="#888888"><br>
David<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div></div><font color="#666666">Gish</font><br>