Я создаю визуализатор для некоторых данных и хочу использовать трехмерные сферы, нанесенные в pyqtgraphs 3D OpenGL, для представления целей, определенных в предоставленных данных.
Я могу генерировать сферы и перемещать их с помощью команд GLMeshItem.translate()
, однако я не могу найти удобный способ установки координат сферы без предварительного получения текущей позиции указанных сфер посредством вызова. в .transform (), а затем сгенерировать команду перевода из текущей позиции в новые абсолютные координаты, в которые я бы хотел переместить. Возможно, это единственный способ сделать это, я просто подозреваю, что есть более прямой набор абсолютных координат элементов сетки, которые я просто не могу определить.
В следующем коде показана базовая структураза то, что я делаю, а также текущий метод, который я использую для перемещения сферы.
from pyqtgraph.Qt import QtCore, QtGui
import pyqtgraph as pg
import pyqtgraph.opengl as gl
import numpy as np
app = QtGui.QApplication([])
w = gl.GLViewWidget()
w.showMaximized()
w.setWindowTitle('pyqtgraph example: GLMeshItem')
w.setCameraPosition(distance=40)
g = gl.GLGridItem()
g.scale(2,2,1)
w.addItem(g)
verts = np.array([
[0, 0, 0],
[2, 0, 0],
[1, 2, 0],
[1, 1, 1],
])
faces = np.array([
[0, 1, 2],
[0, 1, 3],
[0, 2, 3],
[1, 2, 3]
])
colors = np.array([
[1, 0, 0, 0.3],
[0, 1, 0, 0.3],
[0, 0, 1, 0.3],
[1, 1, 0, 0.3]
])
md = gl.MeshData.sphere(rows=4, cols=4)
colors = np.ones((md.faceCount(), 4), dtype=float)
colors[::2,0] = 0
colors[:,1] = np.linspace(0, 1, colors.shape[0])
md.setFaceColors(colors)
m3 = gl.GLMeshItem(meshdata=md, smooth=False)#, shader='balloon')
w.addItem(m3)
target = gl.MeshData.sphere(4,4,10)
targetMI = gl.GLMeshItem(meshdata = target, drawFaces = True,smooth = False)
w.addItem(targetMI)
while(1):
targetMI.translate(0.1,0,0)
app.processEvents()
## Start Qt event loop unless running in interactive mode.
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()
Как видно из этого примера. translate отлично работает для перемещения относительно текущей позиции. Мне просто любопытно, существует ли метод для перемещения по абсолютной позиции на GLMeshItem
(в данном случае targetMI
), чтобы я мог переместить его в координату, не получая сначала преобразование, а затем вычисляяперевод необходим для перемещения к нужным координатам.