vispy 0.15.0__cp313-cp313-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 (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-313-aarch64-linux-gnu.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,272 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Copyright (c) Vispy Development Team. All Rights Reserved.
3
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
4
+ import numpy as np
5
+ from .shader_object import ShaderObject
6
+
7
+ VARIABLE_TYPES = ('const', 'uniform', 'attribute', 'varying', 'inout')
8
+
9
+
10
+ class Variable(ShaderObject):
11
+ """Representation of global shader variable
12
+
13
+ Parameters
14
+ ----------
15
+ name : str
16
+ the name of the variable. This string can also contain the full
17
+ definition of the variable, e.g. 'uniform vec2 foo'.
18
+ value : {float, int, tuple, GLObject}
19
+ If given, vtype and dtype are determined automatically. If a
20
+ float/int/tuple is given, the variable is a uniform. If a gloo
21
+ object is given that has a glsl_type property, the variable is
22
+ an attribute and
23
+ vtype : {'const', 'uniform', 'attribute', 'varying', 'inout'}
24
+ The type of variable.
25
+ dtype : str
26
+ The data type of the variable, e.g. 'float', 'vec4', 'mat', etc.
27
+ """
28
+
29
+ _vtype_32_conversion = {'in': 'attribute', 'out': 'varying'}
30
+ _vtype_23_conversion = {'attribute': 'in', 'varying': 'out'}
31
+
32
+ def __init__(self, name, value=None, vtype=None, dtype=None):
33
+ super(Variable, self).__init__()
34
+
35
+ # allow full definition in first argument
36
+ if ' ' in name:
37
+ fields = name.split(' ')
38
+ if len(fields) == 3:
39
+ vtype, dtype, name = fields
40
+ elif len(fields) == 4 and fields[0] == 'const':
41
+ vtype, dtype, name, value = fields
42
+ else:
43
+ raise ValueError('Variable specifications given by string must'
44
+ ' be of the form "vtype dtype name" or '
45
+ '"const dtype name value".')
46
+
47
+ if not (isinstance(name, str) or name is None):
48
+ raise TypeError("Variable name must be string or None.")
49
+
50
+ self._state_counter = 0
51
+ self._name = name
52
+ self._vtype = self._vtype_32_conversion.get(vtype, vtype)
53
+ self._dtype = dtype
54
+ self._value = None
55
+
56
+ # If vtype/dtype were given at init, then we will never
57
+ # try to set these values automatically.
58
+ self._type_locked = self._vtype is not None and self._dtype is not None
59
+
60
+ if value is not None:
61
+ self.value = value
62
+
63
+ if self._vtype and self._vtype not in VARIABLE_TYPES:
64
+ raise ValueError('Not a valid vtype: %r' % self._vtype)
65
+
66
+ @property
67
+ def name(self):
68
+ """The name of this variable."""
69
+ return self._name
70
+
71
+ @name.setter
72
+ def name(self, n):
73
+ # Settable mostly to allow automatic setting of varying names
74
+ # See ShaderObject.create()
75
+ if self._name != n:
76
+ self._name = n
77
+ self.changed(code_changed=True)
78
+
79
+ @property
80
+ def vtype(self):
81
+ """The type of variable (const, uniform, attribute, or varying).
82
+
83
+ For in/out variables (GLSL 150+), vtype is 'varying'.
84
+ """
85
+ return self._vtype
86
+
87
+ @property
88
+ def dtype(self):
89
+ """The type of data (float, int, vec, mat, ...)."""
90
+ return self._dtype
91
+
92
+ @property
93
+ def value(self):
94
+ """The value associated with this variable."""
95
+ return self._value
96
+
97
+ @value.setter
98
+ def value(self, value):
99
+ if isinstance(value, (tuple, list)) and 1 < len(value) < 5:
100
+ vtype = 'uniform'
101
+ dtype = 'vec%d' % len(value)
102
+ elif isinstance(value, np.ndarray):
103
+ if value.ndim == 1 and (1 < len(value) < 5):
104
+ vtype = 'uniform'
105
+ dtype = 'vec%d' % len(value)
106
+ elif value.ndim == 2 and value.shape in ((2, 2), (3, 3), (4, 4)):
107
+ vtype = 'uniform'
108
+ dtype = 'mat%d' % value.shape[0]
109
+ else:
110
+ raise ValueError("Cannot make uniform value for %s from array "
111
+ "of shape %s." % (self.name, value.shape))
112
+ elif np.isscalar(value):
113
+ vtype = 'uniform'
114
+ if isinstance(value, (float, np.floating)):
115
+ dtype = 'float'
116
+ elif isinstance(value, (int, np.integer)):
117
+ dtype = 'int'
118
+ else:
119
+ raise TypeError("Unknown data type %r for variable %r" %
120
+ (type(value), self))
121
+ elif getattr(value, 'glsl_type', None) is not None:
122
+ # Note: hasattr() is broken by design--swallows all exceptions!
123
+ vtype, dtype = value.glsl_type
124
+ else:
125
+ raise TypeError("Unknown data type %r for variable %r" %
126
+ (type(value), self))
127
+
128
+ self._value = value
129
+ self._state_counter += 1
130
+
131
+ if self._type_locked:
132
+ if dtype != self._dtype or vtype != self._vtype:
133
+ raise TypeError('Variable is type "%s"; cannot assign value '
134
+ '%r.' % (self.dtype, value))
135
+ return
136
+
137
+ # update vtype/dtype and emit changed event if necessary
138
+ changed = False
139
+ if self._dtype != dtype:
140
+ self._dtype = dtype
141
+ changed = True
142
+ if self._vtype != vtype:
143
+ self._vtype = vtype
144
+ changed = True
145
+ if changed:
146
+ self.changed(code_changed=True, value_changed=True)
147
+
148
+ @property
149
+ def state_id(self):
150
+ """Return a unique ID that changes whenever the state of the Variable
151
+ has changed. This allows ModularProgram to quickly determine whether
152
+ the value has changed since it was last used.
153
+ """
154
+ return id(self), self._state_counter
155
+
156
+ def __repr__(self):
157
+ return ("<%s \"%s %s %s\" at 0x%x>" % (self.__class__.__name__,
158
+ self._vtype, self._dtype,
159
+ self.name, id(self)))
160
+
161
+ def expression(self, names):
162
+ return names[self]
163
+
164
+ def _vtype_for_version(self, version):
165
+ """Return the vtype for this variable, converted based on the GLSL version."""
166
+ vtype = self.vtype
167
+ if version is None or version[0] == 120:
168
+ return self._vtype_32_conversion.get(vtype, vtype)
169
+ else:
170
+ return self._vtype_23_conversion.get(vtype, vtype)
171
+
172
+ def definition(self, names, version, shader):
173
+ if self.vtype is None:
174
+ raise RuntimeError("Variable has no vtype: %r" % self)
175
+ if self.dtype is None:
176
+ raise RuntimeError("Variable has no dtype: %r" % self)
177
+
178
+ name = names[self]
179
+ vtype = self._vtype_for_version(version)
180
+ if vtype == 'const':
181
+ return '%s %s %s = %s;' % (vtype, self.dtype, name, self.value)
182
+ else:
183
+ return '%s %s %s;' % (vtype, self.dtype, name)
184
+
185
+
186
+ class Varying(Variable):
187
+ """Representation of a varying (variables passed from one shader to the
188
+ next).
189
+
190
+ Varyings can inherit their dtype from another Variable, allowing for
191
+ more flexibility in composing shaders.
192
+ """
193
+
194
+ def __init__(self, name, dtype=None):
195
+ self._link = None
196
+ self._src_func = None
197
+ self._dst_func = None
198
+ Variable.__init__(self, name, vtype='varying', dtype=dtype)
199
+
200
+ @property
201
+ def value(self):
202
+ """The value associated with this variable."""
203
+ return self._value
204
+
205
+ @value.setter
206
+ def value(self, value):
207
+ if value is not None:
208
+ raise TypeError("Cannot assign value directly to varying.")
209
+
210
+ @property
211
+ def dtype(self):
212
+ if self._dtype is None:
213
+ if self._link is None:
214
+ return None
215
+ else:
216
+ return self._link.dtype
217
+ else:
218
+ return self._dtype
219
+
220
+ def link(self, var):
221
+ """Link this Varying to another object from which it will derive its
222
+ dtype.
223
+
224
+ This method is used internally when assigning an attribute to
225
+ a varying using syntax ``function[varying] = attr``.
226
+ """
227
+ assert self._dtype is not None or hasattr(var, 'dtype')
228
+ self._link = var
229
+ self.changed()
230
+
231
+ def invar(self, array=False):
232
+ """Return a varying that defines itself using the same name as this,
233
+ but as an `in` variable instead of `out`.
234
+ """
235
+ return InVar(self, array=array)
236
+
237
+
238
+ class InVar(Variable):
239
+ def __init__(self, var, array=False):
240
+ self._var = var
241
+ self._array = array
242
+ Variable.__init__(self, var.name)
243
+
244
+ @property
245
+ def value(self):
246
+ """The value associated with this variable."""
247
+ return self._var.value
248
+
249
+ @value.setter
250
+ def value(self, value):
251
+ if value is not None:
252
+ raise TypeError("Cannot assign value directly to varying.")
253
+
254
+ @property
255
+ def dtype(self):
256
+ return self._var.dtype
257
+
258
+ def definition(self, names, version, shader):
259
+ # inherit name from source variable
260
+ name = names[self._var]
261
+ dtype = self._var.dtype
262
+
263
+ if version[0] <= 120:
264
+ return "varying %s %s;" % (dtype, name)
265
+ else:
266
+ if self._array:
267
+ return "in %s %s[];" % (dtype, name)
268
+ else:
269
+ return "in %s %s;" % (dtype, name)
270
+
271
+ def expression(self, names):
272
+ return names[self._var]
@@ -0,0 +1,169 @@
1
+ # -*- coding: utf-8 -*-
2
+ # -----------------------------------------------------------------------------
3
+ # Copyright (c) Vispy Development Team. All Rights Reserved.
4
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
5
+ # -----------------------------------------------------------------------------
6
+
7
+ import numpy as np
8
+
9
+ from .image import ImageVisual
10
+ from ..util.fourier import stft, fft_freqs
11
+
12
+
13
+ class SpectrogramVisual(ImageVisual):
14
+ """Calculate and show a spectrogram
15
+
16
+ Parameters
17
+ ----------
18
+ x : array-like
19
+ 1D signal to operate on. ``If len(x) < n_fft``, x will be
20
+ zero-padded to length ``n_fft``.
21
+ n_fft : int
22
+ Number of FFT points. Much faster for powers of two.
23
+ step : int | None
24
+ Step size between calculations. If None, ``n_fft // 2``
25
+ will be used.
26
+ fs : float
27
+ The sample rate of the data.
28
+ window : str | None
29
+ Window function to use. Can be ``'hann'`` for Hann window, or None
30
+ for no windowing.
31
+ normalize : bool
32
+ Normalization of spectrogram values across frequencies.
33
+ color_scale : {'linear', 'log'}
34
+ Scale to apply to the result of the STFT.
35
+ ``'log'`` will use ``10 * log10(power)``.
36
+ cmap : str
37
+ Colormap name.
38
+ clim : str | tuple
39
+ Colormap limits. Should be ``'auto'`` or a two-element tuple of
40
+ min and max values.
41
+ """
42
+
43
+ def __init__(self, x=None, n_fft=256, step=None, fs=1., window='hann',
44
+ normalize=False, color_scale='log', cmap='cubehelix',
45
+ clim='auto'):
46
+ self._x = np.asarray(x)
47
+ self._n_fft = int(n_fft)
48
+ self._step = step
49
+ self._fs = float(fs)
50
+ self._window = window
51
+ self._normalize = normalize
52
+ self._color_scale = color_scale
53
+
54
+ if clim == 'auto':
55
+ self._clim_auto = True
56
+ else:
57
+ self._clim_auto = False
58
+
59
+ if not isinstance(self._color_scale, str) or \
60
+ self._color_scale not in ('log', 'linear'):
61
+ raise ValueError('color_scale must be "linear" or "log"')
62
+
63
+ data = self._calculate_spectrogram()
64
+ super(SpectrogramVisual, self).__init__(data, clim=clim, cmap=cmap)
65
+
66
+ @property
67
+ def freqs(self):
68
+ """The spectrogram frequencies"""
69
+ return fft_freqs(self._n_fft, self._fs)
70
+
71
+ @property
72
+ def x(self):
73
+ """The original signal"""
74
+ return self._x
75
+
76
+ @x.setter
77
+ def x(self, x):
78
+ self._x = np.asarray(x)
79
+ self._update_image()
80
+
81
+ @property
82
+ def n_fft(self):
83
+ """The length of fft window"""
84
+ return self._n_fft
85
+
86
+ @n_fft.setter
87
+ def n_fft(self, n_fft):
88
+ self._n_fft = int(n_fft)
89
+ self._update_image()
90
+
91
+ @property
92
+ def step(self):
93
+ """The step of fft window"""
94
+ if self._step is None:
95
+ return self._n_fft // 2
96
+ else:
97
+ return self._step
98
+
99
+ @step.setter
100
+ def step(self, step):
101
+ self._step = step
102
+ self._update_image()
103
+
104
+ @property
105
+ def fs(self):
106
+ """The sampling frequency"""
107
+ return self._fs
108
+
109
+ @fs.setter
110
+ def fs(self, fs):
111
+ self._fs = fs
112
+ self._update_image()
113
+
114
+ @property
115
+ def window(self):
116
+ """The used window function"""
117
+ return self._window
118
+
119
+ @window.setter
120
+ def window(self, window):
121
+ self._window = window
122
+ self._update_image()
123
+
124
+ @property
125
+ def color_scale(self):
126
+ """The color scale"""
127
+ return self._color_scale
128
+
129
+ @color_scale.setter
130
+ def color_scale(self, color_scale):
131
+ if not isinstance(color_scale, str) or \
132
+ color_scale not in ('log', 'linear'):
133
+ raise ValueError('color_scale must be "linear" or "log"')
134
+ self._color_scale = color_scale
135
+ self._update_image()
136
+
137
+ @property
138
+ def normalize(self):
139
+ """The normalization setting"""
140
+ return self._normalize
141
+
142
+ @normalize.setter
143
+ def normalize(self, normalize):
144
+ self._normalize = normalize
145
+ self._update_image()
146
+
147
+ def _calculate_spectrogram(self):
148
+ if self._x is not None:
149
+ x = self._x
150
+ nan_mean = np.nanmean(x)
151
+ idx = np.isnan(x)
152
+ x[idx] = nan_mean
153
+ data = stft(x, self._n_fft, self._step, self._fs, self._window)
154
+ data = np.abs(data)
155
+ data = 20 * np.log10(data) if self._color_scale == 'log' else data
156
+ if self._normalize:
157
+ for i in range(data.shape[0]):
158
+ data[i, :] -= np.mean(data[i, :])
159
+ data[i, :] /= np.std(data[i, :])
160
+ return data.astype(np.float32) # ImageVisual will warn if 64-bit
161
+ else:
162
+ return None
163
+
164
+ def _update_image(self):
165
+ data = self._calculate_spectrogram()
166
+ self.set_data(data)
167
+ self.update()
168
+ if self._clim_auto:
169
+ self.clim = 'auto'
@@ -0,0 +1,80 @@
1
+ # -*- coding: utf-8 -*-
2
+ # -----------------------------------------------------------------------------
3
+ # Copyright (c) Vispy Development Team. All Rights Reserved.
4
+ # Distributed under the (new) BSD License. See LICENSE.txt for more info.
5
+ # -----------------------------------------------------------------------------
6
+
7
+ from ..geometry import create_sphere
8
+ from .mesh import MeshVisual
9
+ from .visual import CompoundVisual
10
+
11
+
12
+ class SphereVisual(CompoundVisual):
13
+ """Visual that displays a sphere
14
+
15
+ Parameters
16
+ ----------
17
+ radius : float
18
+ The size of the sphere.
19
+ cols : int
20
+ Number of cols that make up the sphere mesh
21
+ (for method='latitude' and 'cube').
22
+ rows : int
23
+ Number of rows that make up the sphere mesh
24
+ (for method='latitude' and 'cube').
25
+ depth : int
26
+ Number of depth segments that make up the sphere mesh
27
+ (for method='cube').
28
+ subdivisions : int
29
+ Number of subdivisions to perform (for method='ico').
30
+ method : str
31
+ Method for generating sphere. Accepts 'latitude' for
32
+ latitude-longitude, 'ico' for icosahedron, and 'cube'
33
+ for cube based tessellation.
34
+ vertex_colors : ndarray
35
+ Same as for `MeshVisual` class.
36
+ See `create_sphere` for vertex ordering.
37
+ face_colors : ndarray
38
+ Same as for `MeshVisual` class.
39
+ See `create_sphere` for vertex ordering.
40
+ color : Color
41
+ The `Color` to use when drawing the sphere faces.
42
+ edge_color : tuple or Color
43
+ The `Color` to use when drawing the sphere edges. If `None`, then no
44
+ sphere edges are drawn.
45
+ shading : str | None
46
+ Shading to use.
47
+ """
48
+
49
+ def __init__(self, radius=1.0, cols=30, rows=30, depth=30, subdivisions=3,
50
+ method='latitude', vertex_colors=None, face_colors=None,
51
+ color=(0.5, 0.5, 1, 1), edge_color=None, shading=None, **kwargs):
52
+
53
+ mesh = create_sphere(rows, cols, depth, radius=radius,
54
+ subdivisions=subdivisions, method=method)
55
+
56
+ self._mesh = MeshVisual(vertices=mesh.get_vertices(),
57
+ faces=mesh.get_faces(),
58
+ vertex_colors=vertex_colors,
59
+ face_colors=face_colors, color=color,
60
+ shading=shading)
61
+ if edge_color:
62
+ self._border = MeshVisual(vertices=mesh.get_vertices(),
63
+ faces=mesh.get_edges(),
64
+ color=edge_color, mode='lines')
65
+ else:
66
+ self._border = MeshVisual()
67
+
68
+ CompoundVisual.__init__(self, [self._mesh, self._border], **kwargs)
69
+ self.mesh.set_gl_state(polygon_offset_fill=True,
70
+ polygon_offset=(1, 1), depth_test=True)
71
+
72
+ @property
73
+ def mesh(self):
74
+ """The vispy.visuals.MeshVisual that used to fil in."""
75
+ return self._mesh
76
+
77
+ @property
78
+ def border(self):
79
+ """The vispy.visuals.MeshVisual that used to draw the border."""
80
+ return self._border