Skip to content

Getting Started

This guide assumes you are using uv.

Installation & Setup

Create a new project using:

uv init -p 3.13 test-pymace
cd test-pymace

Than install the dependencies needed

uv add pymace

If your are on linux you might need to add pyqt6 aswell.

Run your fist vehicle Setup

For your first vehicle setup just copy the following into the vehicle.py and execute.

from pymace.domain.vehicle import Vehicle
from pymace.domain.wing import Wing, WingSegment, WingSegmentBuild


def vehicle_setup() -> Vehicle:
    vehicle = Vehicle()
    vehicle.payload = 0
    vehicle.mass = 2.25

    vehicle.center_of_gravity = [0.088, 0.0, 0.0]

    main_wing_construction = WingSegmentBuild(
        build_type="Negativ", surface_weight=0.400
    )

    ####################################################################################################################
    # MAIN WING
    main_wing = Wing()
    main_wing.tag = "main_wing"
    main_wing.origin = [0, 0, 0]
    main_wing.airfoil = "jx-gp-055"
    main_wing.angle = 2.0
    main_wing.symmetric = True

    segment = WingSegment()
    segment.span = 0.5
    segment.inner_chord = 0.235
    segment.outer_chord = 0.222
    segment.dihedral = 3
    segment.inner_x_offset = 0.0
    segment.outer_x_offset = -0.002
    segment.control = True
    segment.wsb = main_wing_construction
    main_wing.add_segment(segment)

    segment = WingSegment()
    segment.span = 0.2
    segment.inner_chord = 0.222
    segment.outer_chord = 0.210
    segment.dihedral = 3
    segment.inner_x_offset = -0.002
    segment.outer_x_offset = 0.002
    segment.control = True
    segment.wsb = main_wing_construction
    main_wing.add_segment(segment)

    segment = WingSegment()
    segment.span = 0.2
    segment.inner_chord = 0.210
    segment.outer_chord = 0.197
    segment.dihedral = 3
    segment.inner_x_offset = 0.004
    segment.outer_x_offset = 0.003
    segment.control = True
    segment.wsb = main_wing_construction
    main_wing.add_segment(segment)

    segment = WingSegment()
    segment.span = 0.2
    segment.inner_chord = 0.197
    segment.outer_chord = 0.174
    segment.dihedral = 3
    segment.inner_x_offset = 0.003
    segment.outer_x_offset = 0.013
    segment.control = True
    segment.wsb = main_wing_construction
    main_wing.add_segment(segment)

    segment = WingSegment()
    segment.span = 0.15
    segment.inner_chord = 0.174
    segment.outer_chord = 0.144
    segment.dihedral = 3
    segment.inner_x_offset = 0.013
    segment.outer_x_offset = 0.028
    segment.control = True
    segment.wsb = main_wing_construction
    main_wing.add_segment(segment)

    segment = WingSegment()
    segment.span = 0.1
    segment.inner_chord = 0.144
    segment.outer_chord = 0.115
    segment.dihedral = 3
    segment.inner_x_offset = 0.028
    segment.outer_x_offset = 0.045
    segment.control = True
    segment.wsb = main_wing_construction
    main_wing.add_segment(segment)

    segment = WingSegment()
    segment.span = 0.07
    segment.inner_chord = 0.115
    segment.outer_chord = 0.08
    segment.dihedral = 3
    segment.inner_x_offset = 0.045
    segment.outer_x_offset = 0.068
    segment.control = True
    segment.wsb = main_wing_construction
    main_wing.add_segment(segment)

    segment = WingSegment()
    segment.span = 0.05
    segment.inner_chord = 0.08
    segment.outer_chord = 0.05
    segment.dihedral = 3
    segment.inner_x_offset = 0.068
    segment.outer_x_offset = 0.09
    segment.control = True
    segment.wsb = main_wing_construction
    main_wing.add_segment(segment)

    main_wing.build(resize_areas=False, resize_x_offset_from_hinge_angle=False)

    vehicle.add_wing("main_wing", main_wing)
    vehicle.get_reference_values()

    return vehicle


if __name__ == "__main__":
    vehicle = vehicle_setup()
    vehicle.plot_vehicle(azim=230, elev=30)

You should see a 3D-Image of the main wing.