home *** CD-ROM | disk | FTP | other *** search
/ Hackers Magazine 57 / CdHackersMagazineNr57.iso / Software / Multimedia / k3d-setup-0.7.11.0.exe / lib / site-packages / cgkit / drawtextgeom.py < prev    next >
Encoding:
Python Source  |  2007-01-11  |  4.3 KB  |  139 lines

  1. # ***** BEGIN LICENSE BLOCK *****
  2. # Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3. #
  4. # The contents of this file are subject to the Mozilla Public License Version
  5. # 1.1 (the "License"); you may not use this file except in compliance with
  6. # the License. You may obtain a copy of the License at
  7. # http://www.mozilla.org/MPL/
  8. #
  9. # Software distributed under the License is distributed on an "AS IS" basis,
  10. # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11. # for the specific language governing rights and limitations under the
  12. # License.
  13. #
  14. # The Original Code is the Python Computer Graphics Kit.
  15. #
  16. # The Initial Developer of the Original Code is Matthias Baas.
  17. # Portions created by the Initial Developer are Copyright (C) 2004
  18. # the Initial Developer. All Rights Reserved.
  19. #
  20. # Contributor(s):
  21. #
  22. # Alternatively, the contents of this file may be used under the terms of
  23. # either the GNU General Public License Version 2 or later (the "GPL"), or
  24. # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  25. # in which case the provisions of the GPL or the LGPL are applicable instead
  26. # of those above. If you wish to allow use of your version of this file only
  27. # under the terms of either the GPL or the LGPL, and not to allow others to
  28. # use your version of this file under the terms of the MPL, indicate your
  29. # decision by deleting the provisions above and replace them with the notice
  30. # and other provisions required by the GPL or the LGPL. If you do not delete
  31. # the provisions above, a recipient may use your version of this file under
  32. # the terms of any one of the MPL, the GPL or the LGPL.
  33. #
  34. # ***** END LICENSE BLOCK *****
  35. # $Id: drawtextgeom.py,v 1.2 2005/08/28 19:42:43 mbaas Exp $
  36.  
  37. import sys
  38. from cgkit.geomobject import GeomObject
  39. from cgkit.boundingbox import BoundingBox
  40. from cgkit.cgtypes import *
  41. from _OpenGL.GL import *
  42. try:
  43.     from OpenGL.GLUT import *
  44.     has_glut = True
  45. except:
  46.     has_glut = False
  47.     
  48.  
  49. # DrawTextGeom
  50. class DrawTextGeom(GeomObject):
  51.     """Geometry object that draw text strings.
  52.  
  53.     This is similar to the C++ Draw class, except that it only draws
  54.     texts using GLUT. This functionality isn't incorporated into the
  55.     C++ class to prevent a dependency from GLUT. Whereas using Python
  56.     you can still use everything else from cgkit if GLUT isn't available
  57.     (in this case, a warning will be printed and the texts are simply not
  58.     drawn).
  59.     """
  60.  
  61.     def __init__(self):
  62.         """Constructor.
  63.         """
  64.         global has_glut
  65.         GeomObject.__init__(self)
  66.         
  67.         self.text = []
  68.         self.boundingbox = BoundingBox()
  69.  
  70.         if not has_glut:
  71.             print >>sys.stderr, "WARNING: Cannot draw texts. GLUT is not available."
  72.  
  73.     def uniformCount(self):
  74.         return 0
  75.  
  76.     def varyingCount(self):
  77.         return 0
  78.  
  79.     def vertexCount(self):
  80.         return 0
  81.  
  82.     def boundingBox(self):
  83.         return self.boundingbox
  84.  
  85.     def drawGL(self):
  86.         global has_glut
  87.         if not has_glut:
  88.             return
  89.         
  90.         glPushAttrib(GL_ALL_ATTRIB_BITS)
  91.         glDisable(GL_LIGHTING)
  92. #        glDisable(GL_DEPTH_TEST)
  93.  
  94.         for pos,txt,font,col in self.text:
  95.             x,y,z = pos
  96.             r,g,b = col
  97.             glColor3d(r,g,b)
  98.             glRasterPos3d(x,y,z)
  99.             self._drawText(txt, font)
  100.  
  101.         glPopAttrib()
  102.  
  103.     # clear
  104.     def clear(self):
  105.         """Clear all texts."""
  106.         self.text = []
  107.         self.boundingbox = BoundingBox()
  108.         
  109.     # addText
  110.     def addText(self, pos, txt, font=None, color=(1,1,1)):
  111.         """Add a text string.
  112.  
  113.         pos contains the 3D position of the string, txt is a string
  114.         containing the actual text. font can be one of the constants
  115.         defined in GLUT:
  116.  
  117.         - GLUT_BITMAP_8_BY_13
  118.         - GLUT_BITMAP_9_BY_15
  119.         - GLUT_BITMAP_TIMES_ROMAN_10
  120.         - GLUT_BITMAP_TIMES_ROMAN_24
  121.         - GLUT_BITMAP_HELVETICA_10
  122.         - GLUT_BITMAP_HELVETICA_12
  123.         - GLUT_BITMAP_HELVETICA_18
  124.  
  125.         color is the color of the text.
  126.         """
  127.         if font==None:
  128.             try:
  129.                 font = GLUT_BITMAP_9_BY_15
  130.             except:
  131.                 font = 0
  132.         self.text.append((pos,txt,font,color))
  133.         self.boundingbox.addPoint(vec3(pos))
  134.  
  135.  
  136.     def _drawText(self, txt, font):
  137.         for c in txt:
  138.             glutBitmapCharacter(font, ord(c))
  139.