A new submodule called sympy.modules.graphing.scene makes this possible by providing a high-level rendering abstraction on top of OpenGL through the Scene class. A Scene handles the boilerplate OpenGL setup and teardown code. It also maintains a list of objects to be rendered, which are represented by objects which implement the Renderable interface. Renderable is a base class providing the render() function, which retrieves the object's primitive representation for rendering. This representation is something that OpenGL can render directly, such as a line list or a tri strip.

For example, consider the Renderable called CartesianCurve, which represents a plane curve in the form y = f(x); when CartesianCurve's render() function is called by a Scene which contains it, it returns a representative list of coordinate pairs, which are then used to render an OpenGL line list. The various other types of plots will be implemented as subclasses of Renderable in the same way. Here are some examples of possible constructor syntax for function plot Renderables:

# y = f(x)

CartesianCurve( x**3, [x, -10, 10, 20] )

# x = f(t), y = f(t)

ParametricCurve( cos(t), sin(t), [t, 0, 2*pi, 32] )

# r = f(theta)

PolarCurve( t, [t, 0, 2*pi, 32] )

# z = f(x, y)

CartesianSurface( x**2+y**2, [x, -1, 1, 5], [y, -1, 1, 5] )

# radius = f(z, theta)

CylindricalShell( 1.0, [z, 0, 1, 2], [t, 0, 2*pi, 32] )

CylindricalShell( t*sqrt(z), [z, 0, 1, 2] )

# radius = f(theta, rho)

SphericalShell( 1.0, [t], [p] )

## 2 comments:

Yes, I think that is a good idea. Let me know, when you implement it and I'll test it. :)

Also let me know, if you have any problems with getting the opengl to work.

Ondrej

Sounds good, I'll keep you up to date!

Post a Comment