Hello! I am trying to visualize the cell data from an imported VRML model, and I honestly don't know where to begin.<br>Anyone has any ideas?<br><br>Compliments<br>Ricardo Seco<br><br>Application Code Below<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<br><br><br>/*****************************************************************************<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Main.cpp<br>*****************************************************************************/
<br><br>#include &quot;vtkVRMLImporter.h&quot;<br>#include &quot;vtkRenderWindow.h&quot;<br>#include &quot;vtkRenderer.h&quot;<br>#include &quot;vtkRenderWindowInteractor.h&quot;<br>#include &quot;vtkActor.h&quot;<br>#include &quot;
vtkOpenGLActor.h&quot;<br>#include &quot;vtkActorCollection.h&quot;<br>#include &quot;vtkCellPicker.h&quot;<br>#include &quot;vtkSphereSource.h&quot;<br>#include &quot;vtkPolyDataMapper.h&quot;<br>#include &quot;vtkPolyData.h
&quot;<br>#include &quot;vtkProperty.h&quot;<br>#include &quot;vtkCommand.h&quot;<br>#include &quot;stdio.h&quot;<br><br>/* IMPLEMENTAÇÂO DO OBSERVER PARA O CELL PICKER */<br><br>class vtkMyCallback : public vtkCommand<br>
{<br>public:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vtkMyCallback::vtkMyCallback() { m_pvtkActorSelection = NULL; };<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; static vtkMyCallback *New() { return new vtkMyCallback; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; void SetSelectionActor(vtkActor* pvtkActorSelection) { m_pvtkActorSelection = pvtkActorSelection; };
<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; virtual void Execute(vtkObject *caller, unsigned long, void*)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; vtkRenderWindowInteractor *iren = reinterpret_cast&lt;vtkRenderWindowInteractor*&gt;(caller);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; vtkCellPicker *picker = (vtkCellPicker *)iren-&gt;GetPicker();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (picker-&gt;GetCellId() != -1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (m_pvtkActorSelection)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m_pvtkActorSelection-&gt;SetPosition(picker-&gt;GetPickPosition());
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iren-&gt;Render();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>private:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vtkActor* m_pvtkActorSelection;<br>};<br><br>int main( )<br>{<br>&nbsp;&nbsp;&nbsp; // Definição da esfera utilizada no Picking para assinalar a célula escolhida
<br>&nbsp;&nbsp;&nbsp; vtkSphereSource *sphere=vtkSphereSource::New();<br>&nbsp;&nbsp;&nbsp; sphere-&gt;SetThetaResolution(8); <br>&nbsp;&nbsp;&nbsp; sphere-&gt;SetPhiResolution(8);<br>&nbsp;&nbsp;&nbsp; sphere-&gt;SetRadius(0.05);<br>&nbsp;&nbsp;&nbsp; vtkPolyDataMapper *sphereMapper = vtkPolyDataMapper::New();
<br>&nbsp;&nbsp;&nbsp; vtkPolyDataMapper *cellMapper = vtkPolyDataMapper::New();<br>&nbsp;&nbsp;&nbsp; vtkPolyData *cellData = vtkPolyData::New();<br>&nbsp;&nbsp;&nbsp; sphereMapper-&gt;SetInput(sphere-&gt;GetOutput());<br><br>&nbsp;&nbsp;&nbsp; // Estabelecimento da esfera como sendo do tipo de actor
<br><br>&nbsp;&nbsp;&nbsp; vtkOpenGLActor *myPicker=vtkOpenGLActor::New();<br>&nbsp;&nbsp;&nbsp; myPicker-&gt;GetProperty()-&gt;SetColor(1.0,0.0,0.0);<br>&nbsp;&nbsp;&nbsp; myPicker-&gt;SetMapper(sphereMapper);<br><br>&nbsp;&nbsp;&nbsp; // Claro que não nos interessa que seja &quot;pickable&quot;
<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; myPicker-&gt;PickableOff();<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; /* Importador de Ficheiros VRML */<br><br>&nbsp;&nbsp;&nbsp; vtkVRMLImporter *importer=vtkVRMLImporter::New();<br>&nbsp;&nbsp;&nbsp; importer-&gt;SetFileName(&quot;Model.wrl&quot;);<br>&nbsp;&nbsp;&nbsp; importer-&gt;Read();
<br>&nbsp;&nbsp;&nbsp; vtkRenderer *ren1;<br>&nbsp;&nbsp;&nbsp; ren1 = importer-&gt;GetRenderer();<br><br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; // Obtenção do número de actores que compõem a cena VRML <br>&nbsp; <br>&nbsp;&nbsp;&nbsp; int NumberOfActors = ren1-&gt;GetActors()-&gt;GetNumberOfItems();
<br><br>&nbsp;&nbsp;&nbsp; printf(&quot;O numero de actores que compoe a cena sao %d \n&quot;, NumberOfActors);<br><br>&nbsp;&nbsp;&nbsp; // Coleccao de Actores que<br>&nbsp;&nbsp;&nbsp; // armazenará o conjunto de <br>&nbsp;&nbsp;&nbsp; // actores da cena VRML<br><br>&nbsp;&nbsp;&nbsp; vtkActorCollection *ActColection;
<br><br>&nbsp;&nbsp;&nbsp; // Objecto vtkActor que representará<br>&nbsp;&nbsp;&nbsp; // cada actor<br><br>&nbsp;&nbsp;&nbsp; vtkActor&nbsp; *Act;<br><br>&nbsp;&nbsp;&nbsp; // Array que armazenará as coordenadas<br>&nbsp;&nbsp;&nbsp; // de cada Actor da cena VRML<br><br>&nbsp;&nbsp;&nbsp; double bounds[6];<br><br>&nbsp;&nbsp;&nbsp; ren1-&gt;SetBackground(0,0,1);
<br><br>&nbsp;&nbsp;&nbsp; &nbsp;// Contador de actores<br><br>&nbsp;&nbsp;&nbsp; int auxiliar = 0;<br><br>&nbsp;&nbsp;&nbsp; float volume[9];<br>&nbsp;&nbsp;&nbsp; for (int i=0; i&lt;=8; i++)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; volume[i]=0.0;<br>&nbsp;&nbsp;&nbsp; float volumeTotal = 0.0;<br>&nbsp;<br>&nbsp;&nbsp;&nbsp; if (NumberOfActors &gt;0)
<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Obtenção dos actores da cena<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ActColection = ren1-&gt;GetActors();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ActColection-&gt;InitTraversal();<br>&nbsp;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Para cada iteração ...<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; for (int i=0;i&lt;NumberOfActors;i++)
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; auxiliar++;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Obter esse actor<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Act = ActColection-&gt;GetNextActor();<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (Act!=NULL)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (Act-&gt;GetMapper()!=NULL)
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(&quot;------------------------------------------------------------------ \n&quot;); <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Este código consoante o indice do actor<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // que &quot;engloba&quot; o modelo torna-o ou não<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // pickable. No caso de só existir um actor<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // este é sempre pickable<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ((auxiliar==1) &amp;&amp; (NumberOfActors&gt;1))
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Act-&gt;PickableOff();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; ren1-&gt;AddActor(Act);<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Obtenção das coordenadas do actor corrente
<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; Act-&gt;GetBounds(bounds);<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(&quot;------------------------------------------------------------------ \n&quot;); <br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(&quot;Actor %d Tem dimensoes : \n Xmin: %f \n Xmax: %f \n Ymin: %f \n Ymax: %f \n Zmin: %f \n Zmax: %f \n&quot;,auxiliar,bounds[0],bounds[1],bounds[2],bounds[3],bounds[4],bounds[5]);
<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Calculo do volume do Objecto (Aproximado)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; volume[i] = ((bounds[1]-bounds[0])*(bounds[3]-bounds[2])*(bounds[5]-bounds[4]));<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(&quot;Actor %d Tem Volume : %f \n&quot;,auxiliar,volume[i]);
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(&quot;------------------------------------------------------------------ \n&quot;);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //Calculo do volume &quot;livre&quot; da sala
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; volumeTotal = volume[0]-(volume[1]+volume[2]+volume[3]+volume[4]+volume[5]+volume[6]+volume[7]);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(&quot;A Sala Tem Volume 'Livre' : %f \n&quot;,volumeTotal);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf(&quot;------------------------------------------------------------------ \n&quot;);
<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; /* Janela de Renderização */<br>&nbsp;&nbsp;&nbsp; vtkRenderWindow *renWin = vtkRenderWindow::New();<br>&nbsp;&nbsp;&nbsp; renWin-&gt;AddRenderer(ren1);<br>&nbsp;&nbsp;&nbsp; renWin-&gt;SetSize(640,480);<br>&nbsp;&nbsp;&nbsp; ren1-&gt;AddActor(myPicker);<br>
&nbsp;&nbsp;&nbsp; ren1-&gt;Render();&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; /* Janela de Interacção */<br>&nbsp;&nbsp;&nbsp; vtkRenderWindowInteractor *iren=vtkRenderWindowInteractor::New();<br>&nbsp;&nbsp;&nbsp; iren-&gt;SetRenderWindow(renWin);<br><br>&nbsp;&nbsp;&nbsp; /* Definicao de um Cell Picker */
<br>&nbsp;&nbsp;&nbsp; vtkCellPicker *picker=vtkCellPicker::New();<br>&nbsp;&nbsp;&nbsp; picker-&gt;SetTolerance(0.01);<br>&nbsp;&nbsp;&nbsp; iren-&gt;SetPicker(picker);<br>&nbsp;&nbsp;&nbsp; iren-&gt;Initialize();<br><br>&nbsp;&nbsp;&nbsp; // Código de atribuição do Observer<br><br>&nbsp;&nbsp;&nbsp; vtkMyCallback *callback = vtkMyCallback::New();
<br>&nbsp;&nbsp;&nbsp; callback-&gt;SetSelectionActor(myPicker);<br>&nbsp;&nbsp;&nbsp; iren-&gt;AddObserver(vtkCommand::EndPickEvent, callback);&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; /* Inicio da renderização da Cena */<br>&nbsp;&nbsp;&nbsp; iren-&gt;Start();&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; ren1-&gt;Delete();
<br>&nbsp;&nbsp;&nbsp; picker-&gt;Delete();<br>&nbsp;&nbsp;&nbsp; importer-&gt;Delete();<br>&nbsp;&nbsp;&nbsp; renWin-&gt;Delete();<br>&nbsp;&nbsp;&nbsp; return 0;<br>}<br><br>