pgljupyter
PlantGL & L-Py jupyter widgets
Quick Examples
PlantGL
- simple PlantGL shapes - spheres @nbviewer
L-Py
-
a tree model - leuwenberg @nbviewer
-
plot magic - leuwenberg @nbviewer
-
champignon @nbviewer
-
magics with scalar parameters - broccoli @nbviewer
-
magics with curve parameters - sweep surface @nbviewer
Usage
from pgljupyter import SceneWidget, LsystemWidget
SceneWidget
Renderer for PlantGL Scenes, Shapes, Geometries
Arguments:
-
arg0
list | plantgl.Shape | plantgl.Scene: a list of shapes or scenes or a single object -
position
tuple (float, float, float): x, y, z position of arg0 (default (0, 0, 0)) -
scale
float: scale factor for arg0 (default 1) -
size_display
tuple (int, int): width and height of the canvas (minimum 400) -
size_world
float: extend on the 3D scene in all directions
Example:
from openalea.plantgl.all import Scene, Sphere
from pgljupyter import SceneWidget
s = Scene([Sphere()])
sw = SceneWidget(s)
sw
Tutorial:
- Display of spheres @nbviewer
LsystemWidget
Renderer for lpy.Lstrings derived from lpy.Lsystem code
Arguments:
-
arg0
string: file name / path of lpy code file -
unit
string enum: the unit used in the Lsystem model ('m', 'dm', 'cm', 'mm', default 'm') -
scale
float: scale factor for arg0 (default 1) -
animate
bool: ifTrue
runs animation automatically -
size_display
tuple (int, int): width and height of the canvas (minimum 400) -
size_world
float: extend on the 3D scene in all directions
Important property/methods:
-
editor
: display an editor of the graphical parameters -
get_lstring(self)
: return the lstring corresponding to the current step of the simulation display in the widget. -
get_namespace(self)
: return the namespace of variables of the simulation
Example:
from pgljupyter import LsystemWidget
lw = LsystemWidget('myfile.lpy')
lw
lw.editor
Tutorial:
- Display of the simulation of a lpy file : @nbviewer
%%lpy
A cell magic to inline L-Py code in a notebook
Arguments:
-
--size
,-s
int,int: same assize_display
-
--world
,-w
float: same assize_world
-
--unit
,-u
enum: same asunit
-
--params
,-p
LsystemParameters: name of LsystemParameters instance -
--animate
,-a
True: runs animation automatically
Example:
# activated by importing pgljupyter
import pgljupyter
%%lpy -u cm
from openalea.plantgl.all import *
Axiom: ;(1)+(10)_(2)F(10);(0)@g(Paraboloid(10,10,2,False))
derivation length: 100
production:
F(x) --> F(x+0.2)
@g(p) --> @g(Paraboloid(p.radius + 0.15, p.height + 0.2, 2, False))
_(x) --> _(x+0.02)
Example with graphical parameters:
# activated by importing pgljupyter
import pgljupyter
from openalea.lpy.lsysparameters import LsystemParameters
lp = LsystemParameters()
lp.add_scalar(name='a', value=1, minvalue=0, maxvalue=100)
lp.add_function(name='b') # default graphical function created
%%lpy -p lp
Axiom: SetGuide(b,a)F(a)
Tutorials:
- simple L-systems @nbviewer
- graphical scalar parameters - broccoli @nbviewer
- graphical curve parameters - sweep surface @nbviewer
%lpy_plot
A line magic to plot all derivation steps of an Lsystem on a square plane
Arguments:
-
arg0
, string: L-Py file -
--size
,-s
int,int: width and hight of the canvas -
--cell
,-c
float: size of cell for a single derivation step
Example:
# activated by importing pgljupyter
import pgljupyter
%lpy_plot myfile.lpy
Tutorial:
- Display of the simulation from a lpy file :@nbviewer
Installation
Install with pip - inside conda env
Building JupyterLab extensions requires nodejs. In case it is not available on your system add nodejs
to the
conda create
command. Some examples also require matplotlib
, xarray-simlab
and rpy2
.
conda create -y -n pgl -c fredboudon -c conda-forge \
openalea.lpy jupyterlab ipywidgets ipython=7 pip
conda activate pgl
jupyter labextension install @jupyter-widgets/jupyterlab-manager
pip install pgljupyter
Build, install and run from source
- install lpy, plantgl, jupyterlab, widgets and widgetsextension
conda create -y -n pgl -c fredboudon -c conda-forge openalea.lpy jupyterlab ipywidgets
conda activate pgl
jupyter labextension install --no-build @jupyter-widgets/jupyterlab-manager
- install emsdk: https://emscripten.org/docs/getting_started/downloads.html
git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
./emsdk install 2.0.20
./emsdk activate 2.0.20
source ./emsdk_env.sh
cd ..
- get pgljupyter source
git clone https://github.com/jvail/plantgl-jupyter.git
cd plantgl-jupyter
- fetch plantgl and install pgljs deps
git submodule update --init --recursive
cd src/pgljs
npm install
cd ../..
- install pgljupyter deps and build (requires activation of emsdk i.e. source ./emsdk_env.sh)
npm install
npm run build:all
- install python modules and jupyter extensions
pip install -e .
jupyter nbextension install --sys-prefix --overwrite --py pgljupyter
jupyter nbextension enable --sys-prefix --py pgljupyter
jupyter labextension install .
jupyter lab clean
- run the lab
jupyter lab --notebook-dir=./examples
Docker
Run jupyter as docker container locally. Replace /examples
with the path to your notebooks.
Tag latest
might not always be up-to-date since docker is primarily used for binder
docker pull jvail/plantgl-jupyter:1.1.0
docker run --rm \
-p 8888:8888 \
-v $PWD/examples:/home/jovyan/work jvail/plantgl-jupyter:1.1.0 \
jupyter lab