$fn=120;
ep=0.1;

module reference() {
  translate([-0.1, 0, 5]) rotate([0, 0, 0.5])
  translate([0, -5, 0]) rotate([0, 0, -90]) difference() {
    scale([0.08, 0.08, 0.01]) surface(file="yak9-overhead.png", center=true, convexity = 5, invert = true);
    translate([-20, -20, -1.75]) cube([40, 40, 1]);
  }

  translate([2, -5, 2.60]) rotate([90, 0, -90]) difference() {
    scale([0.066, 0.066, 0.01]) surface(file="yak9-profile.png", center=true, convexity = 5, invert = true);
    translate([-20, -20, -1.75]) cube([40, 40, 1]);
  }

  translate([0, 5, 1.70]) rotate([90, 0, 0]) difference() {
    scale([0.043, 0.043, 0.01]) surface(file="yak9-front.png", center=true, convexity = 5, invert = true);
    translate([-20, -20, -1.75]) cube([40, 40, 1]);
  }
}

module yak9() {
  color("SaddleBrown")
  // fuselage
  /*difference() {
    translate([0, -5, -0.5]) union() {
      intersection() {
        // tail shaping (x & y)
        translate([98.75, 4, -1]) cylinder(r=100, h = 6);
        translate([-98.75, 4, -1]) cylinder(r=100, h = 6);
      }

      // nose shaping
      translate([0, 6.25, 2.4]) scale([1, 4, 1]) sphere(r=1.25);
      translate([-3, 6.0, 1.9]) scale([1, 2.5, 1]) rotate([0, 90, 0]) cylinder(d = 3, h=6);
    }

    translate([-2, -19, -2]) cube([4, 4, 8]);
  }*/

  union() {
    translate([0, 2, 1.80]) rotate([90, 0, 0]) cylinder(d=2.5, h=24);
  }
}

module messerschmitt() {
  color("SlateGrey")
  difference() {
    union() {
      // right wing
      translate([0, -1, 0])
      intersection() {
        union() {
          rotate([0, 0, -5]) translate([-ep, -0.25, 0]) cube([14.5 + ep, 4.25, 1]);
          rotate([0, 0, 8]) translate([-ep + 0.5, -3.50, 0]) cube([14 + ep, 4, 1]);
          translate([8, 0.5, 0.9]) cube([1, 4, 1], center=true);
          translate([8, 0.5, 0.9]) cube([4, 1, 1], center=true);
        }
        translate([-6, 0, 0]) sphere(20);
        translate([-17.5, 0.5, 1]) scale([4, 1, 1]) cylinder(r=8, h=2, center=true);
      }

      // right tail wing
      translate([-ep + 0.25, -15.35, 2.5]) rotate([0, 0, 4]) cube([4 + ep, 1.5, 1]);
      translate([-ep , -13.65, 2.5]) rotate([0, 0, -15]) cube([4 + ep, 1.5, 1]);
      translate([4, -14.15, 2.5]) cylinder(r=0.90, h=1);

      mirror([1, 0, 0])
      union() {
        // left wing
        translate([0, -1, 0])
        intersection() {
          union() {
            rotate([0, 0, -5]) translate([-ep, -0.25, 0]) cube([14.5 + ep, 4.25, 1]);
            rotate([0, 0, 8]) translate([-ep + 0.5, -3.50, 0]) cube([14 + ep, 4, 1]);
            translate([8, 0.5, 0.9]) cube([1, 4, 1], center=true);
            translate([8, 0.5, 0.9]) cube([4, 1, 1], center=true);
          }
          translate([-6, 0, 0]) sphere(20);
          translate([-17.5, 0.5, 1]) scale([4, 1, 1]) cylinder(r=8, h=2, center=true);
        }

        // left tail wing
        translate([-ep + 0.25, -15.35, 2.5]) rotate([0, 0, 4]) cube([4 + ep, 1.5, 1]);
        translate([-ep , -13.65, 2.5]) rotate([0, 0, -15]) cube([4 + ep, 1.5, 1]);
        translate([4, -14.15, 2.5]) cylinder(r=0.90, h=1);
      }

      // fuselage
      intersection() {
        union() {
          translate([0, 9, 1.25]) rotate([90, 0, 0]) cylinder(r=1.5, h=13);
          translate([0, -2, 1.25]) rotate([-5.0, 0, 0]) translate([0, -2, 0]) scale([0.75, 9.0, 1]) sphere(1.5);
          translate([0, -3, 1.25]) rotate([-5.0, 0, 0]) scale([1, 3.0, 1]) sphere(1.5);
        }

        translate([0, -17.0, 1.5]) scale([1, 1.5, 1]) sphere(16);
        translate([0, -10, 1.25]) scale([1, 6.0, 1]) sphere(3);
      }

      //cockpit
      //#translate([0, -3, 1.25]) rotate([-2.5, 0, 0]) scale([1, 3.0, 1]) sphere(1.5);
      difference() {
        translate([0, -5, 2.25]) rotate([92, 0, 0]) cylinder(d=2,h=10, center=true);
        translate([0, 0.5, 3]) rotate([30, 0, 0]) cube([2, 2, 3], center=true);
      }

      // tail
      translate([0, -14.40, 3.0]) rotate([-15, 0, 0]) rotate([0, 90, 0]) cube([2.5, 3, 1], center=true);
      translate([0, -13.5, 3.5]) rotate([25, 0, 0]) rotate([0, 90, 0]) cube([2.5, 3, 1], center=true);
      translate([0, -14.00, 4.5]) rotate([0, 90, 0]) cylinder(r=1.50, h=1, center=true);
      translate([0, -14, 0]) scale([0.5, 1, 1]) cylinder(r=1, h=3);
    }

    translate([0, -5, -2.5]) cube([30, 30, 5], center=true);
  }
}

reference();
//#messerschmitt();
yak9();