import bpy import math import bmesh import re from mathutils.bvhtree import BVHTree from mathutils import Vector, Euler, Matrix import time import flight_animation ### Setting the globe (the object of which the surface will be used as the height) main_sphere = bpy.data.objects["Sphere.002"] ### Making the globe useful origin: Vector = main_sphere.matrix_world.translation bvh=flight_animation.create_bvh_from_object(main_sphere) ### Setting up world airport_shader: bpy.types.Material | None = None # Placeholder for shader, can be set to a specific material if needed flughafen1 = flight_animation.Airport( # Change to Place you want name="BER2", lon_lat="52° 21′ 44″ N, 13° 30′ 2″ O", bvh=bvh, origin=origin, radius=0.1, shader=airport_shader ) flughafen2 = flight_animation.Airport( name="HEL", lon_lat="60° 19′ 2″ N, 24° 57′ 48″ O", bvh=bvh, origin=origin, radius=0.1, shader=airport_shader ) flughafen3 = flight_animation.Airport( name="NRT", lon_lat="35° 45′ 53″ N, 140° 23′ 11″ O", bvh=bvh, origin=origin, radius=0.1, shader=airport_shader ) ### Initialize Animation airplane = bpy.data.objects["Airplane"] # airplane_vector = Vector((0, 1, 0)) # Setting the airplane default vector (x, y, z) # reset_object(airplane) # Resetting the airplane location and rotation centerjoint = bpy.data.objects["Center_Joint"] # centerjoint_vectors = Vector((0, 0, 1)) # Setting the center joint default vector (x, y, z) # reset_object(centerjoint) # Resetting the center joint location and rotation ### Animation Logic # Way between airport1 and airport2 for airport in [flughafen1, flughafen2, flughafen3]: print("lat: ", airport.latitude, "lon: ", airport.longitude) lat=[ math.radians(flughafen1.latitude - 90), math.radians(flughafen2.latitude - 90), math.radians(flughafen3.latitude - 90) ] print("lat:", lat) lon=[ math.radians(flughafen1.longitude-90), math.radians(flughafen2.longitude-90), math.radians(flughafen3.longitude-90) ] print("lon:", lon) airplane_height = [ flughafen1.get_coordinates().length + 0.1, flughafen2.get_coordinates().length + 0.1, flughafen3.get_coordinates().length + 0.1 ] print("airplane_height:", airplane_height) travel_height = airplane_height[0] * 1.1 # for 10% extra height in relation to the origin print("travel_height:", travel_height) # Set to the Rotation the plane needs to have for the correct rotation at the airport airplane_rotation = [ # rotate the airplane at the timestamps of the airports !!! Only rotate the z achses in the plane propertys math.radians(-35), # rotate so the plane on the first airport so that the front points to the 2nd math.radians(-42), # rotate the plane at the second airport so that the back points to the last airport math.radians(-111), # like first rotation from 2nd to third math.radians(-102) # like 2nd rotation ] #! You do not need more rotation points the rest is done by the interpolation in blender. Maybe you need to set the motion to a constant instead of accelerating and decelerating frame_count = 720 clear_timeline([airplane, centerjoint]) airplane.rotation_euler.x = math.radians(90) ### Start BER bpy.context.scene.frame_set(0) airplane.location.z = airplane_height[0] airplane.keyframe_insert(data_path="location", index=2) airplane.rotation_euler.z = airplane_rotation[0] airplane.keyframe_insert(data_path="rotation_euler", index=2) centerjoint.rotation_euler.x = lat[0] centerjoint.rotation_euler.z = lon[0] centerjoint.keyframe_insert(data_path="rotation_euler", index=-1) ### flight height start bpy.context.scene.frame_set(32) airplane.location.z = travel_height airplane.keyframe_insert(data_path="location", index=2) ### End of high flight bpy.context.scene.frame_set(49) airplane.location.z = travel_height airplane.keyframe_insert(data_path="location", index=2) ### Landing HEL bpy.context.scene.frame_set(81) airplane.location.z = airplane_height[1] airplane.keyframe_insert(data_path="location", index=2) airplane.rotation_euler.z = airplane_rotation[1] airplane.keyframe_insert(data_path="rotation_euler", index=2) centerjoint.rotation_euler.x = lat[1] centerjoint.rotation_euler.z = lon[1] centerjoint.keyframe_insert(data_path="rotation_euler", index=-1) ### Start HEL bpy.context.scene.frame_set(127) airplane.location.z = airplane_height[1] airplane.keyframe_insert(data_path="location", index=2) airplane.rotation_euler.z = airplane_rotation[2] airplane.keyframe_insert(data_path="rotation_euler", index=2) centerjoint.rotation_euler.x = lat[1] centerjoint.rotation_euler.z = lon[1] centerjoint.keyframe_insert(data_path="rotation_euler", index=-1) ### flight height start bpy.context.scene.frame_set(255) airplane.location.z = travel_height airplane.keyframe_insert(data_path="location", index=2) ### End of high flight bpy.context.scene.frame_set(592) airplane.location.z = travel_height airplane.keyframe_insert(data_path="location", index=2) ### Landing NRT bpy.context.scene.frame_set(720) airplane.location.z = airplane_height[2] airplane.keyframe_insert(data_path="location", index=2) airplane.rotation_euler.z = airplane_rotation[3] airplane.keyframe_insert(data_path="rotation_euler", index=2) centerjoint.rotation_euler.x = lat[2] centerjoint.rotation_euler.z = lon[2] centerjoint.keyframe_insert(data_path="rotation_euler", index=-1) ### reset bpy.context.scene.frame_set(0) print("END")