Это должно быть возможно, но, возможно, потребуются некоторые вычисления. Я бы начал с этого этого примера . Захватите событие мыши, такое как движение мыши или щелчок мыши, и используйте vtkCoordinate
для преобразования этого в мировые координаты.
Из примера (не python, но должно быть достаточно, чтобы донести идею):
virtual void OnLeftButtonDown()
{
std::cout << "Pressed left mouse button." << std::endl;
int x = this->Interactor->GetEventPosition()[0];
int y = this->Interactor->GetEventPosition()[1];
std::cout << "(x,y) = (" << x << "," << y << ")" << std::endl;
vtkSmartPointer<vtkCoordinate> coordinate =
vtkSmartPointer<vtkCoordinate>::New();
coordinate->SetCoordinateSystemToDisplay();
coordinate->SetValue(x,y,0);
// This doesn't produce the right value if the sphere is zoomed in???
double* world = coordinate->GetComputedWorldValue(this->Interactor->GetRenderWindow()->GetRenderers()->GetFirstRenderer());
std::cout << "World coordinate: " << world[0] << ", " << world[1] << ", " << world[2] << std::endl;
// Forward events
vtkInteractorStyleTrackballCamera::OnLeftButtonDown();
}
Теперь, когда вы получили мировые координаты при щелчке, вам, вероятно, нужно рассчитать пересечение линии положения камеры с положением мыши (в мире) и где она пересекает плоскость xz.