<div dir="ltr">I am confused. Why wouldn&#39;t you use 1 vtkPolyData for the whole thing? You can add multiple polygons each with their own points to 1 vtkPolyData. I am not sure why the last block is being rendered in this case but what you are doing will have a large memory overhead because each vtkPolyData object uses a decent amount of memory for various internal data structures.<div>

<br></div><div>Best,</div><div>-berk</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Aug 29, 2013 at 4:41 AM, finfanillo <span dir="ltr">&lt;<a href="mailto:esteban.vidal@huawei.com" target="_blank">esteban.vidal@huawei.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi all,<br>
<br>
I have a huge amount of polydata (octagons) created from a point cloud, so I<br>
want to render them with 1 actor, in order to save memory. I need to keep<br>
track of color information, which is different for every point. My code is<br>
something like:<br>
<br>
////////////<br>
<br>
vtkSmartPointer&lt;vtkPoints&gt; points = vtkSmartPointer&lt;vtkPoints&gt;::New();<br>
vtkSmartPointer&lt;vtkUnsignedCharArray&gt; colors =<br>
vtkSmartPointer&lt;vtkUnsignedCharArray&gt;::New();<br>
vtkSmartPointer&lt;vtkPolygon&gt; octagon = vtkSmartPointer&lt;vtkPolygon&gt;::New();<br>
vtkSmartPointer&lt;vtkCellArray&gt; Octagons =<br>
vtkSmartPointer&lt;vtkCellArray&gt;::New();<br>
vtkSmartPointer&lt;vtkPolyData&gt; polyData = vtkSmartPointer&lt;vtkPolyData&gt;::New();<br>
vtkMultiBlockDataSet* Blocks = vtkMultiBlockDataSet::New();<br>
<br>
<br>
for(size_t i=0;i&lt;point_cloud_size;++i)<br>
{<br>
   // Create and octagon for every point, using them at a central points and<br>
getting 8 vertices<br>
<br>
   points-&gt;InsertNextPoint(vertex_1_x[i], vertex_1_y[i], vertex_1_z[i]);<br>
   ...<br>
   points-&gt;InsertNextPoint(vertex_8_x[i], vertex_8_y[i], vertex_8_z[i]);<br>
<br>
   // Add color information to every vertex<br>
<br>
   colors-&gt;SetNumberOfComponents(3);<br>
   colors-&gt;SetName(&quot;Colors&quot;);<br>
   colors-&gt;InsertNextTupleValue(point_color[i]);<br>
   ...<br>
   colors-&gt;InsertNextTupleValue(point_color[i]); // 8 times, 1 for every<br>
vertex<br>
<br>
  // Create every octagon<br>
<br>
  octagon-&gt;GetPointIds()-&gt;SetNumberOfIds(8);<br>
  octagon-&gt;GetPointIds()-&gt;SetId(0, 0);<br>
  octagon-&gt;GetPointIds()-&gt;SetId(1, 1);<br>
  ...<br>
  octagon-&gt;GetPointIds()-&gt;SetId(7, 7);<br>
<br>
  Octagons-&gt;InsertNextCell(octagon);<br>
<br>
  // Create the polydatas and put it into a MultiBlockDataSet<br>
<br>
  polyData -&gt;SetPoints(points);<br>
  polyData -&gt;SetPolys(Octagons);<br>
  polyData -&gt;GetPointData()-&gt;SetScalars(colors);<br>
<br>
  Blocks -&gt;SetBlock(i+1,polyData);<br>
  Blocks -&gt;Modified();<br>
<br>
  // Initialize<br>
<br>
  points-&gt;Initialize();<br>
  colors-&gt;Initialize();<br>
  octagon-&gt;Initialize();<br>
  Octagons-&gt;Initialize();<br>
  polyData-&gt;Initialize();<br>
}<br>
<br>
// Rendering. I guess the problem is here, but I don&#39;t know where exactly<br>
<br>
vtkSmartPointer&lt;vtkCompositeDataGeometryFilter&gt; geom =<br>
vtkSmartPointer&lt;vtkCompositeDataGeometryFilter&gt;::New();<br>
<br>
geom-&gt;SetInput(Blocks);<br>
geom-&gt;Update();<br>
<br>
vtkCompositePolyDataMapper2* mapper = vtkCompositePolyDataMapper2::New();<br>
mapper-&gt;SetInputConnection(0,geom-&gt;GetOutputPort(0));<br>
<br>
vtkSmartPointer&lt;vtkActor&gt; actor = vtkSmartPointer&lt;vtkActor&gt;::New();<br>
actor-&gt;SetMapper(mapper);<br>
<br>
vtkSmartPointer&lt;vtkRenderer&gt; renderer = vtkSmartPointer&lt;vtkRenderer&gt;::New();<br>
vtkSmartPointer&lt;vtkRenderWindow&gt; renderWindow =<br>
vtkSmartPointer&lt;vtkRenderWindow&gt;::New();<br>
renderWindow-&gt;AddRenderer(renderer);<br>
vtkSmartPointer&lt;vtkRenderWindowInteractor&gt; renderWindowInteractor =<br>
vtkSmartPointer&lt;vtkRenderWindowInteractor&gt;::New();<br>
renderWindowInteractor-&gt;SetRenderWindow(renderWindow);<br>
<br>
renderer-&gt;AddActor(actor);<br>
<br>
renderWindow-&gt;Render();<br>
renderWindowInteractor-&gt;Start();<br>
<br>
////////////////<br>
<br>
The result is that only the last polygon is rendered. Can anybody help me<br>
please? Thank you!<br>
<br>
<br>
<br>
<br>
<br>
--<br>
View this message in context: <a href="http://vtk.1045678.n5.nabble.com/Rendering-huge-amount-of-polyData-with-1-actor-and-vtkMultiBlockDataSet-vtkCompositePolyDataMapper2-tp5723120.html" target="_blank">http://vtk.1045678.n5.nabble.com/Rendering-huge-amount-of-polyData-with-1-actor-and-vtkMultiBlockDataSet-vtkCompositePolyDataMapper2-tp5723120.html</a><br>


Sent from the VTK - Users mailing list archive at Nabble.com.<br>
_______________________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
</blockquote></div><br></div>