home *** CD-ROM | disk | FTP | other *** search
/ PC PowerPlay 56 / CDPowerplay56Disc2.iso / demos / blade / data1.cab / Program_Executable_Files / Lib / Interpolator.py < prev    next >
Encoding:
Python Source  |  2000-10-27  |  3.2 KB  |  126 lines

  1.  
  2.  
  3.  
  4. import Bladex
  5. import ObjStore 
  6.  
  7.  
  8.  
  9. class LinearInt:
  10.   def __init__(self,init_value,end_value):
  11.     self.init_value=init_value
  12.     self.end_value=end_value
  13.     self.period=end_value-init_value
  14.  
  15.   def Execute(self,value):  # value entre 0 y 1.
  16.     return self.init_value+self.period*value
  17.  
  18.   def EndExecute(self):
  19.     print "Ended LinearInt"
  20.  
  21.  
  22.  
  23. class RGBInt:
  24.   def __init__(self,init_value,end_value):
  25.     self.init_value=init_value
  26.     self.end_value=end_value
  27.     self.periodR=end_value[0]-init_value[0]
  28.     self.periodG=end_value[1]-init_value[1]
  29.     self.periodB=end_value[2]-init_value[2]
  30.  
  31.   def Execute(self,value):  # value entre 0 y 1.
  32.     return (self.init_value[0]+self.periodR*value,
  33.             self.init_value[1]+self.periodG*value,
  34.             self.init_value[2]+self.periodB*value
  35.            )
  36.  
  37.   def EndExecute(self):
  38.     print "Ended RGBInt"
  39.  
  40.  
  41.  
  42.  
  43. class PositionInt:
  44.   def __init__(self,init_value,end_value):
  45.     self.init_value=init_value
  46.     self.end_value=end_value
  47.     self.periodX=end_value[0]-init_value[0]
  48.     self.periodY=end_value[1]-init_value[1]
  49.  
  50.   def Execute(self,value):  # value entre 0 y 1.
  51.     return (self.init_value[0]+self.periodX*value,
  52.             self.init_value[1]+self.periodY*value
  53.            )
  54.  
  55.   def EndExecute(self):
  56.     print "Ended RGBInt"
  57.  
  58.  
  59.  
  60.  
  61.  
  62. class Interp:
  63.   def AddAction(self,init_time,end_time,interp_class):
  64.     action=(init_time,end_time,interp_class,end_time-init_time)
  65.     self.Actions.append(action) # Subscribir a Timer
  66.     return action
  67.  
  68.   def RemoveAction(self,action):
  69.     print "Trying to remove action:",action
  70.     self.Actions.remove(action)
  71.  
  72.   def ExecuteActions(self,time):
  73.     for i in self.Actions:
  74.       end_time=i[1]
  75.       init_time=i[0]
  76.       if time>end_time:
  77.         i[2].EndExecute()
  78.         self.Actions.remove(i) # Desubscribir de Timer
  79.       elif time>init_time:
  80.         interval_time=i[3]
  81.         value=(time-init_time)/interval_time
  82.         i[2].Execute(value)
  83.  
  84.  
  85.   def Kill(self):
  86.     Bladex.RemoveAfterFrameFunc("Interp"+self.name)
  87.  
  88.  
  89.   def __init__(self,name):
  90.     self.Actions=[]
  91.     self.name=name
  92.     Bladex.SetAfterFrameFunc("Interp"+name,self.ExecuteActions)
  93.     self.ObjId=ObjStore.GetNewId() # Para identificarlo al grabar/guardar
  94.     ObjStore.ObjectsStore[self.ObjId]=self
  95.  
  96.  
  97.   def __del__(self):
  98.     self.Kill()
  99.     del ObjStore.ObjectsStore[self.ObjId]
  100.  
  101.   def persistent_id(self):
  102.     return self.ObjId
  103.  
  104.   def __getstate__(self):
  105.     # Tiene que devolver cΣ«» poder guardar el estado de la clase
  106.     return (1,
  107.             self.ObjId,
  108.             self.Actions,
  109.             self.name
  110.            )
  111.  
  112.   def __setstate__(self,parm):
  113.     # Toma como parΓ«Ñtro lo que devuelve __getstate__() y debe recrear la clase
  114.     if parm[0]==1:
  115.       self.ObjId=parm[1]
  116.       ObjStore.ObjectsStore[self.ObjId]=self
  117.       self.Actions=parm[2]
  118.       self.name=parm[3]
  119.     else:
  120.       print "Warning -> Version mismatch in Interp.__setstate__()"
  121.       self.Actions=[]
  122.       self.name="UnNamed"
  123.       Bladex.SetAfterFrameFunc("Interp"+name,self.ExecuteActions)
  124.       self.ObjId=ObjStore.GetNewId() # Para identificarlo al grabar/guardar
  125.       ObjStore.ObjectsStore[self.ObjId]=self
  126.