我正在尝试使用vtkInteractorStyleRubberBandPick的子类在对象上执行区域选择可见单元格。除了一个问题外,我已经完成了所有工作:如果我完全改变了相机的视角,那么选择不再正常。它只选择对象上看似随机的单元格,而不是橡皮筋内的单元格。
我的InteractorStyle中的我的LeftButtonUp基本上是这样的:
vtkSmartPointer<vtkHardwareSelector> selector = vtkSmartPointer<vtkHardwareSelector>::New();
selector->SetRenderer(this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer());
unsigned int windowSize[4];
windowSize[0] = StartPosition[0] < EndPosition[0] ? StartPosition[0] : EndPosition[0]; // xmin
windowSize[1] = StartPosition[1] < EndPosition[1] ? StartPosition[1] : EndPosition[1]; // ymin
windowSize[2] = StartPosition[0] < EndPosition[0] ? EndPosition[0] : StartPosition[0]; // xmax
windowSize[3] = StartPosition[1] < EndPosition[1] ? EndPosition[1] : StartPosition[1]; // ymax
selector->SetArea(windowSize);
selector->SetFieldAssociation(vtkDataObject::FIELD_ASSOCIATION_CELLS);
selector->CaptureBuffers();
vtkSmartPointer<vtkSelection> selection = selector->GenerateSelection();
vtkSmartPointer<vtkExtractSelection> extractSelection = vtkSmartPointer<vtkExtractSelection>::New();
extractSelection->SetInputData(0, actor->GetMapper()->GetInput());
extractSelection->SetInputData(1, selection);
extractSelection->Update();
vtkSmartPointer<vtkUnstructuredGrid> selected = vtkSmartPointer<vtkUnstructuredGrid>::New();
selected->ShallowCopy(extractSelection->GetOutput());
_faceSelectMapper->SetInputData(selected);
我是否需要在某处进行某种转换?我是否需要以某种方式更新hardwareselector?我到处搜寻,但我不知所措......
答案 0 :(得分:0)
由于剪切窗口影响的部分数据不断变化,因此每次更改相机方向都会得到不同的结果。您需要检查模式是下面的选择方向还是方向
#define VTKISRBP_ORIENT 0
#define VTKISRBP_SELECT 1
if(this->CurrentMode == VTKISRBP_SELECT){
// interactor codes...
}
https://www.vtk.org/Wiki/VTK/Examples/Cxx/Picking/HighlightSelection