Author: ArcRiley
Date: 2008-05-15 18:19:30 -0400 (Thu, 15 May 2008)
New Revision: 1257

Modified:
   trunk/pysoy/include/soy.bodies.pxd
   trunk/pysoy/include/soy.models.pxd
   trunk/pysoy/setup.py
   trunk/pysoy/src/bodies/Body.pym
   trunk/pysoy/src/bodies/Camera.pym
   trunk/pysoy/src/bodies/Light.pym
   trunk/pysoy/src/bodies/__init__.pym
   trunk/pysoy/src/fields/Buoyancy.pym
   trunk/pysoy/src/models/Liquid.pym
   trunk/pysoy/src/models/Mesh.pym
   trunk/pysoy/src/models/Model.pym
   trunk/pysoy/src/models/Shape.pym
Log:
Ticket #901 :
  * upgrade to Pyrex 0.9.8
  * implement cyclic cimport fix in bodies
  * update API respectively, removing redundant typecasts
  * nogil: in use for bodies


Modified: trunk/pysoy/include/soy.bodies.pxd
===================================================================
--- trunk/pysoy/include/soy.bodies.pxd  2008-05-15 17:35:45 UTC (rev 1256)
+++ trunk/pysoy/include/soy.bodies.pxd  2008-05-15 22:19:30 UTC (rev 1257)
@@ -19,12 +19,20 @@
 
 cimport ode
 cimport soy._datatypes
+cimport soy._internals
+cimport soy.models
+cimport soy.scenes
+cimport soy.shapes
 
+cdef class soy.models.Model
+cdef class soy.scenes.Scene (soy._internals.Loopable)
+cdef class soy.shapes.Shape
+
 cdef class Body :
   cdef ode.dBodyID              _bodyID
-  cdef void*                    _scene
-  cdef void*                    _model
-  cdef void*                    _shape
+  cdef soy.scenes.Scene         _scene
+  cdef soy.models.Model         _model
+  cdef soy.shapes.Shape         _shape
   cdef soy._datatypes.HashTable _tags
   cdef ode.dMass                _mass
   cdef ode.dReal*               _position
@@ -42,10 +50,10 @@
   cdef void                     _copyFrom                ( self, ode.dReal* )
   cdef void                     _addForce                ( self, ode.dVector3 )
   # WindowLoop functions
-  cdef void                     _render                  ( self )
-  cdef void                     _coreCreateVertFogCoords ( self )
-  cdef void                     _getModelview            ( self, float* )
-  cdef void                     _getModelviewInv         ( self, float* )
+  cdef void                     _render                  ( self )         nogil
+  cdef void                     _calcFogCoords           ( self )         nogil
+  cdef void                     _getModelview            ( self, float* ) nogil
+  cdef void                     _getModelviewInv         ( self, float* ) nogil
 
 
 cdef class Camera (Body) :
@@ -54,7 +62,7 @@
   cdef int                      _rpt
   cdef double                   _rtimes[16]
   # WindowLoop functions
-  cdef void                     _project                 ( self )
+  cdef void                     _project                 ( self )         nogil
 
 
 cdef class Light (Body) :
@@ -63,5 +71,5 @@
   cdef object                   _diffuse
   cdef object                   _specular
   # WindowLoop functions
-  cdef void                     _on                      ( self, int )
-  cdef void                     _off                     ( self, int )
+  cdef void                     _on                      ( self, int )    nogil
+  cdef void                     _off                     ( self, int )    nogil

Modified: trunk/pysoy/include/soy.models.pxd
===================================================================
--- trunk/pysoy/include/soy.models.pxd  2008-05-15 17:35:45 UTC (rev 1256)
+++ trunk/pysoy/include/soy.models.pxd  2008-05-15 22:19:30 UTC (rev 1257)
@@ -31,6 +31,7 @@
   #
   # WindowLoop functions
   cdef void                         _render        ( self, void* )
+  cdef void                         _calcFogCoords ( self, float )
 
 
 cdef class Mesh (Model) :
