[Paraview] how to get all the arrays associated with Point and Cell data in a filter

Andy Bauer andy.bauer at kitware.com
Tue Sep 13 20:27:53 EDT 2011


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, <FISSELL at 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.paraview.org/pipermail/paraview/attachments/20110913/3105983a/attachment.htm>


More information about the ParaView mailing list