[vtkusers] how to use PolyData::GetPolys()?

Dominik Szczerba domi at vision.ee.ethz.ch
Tue Oct 10 14:55:25 EDT 2006


John, you have been most helpful, I could take over from your points.
However, I do not observe any significant speed gain compared to the 
"normal" GetCell style...?
Thanks a lot!
Dominik

John Biddiscombe wrote:
> Dominik
> 
> Does this code snippet help you.(snippet from an old filter of mine, 
> ignore the preamble etc
> 
>    vtkPolyData  *input    = (vtkPolyData *)this->GetInput();
>    vtkPolyData  *output   = (vtkPolyData *)this->GetOutput();
>    vtkPolyData  *failOut  = this->GetFailedData();
>    vtkPoints    *in_Pts   = input->GetPoints();
>    vtkCellArray *in_Polys = input->GetPolys();
>    if (input->GetNumberOfPoints()==0) return;
>    int nc = in_Polys->GetNumberOfCells();
>    //
>    vtkCellArray *out_Polys    = vtkCellArray::New();
>    vtkCellArray *bad_Polys    = vtkCellArray::New();
>    //
>    // Should have same polys out as in if no bad ones are found
>    //
>    out_Polys->Allocate(nc,nc);
>    bad_Polys->Allocate(nc,nc);
>    //
>    // Walk Polygons and test them all
>    //
>    vtkIdType npoints, *pt_IDs, polyID=0;
>    int m_c_s = input->GetMaxCellSize();
>    doublevector3 *points = new doublevector3[m_c_s];
>    double fnormal[3];
>    for (in_Polys->InitTraversal(); 
> in_Polys->GetNextCell(npoints,pt_IDs); polyID++) {
>        // make local copy of cell points
>        for (int i=0; i<npoints; i++) 
> in_Pts->GetPoint(pt_IDs[i],&points[i].x);
> ....
> 
> now replace the line
>        for (int i=0; i<npoints; i++) 
> in_Pts->GetPoint(pt_IDs[i],&points[i].x);
> with something more like float *rawdata = (float 
> *)in_Pts->GetData()->GetVoidPointer()
> and then
>        for (int i=0; i<npoints; i++) points[i] = rawdata[i] - times 3 
> for x,y,z
> 
> any use?
> 
> JB
> 
> 
> 
> 
>> I still dont get how the GetNextCell works but I cann access the raw 
>> int connectivity array - I guess PolyData::GetPolys::Get*Cell methods 
>> base on it. Unfortunately it doesnt work any faster, against as 
>> promised in the docu. I get ~ 5x better performance using an ugly glut 
>> code on the same dataset. Missed anything?
>> Thanks,
>> Dominik
>>
>> Dominik Szczerba wrote:
>>> Hi,
>>> I am retrieving cells in a polydata using GetCell and it works, only 
>>> very slow. I read I can use GetPolys to get faster, but there are no 
>>> examples and hitting blind just leads me nowhere. I guess 
>>> PolyData::GetPolys::GetCell(id, &N, &ids) should fill ids with 
>>> connectivity array of a cell id, and set N to number of points in the 
>>> cell. Even though it compiles it doenst work. Could someone provide 
>>> me with one line example?
>>> Regards,
>>> Dominik
>>
> 
> 

-- 
Dominik Szczerba, Ph.D.
Computer Vision Lab, ETH
http://www.vision.ee.ethz.ch/~domi



More information about the vtkusers mailing list