[vtkusers] How do I extract multiple vtkPolyData from a single vtkPolyData read from an XML file.
Luca Antiga
luca.antiga at gmail.com
Thu Dec 13 03:07:10 EST 2007
Hey guys,
what about setting a cell data scalar value to each appended
component before appending
and thresholding afterwards. A bit of a waste of memory, but at least
you don't have to make the
assumption that your components will be simply connected.
Now that I think about that, this could be a nice simple
enhancement for vtkAppendPolyData:
to set the scalar value internally for later de-assembling.
Best
Luca
On Dec 13, 2007, at 12:47 AM, Alexandre GOUAILLARD wrote:
> Hop,
>
> I thought I cc the list, my bad.
>
> Send me one of your file with all the contour merged in the same
> polydata
> and I ll send you back the corresponding code using
> vtkPolyDataConnectivity
> filter tonight.
>
> Cheers.
>
> Alex.
>
>
>
> On 12/12/07 2:49 PM, "kent williams" <nkwmailinglists at gmail.com>
> wrote:
>
>> I hope you don't mind me reposting your response to the list; you
>> sent
>> it to me alone.
>>
>> I looked at this as a solution and it rather baffled me, so I have a
>> solution that involves fiddling around with the vtkCells directly. I
>> know that the vtkPolyData in the disk file will comprise a collection
>> of lines, so i call vtk::PolyData->GetPoints() to get the point
>> array,
>> then vtk::PolyData->GetLInes() to get the lines. Then I call
>> vtkCellArray::GetCell() to pick out the indices for each line's
>> points
>> in the point array....
>>
>> Convoluted I know, but I couldn't really see how to use
>> vtkPolyDataConnectivityFilter could do ti for me, so I went
>> caveman on
>> the problem.
>>
>> It would ultimately be more useful to have some simple things
>> happening, like there being some sort of converse to
>> vtkAppendPolyData, or some way, given that you know the structure of
>> the data you're reading in you could just ask the reader for it. But
>> so long asa I get the job done it doesn't matter so much to me....
>>
>> On Dec 12, 2007 3:45 PM, Alexandre GOUAILLARD <hanfei at caltech.edu>
>> wrote:
>>> Hi kent,
>>>
>>> You can use vtkPolyDataConnectivityFilter that will help you
>>> separate
>>> contours that are not connected.
>>>
>>> Run once with SetExtractionModeToAllRegion() to get the number of
>>> contours
>>> with GetNumberOfExtractedRegions(), then extract them by adding
>>> the region
>>> Id through AddSpecifiedRegion(int id). I don't remember how to
>>> get the
>>> output then, but this should get you started.
>>>
>>> For information, you have the equivalent in ITK:
>>> VtkPolyData => itkMesh / itkQuadEdgeMEsh
>>> VtkPolyDataConnectivityFilter => itkConnectedRegionMeshFilter /
>>> itkQuadEdgeMeshExtractCOmponentFilter
>>>
>>> Alex.
>>>
>>>
>>>
>>> On 12/12/07 1:22 PM, "kent williams" <nkwmailinglists at gmail.com>
>>> wrote:
>>>
>>>> Code example below but here is what I'm trying to do: I load a 3D
>>>> volume and use vtkContourWidget to trace contours on different
>>>> slices.
>>>> Then, I need to write out a file that contains all those contours.
>>>> To write the file out is easy: my code is below. Basically I use a
>>>> vtkAppendPolyData object to stick all the contours (which I save as
>>>> vtkPolyData) into a single vtkPolyData, and then write that out.
>>>>
>>>> But there really isn't the opposite of a vtkAppendPolyData. I
>>>> assume
>>>> I'll have to do some sort of traversal to pull my contours back
>>>> out of
>>>> the reader's output. Does anyone have an example of that?
>>>>
>>>> void
>>>> vtkKWImageViewerWidget::
>>>> SaveROI(const char *filename)
>>>> {
>>>> vtkAppendPolyData *pd = vtkAppendPolyData::New();
>>>> for(TraceMap::iterator tmIt = this->m_SliceTraces.begin();
>>>> tmIt != this->m_SliceTraces.end(); ++tmIt)
>>>> {
>>>> for(PolyDataList::iterator polyIt = tmIt->second.begin();
>>>> polyIt != tmIt->second.end(); ++polyIt)
>>>> {
>>>> pd->AddInput(*polyIt);
>>>> }
>>>> }
>>>> pd->Update();
>>>> vtkXMLPolyDataWriter *writer = vtkXMLPolyDataWriter::New();
>>>> writer->SetInput(pd->GetOutput());
>>>> writer->SetDataModeToAscii();
>>>> writer->SetFileName(filename);
>>>> writer->Write();
>>>> writer->Delete();
>>>> pd->Delete();
>>>> }
>>>> _______________________________________________
>>>> This is the private VTK discussion list.
>>>> Please keep messages on-topic. Check the FAQ at:
>>>> http://www.vtk.org/Wiki/VTK_FAQ
>>>> Follow this link to subscribe/unsubscribe:
>>>> http://www.vtk.org/mailman/listinfo/vtkusers
>>>
>>>
>>>
>
>
> _______________________________________________
> This is the private VTK discussion list.
> Please keep messages on-topic. Check the FAQ at: http://www.vtk.org/
> Wiki/VTK_FAQ
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtkusers
More information about the vtkusers
mailing list