Author: ArcRiley
Date: 2008-02-25 16:00:49 -0500 (Mon, 25 Feb 2008)
New Revision: 981

Modified:
   trunk/pysoy/src/_datatypes/VertexList.pxi
   trunk/pysoy/src/bodies._bodies/Body.pxi
   trunk/pysoy/src/bodies._bodies/Camera.pxi
   trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pxd
   trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pyx
   trunk/pysoy/src/shapes/Shape.pxi
Log:
#934 - this starts the ticket, but Trunk no longer builds (for now)


Modified: trunk/pysoy/src/_datatypes/VertexList.pxi
===================================================================
--- trunk/pysoy/src/_datatypes/VertexList.pxi   2008-02-25 19:44:38 UTC (rev 
980)
+++ trunk/pysoy/src/_datatypes/VertexList.pxi   2008-02-25 21:00:49 UTC (rev 
981)
@@ -217,7 +217,7 @@
 
     if _scene._lights.current > 0:
       _light = <soy.bodies.lights.Light> _scene._lights.list[0]
-      ode.dBodyCopyPosition(<ode.dBodyID> _light._bodyID, _light_pos)
+      _light_pos = &(<ode.dBodyID> _light._bodyID)._position
       _body._coreGetModelviewInv(_inv_mm)
 
       #vector by matrix multiplication by hand

Modified: trunk/pysoy/src/bodies._bodies/Body.pxi
===================================================================
--- trunk/pysoy/src/bodies._bodies/Body.pxi     2008-02-25 19:44:38 UTC (rev 
980)
+++ trunk/pysoy/src/bodies._bodies/Body.pxi     2008-02-25 21:00:49 UTC (rev 
981)
@@ -17,9 +17,6 @@
 #
 # $Id$
   
-cimport soy._datatypes
-cimport soy.meshes
-
 cdef class Body :
   '''PySoy Body
 
@@ -31,9 +28,6 @@
                 position=None, rotation=None, velocity=None,
                 mesh=None, shape=None,
                 *args, **keywords) :
-    self._quaternion[0] = 1.0
-    import soy.joints
-    
     if scene == None :
       pass
       #self._bodyID = NULL
@@ -50,24 +44,15 @@
     if shape :
       self.shape = shape
     self._tags = soy._datatypes.HashTable()
+    
 
 
   def __dealloc__(self) :
     del(self.scene)
     
   def distance(self, Body myBody) :
-    cdef ode.dVector3 a
-    cdef ode.dVector3 b
-    cdef ode.dReal dist
-    if self._scene != 0 and self._scene == myBody._scene:     
-      ode.dBodyCopyPosition(<ode.dBodyID> self._bodyID, a)
-      ode.dBodyCopyPosition(<ode.dBodyID> myBody._bodyID, b)
-      dist =ode.dDISTANCE(a,b)
-      return dist
-    #elif <void *> self._scene == NULL: # FAILS to catch
-    #  raise UnboundLocalError('Body is not in a scene')
-    elif self._scene != myBody._scene:
-      raise RuntimeError('Make sure that both Bodies are in the same Scene')
+    assert self._scene == myBody._scene, 'bodies are in different scenes'
+    return ode.dDISTANCE(self._position, myBody._position)
     
   def floor(self,Body floor) :
       cdef ode.dGeomID myray
@@ -101,9 +86,7 @@
         return self._scene
       else :
         return None
-    def __set__(self, newscene) :
-      if not (isinstance(newscene, soy.scenes.Scene) or newscene==None) :
-        raise TypeError('not an instance of soy.scenes.Scene')
+    def __set__(self, soy.scenes.Scene _newscene) :
       if self._isActive() :
         self._scene._bodies.lock()
         self._scene._bodies.remove(<void *>self)
@@ -114,12 +97,11 @@
             ode.dSpaceRemove(self._scene._spaceID, self._shape._geomID)
           ode.dSpaceAdd((<soy.scenes.Scene> newscene)._spaceID, 
                         self._shape._geomID)
-      if newscene != None :
-        self._scene = newscene
-        self._scene._bodies.lock()
-        self._create()
-        self._scene._bodies.append(<void *>self)
-        self._scene._bodies.unlock()
+      self._scene = _newscene
+      self._scene._bodies.lock()
+      self._create()
+      self._scene._bodies.append(<void *>self)
+      self._scene._bodies.unlock()
     def __del__(self) :
       if self._isActive() :
         self._scene._bodies.lock()
@@ -166,14 +148,7 @@
     Defaults to (0.0, 0.0, 0.0).
     '''
     def __get__(self) :
