$fn=200; motoraccess_x=230; // mm , rememeber x is along the length of the boat midaccess_x=400; rudderaccess_x=686; intersection(){ // cut off a section to print, 3 sections just fit my printer - though they might fall over when printed vertically... translate([192,-100,0])cube([177,200,200]); translate([192+177*1,-100,0])cube([177,200,200]); translate([192+177*2,-100,0])cube([178,200,200]); difference() // hull of top hatch (using above but +1mm up and out) and balls { // minus // lower boat hull + bigger hatch edge + filled inside union(){ translate([0,0,51]) // motor+rudder access lip, expanded by 2mm out and up hull() // so that it can be subtracted from the hatch { // original access hatch translate([rudderaccess_x,-10,0])cylinder(r=32+6,r2=32+5,h=22); translate([rudderaccess_x,10,0])cylinder(r=32+6,r2=32+5,h=22); translate([midaccess_x,-28,0])cylinder(r=32+6,r2=32+5,h=31.5); translate([midaccess_x,28,0])cylinder(r=32+6,r2=32+5,h=31.5); translate([motoraccess_x,-26,0])cylinder(r=32+6,r2=32+5,h=37); translate([motoraccess_x,26,0])cylinder(r=32+6,r2=32+5,h=37); // spheres above surface translate([rudderaccess_x-10,-10,-10])sphere(40); translate([rudderaccess_x-10, 10,-10])sphere(40); translate([midaccess_x,-20,-5])sphere(50); translate([midaccess_x,20,-5])sphere(50); translate([motoraccess_x,-22,20])sphere(30); translate([motoraccess_x,22,20])sphere(30); } } union() { import("boat_combineall_nohatch.stl",convexity=10); translate([0,0,51]) // motor+rudder access lip, expanded by 1mm out and up hull() // so that it can be subtracted from the hatch { translate([rudderaccess_x,-10,0])cylinder(r=32+4,r2=32+3,h=20); translate([rudderaccess_x,10,0])cylinder(r=32+4,r2=32+3,h=20); translate([midaccess_x,-28,0])cylinder(r=32+4,r2=32+3,h=29.5); translate([midaccess_x,28,0])cylinder(r=32+4,r2=32+3,h=29.5); translate([motoraccess_x,-26,0])cylinder(r=32+4,r2=32+3,h=35); translate([motoraccess_x,26,0])cylinder(r=32+4,r2=32+3,h=35); } rotate([0,1.7,0]) translate([0,-100,-116]) // final hack, also remove bits of hatch that went below the hull cube([900,200,200]); } } }