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.

Files changed (521) hide show
  1. vispy/__init__.py +33 -0
  2. vispy/app/__init__.py +15 -0
  3. vispy/app/_default_app.py +76 -0
  4. vispy/app/_detect_eventloop.py +148 -0
  5. vispy/app/application.py +263 -0
  6. vispy/app/backends/__init__.py +52 -0
  7. vispy/app/backends/_egl.py +264 -0
  8. vispy/app/backends/_glfw.py +513 -0
  9. vispy/app/backends/_jupyter_rfb.py +278 -0
  10. vispy/app/backends/_offscreen_util.py +121 -0
  11. vispy/app/backends/_osmesa.py +235 -0
  12. vispy/app/backends/_pyglet.py +451 -0
  13. vispy/app/backends/_pyqt4.py +36 -0
  14. vispy/app/backends/_pyqt5.py +36 -0
  15. vispy/app/backends/_pyqt6.py +40 -0
  16. vispy/app/backends/_pyside.py +37 -0
  17. vispy/app/backends/_pyside2.py +52 -0
  18. vispy/app/backends/_pyside6.py +53 -0
  19. vispy/app/backends/_qt.py +1003 -0
  20. vispy/app/backends/_sdl2.py +444 -0
  21. vispy/app/backends/_template.py +244 -0
  22. vispy/app/backends/_test.py +8 -0
  23. vispy/app/backends/_tk.py +800 -0
  24. vispy/app/backends/_wx.py +476 -0
  25. vispy/app/backends/tests/__init__.py +0 -0
  26. vispy/app/backends/tests/test_offscreen_util.py +52 -0
  27. vispy/app/backends/tests/test_rfb.py +77 -0
  28. vispy/app/base.py +294 -0
  29. vispy/app/canvas.py +828 -0
  30. vispy/app/qt.py +92 -0
  31. vispy/app/tests/__init__.py +0 -0
  32. vispy/app/tests/qt-designer.ui +58 -0
  33. vispy/app/tests/test_app.py +442 -0
  34. vispy/app/tests/test_backends.py +164 -0
  35. vispy/app/tests/test_canvas.py +122 -0
  36. vispy/app/tests/test_context.py +92 -0
  37. vispy/app/tests/test_qt.py +47 -0
  38. vispy/app/tests/test_simultaneous.py +134 -0
  39. vispy/app/timer.py +174 -0
  40. vispy/color/__init__.py +17 -0
  41. vispy/color/_color_dict.py +193 -0
  42. vispy/color/color_array.py +447 -0
  43. vispy/color/color_space.py +181 -0
  44. vispy/color/colormap.py +1213 -0
  45. vispy/color/tests/__init__.py +0 -0
  46. vispy/color/tests/test_color.py +378 -0
  47. vispy/conftest.py +12 -0
  48. vispy/ext/__init__.py +0 -0
  49. vispy/ext/cocoapy.py +1522 -0
  50. vispy/ext/cubehelix.py +138 -0
  51. vispy/ext/egl.py +375 -0
  52. vispy/ext/fontconfig.py +118 -0
  53. vispy/ext/gdi32plus.py +206 -0
  54. vispy/ext/osmesa.py +105 -0
  55. vispy/geometry/__init__.py +23 -0
  56. vispy/geometry/_triangulation_debugger.py +171 -0
  57. vispy/geometry/calculations.py +162 -0
  58. vispy/geometry/curves.py +399 -0
  59. vispy/geometry/generation.py +643 -0
  60. vispy/geometry/isocurve.py +175 -0
  61. vispy/geometry/isosurface.py +465 -0
  62. vispy/geometry/meshdata.py +700 -0
  63. vispy/geometry/normals.py +78 -0
  64. vispy/geometry/parametric.py +56 -0
  65. vispy/geometry/polygon.py +137 -0
  66. vispy/geometry/rect.py +210 -0
  67. vispy/geometry/tests/__init__.py +0 -0
  68. vispy/geometry/tests/test_calculations.py +23 -0
  69. vispy/geometry/tests/test_generation.py +56 -0
  70. vispy/geometry/tests/test_meshdata.py +106 -0
  71. vispy/geometry/tests/test_triangulation.py +594 -0
  72. vispy/geometry/torusknot.py +142 -0
  73. vispy/geometry/triangulation.py +876 -0
  74. vispy/gloo/__init__.py +56 -0
  75. vispy/gloo/buffer.py +505 -0
  76. vispy/gloo/context.py +272 -0
  77. vispy/gloo/framebuffer.py +257 -0
  78. vispy/gloo/gl/__init__.py +234 -0
  79. vispy/gloo/gl/_constants.py +332 -0
  80. vispy/gloo/gl/_es2.py +986 -0
  81. vispy/gloo/gl/_gl2.py +1365 -0
  82. vispy/gloo/gl/_proxy.py +499 -0
  83. vispy/gloo/gl/_pyopengl2.py +362 -0
  84. vispy/gloo/gl/dummy.py +24 -0
  85. vispy/gloo/gl/es2.py +62 -0
  86. vispy/gloo/gl/gl2.py +98 -0
  87. vispy/gloo/gl/glplus.py +168 -0
  88. vispy/gloo/gl/pyopengl2.py +97 -0
  89. vispy/gloo/gl/tests/__init__.py +0 -0
  90. vispy/gloo/gl/tests/test_basics.py +282 -0
  91. vispy/gloo/gl/tests/test_functionality.py +568 -0
  92. vispy/gloo/gl/tests/test_names.py +246 -0
  93. vispy/gloo/gl/tests/test_use.py +71 -0
  94. vispy/gloo/glir.py +1824 -0
  95. vispy/gloo/globject.py +101 -0
  96. vispy/gloo/preprocessor.py +67 -0
  97. vispy/gloo/program.py +543 -0
  98. vispy/gloo/tests/__init__.py +0 -0
  99. vispy/gloo/tests/test_buffer.py +558 -0
  100. vispy/gloo/tests/test_context.py +119 -0
  101. vispy/gloo/tests/test_framebuffer.py +195 -0
  102. vispy/gloo/tests/test_glir.py +307 -0
  103. vispy/gloo/tests/test_globject.py +35 -0
  104. vispy/gloo/tests/test_program.py +302 -0
  105. vispy/gloo/tests/test_texture.py +732 -0
  106. vispy/gloo/tests/test_use_gloo.py +187 -0
  107. vispy/gloo/tests/test_util.py +60 -0
  108. vispy/gloo/tests/test_wrappers.py +261 -0
  109. vispy/gloo/texture.py +1046 -0
  110. vispy/gloo/util.py +129 -0
  111. vispy/gloo/wrappers.py +762 -0
  112. vispy/glsl/__init__.py +42 -0
  113. vispy/glsl/antialias/antialias.glsl +7 -0
  114. vispy/glsl/antialias/cap-butt.glsl +31 -0
  115. vispy/glsl/antialias/cap-round.glsl +29 -0
  116. vispy/glsl/antialias/cap-square.glsl +30 -0
  117. vispy/glsl/antialias/cap-triangle-in.glsl +30 -0
  118. vispy/glsl/antialias/cap-triangle-out.glsl +30 -0
  119. vispy/glsl/antialias/cap.glsl +67 -0
  120. vispy/glsl/antialias/caps.glsl +67 -0
  121. vispy/glsl/antialias/filled.glsl +50 -0
  122. vispy/glsl/antialias/outline.glsl +40 -0
  123. vispy/glsl/antialias/stroke.glsl +43 -0
  124. vispy/glsl/arrowheads/angle.glsl +99 -0
  125. vispy/glsl/arrowheads/arrowheads.frag +60 -0
  126. vispy/glsl/arrowheads/arrowheads.glsl +12 -0
  127. vispy/glsl/arrowheads/arrowheads.vert +83 -0
  128. vispy/glsl/arrowheads/curved.glsl +48 -0
  129. vispy/glsl/arrowheads/inhibitor.glsl +26 -0
  130. vispy/glsl/arrowheads/stealth.glsl +46 -0
  131. vispy/glsl/arrowheads/triangle.glsl +97 -0
  132. vispy/glsl/arrowheads/util.glsl +13 -0
  133. vispy/glsl/arrows/angle-30.glsl +12 -0
  134. vispy/glsl/arrows/angle-60.glsl +12 -0
  135. vispy/glsl/arrows/angle-90.glsl +12 -0
  136. vispy/glsl/arrows/arrow.frag +39 -0
  137. vispy/glsl/arrows/arrow.vert +49 -0
  138. vispy/glsl/arrows/arrows.glsl +17 -0
  139. vispy/glsl/arrows/common.glsl +187 -0
  140. vispy/glsl/arrows/curved.glsl +63 -0
  141. vispy/glsl/arrows/stealth.glsl +50 -0
  142. vispy/glsl/arrows/triangle-30.glsl +12 -0
  143. vispy/glsl/arrows/triangle-60.glsl +12 -0
  144. vispy/glsl/arrows/triangle-90.glsl +12 -0
  145. vispy/glsl/arrows/util.glsl +98 -0
  146. vispy/glsl/build_spatial_filters.py +660 -0
  147. vispy/glsl/collections/agg-fast-path.frag +20 -0
  148. vispy/glsl/collections/agg-fast-path.vert +78 -0
  149. vispy/glsl/collections/agg-glyph.frag +60 -0
  150. vispy/glsl/collections/agg-glyph.vert +33 -0
  151. vispy/glsl/collections/agg-marker.frag +35 -0
  152. vispy/glsl/collections/agg-marker.vert +48 -0
  153. vispy/glsl/collections/agg-path.frag +55 -0
  154. vispy/glsl/collections/agg-path.vert +166 -0
  155. vispy/glsl/collections/agg-point.frag +21 -0
  156. vispy/glsl/collections/agg-point.vert +35 -0
  157. vispy/glsl/collections/agg-segment.frag +32 -0
  158. vispy/glsl/collections/agg-segment.vert +75 -0
  159. vispy/glsl/collections/marker.frag +38 -0
  160. vispy/glsl/collections/marker.vert +48 -0
  161. vispy/glsl/collections/raw-path.frag +15 -0
  162. vispy/glsl/collections/raw-path.vert +24 -0
  163. vispy/glsl/collections/raw-point.frag +14 -0
  164. vispy/glsl/collections/raw-point.vert +31 -0
  165. vispy/glsl/collections/raw-segment.frag +18 -0
  166. vispy/glsl/collections/raw-segment.vert +26 -0
  167. vispy/glsl/collections/raw-triangle.frag +13 -0
  168. vispy/glsl/collections/raw-triangle.vert +26 -0
  169. vispy/glsl/collections/sdf-glyph-ticks.vert +69 -0
  170. vispy/glsl/collections/sdf-glyph.frag +80 -0
  171. vispy/glsl/collections/sdf-glyph.vert +59 -0
  172. vispy/glsl/collections/tick-labels.vert +71 -0
  173. vispy/glsl/colormaps/autumn.glsl +20 -0
  174. vispy/glsl/colormaps/blues.glsl +20 -0
  175. vispy/glsl/colormaps/color-space.glsl +17 -0
  176. vispy/glsl/colormaps/colormaps.glsl +24 -0
  177. vispy/glsl/colormaps/cool.glsl +20 -0
  178. vispy/glsl/colormaps/fire.glsl +21 -0
  179. vispy/glsl/colormaps/gray.glsl +20 -0
  180. vispy/glsl/colormaps/greens.glsl +20 -0
  181. vispy/glsl/colormaps/hot.glsl +22 -0
  182. vispy/glsl/colormaps/ice.glsl +20 -0
  183. vispy/glsl/colormaps/icefire.glsl +23 -0
  184. vispy/glsl/colormaps/parse.py +40 -0
  185. vispy/glsl/colormaps/reds.glsl +20 -0
  186. vispy/glsl/colormaps/spring.glsl +20 -0
  187. vispy/glsl/colormaps/summer.glsl +20 -0
  188. vispy/glsl/colormaps/user.glsl +22 -0
  189. vispy/glsl/colormaps/util.glsl +41 -0
  190. vispy/glsl/colormaps/wheel.glsl +21 -0
  191. vispy/glsl/colormaps/winter.glsl +20 -0
  192. vispy/glsl/lines/agg.frag +320 -0
  193. vispy/glsl/lines/agg.vert +241 -0
  194. vispy/glsl/markers/arrow.glsl +12 -0
  195. vispy/glsl/markers/asterisk.glsl +16 -0
  196. vispy/glsl/markers/chevron.glsl +14 -0
  197. vispy/glsl/markers/clover.glsl +20 -0
  198. vispy/glsl/markers/club.glsl +31 -0
  199. vispy/glsl/markers/cross.glsl +17 -0
  200. vispy/glsl/markers/diamond.glsl +12 -0
  201. vispy/glsl/markers/disc.glsl +9 -0
  202. vispy/glsl/markers/ellipse.glsl +67 -0
  203. vispy/glsl/markers/hbar.glsl +9 -0
  204. vispy/glsl/markers/heart.glsl +15 -0
  205. vispy/glsl/markers/infinity.glsl +15 -0
  206. vispy/glsl/markers/marker-sdf.frag +74 -0
  207. vispy/glsl/markers/marker-sdf.vert +41 -0
  208. vispy/glsl/markers/marker.frag +36 -0
  209. vispy/glsl/markers/marker.vert +46 -0
  210. vispy/glsl/markers/markers.glsl +24 -0
  211. vispy/glsl/markers/pin.glsl +18 -0
  212. vispy/glsl/markers/ring.glsl +11 -0
  213. vispy/glsl/markers/spade.glsl +28 -0
  214. vispy/glsl/markers/square.glsl +10 -0
  215. vispy/glsl/markers/tag.glsl +11 -0
  216. vispy/glsl/markers/triangle.glsl +14 -0
  217. vispy/glsl/markers/vbar.glsl +9 -0
  218. vispy/glsl/math/circle-through-2-points.glsl +30 -0
  219. vispy/glsl/math/constants.glsl +48 -0
  220. vispy/glsl/math/double.glsl +114 -0
  221. vispy/glsl/math/functions.glsl +20 -0
  222. vispy/glsl/math/point-to-line-distance.glsl +31 -0
  223. vispy/glsl/math/point-to-line-projection.glsl +29 -0
  224. vispy/glsl/math/signed-line-distance.glsl +27 -0
  225. vispy/glsl/math/signed-segment-distance.glsl +30 -0
  226. vispy/glsl/misc/regular-grid.frag +244 -0
  227. vispy/glsl/misc/spatial-filters.frag +1407 -0
  228. vispy/glsl/misc/viewport-NDC.glsl +20 -0
  229. vispy/glsl/transforms/azimuthal-equal-area.glsl +32 -0
  230. vispy/glsl/transforms/azimuthal-equidistant.glsl +38 -0
  231. vispy/glsl/transforms/hammer.glsl +44 -0
  232. vispy/glsl/transforms/identity.glsl +6 -0
  233. vispy/glsl/transforms/identity_forward.glsl +23 -0
  234. vispy/glsl/transforms/identity_inverse.glsl +23 -0
  235. vispy/glsl/transforms/linear-scale.glsl +127 -0
  236. vispy/glsl/transforms/log-scale.glsl +126 -0
  237. vispy/glsl/transforms/mercator-transverse-forward.glsl +40 -0
  238. vispy/glsl/transforms/mercator-transverse-inverse.glsl +40 -0
  239. vispy/glsl/transforms/panzoom.glsl +10 -0
  240. vispy/glsl/transforms/polar.glsl +41 -0
  241. vispy/glsl/transforms/position.glsl +44 -0
  242. vispy/glsl/transforms/power-scale.glsl +139 -0
  243. vispy/glsl/transforms/projection.glsl +7 -0
  244. vispy/glsl/transforms/pvm.glsl +13 -0
  245. vispy/glsl/transforms/rotate.glsl +45 -0
  246. vispy/glsl/transforms/trackball.glsl +15 -0
  247. vispy/glsl/transforms/translate.glsl +35 -0
  248. vispy/glsl/transforms/transverse_mercator.glsl +38 -0
  249. vispy/glsl/transforms/viewport-clipping.glsl +14 -0
  250. vispy/glsl/transforms/viewport-transform.glsl +16 -0
  251. vispy/glsl/transforms/viewport.glsl +50 -0
  252. vispy/glsl/transforms/x.glsl +24 -0
  253. vispy/glsl/transforms/y.glsl +19 -0
  254. vispy/glsl/transforms/z.glsl +14 -0
  255. vispy/io/__init__.py +20 -0
  256. vispy/io/_data/spatial-filters.npy +0 -0
  257. vispy/io/datasets.py +94 -0
  258. vispy/io/image.py +231 -0
  259. vispy/io/mesh.py +122 -0
  260. vispy/io/stl.py +167 -0
  261. vispy/io/tests/__init__.py +0 -0
  262. vispy/io/tests/test_image.py +47 -0
  263. vispy/io/tests/test_io.py +121 -0
  264. vispy/io/wavefront.py +350 -0
  265. vispy/plot/__init__.py +36 -0
  266. vispy/plot/fig.py +58 -0
  267. vispy/plot/plotwidget.py +522 -0
  268. vispy/plot/tests/__init__.py +0 -0
  269. vispy/plot/tests/test_plot.py +46 -0
  270. vispy/scene/__init__.py +43 -0
  271. vispy/scene/cameras/__init__.py +27 -0
  272. vispy/scene/cameras/_base.py +38 -0
  273. vispy/scene/cameras/arcball.py +105 -0
  274. vispy/scene/cameras/base_camera.py +551 -0
  275. vispy/scene/cameras/fly.py +474 -0
  276. vispy/scene/cameras/magnify.py +163 -0
  277. vispy/scene/cameras/panzoom.py +311 -0
  278. vispy/scene/cameras/perspective.py +338 -0
  279. vispy/scene/cameras/tests/__init__.py +0 -0
  280. vispy/scene/cameras/tests/test_cameras.py +27 -0
  281. vispy/scene/cameras/tests/test_link.py +53 -0
  282. vispy/scene/cameras/tests/test_perspective.py +122 -0
  283. vispy/scene/cameras/turntable.py +183 -0
  284. vispy/scene/canvas.py +639 -0
  285. vispy/scene/events.py +85 -0
  286. vispy/scene/node.py +644 -0
  287. vispy/scene/subscene.py +20 -0
  288. vispy/scene/tests/__init__.py +0 -0
  289. vispy/scene/tests/test_canvas.py +119 -0
  290. vispy/scene/tests/test_node.py +142 -0
  291. vispy/scene/tests/test_visuals.py +141 -0
  292. vispy/scene/visuals.py +276 -0
  293. vispy/scene/widgets/__init__.py +18 -0
  294. vispy/scene/widgets/anchor.py +25 -0
  295. vispy/scene/widgets/axis.py +88 -0
  296. vispy/scene/widgets/colorbar.py +176 -0
  297. vispy/scene/widgets/console.py +351 -0
  298. vispy/scene/widgets/grid.py +509 -0
  299. vispy/scene/widgets/label.py +50 -0
  300. vispy/scene/widgets/tests/__init__.py +0 -0
  301. vispy/scene/widgets/tests/test_colorbar.py +47 -0
  302. vispy/scene/widgets/viewbox.py +199 -0
  303. vispy/scene/widgets/widget.py +478 -0
  304. vispy/testing/__init__.py +51 -0
  305. vispy/testing/_runners.py +448 -0
  306. vispy/testing/_testing.py +416 -0
  307. vispy/testing/image_tester.py +494 -0
  308. vispy/testing/rendered_array_tester.py +85 -0
  309. vispy/testing/tests/__init__.py +0 -0
  310. vispy/testing/tests/test_testing.py +20 -0
  311. vispy/util/__init__.py +32 -0
  312. vispy/util/bunch.py +15 -0
  313. vispy/util/check_environment.py +57 -0
  314. vispy/util/config.py +490 -0
  315. vispy/util/dpi/__init__.py +19 -0
  316. vispy/util/dpi/_linux.py +69 -0
  317. vispy/util/dpi/_quartz.py +26 -0
  318. vispy/util/dpi/_win32.py +34 -0
  319. vispy/util/dpi/tests/__init__.py +0 -0
  320. vispy/util/dpi/tests/test_dpi.py +16 -0
  321. vispy/util/eq.py +41 -0
  322. vispy/util/event.py +774 -0
  323. vispy/util/fetching.py +276 -0
  324. vispy/util/filter.py +44 -0
  325. vispy/util/fonts/__init__.py +14 -0
  326. vispy/util/fonts/_freetype.py +73 -0
  327. vispy/util/fonts/_quartz.py +192 -0
  328. vispy/util/fonts/_triage.py +36 -0
  329. vispy/util/fonts/_vispy_fonts.py +20 -0
  330. vispy/util/fonts/_win32.py +105 -0
  331. vispy/util/fonts/data/OpenSans-Bold.ttf +0 -0
  332. vispy/util/fonts/data/OpenSans-BoldItalic.ttf +0 -0
  333. vispy/util/fonts/data/OpenSans-Italic.ttf +0 -0
  334. vispy/util/fonts/data/OpenSans-Regular.ttf +0 -0
  335. vispy/util/fonts/tests/__init__.py +0 -0
  336. vispy/util/fonts/tests/test_font.py +45 -0
  337. vispy/util/fourier.py +69 -0
  338. vispy/util/frozen.py +25 -0
  339. vispy/util/gallery_scraper.py +268 -0
  340. vispy/util/keys.py +91 -0
  341. vispy/util/logs.py +358 -0
  342. vispy/util/osmesa_gl.py +17 -0
  343. vispy/util/profiler.py +135 -0
  344. vispy/util/ptime.py +16 -0
  345. vispy/util/quaternion.py +229 -0
  346. vispy/util/svg/__init__.py +18 -0
  347. vispy/util/svg/base.py +20 -0
  348. vispy/util/svg/color.py +219 -0
  349. vispy/util/svg/element.py +51 -0
  350. vispy/util/svg/geometry.py +478 -0
  351. vispy/util/svg/group.py +66 -0
  352. vispy/util/svg/length.py +81 -0
  353. vispy/util/svg/number.py +25 -0
  354. vispy/util/svg/path.py +332 -0
  355. vispy/util/svg/shapes.py +57 -0
  356. vispy/util/svg/style.py +59 -0
  357. vispy/util/svg/svg.py +40 -0
  358. vispy/util/svg/transform.py +223 -0
  359. vispy/util/svg/transformable.py +28 -0
  360. vispy/util/svg/viewport.py +73 -0
  361. vispy/util/tests/__init__.py +0 -0
  362. vispy/util/tests/test_config.py +58 -0
  363. vispy/util/tests/test_docstring_parameters.py +123 -0
  364. vispy/util/tests/test_emitter_group.py +262 -0
  365. vispy/util/tests/test_event_emitter.py +743 -0
  366. vispy/util/tests/test_fourier.py +35 -0
  367. vispy/util/tests/test_gallery_scraper.py +112 -0
  368. vispy/util/tests/test_import.py +127 -0
  369. vispy/util/tests/test_key.py +22 -0
  370. vispy/util/tests/test_logging.py +45 -0
  371. vispy/util/tests/test_run.py +14 -0
  372. vispy/util/tests/test_transforms.py +42 -0
  373. vispy/util/tests/test_vispy.py +48 -0
  374. vispy/util/transforms.py +201 -0
  375. vispy/util/wrappers.py +155 -0
  376. vispy/version.py +21 -0
  377. vispy/visuals/__init__.py +50 -0
  378. vispy/visuals/_scalable_textures.py +487 -0
  379. vispy/visuals/axis.py +678 -0
  380. vispy/visuals/border.py +208 -0
  381. vispy/visuals/box.py +79 -0
  382. vispy/visuals/collections/__init__.py +30 -0
  383. vispy/visuals/collections/agg_fast_path_collection.py +219 -0
  384. vispy/visuals/collections/agg_path_collection.py +197 -0
  385. vispy/visuals/collections/agg_point_collection.py +52 -0
  386. vispy/visuals/collections/agg_segment_collection.py +142 -0
  387. vispy/visuals/collections/array_list.py +401 -0
  388. vispy/visuals/collections/base_collection.py +482 -0
  389. vispy/visuals/collections/collection.py +253 -0
  390. vispy/visuals/collections/path_collection.py +23 -0
  391. vispy/visuals/collections/point_collection.py +19 -0
  392. vispy/visuals/collections/polygon_collection.py +25 -0
  393. vispy/visuals/collections/raw_path_collection.py +119 -0
  394. vispy/visuals/collections/raw_point_collection.py +113 -0
  395. vispy/visuals/collections/raw_polygon_collection.py +77 -0
  396. vispy/visuals/collections/raw_segment_collection.py +112 -0
  397. vispy/visuals/collections/raw_triangle_collection.py +78 -0
  398. vispy/visuals/collections/segment_collection.py +19 -0
  399. vispy/visuals/collections/triangle_collection.py +16 -0
  400. vispy/visuals/collections/util.py +168 -0
  401. vispy/visuals/colorbar.py +699 -0
  402. vispy/visuals/cube.py +41 -0
  403. vispy/visuals/ellipse.py +162 -0
  404. vispy/visuals/filters/__init__.py +10 -0
  405. vispy/visuals/filters/base_filter.py +242 -0
  406. vispy/visuals/filters/clipper.py +60 -0
  407. vispy/visuals/filters/clipping_planes.py +122 -0
  408. vispy/visuals/filters/color.py +181 -0
  409. vispy/visuals/filters/markers.py +28 -0
  410. vispy/visuals/filters/mesh.py +801 -0
  411. vispy/visuals/filters/picking.py +60 -0
  412. vispy/visuals/filters/tests/__init__.py +3 -0
  413. vispy/visuals/filters/tests/test_primitive_picking_filters.py +70 -0
  414. vispy/visuals/filters/tests/test_wireframe_filter.py +16 -0
  415. vispy/visuals/glsl/__init__.py +1 -0
  416. vispy/visuals/glsl/antialiasing.py +133 -0
  417. vispy/visuals/glsl/color.py +63 -0
  418. vispy/visuals/graphs/__init__.py +1 -0
  419. vispy/visuals/graphs/graph.py +240 -0
  420. vispy/visuals/graphs/layouts/__init__.py +55 -0
  421. vispy/visuals/graphs/layouts/circular.py +49 -0
  422. vispy/visuals/graphs/layouts/force_directed.py +211 -0
  423. vispy/visuals/graphs/layouts/networkx_layout.py +87 -0
  424. vispy/visuals/graphs/layouts/random.py +52 -0
  425. vispy/visuals/graphs/tests/__init__.py +1 -0
  426. vispy/visuals/graphs/tests/test_layouts.py +139 -0
  427. vispy/visuals/graphs/tests/test_networkx_layout.py +47 -0
  428. vispy/visuals/graphs/util.py +120 -0
  429. vispy/visuals/gridlines.py +161 -0
  430. vispy/visuals/gridmesh.py +98 -0
  431. vispy/visuals/histogram.py +58 -0
  432. vispy/visuals/image.py +701 -0
  433. vispy/visuals/image_complex.py +130 -0
  434. vispy/visuals/infinite_line.py +199 -0
  435. vispy/visuals/instanced_mesh.py +152 -0
  436. vispy/visuals/isocurve.py +213 -0
  437. vispy/visuals/isoline.py +241 -0
  438. vispy/visuals/isosurface.py +113 -0
  439. vispy/visuals/line/__init__.py +6 -0
  440. vispy/visuals/line/arrow.py +289 -0
  441. vispy/visuals/line/dash_atlas.py +90 -0
  442. vispy/visuals/line/line.py +545 -0
  443. vispy/visuals/line_plot.py +135 -0
  444. vispy/visuals/linear_region.py +199 -0
  445. vispy/visuals/markers.py +819 -0
  446. vispy/visuals/mesh.py +373 -0
  447. vispy/visuals/mesh_normals.py +159 -0
  448. vispy/visuals/plane.py +54 -0
  449. vispy/visuals/polygon.py +145 -0
  450. vispy/visuals/rectangle.py +196 -0
  451. vispy/visuals/regular_polygon.py +56 -0
  452. vispy/visuals/scrolling_lines.py +197 -0
  453. vispy/visuals/shaders/__init__.py +17 -0
  454. vispy/visuals/shaders/compiler.py +206 -0
  455. vispy/visuals/shaders/expression.py +99 -0
  456. vispy/visuals/shaders/function.py +788 -0
  457. vispy/visuals/shaders/multiprogram.py +145 -0
  458. vispy/visuals/shaders/parsing.py +140 -0
  459. vispy/visuals/shaders/program.py +161 -0
  460. vispy/visuals/shaders/shader_object.py +162 -0
  461. vispy/visuals/shaders/tests/__init__.py +0 -0
  462. vispy/visuals/shaders/tests/test_function.py +486 -0
  463. vispy/visuals/shaders/tests/test_multiprogram.py +78 -0
  464. vispy/visuals/shaders/tests/test_parsing.py +57 -0
  465. vispy/visuals/shaders/variable.py +272 -0
  466. vispy/visuals/spectrogram.py +169 -0
  467. vispy/visuals/sphere.py +80 -0
  468. vispy/visuals/surface_plot.py +192 -0
  469. vispy/visuals/tests/__init__.py +0 -0
  470. vispy/visuals/tests/test_arrows.py +109 -0
  471. vispy/visuals/tests/test_axis.py +120 -0
  472. vispy/visuals/tests/test_collections.py +15 -0
  473. vispy/visuals/tests/test_colorbar.py +179 -0
  474. vispy/visuals/tests/test_colormap.py +97 -0
  475. vispy/visuals/tests/test_ellipse.py +122 -0
  476. vispy/visuals/tests/test_gridlines.py +30 -0
  477. vispy/visuals/tests/test_histogram.py +24 -0
  478. vispy/visuals/tests/test_image.py +392 -0
  479. vispy/visuals/tests/test_image_complex.py +36 -0
  480. vispy/visuals/tests/test_infinite_line.py +53 -0
  481. vispy/visuals/tests/test_instanced_mesh.py +50 -0
  482. vispy/visuals/tests/test_isosurface.py +22 -0
  483. vispy/visuals/tests/test_linear_region.py +152 -0
  484. vispy/visuals/tests/test_markers.py +54 -0
  485. vispy/visuals/tests/test_mesh.py +261 -0
  486. vispy/visuals/tests/test_mesh_normals.py +218 -0
  487. vispy/visuals/tests/test_polygon.py +112 -0
  488. vispy/visuals/tests/test_rectangle.py +163 -0
  489. vispy/visuals/tests/test_regular_polygon.py +111 -0
  490. vispy/visuals/tests/test_scalable_textures.py +196 -0
  491. vispy/visuals/tests/test_sdf.py +73 -0
  492. vispy/visuals/tests/test_spectrogram.py +42 -0
  493. vispy/visuals/tests/test_surface_plot.py +57 -0
  494. vispy/visuals/tests/test_text.py +95 -0
  495. vispy/visuals/tests/test_volume.py +542 -0
  496. vispy/visuals/tests/test_windbarb.py +33 -0
  497. vispy/visuals/text/__init__.py +7 -0
  498. vispy/visuals/text/_sdf_cpu.cpython-312-darwin.so +0 -0
  499. vispy/visuals/text/_sdf_cpu.pyx +112 -0
  500. vispy/visuals/text/_sdf_gpu.py +316 -0
  501. vispy/visuals/text/text.py +675 -0
  502. vispy/visuals/transforms/__init__.py +34 -0
  503. vispy/visuals/transforms/_util.py +191 -0
  504. vispy/visuals/transforms/base_transform.py +233 -0
  505. vispy/visuals/transforms/chain.py +300 -0
  506. vispy/visuals/transforms/interactive.py +98 -0
  507. vispy/visuals/transforms/linear.py +564 -0
  508. vispy/visuals/transforms/nonlinear.py +398 -0
  509. vispy/visuals/transforms/tests/__init__.py +0 -0
  510. vispy/visuals/transforms/tests/test_transforms.py +243 -0
  511. vispy/visuals/transforms/transform_system.py +339 -0
  512. vispy/visuals/tube.py +173 -0
  513. vispy/visuals/visual.py +923 -0
  514. vispy/visuals/volume.py +1366 -0
  515. vispy/visuals/windbarb.py +291 -0
  516. vispy/visuals/xyz_axis.py +34 -0
  517. vispy-0.15.0.dist-info/METADATA +243 -0
  518. vispy-0.15.0.dist-info/RECORD +521 -0
  519. vispy-0.15.0.dist-info/WHEEL +6 -0
  520. vispy-0.15.0.dist-info/licenses/LICENSE.txt +36 -0
  521. 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
+ }