def splice_prep(step, pos_1, pos_2): """ Introduces the main body of the splicosome to assemble with the other parts and cut the intron """ left, right = pos_1[:], pos_2[:] left[0] *= 0.94 right[0] *= 0.89 left[1] *= -1 right[1] *= -1 splice_left = Sphere(left, SPLICE_SIZE, "scale", [1.5, -1, 0], models.splice_model) splice_right = Sphere(right, SPLICE_SIZE, "scale", [2, -1, 0], models.splice_model) coord = get_added_distance(TP_START[8], TP_DUR[8], [0, 16, 0], step) y_loc = coord[1] splice_down = Sphere([0.5 * TWITCH1, 15 - y_loc, 2], BIG_SPLICE_SIZE, "scale", [0, -1.25, 0], models.splice_model) text = Text( 'ttf', '"timrom.ttf"', '"Here you see the main part of the spliceosome entering the screen"', 0, 0, 'translate', [-15, -4.5, 5], 'scale', [1, 1, 1], models.text_model) text2 = Text( 'ttf', '"timrom.ttf"', '"The smaller parts wil connect the intron ends to the main part"', 0, 0, 'translate', [-15, -6, 5], 'scale', [1, 1, 1], models.text_model) return [splice_left, splice_right, splice_down, text, text2]
def splice_cut(step, pos_1, pos_2): """ Moves both splice parts near each other and makes the cut """ move = get_added_distance(TP_START[9], TP_DUR[9], [15, 5, 0], step) x_change, y_change = move[0], move[1] left, right = pos_1[:], pos_2[:] left[0] = 0.94 * left[0] - x_change right[0] = 0.89 * right[0] + x_change left[1] = -1 * left[1] - y_change right[1] = -1 * right[1] - y_change splice_left = Sphere(left, SPLICE_SIZE, "scale", [1.5, -1, 0], models.splice_model) splice_right = Sphere(right, SPLICE_SIZE, "scale", [2, -1, 0], models.splice_model) splice_down = Sphere([0, -1, 2], BIG_SPLICE_SIZE, "scale", [0, -1.25, 0], models.splice_model) text = Text( 'ttf', '"timrom.ttf"', '"Once the two smaller proteins have connected the intron ends"', 0, 0, 'translate', [-15, -4.5, 5], 'scale', [1, 1, 1], models.text_model) text2 = Text('ttf', '"timrom.ttf"', '"to the bigger protein, they will leave the reaction site"', 0, 0, 'translate', [-15, -6, 5], 'scale', [1, 1, 1], models.text_model) return [splice_left, splice_right, splice_down, text, text2]
def bind_schematic(frame, size): """ Animating the binding part schematicly """ insuline_model = Texture(Pigment('color', [0, 1, 0.5], ), Finish('reflection', 0)) text_model = Texture(Pigment('color', [1, 1, 0], ), Finish('reflection', 0)) insuline = [] s = size # frame 30 -> 120 if frame < 120: x = (frame - 30) * (24.5*s / 90) - 30*s y = (frame - 30) * (-15*s / 90) + 20*s else: x = -5*s y = 5*s insuline.append(Sphere([x, y, 0], s * 1.5, insuline_model)) insuline.append(Text('ttf', '"timrom.ttf"', '"{}"'.format(str('Insulin')), 0.5, [0, 0, 0], text_model, 'scale', 5, 'translate', [x - s, y-0.5*s, -2*s])) insuline.append(Sphere([0-x, y, 0], s * 1.5, insuline_model)) insuline.append(Text('ttf', '"timrom.ttf"', '"{}"'.format(str('Insulin')), 0.5, [0, 0, 0], text_model, 'scale', 5, 'translate', [0-x -1.4*s, y-0.5*s, -2*s])) return insuline
def s0_intro_text(): """ This show the title of the animation with our names """ title = Text('ttf', '"timrom.ttf"', '"RNA Splicing"', 0, 0, 'translate', [-2.85, 0.9, -0], 'scale', [5, 5, 1], models.text_model) names = Text('ttf', '"timrom.ttf"', '"Reindert Visser and Vincent Talen"', 0, 0, 'translate', [-7.2, -0.5, -0], 'scale', [3, 3, 1], models.text_model) return Scene(models.camera_scene0, objects=[title, names] + models.lights_scene1)
def splice_text_scene(): text = Text( 'ttf', '"timrom.ttf"', '"Here we see pre-mRNA, it got created by duplicating a single strand of DNA"', 0, 0, 'translate', [-15, 5, 5], 'scale', [1, 1, 1], models.text_model) text2 = Text( 'ttf', '"timrom.ttf"', '"In this pre-mRNA there are non-usable pieces, these are called introns"', 0, 0, 'translate', [-15, -5.5, 5], 'scale', [1, 1, 1], models.text_model) return [text, text2]
def s1_cell_overview(): """ This scene is a single cell centered without any movement """ cell_sphere = Sphere([0, 0, 0], 25, models.cell_model) text = Text('ttf', '"timrom.ttf"', '"To begin you first need to know that"', 0, 0, 'translate', [-14.5, -5, -30], 'scale', [2.5, 2.5, 1], models.text_model) text2 = Text('ttf', '"timrom.ttf"', '"RNA Splicing takes place in the cell"', 0, 0, 'translate', [-14.5, -6.25, -30], 'scale', [2.5, 2.5, 1], models.text_model) return Scene(models.camera_scene1, objects=[cell_sphere, text, text2] + models.lights_scene1)
def frame(step): """ Makes an image/frame """ time_point = (step / TOTAL_FRAMES) * SETTINGS.Duration logger.info(" @Time: %.4fs, Step: %d", time_point, step) # Declaration of the end times of the scenes global TP_END TP_END = [4, 8, 11, 15, 18, 26, 32, 38, 44, 50, 58, 64] # scene 0 1 2 3 4 5 6 7 8 9 10, 11 # Globals that change per frame global TP_START, TP_DUR, TWITCH1, TWITCH2 TP_START, TP_DUR = get_time_point_data(TP_END) TWITCH1, TWITCH2 = make_random_int() if time_point < TP_END[0]: scene = s0_intro_text() elif time_point < TP_END[1]: scene = s1_cell_overview() elif time_point < TP_END[2]: scene = s2_cell_zoom(step) elif time_point < TP_END[3]: scene = s3_in_cell() elif time_point < TP_END[4]: scene = s4_zoom_to_mrna(step) elif time_point < TP_END[11]: scene = scenes_mrna(step, time_point) else: text = Text('ttf', '"timrom.ttf"', '"Uh-oh, this ain\'t right"', 0, 0, 'translate', [-4, 0, 0], 'scale', [2, 2, 0], models.text_model) scene = Scene(models.default_camera, objects=[models.default_light, text]) return scene
def bind_phosphorus(frame, size): """ Animating the process of phosfor binding to the Tyr """ phosphorus_model = Texture(Pigment('color', [1, 0, 1], ), Finish('reflection', 0)) text_model = Texture(Pigment('color', [1, 1, 0], ), Finish('reflection', 0)) phosphorus = [] s = size # frame 480 -> 570 x_locs = [[-20, -5], [20, 5], [-20, -5], [20, 5]] y_locs = [13, 13, 10, 10] for _ in range(4): if frame < 570: x = (frame - 480) * ((x_locs[_][1]*s - x_locs[_][0]*s) / 90) + x_locs[_][0]*s y = 0 - y_locs[_] * s else: x = x_locs[_][1]*s y = 0 - y_locs[_]*s phosphorus.append(Sphere([x, y, 2], s * 1.2, phosphorus_model)) phosphorus.append(Text('ttf', '"timrom.ttf"', '"{}"'.format(str('P')), 0.5, [0, 0, 0], text_model, 'scale', 7, 'translate', [x - 0.2*s, y-0.5*s, -1.5*s])) return phosphorus
def splicing_final(): """ Provides the spliceosome and the text whilst the mrna forms """ splice_down = Sphere([0, -1, 2], BIG_SPLICE_SIZE, "scale", [0, -1.25, 0], models.splice_model) text = Text( 'ttf', '"timrom.ttf"', '"The spliceosome now disconnects the intron and binds one end of"', 0, 0, 'translate', [-15, -4.5, 5], 'scale', [1, 1, 1], models.text_model) text2 = Text( 'ttf', '"timrom.ttf"', '"the intron to a suitable place on the other end of the intron."', 0, 0, 'translate', [-15, -6, 5], 'scale', [1, 1, 1], models.text_model) text3 = Text( 'ttf', '"timrom.ttf"', '"Meanwhile the exons get put together to form the finished mRNA"', 0, 0, 'translate', [-15, -7.5, 5], 'scale', [1, 1, 1], models.text_model) return [splice_down, text, text2, text3]
def s3_in_cell(): """ This scene makes it clear that the splicing process takes place in the nucleus """ nucleus = Sphere([20, 7.5, 0], 7.5, models.nucleus_model) nucleus_text = Text('ttf', '"timrom.ttf"', '"Nucleus"', 0, 0, 'translate', [6.75, 2.8, -7.6], 'scale', [2, 2, 0], models.text_model) text = Text('ttf', '"timrom.ttf"', '"To be even more specific, the RNA splicing"', 0, 0, 'translate', [-13.25, -4.2, -0], 'scale', [2.35, 2.35, 1], models.text_model) text2 = Text('ttf', '"timrom.ttf"', '"takes place in the nucleus of the cell"', 0, 0, 'translate', [-13.25, -5.4, -0], 'scale', [2.35, 2.35, 1], models.text_model) return Scene(models.camera_scene3, objects=[nucleus, nucleus_text, text, text2] + models.spot_lights)
def splice_intro(step): """ Introduces both two splice complexes from the angles of the screen """ change_list = get_added_distance(TP_START[6], TP_DUR[6], [12, 0, 0], step) x_change = change_list[0] splice_left = Sphere([-15 + x_change, TWITCH1, 0], SPLICE_SIZE, "scale", [1.5, -1, 0], models.splice_model) splice_right = Sphere([15 - 0.95 * x_change, TWITCH2, 0], SPLICE_SIZE, "scale", [2, -1, 0], models.splice_model) text = Text('ttf', '"timrom.ttf"', '"The removal of the introns is done by the spliceosome"', 0, 0, 'translate', [-15, -4.5, 5], 'scale', [1, 1, 1], models.text_model) text2 = Text( 'ttf', '"timrom.ttf"', '"As can been seen here the spliceosome consists out of multiple proteins"', 0, 0, 'translate', [-15, -6, 5], 'scale', [1, 1, 1], models.text_model) return [splice_left, splice_right, text, text2]
def splicing_fadeout(step): """ Moves the whole spliceosome to the corner with the intron """ x_fly, y_fly = fly_away(step) splice_down = Sphere([x_fly, -1 - y_fly, 2], BIG_SPLICE_SIZE, "scale", [0, -1.25, 0], models.splice_model) text = Text('ttf', '"timrom.ttf"', '"The intron later gets recycled so it can be used again,"', 0, 0, 'translate', [-15, -4.5, 5], 'scale', [1, 1, 1], models.text_model) text2 = Text('ttf', '"timrom.ttf"', '"the spliceosome goes to the next site and"', 0, 0, 'translate', [-15, -6, 5], 'scale', [1, 1, 1], models.text_model) text3 = Text('ttf', '"timrom.ttf"', '"the mRNA will be used to make a protein"', 0, 0, 'translate', [-15, -7.5, 5], 'scale', [1, 1, 1], models.text_model) return [splice_down, text, text2, text3]
def splice_move_close(pos_1, pos_2): """ Merges the two splice complexes holding the pre-mRNA """ left, right = pos_1[:], pos_2[:] left[0] *= 0.75 right[0] *= 0.65 left[1] *= -1 right[1] *= -1 splice_left = Sphere(left, SPLICE_SIZE, "scale", [1.5, -1, 0], models.splice_model) splice_right = Sphere(right, SPLICE_SIZE, "scale", [2, -1, 0], models.splice_model) text = Text( 'ttf', '"timrom.ttf"', '"Two parts of the spliceosome seek out the beginning and the end of an intron"', 0, 0, 'translate', [-15, -4.5, 5], 'scale', [1, 1, 1], models.text_model) text2 = Text( 'ttf', '"timrom.ttf"', '"Their job is to bring them closer together and hand them over"', 0, 0, 'translate', [-15, -6, 5], 'scale', [1, 1, 1], models.text_model) return [splice_left, splice_right, text, text2]
def make_tyrine(loc, size): """ Creates the tyrine molecules """ text_model = Texture(Pigment('color', [1, 1, 0], ), Finish('reflection', 0)) cyl_model = Texture(Pigment('color', [0, 1, 0.5], ), Finish('reflection', 0)) tyr = [] y_always = [13, 13, 10, 10] x_text = [-3, 5, -3, 5] x_end = [-5, 5, -5, 5] x = loc[0] y = loc[1] z = loc[2] + 7 for _ in range(4): tyr.append(Cylinder([x, y-size * y_always[_], z], [x-size*x_end[_], y-size*y_always[_], z], size, cyl_model)) text = Text('ttf', '"timrom.ttf"', '"{}"'.format(str('Tyr')), 2, [0, 0, 0], text_model, 'scale', 5, 'translate', [x-size*x_text[_], y-size*y_always[_], z - 7]) tyr.append(text) return tyr
def bind_IRS(frame, size): """ Animating the process of IRS binding to the phosfor """ IRS_model = Texture(Pigment('color', [1, 0, 1], ), Finish('reflection', 0)) text_model = Texture(Pigment('color', [1, 1, 0], ), Finish('reflection', 0)) IRS = [] s = size # frame 570 -> 630 if frame < 630: x = (frame - 570) * ((7*s-30*s) / 60) + 30*s y = -12*s else: x = 7*s y = -12*s IRS.append(Sphere([x, y, 0], s * 2, IRS_model)) IRS.append(Text('ttf', '"timrom.ttf"', '"{}"'.format(str('IRS')), 0.5, [0, 0, 0], text_model, 'scale', 5, 'translate', [x - s, y, -2*s])) return IRS
def get_animation_data(num=0, start_frame=0, sme_pos_ethanol=((70, 0, 0), (0, 0, 0), (-70, 0, 0)), ethanol_start_wacht=0, ethanol_mid_wacht=-1, aldh_speed=0, show_name=False): """ Gets the data for the animation Needed data per object: - (String) Name object - (Bool) Molecule - True (bool) part of molecule {if true keyframes end position xyz becomes offset} - True (string) object to split - True (list) atoms to split {!!Current program only supports 1 atom split at a time!!} - (int) atom - False (file_path) pdb document - False (vapory components) components {!!These components are static and cant move!!} - (list) The frames of the end position - (int) frame - (list) The xyz end positions - (list) xyz end postions of the complement frame. - (int/float) x position - (int/float) y position - (int/float) z position Optional data per object: - (list) The frames of the rotation - (int) frame - (list) The rotation end positions - (list) rotation axes and radians to rotate of the complement frame - (list) rotation axes - (int/float) x axel (0-1) - (int/float) y axel (0-1) - (int/float) z axel (0-1) - (list) radians - (int/float) x axel - (int/float) y axel - (int/float) z axel - (list) The frames when object should be shown of not - (int) frame - (list) shown or not for the the complement frame - (bool) Should the object be shown """ ethanol_shown = False if num == 0: ethanol_shown = True # Camera camera = { "name": "camera", "molecule": [False, [0, 0, 100], [0, 0, 0]], "keyframe_endpos_frames": [0, 30, 90, 140, 190, 250, 280], "keyframe_endpos": [ [[0, 0, 100], [0, 0, 0]], [[30, 0, 50], [30, 0, -10]], [[30, 0, 50], [30, 0, -10]], [[0, 0, 75], [0, 0, 0]], [[-30, 0, 50], [-30, 0, -10]], [[-30, 0, 50], [-30, 0, -10]], [[0, 0, 100], [0, 0, 0]], ], } # Static vapory objects enzyme1 = { "name": "enzyme1", "molecule": [ False, Sphere([30, 0, -10], 4, Texture(Pigment("color", [1, 0, 0], "filter", 0.2), Finish("phong", 0.6, "reflection", 0.1))), Text("ttf", '"timrom.ttf"', '"ADH"', 0.1, 0, "scale", [2, 2, 2], models.text_model, "rotate", [0, 180, 0], "translate", [32.5, -6, -10]) ], "keyframe_endpos_frames": [0], "keyframe_endpos": [ [30, 0, -10], ], } enzyme2 = { "name": "enzyme2", "molecule": [ False, Sphere([-30, 0, -10], 4, Texture(Pigment("color", [0, 1, 0], "filter", 0.2), Finish("phong", 0.6, "reflection", 0.1))), Text("ttf", '"timrom.ttf"', '"ALDH"', 0.1, 0, "scale", [2, 2, 2], models.text_model, "rotate", [0, 180, 0], "translate", [-27.5, -6, -10]) ], "keyframe_endpos_frames": [0], "keyframe_endpos": [ [-30, 0, -10], ], } # Molecules step 1 (alcohol dehydrogenase) ethanol1_1 = { "name": "ethanol{}_1".format(num), "molecule": [True, False, "pdb/ethanol2.pdb"], "keyframe_endpos_frames": [20, 29, 30, 75, 90, 140, 141, 190, 205, 250], "keyframe_endpos": [ [ sme_pos_ethanol[0][0] + 10, sme_pos_ethanol[0][1], sme_pos_ethanol[0][2] ], sme_pos_ethanol[0], sme_pos_ethanol[0], [30, 0, 0], [30, 0, 0, "join", False, "h_movement{}_1".format(num)], sme_pos_ethanol[1], sme_pos_ethanol[1], [-30, 0, 0], [-30, 0, 0, "join", False, "water{}_3".format(num)], sme_pos_ethanol[2], ], "keyframe_rotation_frames": [29, 30, 75, 90, 140, 141, 190, 205, 250, 500], "keyframe_rotation": [ [[0, 0, 0], [0, 0, 0]], [[1, 1, 1], [math.pi * 2, math.pi * 2, math.pi * 2]], [[1, 1, 1], [math.pi * 2, math.pi * 2, math.pi * 2]], [[0, 0, 0], [0, 0, 0]], [[1, 1, 1], [math.pi * 2, math.pi * 2, math.pi * 2]], [[1, 1, 1], [math.pi * 2, math.pi * 2, math.pi * 2]], [[1, 1, 1], [math.pi * 2, math.pi * 2, math.pi * 2]], [[0, 0, 0], [0, 0, 0]], [[1, 1, 1], [math.pi * 2, math.pi * 2, math.pi * 2]], [[1, 1, 1], [math.pi * 8, math.pi * 8, math.pi * 8]], ], "keyframe_shown_frames": [0 - start_frame, 0, 250], "keyframe_shown": [ethanol_shown, True, True], } water1_1 = { "name": "water{}_1".format(num), "molecule": [True, False, "pdb/water.pdb"], "keyframe_endpos_frames": [30, 75, 90, 140], "keyframe_endpos": [ [-30, -70, 0], [30, -7.5, 0], [30, -7.5, 0, "join", False, "waterstof{}_1".format(num)], [70, -70, 0], ], "keyframe_rotation_frames": [30, 75, 90, 140], "keyframe_rotation": [[[0, 0, 0], [0, 0, 0]], [[1, 1, 1], [math.pi * 2, math.pi * 2, math.pi * 2]], [[0, 0, 0], [0, 0, 0]], [[1, 1, 1], [math.pi * 2, math.pi * 2, math.pi * 2]]], "keyframe_shown_frames": [0, 140], "keyframe_shown": [True, False], } nad1_1 = { "name": "NAD{}_1".format(num), "molecule": [True, False, "pdb/NAD.pdb"], "keyframe_endpos_frames": [30, 75, 90, 140], "keyframe_endpos": [ [-30, 70, 0], [20, 7.5, 0], [ 20, 7.5, 0, "join", False, "h_movement_nad{}_1".format(num), "hNAD{}_1".format(num) ], [70, 70, 0], ], "keyframe_rotation_frames": [30, 75, 90, 140], "keyframe_rotation": [ [[0, 0, 0], [0, 0, 0]], [[1, 1, 1], [math.pi, 1.5, 0]], [[0, 0, 0], [0, 0, 0]], [[1, 1, 1], [math.pi, math.pi * 2, math.pi]], ], "keyframe_shown_frames": [0, 140], "keyframe_shown": [True, False], } waterstof1_1 = { "name": "waterstof{}_1".format(num), "molecule": [True, True, "ethanol{}_1".format(num), [3]], "keyframe_endpos_frames": [75, 90], "keyframe_endpos": [ [0, 0, 0], [-0.3, -5.5, -0.2], ], "keyframe_shown_frames": [0, 90], "keyframe_shown": [True, False], } hnad1_1 = { "name": "hNAD{}_1".format(num), "molecule": [True, True, "ethanol{}_1".format(num), [8]], "keyframe_endpos_frames": [75, 90], "keyframe_endpos": [ [0, 0, 0], [-6, 2.7, -1.5], ], "keyframe_shown_frames": [0, 90], "keyframe_shown": [True, False], } h_movement1_1 = { "name": "h_movement{}_1".format(num), "molecule": [True, True, "ethanol{}_1".format(num), [4]], "keyframe_endpos_frames": [75, 90], "keyframe_endpos": [ [0, 0, 0], [0.1, -0.3, 0.8], ], "keyframe_shown_frames": [0, 90], "keyframe_shown": [True, False], } h_movement_nad1_1 = { "name": "h_movement_nad{}_1".format(num), "molecule": [True, True, "NAD{}_1".format(num), [64]], "keyframe_endpos_frames": [75, 90], "keyframe_endpos": [ [0, 0, 0], [-0.3, 0.2, -0.9], ], "keyframe_shown_frames": [0, 90], "keyframe_shown": [True, False], } # Molecules step 2 (ethanal dehydrogenase) nad1_2 = { "name": "NAD{}_2".format(num), "molecule": [True, False, "pdb/NAD.pdb"], "keyframe_endpos_frames": [145, 190, 205, 260], "keyframe_endpos": [ [-90, 70, 0], [-40, 7.5, 0], [ -40, 7.5, 0, "join", False, "h_movement_nad{}_2".format(num), "hNAD{}_2".format(num) ], [10, 70, 0], ], "keyframe_rotation_frames": [145, 190, 205, 260], "keyframe_rotation": [ [[0, 0, 0], [0, 0, 0]], [[1, 1, 1], [math.pi, 1.5, 0]], [[0, 0, 0], [0, 0, 0]], [[1, 1, 1], [math.pi, math.pi * 2, math.pi]], ], "keyframe_shown_frames": [0, 145, 250], "keyframe_shown": [False, True, False], } water1_2 = { "name": "water{}_2".format(num), "molecule": [True, False, "pdb/water.pdb"], "keyframe_endpos_frames": [145, 190, 205, 260], "keyframe_endpos": [ [-90, -70, 0], [-30, -7.5, 0], [-30, -7.5, 0, "join", False, "waterstof{}_2".format(num)], [30, -70, 0], ], "keyframe_rotation_frames": [145, 190, 205, 260], "keyframe_rotation": [[[0, 0, 0], [0, 0, 0]], [[1, 1, 1], [math.pi * 2, math.pi * 2, math.pi * 2]], [[0, 0, 0], [0, 0, 0]], [[1, 1, 1], [math.pi * 2, math.pi * 2, math.pi * 2]]], "keyframe_shown_frames": [0, 145, 250], "keyframe_shown": [False, True, False], } water1_3 = { "name": "water{}_3".format(num), "molecule": [True, False, "pdb/water.pdb"], "keyframe_endpos_frames": [145, 190, 205, 260], "keyframe_endpos": [ [-90, -70, 0], [-35, -2, 0], [-31, -2.2, 0.2], [30, -70, 0], ], "keyframe_rotation_frames": [145, 190, 205], "keyframe_rotation": [ [[0, 0, 0], [0, 0, 0]], [[1, 1, 1], [math.pi * 2, math.pi * 2, math.pi]], [[1, 0, 0], [1, 0, 0]], ], "keyframe_shown_frames": [0, 145, 205], "keyframe_shown": [False, True, False], } waterstof1_2 = { "name": "waterstof{}_2".format(num), "molecule": [True, True, "ethanol{}_1".format(num), [6]], "keyframe_endpos_frames": [190, 205], "keyframe_endpos": [ [0, 0, 0], [-0.3, -5.5, -0.2], ], "keyframe_shown_frames": [190, 205], "keyframe_shown": [True, False], } hnad1_2 = { "name": "hNAD{}_2".format(num), "molecule": [True, True, "water{}_3".format(num), [2]], "keyframe_endpos_frames": [190, 205], "keyframe_endpos": [ [0, 0, 0], [-1.8, 5.8, 0], ], "keyframe_shown_frames": [190, 205], "keyframe_shown": [True, False], } h_movement_nad1_2 = { "name": "h_movement_nad{}_2".format(num), "molecule": [True, True, "NAD{}_2".format(num), [64]], "keyframe_endpos_frames": [190, 205], "keyframe_endpos": [ [0, 0, 0], [-0.3, 0.2, -0.9], ], "keyframe_shown_frames": [190, 205], "keyframe_shown": [True, False], } if num == 0: animation_objects = { "camera": camera, "enzyme1": enzyme1, "enzyme2": enzyme2, "ethanol{}_1".format(num): ethanol1_1, "water{}_1".format(num): water1_1, "NAD{}_1".format(num): nad1_1, "waterstof{}_1".format(num): waterstof1_1, "hNAD{}_1".format(num): hnad1_1, "h_movement{}_1".format(num): h_movement1_1, "h_movement_nad{}_1".format(num): h_movement_nad1_1, "NAD{}_2".format(num): nad1_2, "water{}_2".format(num): water1_2, "water{}_3".format(num): water1_3, "waterstof{}_2".format(num): waterstof1_2, "hNAD{}_2".format(num): hnad1_2, "h_movement_nad{}_2".format(num): h_movement_nad1_2, } else: animation_objects = { "ethanol{}_1".format(num): ethanol1_1, "water{}_1".format(num): water1_1, "NAD{}_1".format(num): nad1_1, "waterstof{}_1".format(num): waterstof1_1, "hNAD{}_1".format(num): hnad1_1, "h_movement{}_1".format(num): h_movement1_1, "h_movement_nad{}_1".format(num): h_movement_nad1_1, "NAD{}_2".format(num): nad1_2, "water{}_2".format(num): water1_2, "water{}_3".format(num): water1_3, "waterstof{}_2".format(num): waterstof1_2, "hNAD{}_2".format(num): hnad1_2, "h_movement_nad{}_2".format(num): h_movement_nad1_2, } for obj in animation_objects: if show_name and not obj == "camera": animation_objects[obj]["show_name"] = True else: animation_objects[obj]["show_name"] = False if try_dict_keys(animation_objects[obj], "keyframe_endpos_frames"): for frame in range( len(animation_objects[obj]["keyframe_endpos_frames"])): animation_objects = add_multipliers( obj, frame, animation_objects, "keyframe_endpos_frames", start_frame, ethanol_start_wacht, ethanol_mid_wacht, aldh_speed) if try_dict_keys(animation_objects[obj], "keyframe_rotation_frames"): for frame in range( len(animation_objects[obj]["keyframe_rotation_frames"])): animation_objects = add_multipliers( obj, frame, animation_objects, "keyframe_rotation_frames", start_frame, ethanol_start_wacht, ethanol_mid_wacht, aldh_speed) if try_dict_keys(animation_objects[obj], "keyframe_shown_frames"): for frame in range( len(animation_objects[obj]["keyframe_shown_frames"])): animation_objects = add_multipliers( obj, frame, animation_objects, "keyframe_shown_frames", start_frame, ethanol_start_wacht, ethanol_mid_wacht, aldh_speed) return animation_objects