Skip to content
Snippets Groups Projects
Mesh3DCanvas.py 1.28 KiB
Newer Older
Djalim Simaila's avatar
Djalim Simaila committed
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)