@@ -71,5 +72,5 @@
   cdef soy.colors.Color             _color
   #
   # WindowLoop functions
-  cdef void                         _renderSurf   ( self )
-  cdef void                         _renderBottom ( self )
+  cdef void                         _renderSurf    ( self )
+  cdef void                         _renderBottom  ( self )

Modified: trunk/pysoy/setup.py
===================================================================
--- trunk/pysoy/setup.py        2008-05-15 17:35:45 UTC (rev 1256)
+++ trunk/pysoy/setup.py        2008-05-15 22:19:30 UTC (rev 1257)
@@ -26,10 +26,8 @@
 from distutils.extension import Extension
 from Pyrex.Compiler import Main
 
-if (Main.Version.version <  '0.9.6.4' or 
-    Main.Version.version == '0.9.7'   or 
-    Main.Version.version == '0.9.7.1' ) :
-  raise SystemError('Pyrex version 0.9.6.4 or >=0.9.7.2 is required.')
+if Main.Version.version < '0.9.8' :
+  raise SystemError('Pyrex version 0.9.8 is required.')
 
 version = 'Trunk'
 modules = {

Modified: trunk/pysoy/src/bodies/Body.pym
===================================================================
--- trunk/pysoy/src/bodies/Body.pym     2008-05-15 17:35:45 UTC (rev 1256)
+++ trunk/pysoy/src/bodies/Body.pym     2008-05-15 22:19:30 UTC (rev 1257)
@@ -35,23 +35,22 @@
                 *args, **keywords) :
     #
     # Preset to avoid threading bugs
-    self._model = NULL
-    self._shape = NULL
+    self._model = None
+    self._shape = None
     self._tags  = soy._datatypes.HashTable()
     #
     if scene == None :
       self._copySet(<ode.dReal*> py.PyMem_Malloc(sizeof(float) * 25))
       self._bodyID = NULL
-      self._scene  = NULL
+      self._scene  = None
     elif isinstance(scene, soy.scenes.Scene) :
-      (<soy.scenes.Scene> scene)._stepLock()
-      py.Py_INCREF(scene)
-      self._scene = <void*> scene
+      self._scene = scene
+      self._scene._stepLock()
       self._create()
-      (<soy.scenes.Scene> scene)._bodies._append(<void*> self)
-      (<soy.scenes.Scene> scene)._stepUnLock()      
+      self._scene._bodies._append(<void*> self)
+      self._scene._stepUnLock()      
     else :
-      self._scene    = NULL
+      self._scene    = None
       self._position = NULL
       raise TypeError('scene must be instance of soy.scenes.Scene or None')
     #
@@ -67,19 +66,14 @@
 
 
   def __dealloc__(self) :
-    if self._bodyID != NULL :
-      (<soy.scenes.Scene> self._scene)._stepLock()
+    if self._scene is not None :
+      self._scene._stepLock()
       self._remove()
       self._destroy()
-      (<soy.scenes.Scene> self._scene)._stepUnLock()
-      py.Py_DECREF(<soy.scenes.Scene> self._scene)
+      self._scene._stepUnLock()
     elif self._position != NULL :
       # If not in a scene and local storage alloc'ed, free it
       py.PyMem_Free(self._position)
-    #
-    # cleanup _model
-    if self._model != NULL :
-      py.Py_DECREF(<soy.models.Model> self._model)
 
     
   def distance(self, Body myBody) :
@@ -91,7 +85,7 @@
     cdef ode.dGeomID _ray
     cdef ode.dContactGeom cg[10]
     cdef ode.dSpaceID _spaceID
