[cells-cvs] CVS cells-ode

phildebrandt phildebrandt at common-lisp.net
Mon Jun 2 14:12:53 UTC 2008


Update of /project/cells/cvsroot/cells-ode
In directory clnet:/tmp/cvs-serv3184

Modified Files:
	joints.lisp test-c-ode.lisp 
Log Message:
attach joints by using slots body-1, body-2


--- /project/cells/cvsroot/cells-ode/joints.lisp	2008/06/01 20:26:49	1.4
+++ /project/cells/cvsroot/cells-ode/joints.lisp	2008/06/02 14:12:53	1.5
@@ -25,6 +25,8 @@
 (def-ode-model joint ()
   ((joint-type :type int :ode-slot type  :read-only t) ; returns one constant +ode:joint-type-...+
    (feedback-struct :ode nil :cell nil :initform (foreign-alloc 'ode:joint-feedback))
+   (body-1 :ode nil)
+   (body-2 :ode nil)
    (force-1 :ode nil)
    (torque-1 :ode nil)
    (force-2 :ode nil)
@@ -138,6 +140,15 @@
 (def-ode-method attach ((self joint) (body1 object) (body2 object)))
 (def-ode-method set-fixed ((self joint)))
 (def-ode-method get-body ((self joint) (index int)) object)
+
+(defobserver body-1 ((self joint))
+  (when (and new-value (^body-2))
+    (attach self new-value (^body-2))))
+
+(defobserver body-2 ((self joint))
+  (when (and new-value (^body-1))
+    (attach self (^body-1) new-value)))
+
 (defmethod bodies ((self joint))
   (list (get-body self 0) (get-body self 1)))
 
--- /project/cells/cvsroot/cells-ode/test-c-ode.lisp	2008/06/01 20:26:49	1.4
+++ /project/cells/cvsroot/cells-ode/test-c-ode.lisp	2008/06/02 14:12:53	1.5
@@ -55,11 +55,12 @@
   
   (make-instance 'body :md-name :body1 :position (c-in #(10 0 .5)) :mass (make-instance 'sphere-mass :mass 30))
   (make-instance 'geom-box :md-name :geom1 :size #(1 1 1) :body (obj :body1))
-  (make-instance 'body :md-name :body2 :position (c-in #(10 2 .5)) :mass (make-instance 'sphere-mass :mass .1))
-  (make-instance 'geom-box :md-name :geom2 :size #(.1 .1 .1) :body (obj :body2))
+  (make-instance 'body :md-name :body2 :position (c-in #(10.6 0 .5)) :mass (make-instance 'sphere-mass :mass .5))
+  (make-instance 'geom-box :md-name :geom2 :size #(.1 .5 .1) :body (obj :body2))
   
-  (make-instance 'hinge-joint :md-name :joint :axis #(0 1 0) :anchor #(10 1.2 .5))
-  (attach (obj :joint) (obj :body1) (obj :body2)))
+  (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))
+  ;   (attach (obj :joint) (obj :body1) (obj :body2))
+  )
 
 
 (defun tst-run (&key (diag nil) (step-size .01))




More information about the Cells-cvs mailing list