AnalyseMorphologique/utils/gui/pyqt/main_window/Canvas/Mesh3DCanvas.py

30 lines
1.3 KiB
Python

from vispy import scene
from vispy.scene.visuals import Mesh
from vispy.visuals.filters import ShadingFilter, WireframeFilter
from vispy.scene import SceneCanvas
from utils.files.input import ScannedObject
import numpy as np
class Mesh3DCanvas:
def __init__(self,obj:ScannedObject):
vertices = np.asarray(obj.get_vertices())
faces = np.asarray(obj.get_faces())
self.canvas = scene.SceneCanvas(keys='interactive', bgcolor='white',size=(400, 400))
view = self.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)