lavavu 1.9.0__tar.gz → 1.9.6__tar.gz

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.
Files changed (160) hide show
  1. {lavavu-1.9.0/lavavu.egg-info → lavavu-1.9.6}/PKG-INFO +14 -11
  2. {lavavu-1.9.0 → lavavu-1.9.6}/README.md +12 -10
  3. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/control.py +18 -5
  4. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/menu.js +9 -4
  5. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/webview.html +1 -1
  6. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/lavavu.py +65 -50
  7. {lavavu-1.9.0 → lavavu-1.9.6/lavavu.egg-info}/PKG-INFO +14 -11
  8. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu.egg-info/SOURCES.txt +0 -6
  9. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu.egg-info/requires.txt +1 -0
  10. {lavavu-1.9.0 → lavavu-1.9.6}/requirements.txt +1 -0
  11. {lavavu-1.9.0 → lavavu-1.9.6}/setup.py +9 -14
  12. {lavavu-1.9.0 → lavavu-1.9.6}/src/Geometry.cpp +47 -11
  13. {lavavu-1.9.0 → lavavu-1.9.6}/src/Geometry.h +8 -6
  14. {lavavu-1.9.0 → lavavu-1.9.6}/src/Include.h +1 -0
  15. {lavavu-1.9.0 → lavavu-1.9.6}/src/InteractiveViewer.cpp +4 -1
  16. {lavavu-1.9.0 → lavavu-1.9.6}/src/Model.cpp +12 -1
  17. {lavavu-1.9.0 → lavavu-1.9.6}/src/TriSurfaces.cpp +4 -4
  18. {lavavu-1.9.0 → lavavu-1.9.6}/src/Triangles.cpp +3 -2
  19. {lavavu-1.9.0 → lavavu-1.9.6}/src/Util.cpp +3 -2
  20. {lavavu-1.9.0 → lavavu-1.9.6}/src/Util.h +1 -1
  21. lavavu-1.9.6/src/version.cpp +2 -0
  22. lavavu-1.9.0/lavavu/html/LavaVu-amalgamated.js +0 -7241
  23. lavavu-1.9.0/lavavu/html/LavaVu.data +0 -3923
  24. lavavu-1.9.0/lavavu/html/LavaVu.html +0 -1296
  25. lavavu-1.9.0/lavavu/html/LavaVu.js +0 -6035
  26. lavavu-1.9.0/lavavu/html/LavaVu.wasm +0 -0
  27. lavavu-1.9.0/lavavu/html/emscripten.js +0 -184
  28. lavavu-1.9.0/src/version.cpp +0 -2
  29. {lavavu-1.9.0 → lavavu-1.9.6}/LICENSE.md +0 -0
  30. {lavavu-1.9.0 → lavavu-1.9.6}/MANIFEST.in +0 -0
  31. {lavavu-1.9.0 → lavavu-1.9.6}/Makefile +0 -0
  32. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/LavaVuPython.py +0 -0
  33. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/__init__.py +0 -0
  34. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/__main__.py +0 -0
  35. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/amalgamate.py +0 -0
  36. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/aserver.py +0 -0
  37. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/convert.py +0 -0
  38. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/dict.json +0 -0
  39. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/font.bin +0 -0
  40. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/LavaVu-amalgamated.css +0 -0
  41. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/OK-min.js +0 -0
  42. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/baseviewer.js +0 -0
  43. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/control.css +0 -0
  44. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/control.js +0 -0
  45. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/dat-gui-light-theme.css +0 -0
  46. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/dat.gui.min.js +0 -0
  47. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/draw.js +0 -0
  48. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/drawbox.js +0 -0
  49. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/emscripten-template.js +0 -0
  50. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/emscripten.css +0 -0
  51. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/favicon.ico +0 -0
  52. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/gl-matrix-min.js +0 -0
  53. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/gui.css +0 -0
  54. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/server.js +0 -0
  55. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/stats.min.js +0 -0
  56. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/styles.css +0 -0
  57. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/html/webview-template.html +0 -0
  58. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/osmesa/LavaVuPython.py +0 -0
  59. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/osmesa/__init__.py +0 -0
  60. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/points.py +0 -0
  61. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/server.py +0 -0
  62. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/shaders/default.frag +0 -0
  63. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/shaders/default.vert +0 -0
  64. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/shaders/fontShader.frag +0 -0
  65. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/shaders/fontShader.vert +0 -0
  66. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/shaders/lineShader.frag +0 -0
  67. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/shaders/lineShader.vert +0 -0
  68. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/shaders/pointShader.frag +0 -0
  69. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/shaders/pointShader.vert +0 -0
  70. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/shaders/triShader.frag +0 -0
  71. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/shaders/triShader.vert +0 -0
  72. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/shaders/volumeShader.frag +0 -0
  73. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/shaders/volumeShader.vert +0 -0
  74. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/tracers.py +0 -0
  75. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu/vutils.py +0 -0
  76. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu.egg-info/dependency_links.txt +0 -0
  77. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu.egg-info/entry_points.txt +0 -0
  78. {lavavu-1.9.0 → lavavu-1.9.6}/lavavu.egg-info/top_level.txt +0 -0
  79. {lavavu-1.9.0 → lavavu-1.9.6}/pyproject.toml +0 -0
  80. {lavavu-1.9.0 → lavavu-1.9.6}/setup.cfg +0 -0
  81. {lavavu-1.9.0 → lavavu-1.9.6}/src/ApplicationInterface.h +0 -0
  82. {lavavu-1.9.0 → lavavu-1.9.6}/src/ColourMap.cpp +0 -0
  83. {lavavu-1.9.0 → lavavu-1.9.6}/src/ColourMap.h +0 -0
  84. {lavavu-1.9.0 → lavavu-1.9.6}/src/Colours.cpp +0 -0
  85. {lavavu-1.9.0 → lavavu-1.9.6}/src/Colours.h +0 -0
  86. {lavavu-1.9.0 → lavavu-1.9.6}/src/Contour.cpp +0 -0
  87. {lavavu-1.9.0 → lavavu-1.9.6}/src/Contour.h +0 -0
  88. {lavavu-1.9.0 → lavavu-1.9.6}/src/DrawingObject.cpp +0 -0
  89. {lavavu-1.9.0 → lavavu-1.9.6}/src/DrawingObject.h +0 -0
  90. {lavavu-1.9.0 → lavavu-1.9.6}/src/Extensions.cpp +0 -0
  91. {lavavu-1.9.0 → lavavu-1.9.6}/src/Extensions.h +0 -0
  92. {lavavu-1.9.0 → lavavu-1.9.6}/src/FontLine.h +0 -0
  93. {lavavu-1.9.0 → lavavu-1.9.6}/src/FontSans.h +0 -0
  94. {lavavu-1.9.0 → lavavu-1.9.6}/src/GLUtils.cpp +0 -0
  95. {lavavu-1.9.0 → lavavu-1.9.6}/src/GLUtils.h +0 -0
  96. {lavavu-1.9.0 → lavavu-1.9.6}/src/GraphicsUtil.cpp +0 -0
  97. {lavavu-1.9.0 → lavavu-1.9.6}/src/GraphicsUtil.h +0 -0
  98. {lavavu-1.9.0 → lavavu-1.9.6}/src/InputInterface.h +0 -0
  99. {lavavu-1.9.0 → lavavu-1.9.6}/src/IsoSurface.cpp +0 -0
  100. {lavavu-1.9.0 → lavavu-1.9.6}/src/IsoSurface.h +0 -0
  101. {lavavu-1.9.0 → lavavu-1.9.6}/src/LavaVu.cpp +0 -0
  102. {lavavu-1.9.0 → lavavu-1.9.6}/src/LavaVu.h +0 -0
  103. {lavavu-1.9.0 → lavavu-1.9.6}/src/LavaVuPython_wrap.cxx +0 -0
  104. {lavavu-1.9.0 → lavavu-1.9.6}/src/Lines.cpp +0 -0
  105. {lavavu-1.9.0 → lavavu-1.9.6}/src/LinesSorted.cpp +0 -0
  106. {lavavu-1.9.0 → lavavu-1.9.6}/src/Links.cpp +0 -0
  107. {lavavu-1.9.0 → lavavu-1.9.6}/src/Main/CGLViewer.cpp +0 -0
  108. {lavavu-1.9.0 → lavavu-1.9.6}/src/Main/CGLViewer.h +0 -0
  109. {lavavu-1.9.0 → lavavu-1.9.6}/src/Main/CocoaViewer.h +0 -0
  110. {lavavu-1.9.0 → lavavu-1.9.6}/src/Main/CocoaViewer.mm +0 -0
  111. {lavavu-1.9.0 → lavavu-1.9.6}/src/Main/EGLViewer.cpp +0 -0
  112. {lavavu-1.9.0 → lavavu-1.9.6}/src/Main/EGLViewer.h +0 -0
  113. {lavavu-1.9.0 → lavavu-1.9.6}/src/Main/GLFWViewer.cpp +0 -0
  114. {lavavu-1.9.0 → lavavu-1.9.6}/src/Main/GLFWViewer.h +0 -0
  115. {lavavu-1.9.0 → lavavu-1.9.6}/src/Main/OSMesaViewer.cpp +0 -0
  116. {lavavu-1.9.0 → lavavu-1.9.6}/src/Main/OSMesaViewer.h +0 -0
  117. {lavavu-1.9.0 → lavavu-1.9.6}/src/Main/X11Viewer.cpp +0 -0
  118. {lavavu-1.9.0 → lavavu-1.9.6}/src/Main/X11Viewer.h +0 -0
  119. {lavavu-1.9.0 → lavavu-1.9.6}/src/Main/main.cpp +0 -0
  120. {lavavu-1.9.0 → lavavu-1.9.6}/src/Model.h +0 -0
  121. {lavavu-1.9.0 → lavavu-1.9.6}/src/OpenGLViewer.cpp +0 -0
  122. {lavavu-1.9.0 → lavavu-1.9.6}/src/OpenGLViewer.h +0 -0
  123. {lavavu-1.9.0 → lavavu-1.9.6}/src/OutputInterface.h +0 -0
  124. {lavavu-1.9.0 → lavavu-1.9.6}/src/Points.cpp +0 -0
  125. {lavavu-1.9.0 → lavavu-1.9.6}/src/QuadSurfaces.cpp +0 -0
  126. {lavavu-1.9.0 → lavavu-1.9.6}/src/RenderContext.cpp +0 -0
  127. {lavavu-1.9.0 → lavavu-1.9.6}/src/RenderContext.h +0 -0
  128. {lavavu-1.9.0 → lavavu-1.9.6}/src/Session.cpp +0 -0
  129. {lavavu-1.9.0 → lavavu-1.9.6}/src/Session.h +0 -0
  130. {lavavu-1.9.0 → lavavu-1.9.6}/src/Shaders.cpp +0 -0
  131. {lavavu-1.9.0 → lavavu-1.9.6}/src/Shaders.h +0 -0
  132. {lavavu-1.9.0 → lavavu-1.9.6}/src/Shapes.cpp +0 -0
  133. {lavavu-1.9.0 → lavavu-1.9.6}/src/TimeStep.h +0 -0
  134. {lavavu-1.9.0 → lavavu-1.9.6}/src/Tracers.cpp +0 -0
  135. {lavavu-1.9.0 → lavavu-1.9.6}/src/Vectors.cpp +0 -0
  136. {lavavu-1.9.0 → lavavu-1.9.6}/src/VideoEncoder.cpp +0 -0
  137. {lavavu-1.9.0 → lavavu-1.9.6}/src/VideoEncoder.h +0 -0
  138. {lavavu-1.9.0 → lavavu-1.9.6}/src/View.cpp +0 -0
  139. {lavavu-1.9.0 → lavavu-1.9.6}/src/View.h +0 -0
  140. {lavavu-1.9.0 → lavavu-1.9.6}/src/ViewerApp.h +0 -0
  141. {lavavu-1.9.0 → lavavu-1.9.6}/src/ViewerTypes.h +0 -0
  142. {lavavu-1.9.0 → lavavu-1.9.6}/src/Volumes.cpp +0 -0
  143. {lavavu-1.9.0 → lavavu-1.9.6}/src/base64.cpp +0 -0
  144. {lavavu-1.9.0 → lavavu-1.9.6}/src/base64.h +0 -0
  145. {lavavu-1.9.0 → lavavu-1.9.6}/src/fifo_map.hpp +0 -0
  146. {lavavu-1.9.0 → lavavu-1.9.6}/src/jpeg/jpgd.cpp +0 -0
  147. {lavavu-1.9.0 → lavavu-1.9.6}/src/jpeg/jpgd.h +0 -0
  148. {lavavu-1.9.0 → lavavu-1.9.6}/src/jpeg/jpge.cpp +0 -0
  149. {lavavu-1.9.0 → lavavu-1.9.6}/src/jpeg/jpge.h +0 -0
  150. {lavavu-1.9.0 → lavavu-1.9.6}/src/json.hpp +0 -0
  151. {lavavu-1.9.0 → lavavu-1.9.6}/src/linalg.h +0 -0
  152. {lavavu-1.9.0 → lavavu-1.9.6}/src/miniz/miniz.c +0 -0
  153. {lavavu-1.9.0 → lavavu-1.9.6}/src/miniz/miniz.h +0 -0
  154. {lavavu-1.9.0 → lavavu-1.9.6}/src/png/lodepng.cpp +0 -0
  155. {lavavu-1.9.0 → lavavu-1.9.6}/src/png/lodepng.h +0 -0
  156. {lavavu-1.9.0 → lavavu-1.9.6}/src/sqlite3/sqlite3.c +0 -0
  157. {lavavu-1.9.0 → lavavu-1.9.6}/src/sqlite3/sqlite3.h +0 -0
  158. {lavavu-1.9.0 → lavavu-1.9.6}/src/stb_image_resize.h +0 -0
  159. {lavavu-1.9.0 → lavavu-1.9.6}/src/tiny_obj_loader.h +0 -0
  160. {lavavu-1.9.0 → lavavu-1.9.6}/src/version.h +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lavavu
