pick

pick actor

对于actor和actor2D有区别

  // actor
  int* clickPos = m_viewer->getRenderer()->GetRenderWindow()->GetInteractor()->GetEventPosition(); // 鼠标点击位置(像素)
  auto m_picker = vtkSmartPointer<vtkCellPicker>::New();
  m_picker->SetTolerance(0.005);
  m_picker->Pick(clickPos[0], clickPos[1], 0, m_viewer->getRenderer());
  auto actor = m_picker->GetActor();
  if(actor && actor == m_lineActor) {
  
  }
  //actor2D + actor(用来捕获actor时得很准确才能点到,不好用)
  int* clickPos = m_viewer->getRenderer()->GetRenderWindow()->GetInteractor()->GetEventPosition(); // 鼠标点击位置(像素)
  auto m_picker = vtkSmartPointer<vtkPropPicker>::New();
  m_picker->Pick(clickPos[0], clickPos[1], 0, m_viewer->getRenderer());
  auto actor = m_picker->GetViewProp();
  if(actor && actor == m_textActor.Get()) {

  }
  //这种方式根据获取的屏幕坐标,相当于转化为世界坐标了,实测
  Double3 pickedPos;
  auto eventPos = m_interactor[panelType]->GetEventPosition();
  m_interactor[panelType]->GetPicker()->Pick(eventPos[0], eventPos[1], eventPos[2], imageViewer[panelType]->GetRenderer());
  m_interactor[panelType]->GetPicker()->GetPickPosition(pickedPos.data());
Table of Contents