最近有个需求,想要在GLviewwidget里面的指定三维位置添加文本,但是找到的版本都太老久了,或者用的是open3d实现的,在实际中的应用效果并不是很好。因此自己就写了一个,代码如下:
plot = gl.GLTextItem(pos=(int(x), int(y), int(z)),text = str(i+2))
plot.setData()
Form_lianjieban.openGLWidget.addItem(plot)
其中gl是pyqtgraph.opengl,openGLWidget是使用的GLviewwidget,千万注意如果不加pos信息,那么plot是固定的不会旋转的。
除了上述信息之外,还要再加一个相机的位置信息,否则无法显示:
Form_lianjieban.openGLWidget.setCameraPosition(QtGui.QVector3D(pos_view[0],pos_view[1],pos_view[2]))
主要就是setCameraPosition这个函数,里面的三个参数,可以是点云的中心,也可以自己输入一下。
最后来看一下效果吧:
上文中的白色即是标注,在每个孔洞中放置一个标签。
需要注意的是,如果有多个窗口,可能会出现bug:
OpenGL.error.GLError: GLError(err = 1281,description = b'\xce\xde\xd0\xa7\xd6\xb5',baseOperation = glUseProgram,cArguments = (3,)
LScatterPlotItem object at 0x000001AA9AA72CA0>.
这时候只有关闭了重新开始就可以。bug产生的原因众说纷纭,总结来说就是因为不同的窗口同时打开导致冲突了。