[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