3
- Version: 1.9.0
3
+ Version: 1.9.6
4
4
  Summary: Python interface to LavaVu OpenGL 3D scientific visualisation utilities
5
5
  Author-email: Owen Kaluza <owen@kaluza.id.au>
6
6
  License: ### Licensing
@@ -215,6 +215,7 @@ License-File: LICENSE.md
215
215
  Requires-Dist: numpy>=1.18
216
216
  Requires-Dist: aiohttp
217
217
  Requires-Dist: jupyter_server_proxy
218
+ Requires-Dist: matplotlib
218
219
  Requires-Dist: numpy-quaternion
219
220
  Dynamic: license-file
220
221
 
@@ -223,7 +224,7 @@ Dynamic: license-file
223
224
  [![Build Status](https://github.com/lavavu/LavaVu/workflows/Test/badge.svg)](https://github.com/lavavu/LavaVu/actions?query=workflow:Test)
224
225
  [![Deploy Status](https://github.com/lavavu/LavaVu/workflows/Deploy/badge.svg?branch=1.7.3)](https://github.com/lavavu/LavaVu/actions?query=workflow:Deploy)
225
226
  [![DOI](https://zenodo.org/badge/45163055.svg)](https://zenodo.org/badge/latestdoi/45163055)
226
- [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/lavavu/LavaVu/1.9.0)
227
+ [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/lavavu/LavaVu/1.9.6)
227
228
 
228
229
  A scientific visualisation tool with a python interface for fast and flexible visual analysis.
229
230
 
@@ -236,7 +237,7 @@ Prior development was funded by the Monash Immersive Visualisation Plaform at [M
236
237
 
237
238
  The acronym stands for: lightweight, automatable visualisation and analysis viewing utility, but "lava" is also a reference to its primary application as a viewer for geophysical simulations. It was also chosen to be unique enough to find the repository with google.
238
239
 
239
- The project started in the gLucifer<sup>1</sup> framework for visualising geodynamics simulations. The OpenGL visualisation module was separated from the simulation and sampling libraries and became a more general purpose visualisation tool. gLucifer continues as a set of sampling tools for Underworld simulations as part of the [Underworld2](https://github.com/underworldcode/underworld2/) code. LavaVu provides the rendering library for creating 2d and 3d visualisations to view this sampled data, inline within interactive IPython notebooks and offline through saved visualisation databases and images/movies.
240
+ The project started as a replacement rendering library for the gLucifer<sup>1</sup> framework, visualising geodynamics simulations. The new OpenGL visualisation code was re-implemented as a more general purpose visualisation tool. gLucifer continues as a set of sampling tools for Underworld simulations as part of the [Underworld2](https://github.com/underworldcode/underworld2/) code. LavaVu provides the rendering library for creating 2d and 3d visualisations to view this sampled data, inline within interactive Jupyter notebooks and offline through saved visualisation databases and images/movies.
240
241
 
241
242
  As a standalone tool it is a scriptable 3D visualisation tool capable of producing publication quality high res images and video output from time varying data sets along with HTML5 3D visualisations in WebGL.
242
243
  Rendering features include correctly and efficiently rendering large numbers of opaque and transparent points and surfaces and volume rendering by GPU ray-marching. There are also features for drawing vector fields and tracers (streamlines).
@@ -259,13 +260,10 @@ Development happens in the "master" branch with stable releases tagged, so if yo
259
260
  It's now in the python package index, so you can install with *pip*:
260
261
 
261
262
  ```
262
- pip install --user lavavu
263
+ python -m pip install lavavu
263
264
  ```
264
265
 
265
- > If you don't have pip available, you can try `sudo easy_install pip` or just install [Anaconda](https://www.anaconda.com/download), which comes with pip and a whole lot of other useful packages for scientific work with python. Once in anaconda `pip install lavavu` will install the package.
266
-
267
- > Currently no binaries are provided and the installer needs to compile the library, so on Linux you may need some developer tools and headers first, eg: for Ubuntu:
268
- `sudo apt install build-essential libgl1-mesa-dev libx11-dev zlib1g-dev`
266
+ > Currently binary wheels are provided for Linux x86_64, MacOS x86_64 and ARM64 and Windows x86_64.
269
267
 
270
268
  To try it out:
271
269
 
@@ -282,7 +280,12 @@ Alternatively, clone this repository with *git* and build from source:
282
280
  ```
283
281
  git clone https://github.com/lavavu/LavaVu
284
282
  cd LavaVu
283
+ python -m pip install .
284
+ ```
285
+ or
286
+ ```
285
287
  make -j4
288
+
286
289
  ```
287
290
 
288
291
  If all goes well the viewer will be built, try running with:
@@ -291,14 +294,14 @@ If all goes well the viewer will be built, try running with:
291
294
  ### Dependencies ###
292
295
 
293
296
  * OpenGL and Zlib, present on most systems, headers may need to be installed
294
- * To use with python requires python 2.7+ and NumPy
295
- * For video output, requires: libavcodec, libavformat, libavutil, libswscale (from FFmpeg / libav)
297
+ * To use with python requires python 3.6+ and NumPy
298
+ * For video output, requires: PyAV or for built in encoding, libavcodec, libavformat, libavutil, libswscale (from FFmpeg / libav)
296
299
  * To build the python interface from source requires swig (http://www.swig.org/)
297
300
 
298
301
  ### Who do I talk to? ###
299
302
 
300
303
  * Report bugs/issues here on github: https://github.com/lavavu/LavaVu/issues
301
- * Contact developer: Owen Kaluza (at) monash.edu
304
+ * Contact developer: Owen Kaluza (at) anu.edu.au
302
305
 
303
306
  For further documentation / examples, see the online documentation
304
307
  * https://lavavu.github.io/Documentation
@@ -3,7 +3,7 @@
3
3
  [![Build Status](https://github.com/lavavu/LavaVu/workflows/Test/badge.svg)](https://github.com/lavavu/LavaVu/actions?query=workflow:Test)
4
4
  [![Deploy Status](https://github.com/lavavu/LavaVu/workflows/Deploy/badge.svg?branch=1.7.3)](https://github.com/lavavu/LavaVu/actions?query=workflow:Deploy)
5
5
  [![DOI](https://zenodo.org/badge/45163055.svg)](https://zenodo.org/badge/latestdoi/45163055)
6
- [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/lavavu/LavaVu/1.9.0)
6
+ [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/lavavu/LavaVu/1.9.6)
7
7
 
8
8
  A scientific visualisation tool with a python interface for fast and flexible visual analysis.
9
9
 
@@ -16,7 +16,7 @@ Prior development was funded by the Monash Immersive Visualisation Plaform at [M
16
16
 
17
17
  The acronym stands for: lightweight, automatable visualisation and analysis viewing utility, but "lava" is also a reference to its primary application as a viewer for geophysical simulations. It was also chosen to be unique enough to find the repository with google.
18
18
 
19
- The project started in the gLucifer<sup>1</sup> framework for visualising geodynamics simulations. The OpenGL visualisation module was separated from the simulation and sampling libraries and became a more general purpose visualisation tool. gLucifer continues as a set of sampling tools for Underworld simulations as part of the [Underworld2](https://github.com/underworldcode/underworld2/) code. LavaVu provides the rendering library for creating 2d and 3d visualisations to view this sampled data, inline within interactive IPython notebooks and offline through saved visualisation databases and images/movies.
19
+ The project started as a replacement rendering library for the gLucifer<sup>1</sup> framework, visualising geodynamics simulations. The new OpenGL visualisation code was re-implemented as a more general purpose visualisation tool. gLucifer continues as a set of sampling tools for Underworld simulations as part of the [Underworld2](https://github.com/underworldcode/underworld2/) code. LavaVu provides the rendering library for creating 2d and 3d visualisations to view this sampled data, inline within interactive Jupyter notebooks and offline through saved visualisation databases and images/movies.
20
20
 
21
21
  As a standalone tool it is a scriptable 3D visualisation tool capable of producing publication quality high res images and video output from time varying data sets along with HTML5 3D visualisations in WebGL.
22
22
  Rendering features include correctly and efficiently rendering large numbers of opaque and transparent points and surfaces and volume rendering by GPU ray-marching. There are also features for drawing vector fields and tracers (streamlines).
@@ -39,13 +39,10 @@ Development happens in the "master" branch with stable releases tagged, so if yo
39
39
  It's now in the python package index, so you can install with *pip*:
40
40
 
41
41
  ```
42
- pip install --user lavavu
42
+ python -m pip install lavavu
43
43
  ```
44
44
 
45
- > If you don't have pip available, you can try `sudo easy_install pip` or just install [Anaconda](https://www.anaconda.com/download), which comes with pip and a whole lot of other useful packages for scientific work with python. Once in anaconda `pip install lavavu` will install the package.
46
-
47
- > Currently no binaries are provided and the installer needs to compile the library, so on Linux you may need some developer tools and headers first, eg: for Ubuntu:
48
- `sudo apt install build-essential libgl1-mesa-dev libx11-dev zlib1g-dev`
45
+ > Currently binary wheels are provided for Linux x86_64, MacOS x86_64 and ARM64 and Windows x86_64.
49
46
 
50
47
  To try it out:
51
48
 
@@ -62,7 +59,12 @@ Alternatively, clone this repository with *git* and build from source:
62
59
  ```
63
60
  git clone https://github.com/lavavu/LavaVu
64
61
  cd LavaVu
62
+ python -m pip install .
63
+ ```
64
+ or
65
+ ```
65
66
  make -j4
67
+
66
68
  ```
67
69
 
68
70
  If all goes well the viewer will be built, try running with:
@@ -71,14 +73,14 @@ If all goes well the viewer will be built, try running with:
71
73
  ### Dependencies ###
72
74
 
73
75
  * OpenGL and Zlib, present on most systems, headers may need to be installed
74
- * To use with python requires python 2.7+ and NumPy
75
- * For video output, requires: libavcodec, libavformat, libavutil, libswscale (from FFmpeg / libav)
76
+ * To use with python requires python 3.6+ and NumPy
77
+ * For video output, requires: PyAV or for built in encoding, libavcodec, libavformat, libavutil, libswscale (from FFmpeg / libav)
76
78
  * To build the python interface from source requires swig (http://www.swig.org/)
77
79
 
78
80
  ### Who do I talk to? ###
79
81
 
80
82
  * Report bugs/issues here on github: https://github.com/lavavu/LavaVu/issues
81
- * Contact developer: Owen Kaluza (at) monash.edu
83
+ * Contact developer: Owen Kaluza (at) anu.edu.au
82
84
 
83
85
  For further documentation / examples, see the online documentation
84
86
  * https://lavavu.github.io/Documentation
@@ -1689,13 +1689,26 @@ class _ControlFactory(object):
1689
1689
  """
1690
1690
  if not is_notebook():
1691
1691
  return
1692
- #Find matching viewer id, redisplay all that match
1692
+ from IPython.display import display,HTML,Javascript
1693
+ display(Javascript(self.redisplay_call()))
1694
+
1695
+ def redisplay_call(self):
1696
+ """Update the active viewer image if any
1697
+ Applies changes made in python to the viewer and forces a redisplay
1698
+ """
1699
+ #Find matching viewer id, redisplay first match
1700
+ ids = self.active_viewers()
1701
+ return ';'.join('_wi["{0}"].redisplay()'.format(i) for i in ids)
1702
+
1703
+ def active_viewers(self):
1704
+ """Return matching active viewer IDs
1705
+ """
1706
+ #Find matching viewer ids, all that match
1707
+ ids = []
1693
1708
  for idx,obj in enumerate(windows):
1694
1709
  if obj == self._target():
1695
- viewerid = winids[idx]
1696
- from IPython.display import display,HTML,Javascript
1697
- #display(Javascript('_wi["{0}"].redisplay();'.format(viewerid)))
1698
- display(HTML('<script>_wi["{0}"].redisplay();</script>'.format(viewerid)))
1710
+ ids.append(winids[idx])
1711
+ return ids
1699
1712
 
1700
1713
  def update(self):
1701
1714
  """Update the control values from current viewer data
@@ -123,7 +123,12 @@ function menu_addctrls(menu, obj, viewer, onchange) {
123
123
  //Check if it has been set on the target object
124
124
  if (prop in obj) {
125
125
  //console.log(prop + " ==> " + JSON.stringify(viewer.dict[prop]));
126
- menu_addctrl(menu, obj, viewer, prop, onchange);
126
+ try {
127
+ //Catch errors and continue gracefully
128
+ menu_addctrl(menu, obj, viewer, prop, onchange);
129
+ } catch(e) {
130
+ console.log("Error adding control to menu: " + e);
131
+ }
127
132
 
128
133
  } else {
129
134
  //Save list of properties without controls
@@ -159,9 +164,9 @@ function menu_addctrls(menu, obj, viewer, onchange) {
159
164
 
160
165
  function menu_addcmaps(menu, obj, viewer, onchange) {
161
166
  //Colourmap editing menu
162
- if (viewer.cgui.prmenu) viewer.cgui.removeFolder(viewer.cgui.prmenu);
163
- if (viewer.cgui.cmenu) viewer.cgui.removeFolder(viewer.cgui.cmenu);
164
- if (viewer.cgui.pomenu) viewer.cgui.removeFolder(viewer.cgui.pomenu);
167
+ if (viewer.cgui.prmenu) viewer.cgui.remove(viewer.cgui.prmenu);
168
+ if (viewer.cgui.cmenu) viewer.cgui.remove(viewer.cgui.cmenu);
169
+ if (viewer.cgui.pomenu) viewer.cgui.remove(viewer.cgui.pomenu);
165
170
  viewer.cgui.prmenu = viewer.cgui.addFolder("Properties");
166
171
  viewer.cgui.cmenu = viewer.cgui.addFolder("Colours");
167
172
  viewer.cgui.pomenu = viewer.cgui.addFolder("Positions");
@@ -27,7 +27,7 @@
27
27
 
28
28
  <input id="fileinput" type="file" style="visibility:hidden" onchange="useFileInput(this)" />
29
29
 
30
- <script async src="https://cdn.jsdelivr.net/gh/lavavu/lavavu.github.io@1.9.0/LavaVu-amalgamated.min.js"></script>
30
+ <script async src="https://cdn.jsdelivr.net/gh/lavavu/lavavu.github.io@1.9.6/LavaVu-amalgamated.min.js"></script>
31
31
  <!--script src="dat.gui.min.js"></script>
32
32
  <script src="OK-min.js"></script>
33
33
 
@@ -53,6 +53,7 @@ import weakref
53
53
  import asyncio
54
54
  import quaternion as quat
55
55
  import platform
56
+ import matplotlib
56
57
 
57
58
  if sys.version_info[0] < 3:
58
59
  print("Python 3 required. LavaVu no longer supports Python 2.7.")
@@ -610,12 +611,12 @@ class Object(dict):
610
611
  return key in self.dict
611
612
 
612
613
  def __repr__(self):
613
- return str(self.ref)
614
+ return self.__str__()
614
615
 
615
616
  def __str__(self):
616
617
  #Default string representation
617
618
  self.parent._get() #Ensure in sync
618
- return '{\n' + str('\n'.join([' %s=%s' % (k,json.dumps(v)) for k,v in self.dict.items()])) + '\n}\n'
619
+ return '{\n' + str('\n'.join([' %s=%s' % (k,json.dumps(v)) for k,v in self.dict.items()])) + '\n}'
619
620
 
620
621
  #Interface for setting filters
621
622
  def include(self, *args, **kwargs):
@@ -1144,7 +1145,12 @@ class Object(dict):
1144
1145
  #Re-arrange to array of [r,g,b,a] values
1145
1146
  data = numpy.dstack((data[0],data[1],data[2]))
1146
1147
 
1147
- self._loadScalar(data, LavaVuPython.lucRGBAData)
1148
+ #Use the shape as dims for texture image data
1149
+ if len(data.shape) > 1:
1150
+ width, height = data.shape[1], data.shape[0]
1151
+ depth = 4 #4 channel RGBA
1152
+
1153
+ self._loadScalar(data, LavaVuPython.lucRGBAData, width, height, depth)
1148
1154
 
1149
1155
 
1150
1156
  def luminance(self, data):
@@ -1271,6 +1277,8 @@ class Object(dict):
1271
1277
  self.ref.colourMap = data.ref
1272
1278
  data = None
1273
1279
  else:
1280
+ if isinstance(data, matplotlib.colors.Colormap):
1281
+ data = matplotlib_cmap(data)
1274
1282
  if data is None:
1275
1283
  self.parent._get() #Ensure in sync
1276
1284
  cmid = self["colourmap"]
@@ -2739,7 +2747,7 @@ class Viewer(dict):
2739
2747
 
2740
2748
  """
2741
2749
 
2742
- def __init__(self, *args, resolution=None, binpath=None, context="default", port=8080, threads=False, **kwargs):
2750
+ def __init__(self, *args, resolution=None, binpath=None, context=None, port=8080, threads=False, **kwargs):
2743
2751
  """
2744
2752
  Create and init viewer instance
2745
2753
 
@@ -2776,7 +2784,9 @@ class Viewer(dict):
2776
2784
  self._collections = {}
2777
2785
  self.validate = True #Property validation flag
2778
2786
  self.recording = None
2779
- self.context = os.environ.get('LV_CONTEXT', context)
2787
+ self.context = context
2788
+ if self.context is None:
2789
+ self.context = os.environ.get('LV_CONTEXT', 'default')
2780
2790
 
2781
2791
  #Exit handler to clean up threads
2782
2792
  #(__del__ does not always seem to get called on termination)
@@ -4177,7 +4187,7 @@ class Viewer(dict):
4177
4187
  from IPython.display import display,HTML,Javascript
4178
4188
  display(Javascript(js + code))
4179
4189
 
4180
- def video(self, filename="", resolution=(0,0), fps=30, quality=0, encoder="h264", player=None, options={}, **kwargs):
4190
+ def video(self, filename="", resolution=(0,0), fps=30, quality=2, encoder="h264", embed=False, player=None, options={}, **kwargs):
4181
4191
  """
4182
4192
  Record and show the generated video inline within an ipython notebook.
4183
4193
 
@@ -4204,6 +4214,9 @@ class Viewer(dict):
4204
4214
  If omitted will use default settings, can fine tune settings in kwargs
4205
4215
  encoder : str
4206
4216
  Name of encoder to use, eg: "h264" (default), "mpeg"
4217
+ embed : bool
4218
+ Set to true to embed the video file rather than link to url
4219
+ Not recommended for large videos, default is False
4207
4220
  player : dict
4208
4221
  Args to pass to the player when the video is finished, eg:
4209
4222
  {"width" : 800, "height", 400, "params": "controls autoplay"}
@@ -4218,12 +4231,11 @@ class Viewer(dict):
4218
4231
  recorder : Video(object)
4219
4232
  Context manager object that controls the video recording
4220
4233
  """
4221
- return Video(self, filename, resolution, fps, quality, encoder, player, options, **kwargs)
4234
+ return Video(self, filename, resolution, fps, quality, encoder, embed, player, options, **kwargs)
4222
4235
 
4223
- def video_steps(self, filename="", start=0, end=0, resolution=(0,0), fps=30, quality=2, encoder="h264", player=None, options={}, **kwargs):
4236
+ def video_steps(self, filename="", start=0, end=0, resolution=(0,0), fps=30, quality=2, encoder="h264", embed=False, player=None, options={}, **kwargs):
4237
+ my_func.__doc__
4224
4238
  """
4225
- TODO: Fix to use pyAV
4226
-
4227
4239
  Record a video of the model by looping through all time steps
4228
4240
 
4229
4241
  Shows the generated video inline within an ipython notebook.
@@ -4235,21 +4247,12 @@ class Viewer(dict):
4235
4247
 
4236
4248
  Parameters
4237
4249
  ----------
4238
- filename : str
4239
- Name of the file to save, if not provided a default will be used
4240
4250
  start : int
4241
4251
  First timestep to record, if not specified will use first available
4242
4252
  end : int
4243
4253
  Last timestep to record, if not specified will use last available
4244
- resolution : list or tuple
4245
- Video resolution in pixels [x,y]
4246
- fps : int
4247
- Frames to output per second of video
4248
- quality : int
4249
- Encoding quality, 1=low, 2=medium(default), 3=high, higher quality reduces
4250
- encoding artifacts at cost of larger file size
4251
- **kwargs :
4252
- Any additional keyword args will also be passed as options to the encoder
4254
+
4255
+ All other parameters same as video()
4253
4256
  """
4254
4257
 
4255
4258
  try:
@@ -4257,7 +4260,7 @@ class Viewer(dict):
4257
4260
  if end == 0: end = len(steps)
4258
4261
  steps = steps[start:end]
4259
4262
  from tqdm.notebook import tqdm
4260
- with Video(self, filename, resolution, fps, quality, encoder, player, options, **kwargs):
4263
+ with Video(self, filename, resolution, fps, quality, encoder, embed, player, options, **kwargs):
4261
4264
  for s in tqdm(steps, desc='Rendering loop'):
4262
4265
  self.timestep(s)
4263
4266
  self.render()
@@ -4476,10 +4479,10 @@ class Viewer(dict):
4476
4479
  for key in ["translate", "rotate", "xyzrotate", "fov", "focus"]:
4477
4480
  if key in src:
4478
4481
  dst[key] = copy.copy(src[key])
4479
- #Round down arrays to max 3 decimal places
4482
+ #Round down arrays to max 6 decimal places
4480
4483
  try:
4481
4484
  for r in range(len(dst[key])):
4482
- dst[key][r] = round(dst[key][r], 3)
4485
+ dst[key][r] = round(dst[key][r], 6)
4483
4486
  except:
4484
4487
  #Not a list/array
4485
4488
  pass
@@ -5405,37 +5408,44 @@ def player(filename, params="controls autoplay loop", **kwargs):
5405
5408
 
5406
5409
  if is_notebook():
5407
5410
  from IPython.display import display,HTML,Video,Javascript
5408
- import uuid
5409
- vid = 'video_' + str(uuid.uuid4())[:8]
5410
5411
 
5411
5412
  # Fallback - replace url on gadi and similar jupyterhub installs with
5412
5413
  # fixed working directory that doesn't match notebook dir
5413
5414
  # check the video tag url and remove subpath on 404 error
5414
- display(Javascript(f"""
5415
- function video_error(el) {{
5416
- let url = el.src;
5417
- console.log("Bad video url: " + url);
5418
- let toppath = "/files/home/"
5419
- let baseurl = url.substring(0, url.indexOf(toppath)+toppath.length);
5420
- let endurl = url.substring(url.indexOf("{filename}"));
5421
- let fixed = baseurl + endurl;
5422
- if (url != fixed) {{
5423
- console.log("Replaced video url: " + fixed);
5424
- el.src = fixed;
5415
+ onerror = """{
5416
+ let url = this.src;
5417
+ console.log('Error in video url: ' + url);
5418
+ var urlp = new window.URL(url);
5419
+ let toppath = '/files/home/';
5420
+ let startidx = urlp.pathname.indexOf(toppath);
5421
+ if (startidx < 0) {
5422
+ toppath = '/files/';
5423
+ startidx = urlp.pathname.indexOf(toppath);
5424
+ }
5425
+ if (startidx >= 0) {
5426
+ let filename = urlp.pathname.split('/').pop();
5427
+ let base = urlp.pathname.substring(0, startidx+toppath.length);
5428
+ urlp.pathname = base + filename;
5429
+ if (url != urlp.href) {
5430
+ console.log('Replaced video url: ' + urlp.href);
5431
+ this.src = urlp.href;
5425
5432
  //Also fix download link
5426
- document.getElementById('link_{vid}').href = fixed;
5427
- }} else {{
5428
- console.log("Not replacing video url, no change: " + fixed);
5429
- }}
5430
- }}
5431
- """))
5432
-
5433
- #Embed player
5434
- filename = os.path.relpath(filename)
5435
- display(Video(url=filename, html_attributes=f'id="{vid}" onerror="video_error(this)"' + params, **kwargs))
5433
+ let link = document.getElementById('link_' + this.id);
5434
+ if (link) link.href = urlp.href;
5435
+ }
5436
+ }
5437
+ }"""
5438
+
5439
+ if "embed" in kwargs:
5440
+ #Not needed if embedding
5441
+ onerror = ""
5436
5442
 
5437
- #Add download link
5438
- display(HTML(f'<a id="link_{vid}" href="{filename}" download>Download Video</a>'))
5443
+ #Display player and download link
5444
+ import uuid
5445
+ vid = 'video_' + str(uuid.uuid4())[:8]
5446
+ filename = os.path.relpath(filename)
5447
+ display(Video(filename=filename, html_attributes=f'id="{vid}" onerror="{onerror}" ' + params, **kwargs),
5448
+ HTML(f'<a id="link_{vid}" href="{filename}" download>Download Video</a>'))
5439
5449
 
5440
5450
  #Class for managing video animation recording
5441
5451
  class Video(object):
@@ -5455,7 +5465,7 @@ class Video(object):
5455
5465
  ... lv.rotate('y', 10) # doctest: +SKIP
5456
5466
  ... lv.render() # doctest: +SKIP
5457
5467
  """
5458
- def __init__(self, viewer, filename="output.mp4", resolution=(0,0), framerate=30, quality=2, encoder="h264", player=None, options={}, **kwargs):
5468
+ def __init__(self, viewer, filename="output.mp4", resolution=(0,0), framerate=30, quality=2, encoder="h264", embed=False, player=None, options={}, **kwargs):
5459
5469
  """
5460
5470
  Record and show the generated video inline within an ipython notebook.
5461
5471
 
@@ -5482,6 +5492,9 @@ class Video(object):
5482
5492
  Video resolution in pixels [x,y]
5483
5493
  encoder : str
5484
5494
  Name of encoder to use, eg: "h264" (default), "mpeg"
5495
+ embed : bool
5496
+ Set to true to embed the video file rather than link to url
5497
+ Not recommended for large videos, default is False
5485
5498
  player : dict
5486
5499
  Args to pass to the player when the video is finished, eg:
5487
5500
  {"width" : 800, "height", 400, "params": "controls autoplay"}
@@ -5516,6 +5529,8 @@ class Video(object):
5516
5529
  self.player = {"width": self.resolution[0]//2, "height": self.resolution[1]//2}
5517
5530
  else:
5518
5531
  self.player = {}
5532
+ if embed:
5533
+ self.player["embed"] = True
5519
5534
  self.encoder = encoder
5520
5535
  self.options = options
5521
5536
  #Also include extra args
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lavavu
3
- Version: 1.9.0
3
+ Version: 1.9.6
4
4
  Summary: Python interface to LavaVu OpenGL 3D scientific visualisation utilities
5
5
  Author-email: Owen Kaluza <owen@kaluza.id.au>
6
6
  License: ### Licensing
@@ -215,6 +215,7 @@ License-File: LICENSE.md
215
215
  Requires-Dist: numpy>=1.18
216
216
  Requires-Dist: aiohttp
217
217
  Requires-Dist: jupyter_server_proxy
218
+ Requires-Dist: matplotlib
218
219
  Requires-Dist: numpy-quaternion
219
220
  Dynamic: license-file
220
221
 
@@ -223,7 +224,7 @@ Dynamic: license-file
223
224
  [![Build Status](https://github.com/lavavu/LavaVu/workflows/Test/badge.svg)](https://github.com/lavavu/LavaVu/actions?query=workflow:Test)
224
225
  [![Deploy Status](https://github.com/lavavu/LavaVu/workflows/Deploy/badge.svg?branch=1.7.3)](https://github.com/lavavu/LavaVu/actions?query=workflow:Deploy)
225
226
  [![DOI](https://zenodo.org/badge/45163055.svg)](https://zenodo.org/badge/latestdoi/45163055)
226
- [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/lavavu/LavaVu/1.9.0)
227
+ [![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/lavavu/LavaVu/1.9.6)
227
228
 
228
229
  A scientific visualisation tool with a python interface for fast and flexible visual analysis.
229
230
 
@@ -236,7 +237,7 @@ Prior development was funded by the Monash Immersive Visualisation Plaform at [M
236
237
 
237
238
  The acronym stands for: lightweight, automatable visualisation and analysis viewing utility, but "lava" is also a reference to its primary application as a viewer for geophysical simulations. It was also chosen to be unique enough to find the repository with google.
238
239
 
239
- The project started in the gLucifer<sup>1</sup> framework for visualising geodynamics simulations. The OpenGL visualisation module was separated from the simulation and sampling libraries and became a more general purpose visualisation tool. gLucifer continues as a set of sampling tools for Underworld simulations as part of the [Underworld2](https://github.com/underworldcode/underworld2/) code. LavaVu provides the rendering library for creating 2d and 3d visualisations to view this sampled data, inline within interactive IPython notebooks and offline through saved visualisation databases and images/movies.
240
+ The project started as a replacement rendering library for the gLucifer<sup>1</sup> framework, visualising geodynamics simulations. The new OpenGL visualisation code was re-implemented as a more general purpose visualisation tool. gLucifer continues as a set of sampling tools for Underworld simulations as part of the [Underworld2](https://github.com/underworldcode/underworld2/) code. LavaVu provides the rendering library for creating 2d and 3d visualisations to view this sampled data, inline within interactive Jupyter notebooks and offline through saved visualisation databases and images/movies.
240
241
 
241
242
  As a standalone tool it is a scriptable 3D visualisation tool capable of producing publication quality high res images and video output from time varying data sets along with HTML5 3D visualisations in WebGL.
242
243
  Rendering features include correctly and efficiently rendering large numbers of opaque and transparent points and surfaces and volume rendering by GPU ray-marching. There are also features for drawing vector fields and tracers (streamlines).
@@ -259,13 +260,10 @@ Development happens in the "master" branch with stable releases tagged, so if yo
259
260
  It's now in the python package index, so you can install with *pip*:
260
261
 
261
262
  ```
262
- pip install --user lavavu
263
+ python -m pip install lavavu
263
264
  ```
264
265
 
265
- > If you don't have pip available, you can try `sudo easy_install pip` or just install [Anaconda](https://www.anaconda.com/download), which comes with pip and a whole lot of other useful packages for scientific work with python. Once in anaconda `pip install lavavu` will install the package.
266
-
267
- > Currently no binaries are provided and the installer needs to compile the library, so on Linux you may need some developer tools and headers first, eg: for Ubuntu:
268
- `sudo apt install build-essential libgl1-mesa-dev libx11-dev zlib1g-dev`
266
+ > Currently binary wheels are provided for Linux x86_64, MacOS x86_64 and ARM64 and Windows x86_64.
269
267
 
270
268
  To try it out:
271
269
 
@@ -282,7 +280,12 @@ Alternatively, clone this repository with *git* and build from source:
282
280
  ```
283
281
  git clone https://github.com/lavavu/LavaVu
284
282
  cd LavaVu
283
+ python -m pip install .
284
+ ```
285
+ or
286
+ ```
285
287
  make -j4
288
+
286
289
  ```
287
290
 
288
291
  If all goes well the viewer will be built, try running with:
@@ -291,14 +294,14 @@ If all goes well the viewer will be built, try running with:
291
294
  ### Dependencies ###
292
295
 
293
296
  * OpenGL and Zlib, present on most systems, headers may need to be installed
294
- * To use with python requires python 2.7+ and NumPy
295
- * For video output, requires: libavcodec, libavformat, libavutil, libswscale (from FFmpeg / libav)
297
+ * To use with python requires python 3.6+ and NumPy
298
+ * For video output, requires: PyAV or for built in encoding, libavcodec, libavformat, libavutil, libswscale (from FFmpeg / libav)
296
299
  * To build the python interface from source requires swig (http://www.swig.org/)
297
300
 
298
301
  ### Who do I talk to? ###
299
302
 
300
303
  * Report bugs/issues here on github: https://github.com/lavavu/LavaVu/issues
301
- * Contact developer: Owen Kaluza (at) monash.edu
304
+ * Contact developer: Owen Kaluza (at) anu.edu.au
302
305
 
303
306
  For further documentation / examples, see the online documentation
304
307
  * https://lavavu.github.io/Documentation
@@ -26,11 +26,6 @@ lavavu.egg-info/entry_points.txt
26
26
  lavavu.egg-info/requires.txt
27
27
  lavavu.egg-info/top_level.txt
28
28
  lavavu/html/LavaVu-amalgamated.css
29
- lavavu/html/LavaVu-amalgamated.js
30
- lavavu/html/LavaVu.data
31
- lavavu/html/LavaVu.html
32
- lavavu/html/LavaVu.js
33
- lavavu/html/LavaVu.wasm
34
29
  lavavu/html/OK-min.js
35
30
  lavavu/html/baseviewer.js
36
31
  lavavu/html/control.css
@@ -41,7 +36,6 @@ lavavu/html/draw.js
41
36
  lavavu/html/drawbox.js
42
37
  lavavu/html/emscripten-template.js
43
38
  lavavu/html/emscripten.css
44
- lavavu/html/emscripten.js
45
39
  lavavu/html/favicon.ico
46
40
  lavavu/html/gl-matrix-min.js
47
41
  lavavu/html/gui.css
@@ -1,4 +1,5 @@
1
1
  numpy>=1.18
2
2
  aiohttp
3
3
  jupyter_server_proxy
4
+ matplotlib
4
5
  numpy-quaternion
@@ -1,5 +1,6 @@
1
1
  numpy >= 1.18
2
2
  aiohttp
3
3
  jupyter_server_proxy
4
+ matplotlib
4
5
  numpy-quaternion
5
6
 
@@ -19,7 +19,7 @@ import shutil
19
19
 
20
20
  #Current version
21
21
  #(must be of the form X.Y.Z to trigger wheel builds)
22
- version = "1.9.0"
22
+ version = "1.9.6"
23
23
 
24
24
  """
25
25
  To release a new verison:
@@ -383,19 +383,9 @@ if __name__ == "__main__":
383
383
  #EGL and OSMesa are built as optional extra modules
384
384
  '''
385
385
  if find_library('OpenGL') and find_library('EGL') and check_libraries(['OpenGL', 'EGL'], ['GL/gl.h', 'EGL/egl.h']):
386
- #EGL for offscreen OpenGL without X11/GLX - works only with NVidia currently
387
- ex = Extension('lavavu.egl._LavaVuPython',
388
- define_macros = defines + [('HAVE_EGL', '1')],
389
- include_dirs = inc_dirs,
390
- libraries = libs + ['OpenGL', 'EGL'],
391
- library_dirs = lib_dirs,
392
- runtime_library_dirs = rt_lib_dirs,
393
- extra_compile_args = cflags,
394
- extra_link_args = ldflags,
395
- extra_objects=extra_objects,
396
- sources = srcs)
397
- extensions.append(ex)
398
386
  ''';
387
+
388
+ #OSMesa built as optional extra module
399
389
  if find_library('OSMesa') and check_libraries(['OSMesa'], ['GL/osmesa.h']):
400
390
  #OSMesa for software rendered offscreen OpenGL, build as additional extension
401
391
  ex = Extension('lavavu.osmesa._LavaVuPython',
@@ -411,7 +401,12 @@ if __name__ == "__main__":
411
401
  extensions.append(ex)
412
402
 
413
403
  #Main extension - use X11 or GLFW
414
- if ("LV_GLFW" in os.environ and find_library('glfw')
404
+ if ("LV_EGL" in os.environ and find_library('OpenGL') and find_library('EGL')
405
+ and check_libraries(['OpenGL', 'EGL'], ['GL/gl.h', 'EGL/egl.h'])):
406
+ #EGL for offscreen OpenGL without X11/GLX - works with NVidia and latest Mesa
407
+ defines += [('HAVE_EGL', '1')]
408
+ libs += ['OpenGL', 'EGL']
409
+ elif ("LV_GLFW" in os.environ and find_library('glfw')
415
410
  and check_libraries(['glfw'], ['GLFW/glfw3.h'])):
416
411
  #Use GLFW
417
412
  defines += [('HAVE_GLFW', '1')]