Source code for mor.reduction.container.reductionAnimations

# -*- coding: utf-8 -*-

import math, os

path = os.path.dirname(os.path.abspath(__file__))
pathToAnimation = path+"/../../animation/shakingAnimations.py"

[docs] class ReductionAnimations(): """ **Contain all the parameters & functions related to the animation of the reduction** """ def __init__(self,listObjToAnimate,listPathToAnimation=[]): # A list of what you want to animate in your scene and with which parameters self.listObjToAnimate = listObjToAnimate self.listPathToAnimation = [pathToAnimation] + listPathToAnimation self.listOfLocation = [] for obj in self.listObjToAnimate: self.listOfLocation.append(obj.location) self.nbActuator = len(self.listObjToAnimate) self.nbPossibility = 2**self.nbActuator self.nbIterations = 0 self.setNbIteration() self.phaseNumClass = None self.generateListOfPhase(self.nbPossibility,self.nbActuator)
[docs] def setNbIteration(self,nbIterations=None): ''' ''' if nbIterations : self.nbIterations = int(math.ceil(nbIterations)) else : for obj in self.listObjToAnimate: tmp = 0 if all (k in obj.params for k in ("incr","incrPeriod")): if obj.params['incr'] == 0: print("[WARNING]: 'incr' is 0 for an object. Please check. 'incr' has been set temporary to 1.") obj.params['incr'] = 1 tmp = ((obj.params['rangeOfAction']/obj.params['incr'])-1)*obj.params['incrPeriod'] + 2*obj.params['incrPeriod']-1 if tmp > self.nbIterations: self.nbIterations = int(math.ceil(tmp))
[docs] def generateListOfPhase(self,nbPossibility,nbActuator): ''' ''' phaseNum = [[0] * nbActuator for i in range(nbPossibility)] phaseNumClass = [] for i in range(nbPossibility): binVal = "{0:b}".format(i) for j in range(len(binVal)): phaseNum[i][j + nbActuator-len(binVal)] = int(binVal[j]) for nb in range(nbActuator+1): for i in range(nbPossibility): if sum(phaseNum[i]) == nb: phaseNumClass.append(phaseNum[i]) self.phaseNumClass = phaseNumClass