vispy 0.14.0__cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.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 (519) 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 +968 -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 +1134 -0
  45. vispy/color/tests/__init__.py +0 -0
  46. vispy/color/tests/test_color.py +352 -0
  47. vispy/conftest.py +12 -0
  48. vispy/ext/__init__.py +0 -0
  49. vispy/ext/cocoapy.py +1542 -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 +134 -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 +698 -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 +506 -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 +566 -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 +1816 -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 +1045 -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 +106 -0
  274. vispy/scene/cameras/base_camera.py +538 -0
  275. vispy/scene/cameras/fly.py +474 -0
  276. vispy/scene/cameras/magnify.py +163 -0
  277. vispy/scene/cameras/panzoom.py +308 -0
  278. vispy/scene/cameras/perspective.py +333 -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 +173 -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 +446 -0
  306. vispy/testing/_testing.py +416 -0
  307. vispy/testing/image_tester.py +473 -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 +17 -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 +4 -0
  377. vispy/visuals/__init__.py +50 -0
  378. vispy/visuals/_scalable_textures.py +485 -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 +163 -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 +796 -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 +105 -0
  430. vispy/visuals/gridmesh.py +98 -0
  431. vispy/visuals/histogram.py +58 -0
  432. vispy/visuals/image.py +688 -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 +810 -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_histogram.py +24 -0
  477. vispy/visuals/tests/test_image.py +390 -0
  478. vispy/visuals/tests/test_image_complex.py +36 -0
  479. vispy/visuals/tests/test_infinite_line.py +53 -0
  480. vispy/visuals/tests/test_instanced_mesh.py +50 -0
  481. vispy/visuals/tests/test_isosurface.py +22 -0
  482. vispy/visuals/tests/test_linear_region.py +152 -0
  483. vispy/visuals/tests/test_markers.py +54 -0
  484. vispy/visuals/tests/test_mesh.py +261 -0
  485. vispy/visuals/tests/test_mesh_normals.py +218 -0
  486. vispy/visuals/tests/test_polygon.py +112 -0
  487. vispy/visuals/tests/test_rectangle.py +163 -0
  488. vispy/visuals/tests/test_regular_polygon.py +111 -0
  489. vispy/visuals/tests/test_scalable_textures.py +180 -0
  490. vispy/visuals/tests/test_sdf.py +73 -0
  491. vispy/visuals/tests/test_spectrogram.py +42 -0
  492. vispy/visuals/tests/test_text.py +95 -0
  493. vispy/visuals/tests/test_volume.py +542 -0
  494. vispy/visuals/tests/test_windbarb.py +33 -0
  495. vispy/visuals/text/__init__.py +7 -0
  496. vispy/visuals/text/_sdf_cpu.cpython-312-aarch64-linux-gnu.so +0 -0
  497. vispy/visuals/text/_sdf_cpu.pyx +110 -0
  498. vispy/visuals/text/_sdf_gpu.py +316 -0
  499. vispy/visuals/text/text.py +675 -0
  500. vispy/visuals/transforms/__init__.py +34 -0
  501. vispy/visuals/transforms/_util.py +191 -0
  502. vispy/visuals/transforms/base_transform.py +233 -0
  503. vispy/visuals/transforms/chain.py +300 -0
  504. vispy/visuals/transforms/interactive.py +98 -0
  505. vispy/visuals/transforms/linear.py +564 -0
  506. vispy/visuals/transforms/nonlinear.py +398 -0
  507. vispy/visuals/transforms/tests/__init__.py +0 -0
  508. vispy/visuals/transforms/tests/test_transforms.py +243 -0
  509. vispy/visuals/transforms/transform_system.py +339 -0
  510. vispy/visuals/tube.py +173 -0
  511. vispy/visuals/visual.py +923 -0
  512. vispy/visuals/volume.py +1335 -0
  513. vispy/visuals/windbarb.py +291 -0
  514. vispy/visuals/xyz_axis.py +34 -0
  515. vispy-0.14.0.dist-info/LICENSE.txt +36 -0
  516. vispy-0.14.0.dist-info/METADATA +218 -0
  517. vispy-0.14.0.dist-info/RECORD +519 -0
  518. vispy-0.14.0.dist-info/WHEEL +6 -0
  519. vispy-0.14.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,253 @@
