[vtkusers] how to use PolyData::GetPolys()?
John Biddiscombe
biddisco at cscs.ch
Tue Oct 10 08:09:03 EDT 2006
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
>
--
John Biddiscombe, email:biddisco @ cscs.ch
http://www.cscs.ch/about/BJohn.php
CSCS, Swiss National Supercomputing Centre | Tel: +41 (91) 610.82.07
Via Cantonale, 6928 Manno, Switzerland | Fax: +41 (91) 610.82.82
More information about the vtkusers
mailing list