vispy 0.15.0__cp312-cp312-macosx_10_13_x86_64.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 +1003 -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 +1213 -0
- vispy/color/tests/__init__.py +0 -0
- vispy/color/tests/test_color.py +378 -0
- vispy/conftest.py +12 -0
- vispy/ext/__init__.py +0 -0
- vispy/ext/cocoapy.py +1522 -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 +162 -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 +700 -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 +594 -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 +568 -0
- vispy/gloo/gl/tests/test_names.py +246 -0
- vispy/gloo/gl/tests/test_use.py +71 -0
- vispy/gloo/glir.py +1824 -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 +1046 -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 +105 -0
- vispy/scene/cameras/base_camera.py +551 -0
- vispy/scene/cameras/fly.py +474 -0
- vispy/scene/cameras/magnify.py +163 -0
- vispy/scene/cameras/panzoom.py +311 -0
- vispy/scene/cameras/perspective.py +338 -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 +183 -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 +448 -0
- vispy/testing/_testing.py +416 -0
- vispy/testing/image_tester.py +494 -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 +32 -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 +21 -0
- vispy/visuals/__init__.py +50 -0
- vispy/visuals/_scalable_textures.py +487 -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 +162 -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 +801 -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 +161 -0
- vispy/visuals/gridmesh.py +98 -0
- vispy/visuals/histogram.py +58 -0
- vispy/visuals/image.py +701 -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 +819 -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_gridlines.py +30 -0
- vispy/visuals/tests/test_histogram.py +24 -0
- vispy/visuals/tests/test_image.py +392 -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 +196 -0
- vispy/visuals/tests/test_sdf.py +73 -0
- vispy/visuals/tests/test_spectrogram.py +42 -0
- vispy/visuals/tests/test_surface_plot.py +57 -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-312-darwin.so +0 -0
- vispy/visuals/text/_sdf_cpu.pyx +112 -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 +1366 -0
- vispy/visuals/windbarb.py +291 -0
- vispy/visuals/xyz_axis.py +34 -0
- vispy-0.15.0.dist-info/METADATA +243 -0
- vispy-0.15.0.dist-info/RECORD +521 -0
- vispy-0.15.0.dist-info/WHEEL +6 -0
- vispy-0.15.0.dist-info/licenses/LICENSE.txt +36 -0
- vispy-0.15.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// ----------------------------------------------------------------------------
|
|
2
|
+
// Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
|
|
3
|
+
// Distributed under the (new) BSD License.
|
|
4
|
+
// ----------------------------------------------------------------------------
|
|
5
|
+
#include "colormaps/util.glsl"
|
|
6
|
+
|
|
7
|
+
vec3 colormap_hot(float t)
|
|
8
|
+
{
|
|
9
|
+
return vec3(smoothstep(0.0, 1.0/3.0,t),
|
|
10
|
+
smoothstep(1.0/3.0,2.0/3.0,t),
|
|
11
|
+
smoothstep(2.0/3.0,1.0, t));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
vec3 colormap_hot(float t, vec3 under, vec3 over)
|
|
15
|
+
{
|
|
16
|
+
return colormap_underover(t, colormap_hot(t), under, over);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
vec4 colormap_hot(float t, vec4 under, vec4 over)
|
|
20
|
+
{
|
|
21
|
+
return colormap_underover(t, vec4(colormap_hot(t),1.0), under, over);
|
|
22
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// ----------------------------------------------------------------------------
|
|
2
|
+
// Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
|
|
3
|
+
// Distributed under the (new) BSD License.
|
|
4
|
+
// ----------------------------------------------------------------------------
|
|
5
|
+
#include "colormaps/util.glsl"
|
|
6
|
+
|
|
7
|
+
vec3 colormap_ice(float t)
|
|
8
|
+
{
|
|
9
|
+
return vec3(t, t, 1.0);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
vec3 colormap_ice(float t, vec3 under, vec3 over)
|
|
13
|
+
{
|
|
14
|
+
return colormap_underover(t, colormap_ice(t), under, over);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
vec4 colormap_ice(float t, vec4 under, vec4 over)
|
|
18
|
+
{
|
|
19
|
+
return colormap_underover(t, vec4(colormap_ice(t),1.0), under, over);
|
|
20
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// ----------------------------------------------------------------------------
|
|
2
|
+
// Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
|
|
3
|
+
// Distributed under the (new) BSD License.
|
|
4
|
+
// ----------------------------------------------------------------------------
|
|
5
|
+
#include "colormaps/util.glsl"
|
|
6
|
+
#include "colormaps/ice.glsl"
|
|
7
|
+
#include "colormaps/fire.glsl"
|
|
8
|
+
|
|
9
|
+
vec3 colormap_icefire(float t)
|
|
10
|
+
{
|
|
11
|
+
return colormap_segment(0.0,0.5,t) * colormap_ice(2.0*(t-0.0)) +
|
|
12
|
+
colormap_segment(0.5,1.0,t) * colormap_fire(2.0*(t-0.5));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
vec3 colormap_icefire(float t, vec3 under, vec3 over)
|
|
16
|
+
{
|
|
17
|
+
return colormap_underover(t, colormap_icefire(t), under, over);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
vec4 colormap_icefire(float t, vec4 under, vec4 over)
|
|
21
|
+
{
|
|
22
|
+
return colormap_underover(t, vec4(colormap_icefire(t),1.0), under, over);
|
|
23
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import os
|
|
2
|
+
import re
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def get(filename):
|
|
6
|
+
for path in ["..", "."]:
|
|
7
|
+
filepath = os.path.join(path, filename)
|
|
8
|
+
if os.path.exists(filepath):
|
|
9
|
+
with open(filepath) as infile:
|
|
10
|
+
code = infile.read()
|
|
11
|
+
# comment = '#line 0 // Start of "%s"\n' % filename
|
|
12
|
+
comment = '// --- start of "%s" ---\n' % filename
|
|
13
|
+
return comment + code
|
|
14
|
+
return '#error "%s" not found !\n' % filename
|
|
15
|
+
|
|
16
|
+
code = """
|
|
17
|
+
#include "colormap/colormaps.glsl"
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
re_include = re.compile(r'\#include\s*"(?P<filename>[a-zA-Z0-9\-\.\/]+)"')
|
|
21
|
+
|
|
22
|
+
includes = []
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def replace(match):
|
|
26
|
+
filename = match.group("filename")
|
|
27
|
+
if filename not in includes:
|
|
28
|
+
includes.append(filename)
|
|
29
|
+
text = get(filename)
|
|
30
|
+
# lineno = code.count("\n",0,match.start())+1
|
|
31
|
+
# text += '\n#line %d // End of "%s"' % (lineno, filename)
|
|
32
|
+
text += '// --- end of "%s" ---\n' % filename
|
|
33
|
+
return text
|
|
34
|
+
return ''
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
if __name__ == "__main__":
|
|
38
|
+
while re.search(re_include, code):
|
|
39
|
+
code = re.sub(re_include, replace, code)
|
|
40
|
+
print(code)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// ----------------------------------------------------------------------------
|
|
2
|
+
// Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
|
|
3
|
+
// Distributed under the (new) BSD License.
|
|
4
|
+
// ----------------------------------------------------------------------------
|
|
5
|
+
#include "colormaps/util.glsl"
|
|
6
|
+
|
|
7
|
+
vec3 colormap_reds(float t)
|
|
8
|
+
{
|
|
9
|
+
return mix(vec3(1,1,1), vec3(1,0,0), t);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
vec3 colormap_reds(float t, vec3 under, vec3 over)
|
|
13
|
+
{
|
|
14
|
+
return colormap_underover(t, colormap_reds(t), under, over);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
vec4 colormap_reds(float t, vec4 under, vec4 over)
|
|
18
|
+
{
|
|
19
|
+
return colormap_underover(t, vec4(colormap_reds(t),1.0), under, over);
|
|
20
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// ----------------------------------------------------------------------------
|
|
2
|
+
// Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
|
|
3
|
+
// Distributed under the (new) BSD License.
|
|
4
|
+
// ----------------------------------------------------------------------------
|
|
5
|
+
#include "colormaps/util.glsl"
|
|
6
|
+
|
|
7
|
+
vec3 colormap_spring(float t)
|
|
8
|
+
{
|
|
9
|
+
return mix(vec3(1.0,0.0,1.0), vec3(1.0,1.0,0.0), t);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
vec3 colormap_spring(float t, vec3 under, vec3 over)
|
|
13
|
+
{
|
|
14
|
+
return colormap_underover(t, colormap_spring(t), under, over);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
vec4 colormap_spring(float t, vec4 under, vec4 over)
|
|
18
|
+
{
|
|
19
|
+
return colormap_underover(t, vec4(colormap_spring(t),1.0), under, over);
|
|
20
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// ----------------------------------------------------------------------------
|
|
2
|
+
// Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
|
|
3
|
+
// Distributed under the (new) BSD License.
|
|
4
|
+
// ----------------------------------------------------------------------------
|
|
5
|
+
#include "colormaps/util.glsl"
|
|
6
|
+
|
|
7
|
+
vec3 colormap_summer(float t)
|
|
8
|
+
{
|
|
9
|
+
return mix(vec3(0.0,0.5,0.4), vec3(1.0,1.0,0.4), t);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
vec3 colormap_summer(float t, vec3 under, vec3 over)
|
|
13
|
+
{
|
|
14
|
+
return colormap_underover(t, colormap_summer(t), under, over);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
vec4 colormap_summer(float t, vec4 under, vec4 over)
|
|
18
|
+
{
|
|
19
|
+
return colormap_underover(t, vec4(colormap_summer(t),1.0), under, over);
|
|
20
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// ----------------------------------------------------------------------------
|
|
2
|
+
// Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
|
|
3
|
+
// Distributed under the (new) BSD License.
|
|
4
|
+
// ----------------------------------------------------------------------------
|
|
5
|
+
#include "colormaps/util.glsl"
|
|
6
|
+
|
|
7
|
+
uniform sampler1D colormap;
|
|
8
|
+
|
|
9
|
+
vec3 colormap_user(float t)
|
|
10
|
+
{
|
|
11
|
+
return texture1D(colormap, t).rgb;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
vec3 colormap_user(float t, vec3 under, vec3 over)
|
|
15
|
+
{
|
|
16
|
+
return colormap_underover(t, colormap_user(t), under, over);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
vec4 colormap_user(float t, vec4 under, vec4 over)
|
|
20
|
+
{
|
|
21
|
+
return colormap_underover(t, vec4(colormap_user(t),1.0), under, over);
|
|
22
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// ----------------------------------------------------------------------------
|
|
2
|
+
// Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
|
|
3
|
+
// Distributed under the (new) BSD License.
|
|
4
|
+
// ----------------------------------------------------------------------------
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
* t <= 0 : return 0
|
|
8
|
+
* 0 < t < 1 : return t
|
|
9
|
+
* t >= 1 : return 0
|
|
10
|
+
*/
|
|
11
|
+
float
|
|
12
|
+
colormap_segment(float edge0, float edge1, float x)
|
|
13
|
+
{
|
|
14
|
+
return step(edge0,x) * (1.0-step(edge1,x));
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
* t <= 0 : return under
|
|
19
|
+
* 0 < t < 1 : return color
|
|
20
|
+
* t >= 1 : return over
|
|
21
|
+
*/
|
|
22
|
+
vec3
|
|
23
|
+
colormap_underover(float t, vec3 color, vec3 under, vec3 over)
|
|
24
|
+
{
|
|
25
|
+
return step(t,0.0)*under +
|
|
26
|
+
colormap_segment(0.0,1.0,t)*color +
|
|
27
|
+
step(1.0,t)*over;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/*
|
|
31
|
+
* t <= 0 : return under
|
|
32
|
+
* 0 < t < 1 : return color
|
|
33
|
+
* t >= 1 : return over
|
|
34
|
+
*/
|
|
35
|
+
vec4
|
|
36
|
+
colormap_underover(float t, vec4 color, vec4 under, vec4 over)
|
|
37
|
+
{
|
|
38
|
+
return step(t,0.0)*under +
|
|
39
|
+
colormap_segment(0.0,1.0,t)*color +
|
|
40
|
+
step(1.0,t)*over;
|
|
41
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// ----------------------------------------------------------------------------
|
|
2
|
+
// Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
|
|
3
|
+
// Distributed under the (new) BSD License.
|
|
4
|
+
// ----------------------------------------------------------------------------
|
|
5
|
+
#include "colormaps/util.glsl"
|
|
6
|
+
|
|
7
|
+
// Wheel colormap by Morgan McGuire
|
|
8
|
+
vec3 colormap_wheel(float t)
|
|
9
|
+
{
|
|
10
|
+
return clamp(abs(fract(t + vec3(1.0, 2.0 / 3.0, 1.0 / 3.0)) * 6.0 - 3.0) -1.0, 0.0, 1.0);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
vec3 colormap_wheel(float t, vec3 under, vec3 over)
|
|
14
|
+
{
|
|
15
|
+
return colormap_underover(t, colormap_wheel(t), under, over);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
vec4 colormap_wheel(float t, vec4 under, vec4 over)
|
|
19
|
+
{
|
|
20
|
+
return colormap_underover(t, vec4(colormap_wheel(t),1.0), under, over);
|
|
21
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// ----------------------------------------------------------------------------
|
|
2
|
+
// Copyright (c) 2014, Nicolas P. Rougier. All Rights Reserved.
|
|
3
|
+
// Distributed under the (new) BSD License.
|
|
4
|
+
// ----------------------------------------------------------------------------
|
|
5
|
+
#include "colormaps/util.glsl"
|
|
6
|
+
|
|
7
|
+
vec3 colormap_winter(float t)
|
|
8
|
+
{
|
|
9
|
+
return mix(vec3(0.0,0.0,1.0), vec3(0.0,1.0,0.5), sqrt(t));
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
vec3 colormap_winter(float t, vec3 under, vec3 over)
|
|
13
|
+
{
|
|
14
|
+
return colormap_underover(t, colormap_winter(t), under, over);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
vec4 colormap_winter(float t, vec4 under, vec4 over)
|
|
18
|
+
{
|
|
19
|
+
return colormap_underover(t, vec4(colormap_winter(t),1.0), under, over);
|
|
20
|
+
}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
#include "math/constants.glsl"
|
|
2
|
+
|
|
3
|
+
const float THETA = 15.0 * 3.14159265358979323846264/180.0;
|
|
4
|
+
|
|
5
|
+
float
|
|
6
|
+
cap( int type, float dx, float dy, float t )
|
|
7
|
+
{
|
|
8
|
+
float d = 0.0;
|
|
9
|
+
dx = abs(dx);
|
|
10
|
+
dy = abs(dy);
|
|
11
|
+
|
|
12
|
+
// None
|
|
13
|
+
if (type == 0) discard;
|
|
14
|
+
// Round
|
|
15
|
+
else if (type == 1) d = sqrt(dx*dx+dy*dy);
|
|
16
|
+
// Triangle in
|
|
17
|
+
else if (type == 3) d = (dx+abs(dy));
|
|
18
|
+
// Triangle out
|
|
19
|
+
else if (type == 2) d = max(abs(dy),(t+dx-abs(dy)));
|
|
20
|
+
// Square
|
|
21
|
+
else if (type == 4) d = max(dx,dy);
|
|
22
|
+
// Butt
|
|
23
|
+
else if (type == 5) d = max(dx+t,dy);
|
|
24
|
+
|
|
25
|
+
return d;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
float
|
|
29
|
+
join( in int type, in float d, in vec2 segment, in vec2 texcoord,
|
|
30
|
+
in vec2 miter, in float miter_limit, in float linewidth )
|
|
31
|
+
{
|
|
32
|
+
float dx = texcoord.x;
|
|
33
|
+
|
|
34
|
+
// Round join
|
|
35
|
+
// --------------------------------
|
|
36
|
+
if( type == 1 )
|
|
37
|
+
{
|
|
38
|
+
if (dx < segment.x) {
|
|
39
|
+
d = max(d,length( texcoord - vec2(segment.x,0.0)));
|
|
40
|
+
//d = length( texcoord - vec2(segment.x,0.0));
|
|
41
|
+
} else if (dx > segment.y) {
|
|
42
|
+
d = max(d,length( texcoord - vec2(segment.y,0.0)));
|
|
43
|
+
//d = length( texcoord - vec2(segment.y,0.0));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Bevel join
|
|
48
|
+
// --------------------------------
|
|
49
|
+
else if ( type == 2 )
|
|
50
|
+
{
|
|
51
|
+
if( (dx < segment.x) || (dx > segment.y) )
|
|
52
|
+
d = max(d, min(abs(miter.x),abs(miter.y)));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Miter limit
|
|
56
|
+
// --------------------------------
|
|
57
|
+
if( (dx < segment.x) || (dx > segment.y) )
|
|
58
|
+
{
|
|
59
|
+
d = max(d, min(abs(miter.x),
|
|
60
|
+
abs(miter.y)) - miter_limit*linewidth/2.0 );
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return d;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
// Uniforms
|
|
68
|
+
uniform sampler2D u_dash_atlas;
|
|
69
|
+
|
|
70
|
+
// Varying
|
|
71
|
+
varying vec4 v_color;
|
|
72
|
+
varying vec2 v_segment;
|
|
73
|
+
varying vec2 v_angles;
|
|
74
|
+
varying vec2 v_linecaps;
|
|
75
|
+
varying vec2 v_texcoord;
|
|
76
|
+
varying vec2 v_miter;
|
|
77
|
+
varying float v_miter_limit;
|
|
78
|
+
varying float v_length;
|
|
79
|
+
varying float v_linejoin;
|
|
80
|
+
varying float v_linewidth;
|
|
81
|
+
varying float v_antialias;
|
|
82
|
+
varying float v_dash_phase;
|
|
83
|
+
varying float v_dash_period;
|
|
84
|
+
varying float v_dash_index;
|
|
85
|
+
varying vec2 v_dash_caps;
|
|
86
|
+
varying float v_closed;
|
|
87
|
+
void main()
|
|
88
|
+
{
|
|
89
|
+
// gl_FragColor = v_color; return;
|
|
90
|
+
// vec4 color = v_color;
|
|
91
|
+
|
|
92
|
+
// If color is fully transparent we just discard the fragment
|
|
93
|
+
if( v_color.a <= 0.0 ) {
|
|
94
|
+
discard;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Test if dash pattern is the solid one (0)
|
|
98
|
+
bool solid = (v_dash_index == 0.0);
|
|
99
|
+
|
|
100
|
+
float dx = v_texcoord.x;
|
|
101
|
+
float dy = v_texcoord.y;
|
|
102
|
+
float t = v_linewidth/2.0-v_antialias;
|
|
103
|
+
float width = v_linewidth;
|
|
104
|
+
float d = 0.0;
|
|
105
|
+
|
|
106
|
+
vec2 linecaps = v_linecaps;
|
|
107
|
+
vec2 dash_caps = v_dash_caps;
|
|
108
|
+
float line_start = 0.0;
|
|
109
|
+
float line_stop = v_length;
|
|
110
|
+
// Test if path is closed
|
|
111
|
+
bool closed = (v_closed > 0.0);
|
|
112
|
+
|
|
113
|
+
// ------------------------------------------------------------------------
|
|
114
|
+
// Solid line
|
|
115
|
+
// ------------------------------------------------------------------------
|
|
116
|
+
if( solid ) {
|
|
117
|
+
d = abs(dy);
|
|
118
|
+
|
|
119
|
+
if( (!closed) && (dx < line_start) )
|
|
120
|
+
{
|
|
121
|
+
d = cap( int(v_linecaps.x), abs(dx), abs(dy), t );
|
|
122
|
+
}
|
|
123
|
+
else if( (!closed) && (dx > line_stop) )
|
|
124
|
+
{
|
|
125
|
+
d = cap( int(v_linecaps.y), abs(dx)-line_stop, abs(dy), t );
|
|
126
|
+
}
|
|
127
|
+
else
|
|
128
|
+
{
|
|
129
|
+
d = join( int(v_linejoin), abs(dy), v_segment, v_texcoord,
|
|
130
|
+
v_miter, v_miter_limit, v_linewidth );
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// ------------------------------------------------------------------------
|
|
134
|
+
// Dash line
|
|
135
|
+
// ------------------------------------------------------------------------
|
|
136
|
+
} else {
|
|
137
|
+
float segment_start = v_segment.x;
|
|
138
|
+
float segment_stop = v_segment.y;
|
|
139
|
+
float segment_center = (segment_start+segment_stop)/2.0;
|
|
140
|
+
float freq = v_dash_period*width;
|
|
141
|
+
float u = mod( dx + v_dash_phase*width,freq );
|
|
142
|
+
vec4 tex = texture2D(u_dash_atlas, vec2(u/freq, v_dash_index));
|
|
143
|
+
float dash_center= tex.x * width;
|
|
144
|
+
float dash_type = tex.y;
|
|
145
|
+
float _start = tex.z * width;
|
|
146
|
+
float _stop = tex.a * width;
|
|
147
|
+
float dash_start = dx - u + _start;
|
|
148
|
+
float dash_stop = dx - u + _stop;
|
|
149
|
+
|
|
150
|
+
// This test if the we are dealing with a discontinuous angle
|
|
151
|
+
bool discont = ((dx < segment_center) && abs(v_angles.x) > THETA) ||
|
|
152
|
+
((dx >= segment_center) && abs(v_angles.y) > THETA);
|
|
153
|
+
if( dx < line_start) discont = false;
|
|
154
|
+
if( dx > line_stop) discont = false;
|
|
155
|
+
|
|
156
|
+
// When path is closed, we do not have room for linecaps, so we make
|
|
157
|
+
// room by shortening the total length
|
|
158
|
+
if (closed){
|
|
159
|
+
line_start += v_linewidth/2.0;
|
|
160
|
+
line_stop -= v_linewidth/2.0;
|
|
161
|
+
linecaps = v_dash_caps;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
// Check is dash stop is before line start
|
|
166
|
+
if( dash_stop <= line_start )
|
|
167
|
+
{
|
|
168
|
+
discard;
|
|
169
|
+
}
|
|
170
|
+
// Check is dash start is beyond line stop
|
|
171
|
+
if( dash_start >= line_stop )
|
|
172
|
+
{
|
|
173
|
+
discard;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// Check if current pattern start is beyond segment stop
|
|
177
|
+
if( discont )
|
|
178
|
+
{
|
|
179
|
+
// Dash start is beyond segment, we discard
|
|
180
|
+
if( dash_start > segment_stop )
|
|
181
|
+
{
|
|
182
|
+
discard;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Dash stop is before segment, we discard
|
|
186
|
+
if( dash_stop < segment_start )
|
|
187
|
+
{
|
|
188
|
+
discard;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Special case for round caps (nicer with this)
|
|
192
|
+
if( (u > _stop) && (dash_stop > segment_stop ) &&
|
|
193
|
+
(abs(v_angles.y) < M_PI/2.0))
|
|
194
|
+
{
|
|
195
|
+
if( dash_caps.x == 1.0) discard;
|
|
196
|
+
}
|
|
197
|
+
// Special case for round caps (nicer with this)
|
|
198
|
+
else if( (u < _start) && (dash_start < segment_start ) &&
|
|
199
|
+
(abs(v_angles.x) < M_PI/2.0))
|
|
200
|
+
{
|
|
201
|
+
if( dash_caps.y == 1.0) discard;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Special case for triangle caps (in & out) and square
|
|
205
|
+
// We make sure the cap stop at crossing frontier
|
|
206
|
+
if( (dash_caps.x != 1.0) && (dash_caps.x != 5.0) )
|
|
207
|
+
{
|
|
208
|
+
if( (dash_start < segment_start ) &&
|
|
209
|
+
(abs(v_angles.x) < M_PI/2.0) )
|
|
210
|
+
{
|
|
211
|
+
float a = v_angles.x/2.0;
|
|
212
|
+
float x = (segment_start-dx)*cos(a) - dy*sin(a);
|
|
213
|
+
float y = (segment_start-dx)*sin(a) + dy*cos(a);
|
|
214
|
+
if( (x > 0.0) ) discard;
|
|
215
|
+
// We transform the cap into square to avoid holes
|
|
216
|
+
dash_caps.x = 4.0;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// Special case for triangle caps (in & out) and square
|
|
220
|
+
// We make sure the cap stop at crossing frontier
|
|
221
|
+
if( (dash_caps.y != 1.0) && (dash_caps.y != 5.0) )
|
|
222
|
+
{
|
|
223
|
+
if( (dash_stop > segment_stop ) &&
|
|
224
|
+
(abs(v_angles.y) < M_PI/2.0) )
|
|
225
|
+
{
|
|
226
|
+
float a = v_angles.y/2.0;
|
|
227
|
+
float x = (dx-segment_stop)*cos(a) - dy*sin(a);
|
|
228
|
+
float y = (dx-segment_stop)*sin(a) + dy*cos(a);
|
|
229
|
+
if( (x > 0.0) ) discard;
|
|
230
|
+
// We transform the caps into square to avoid holes
|
|
231
|
+
dash_caps.y = 4.0;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Line cap at start
|
|
237
|
+
if( (dx < line_start) && (dash_start < line_start) &&
|
|
238
|
+
(dash_stop > line_start) )
|
|
239
|
+
{
|
|
240
|
+
d = cap( int(linecaps.x), dx-line_start, dy, t);
|
|
241
|
+
}
|
|
242
|
+
// Line cap at stop
|
|
243
|
+
else if( (dx > line_stop) && (dash_stop > line_stop) &&
|
|
244
|
+
(dash_start < line_stop) )
|
|
245
|
+
{
|
|
246
|
+
d = cap( int(linecaps.y), dx-line_stop, dy, t);
|
|
247
|
+
}
|
|
248
|
+
// Dash cap left
|
|
249
|
+
else if( dash_type < 0.0 )
|
|
250
|
+
{
|
|
251
|
+
float u = max( u-dash_center , 0.0 );
|
|
252
|
+
d = cap( int(dash_caps.y), abs(u), dy, t);
|
|
253
|
+
}
|
|
254
|
+
// Dash cap right
|
|
255
|
+
else if( dash_type > 0.0 )
|
|
256
|
+
{
|
|
257
|
+
float u = max( dash_center-u, 0.0 );
|
|
258
|
+
d = cap( int(dash_caps.x), abs(u), dy, t);
|
|
259
|
+
}
|
|
260
|
+
// Dash body (plain)
|
|
261
|
+
else if( dash_type == 0.0 )
|
|
262
|
+
{
|
|
263
|
+
d = abs(dy);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
// Antialiasing at segment angles region
|
|
267
|
+
if( discont )
|
|
268
|
+
{
|
|
269
|
+
if( dx < segment_start )
|
|
270
|
+
{
|
|
271
|
+
// For sharp angles, we do not enforce cap shape
|
|
272
|
+
if( (dash_start < segment_start ) &&
|
|
273
|
+
(abs(v_angles.x) > M_PI/2.0))
|
|
274
|
+
{
|
|
275
|
+
d = abs(dy);
|
|
276
|
+
}
|
|
277
|
+
// Antialias at outer border
|
|
278
|
+
dx = segment_start - dx;
|
|
279
|
+
float angle = M_PI/2.+v_angles.x;
|
|
280
|
+
float f = abs( dx*cos(angle) - dy*sin(angle));
|
|
281
|
+
d = max(f,d);
|
|
282
|
+
}
|
|
283
|
+
else if( (dx > segment_stop) )
|
|
284
|
+
{
|
|
285
|
+
// For sharp angles, we do not enforce cap shape
|
|
286
|
+
if( (dash_stop > segment_stop ) &&
|
|
287
|
+
(abs(v_angles.y) > M_PI/2.0) )
|
|
288
|
+
{
|
|
289
|
+
d = abs(dy);
|
|
290
|
+
}
|
|
291
|
+
// Antialias at outer border
|
|
292
|
+
dx = dx - segment_stop;
|
|
293
|
+
float angle = M_PI/2.+v_angles.y;
|
|
294
|
+
float f = abs( dx*cos(angle) - dy*sin(angle));
|
|
295
|
+
d = max(f,d);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// Line join
|
|
300
|
+
//if( (dx > line_start) && (dx < line_stop) )
|
|
301
|
+
{
|
|
302
|
+
d = join( int(v_linejoin), d, v_segment, v_texcoord,
|
|
303
|
+
v_miter, v_miter_limit, v_linewidth );
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
// Distance to border
|
|
309
|
+
// ------------------------------------------------------------------------
|
|
310
|
+
d = d - t;
|
|
311
|
+
if( d < 0.0 )
|
|
312
|
+
{
|
|
313
|
+
gl_FragColor = v_color;
|
|
314
|
+
}
|
|
315
|
+
else
|
|
316
|
+
{
|
|
317
|
+
d /= v_antialias;
|
|
318
|
+
gl_FragColor = vec4(v_color.xyz, exp(-d*d)*v_color.a);
|
|
319
|
+
}
|
|
320
|
+
}
|