[vtkusers] Exporting/importing multiple polydata objects (was: Re: [vtkusers] triangulating a cylinder)

debbie larson debbielarson_9 at hotmail.com
Sun Dec 10 19:30:41 EST 2006


Hi Obada,

Indeed I only need the geometrical information (i.e. a file that has for 
each cylinder all its triangles vertices in some coordinates and it has all 
the cylinders) not the Actor (or any scene) information. It appears then 
that I should use vtkAppendPolyDataFilter. But then it raises the question 
of how do I read back these cylinders. Is it enough to iterate through the 
file and read each cylinder into an object?

Thanks

deb


>From: Obada Mahdi <omahdi at gmx.de>
>To: debbie larson <debbielarson_9 at hotmail.com>
>CC: vtkusers at vtk.org
>Subject: [vtkusers] Exporting/importing multiple polydata objects (was: Re: 
>[vtkusers] triangulating a cylinder)
>Date: Mon, 11 Dec 2006 01:05:43 +0100 (CET)
>
>Hi Deb!
>
>[I have changed the subject line in order to attract other readers who
>might have more suggestions in this regard.  The thread started at
>http://public.kitware.com/pipermail/vtkusers/2006-December/088522.html ]
>
>On Sun, 10 Dec 2006, debbie larson wrote:
>>Now that I have all the cylinders I would like to write them to a file
>>using, I guess, vtkPolyDataWriter. The goal is to be able to read them
>>using, say, vtkPolyDataReader and render them without the need of
>>generating them. But I am not sure how to write several cylinders
>>using vtkPolyDataWriter.  I probably need to put all the cylinders
>>into some structure like an array and then write that array to a file?
>>What do I write to the file? The vtkPolyDataMapper or
>>vtkCylinderSource objects?
>
>There are roughly two different classes of writers/readers in VTK:
>
>- vtkDataSetWriter/vtkDataSetReader derivates, like vtkPolyDataWriter
>   and vtkPolyDataReader, handle one data set at a time.
>
>   They can be placed into the pipeline where a "sink", like a mapper,
>   would be placed (vtkDataSetWriter), or where a source object would be
>   (vtkDataSetReader).  In your current code, one vtkPolyDataWriter could
>   be used like one vtkPolyDataMapper.  It would write one vtkPolyData
>   instance, corresponding to a single cylinder polydata.  It does not,
>   however, include any properties handled further down the pipeline,
>   like those of vtkActor.
>
>   http://www.vtk.org/doc/nightly/html/classvtkDataSetWriter.html
>   http://www.vtk.org/doc/nightly/html/classvtkDataSetReader.html
>
>- vtkExporter/vtkImporter derivates are capable of handling whole render
>   scenes, including actor properties, lights and cameras (to some
>   extent).  I guess this is what you want, if you would like to have a
>   "snapshot" of the contents of a particular render window to be written
>   to disk.
>
>   You can check out the class inheritance tree in the documentation to
>   have a closer look at what file formats are supported for exporting
>   and importing whole scenes.  They all seem to have different
>   capabilities, but I wouldn't know which one to choose for your
>   application--I'll leave that to the experts :-)
>
>   http://www.vtk.org/doc/nightly/html/classvtkExporter.html
>   http://www.vtk.org/doc/nightly/html/classvtkImporter.html
>
>
>Now, regarding the use of vtkPolyDataWriter: As mentioned, it only deals
>with the information stored in a vtkPolyData instance (points, cells and
>point/cell data [scalars, normals, ...]), and only handles one instance
>per output file.  Using it directly in the context of your program is
>probably not very effective, because you would have to store each
>cylinder separately, and additionally record position and orientation
>somewhere, effectively making some kind of a poor man's scene exporter.
>
>Still, if for some reason it is desirable to output just the geometrical
>information (vtkPolyData, that is) of all cylinders merged together as a
>single polydata, you can use the vtkAppendPolyData filter, described at
>
>http://www.vtk.org/doc/nightly/html/classvtkAppendPolyData.html
>
>for combining multiple polydata sets into one, after using a transform
>filter (vtkTransformPolyDataFilter) to rotate and translate each
>cylinder into place (instead of transforming them through the actor).
>
>
>Hope this helps in finding a proper solution,
>
>Obada
>
>>Here it is my current code
>>
>>Thanks!
>>
>>deb
>>
>>---------------------------------------------------
>>vtkCylinderSource* icylinder[num_cylinders];
>>
>>vtkPolyDataMapper *icylinderMapper[num_cylinders];
>>
>>vtkActor *icylinderActor[num_cylinders];
>>
>>vtkRenderer *ren1 = vtkRenderer::New();
>>vtkRenderWindow *renWin = vtkRenderWindow::New();
>>renWin->AddRenderer(ren1);
>>vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New();
>>iren->SetRenderWindow(renWin);
>>
>>ren1->SetBackground(0.1, 0.2, 0.4);
>>renWin->SetSize(500, 500);
>>
>>vtkPolyDataWriter* writer=vtkPolyDataWriter::New();
>>writer->SetFileName("cylinders.vtk");
>>
>>for (int i=0;i<num_cylinders;i++)
>>   {
>>
>>
>>     icylinder[i]=vtkCylinderSource2::New();
>>     icylinder[i]->SetHeight(cylinder_height);
>>     icylinder[i]->SetRadius(iradius);
>>     icylinder[i]->SetCenter(center_positionx,0,center_positiony);
>>     icylinder[i]->CappingOff();
>>     icylinder[i]->SetResolution(number_of_points);
>>     icylinder[i]->SetPlanes(number_of_planes);
>>
>>     icylinderMapper[i]=vtkPolyDataMapper::New();
>>
>>     
>>icylinderMapper[i]->SetInputConnection(icylinder[i]->GetOutputPort());
>>
>>     icylinderActor[i]=vtkActor::New();
>>
>>     icylinderActor[i]->SetMapper(icylinderMapper[i]);
>>
>>          icylinderActor[i]->GetProperty()->SetColor(0.5, 0.3882, 
>>0.2784);//RGB color
>>     icylinderActor[i]->RotateX(30.0);
>>     icylinderActor[i]->RotateY(-45.0);
>>
>>     ren1->AddActor(icylinderActor[i]);
>>
>>   }
>>
>>
>>ren1->ResetCamera();
>>ren1->GetActiveCamera()->Zoom(1.0);
>>renWin->Render();
>>
>>
>>iren->Start();
>>
>>
>>for (int i=0;i<num_cylinders;i++)
>>   {
>>     icylinder[i]->Delete();
>>
>>     icylinderMapper[i]->Delete();
>>
>>     icylinderActor[i]->Delete();
>>
>>   }
>>ren1->Delete();
>>renWin->Delete();
>>iren->Delete();
>>-----------------------------------------------------------------------------
>[quote of previous messages deleted]

_________________________________________________________________
Share your latest news with your friends with the Windows Live Spaces 
friends module. 
http://clk.atdmt.com/MSN/go/msnnkwsp0070000001msn/direct/01/?href=http://spaces.live.com/spacesapi.aspx?wx_action=create&wx_url=/friends.aspx&mk




More information about the vtkusers mailing list