[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