Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Vtk-鼠标位置的世界坐标_Python_Qt_Opengl_Pyqt_Vtk - Fatal编程技术网

Python Vtk-鼠标位置的世界坐标

Python Vtk-鼠标位置的世界坐标,python,qt,opengl,pyqt,vtk,Python,Qt,Opengl,Pyqt,Vtk,是否有可能通过x-z平面(y=0)上渲染窗口中的鼠标位置获取世界坐标?这应该是可能的,但可能需要一些计算。 我会从这个开始。抓取鼠标移动或鼠标单击等鼠标事件,然后使用vtkCoordinate将其转换为世界坐标 从这个例子(不是python,但应该足以让人理解这个想法): virtualvoid OnLeftButtonDown() { std::cout GetEventPosition()[0]; int y=this->interactior->GetEventPosition()[1];

是否有可能通过x-z平面(y=0)上渲染窗口中的鼠标位置获取世界坐标?

这应该是可能的,但可能需要一些计算。 我会从这个开始。抓取鼠标移动或鼠标单击等鼠标事件,然后使用
vtkCoordinate
将其转换为世界坐标

从这个例子(不是python,但应该足以让人理解这个想法):

virtualvoid OnLeftButtonDown()
{
std::cout GetEventPosition()[0];
int y=this->interactior->GetEventPosition()[1];

std::cout我可以用以下方法复制它:

从vtkplotter导入数据目录、绘图仪、点
导入vtk
def onLeftClick(网格):
vcr=vtk.vtkCoordinate()
vcr.setCoordinates系统显示()
pt=vcr.GetComputedWorldValue(vp.renderer)
vp.add(点(mesh.picked3d,c='红色'))
vp.add(点(pt,c='white'))
vp.renderer.ResetCamera()
打印(mesh.picked3d,pt)
vp=绘图仪(详细=0)
副总裁加载(数据目录+“bunny.obj”)
vp.mouseLeftClickFunction=onLeftClick
副总裁show()
但我不确定这是否是期望的输出

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();
    }