Statistics
| Revision:

## root / PyOpenGL-Demo / proesch / nurbsCurve / nurbsCurve.py @ 1

 1 #!/usr/bin/python2.4  # Plot a curve with control points positioned on a circle  # using NURBS.  #  # Copyright (C) 2007 "Peter Roesch"  #  # This code is licensed under the PyOpenGL License.  # Details are given in the file license.txt included in this distribution.  import sys  import math  from time import sleep  try:   from OpenGL.GLUT import *   from OpenGL.GL import *   from OpenGL.GLU import *  except:   print ''' Fehler: PyOpenGL nicht intalliert !!'''   sys.exit( )  animationAngle = 0.0  frameRate = 25  animationTime = 0  def animationStep( ):   """Update animated parameters"""   global animationAngle   global frameRate   animationAngle += 0.3   while animationAngle > 360:   animationAngle -= 360   sleep( 1 / float( frameRate ) )   glutPostRedisplay( )  # position points on a circle  angleNum = 5  radius=1  angles = [ 2*math.pi*float(i)/angleNum for i in range( angleNum ) ]  circlePoints = [   [ radius*math.cos(theta), radius*math.sin(theta), 0 ] for theta in angles ]  # make sure the curve is closed properly  degree=3  for i in range( degree-1 ):   circlePoints = circlePoints + [ circlePoints[i] ]  knotNum = len( circlePoints ) + degree  circleKnots = [ float(i)/(knotNum-1) for i in range( knotNum ) ]  def display( ):   """Glut display function."""   glClear( GL_COLOR_BUFFER_BIT )   glMatrixMode( GL_PROJECTION )   glLoadIdentity( )   xSize, ySize = glutGet( GLUT_WINDOW_WIDTH ), glutGet( GLUT_WINDOW_HEIGHT )   gluPerspective(60, float(xSize) / float(ySize), 0.1, 50)   glMatrixMode( GL_MODELVIEW )   glLoadIdentity( )   glTranslatef( 0, 0, -2 )   glRotatef( animationAngle, 0, 0, 1 )   global circlePoints, circleKnots   glColor3f(0, 1, 0)   glBegin(GL_LINE_STRIP)   for coord in circlePoints:   glVertex3f(coord[0], coord[1], coord[2]);   glEnd()   global nurb   glColor3f(1, 1, 1)   gluBeginCurve( nurb )   gluNurbsCurve ( nurb, circleKnots, circlePoints, GL_MAP1_VERTEX_3 )   gluEndCurve( nurb )   glutSwapBuffers( )  nurb=None  samplingTolerance=1.0  def init( ):   """Glut init function."""   glClearColor ( 0, 0, 0, 0 )   glShadeModel( GL_FLAT )   global nurb   nurb = gluNewNurbsRenderer()   global samplingTolerance   glLineWidth(2.0)   gluNurbsProperty(nurb, GLU_SAMPLING_TOLERANCE, samplingTolerance)  glutInit( sys.argv )  glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB )  glutInitWindowSize( 250, 250 )  glutInitWindowPosition( 100, 100 )  glutCreateWindow( sys.argv[0] )  init( )  glutDisplayFunc( display )  glutIdleFunc( animationStep )  glutMainLoop( )