def load_flame(self, flame_origin, flame_target=None, lerp=0.0): loaded_flame = self.flame try: if (lerp == 0.0 or flame_target is None): loaded_flame = flame_origin elif (lerp >= 1.0 or flame_origin is None): loaded_flame = flame_target else: # interpolation: flame_origin.time = 0 flame_target.time = 1 flames_lerp = [flame_origin, flame_target] flames_str = "<flames>%s</flames>" % "".join( map(flame_to_string, flames_lerp)) genomes, ngenomes = Genome.from_string(flames_str) targetflame = Genome() flam3_interpolate(genomes, ngenomes, lerp, 0, byref(targetflame)) loaded_flame = Flame(targetflame.to_string()) except Exception as ex: print('[!] error during interpolation at %s: %s' % (lerp, str(ex))) traceback.print_exc() return None return loaded_flame
def interpolate(flames): s = "<flames>%s</flames>" % "".join(map(to_string, flames)) genomes, ngenomes = Genome.from_string(s) target = Genome() for i in range(int(flames[0].time), int(flames[-1].time + 1)): flam3_interpolate(genomes, ngenomes, i, 0, byref(target)) flame = Flame(target.to_string()) flame.name = "morphed_%04d" % i yield flame