多个actor的拾取高亮事件
vtk吧
全部回复
仅看楼主
level 12
rabbitbride 楼主
来自很久前网上的一个帖子,貌似选择搜不到了。
先来两个actor :vtkSphereSource vtkCylinderSource
2014年12月01日 05点12分 1
level 12
rabbitbride 楼主
要实现的功能:
1、视图中的任一个actor后,被选中高亮
2、同时,除被选中actor外,都恢复正常
2014年12月01日 06点12分 2
level 12
rabbitbride 楼主
主要是一个vtkCommand
class vtkButtonCallback : public vtkCommand
{
public:
static vtkButtonCallback *New()
{ return new vtkButtonCallback; }
virtual void Execute(vtkObject *caller, long unsigned int eventId, void*)
{
vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::SafeDownCast(caller);
int x = iren->GetEventPosition()[0];
int y = iren->GetEventPosition()[1];
vtkRenderer *CurrentRenderer = iren->FindPokedRenderer(x,y);
vtkCellPicker *Picker = vtkCellPicker::SafeDownCast(iren->GetPicker());
Picker->Pick(x, y, 0.0, CurrentRenderer);
vtkProp *prop = Picker->GetViewProp();
if (prop != NULL)
{
vtkActor *InteractionProp = vtkActor::SafeDownCast(prop);
if (eventId == vtkCommand::LeftButtonPressEvent)
{
InteractionProp->GetProperty()->SetOpacity(1.0);
}
else if (eventId == vtkCommand::MouseMoveEvent)
{
InteractionProp->GetProperty()->SetOpacity(0.5);
}
}
}
};
2014年12月01日 06点12分 3
level 12
rabbitbride 楼主
使用方法:
vtkCellPicker *InteractionPicker = vtkCellPicker::New();
iren->SetPicker(InteractionPicker);
vtkButtonCallback *myBtnCallback = vtkButtonCallback::New();
iren->AddObserver(vtkCommand::LeftButtonPressEvent, myBtnCallback);
iren->AddObserver(vtkCommand::MouseMoveEvent, myBtnCallback);
2014年12月01日 06点12分 4
1