Dear admin,
I'd like to create a new project at common-lisp.net. I am developing cells-ode, a clos abstraction layer for Thomas Atkins' cl-ode [1] using Ken Tilton's cells [2]. The license is LLGPL [3]. The purpose is to treat ODE objects just like clos objects with cells' data flow extensions.
I wrote pretty much the entire code myself, thanks go to Ken Tilton for invaluable advice and debugging.
My clnet user name is phildebrandt. I suggest to make Ken Tilton (cc'd) a project member.
cells-ode has been tested on SBCL/Linux (by me) and ACL/Windows (by Ken Tilton). It does not use implementation specific extensions, so it should be straightforward to port to other implementations. The dependencies are cl-ode (asdf-install, 0.8), cells (CVS, 3.0), and cffi (asdf-install, 0.9.2 or 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.
Currently the source can be found in the cells CVS on common-lisp.net:
http://common-lisp.net/cgi-bin/viewcvs.cgi/cells-ode/?root=cells
In the following I will give a few usage examples taken from test-c-ode.lisp [4]. For example, to create a sphere object with a corresponding mass, you might say:
(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-ode
Attaching a joint to body1 and body2 is straightforward, too:
(make-instance 'hinge-joint :md-name :joint :axis #(0 1 0) :anchor #(10 1.2 .5)) (attach (obj :joint) (obj :body1) (obj :body2)) ;; (obj :name) references objects by their md-name.
Thanks in advance,
Peter
---------- [1] http://common-lisp.net/project/cl-ode/ [2] http://common-lisp.net/project/cells/ [3] http://opensource.franz.com/preamble.html [4] http://common-lisp.net/cgi-bin/viewcvs.cgi/cells-ode/test-c-ode.lisp?rev=1.4...