-    _spaceID = (<soy.scenes.Scene> self._scene)._spaceID  
+    _spaceID = self._scene._spaceID  
     _ray = ode.dCreateRay(_spaceID,1000)
     ode.dGeomRaySet(_ray,
                     self._position[0], self._position[1], self._position[2],
@@ -120,52 +114,51 @@
     orientation, velocity, and rotation are all reset to (0,0,0).
     '''
     def __get__(self) :
-      return <soy.scenes.Scene> self._scene
+      return self._scene
     #
     def __set__(self, soy.scenes.Scene _newscene) :
       cdef ode.dReal   _store[25]
       cdef ode.dGeomID _geomID
       #
       # Preset _geomID for speed
-      if self._shape == NULL :
+      if self._shape is None :
         _geomID = NULL
       else :
-        _geomID = (<soy.shapes.Shape> self._shape)._geomID
-      if self._bodyID != NULL :
-        (<soy.scenes.Scene> self._scene)._stepLock()
+        _geomID = self._shape._geomID
+      if self._scene is not None :
+        self._scene._stepLock()
         self._copyTo(_store)
         self._remove()
         self._destroy()
-        if _geomID != NULL :
-          ode.dGeomSetBody(_geomID, NULL)
-          ode.dSpaceRemove((<soy.scenes.Scene> self._scene)._spaceID, _geomID)
-        (<soy.scenes.Scene> self._scene)._stepUnLock()
-        py.Py_DECREF(<soy.scenes.Scene> self._scene)
+        if self._shape is not None :
+          ode.dGeomSetBody(self._shape._geomID, NULL)
+          ode.dSpaceRemove(self._scene._spaceID, self._shape._geomID)
+        self._scene._stepUnLock()
       else :
         self._copyTo(_store)
         py.PyMem_Free(self._position)
-      py.Py_INCREF(_newscene)
-      self._scene = <void*> _newscene
-      (<soy.scenes.Scene> self._scene)._stepLock()
-      self._create()
-      if _geomID != NULL :
-        ode.dGeomSetBody(_geomID, self._bodyID)
-        ode.dSpaceAdd((<soy.scenes.Scene> self._scene)._spaceID, _geomID)
-      self._copyFrom(_store)
-      self._append()
-      (<soy.scenes.Scene> self._scene)._stepUnLock()
+      self._scene = _newscene
+      if self._scene is not None :
+        self._scene._stepLock()
+        self._create()
+        if self._shape is not None :
+          ode.dGeomSetBody(self._shape._geomID, self._bodyID)
+          ode.dSpaceAdd(self._scene._spaceID, self._shape._geomID)
+        self._copyFrom(_store)
+        self._append()
+        self._scene._stepUnLock()
     #
     def __del__(self) :
       cdef ode.dReal* _store
-      if self._scene == NULL :
+      if self._scene is None :
         return
       _store = <ode.dReal*> py.PyMem_Malloc(sizeof(float) * 25)
-      (<soy.scenes.Scene> self._scene)._stepLock()
+      self._scene._stepLock()
       self._copyTo(_store)
       self._remove()
       self._destroy()
       self._copySet(_store)
-      (<soy.scenes.Scene> self._scene)._stepUnLock()
+      self._scene._stepUnLock()
 
 
   property tags :
@@ -216,10 +209,10 @@
         raise TypeError('Must provide a tuple, list, or 
soy._datatype.BodyPosition')
       if len(value)!=3 :
         raise TypeError('Must provide (x,y,z)')
-      if self._bodyID != NULL :
-        (<soy.scenes.Scene> self._scene)._stepLock()
+      if self._scene is not None :
+        self._scene._stepLock()
         ode.dBodySetPosition(self._bodyID, value[0], value[1], value[2])
-        (<soy.scenes.Scene> self._scene)._stepUnLock()
+        self._scene._stepUnLock()
       else :
         self._position[0] = value[0]
         self._position[1] = value[1]
@@ -239,10 +232,10 @@
         raise TypeError('Must provide a tuple or list')
       if len(value)!=3 :
         raise TypeError('Must provide (x,y,z)')
-      if self._bodyID != NULL :
-        (<soy.scenes.Scene> self._scene)._stepLock()
+      if self._scene is not None :
+        self._scene._stepLock()
         ode.dBodySetAngularVel(self._bodyID, value[0], value[1], value[2])
-        (<soy.scenes.Scene> self._scene)._stepUnLock()
+        self._scene._stepUnLock()
       else :
         self._angularVel[0] = value[0]
         self._angularVel[1] = value[1]
@@ -262,10 +255,10 @@
         raise TypeError('Must provide a tuple or list')
       if len(value)!=3 :
         raise TypeError('Must provide (x,y,z)')
-      if self._bodyID != NULL :
-        (<soy.scenes.Scene> self._scene)._stepLock()
+      if self._scene is not None :
+        self._scene._stepLock()
         ode.dBodySetLinearVel(self._bodyID, value[0], value[1], value[2])
-        (<soy.scenes.Scene> self._scene)._stepUnLock()
+        self._scene._stepUnLock()
       else :
         self._linearVel[0] = value[0]
         self._linearVel[1] = value[1]
@@ -279,31 +272,16 @@
     Defaults to None.
     '''
     def __get__(self) :
-      if self._model == NULL :
-        return None
-      return <soy.models.Model> self._model
+      return self._model
 
     def __set__(self, _model) :
-      if _model == None :
-        del(self.model)
-      elif isinstance(_model, soy.models.Model) :
-        del(self.model)
-        # renderlock
-        self._model = <void*> _model
-        py.Py_INCREF(<soy.models.Model> self._model)
-        # renderunlock
-      else :
+      if not (_model is None or isinstance(_model, soy.models.Model)) :
         raise TypeError('must be an instance of soy.models.Model')
-
-    def __del__(self) :
-      if self._model == NULL :
-        return
       # renderlock
-      py.Py_DECREF(<soy.models.Model> self._model)
-      self._model = NULL
+      self._model = _model
       # renderunlock
- 
 
+
   property shape :
     '''Body's shape, if it has one.
     
@@ -311,87 +289,94 @@
     Defaults to None.
     '''
     def __get__(self) :
-      if self._shape == NULL :
-        return None
-      return <soy.shapes.Shape> self._shape
+      return self._shape
 
     def __set__(self, value) :
-      cdef ode.dBodyID      _bodyID
-      cdef ode.dGeomID      _geomID
-      cdef soy.scenes.Scene _scene
-      if not isinstance(value, soy.shapes.Shape) and value != None :
-        raise TypeError('Requires a Shape')
+      cdef ode.dBodyID _bodyID
       #
-      # If this body already has a shape, delete it now
-      del(self.shape)
+      ####################################
       #
-      # If we're setting the value to None, we're done now.
-      if value == None :
-        return
+      # Standard Typecheck
       #
-      # Preset these values for speed
-      _geomID = (<soy.shapes.Shape> value)._geomID
-      _bodyID = <ode.dBodyID> ode.dGeomGetBody(_geomID)
+      if not isinstance(value, soy.shapes.Shape) and value is not None :
+        raise TypeError('Requires a Shape or None')
       #
-      # If this shape is already attached, detach it first
-      if _bodyID != NULL :
-        del((<Body> ode.dBodyGetData(_bodyID)).shape)
+      ####################################
       #
-      # Only bother with the rest of this if we're in a scene
-      if self._bodyID != NULL :
-        _scene = <soy.scenes.Scene> self._scene
-        _scene._stepLock()
-        ode.dSpaceAdd(_scene._spaceID, _geomID)
-        ode.dGeomSetBody(_geomID, self._bodyID)
+      # if in a scene, lock it and remove any current shape
+      #
+      if self._scene is not None :
+        self._scene._stepLock()
+        if self._shape is not None :
+          ode.dSpaceRemove(self._scene._spaceID, self._shape._geomID)
+          ode.dGeomSetBody(self._shape._geomID, NULL)
       # 
-      # Because self._shape is void* we handle INCREF/DECREF ourselves
-      self._shape = <void*> value
-      py.Py_INCREF(<soy.shapes.Shape> self._shape)
+      ####################################
       #
-      # If we're in a scene, unlock before we return
-      if self._bodyID != NULL :
-        _scene._stepUnLock()
-
-    def __del__(self) :
-      cdef ode.dGeomID      _geomID
-      cdef soy.scenes.Scene _scene
+      # Assign shape and, if it's an actual shape, detach/attach it
       #
-      # We cannot delete a non-existant shape
-      if self._shape == NULL :
-        return
+      self._shape = value
+      if self._shape is not None :
+        #
+        ##################################
+        #
+        # if the new shape is already attached, detach it
+        #
+        _bodyID = <ode.dBodyID> ode.dGeomGetBody(self._shape._geomID)
+        if _bodyID != NULL :
+          (<Body> ode.dBodyGetData(_bodyID)).shape = None
+        #
+        ##################################
+        #
+        # if we're in a scene, add geom to it's space
+        #
+        if self._scene is not None :
+          ode.dSpaceAdd(self._scene._spaceID, self._shape._geomID)
+          ode.dGeomSetBody(self._shape._geomID, self._bodyID)
+        #      
+        ##################################
+      # 
+      ####################################
       #
-      # Here's to cleaner code
-      _geomID = (<soy.shapes.Shape> self._shape)._geomID
+      # if we're in a scene, unlock before we return
       #
-      # Only bother with the rest of this if we're in a scene
-      if self._bodyID != NULL :
-        _scene = <soy.scenes.Scene> self._scene
-        _scene._stepLock()
-        ode.dSpaceRemove(_scene._spaceID, _geomID)
-        ode.dGeomSetBody(_geomID, NULL)
+      if self._scene is not None :
+        self._scene._stepUnLock()
       # 
-      # Because self._shape is void* we handle INCREF/DECREF ourselves
-      py.Py_DECREF(<soy.shapes.Shape> self._shape)
-      self._shape = NULL
-      #
-      # If we're in a scene, unlock before we return
-      if self._bodyID != NULL :
-        _scene._stepUnLock()
+      ####################################
 
+
   ##########################################################################
   #
   # C Functions
   #
 
   cdef void _create(self) :
-    self._bodyID = ode.dBodyCreate((<soy.scenes.Scene> self._scene)._worldID)
+    #
+    # This function allows custom _create functions to be used by the classes
+    # which inherit Body.
+    #
+    ######################################
+    #
+    # Create a new ODE body and put a pointer to self in it's data storage
+    # The data pointer to self allows Scene stepping functions (ie, collision)
+    # to quickly access the Python object associated with a given Body.
+    #    
+    self._bodyID = ode.dBodyCreate(self._scene._worldID)
     ode.dBodySetData(self._bodyID, <void*> self)
+    #
+    ######################################
+    #
+    # get local pointers to ODE body states so we can access them directly
+    #
     ode.dBodyGetMass(self._bodyID, &self._mass)
     self._position   = <ode.dReal*> ode.dBodyGetPosition  (self._bodyID)
     self._rotation   = <ode.dReal*> ode.dBodyGetRotation  (self._bodyID)
     self._quaternion = <ode.dReal*> ode.dBodyGetQuaternion(self._bodyID)
     self._linearVel  = <ode.dReal*> ode.dBodyGetLinearVel (self._bodyID)
     self._angularVel = <ode.dReal*> ode.dBodyGetAngularVel(self._bodyID)
+    #
+    ######################################
 
 
   cdef void _destroy(self) :
@@ -400,11 +385,23 @@
 
 
   cdef void _append(self) :
-    (<soy.scenes.Scene> self._scene)._bodies._append(<void*> self)
+    #
+    # This function allows classes which inherit Body to use a different
+    # _append sequence, ie, Light also appends itself to self._scene._lights
+    #
+    self._scene._bodies._append(<void*> self)
+    #
+    ######################################
 
 
   cdef void _remove(self) :
-    (<soy.scenes.Scene> self._scene)._bodies._remove(<void*> self)
+    #
+    # This function allows classes which inherit Body to use a different
+    # _remove sequence, ie, Light also remove itself to self._scene._lights
+    #
+    self._scene._bodies._remove(<void*> self)
+    #
+    ######################################
 
 
   cdef void _copyTo(self, ode.dReal* _store) :
@@ -441,12 +438,13 @@
     ode.dBodySetLinearVel (self._bodyID,  _store[19], _store[20], _store[21])
     ode.dBodySetAngularVel(self._bodyID,  _store[22], _store[23], _store[24])
 
+
   cdef void _addForce(self, ode.dVector3 _vector) :
-    if self._bodyID == NULL :
+    if self._scene is None :
       raise UnboundLocalError('Body is not in a scene')
-    (<soy.scenes.Scene> scene)._stepLock()
+    self._scene._stepLock()
     ode.dBodyAddForce(self._bodyID, _vector[0], _vector[1], _vector[2])
-    (<soy.scenes.Scene> scene)._stepUnLock()
+    self._scene._stepUnLock()
 
 
   ##########################################################################
@@ -454,25 +452,23 @@
   # WindowLoop Functions
   #
 
-  cdef void _render(self) :
+  cdef void _render(self) nogil :
     cdef gl.GLfloat _mtx[16]
-    if self._model == NULL :
+    if self._model is None :
       return
     self._getModelview(_mtx)
     gl.glPushMatrix()
     gl.glMultMatrixf(_mtx)
-    (<soy.models.Model> self._model)._render(<void*> self)
+    self._model._render(<void*> self)
     gl.glPopMatrix()
 
 
-  cdef void _coreCreateVertFogCoords(self):
-    cdef soy._datatypes.VertexList _verts
-    if self._model == NULL :
-      return
-    _verts = (<soy.models.Model> self._model)._verts
-    _verts._uploadFogCoord( <float> self._position[1] )
-      
-  cdef void _getModelview(self, float* _mtx):
+  cdef void _calcFogCoords(self) nogil :
+    if self._model is not None :
+      self._model._calcFogCoords(<float> self._position[1])
+
+
+  cdef void _getModelview(self, float* _mtx) nogil :
     _mtx[0]  = self._rotation[0]
     _mtx[1]  = self._rotation[4]
     _mtx[2]  = self._rotation[8]
@@ -490,7 +486,8 @@
     _mtx[14] = self._position[2]
     _mtx[15] = 1.0
 
-  cdef void _getModelviewInv(self, float* _mtx):
+
+  cdef void _getModelviewInv(self, float* _mtx) nogil :
     _mtx[0]  = self._rotation[0]
     _mtx[4]  = self._rotation[4]
     _mtx[8]  = self._rotation[8]

Modified: trunk/pysoy/src/bodies/Camera.pym
===================================================================
--- trunk/pysoy/src/bodies/Camera.pym   2008-05-15 17:35:45 UTC (rev 1256)
+++ trunk/pysoy/src/bodies/Camera.pym   2008-05-15 22:19:30 UTC (rev 1257)
@@ -25,6 +25,10 @@
     other rendering class to be activated.
   '''
 
+  ##########################################################################
+  #
+  # Python Functions
+  #
 
   def __cinit__(self, scene=None,
                 position=None, rotation=None, velocity=None,
@@ -107,11 +111,11 @@
   # WindowLoop Functions
   #
 
-  cdef void _project(self) :  
+  cdef void _project(self) nogil :
     cdef gl.GLfloat  _mtx[16]
     #
     # Bail now if in the abyss
-    if self._bodyID == NULL :
+    if self._scene is None :
       return
     #
     # Check if wireframe mode is turned on
@@ -149,7 +153,7 @@
     _mtx[15] = 1.0
     gl.glLoadMatrixf(_mtx)
     gl.glTranslatef(-self._position[0], -self._position[1], -self._position[2])
-    (<soy.scenes.Scene> self._scene)._render()
+    self._scene._render()
     #
     # Framerate calc
     self._rpt = (self._rpt + 1) % 16

Modified: trunk/pysoy/src/bodies/Light.pym
===================================================================
--- trunk/pysoy/src/bodies/Light.pym    2008-05-15 17:35:45 UTC (rev 1256)
+++ trunk/pysoy/src/bodies/Light.pym    2008-05-15 22:19:30 UTC (rev 1257)
@@ -35,7 +35,8 @@
     self.ambient  = ambient
     self.diffuse  = diffuse
     self.specular = specular
-    (<soy.scenes.Scene> self._scene)._lights._append(<void*> self)
+    if self._scene is not None :
+      self._scene._lights._append(<void*> self)
 
 
   ############################################################################
@@ -103,13 +104,23 @@
   #
 
   cdef void _append(self) :
-    (<soy.scenes.Scene> self._scene)._bodies._append(<void*> self)
-    (<soy.scenes.Scene> self._scene)._lights._append(<void*> self)
+    #
+    # this overrides Body._append to also append self to self._scene._lights 
+    #
+    self._scene._bodies._append(<void*> self)
+    self._scene._lights._append(<void*> self)
+    #
+    ######################################
 
 
   cdef void _remove(self) :
-    (<soy.scenes.Scene> self._scene)._bodies._remove(<void*> self)
-    (<soy.scenes.Scene> self._scene)._lights._remove(<void*> self)
+    #
+    # this overrides Body._remove to also remove self from self._scene._lights 
+    #
+    self._scene._bodies._remove(<void*> self)
+    self._scene._lights._remove(<void*> self)
+    #
+    ######################################
 
 
   ############################################################################
@@ -117,7 +128,7 @@
   # WindowLoop Functions
   #
 
-  cdef void _on(self, int _id) :
+  cdef void _on(self, int _id) nogil :
     cdef gl.GLfloat _position[4]
     #
     # we do this only because glLightfv takes four parameters
@@ -144,5 +155,5 @@
       # gl.glLightfv(_id, gl.GL_SPOT_DIRECTION, [[direction, as per Body]])
 
 
-  cdef void _off(self, int _id) :
+  cdef void _off(self, int _id) nogil :
     gl.glDisable(_id)

Modified: trunk/pysoy/src/bodies/__init__.pym
===================================================================
--- trunk/pysoy/src/bodies/__init__.pym 2008-05-15 17:35:45 UTC (rev 1256)
+++ trunk/pysoy/src/bodies/__init__.pym 2008-05-15 22:19:30 UTC (rev 1257)
@@ -35,8 +35,4 @@
 cimport gl
 cimport py
 cimport stdio
-cimport soy._internals
 cimport soy.colors
-cimport soy.models
-cimport soy.scenes
-cimport soy.shapes

Modified: trunk/pysoy/src/fields/Buoyancy.pym
===================================================================
--- trunk/pysoy/src/fields/Buoyancy.pym 2008-05-15 17:35:45 UTC (rev 1256)
+++ trunk/pysoy/src/fields/Buoyancy.pym 2008-05-15 22:19:30 UTC (rev 1257)
@@ -40,7 +40,7 @@
   cdef void _give(self, int _ccycle) :
     cdef int _i
     cdef soy.bodies.Body _otherBody
-    if (self._shape != NULL) ^ (_ccycle == 0) :
+    if (self._shape is not None) ^ (_ccycle == 0) :
       self._affected._iterStart()
       for _i from 0 <= _i < self._affected._current :
         _otherBody = <soy.bodies.Body> self._affected._list[_i]
@@ -50,28 +50,26 @@
 
   cdef int _exert(self, soy.bodies.Body _otherBody) :
     cdef float _radius, _submersion
-    cdef soy.shapes.Shape _otherShape
     ode.dBodyGetMass(_otherBody._bodyID, &_otherBody._mass)
     #
     # Volume-less bodies are not affected
-    if _otherBody._shape == NULL :
+    if _otherBody._shape is None :
       return 0
-    _otherShape = <soy.shapes.Shape> _otherBody._shape
-    if _otherShape._volume() == 0 :
+    if _otherBody._shape._volume() == 0 :
       return 0
     if self._shape :
       # Shaped fields partially submerge shapes
-      _radius = _otherShape._radius() 
-      _submersion = ((<soy.shapes.Shape> self._shape)._pointDepth(
-                      _otherShape._position[0],
-                      _otherShape._position[1],
-                      _otherShape._position[2])
+      _radius = _otherBody._shape._radius() 
+      _submersion = (self._shape._pointDepth(
+                      _otherBody._shape._position[0],
+                      _otherBody._shape._position[1],
+                      _otherBody._shape._position[2])
                     + radius) / (radius * 2)
     else :
       # Universal fields fully submerge all shapes
       _submersion = 1
     _otherBody._tags._insert("bmass", _otherBody._mass.mass - submersion
-                                      * _otherShape._volume()
+                                      * _otherBody._shape._volume()
                                       * self._density)
     self._affected._append(<void*> other)
     return 1

Modified: trunk/pysoy/src/models/Liquid.pym
===================================================================
--- trunk/pysoy/src/models/Liquid.pym   2008-05-15 17:35:45 UTC (rev 1256)
+++ trunk/pysoy/src/models/Liquid.pym   2008-05-15 22:19:30 UTC (rev 1257)
@@ -22,11 +22,11 @@
 
     This models class renders a liquid with volumetric fog
   '''
-
-  ############################################################################
-  #
-  # Python functions
-  #
+
+  ############################################################################
+  #
+  # Python functions
+  #
   
   def __cinit__(self, size=(1,1,1), color=None, material=None) :
     self._size[0] = size[0]
@@ -117,10 +117,8 @@
     _scene = <soy.scenes.Scene> (<soy.bodies.Body> _body)._scene
     for _i from 0 <= _i < _scene._bodies._current :
       if _body != (<void*> _scene._bodies._list[_i]) :
-        (<soy.bodies.Body>
-         _scene._bodies._list[_i])._coreCreateVertFogCoords()
-        (<soy.bodies.Body>
-         _scene._bodies._list[_i])._render()
+        (<soy.bodies.Body> _scene._bodies._list[_i])._calcFogCoords()
+        (<soy.bodies.Body> _scene._bodies._list[_i])._render()
     gl.glPopMatrix()
     gl.glDisableClientState(gl.GL_FOG_COORDINATE_ARRAY_EXT)
     gl.glDisable(gl.GL_FOG)

Modified: trunk/pysoy/src/models/Mesh.pym
===================================================================
--- trunk/pysoy/src/models/Mesh.pym     2008-05-15 17:35:45 UTC (rev 1256)
+++ trunk/pysoy/src/models/Mesh.pym     2008-05-15 22:19:30 UTC (rev 1257)
@@ -160,3 +160,6 @@
   # then rendered.
   #
   ############################################################################
+
+  cdef void _calcFogCoords(self, float _depth) :
+    self._verts._uploadFogCoord(_depth)

Modified: trunk/pysoy/src/models/Model.pym
===================================================================
--- trunk/pysoy/src/models/Model.pym    2008-05-15 17:35:45 UTC (rev 1256)
+++ trunk/pysoy/src/models/Model.pym    2008-05-15 22:19:30 UTC (rev 1257)
@@ -51,3 +51,7 @@
 
   cdef void _render(self, void* _body) :
     return
+
+  cdef void _calcFogCoords(self, float _depth) :
+    return
+

Modified: trunk/pysoy/src/models/Shape.pym
===================================================================
--- trunk/pysoy/src/models/Shape.pym    2008-05-15 17:35:45 UTC (rev 1256)
+++ trunk/pysoy/src/models/Shape.pym    2008-05-15 22:19:30 UTC (rev 1257)
@@ -61,11 +61,11 @@
     cdef int              _shapeclass
     #
     # Don't attempt to render a non-existant shape
-    if (<soy.bodies.Body> _body)._shape == NULL :
+    if (<soy.bodies.Body> _body)._shape is None :
       return
     #
     # Grab the body's shape
-    _shape = <soy.shapes.Shape> (<soy.bodies.Body> _body)._shape
+    _shape = (<soy.bodies.Body> _body)._shape
     _shapeclass = ode.dGeomGetClass(_shape._geomID)
     #
     # Bind the material

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

Reply via email to