Author: DavidCzech
Date: 2008-12-01 23:48:29 -0500 (Mon, 01 Dec 2008)
New Revision: 1385

Modified:
   trunk/pysoy/include/soy.models.pxd
   trunk/pysoy/src/models/Axis.pym
Log:
Ticket #963:
* Size now works properly


Modified: trunk/pysoy/include/soy.models.pxd
===================================================================
--- trunk/pysoy/include/soy.models.pxd  2008-12-01 06:26:35 UTC (rev 1384)
+++ trunk/pysoy/include/soy.models.pxd  2008-12-02 04:48:29 UTC (rev 1385)
@@ -123,6 +123,10 @@
 cdef class Axis (Model) :
   cdef gl.GLuint                    _vertBuffer
   cdef gl.GLuint                    _elmtBuffer
-  cdef float                          _size
+  cdef VertPC                       _vert[20]     # contains vertex position 
and color data
+  cdef Line                         _elmt[20]     # contains indices to verts 
to render lines
+  cdef float                        _size[3]
+  cdef int                          _updated
+  cdef void                         createVBO ( self ) 
   
 

Modified: trunk/pysoy/src/models/Axis.pym
===================================================================
--- trunk/pysoy/src/models/Axis.pym     2008-12-01 06:26:35 UTC (rev 1384)
+++ trunk/pysoy/src/models/Axis.pym     2008-12-02 04:48:29 UTC (rev 1385)
@@ -22,9 +22,17 @@
 
     This :class:`~soy.model.Model` renders a "XYZ axis" oriented to each 
     body it's attached to.  This is useful for debugging.
