{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%gui qt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n# Display Mesh Normals\n\nShow how to display mesh normals on a mesh.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from vispy import app, scene\nfrom vispy.io import read_mesh, load_data_file\nfrom vispy.scene.visuals import Mesh, MeshNormals\nfrom vispy.visuals.filters import WireframeFilter\n\n\nmesh_file = load_data_file('orig/triceratops.obj.gz')\nvertices, faces, _, _ = read_mesh(mesh_file)\n\nmesh = Mesh(vertices, faces, shading='flat')\nmeshdata = mesh.mesh_data\n\nwireframe_filter = WireframeFilter(color='lightblue')\nmesh.attach(wireframe_filter)\n\nface_normals = MeshNormals(meshdata, primitive='face', color='yellow')\nvertex_normals = MeshNormals(meshdata, primitive='vertex', color='orange',\n width=2)\n\ncanvas = scene.SceneCanvas(keys='interactive', bgcolor='white')\nview = canvas.central_widget.add_view()\nview.camera = 'arcball'\nview.add(mesh)\nface_normals.parent = mesh\nvertex_normals.parent = mesh\n\n\n@canvas.events.key_press.connect\ndef on_key_press(event):\n if event.key == 'f':\n face_normals.visible = not face_normals.visible\n canvas.update()\n elif event.key == 'v':\n vertex_normals.visible = not vertex_normals.visible\n canvas.update()\n\n\ncanvas.show()\n\n\nif __name__ == \"__main__\":\n print('Key bindings:')\n print(' f : toggle face normals')\n print(' v : toggle vertex normals')\n app.run()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.19" } }, "nbformat": 4, "nbformat_minor": 0 }