<div dir="ltr">I am confused. Why wouldn'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"><<a href="mailto:esteban.vidal@huawei.com" target="_blank">esteban.vidal@huawei.com</a>></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<vtkPoints> points = vtkSmartPointer<vtkPoints>::New();<br>
vtkSmartPointer<vtkUnsignedCharArray> colors =<br>
vtkSmartPointer<vtkUnsignedCharArray>::New();<br>
vtkSmartPointer<vtkPolygon> octagon = vtkSmartPointer<vtkPolygon>::New();<br>
vtkSmartPointer<vtkCellArray> Octagons =<br>
vtkSmartPointer<vtkCellArray>::New();<br>
vtkSmartPointer<vtkPolyData> polyData = vtkSmartPointer<vtkPolyData>::New();<br>
vtkMultiBlockDataSet* Blocks = vtkMultiBlockDataSet::New();<br>
<br>
<br>
for(size_t i=0;i<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->InsertNextPoint(vertex_1_x[i], vertex_1_y[i], vertex_1_z[i]);<br>
...<br>
points->InsertNextPoint(vertex_8_x[i], vertex_8_y[i], vertex_8_z[i]);<br>
<br>
// Add color information to every vertex<br>
<br>
colors->SetNumberOfComponents(3);<br>
colors->SetName("Colors");<br>
colors->InsertNextTupleValue(point_color[i]);<br>
...<br>
colors->InsertNextTupleValue(point_color[i]); // 8 times, 1 for every<br>
vertex<br>
<br>
// Create every octagon<br>
<br>
octagon->GetPointIds()->SetNumberOfIds(8);<br>
octagon->GetPointIds()->SetId(0, 0);<br>
octagon->GetPointIds()->SetId(1, 1);<br>
...<br>
octagon->GetPointIds()->SetId(7, 7);<br>
<br>
Octagons->InsertNextCell(octagon);<br>
<br>
// Create the polydatas and put it into a MultiBlockDataSet<br>
<br>
polyData ->SetPoints(points);<br>
polyData ->SetPolys(Octagons);<br>
polyData ->GetPointData()->SetScalars(colors);<br>
<br>
Blocks ->SetBlock(i+1,polyData);<br>
Blocks ->Modified();<br>
<br>
// Initialize<br>
<br>
points->Initialize();<br>
colors->Initialize();<br>
octagon->Initialize();<br>
Octagons->Initialize();<br>
polyData->Initialize();<br>
}<br>
<br>
// Rendering. I guess the problem is here, but I don't know where exactly<br>
<br>
vtkSmartPointer<vtkCompositeDataGeometryFilter> geom =<br>
vtkSmartPointer<vtkCompositeDataGeometryFilter>::New();<br>
<br>
geom->SetInput(Blocks);<br>
geom->Update();<br>
<br>
vtkCompositePolyDataMapper2* mapper = vtkCompositePolyDataMapper2::New();<br>
mapper->SetInputConnection(0,geom->GetOutputPort(0));<br>
<br>
vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();<br>
actor->SetMapper(mapper);<br>
<br>
vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();<br>
vtkSmartPointer<vtkRenderWindow> renderWindow =<br>
vtkSmartPointer<vtkRenderWindow>::New();<br>
renderWindow->AddRenderer(renderer);<br>
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =<br>
vtkSmartPointer<vtkRenderWindowInteractor>::New();<br>
renderWindowInteractor->SetRenderWindow(renderWindow);<br>
<br>
renderer->AddActor(actor);<br>
<br>
renderWindow->Render();<br>
renderWindowInteractor->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>