+    X axis is Red, Y is Green and Z is Blue.
+
+    The size property must be positive and not equal to 0.
   '''
-  def __cinit__(self, size=1.0, *args, **kw):
-    self._size = size
+  def __cinit__(self, size=(1.0,1.0,1.0), *args, **kw):
+    if (size[0] <= 0.0) or (size[1] <= 0.0) or (size[2] <= 0.0):
+      raise ValueError('Cannot set size to less than 0.0')
+    self._size[0] = size[0]
+    self._size[1] = size[1]
+    self._size[2] = size[2]
+    self._updated = 0 
 
 
   ############################################################################
@@ -32,24 +40,201 @@
   # Properties
   #
 
-  property size:
+  property size: # Size of the Axis lines
     def __get__(self):
-      return self._size
+      return self._size[0],self._size[1],self._size[2]
 
     def __set__(self, value):
-      if value == 0.0 :
-        raise ValueError('Cannot set size to 0.0')
-      self._size = value
+      cdef int a
+      if (value[0] <= 0.0) or (value[1] <= 0.0) or (value[2] <= 0.0):
+        raise ValueError('Cannot set size to less than 0.0')
+      self._size[0] = value[0]
+      self._size[1] = value[1]
+      self._size[2] = value[2]
+      # To set the size of the axis, we update the VBO
+      # We change the values according to the value, and add the offset (.30) 
for the arrow.
 
- 
+      self._vert[1].px = self._size[0]     # \  Vertex 1
+      self._vert[2].px = self._size[0]      # \  Vertex 2
+      self._vert[3].px = self._size[0] + 0.30 # \  Vertex 3
+      self._vert[4].px = self._size[0]      # \  Vertex 4
+
+      self._vert[6].py = self._size[1]     # \  Vertex 1
+      self._vert[7].py = self._size[1]      # \  Vertex 2
+      self._vert[8].py = self._size[1] + 0.30 # \  Vertex 3
+      self._vert[9].py = self._size[1]      # \  Vertex 4
+
+      self._vert[11].pz = self._size[2]     # \  Vertex 1
+      self._vert[12].pz = self._size[2]      # \  Vertex 2
+      self._vert[13].pz = self._size[2] + 0.30 # \  Vertex 3
+      self._vert[14].pz = self._size[2]      # \  Vertex 4
+
+      self._updated = 1 # Now that its updated, we need to send the data 
again. 
+      # The rendering thread *must* do this.
+
+  cdef void createVBO(self) :
+    cdef Line                         _elmt[20] 
+    #
+    # X Axis.
+    self._vert[0].px = 0.00          # \  Vertex 0
+    self._vert[0].py = 0.00          #  } (0.0, 0.0, 0.0)
+    self._vert[0].pz = 0.00          # /
+    self._vert[0].cr = 1.00          # \
+    self._vert[0].cg = 0.00          #  } Red
+    self._vert[0].cb = 0.00          # /___________________________
+    self._vert[1].px = self._size[0] # \  Vertex 1
+    self._vert[1].py = 0.00          #  } (1.0, 0.0, 0.0)
+    self._vert[1].pz = 0.00          # /
+    self._vert[1].cr = 1.00          # \
+    self._vert[1].cg = 0.00          #  } Red
+    self._vert[1].cb = 0.00          # /___________________________
+
+    self._vert[2].px = self._size[0] # \  Vertex 2
+    self._vert[2].py = 0.30          #  } (1.0, 0.3, 0.0)
+    self._vert[2].pz = 0.00          # /
+    self._vert[2].cr = 1.00          # \
+    self._vert[2].cg = 0.00          #  } Red
+    self._vert[2].cb = 0.00          # /___________________________
+    self._vert[3].px = self._size[0] + .30 # \  Vertex 3
+    self._vert[3].py = 0.00          #  } (1.3, 0.0, 0.0)
+    self._vert[3].pz = 0.00          # /
+    self._vert[3].cr = 1.00          # \
+    self._vert[3].cg = 0.00          #  } Red
+    self._vert[3].cb = 0.00          # /___________________________
+
+    self._vert[4].px = self._size[0] # \  Vertex 4
+    self._vert[4].py = -.30          #  } (1.0, -0.3, 0.0)
+    self._vert[4].pz = 0.00          # /
+    self._vert[4].cr = 1.00          # \
+    self._vert[4].cg = 0.00          #  } Red
+    self._vert[4].cb = 0.00          # /___________________________
+
+    # Y Axis
+    self._vert[5]= self._vert[0]          # Vertex 5 is the same as vertex 0
+    self._vert[5].cr = 0.0           # Except its not Red.
+    self._vert[5].cg = 1.0           # Its green.
+
+    self._vert[6].px = 0.00          # \  Vertex 6
+    self._vert[6].py = self._size[1] #  } (0.0, 1.0, 0.0)
+    self._vert[6].pz = 0.00          # /
+    self._vert[6].cr = 0.00          # \
+    self._vert[6].cg = 1.00          #  } Green
+    self._vert[6].cb = 0.00          # /___________________________
+    self._vert[7].px = 0.30          # \  Vertex 7
+    self._vert[7].py = self._size[1] #  } (0.3, 1.0, 0.0)
+    self._vert[7].pz = 0.00          # /
+    self._vert[7].cr = 0.00          # \
+    self._vert[7].cg = 1.00          #  } Green
+    self._vert[7].cb = 0.00          # /___________________________
+
+    self._vert[8].px = 0.00          # \  Vertex 8
+    self._vert[8].py = self._size[1] + .30 #  } (0.0, 1.3, 0.0)
+    self._vert[8].pz = 0.00          # /
+    self._vert[8].cr = 0.00          # \
+    self._vert[8].cg = 1.00          #  } Green
+    self._vert[8].cb = 0.00          # /___________________________
+    self._vert[9].px = -.30          # \  Vertex 9
+    self._vert[9].py = self._size[1] #  } (-0.3, 1.0, 0.0)
+    self._vert[9].pz = 0.00          # /
+    self._vert[9].cr = 0.00          # \
+    self._vert[9].cg = 1.00          #  } Green
+    self._vert[9].cb = 0.00          # /___________________________
+
+    # Z Axis
+    self._vert[10] = self._vert[0]
+    self._vert[10].cr = 0.00          # \
+    self._vert[10].cb = 1.00          # /___________________________
+
+    self._vert[11].px = 0.00          # \  Vertex 11
+    self._vert[11].py = 0.00          #  } (0.0, 1.3, 0.0)
+    self._vert[11].pz = self._size[2] # /
+    self._vert[11].cr = 0.00          # \
+    self._vert[11].cg = 0.00          #  } Blue
+    self._vert[11].cb = 1.00          # /___________________________
+
+    self._vert[12].px = 0.30          # \  Vertex 12
+    self._vert[12].py = 0.00          #  } (-0.3, 1.0, 0.0)
+    self._vert[12].pz = self._size[2] # /
+    self._vert[12].cr = 0.00          # \
+    self._vert[12].cg = 0.00          #  } Blue
+    self._vert[12].cb = 1.00          # /___________________________
+
+    self._vert[13].px = 0.00          # \  Vertex 13
+    self._vert[13].py = 0.00          #  } (0.0, 1.3, 0.0)
+    self._vert[13].pz = self._size[2] + .30          # /
+    self._vert[13].cr = 0.00          # \
+    self._vert[13].cg = 0.00          #  } Blue
+    self._vert[13].cb = 1.00          # /___________________________
+    self._vert[14].px = -.30          # \  Vertex 14
+    self._vert[14].py = 0.00          #  } (-0.3, 1.0, 0.0)
+    self._vert[14].pz = self._size[2] # /
+    self._vert[14].cr = 0.00          # \
+    self._vert[14].cg = 0.00          #  } Blue
+    self._vert[14].cb = 1.00          # /___________________________
+
+    # TODO optional tags. I left them out because they're not all that useful
+    # and take up another 15+ verticies.. maybe when we can define verticies 
more easily.
+    
+
+    #
+    # Next populate _elmt
+    #
+    _elmt[0].a = 0              # Line 0: 0-1
+    _elmt[0].b = 1              # ____________________________
+
+    _elmt[1].a = 2              # Line 1: 2-4
+    _elmt[1].b = 4              # ____________________________
+
+    _elmt[2].a = 2              # Line 2: 2-3
+    _elmt[2].b = 3              # ____________________________
+
+    _elmt[3].a = 3              # Line 3: 3-4
+    _elmt[3].b = 4              # ____________________________
+
+    _elmt[4].a = 5              # Line 4: 5-6
+    _elmt[4].b = 6              # ____________________________
+
+    _elmt[5].a = 7              # Line 5: 7-9
+    _elmt[5].b = 9              # ____________________________
+
+    _elmt[6].a = 8              # Line 6: 8-9
+    _elmt[6].b = 9              # ____________________________
+
+    _elmt[7].a = 8              # Line 7: 8-7
+    _elmt[7].b = 7              # ____________________________
+
+    _elmt[8].a = 10             # Line 8: 10-11
+    _elmt[8].b = 11             # ____________________________
+
+    _elmt[9].a = 14             # Line 9: 14-12
+    _elmt[9].b = 12             # ____________________________
+
+    _elmt[10].a = 13            # Line 10: 13-12
+    _elmt[10].b = 12            # ____________________________
+
+    _elmt[11].a = 13            # Line 11: 13-14
+    _elmt[11].b = 14            # ____________________________
+
+    #
+    # Create new vertex buffer and send _vert
+    #
+    gl.glGenBuffersARB(1, &self._vertBuffer)
+    gl.glBindBufferARB(gl.GL_ARRAY_BUFFER_ARB, self._vertBuffer)
+    gl.glBufferDataARB(gl.GL_ARRAY_BUFFER_ARB, sizeof(self._vert), self._vert, 
+                       gl.GL_STATIC_DRAW_ARB)
+    #
+    # Do the same for the element buffer
+    #
+    gl.glGenBuffersARB(1, &self._elmtBuffer)
+    gl.glBindBufferARB(gl.GL_ELEMENT_ARRAY_BUFFER_ARB, self._elmtBuffer)
+    gl.glBufferDataARB(gl.GL_ELEMENT_ARRAY_BUFFER_ARB, sizeof(_elmt), _elmt,
+                       gl.GL_STATIC_DRAW_ARB)
   ############################################################################
   #
   # WindowLoop Functions
   #
 
   cdef void _render(self, soy.bodies.Body _body) :
-    cdef VertPC      _vert[20]     # contains vertex position and color data
-    cdef Line        _elmt[20]     # contains indices to verts to render lines
     cdef gl.GLfloat  _mtx[16]
     #
     ######################################
@@ -71,7 +256,7 @@
     _mtx[12] = _body._position[0] 
     _mtx[13] = _body._position[1] 
     _mtx[14] = _body._position[2] 
-    _mtx[15] = 1 / self._size
+    _mtx[15] = 1
     #
     ######################################
     #
@@ -79,7 +264,6 @@
     #
     gl.glPushMatrix()
     gl.glMultMatrixf(_mtx)
-    #gl.glScalef(self._size,self._size,self._size)
     #
     ######################################
     #
@@ -97,163 +281,12 @@
       #
       # This is the first render pass, so we need to setup the VBO
       #
-      # First we'll populate _vert
-      #
-      # X Axis.
-      _vert[0].px = 0.00          # \  Vertex 0
-      _vert[0].py = 0.00          #  } (0.0, 0.0, 0.0)
-      _vert[0].pz = 0.00          # /
-      _vert[0].cr = 1.00          # \
-      _vert[0].cg = 0.00          #  } Red
-      _vert[0].cb = 0.00          # /___________________________
-      _vert[1].px = 1.00          # \  Vertex 1
-      _vert[1].py = 0.00          #  } (1.0, 0.0, 0.0)
-      _vert[1].pz = 0.00          # /
-      _vert[1].cr = 1.00          # \
-      _vert[1].cg = 0.00          #  } Red
-      _vert[1].cb = 0.00          # /___________________________
+      self.createVBO();
 
-      _vert[2].px = 1.00          # \  Vertex 2
-      _vert[2].py = 0.30          #  } (1.0, 0.3, 0.0)
-      _vert[2].pz = 0.00          # /
-      _vert[2].cr = 1.00          # \
-      _vert[2].cg = 0.00          #  } Red
-      _vert[2].cb = 0.00          # /___________________________
-      _vert[3].px = 1.30          # \  Vertex 3
-      _vert[3].py = 0.00          #  } (1.3, 0.0, 0.0)
-      _vert[3].pz = 0.00          # /
-      _vert[3].cr = 1.00          # \
-      _vert[3].cg = 0.00          #  } Red
-      _vert[3].cb = 0.00          # /___________________________
-
-      _vert[4].px = 1.00          # \  Vertex 4
-      _vert[4].py = -.30          #  } (1.0, -0.3, 0.0)
-      _vert[4].pz = 0.00          # /
-      _vert[4].cr = 1.00          # \
-      _vert[4].cg = 0.00          #  } Red
-      _vert[4].cb = 0.00          # /___________________________
-
-      # Y Axis
-      _vert[5]= _vert[0]          # Vertex 5 is the same as vertex 0
-      _vert[5].cr = 0.0           # Except its not Red.
-      _vert[5].cg = 1.0           # Its green.
-
-      _vert[6].px = 0.00          # \  Vertex 6
-      _vert[6].py = 1.00          #  } (0.0, 1.0, 0.0)
-      _vert[6].pz = 0.00          # /
-      _vert[6].cr = 0.00          # \
-      _vert[6].cg = 1.00          #  } Red
-      _vert[6].cb = 0.00          # /___________________________
-      _vert[7].px = 0.30          # \  Vertex 7
-      _vert[7].py = 1.00          #  } (0.3, 1.0, 0.0)
-      _vert[7].pz = 0.00          # /
-      _vert[7].cr = 0.00          # \
-      _vert[7].cg = 1.00          #  } Red
-      _vert[7].cb = 0.00          # /___________________________
-
-      _vert[8].px = 0.00          # \  Vertex 8
-      _vert[8].py = 1.30          #  } (0.0, 1.3, 0.0)
-      _vert[8].pz = 0.00          # /
-      _vert[8].cr = 0.00          # \
-      _vert[8].cg = 1.00          #  } Red
-      _vert[8].cb = 0.00          # /___________________________
-      _vert[9].px = -.30          # \  Vertex 9
-      _vert[9].py = 1.00          #  } (-0.3, 1.0, 0.0)
-      _vert[9].pz = 0.00          # /
-      _vert[9].cr = 0.00          # \
-      _vert[9].cg = 1.00          #  } Red
-      _vert[9].cb = 0.00          # /___________________________
-
-      # Z Axis
-      _vert[10] = _vert[0]
-      _vert[10].cr = 0.00          # \
-      _vert[10].cb = 1.00          # /___________________________
-
-      _vert[11].px = 0.00          # \  Vertex 11
-      _vert[11].py = 0.00          #  } (0.0, 1.3, 0.0)
-      _vert[11].pz = 1.00          # /
-      _vert[11].cr = 0.00          # \
-      _vert[11].cg = 0.00          #  } Red
-      _vert[11].cb = 1.00          # /___________________________
-
-      _vert[12].px = 0.30          # \  Vertex 12
-      _vert[12].py = 0.00          #  } (-0.3, 1.0, 0.0)
-      _vert[12].pz = 1.00          # /
-      _vert[12].cr = 0.00          # \
-      _vert[12].cg = 0.00          #  } Red
-      _vert[12].cb = 1.00          # /___________________________
-
-      _vert[13].px = 0.00          # \  Vertex 13
-      _vert[13].py = 0.00          #  } (0.0, 1.3, 0.0)
-      _vert[13].pz = 1.30          # /
-      _vert[13].cr = 0.00          # \
-      _vert[13].cg = 0.00          #  } Red
-      _vert[13].cb = 1.00          # /___________________________
-      _vert[14].px = -.30          # \  Vertex 14
-      _vert[14].py = 0.00          #  } (-0.3, 1.0, 0.0)
-      _vert[14].pz = 1.00          # /
-      _vert[14].cr = 0.00          # \
-      _vert[14].cg = 0.00          #  } Red
-      _vert[14].cb = 1.00          # /___________________________
-
-      # TODO optional tags. I left them out because they're not all that useful
-      # and take up another 15+ verticies.. maybe when we can define verticies 
more easily.
-      
-
-      #
-      # Next populate _elmt
-      #
-      _elmt[0].a = 0              # Line 0: 0-1
-      _elmt[0].b = 1              # ____________________________
-
-      _elmt[1].a = 2              # Line 1: 2-4
-      _elmt[1].b = 4              # ____________________________
-
-      _elmt[2].a = 2              # Line 2: 2-3
-      _elmt[2].b = 3              # ____________________________
-
-      _elmt[3].a = 3              # Line 3: 3-4
-      _elmt[3].b = 4              # ____________________________
-
-      _elmt[4].a = 5              # Line 4: 5-6
-      _elmt[4].b = 6              # ____________________________
-
-      _elmt[5].a = 7              # Line 5: 7-9
-      _elmt[5].b = 9              # ____________________________
-
-      _elmt[6].a = 8              # Line 6: 8-9
-      _elmt[6].b = 9              # ____________________________
-
-      _elmt[7].a = 8              # Line 7: 8-7
-      _elmt[7].b = 7              # ____________________________
-
-      _elmt[8].a = 10             # Line 8: 10-11
-      _elmt[8].b = 11             # ____________________________
-
-      _elmt[9].a = 14             # Line 9: 14-12
-      _elmt[9].b = 12             # ____________________________
-
-      _elmt[10].a = 13            # Line 10: 13-12
-      _elmt[10].b = 12            # ____________________________
-
-      _elmt[11].a = 13            # Line 11: 13-14
-      _elmt[11].b = 14            # ____________________________
-
-      #
-      # Create new vertex buffer and send _vert
-      #
-      gl.glGenBuffersARB(1, &self._vertBuffer)
-      gl.glBindBufferARB(gl.GL_ARRAY_BUFFER_ARB, self._vertBuffer)
-      gl.glBufferDataARB(gl.GL_ARRAY_BUFFER_ARB, sizeof(_vert), _vert, 
-                         gl.GL_STATIC_DRAW_ARB)
-      #
-      # Do the same for the element buffer
-      #
-      gl.glGenBuffersARB(1, &self._elmtBuffer)
-      gl.glBindBufferARB(gl.GL_ELEMENT_ARRAY_BUFFER_ARB, self._elmtBuffer)
-      gl.glBufferDataARB(gl.GL_ELEMENT_ARRAY_BUFFER_ARB, sizeof(_elmt), _elmt,
-                         gl.GL_STATIC_DRAW_ARB)
-
+    if self._updated: # If someone updated the array in client Memory
+      gl.glBindBufferARB(gl.GL_ARRAY_BUFFER_ARB,self._vertBuffer)
+      gl.glBufferDataARB(gl.GL_ARRAY_BUFFER_ARB, sizeof(self._vert), 
self._vert, 
+                           gl.GL_STATIC_DRAW_ARB) # Send the data again.
     #
     ######################################
     #

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

Reply via email to