simensgreen / aeflot_front

Приложение с ГУИ для формирования набора данных для расчета панельным методом
MIT License
0 stars 1 forks source link

отладить open3d #13

Open simensgreen opened 3 years ago

simensgreen commented 3 years ago

Переделать механизм открытия моделей с open3d. http://www.open3d.org/docs/release/tutorial/geometry/mesh.html#Visualize-a-3D-mesh Организовать чтение вершин и треугольников и цветов из open3d

simensgreen commented 3 years ago

Я использую open3d только в этом месте, получаю список треугольников в этом, с помощью numpy, хотя open3d может предоставить набор треугольников через индексы вершин: документация. Желательно получать набор треугольников именно на основе данных из open3d, возможно, используя инструментарий numpy.

Так же, ниже в документации видно, что возможно производить различные виды обработки модели. Было бы неплохо добавить их в AeflotFront

battleoftwok commented 3 years ago

Попытка реализации:

@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>.

simensgreen commented 3 years ago

оказывается, 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 = }')
battleoftwok commented 3 years ago
|==============================>>
|  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

battleoftwok commented 3 years ago

https://github.com/simensgreen/aeflot_front/pull/15/commits/21088c5b741bc95c621a2260af6801b8151639d6