Пример #1
0
class History:
    
    # CONSTRUCTOR.........................
    def __init__(self, particles, longRun = False):
        # Save particle properties
        self.maxMass = particles.movers[0].maxMass
        self.maxVelocity = particles.movers[0].maxVelocity
        self.masses = [particles.movers[i].mass for i in range(len(particles.movers))]
        self.longRun = longRun # To toogle saving history (useful for long, continuous runs)
        
        if longRun:
            self.frames = Frame(particles)
        else:
            self.frames = []
        self.currentFrameNo = 0
        
    #.....................................
    def addFrame(self, frame):
        self.frames.append(frame)
        
    #.....................................
    def saveFrame(self, particles):
        currentFrame = Frame(particles)
        self.addFrame(currentFrame)
    
    #.....................................
    def saveSimulation(self, particleSystem, connectedness, steps=100):
        if self.longRun:
            particleSystem.update(connectedness)
            self.frames.update(particleSystem)
        else:
            self.saveFrame(particleSystem)
            for i in range(steps):
                particleSystem.update(connectedness)
                self.saveFrame(particleSystem)
            
    #.....................................
    def hasNext(self):
        if self.longRun:
            return False
        else:
            return ( self.currentFrameNo+1 < len(self.frames) )
    
    #.....................................
    def drawStep(self, drawParticles, drawConnections, drawClusters):
        if self.longRun:
            frame = self.frames
        else:
            frame = self.frames[self.currentFrameNo]
            self.currentFrameNo = self.currentFrameNo + 1
            
        frame.draw(drawParticles, drawConnections, drawClusters, self.masses, self.maxVelocity)            
        
    #.....................................
    def restartPlayback(self):
        self.currentFrameNo = 0