{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%gui qt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n# ViewBox with Clipping Methods\n\nDemonstrate ViewBox using various clipping methods.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import sys\nimport numpy as np\n\nfrom vispy import app\nfrom vispy import scene\n\n\n# Create canvas\ncanvas = scene.SceneCanvas(size=(800, 600), show=True, keys='interactive')\ngrid = canvas.central_widget.add_grid()\n\n# Create two ViewBoxes, place side-by-side\nvb1 = grid.add_view(name='vb1', border_color='yellow')\n# First ViewBox uses a 2D pan/zoom camera\nvb1.camera = 'panzoom'\n\n# Second ViewBox uses a 3D perspective camera\nvb2 = grid.add_view(name='vb2', border_color='yellow')\nvb2.parent = canvas.scene\nvb2.camera = scene.TurntableCamera(elevation=30, azimuth=30, up='+y')\n\n\n#\n# Now add visuals to the viewboxes.\n#\n\n# First a plot line:\nN = 1000\ncolor = np.ones((N, 4), dtype=np.float32)\ncolor[:, 0] = np.linspace(0, 1, N)\ncolor[:, 1] = color[::-1, 0]\n\npos = np.empty((N, 2), np.float32)\npos[:, 0] = np.linspace(-1., 1., N)\npos[:, 1] = np.random.normal(0.0, 0.5, size=N)\npos[:20, 1] = -0.5 # So we can see which side is down\n\n# make a single plot line and display in both viewboxes\nline1 = scene.visuals.Line(pos=pos.copy(), color=color, method='gl',\n antialias=False, name='line1', parent=vb1.scene)\nline2 = scene.visuals.Line(pos=pos.copy(), color=color, method='gl',\n antialias=False, name='line1', parent=vb2.scene)\n\n\n# And some squares:\nbox = np.array([[0, 0, 0],\n [0, 1, 0],\n [1, 1, 0],\n [1, 0, 0],\n [0, 0, 0]], dtype=np.float32)\nz = np.array([[0, 0, 1]], dtype=np.float32)\n\n# First two boxes are added to both views\nbox1 = scene.visuals.Line(pos=box, color=(0.7, 0, 0, 1), method='gl',\n name='unit box', parent=vb1.scene)\nbox2 = scene.visuals.Line(pos=box, color=(0.7, 0, 0, 1), method='gl',\n name='unit box', parent=vb2.scene)\n\nbox2 = scene.visuals.Line(pos=(box * 2 - 1), color=(0, 0.7, 0, 1),\n method='gl', name='nd box', parent=vb1.scene)\nbox3 = scene.visuals.Line(pos=(box * 2 - 1), color=(0, 0.7, 0, 1),\n method='gl', name='nd box', parent=vb2.scene)\n\n# These boxes are only added to the 3D view.\nbox3 = scene.visuals.Line(pos=box + z, color=(1, 0, 0, 1),\n method='gl', name='unit box', parent=vb2.scene)\nbox5 = scene.visuals.Line(pos=((box + z) * 2 - 1), color=(0, 1, 0, 1),\n method='gl', name='nd box', parent=vb2.scene)\n\n\nif __name__ == '__main__' and sys.flags.interactive == 0:\n print(canvas.scene.describe_tree(with_transform=True))\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 }