[vtkusers] vtkSelection

David E DeMarle dave.demarle at kitware.com
Thu Nov 13 11:56:04 EST 2008


Look carefully at TestExtraction.cxx, it sets up a selection of each
type in turn.
For instance:
  sel->Clear();
  ext->PreserveTopologyOff();
  sel->GetProperties()->Set(
    vtkSelection::CONTENT_TYPE(), vtkSelection::FRUSTUM);
  vtkDoubleArray *frustcorners = vtkDoubleArray::New();
  frustcorners->SetNumberOfComponents(4);
  frustcorners->SetNumberOfTuples(8);
  //a small frustum within the 3 lower left (-X,-Y) cells
  frustcorners->SetTuple4(0,  0.1, 0.1,  3.1, 0.0);
  frustcorners->SetTuple4(1,  0.1, 0.1, 0.1, 0.0);
  frustcorners->SetTuple4(2,  0.1,  0.9,  3.1, 0.0);
  frustcorners->SetTuple4(3,  0.1,  0.9, 0.1, 0.0);
  frustcorners->SetTuple4(4,  0.9, 0.1,  3.1, 0.0);
  frustcorners->SetTuple4(5,  0.9, 0.1, 0.1, 0.0);
  frustcorners->SetTuple4(6,  0.9,  0.9,  3.1, 0.0);
  frustcorners->SetTuple4(7,  0.9,  0.9, 0.1, 0.0);
  sel->SetSelectionList(frustcorners);
  frustcorners->Delete();

I think you can get the points from AreaPicker::GetClipPoints().


On Thu, Nov 13, 2008 at 11:37 AM, Bryn Lloyd <blloyd at vision.ee.ethz.ch> wrote:
> Hi David,
>
> Thanks a lot for your reply.
>
>>
>> You might not need to use AreaPicker. It's job is to pick entire
>> Props, you seem more interested in cells and points on a particular
>> prop. VisibleCellSelector can determine props on its own if you want
>> it to, and the FrustumExtractor could be reapplied to all the props in
>> the scene if you don't end up using AreaPicker to narrow down the
>> list.
>>
>> The InteractorStyle is useful for giving the user a rubber band to
>> draw on the screen with, so you might as well use that part.
>> Converting that 2D rectangle into a 3D rectangle is only needed if you
>> are selecting through. The AreaPicker can help with that if you need
>> it.
>
> I need to select through (i.e. non-visible). So I could use the AreaPicker
> to calculate the Frustum and pass it to the vtkExtractSelectedFrustum object
> in order to select the points or cells?
>
> So vtkExtractSelectedFrustum knows the Frustum, how do I setup the
> vtkSelection object?
>
> My guess is:
>
>  selection->SetContentType(vtkSelection::FRUSTUM);
>  if(mode==POINTS)
>    selection->SetFieldType(vtkSelection::POINT);
>  else
>    selection->SetFieldType(vtkSelection::CELL);
>
> But what about the SetSelectionList? Is this where I need to set the
> parameters of the Frustum (again)?, or will vtkExtractSelectedFrustum ignore
> this list, since it already knows the Frustum?
>
>
>
>> Take a look at TestExtraction first to investigate what Selections and
>> Extraction are and how to use them,
>>
>> Then take a look at TestAreaSelections to see how to use them to grab
>> things that the user identifies behind the rubber band.
>
> I have looked at these tests, and the java example
> Examples/Infovis/Java/Focus.java.
>
> There are, however, many different combinations of
> vtkSelection::SetContentType, vtkSelection::SetFieldType and it is not clear
> how the SelectionList must be created for each situation, or if it must be
> set at all.
>
>
> Thanks,
>
> Bryn
>
>
>
>
>
>



-- 
David E DeMarle
Kitware, Inc.
R&D Engineer
28 Corporate Drive
Clifton Park, NY 12065-8662
Phone: 518-371-3971 x109



More information about the vtkusers mailing list