Hi David,<div><br></div><div>I saw that in the example (
<a href="http://www.vtk.org/Wiki/VTK/Examples/Cxx/Visualization/MoveActor" target="_blank" style>http://www.vtk.org/Wiki/VTK/Examples/Cxx/Visualization/MoveActor</a> ) if we did not set the center of the objects only one object is shown. I want to show the two objects according to their natural coordinates that keeps the natural shape of the object which is formed by the added objects. The screenshots of the object I got and the object I want is attached herewith.</div>
<div>The code I used is similar to the one in the example except I did not set any center. </div><div>Please give me your ideas.</div><div><br></div><div>Thanks.<br><br><div class="gmail_quote">On Thu, Feb 9, 2012 at 9:21 AM, Gishara Indeewarie <span dir="ltr"><<a href="mailto:gish.777@gmail.com">gish.777@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">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.<div class="HOEnZb">
<div class="h5"><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" target="_blank">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><div>On Wed, Feb 8, 2012 at 5:21 AM, Gishara Indeewarie <<a href="mailto:gish.777@gmail.com" target="_blank">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><font color="#888888"><br>
David<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div></div></div><span class="HOEnZb"><font color="#888888">-- <br><div></div><font color="#666666">Gish</font><br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div></div><font color="#666666">Gish</font><br>
</div>