[vtkusers] vtkSelection with GLOBALIDS, vtkExtractSelection returns empty
John Platt
jcplatt at dsl.pipex.com
Wed Jul 8 03:46:49 EDT 2009
Hi,
Try changing your selection array from vtkIntArray to vtkIdTypeArray and check that the filters copy the GLOBALIDS (the default is not to copy or interpolate).
John.
----- Original Message -----
From: da xu
To: vtkusers at vtk.org
Sent: Wednesday, July 08, 2009 8:12 AM
Subject: [vtkusers] vtkSelection with GLOBALIDS,vtkExtractSelection returns empty
Hey all,
I am trying to extract a section of my datasets using vtkSelection. I currently have a GUI that the user clicks on to select a start and end point using vtkPointPicker, returning the PointID. With a starting POINTID and ending POINTID, i then use a vtkSelection with field type POINT, ContentType GLOBALIDS to extract a dataset containing the points (with vtkSelectionNode's SetSelectionList correctly set I believe). However, I always end up extracting an empty grid.
I can't figure out if:
My vtkSelectionNode is set up incorrectly
I'm using vtkExtractSelection incorrectly.
The vtkPointPicker doesnt actually get GLOBALIDS ?
Missing an update somewhere?
Here is the code:
// Set up vtkSelectionNode
vtkSelection* selection = vtkSelection::New();
vtkSelectionNode* selectionNode = vtkSelectionNode::New();
selectionNode->SetFieldType(
vtkSelectionNode::POINT);
selectionNode->SetContentType(vtkSelectionNode::GLOBALIDS);
// Populate the selection node with our GLOBALIDS (obtained from vtkPointPicker)
vtkIntArray* intarray = vtkIntArray::New();
for (int a = first; a < second; a++)
{
intarray->InsertNextValue(a);
}
selectionNode->SetSelectionList(intarray);
selection->AddNode(selectionNode);
// Some setup stuff, Our source data is from a multiblock data set
vtkMultiBlockDataSet *extractFrom = vtkMultiBlockDataSet::SafeDownCast(m_v_modules.at(0)->getDataObject());
int nblocks = extractFrom->GetNumberOfBlocks();
vtkGeometryFilter *filter = vtkGeometryFilter::New();
vtkDataSetMapper *mapper = vtkDataSetMapper::New();
int counter=0;
vtkExtractSelection* extractSelection = vtkExtractSelection::New();
// Iterate through our datasets (structured grids) and apply vtkExtractSelection to them. Always extracts empty!
vtkCompositeDataIterator *iter = extractFrom->NewIterator();
iter->InitTraversal();
int totalpoints = 0;
while (!iter->IsDoneWithTraversal())
{
vtkDataSet* ds = vtkDataSet::SafeDownCast(iter->GetCurrentDataObject());
if (ds)
{
const char* name = ds->GetClassName(); /// Temp debugger
extractSelection->RemoveAllInputs();
extractSelection->SetInput(0, ds); /// Set the vtkDataSet for extraction
extractSelection->SetInput(1, selection); /// Set the vtkSelection for extraction
vtkDataObject* extracted = extractSelection->GetOutput();
extractSelection->Update();
const char* name2 = extracted->GetClassName(); /// Temp debugger
vtkUnstructuredGrid* unstructGridTest = vtkUnstructuredGrid::SafeDownCast(extracted);
int ntemp1 = unstructGridTest->GetNumberOfPoints();
totalpoints += ntemp1;
counter++;
}
iter->GoToNextItem();
}
------------------------------------------------------------------------------
_______________________________________________
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 VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
Follow this link to subscribe/unsubscribe:
http://www.vtk.org/mailman/listinfo/vtkusers
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20090708/08cd0b56/attachment.htm>
More information about the vtkusers
mailing list