Open simensgreen opened 3 years ago
Я использую open3d только в этом месте, получаю список треугольников в этом, с помощью numpy, хотя open3d может предоставить набор треугольников через индексы вершин: документация. Желательно получать набор треугольников именно на основе данных из open3d, возможно, используя инструментарий numpy.
Так же, ниже в документации видно, что возможно производить различные виды обработки модели. Было бы неплохо добавить их в AeflotFront
Попытка реализации:
@property def vertexes(self): return [[self.vertices[i[0]].tolist(), self.vertices[i[1]].tolist(), self.vertices[i[2]].tolist()] for i in np.array(self.vertices_indexes)]
Ошибка:
|==============================>>
| Traceback (most recent call last):
| File "C:/PythonProjects/aeflot_front/__main__.py", line 8, in <module>
| AeflotFrontApp.run()
| File "C:\PythonProjects\aeflot_front\gui\_app.py", line 43, in run
| sys.exit(app.exec_())
| File "C:\Users\HOME\miniconda3\lib\site-packages\pyqtgraph\opengl\GLViewWidget.py", line 257, in paintGL
| self.drawItemTree(useItemNames=useItemNames)
| File "C:\Users\HOME\miniconda3\lib\site-packages\pyqtgraph\opengl\GLViewWidget.py", line 297, in drawItemTree
| self.drawItemTree(i, useItemNames=useItemNames)
| File "C:\Users\HOME\miniconda3\lib\site-packages\pyqtgraph\opengl\GLViewWidget.py", line 278, in drawItemTree
| debug.printExc()
| --- exception caught here ---
| File "C:\Users\HOME\miniconda3\lib\site-packages\pyqtgraph\opengl\GLViewWidget.py", line 275, in drawItemTree
| i.paint()
| File "C:\Users\HOME\miniconda3\lib\site-packages\pyqtgraph\opengl\items\GLMeshItem.py", line 167, in paint
| self.parseMeshData()
| File "C:\Users\HOME\miniconda3\lib\site-packages\pyqtgraph\opengl\items\GLMeshItem.py", line 160, in parseMeshData
| self.edges = md.edges()
| File "C:\Users\HOME\miniconda3\lib\site-packages\pyqtgraph\opengl\MeshData.py", line 99, in edges
| self._computeEdges()
| File "C:\Users\HOME\miniconda3\lib\site-packages\pyqtgraph\opengl\MeshData.py", line 392, in _computeEdges
| edges = np.empty((verts.shape[0], 3, 2), dtype=np.uint)
| AttributeError: 'list' object has no attribute 'shape'
|==============================<<
Error while drawing item <pyqtgraph.opengl.items.GLMeshItem.GLMeshItem object at 0x0000020F7EF2C3A0>.
оказывается, numpy может сгенерировать массив с элементами из одного по индексам другого:
import numpy as np
arr = np.random.random(10)
idx = np.array([[0, 1, 2], [1, 2, 3], [3, 2, 1]])
new = arr[idx]
print(f'{arr = }')
print(f'{idx = }')
print(f'{new = }')
|==============================>>
| Traceback (most recent call last):
| File "C:/PythonProjects/aeflot_front/__main__.py", line 8, in <module>
| AeflotFrontApp.run()
| File "C:\PythonProjects\aeflot_front\gui\_app.py", line 43, in run
| sys.exit(app.exec_())
| File "C:\Users\HOME\miniconda3\lib\site-packages\pyqtgraph\opengl\GLViewWidget.py", line 257, in paintGL
| self.drawItemTree(useItemNames=useItemNames)
| File "C:\Users\HOME\miniconda3\lib\site-packages\pyqtgraph\opengl\GLViewWidget.py", line 297, in drawItemTree
| self.drawItemTree(i, useItemNames=useItemNames)
| File "C:\Users\HOME\miniconda3\lib\site-packages\pyqtgraph\opengl\GLViewWidget.py", line 278, in drawItemTree
| debug.printExc()
| --- exception caught here ---
| File "C:\Users\HOME\miniconda3\lib\site-packages\pyqtgraph\opengl\GLViewWidget.py", line 275, in drawItemTree
| i.paint()
| File "C:\Users\HOME\miniconda3\lib\site-packages\pyqtgraph\opengl\items\GLMeshItem.py", line 179, in paint
| glVertexPointerf(verts)
| File "C:\Users\HOME\miniconda3\lib\site-packages\OpenGL\latebind.py", line 43, in __call__
| return self._finalCall( *args, **named )
| File "C:\Users\HOME\miniconda3\lib\site-packages\OpenGL\wrapper.py", line 624, in wrapperCall
| raise err
| File "C:\Users\HOME\miniconda3\lib\site-packages\OpenGL\wrapper.py", line 617, in wrapperCall
| result = wrappedOperation( *cArguments )
| File "C:\Users\HOME\miniconda3\lib\site-packages\OpenGL\error.py", line 230, in glCheckError
| raise self._errorClass(
| OpenGL.error.GLError: GLError(
| err = 1281,
| description = b'\xed\xe5\xe4\xee\xef\xf3\xf1\xf2\xe8\xec\xee\xe5 \xe7\xed\xe0\xf7\xe5\xed\xe8\xe5',
| baseOperation = glVertexPointer,
| pyArgs = (array([], dtype=float32),),
| cArgs = (
| 0,
| GL_FLOAT,
| 0,
| array([], dtype=float32),
| ),
| cArguments = (
| 0,
| GL_FLOAT,
| 0,
| array([], dtype=float32),
| )
| )
|==============================<<
Error while drawing item <pyqtgraph.opengl.items.GLMeshItem.GLMeshItem object at 0x0000027747535700>.
Process finished with exit code 0
Переделать механизм открытия моделей с open3d. http://www.open3d.org/docs/release/tutorial/geometry/mesh.html#Visualize-a-3D-mesh Организовать чтение вершин и треугольников и цветов из open3d