-      cdef ode.dVector3 xyz
-      if self._bodyID :
-        self._scene._stepLock()
-        ode.dBodyCopyPosition(self._bodyID, xyz)
-        self._scene._stepUnLock()
-        return (xyz[0], xyz[1], xyz[2])
-      else :
-        return (self._position[0], self._position[1], self._position[2])
+      return (self._position[0], self._position[1], self._position[2])
     def __set__(self, value) :
       if type(value)!=tuple and type(value)!=list :
         raise TypeError('Must provide a tuple or list')
@@ -289,10 +264,13 @@
     ode.dBodySetAngularVel(self._bodyID, self._angularVel[0],
                            self._angularVel[1], self._angularVel[2])
     ode.dBodyGetMass(self._bodyID, &self._mass)
+    self._position   = ode.dBodyGetPosition  (self._bodyID)
+    self._quaternion = ode.dBodyGetQuaternion(self._bodyID)
+    self._linearVel  = ode.dBodyGetLinearVel (self._bodyID)
+    self._angularVel = ode.dBodyGetAngularVel(self._bodyID)
 
   cdef void _destroy(self) :
     cdef ode.dReal *real
-    ode.dBodyCopyPosition(self._bodyID, self._position)
     ode.dBodyCopyQuaternion(self._bodyID, self._quaternion)
     real = <ode.dReal *>ode.dBodyGetLinearVel(self._bodyID)
     self._linearVel[0] = real[0]

Modified: trunk/pysoy/src/bodies._bodies/Camera.pxi
===================================================================
--- trunk/pysoy/src/bodies._bodies/Camera.pxi   2008-02-25 19:44:38 UTC (rev 
980)
+++ trunk/pysoy/src/bodies._bodies/Camera.pxi   2008-02-25 21:00:49 UTC (rev 
981)
@@ -79,7 +79,7 @@
     #
     # What is this for?  Framerate calc?
     self._rpt = (self._rpt + 1) % 16
-    self._rtimes[self._rpt] = _time()
+    self._rtimes[self._rpt] = soy._internals._time()
 
   property fps :
     def __get__(self) :

Modified: trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pxd
===================================================================
--- trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pxd       2008-02-25 
19:44:38 UTC (rev 980)
+++ trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pxd       2008-02-25 
21:00:49 UTC (rev 981)
@@ -16,11 +16,8 @@
 #  along with this program; if not, see http://www.gnu.org/licenses
 #
 # $Id$
-cimport gl
+
 cimport ode
-cimport py
-cimport stdio
-cimport soy._internals
 cimport soy._datatypes
 cimport soy.meshes
 cimport soy.scenes
@@ -33,10 +30,10 @@
   cdef soy.shapes.Shape         _shape
   # for loading/saving
   cdef ode.dMass                _mass
-  cdef ode.dVector3             _position
+  cdef ode.dReal*               _position
   cdef ode.dQuaternion          _quaternion
-  cdef ode.dReal                _linearVel[3]
-  cdef ode.dReal                _angularVel[3]
+  cdef ode.dReal*               _linearVel
+  cdef ode.dReal*               _angularVel
   cdef soy._datatypes.HashTable _tags
   # C functions
   cdef void                     _create(self)

Modified: trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pyx
===================================================================
--- trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pyx       2008-02-25 
19:44:38 UTC (rev 980)
+++ trunk/pysoy/src/bodies._bodies/soy.bodies._bodies.pyx       2008-02-25 
21:00:49 UTC (rev 981)
@@ -32,8 +32,10 @@
               'by '+'$Author$'[9:-2]
 __version__ = 'Trunk (r'+'$Rev$'[6:-2]+')'
 
-from soy._internals cimport _time
+cimport gl
+cimport py
+cimport soy._internals
+cimport soy.meshes
 
 include "Body.pxi"
 include "Camera.pxi"
-

Modified: trunk/pysoy/src/shapes/Shape.pxi
===================================================================
--- trunk/pysoy/src/shapes/Shape.pxi    2008-02-25 19:44:38 UTC (rev 980)
+++ trunk/pysoy/src/shapes/Shape.pxi    2008-02-25 21:00:49 UTC (rev 981)
@@ -38,14 +38,14 @@
   cdef float _volume(self) :
     return 0
 
-  cdef void _getcenter(self, ode.dVector3 xyz) :
+  cdef void _getcenter(self, ode.dVector3 _xyz) :
     cdef ode.dBodyID b
     if not self._geomID :
       raise RuntimeError('Not active')
     b = ode.dGeomGetBody(self._geomID)
     if b == NULL :
       raise RuntimeError('Not attached to a body')
-    ode.dBodyCopyPosition(b, xyz)
+    _xyz = b._position
 
   cdef float _radius(self) :
     return 0

_______________________________________________
PySoy-SVN mailing list
PySoy-SVN@pysoy.org
http://www.pysoy.org/mailman/listinfo/pysoy-svn

Reply via email to