vispy 0.14.0__cp311-cp311-macosx_11_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of vispy might be problematic. Click here for more details.
- vispy/__init__.py +33 -0
- vispy/app/__init__.py +15 -0
- vispy/app/_default_app.py +76 -0
- vispy/app/_detect_eventloop.py +148 -0
- vispy/app/application.py +263 -0
- vispy/app/backends/__init__.py +52 -0
- vispy/app/backends/_egl.py +264 -0
- vispy/app/backends/_glfw.py +513 -0
- vispy/app/backends/_jupyter_rfb.py +278 -0
- vispy/app/backends/_offscreen_util.py +121 -0
- vispy/app/backends/_osmesa.py +235 -0
- vispy/app/backends/_pyglet.py +451 -0
- vispy/app/backends/_pyqt4.py +36 -0
- vispy/app/backends/_pyqt5.py +36 -0
- vispy/app/backends/_pyqt6.py +40 -0
- vispy/app/backends/_pyside.py +37 -0
- vispy/app/backends/_pyside2.py +52 -0
- vispy/app/backends/_pyside6.py +53 -0
- vispy/app/backends/_qt.py +968 -0
- vispy/app/backends/_sdl2.py +444 -0
- vispy/app/backends/_template.py +244 -0
- vispy/app/backends/_test.py +8 -0
- vispy/app/backends/_tk.py +800 -0
- vispy/app/backends/_wx.py +476 -0
- vispy/app/backends/tests/__init__.py +0 -0
- vispy/app/backends/tests/test_offscreen_util.py +52 -0
- vispy/app/backends/tests/test_rfb.py +77 -0
- vispy/app/base.py +294 -0
- vispy/app/canvas.py +828 -0
- vispy/app/qt.py +92 -0
- vispy/app/tests/__init__.py +0 -0
- vispy/app/tests/qt-designer.ui +58 -0
- vispy/app/tests/test_app.py +442 -0
- vispy/app/tests/test_backends.py +164 -0
- vispy/app/tests/test_canvas.py +122 -0
- vispy/app/tests/test_context.py +92 -0
- vispy/app/tests/test_qt.py +47 -0
- vispy/app/tests/test_simultaneous.py +134 -0
- vispy/app/timer.py +174 -0
- vispy/color/__init__.py +17 -0
- vispy/color/_color_dict.py +193 -0
- vispy/color/color_array.py +447 -0
- vispy/color/color_space.py +181 -0
- vispy/color/colormap.py +1134 -0
- vispy/color/tests/__init__.py +0 -0
- vispy/color/tests/test_color.py +352 -0
- vispy/conftest.py +12 -0
- vispy/ext/__init__.py +0 -0
- vispy/ext/cocoapy.py +1542 -0
- vispy/ext/cubehelix.py +138 -0
- vispy/ext/egl.py +375 -0
- vispy/ext/fontconfig.py +118 -0
- vispy/ext/gdi32plus.py +206 -0
- vispy/ext/osmesa.py +105 -0
- vispy/geometry/__init__.py +23 -0
- vispy/geometry/_triangulation_debugger.py +171 -0
- vispy/geometry/calculations.py +134 -0
- vispy/geometry/curves.py +399 -0
- vispy/geometry/generation.py +643 -0
- vispy/geometry/isocurve.py +175 -0
- vispy/geometry/isosurface.py +465 -0
- vispy/geometry/meshdata.py +698 -0
- vispy/geometry/normals.py +78 -0
- vispy/geometry/parametric.py +56 -0
- vispy/geometry/polygon.py +137 -0
- vispy/geometry/rect.py +210 -0
- vispy/geometry/tests/__init__.py +0 -0
- vispy/geometry/tests/test_calculations.py +23 -0
- vispy/geometry/tests/test_generation.py +56 -0
- vispy/geometry/tests/test_meshdata.py +106 -0
- vispy/geometry/tests/test_triangulation.py +506 -0
- vispy/geometry/torusknot.py +142 -0
- vispy/geometry/triangulation.py +876 -0
- vispy/gloo/__init__.py +56 -0
- vispy/gloo/buffer.py +505 -0
- vispy/gloo/context.py +272 -0
- vispy/gloo/framebuffer.py +257 -0
- vispy/gloo/gl/__init__.py +234 -0
- vispy/gloo/gl/_constants.py +332 -0
- vispy/gloo/gl/_es2.py +986 -0
- vispy/gloo/gl/_gl2.py +1365 -0
- vispy/gloo/gl/_proxy.py +499 -0
- vispy/gloo/gl/_pyopengl2.py +362 -0
- vispy/gloo/gl/dummy.py +24 -0
- vispy/gloo/gl/es2.py +62 -0
- vispy/gloo/gl/gl2.py +98 -0
- vispy/gloo/gl/glplus.py +168 -0
- vispy/gloo/gl/pyopengl2.py +97 -0
- vispy/gloo/gl/tests/__init__.py +0 -0
- vispy/gloo/gl/tests/test_basics.py +282 -0
- vispy/gloo/gl/tests/test_functionality.py +566 -0
- vispy/gloo/gl/tests/test_names.py +246 -0
- vispy/gloo/gl/tests/test_use.py +71 -0
- vispy/gloo/glir.py +1816 -0
- vispy/gloo/globject.py +101 -0
- vispy/gloo/preprocessor.py +67 -0
- vispy/gloo/program.py +543 -0
- vispy/gloo/tests/__init__.py +0 -0
- vispy/gloo/tests/test_buffer.py +558 -0
- vispy/gloo/tests/test_context.py +119 -0
- vispy/gloo/tests/test_framebuffer.py +195 -0
- vispy/gloo/tests/test_glir.py +307 -0
- vispy/gloo/tests/test_globject.py +35 -0
- vispy/gloo/tests/test_program.py +302 -0
- vispy/gloo/tests/test_texture.py +732 -0
- vispy/gloo/tests/test_use_gloo.py +187 -0
- vispy/gloo/tests/test_util.py +60 -0
- vispy/gloo/tests/test_wrappers.py +261 -0
- vispy/gloo/texture.py +1045 -0
- vispy/gloo/util.py +129 -0
- vispy/gloo/wrappers.py +762 -0
- vispy/glsl/__init__.py +42 -0
- vispy/glsl/antialias/antialias.glsl +7 -0
- vispy/glsl/antialias/cap-butt.glsl +31 -0
- vispy/glsl/antialias/cap-round.glsl +29 -0
- vispy/glsl/antialias/cap-square.glsl +30 -0
- vispy/glsl/antialias/cap-triangle-in.glsl +30 -0
- vispy/glsl/antialias/cap-triangle-out.glsl +30 -0
- vispy/glsl/antialias/cap.glsl +67 -0
- vispy/glsl/antialias/caps.glsl +67 -0
- vispy/glsl/antialias/filled.glsl +50 -0
- vispy/glsl/antialias/outline.glsl +40 -0
- vispy/glsl/antialias/stroke.glsl +43 -0
- vispy/glsl/arrowheads/angle.glsl +99 -0
- vispy/glsl/arrowheads/arrowheads.frag +60 -0
- vispy/glsl/arrowheads/arrowheads.glsl +12 -0
- vispy/glsl/arrowheads/arrowheads.vert +83 -0
- vispy/glsl/arrowheads/curved.glsl +48 -0
- vispy/glsl/arrowheads/inhibitor.glsl +26 -0
- vispy/glsl/arrowheads/stealth.glsl +46 -0
- vispy/glsl/arrowheads/triangle.glsl +97 -0
- vispy/glsl/arrowheads/util.glsl +13 -0
- vispy/glsl/arrows/angle-30.glsl +12 -0
- vispy/glsl/arrows/angle-60.glsl +12 -0
- vispy/glsl/arrows/angle-90.glsl +12 -0
- vispy/glsl/arrows/arrow.frag +39 -0
- vispy/glsl/arrows/arrow.vert +49 -0
- vispy/glsl/arrows/arrows.glsl +17 -0
- vispy/glsl/arrows/common.glsl +187 -0
- vispy/glsl/arrows/curved.glsl +63 -0
- vispy/glsl/arrows/stealth.glsl +50 -0
- vispy/glsl/arrows/triangle-30.glsl +12 -0
- vispy/glsl/arrows/triangle-60.glsl +12 -0
- vispy/glsl/arrows/triangle-90.glsl +12 -0
- vispy/glsl/arrows/util.glsl +98 -0
- vispy/glsl/build_spatial_filters.py +660 -0
- vispy/glsl/collections/agg-fast-path.frag +20 -0
- vispy/glsl/collections/agg-fast-path.vert +78 -0
- vispy/glsl/collections/agg-glyph.frag +60 -0
- vispy/glsl/collections/agg-glyph.vert +33 -0
- vispy/glsl/collections/agg-marker.frag +35 -0
- vispy/glsl/collections/agg-marker.vert +48 -0
- vispy/glsl/collections/agg-path.frag +55 -0
- vispy/glsl/collections/agg-path.vert +166 -0
- vispy/glsl/collections/agg-point.frag +21 -0
- vispy/glsl/collections/agg-point.vert +35 -0
- vispy/glsl/collections/agg-segment.frag +32 -0
- vispy/glsl/collections/agg-segment.vert +75 -0
- vispy/glsl/collections/marker.frag +38 -0
- vispy/glsl/collections/marker.vert +48 -0
- vispy/glsl/collections/raw-path.frag +15 -0
- vispy/glsl/collections/raw-path.vert +24 -0
- vispy/glsl/collections/raw-point.frag +14 -0
- vispy/glsl/collections/raw-point.vert +31 -0
- vispy/glsl/collections/raw-segment.frag +18 -0
- vispy/glsl/collections/raw-segment.vert +26 -0
- vispy/glsl/collections/raw-triangle.frag +13 -0
- vispy/glsl/collections/raw-triangle.vert +26 -0
- vispy/glsl/collections/sdf-glyph-ticks.vert +69 -0
- vispy/glsl/collections/sdf-glyph.frag +80 -0
- vispy/glsl/collections/sdf-glyph.vert +59 -0
- vispy/glsl/collections/tick-labels.vert +71 -0
- vispy/glsl/colormaps/autumn.glsl +20 -0
- vispy/glsl/colormaps/blues.glsl +20 -0
- vispy/glsl/colormaps/color-space.glsl +17 -0
- vispy/glsl/colormaps/colormaps.glsl +24 -0
- vispy/glsl/colormaps/cool.glsl +20 -0
- vispy/glsl/colormaps/fire.glsl +21 -0
- vispy/glsl/colormaps/gray.glsl +20 -0
- vispy/glsl/colormaps/greens.glsl +20 -0
- vispy/glsl/colormaps/hot.glsl +22 -0
- vispy/glsl/colormaps/ice.glsl +20 -0
- vispy/glsl/colormaps/icefire.glsl +23 -0
- vispy/glsl/colormaps/parse.py +40 -0
- vispy/glsl/colormaps/reds.glsl +20 -0
- vispy/glsl/colormaps/spring.glsl +20 -0
- vispy/glsl/colormaps/summer.glsl +20 -0
- vispy/glsl/colormaps/user.glsl +22 -0
- vispy/glsl/colormaps/util.glsl +41 -0
- vispy/glsl/colormaps/wheel.glsl +21 -0
- vispy/glsl/colormaps/winter.glsl +20 -0
- vispy/glsl/lines/agg.frag +320 -0
- vispy/glsl/lines/agg.vert +241 -0
- vispy/glsl/markers/arrow.glsl +12 -0
- vispy/glsl/markers/asterisk.glsl +16 -0
- vispy/glsl/markers/chevron.glsl +14 -0
- vispy/glsl/markers/clover.glsl +20 -0
- vispy/glsl/markers/club.glsl +31 -0
- vispy/glsl/markers/cross.glsl +17 -0
- vispy/glsl/markers/diamond.glsl +12 -0
- vispy/glsl/markers/disc.glsl +9 -0
- vispy/glsl/markers/ellipse.glsl +67 -0
- vispy/glsl/markers/hbar.glsl +9 -0
- vispy/glsl/markers/heart.glsl +15 -0
- vispy/glsl/markers/infinity.glsl +15 -0
- vispy/glsl/markers/marker-sdf.frag +74 -0
- vispy/glsl/markers/marker-sdf.vert +41 -0
- vispy/glsl/markers/marker.frag +36 -0
- vispy/glsl/markers/marker.vert +46 -0
- vispy/glsl/markers/markers.glsl +24 -0
- vispy/glsl/markers/pin.glsl +18 -0
- vispy/glsl/markers/ring.glsl +11 -0
- vispy/glsl/markers/spade.glsl +28 -0
- vispy/glsl/markers/square.glsl +10 -0
- vispy/glsl/markers/tag.glsl +11 -0
- vispy/glsl/markers/triangle.glsl +14 -0
- vispy/glsl/markers/vbar.glsl +9 -0
- vispy/glsl/math/circle-through-2-points.glsl +30 -0
- vispy/glsl/math/constants.glsl +48 -0
- vispy/glsl/math/double.glsl +114 -0
- vispy/glsl/math/functions.glsl +20 -0
- vispy/glsl/math/point-to-line-distance.glsl +31 -0
- vispy/glsl/math/point-to-line-projection.glsl +29 -0
- vispy/glsl/math/signed-line-distance.glsl +27 -0
- vispy/glsl/math/signed-segment-distance.glsl +30 -0
- vispy/glsl/misc/regular-grid.frag +244 -0
- vispy/glsl/misc/spatial-filters.frag +1407 -0
- vispy/glsl/misc/viewport-NDC.glsl +20 -0
- vispy/glsl/transforms/azimuthal-equal-area.glsl +32 -0
- vispy/glsl/transforms/azimuthal-equidistant.glsl +38 -0
- vispy/glsl/transforms/hammer.glsl +44 -0
- vispy/glsl/transforms/identity.glsl +6 -0
- vispy/glsl/transforms/identity_forward.glsl +23 -0
- vispy/glsl/transforms/identity_inverse.glsl +23 -0
- vispy/glsl/transforms/linear-scale.glsl +127 -0
- vispy/glsl/transforms/log-scale.glsl +126 -0
- vispy/glsl/transforms/mercator-transverse-forward.glsl +40 -0
- vispy/glsl/transforms/mercator-transverse-inverse.glsl +40 -0
- vispy/glsl/transforms/panzoom.glsl +10 -0
- vispy/glsl/transforms/polar.glsl +41 -0
- vispy/glsl/transforms/position.glsl +44 -0
- vispy/glsl/transforms/power-scale.glsl +139 -0
- vispy/glsl/transforms/projection.glsl +7 -0
- vispy/glsl/transforms/pvm.glsl +13 -0
- vispy/glsl/transforms/rotate.glsl +45 -0
- vispy/glsl/transforms/trackball.glsl +15 -0
- vispy/glsl/transforms/translate.glsl +35 -0
- vispy/glsl/transforms/transverse_mercator.glsl +38 -0
- vispy/glsl/transforms/viewport-clipping.glsl +14 -0
- vispy/glsl/transforms/viewport-transform.glsl +16 -0
- vispy/glsl/transforms/viewport.glsl +50 -0
- vispy/glsl/transforms/x.glsl +24 -0
- vispy/glsl/transforms/y.glsl +19 -0
- vispy/glsl/transforms/z.glsl +14 -0
- vispy/io/__init__.py +20 -0
- vispy/io/_data/spatial-filters.npy +0 -0
- vispy/io/datasets.py +94 -0
- vispy/io/image.py +231 -0
- vispy/io/mesh.py +122 -0
- vispy/io/stl.py +167 -0
- vispy/io/tests/__init__.py +0 -0
- vispy/io/tests/test_image.py +47 -0
- vispy/io/tests/test_io.py +121 -0
- vispy/io/wavefront.py +350 -0
- vispy/plot/__init__.py +36 -0
- vispy/plot/fig.py +58 -0
- vispy/plot/plotwidget.py +522 -0
- vispy/plot/tests/__init__.py +0 -0
- vispy/plot/tests/test_plot.py +46 -0
- vispy/scene/__init__.py +43 -0
- vispy/scene/cameras/__init__.py +27 -0
- vispy/scene/cameras/_base.py +38 -0
- vispy/scene/cameras/arcball.py +106 -0
- vispy/scene/cameras/base_camera.py +538 -0
- vispy/scene/cameras/fly.py +474 -0
- vispy/scene/cameras/magnify.py +163 -0
- vispy/scene/cameras/panzoom.py +308 -0
- vispy/scene/cameras/perspective.py +333 -0
- vispy/scene/cameras/tests/__init__.py +0 -0
- vispy/scene/cameras/tests/test_cameras.py +27 -0
- vispy/scene/cameras/tests/test_link.py +53 -0
- vispy/scene/cameras/tests/test_perspective.py +122 -0
- vispy/scene/cameras/turntable.py +173 -0
- vispy/scene/canvas.py +639 -0
- vispy/scene/events.py +85 -0
- vispy/scene/node.py +644 -0
- vispy/scene/subscene.py +20 -0
- vispy/scene/tests/__init__.py +0 -0
- vispy/scene/tests/test_canvas.py +119 -0
- vispy/scene/tests/test_node.py +142 -0
- vispy/scene/tests/test_visuals.py +141 -0
- vispy/scene/visuals.py +276 -0
- vispy/scene/widgets/__init__.py +18 -0
- vispy/scene/widgets/anchor.py +25 -0
- vispy/scene/widgets/axis.py +88 -0
- vispy/scene/widgets/colorbar.py +176 -0
- vispy/scene/widgets/console.py +351 -0
- vispy/scene/widgets/grid.py +509 -0
- vispy/scene/widgets/label.py +50 -0
- vispy/scene/widgets/tests/__init__.py +0 -0
- vispy/scene/widgets/tests/test_colorbar.py +47 -0
- vispy/scene/widgets/viewbox.py +199 -0
- vispy/scene/widgets/widget.py +478 -0
- vispy/testing/__init__.py +51 -0
- vispy/testing/_runners.py +446 -0
- vispy/testing/_testing.py +416 -0
- vispy/testing/image_tester.py +473 -0
- vispy/testing/rendered_array_tester.py +85 -0
- vispy/testing/tests/__init__.py +0 -0
- vispy/testing/tests/test_testing.py +20 -0
- vispy/util/__init__.py +17 -0
- vispy/util/bunch.py +15 -0
- vispy/util/check_environment.py +57 -0
- vispy/util/config.py +490 -0
- vispy/util/dpi/__init__.py +19 -0
- vispy/util/dpi/_linux.py +69 -0
- vispy/util/dpi/_quartz.py +26 -0
- vispy/util/dpi/_win32.py +34 -0
- vispy/util/dpi/tests/__init__.py +0 -0
- vispy/util/dpi/tests/test_dpi.py +16 -0
- vispy/util/eq.py +41 -0
- vispy/util/event.py +774 -0
- vispy/util/fetching.py +276 -0
- vispy/util/filter.py +44 -0
- vispy/util/fonts/__init__.py +14 -0
- vispy/util/fonts/_freetype.py +73 -0
- vispy/util/fonts/_quartz.py +192 -0
- vispy/util/fonts/_triage.py +36 -0
- vispy/util/fonts/_vispy_fonts.py +20 -0
- vispy/util/fonts/_win32.py +105 -0
- vispy/util/fonts/data/OpenSans-Bold.ttf +0 -0
- vispy/util/fonts/data/OpenSans-BoldItalic.ttf +0 -0
- vispy/util/fonts/data/OpenSans-Italic.ttf +0 -0
- vispy/util/fonts/data/OpenSans-Regular.ttf +0 -0
- vispy/util/fonts/tests/__init__.py +0 -0
- vispy/util/fonts/tests/test_font.py +45 -0
- vispy/util/fourier.py +69 -0
- vispy/util/frozen.py +25 -0
- vispy/util/gallery_scraper.py +268 -0
- vispy/util/keys.py +91 -0
- vispy/util/logs.py +358 -0
- vispy/util/osmesa_gl.py +17 -0
- vispy/util/profiler.py +135 -0
- vispy/util/ptime.py +16 -0
- vispy/util/quaternion.py +229 -0
- vispy/util/svg/__init__.py +18 -0
- vispy/util/svg/base.py +20 -0
- vispy/util/svg/color.py +219 -0
- vispy/util/svg/element.py +51 -0
- vispy/util/svg/geometry.py +478 -0
- vispy/util/svg/group.py +66 -0
- vispy/util/svg/length.py +81 -0
- vispy/util/svg/number.py +25 -0
- vispy/util/svg/path.py +332 -0
- vispy/util/svg/shapes.py +57 -0
- vispy/util/svg/style.py +59 -0
- vispy/util/svg/svg.py +40 -0
- vispy/util/svg/transform.py +223 -0
- vispy/util/svg/transformable.py +28 -0
- vispy/util/svg/viewport.py +73 -0
- vispy/util/tests/__init__.py +0 -0
- vispy/util/tests/test_config.py +58 -0
- vispy/util/tests/test_docstring_parameters.py +123 -0
- vispy/util/tests/test_emitter_group.py +262 -0
- vispy/util/tests/test_event_emitter.py +743 -0
- vispy/util/tests/test_fourier.py +35 -0
- vispy/util/tests/test_gallery_scraper.py +112 -0
- vispy/util/tests/test_import.py +127 -0
- vispy/util/tests/test_key.py +22 -0
- vispy/util/tests/test_logging.py +45 -0
- vispy/util/tests/test_run.py +14 -0
- vispy/util/tests/test_transforms.py +42 -0
- vispy/util/tests/test_vispy.py +48 -0
- vispy/util/transforms.py +201 -0
- vispy/util/wrappers.py +155 -0
- vispy/version.py +4 -0
- vispy/visuals/__init__.py +50 -0
- vispy/visuals/_scalable_textures.py +485 -0
- vispy/visuals/axis.py +678 -0
- vispy/visuals/border.py +208 -0
- vispy/visuals/box.py +79 -0
- vispy/visuals/collections/__init__.py +30 -0
- vispy/visuals/collections/agg_fast_path_collection.py +219 -0
- vispy/visuals/collections/agg_path_collection.py +197 -0
- vispy/visuals/collections/agg_point_collection.py +52 -0
- vispy/visuals/collections/agg_segment_collection.py +142 -0
- vispy/visuals/collections/array_list.py +401 -0
- vispy/visuals/collections/base_collection.py +482 -0
- vispy/visuals/collections/collection.py +253 -0
- vispy/visuals/collections/path_collection.py +23 -0
- vispy/visuals/collections/point_collection.py +19 -0
- vispy/visuals/collections/polygon_collection.py +25 -0
- vispy/visuals/collections/raw_path_collection.py +119 -0
- vispy/visuals/collections/raw_point_collection.py +113 -0
- vispy/visuals/collections/raw_polygon_collection.py +77 -0
- vispy/visuals/collections/raw_segment_collection.py +112 -0
- vispy/visuals/collections/raw_triangle_collection.py +78 -0
- vispy/visuals/collections/segment_collection.py +19 -0
- vispy/visuals/collections/triangle_collection.py +16 -0
- vispy/visuals/collections/util.py +168 -0
- vispy/visuals/colorbar.py +699 -0
- vispy/visuals/cube.py +41 -0
- vispy/visuals/ellipse.py +163 -0
- vispy/visuals/filters/__init__.py +10 -0
- vispy/visuals/filters/base_filter.py +242 -0
- vispy/visuals/filters/clipper.py +60 -0
- vispy/visuals/filters/clipping_planes.py +122 -0
- vispy/visuals/filters/color.py +181 -0
- vispy/visuals/filters/markers.py +28 -0
- vispy/visuals/filters/mesh.py +796 -0
- vispy/visuals/filters/picking.py +60 -0
- vispy/visuals/filters/tests/__init__.py +3 -0
- vispy/visuals/filters/tests/test_primitive_picking_filters.py +70 -0
- vispy/visuals/filters/tests/test_wireframe_filter.py +16 -0
- vispy/visuals/glsl/__init__.py +1 -0
- vispy/visuals/glsl/antialiasing.py +133 -0
- vispy/visuals/glsl/color.py +63 -0
- vispy/visuals/graphs/__init__.py +1 -0
- vispy/visuals/graphs/graph.py +240 -0
- vispy/visuals/graphs/layouts/__init__.py +55 -0
- vispy/visuals/graphs/layouts/circular.py +49 -0
- vispy/visuals/graphs/layouts/force_directed.py +211 -0
- vispy/visuals/graphs/layouts/networkx_layout.py +87 -0
- vispy/visuals/graphs/layouts/random.py +52 -0
- vispy/visuals/graphs/tests/__init__.py +1 -0
- vispy/visuals/graphs/tests/test_layouts.py +139 -0
- vispy/visuals/graphs/tests/test_networkx_layout.py +47 -0
- vispy/visuals/graphs/util.py +120 -0
- vispy/visuals/gridlines.py +105 -0
- vispy/visuals/gridmesh.py +98 -0
- vispy/visuals/histogram.py +58 -0
- vispy/visuals/image.py +688 -0
- vispy/visuals/image_complex.py +130 -0
- vispy/visuals/infinite_line.py +199 -0
- vispy/visuals/instanced_mesh.py +152 -0
- vispy/visuals/isocurve.py +213 -0
- vispy/visuals/isoline.py +241 -0
- vispy/visuals/isosurface.py +113 -0
- vispy/visuals/line/__init__.py +6 -0
- vispy/visuals/line/arrow.py +289 -0
- vispy/visuals/line/dash_atlas.py +90 -0
- vispy/visuals/line/line.py +545 -0
- vispy/visuals/line_plot.py +135 -0
- vispy/visuals/linear_region.py +199 -0
- vispy/visuals/markers.py +810 -0
- vispy/visuals/mesh.py +373 -0
- vispy/visuals/mesh_normals.py +159 -0
- vispy/visuals/plane.py +54 -0
- vispy/visuals/polygon.py +145 -0
- vispy/visuals/rectangle.py +196 -0
- vispy/visuals/regular_polygon.py +56 -0
- vispy/visuals/scrolling_lines.py +197 -0
- vispy/visuals/shaders/__init__.py +17 -0
- vispy/visuals/shaders/compiler.py +206 -0
- vispy/visuals/shaders/expression.py +99 -0
- vispy/visuals/shaders/function.py +788 -0
- vispy/visuals/shaders/multiprogram.py +145 -0
- vispy/visuals/shaders/parsing.py +140 -0
- vispy/visuals/shaders/program.py +161 -0
- vispy/visuals/shaders/shader_object.py +162 -0
- vispy/visuals/shaders/tests/__init__.py +0 -0
- vispy/visuals/shaders/tests/test_function.py +486 -0
- vispy/visuals/shaders/tests/test_multiprogram.py +78 -0
- vispy/visuals/shaders/tests/test_parsing.py +57 -0
- vispy/visuals/shaders/variable.py +272 -0
- vispy/visuals/spectrogram.py +169 -0
- vispy/visuals/sphere.py +80 -0
- vispy/visuals/surface_plot.py +192 -0
- vispy/visuals/tests/__init__.py +0 -0
- vispy/visuals/tests/test_arrows.py +109 -0
- vispy/visuals/tests/test_axis.py +120 -0
- vispy/visuals/tests/test_collections.py +15 -0
- vispy/visuals/tests/test_colorbar.py +179 -0
- vispy/visuals/tests/test_colormap.py +97 -0
- vispy/visuals/tests/test_ellipse.py +122 -0
- vispy/visuals/tests/test_histogram.py +24 -0
- vispy/visuals/tests/test_image.py +390 -0
- vispy/visuals/tests/test_image_complex.py +36 -0
- vispy/visuals/tests/test_infinite_line.py +53 -0
- vispy/visuals/tests/test_instanced_mesh.py +50 -0
- vispy/visuals/tests/test_isosurface.py +22 -0
- vispy/visuals/tests/test_linear_region.py +152 -0
- vispy/visuals/tests/test_markers.py +54 -0
- vispy/visuals/tests/test_mesh.py +261 -0
- vispy/visuals/tests/test_mesh_normals.py +218 -0
- vispy/visuals/tests/test_polygon.py +112 -0
- vispy/visuals/tests/test_rectangle.py +163 -0
- vispy/visuals/tests/test_regular_polygon.py +111 -0
- vispy/visuals/tests/test_scalable_textures.py +180 -0
- vispy/visuals/tests/test_sdf.py +73 -0
- vispy/visuals/tests/test_spectrogram.py +42 -0
- vispy/visuals/tests/test_text.py +95 -0
- vispy/visuals/tests/test_volume.py +542 -0
- vispy/visuals/tests/test_windbarb.py +33 -0
- vispy/visuals/text/__init__.py +7 -0
- vispy/visuals/text/_sdf_cpu.cpython-311-darwin.so +0 -0
- vispy/visuals/text/_sdf_cpu.pyx +110 -0
- vispy/visuals/text/_sdf_gpu.py +316 -0
- vispy/visuals/text/text.py +675 -0
- vispy/visuals/transforms/__init__.py +34 -0
- vispy/visuals/transforms/_util.py +191 -0
- vispy/visuals/transforms/base_transform.py +233 -0
- vispy/visuals/transforms/chain.py +300 -0
- vispy/visuals/transforms/interactive.py +98 -0
- vispy/visuals/transforms/linear.py +564 -0
- vispy/visuals/transforms/nonlinear.py +398 -0
- vispy/visuals/transforms/tests/__init__.py +0 -0
- vispy/visuals/transforms/tests/test_transforms.py +243 -0
- vispy/visuals/transforms/transform_system.py +339 -0
- vispy/visuals/tube.py +173 -0
- vispy/visuals/visual.py +923 -0
- vispy/visuals/volume.py +1335 -0
- vispy/visuals/windbarb.py +291 -0
- vispy/visuals/xyz_axis.py +34 -0
- vispy-0.14.0.dist-info/LICENSE.txt +36 -0
- vispy-0.14.0.dist-info/METADATA +218 -0
- vispy-0.14.0.dist-info/RECORD +519 -0
- vispy-0.14.0.dist-info/WHEEL +5 -0
- vispy-0.14.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# -----------------------------------------------------------------------------
|
|
3
|
+
# Copyright (c) Vispy Development Team. All Rights Reserved.
|
|
4
|
+
# Distributed under the (new) BSD License. See LICENSE.txt for more info.
|
|
5
|
+
# -----------------------------------------------------------------------------
|
|
6
|
+
from vispy.scene.widgets import ViewBox
|
|
7
|
+
from vispy.testing import run_tests_if_main
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def test_turntable_camera_link():
|
|
11
|
+
vbs = [ViewBox(camera='turntable') for _ in range(3)]
|
|
12
|
+
cams = [vb.camera for vb in vbs]
|
|
13
|
+
|
|
14
|
+
for cam in cams:
|
|
15
|
+
cam.elevation = 45.0
|
|
16
|
+
cam.azimuth = 120.0
|
|
17
|
+
cam.scale_factor = 4.0
|
|
18
|
+
|
|
19
|
+
cams[0].link(cams[1])
|
|
20
|
+
cams[0].link(cams[2], props=['azimuth', 'elevation'])
|
|
21
|
+
|
|
22
|
+
cams[1].elevation = 30.0
|
|
23
|
+
cams[1].azimuth = 90.0
|
|
24
|
+
cams[1].scale_factor = 2.0
|
|
25
|
+
|
|
26
|
+
assert cams[0].elevation == 30.0
|
|
27
|
+
assert cams[0].azimuth == 90.0
|
|
28
|
+
assert cams[0].scale_factor == 2.0
|
|
29
|
+
|
|
30
|
+
assert cams[2].elevation == 30.0
|
|
31
|
+
assert cams[2].azimuth == 90.0
|
|
32
|
+
assert cams[2].scale_factor == 4.0
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def test_panzoom_link():
|
|
36
|
+
vbs = [ViewBox(camera='panzoom') for _ in range(4)]
|
|
37
|
+
cams = [vb.camera for vb in vbs]
|
|
38
|
+
|
|
39
|
+
for cam in cams:
|
|
40
|
+
cam.rect = (0, 0, 100, 100)
|
|
41
|
+
|
|
42
|
+
cams[0].link(cams[1])
|
|
43
|
+
cams[0].link(cams[2], axis='x')
|
|
44
|
+
cams[0].link(cams[3], axis='y')
|
|
45
|
+
|
|
46
|
+
cams[1].rect = (-20, -20, 130, 130)
|
|
47
|
+
|
|
48
|
+
assert cams[0].rect.pos == (-20, -20) and cams[0].rect.size == (130, 130)
|
|
49
|
+
assert cams[2].rect.pos == (-20, 0) and cams[2].rect.size == (130, 100)
|
|
50
|
+
assert cams[3].rect.pos == (0, -20) and cams[3].rect.size == (100, 130)
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
run_tests_if_main()
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# -----------------------------------------------------------------------------
|
|
3
|
+
# Copyright (c) Vispy Development Team. All Rights Reserved.
|
|
4
|
+
# Distributed under the (new) BSD License. See LICENSE.txt for more info.
|
|
5
|
+
# -----------------------------------------------------------------------------
|
|
6
|
+
import sys
|
|
7
|
+
|
|
8
|
+
import numpy as np
|
|
9
|
+
import pytest
|
|
10
|
+
|
|
11
|
+
from vispy import scene, io
|
|
12
|
+
from vispy.testing import (requires_application, TestingCanvas,
|
|
13
|
+
run_tests_if_main)
|
|
14
|
+
from vispy.testing.image_tester import assert_image_approved
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@pytest.mark.xfail('darwin' in sys.platform, reason="Differences in OSX rendering")
|
|
18
|
+
@requires_application()
|
|
19
|
+
def test_perspective_render():
|
|
20
|
+
with TestingCanvas(size=(120, 200)) as canvas:
|
|
21
|
+
|
|
22
|
+
grid = canvas.central_widget.add_grid()
|
|
23
|
+
imdata = io.load_crate().astype('float32') / 255
|
|
24
|
+
|
|
25
|
+
views = []
|
|
26
|
+
images = []
|
|
27
|
+
for i, imethod in enumerate(['impostor', 'subdivide']):
|
|
28
|
+
v = grid.add_view(row=i, col=0, border_color='white')
|
|
29
|
+
v.camera = 'turntable'
|
|
30
|
+
v.camera.fov = 50
|
|
31
|
+
v.camera.distance = 30
|
|
32
|
+
|
|
33
|
+
views.append(v)
|
|
34
|
+
image = scene.visuals.Image(imdata, method=imethod,
|
|
35
|
+
grid=(4, 4))
|
|
36
|
+
image.transform = scene.STTransform(translate=(-12.8, -12.8),
|
|
37
|
+
scale=(0.1, 0.1))
|
|
38
|
+
v.add(image)
|
|
39
|
+
images.append(image)
|
|
40
|
+
|
|
41
|
+
image = canvas.render()
|
|
42
|
+
canvas.close()
|
|
43
|
+
|
|
44
|
+
# Allow many pixels to differ by a small amount--texture sampling and
|
|
45
|
+
# exact triangle position will differ across platforms. However a
|
|
46
|
+
# change in perspective or in the widget borders should trigger a
|
|
47
|
+
# failure.
|
|
48
|
+
assert_image_approved(image, 'scene/cameras/perspective_test.png',
|
|
49
|
+
'perspective test 1: 2 identical views with '
|
|
50
|
+
'correct perspective',
|
|
51
|
+
px_threshold=20,
|
|
52
|
+
px_count=60,
|
|
53
|
+
max_px_diff=200)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
@requires_application()
|
|
57
|
+
def test_panzoom_center():
|
|
58
|
+
with TestingCanvas(size=(120, 200)) as canvas:
|
|
59
|
+
grid = canvas.central_widget.add_grid()
|
|
60
|
+
imdata = io.load_crate().astype('float32') / 255
|
|
61
|
+
|
|
62
|
+
v = grid.add_view(row=0, col=0)
|
|
63
|
+
v.camera = 'panzoom'
|
|
64
|
+
|
|
65
|
+
image = scene.visuals.Image(imdata)
|
|
66
|
+
image.transform = scene.STTransform(translate=(-12.8, -12.8),
|
|
67
|
+
scale=(0.1, 0.1))
|
|
68
|
+
v.add(image)
|
|
69
|
+
|
|
70
|
+
result1 = canvas.render()[..., :3]
|
|
71
|
+
assert v.camera.center == (0.5, 0.5, 0)
|
|
72
|
+
|
|
73
|
+
v.camera.center = (-12.8, -12.8, 0)
|
|
74
|
+
result2 = canvas.render()[..., :3]
|
|
75
|
+
|
|
76
|
+
assert not np.allclose(result1, result2)
|
|
77
|
+
# we moved to the lower-left corner of the image that means only the
|
|
78
|
+
# upper-right quadrant should have data, the rest is black background
|
|
79
|
+
np.testing.assert_allclose(result2[100:, :], 0)
|
|
80
|
+
np.testing.assert_allclose(result2[:, :60], 0)
|
|
81
|
+
assert not np.allclose(result2[:100, 60:], 0)
|
|
82
|
+
assert v.camera.center == (-12.8, -12.8, 0)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
@requires_application()
|
|
86
|
+
def test_panzoom_gesture_zoom():
|
|
87
|
+
with TestingCanvas(size=(120, 200)) as canvas:
|
|
88
|
+
view = canvas.central_widget.add_view()
|
|
89
|
+
imdata = io.load_crate().astype('float32') / 255
|
|
90
|
+
scene.visuals.Image(imdata, parent=view.scene)
|
|
91
|
+
view.camera = scene.PanZoomCamera(aspect=1)
|
|
92
|
+
|
|
93
|
+
assert view.camera.rect.size == (1, 1)
|
|
94
|
+
|
|
95
|
+
canvas.events.touch(
|
|
96
|
+
type="gesture_zoom",
|
|
97
|
+
pos=(60, 100),
|
|
98
|
+
scale=-1.0,
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
assert view.camera.rect.size == (2, 2)
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
@requires_application()
|
|
105
|
+
def test_turntable_gesture_zoom():
|
|
106
|
+
with TestingCanvas(size=(120, 200)) as canvas:
|
|
107
|
+
view = canvas.central_widget.add_view()
|
|
108
|
+
imdata = io.load_crate().astype('float32') / 255
|
|
109
|
+
scene.visuals.Image(imdata, parent=view.scene)
|
|
110
|
+
view.camera = scene.TurntableCamera()
|
|
111
|
+
|
|
112
|
+
initial_scale_factor = view.camera.scale_factor
|
|
113
|
+
canvas.events.touch(
|
|
114
|
+
type="gesture_zoom",
|
|
115
|
+
pos=(60, 100),
|
|
116
|
+
scale=-1.0,
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
assert view.camera.scale_factor == 2 * initial_scale_factor
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
run_tests_if_main()
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
# Copyright (c) Vispy Development Team. All Rights Reserved.
|
|
3
|
+
# Distributed under the (new) BSD License. See LICENSE.txt for more info.
|
|
4
|
+
|
|
5
|
+
from __future__ import division
|
|
6
|
+
|
|
7
|
+
import numpy as np
|
|
8
|
+
|
|
9
|
+
from ...util import transforms
|
|
10
|
+
from .perspective import Base3DRotationCamera
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class TurntableCamera(Base3DRotationCamera):
|
|
14
|
+
"""3D camera class that orbits around a center point while
|
|
15
|
+
maintaining a view on a center point.
|
|
16
|
+
|
|
17
|
+
For this camera, the ``scale_factor`` indicates the zoom level, and
|
|
18
|
+
the ``center`` indicates the position to put at the center of the
|
|
19
|
+
view.
|
|
20
|
+
|
|
21
|
+
When ``elevation`` and ``azimuth`` are set to 0, the camera
|
|
22
|
+
points along the +y axis.
|
|
23
|
+
|
|
24
|
+
Parameters
|
|
25
|
+
----------
|
|
26
|
+
fov : float
|
|
27
|
+
Field of view. 0.0 means orthographic projection,
|
|
28
|
+
default is 45.0 (some perspective)
|
|
29
|
+
elevation : float
|
|
30
|
+
Elevation angle in degrees. The elevation angle represents a
|
|
31
|
+
rotation of the camera around the current scene x-axis. The
|
|
32
|
+
camera points along the x-y plane when the angle is 0.
|
|
33
|
+
azimuth : float
|
|
34
|
+
Azimuth angle in degrees. The azimuth angle represents a
|
|
35
|
+
rotation of the camera around the scene z-axis according to the
|
|
36
|
+
right-hand screw rule. The camera points along the y-z plane when
|
|
37
|
+
the angle is 0.
|
|
38
|
+
roll : float
|
|
39
|
+
Roll angle in degrees. The roll angle represents a rotation of
|
|
40
|
+
the camera around the current scene y-axis.
|
|
41
|
+
distance : float | None
|
|
42
|
+
The distance of the camera from the rotation point (only makes sense
|
|
43
|
+
if fov > 0). If None (default) the distance is determined from the
|
|
44
|
+
scale_factor and fov.
|
|
45
|
+
translate_speed : float
|
|
46
|
+
Scale factor on translation speed when moving the camera center point.
|
|
47
|
+
**kwargs : dict
|
|
48
|
+
Keyword arguments to pass to `BaseCamera`.
|
|
49
|
+
|
|
50
|
+
Notes
|
|
51
|
+
-----
|
|
52
|
+
Interaction:
|
|
53
|
+
|
|
54
|
+
* LMB: orbits the view around its center point.
|
|
55
|
+
* RMB or scroll: change scale_factor (i.e. zoom level)
|
|
56
|
+
* SHIFT + LMB: translate the center point
|
|
57
|
+
* SHIFT + RMB: change FOV
|
|
58
|
+
|
|
59
|
+
"""
|
|
60
|
+
|
|
61
|
+
_state_props = Base3DRotationCamera._state_props + ("elevation", "azimuth", "roll")
|
|
62
|
+
|
|
63
|
+
def __init__(
|
|
64
|
+
self,
|
|
65
|
+
fov=45.0,
|
|
66
|
+
elevation=30.0,
|
|
67
|
+
azimuth=30.0,
|
|
68
|
+
roll=0.0,
|
|
69
|
+
distance=None,
|
|
70
|
+
translate_speed=1.0,
|
|
71
|
+
**kwargs
|
|
72
|
+
):
|
|
73
|
+
super(TurntableCamera, self).__init__(fov=fov, **kwargs)
|
|
74
|
+
|
|
75
|
+
# Set camera attributes
|
|
76
|
+
self.azimuth = azimuth
|
|
77
|
+
self.elevation = elevation
|
|
78
|
+
self.roll = roll
|
|
79
|
+
self.distance = distance # None means auto-distance
|
|
80
|
+
self.translate_speed = translate_speed
|
|
81
|
+
|
|
82
|
+
@property
|
|
83
|
+
def elevation(self):
|
|
84
|
+
"""Get the camera elevation angle in degrees.
|
|
85
|
+
|
|
86
|
+
The camera points along the x-y plane when the angle is 0.
|
|
87
|
+
"""
|
|
88
|
+
return self._elevation
|
|
89
|
+
|
|
90
|
+
@elevation.setter
|
|
91
|
+
def elevation(self, elev):
|
|
92
|
+
elev = float(elev)
|
|
93
|
+
self._elevation = min(90, max(-90, elev))
|
|
94
|
+
self.view_changed()
|
|
95
|
+
|
|
96
|
+
@property
|
|
97
|
+
def azimuth(self):
|
|
98
|
+
"""Get the camera azimuth angle in degrees.
|
|
99
|
+
|
|
100
|
+
The camera points along the y-z plane when the angle is 0.
|
|
101
|
+
"""
|
|
102
|
+
return self._azimuth
|
|
103
|
+
|
|
104
|
+
@azimuth.setter
|
|
105
|
+
def azimuth(self, azim):
|
|
106
|
+
azim = float(azim)
|
|
107
|
+
while azim < -180:
|
|
108
|
+
azim += 360
|
|
109
|
+
while azim > 180:
|
|
110
|
+
azim -= 360
|
|
111
|
+
self._azimuth = azim
|
|
112
|
+
self.view_changed()
|
|
113
|
+
|
|
114
|
+
@property
|
|
115
|
+
def roll(self):
|
|
116
|
+
"""Get the camera roll angle in degrees."""
|
|
117
|
+
return self._roll
|
|
118
|
+
|
|
119
|
+
@roll.setter
|
|
120
|
+
def roll(self, roll):
|
|
121
|
+
roll = float(roll)
|
|
122
|
+
while roll < -180:
|
|
123
|
+
roll += 360
|
|
124
|
+
while roll > 180:
|
|
125
|
+
roll -= 360
|
|
126
|
+
self._roll = roll
|
|
127
|
+
self.view_changed()
|
|
128
|
+
|
|
129
|
+
def orbit(self, azim, elev):
|
|
130
|
+
"""Orbits the camera around the center position.
|
|
131
|
+
|
|
132
|
+
Parameters
|
|
133
|
+
----------
|
|
134
|
+
azim : float
|
|
135
|
+
Angle in degrees to rotate horizontally around the center point.
|
|
136
|
+
elev : float
|
|
137
|
+
Angle in degrees to rotate vertically around the center point.
|
|
138
|
+
"""
|
|
139
|
+
self.azimuth += azim
|
|
140
|
+
self.elevation = np.clip(self.elevation + elev, -90, 90)
|
|
141
|
+
self.view_changed()
|
|
142
|
+
|
|
143
|
+
def _update_rotation(self, event):
|
|
144
|
+
"""Update rotation parmeters based on mouse movement"""
|
|
145
|
+
p1 = event.mouse_event.press_event.pos
|
|
146
|
+
p2 = event.mouse_event.pos
|
|
147
|
+
if self._event_value is None:
|
|
148
|
+
self._event_value = self.azimuth, self.elevation
|
|
149
|
+
self.azimuth = self._event_value[0] - (p2 - p1)[0] * 0.5
|
|
150
|
+
self.elevation = self._event_value[1] + (p2 - p1)[1] * 0.5
|
|
151
|
+
|
|
152
|
+
def _get_rotation_tr(self):
|
|
153
|
+
"""Return a rotation matrix based on camera parameters"""
|
|
154
|
+
up, forward, right = self._get_dim_vectors()
|
|
155
|
+
matrix = (
|
|
156
|
+
transforms.rotate(self.elevation, -right)
|
|
157
|
+
.dot(transforms.rotate(self.azimuth, up))
|
|
158
|
+
.dot(transforms.rotate(self.roll, forward))
|
|
159
|
+
)
|
|
160
|
+
return matrix
|
|
161
|
+
|
|
162
|
+
def _dist_to_trans(self, dist):
|
|
163
|
+
"""Convert mouse x, y movement into x, y, z translations"""
|
|
164
|
+
rae = np.array([self.roll, self.azimuth, self.elevation]) * np.pi / 180
|
|
165
|
+
sro, saz, sel = np.sin(rae)
|
|
166
|
+
cro, caz, cel = np.cos(rae)
|
|
167
|
+
d0, d1 = dist[0], dist[1]
|
|
168
|
+
dx = (+ d0 * (cro * caz + sro * sel * saz)
|
|
169
|
+
+ d1 * (sro * caz - cro * sel * saz)) * self.translate_speed
|
|
170
|
+
dy = (+ d0 * (cro * saz - sro * sel * caz)
|
|
171
|
+
+ d1 * (sro * saz + cro * sel * caz)) * self.translate_speed
|
|
172
|
+
dz = (- d0 * sro * cel + d1 * cro * cel) * self.translate_speed
|
|
173
|
+
return dx, dy, dz
|