Cells-ode is a CLOS abstraction layer for Thomas Atkins' cl-ode using Ken Tilton's cells. The purpose is to treat ODE objects just like CLOS objects with cells' data flow extensions. cells-ode has been tested on SBCL/Linux and ACL/Windows. It does not use implementation specific extensions, so it should be straightforward to port to other implementations.
Cells-ode has been developed by Peter Hildebrandt. Thanks go to Ken Tilton for invaluable support.
The dependencies are cl-ode 0.8 (asdf-install), cells 3.0 from CVS, and cffi 0.9.2 (asdf-install) or from darcs.
cells-ode is a fairly complete mapping of ODE 0.8, lacking only a few advanced features. One of the highlights is fully transparent support for collision detection. Among the extensions planned for the near future are primitives for composite objects and a DSL for scene descriptions.
(make-instance 'body :md-name :body1 :position (c-in #(0 -1 1)) :mass (c-in (make-instance 'sphere-mass :radius (c-in .5)))) ;; Instead of about half a dozen ODE calls via cl-odeAttaching a joint to body1 and body2 is straightforward, too:
(make-instance 'body :md-name :body1 :position (c-in #(10 0 .5)) :mass (make-instance 'sphere-mass :mass 30)) (make-instance 'body :md-name :body2 :position (c-in #(10.6 0 .5)) :mass (make-instance 'sphere-mass :mass .5)) (make-instance 'hinge-joint :md-name :joint :axis #(1 0 0) :anchor #(10.5 0.5 .5) :body-1 (obj :body1) :body-2 (obj :body2)) ;; (obj :name) references objects by their md-name.
You can get the latest version via WebCVS. If you have a common-lisp.net account, you can also use CVS directly:
cvs -z3 -d :ext:<username>@common-lisp.net:/project/<project-name>/cvsroot co <module>Unfortunately anonymous CVS checkout appears to be broken. If you are feeling lucky, feel free to try:
cvs -z3 -d :pserver:anonymous:anonymous@common-lisp.net:/project/cells-ode/cvsroot co cells-ode
Back to Common-lisp.net.