1
+ # -*- coding: utf-8 -*-
2
+ # -----------------------------------------------------------------------------
3
+ # Copyright (c) 2014, Nicolas P. Rougier
4
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
5
+ # -----------------------------------------------------------------------------
6
+ """
7
+ A collection is a container for several items having the same data
8
+ structure (dtype). Each data type can be declared as local (it specific to a
9
+ vertex), shared (it is shared among an item vertices) or global (it is shared
10
+ by all vertices). It is based on the BaseCollection but offers a more intuitive
11
+ interface.
12
+ """
13
+
14
+ import numpy as np
15
+ from ... import gloo
16
+ from . util import fetchcode
17
+ from . base_collection import BaseCollection
18
+ from ..shaders import ModularProgram
19
+ from ...util.event import EventEmitter
20
+
21
+
22
+ class Collection(BaseCollection):
23
+ """
24
+ A collection is a container for several items having the same data
25
+ structure (dtype). Each data type can be declared as local (it is specific
26
+ to a vertex), shared (it is shared among item vertices) or global (it is
27
+ shared by all items). It is based on the BaseCollection but offers a more
28
+ intuitive interface.
29
+
30
+ Parameters
31
+ ----------
32
+ dtype: list
33
+ Data individual types as (name, dtype, scope, default)
34
+
35
+ itype: np.dtype or None
36
+ Indices data type
37
+
38
+ mode : GL_ENUM
39
+ GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP,
40
+ GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN
41
+
42
+ vertex: str or tuple of str
43
+ Vertex shader to use to draw this collection
44
+
45
+ fragment: str or tuple of str
46
+ Fragment shader to use to draw this collection
47
+
48
+ kwargs: str
49
+ Scope can also be specified using keyword argument,
50
+ where parameter name must be one of the dtype.
51
+ """
52
+
53
+ _gtypes = {('float32', 1): "float",
54
+ ('float32', 2): "vec2",
55
+ ('float32', 3): "vec3",
56
+ ('float32', 4): "vec4",
57
+ ('int32', 1): "int",
58
+ ('int32', 2): "ivec2",
59
+ ('int32', 3): "ivec3",
60
+ ('int32', 4): "ivec4"}
61
+
62
+ def __init__(self, dtype, itype, mode, vertex, fragment, program=None,
63
+ **kwargs):
64
+ """
65
+ """
66
+
67
+ self._uniforms = {}
68
+ self._attributes = {}
69
+ self._varyings = {}
70
+ self._mode = mode
71
+ vtype = []
72
+ utype = []
73
+
74
+ self.update = EventEmitter(source=self, type='collection_update')
75
+
76
+ # Build vtype and utype according to parameters
77
+ declarations = {"uniforms": "",
78
+ "attributes": "",
79
+ "varyings": ""}
80
+ defaults = {}
81
+ for item in dtype:
82
+ name, (basetype, count), scope, default = item
83
+ basetype = np.dtype(basetype).name
84
+ if scope[0] == "!":
85
+ scope = scope[1:]
86
+ else:
87
+ scope = kwargs.pop(name, scope)
88
+ defaults[name] = default
89
+ gtype = Collection._gtypes[(basetype, count)]
90
+ if scope == "local":
91
+ # numpy dtypes with size 1 are ambiguous, only add size if it is greater than 1
92
+ vtype.append((name, basetype, count) if count != 1 else (name, basetype))
93
+ declarations[
94
+ "attributes"] += "attribute %s %s;\n" % (gtype, name)
95
+ elif scope == "shared":
96
+ # numpy dtypes with size 1 are ambiguous, only add size if it is greater than 1
97
+ utype.append((name, basetype, count) if count != 1 else (name, basetype))
98
+ declarations["varyings"] += "varying %s %s;\n" % (gtype, name)
99
+ else:
100
+ declarations["uniforms"] += "uniform %s %s;\n" % (gtype, name)
101
+ self._uniforms[name] = None
102
+
103
+ if len(kwargs) > 0:
104
+ raise NameError("Invalid keyword argument(s): %s" %
105
+ list(kwargs.keys()))
106
+
107
+ vtype = np.dtype(vtype)
108
+ itype = np.dtype(itype) if itype else None
109
+ utype = np.dtype(utype) if utype else None
110
+
111
+ BaseCollection.__init__(self, vtype=vtype, utype=utype, itype=itype)
112
+ self._declarations = declarations
113
+ self._defaults = defaults
114
+
115
+ # Build program (once base collection is built)
116
+ saved = vertex
117
+ vertex = ""
118
+
119
+ if self.utype is not None:
120
+ vertex += fetchcode(self.utype) + vertex
121
+ else:
122
+ vertex += "void fetch_uniforms(void) { }\n" + vertex
123
+ vertex += self._declarations["uniforms"]
124
+ vertex += self._declarations["attributes"]
125
+ vertex += saved
126
+
127
+ self._vertex = vertex
128
+ self._fragment = fragment
129
+
130
+ if program is None:
131
+ program = ModularProgram(vertex, fragment)
132
+ else:
133
+ program.vert = vertex
134
+ program.frag = fragment
135
+ if hasattr(program, 'changed'):
136
+ program.changed.connect(self.update)
137
+ self._programs.append(program)
138
+
139
+ # Initialize uniforms
140
+ for name in self._uniforms.keys():
141
+ self._uniforms[name] = self._defaults.get(name)
142
+ program[name] = self._uniforms[name]
143
+
144
+ def view(self, transform, viewport=None):
145
+ """Return a view on the collection using provided transform"""
146
+ return CollectionView(self, transform, viewport)
147
+
148
+ # program = gloo.Program(self._vertex, self._fragment)
149
+ # if "transform" in program.hooks:
150
+ # program["transform"] = transform
151
+ # if "viewport" in program.hooks:
152
+ # if viewport is not None:
153
+ # program["viewport"] = viewport
154
+ # else:
155
+ # program["viewport"] = Viewport()
156
+ # self._programs.append(program)
157
+ # program.bind(self._vertices_buffer)
158
+ # for name in self._uniforms.keys():
159
+ # program[name] = self._uniforms[name]
160
+ # #if self._uniforms_list is not None:
161
+ # # program["uniforms"] = self._uniforms_texture
162
+ # # program["uniforms_shape"] = self._ushape
163
+
164
+ # # Piggy backing
165
+ # def draw():
166
+ # if self._need_update:
167
+ # self._update()
168
+ # program.bind(self._vertices_buffer)
169
+ # if self._uniforms_list is not None:
170
+ # program["uniforms"] = self._uniforms_texture
171
+ # program["uniforms_shape"] = self._ushape
172
+
173
+ # if self._indices_list is not None:
174
+ # Program.draw(program, self._mode, self._indices_buffer)
175
+ # else:
176
+ # Program.draw(program, self._mode)
177
+
178
+ # program.draw = draw
179
+ # return program
180
+
181
+ def __getitem__(self, key):
182
+
183
+ program = self._programs[0]
184
+ for name, (storage, _, _) in program._code_variables.items():
185
+ if name == key and storage == 'uniform':
186
+ return program[key]
187
+ return BaseCollection.__getitem__(self, key)
188
+
189
+ def __setitem__(self, key, value):
190
+ try:
191
+ BaseCollection.__setitem__(self, key, value)
192
+ except IndexError:
193
+ for program in self._programs:
194
+ program[key] = value
195
+
196
+ def draw(self, mode=None):
197
+ """Draw collection"""
198
+ if self._need_update:
199
+ self._update()
200
+
201
+ program = self._programs[0]
202
+
203
+ mode = mode or self._mode
204
+ if self._indices_list is not None:
205
+ program.draw(mode, self._indices_buffer)
206
+ else:
207
+ program.draw(mode)
208
+
209
+
210
+ class CollectionView(object):
211
+
212
+ def __init__(self, collection, transform=None, viewport=None):
213
+
214
+ vertex = collection._vertex
215
+ fragment = collection._fragment
216
+ program = gloo.Program(vertex, fragment)
217
+
218
+ # if "transform" in program.hooks and transform is not None:
219
+ # program["transform"] = transform
220
+ # if "viewport" in program.hooks and viewport is not None:
221
+ # program["viewport"] = viewport
222
+
223
+ program.bind(collection._vertices_buffer)
224
+ for name in collection._uniforms.keys():
225
+ program[name] = collection._uniforms[name]
226
+
227
+ collection._programs.append(program)
228
+ self._program = program
229
+ self._collection = collection
230
+
231
+ def __getitem__(self, key):
232
+ return self._program[key]
233
+
234
+ def __setitem__(self, key, value):
235
+ self._program[key] = value
236
+
237
+ def draw(self):
238
+
239
+ program = self._program
240
+ collection = self._collection
241
+ mode = collection._mode
242
+
243
+ if collection._need_update:
244
+ collection._update()
245
+ # self._program.bind(self._vertices_buffer)
246
+ if collection._uniforms_list is not None:
247
+ program["uniforms"] = collection._uniforms_texture
248
+ program["uniforms_shape"] = collection._ushape
249
+
250
+ if collection._indices_list is not None:
251
+ program.draw(mode, collection._indices_buffer)
252
+ else:
253
+ program.draw(mode)
@@ -0,0 +1,23 @@
1
+ # -*- coding: utf-8 -*-
2
+ # -----------------------------------------------------------------------------
3
+ # Copyright (c) 2014, Nicolas P. Rougier
4
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
5
+ # -----------------------------------------------------------------------------
6
+ from . raw_path_collection import RawPathCollection
7
+ from . agg_path_collection import AggPathCollection
8
+ from . agg_fast_path_collection import AggFastPathCollection
9
+
10
+
11
+ def PathCollection(mode="agg", *args, **kwargs):
12
+ """
13
+ mode: string
14
+ - "raw" (speed: fastest, size: small, output: ugly, no dash,
15
+ no thickness)
16
+ - "agg" (speed: medium, size: medium output: nice, some flaws, no dash)
17
+ - "agg+" (speed: slow, size: big, output: perfect, no dash)
18
+ """
19
+ if mode == "raw":
20
+ return RawPathCollection(*args, **kwargs)
21
+ elif mode == "agg+":
22
+ return AggPathCollection(*args, **kwargs)
23
+ return AggFastPathCollection(*args, **kwargs)
@@ -0,0 +1,19 @@
1
+ # -*- coding: utf-8 -*-
2
+ # -----------------------------------------------------------------------------
3
+ # Copyright (c) 2014, Nicolas P. Rougier
4
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
5
+ # -----------------------------------------------------------------------------
6
+
7
+ from . raw_point_collection import RawPointCollection
8
+ from . agg_point_collection import AggPointCollection
9
+
10
+
11
+ def PointCollection(mode="raw", *args, **kwargs):
12
+ """
13
+ mode: string
14
+ - "raw" (speed: fastest, size: small, output: ugly)
15
+ - "agg" (speed: fast, size: small, output: beautiful)
16
+ """
17
+ if mode == "raw":
18
+ return RawPointCollection(*args, **kwargs)
19
+ return AggPointCollection(*args, **kwargs)
@@ -0,0 +1,25 @@
1
+ # -*- coding: utf-8 -*-
2
+ # -----------------------------------------------------------------------------
3
+ # Copyright (c) 2014, Nicolas P. Rougier
4
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
5
+ # -----------------------------------------------------------------------------
6
+ """ """
7
+ from . raw_polygon_collection import RawPolygonCollection
8
+ # from . agg_polygon_collection import AggPolygonCollection
9
+ # from . agg_fast_polygon_collection import AggPolygonCollection
10
+
11
+
12
+ def PolygonCollection(mode="raw", *args, **kwargs):
13
+ """
14
+ mode: string
15
+ - "raw" (speed: fastest, size: small, output: ugly, no dash, no
16
+ thickness)
17
+ - "agg" (speed: medium, size: medium output: nice, some flaws, no
18
+ dash)
19
+ - "agg+" (speed: slow, size: big, output: perfect, no dash)
20
+ """
21
+ # if mode == "raw":
22
+ return RawPolygonCollection(*args, **kwargs)
23
+ # elif mode == "agg":
24
+ # return AggFastPolygonCollection(*args, **kwargs)
25
+ # return AggPolygonCollection(*args, **kwargs)
@@ -0,0 +1,119 @@
1
+ # -*- coding: utf-8 -*-
2
+ # -----------------------------------------------------------------------------
3
+ # Copyright (c) 2014, Nicolas P. Rougier
4
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
5
+ # -----------------------------------------------------------------------------
6
+ import numpy as np
7
+ from ... import glsl
8
+ from . collection import Collection
9
+ from ..transforms import NullTransform
10
+
11
+
12
+ class RawPathCollection(Collection):
13
+
14
+ """
15
+ """
16
+
17
+ def __init__(self, user_dtype=None, transform=None,
18
+ vertex=None, fragment=None, **kwargs):
19
+ """
20
+ Initialize the collection.
21
+
22
+ Parameters
23
+ ----------
24
+ user_dtype: list
25
+ The base dtype can be completed (appended) by the used_dtype. It
26
+ only make sense if user also provide vertex and/or fragment shaders
27
+
28
+ transform : Transform instance
29
+ Used to define the transform(vec4) function
30
+
31
+ vertex: string
32
+ Vertex shader code
33
+
34
+ fragment: string
35
+ Fragment shader code
36
+
37
+ color : string
38
+ 'local', 'shared' or 'global'
39
+ """
40
+ base_dtype = [('position', (np.float32, 3), '!local', (0, 0, 0)),
41
+ ('id', (np.float32, 1), '!local', 0),
42
+ ('color', (np.float32, 4), 'local', (0, 0, 0, 1)),
43
+ ("linewidth", (np.float32, 1), 'global', 1),
44
+ ("viewport", (np.float32, 4), 'global', (0, 0, 512, 512))
45
+ ]
46
+
47
+ dtype = base_dtype
48
+ if user_dtype:
49
+ dtype.extend(user_dtype)
50
+
51
+ if vertex is None:
52
+ vertex = glsl.get('collections/raw-path.vert')
53
+ if transform is None:
54
+ transform = NullTransform()
55
+ self.transform = transform
56
+ if fragment is None:
57
+ fragment = glsl.get('collections/raw-path.frag')
58
+
59
+ vertex = transform + vertex
60
+ Collection.__init__(self, dtype=dtype, itype=None, mode='line_strip',
61
+ vertex=vertex, fragment=fragment, **kwargs)
62
+ self._programs[0].vert['transform'] = self.transform
63
+
64
+ def append(self, P, closed=False, itemsize=None, **kwargs):
65
+ """
66
+ Append a new set of vertices to the collection.
67
+
68
+ For kwargs argument, n is the number of vertices (local) or the number
69
+ of item (shared)
70
+
71
+ Parameters
72
+ ----------
73
+ P : np.array
74
+ Vertices positions of the path(s) to be added
75
+
76
+ closed: bool
77
+ Whether path(s) is/are closed
78
+
79
+ itemsize: int or None
80
+ Size of an individual path
81
+
82
+ color : list, array or 4-tuple
83
+ Path color
84
+ """
85
+ itemsize = itemsize or len(P)
86
+ itemcount = len(P) / itemsize
87
+ P = P.reshape(itemcount, itemsize, 3)
88
+ if closed:
89
+ V = np.empty((itemcount, itemsize + 3), dtype=self.vtype)
90
+ # Apply default values on vertices
91
+ for name in self.vtype.names:
92
+ if name not in ['collection_index', 'position']:
93
+ V[name][1:-2] = kwargs.get(name, self._defaults[name])
94
+ V["position"][:, 1:-2] = P
95
+ V["position"][:, -2] = V["position"][:, 1]
96
+ else:
97
+ V = np.empty((itemcount, itemsize + 2), dtype=self.vtype)
98
+ # Apply default values on vertices
99
+ for name in self.vtype.names:
100
+ if name not in ['collection_index', 'position']:
101
+ V[name][1:-1] = kwargs.get(name, self._defaults[name])
102
+ V["position"][:, 1:-1] = P
103
+ V["id"] = 1
104
+ V[:, 0] = V[:, 1]
105
+ V[:, -1] = V[:, -2]
106
+ V["id"][:, 0] = 0
107
+ V["id"][:, -1] = 0
108
+
109
+ # Uniforms
110
+ if self.utype:
111
+ U = np.zeros(itemcount, dtype=self.utype)
112
+ for name in self.utype.names:
113
+ if name not in ["__unused__"]:
114
+ U[name] = kwargs.get(name, self._defaults[name])
115
+ else:
116
+ U = None
117
+
118
+ Collection.append(self, vertices=V, uniforms=U,
119
+ itemsize=itemsize + 2 + closed)
@@ -0,0 +1,113 @@
1
+ # -*- coding: utf-8 -*-
2
+ # -----------------------------------------------------------------------------
3
+ # Copyright (c) 2014, Nicolas P. Rougier
4
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
5
+ # -----------------------------------------------------------------------------
6
+ """
7
+ Raw Point Collection
8
+
9
+ This collection provides very fast points. Output quality is ugly so it must be
10
+ used at small size only (2/3 pixels). You've been warned.
11
+ """
12
+
13
+ from __future__ import division
14
+
15
+ import numpy as np
16
+ from ... import glsl
17
+ from . collection import Collection
18
+ from ..transforms import NullTransform
19
+
20
+
21
+ class RawPointCollection(Collection):
22
+ """
23
+ Raw Point Collection
24
+
25
+ This collection provides very fast points. Output quality is ugly so it
26
+ must be used at small size only (2/3 pixels). You've been warned.
27
+ """
28
+
29
+ def __init__(self, user_dtype=None, transform=None,
30
+ vertex=None, fragment=None, **kwargs):
31
+ """
32
+ Initialize the collection.
33
+
34
+ Parameters
35
+ ----------
36
+ user_dtype: list
37
+ The base dtype can be completed (appended) by the used_dtype. It
38
+ only make sense if user also provide vertex and/or fragment shaders
39
+
40
+ transform : Transform instance
41
+ Used to define the transform(vec4) function
42
+
43
+ vertex: string
44
+ Vertex shader code
45
+
46
+ fragment: string
47
+ Fragment shader code
48
+
49
+ color : string
50
+ 'local', 'shared' or 'global'
51
+ """
52
+ base_dtype = [('position', (np.float32, 3), "!local", (0, 0, 0)),
53
+ ('size', (np.float32, 1), "global", 3.0),
54
+ ('color', (np.float32, 4), "global", (0, 0, 0, 1))]
55
+
56
+ dtype = base_dtype
57
+ if user_dtype:
58
+ dtype.extend(user_dtype)
59
+
60
+ if vertex is None:
61
+ vertex = glsl.get("collections/raw-point.vert")
62
+ if transform is None:
63
+ transform = NullTransform()
64
+ self.transform = transform
65
+ if fragment is None:
66
+ fragment = glsl.get("collections/raw-point.frag")
67
+
68
+ Collection.__init__(self, dtype=dtype, itype=None, mode="points",
69
+ vertex=vertex, fragment=fragment, **kwargs)
70
+
71
+ # Set hooks if necessary
72
+ program = self._programs[0]
73
+ program.vert['transform'] = self.transform
74
+
75
+ def append(self, P, itemsize=None, **kwargs):
76
+ """
77
+ Append a new set of vertices to the collection.
78
+
79
+ For kwargs argument, n is the number of vertices (local) or the number
80
+ of item (shared)
81
+
82
+ Parameters
83
+ ----------
84
+ P : np.array
85
+ Vertices positions of the points(s) to be added
86
+
87
+ itemsize: int or None
88
+ Size of an individual path
89
+
90
+ color : list, array or 4-tuple
91
+ Path color
92
+ """
93
+ itemsize = itemsize or 1
94
+ itemcount = len(P) // itemsize
95
+
96
+ V = np.empty(len(P), dtype=self.vtype)
97
+
98
+ # Apply default values on vertices
99
+ for name in self.vtype.names:
100
+ if name not in ['position', "collection_index"]:
101
+ V[name] = kwargs.get(name, self._defaults[name])
102
+ V["position"] = P
103
+
104
+ # Uniforms
105
+ if self.utype:
106
+ U = np.zeros(itemcount, dtype=self.utype)
107
+ for name in self.utype.names:
108
+ if name not in ["__unused__"]:
109
+ U[name] = kwargs.get(name, self._defaults[name])
110
+ else:
111
+ U = None
112
+
113
+ Collection.append(self, vertices=V, uniforms=U, itemsize=itemsize)
@@ -0,0 +1,77 @@
1
+ # -*- coding: utf-8 -*-
2
+ # -----------------------------------------------------------------------------
3
+ # Copyright (c) 2014, Nicolas P. Rougier
4
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
5
+ # -----------------------------------------------------------------------------
6
+ import numpy as np
7
+ from ... import glsl
8
+ from . collection import Collection
9
+ from ..transforms import NullTransform
10
+ from ...geometry import triangulate
11
+
12
+
13
+ class RawPolygonCollection(Collection):
14
+
15
+ def __init__(self, user_dtype=None, transform=None,
16
+ vertex=None, fragment=None, **kwargs):
17
+
18
+ base_dtype = [('position', (np.float32, 3), '!local', (0, 0, 0)),
19
+ ('color', (np.float32, 4), 'local', (0, 0, 0, 1))]
20
+
21
+ dtype = base_dtype
22
+ if user_dtype:
23
+ dtype.extend(user_dtype)
24
+
25
+ if vertex is None:
26
+ vertex = glsl.get('collections/raw-triangle.vert')
27
+ if transform is None:
28
+ transform = NullTransform()
29
+ self.transform = transform
30
+ if fragment is None:
31
+ fragment = glsl.get('collections/raw-triangle.frag')
32
+
33
+ Collection.__init__(self, dtype=dtype, itype=np.uint32, # 16 for WebGL
34
+ mode="triangles",
35
+ vertex=vertex, fragment=fragment, **kwargs)
36
+
37
+ # Set hooks if necessary
38
+ program = self._programs[0]
39
+ program.vert['transform'] = self.transform
40
+
41
+ def append(self, points, **kwargs):
42
+ """
43
+ Append a new set of vertices to the collection.
44
+
45
+ For kwargs argument, n is the number of vertices (local) or the number
46
+ of item (shared)
47
+
48
+ Parameters
49
+ ----------
50
+ points : np.array
51
+ Vertices composing the triangles
52
+
53
+ color : list, array or 4-tuple
54
+ Path color
55
+ """
56
+ vertices, indices = triangulate(points)
57
+ itemsize = len(vertices)
58
+ itemcount = 1
59
+
60
+ V = np.empty(itemcount * itemsize, dtype=self.vtype)
61
+ for name in self.vtype.names:
62
+ if name not in ['collection_index', 'position']:
63
+ V[name] = kwargs.get(name, self._defaults[name])
64
+ V["position"] = vertices
65
+
66
+ # Uniforms
67
+ if self.utype:
68
+ U = np.zeros(itemcount, dtype=self.utype)
69
+ for name in self.utype.names:
70
+ if name not in ["__unused__"]:
71
+ U[name] = kwargs.get(name, self._defaults[name])
72
+ else:
73
+ U = None
74
+
75
+ Collection.append(self, vertices=V, uniforms=U,
76
+ indices=np.array(indices).ravel(),
77
+ itemsize=itemsize)