[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