From af36b95e09c0a6aff2c100e64156effeb6d49132 Mon Sep 17 00:00:00 2001
From: Djalim Simaila <DjalimS.pro@outlook.fr>
Date: Fri, 21 Apr 2023 11:50:23 +0200
Subject: [PATCH] refactored folders and added vispy 3Drender

---
 integration_tests/data_test.py      |  2 +-
 utils/{3d => graph3D}/mpl_render.py |  7 +++---
 utils/graph3D/visplot_render.py     | 33 +++++++++++++++++++++++++++++
 3 files changed, 38 insertions(+), 4 deletions(-)
 rename utils/{3d => graph3D}/mpl_render.py (72%)
 create mode 100644 utils/graph3D/visplot_render.py

diff --git a/integration_tests/data_test.py b/integration_tests/data_test.py
index 0e3db87..72211b7 100644
--- a/integration_tests/data_test.py
+++ b/integration_tests/data_test.py
@@ -6,7 +6,7 @@ import time
 import numpy as np
 from main import get_discrete_data, get_raw_data
 from utils.files import output
-from utils.files.input import ScannedObject
+from utils.files.input import ScannedObject, parse_result_file
 
 def check_discrete_data(expected_file: str, actual_file: str, ndigits=7, eps=0.00001, silent: bool = False) -> dict:
     """
diff --git a/utils/3d/mpl_render.py b/utils/graph3D/mpl_render.py
similarity index 72%
rename from utils/3d/mpl_render.py
rename to utils/graph3D/mpl_render.py
index 316474e..c4757fe 100644
--- a/utils/3d/mpl_render.py
+++ b/utils/graph3D/mpl_render.py
@@ -1,16 +1,17 @@
 from mpl_toolkits.mplot3d.art3d import Poly3DCollection
 import matplotlib.pyplot as plt
 import numpy as np
+from utils.files.input import ScannedObject
 
-def render3D(data:dict):
+def render3D(obj:ScannedObject):
     """
     Render a 3D model using matplotlib poly3dcollection
     :param data: A dict with the vertices and faces
     """
     fig = plt.figure()
     ax = fig.add_subplot(projection='3d')
-    faces = np.array(data['faces'])
-    verts = np.array(list(zip(data['x'], data['y'], data['z'])))
+    faces = np.array(obj.get_faces())
+    verts = np.array(obj.get_vertices())
     mesh = Poly3DCollection(verts[faces], alpha=0.25, edgecolor='none')
     ax.add_collection3d(mesh)
     plt.show()
\ No newline at end of file
diff --git a/utils/graph3D/visplot_render.py b/utils/graph3D/visplot_render.py
new file mode 100644
index 0000000..d2cd0f2
--- /dev/null
+++ b/utils/graph3D/visplot_render.py
@@ -0,0 +1,33 @@
+import numpy as np
+from vispy import app, scene
+from vispy.scene.visuals import Mesh
+from vispy.scene import transforms
+from vispy.visuals.filters import ShadingFilter, WireframeFilter
+from utils.files.input import ScannedObject
+
+
+def render3D(obj:ScannedObject):
+    vertices = np.asarray(obj.get_vertices())
+    faces = np.asarray(obj.get_faces())
+    canvas = scene.SceneCanvas(keys='interactive', bgcolor='white')
+    view = canvas.central_widget.add_view()
+    view.camera = 'arcball'
+    view.camera.depth_value = 1e3
+    mesh = Mesh(vertices, faces, color=(.5, .7, .5, 1))
+    view.add(mesh)
+    wireframe_filter = WireframeFilter(width=0)
+    shading_filter = ShadingFilter(shininess=0)
+    mesh.attach(wireframe_filter)
+    mesh.attach(shading_filter)
+
+    def attach_headlight(view):
+        light_dir = (0, 1, 0, 0)
+        shading_filter.light_dir = light_dir[:3]
+        initial_light_dir = view.camera.transform.imap(light_dir)
+        @view.scene.transform.changed.connect
+        def on_transform_change(event):
+            transform = view.camera.transform
+            shading_filter.light_dir = transform.map(initial_light_dir)[:3]
+    attach_headlight(view)
+    canvas.show()
+    app.run()
\ No newline at end of file
-- 
GitLab