This sounds quite similar to what is going on in the vtkThreshold filter. You'll probably want to look at that implementation.
Andy On Tue, Sep 13, 2011 at 5:59 PM, <fiss...@pitt.edu> wrote: > Hi, > > I am writing a custom filter that takes polydata as input and outputs > polydata > that contains a subset of the cells in the input polydata. > I would like the output polydata to include all the vector/scalar etc > arrays > associated with the input, appropriately subsetted. > I think I have working code, but I think it only grabs e.g. 1 scalar array > associated with point data (via input->GetPointData()->GetScalars();) > How would I access multiple associated scalar arrays ? > > The only way I found to implement getting even just the single scalar array > is a sort of brute force loop that saves point/cell ids I want to keep > (code snippet below). > Is this the best way to implement this ? > > thanks > kate > > > ========================================================= > // code snippet for filter to take polydata as input and output polydata > // with a subset of input polydata cells > > int vtkMyFilter::RequestData(vtkInformation *vtkNotUsed(request), > vtkInformationVector **inputVector, > vtkInformationVector *outputVector) > { > > // allocate vectors to store vtk ids of cells and points I want to keep > vtkIdList *outcellids = vtkIdList::New (); > outcellids->Allocate(num_cells_in,0); > > vtkIdList *outptids = vtkIdList::New (); > outptids->Allocate(num_points_in,0); > > > // loop over input lines, decide what to keep > for(lines->InitTraversal(); lines->GetNextCell(npts,pts); num_poly++) { > > if (I want this cell) { > > out_line_cnt++; > out_tot_pt_ctr = out_tot_pt_ctr + npts; > > // collect pt ids for output vectors > for (k=0; k < npts; k++) { > outptids->InsertNextId ((const vtkIdType) > in_tot_pt_ctr++); > } > > // collect cell ids for output > outcellids->InsertNextId ((const vtkIdType) num_poly); > > } > // not adding this line, just update points counter for input points > array > else { > in_tot_pt_ctr = in_tot_pt_ctr + npts; > } > } > > > // copy line/point data to output > outcellids->Squeeze(); > outptids->Squeeze(); > output->Allocate(input,num_cells_in,0); > output->CopyCells(input, outcellids, NULL); > output->Squeeze(); > > /////// copy point data active??? vectors > invec = input->GetPointData()->GetVectors(); > if (invec != NULL) { > num_comp = invec->GetNumberOfComponents(); > > outvec = invec->NewInstance(); > outvec->SetNumberOfComponents(num_comp); > outvec->SetNumberOfTuples(out_tot_pt_ctr); > outvec->SetName(invec->GetName()); > for (i=0; i<out_tot_pt_ctr; i++) { > outvec->InsertTuple(i,invec->GetTuple(outptids->GetId(i))); > } > output->GetPointData()->SetVectors(outvec); > } > > // repeat for > // input->GetPointData()->GetScalars(); > // input->GetCellData()->GetVectors(); > // input->GetCellData()->GetScalars(); > // etc > > } > > > > ========================================================== > > _______________________________________________ > Powered by www.kitware.com > > Visit other Kitware open-source projects at > http://www.kitware.com/opensource/opensource.html > > Please keep messages on-topic and check the ParaView Wiki at: > http://paraview.org/Wiki/ParaView > > Follow this link to subscribe/unsubscribe: > http://www.paraview.org/mailman/listinfo/paraview >
_______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the ParaView Wiki at: http://paraview.org/Wiki/ParaView Follow this link to subscribe/unsubscribe: http://www.paraview.org/mailman/listinfo/paraview