include include include include module upper_hold_floor() { difference() { union() { difference() { intersection() { scale([.9675,.9659,.9659]) hull() { outer_shell(); } translate([-300,-150,-45]) cube([600,300,5]); } translate([0,0,-40]) grid(); // Masts translate([0,0,-83]) cylinder(40.2,6.9,6.9, $fn=200); translate([-125,0,-83]) cylinder(40.2,6.9,6.9, $fn=200); translate([125,0,-83]) cylinder(40.2,6.9,6.9, $fn=200); } difference() { translate([-102,-27,-45]) cube([29,54,6]); translate([-100,-25,-46]) cube([25,50,9]); } } // Staircase Down translate([-102.4,-27.4,-85]) cube([4.8,4.8,42.4]); translate([-77.4,-27.4,-85]) cube([4.8,4.8,42.4]); translate([-102.4,-2.4,-85]) cube([4.8,4.8,42.4]); translate([-77.4,-2.4,-85]) cube([4.8,4.8,42.4]); translate([-102.4,22.6,-85]) cube([4.8,4.8,42.4]); translate([-77.4,22.6,-85]) cube([4.8,4.8,42.4]); translate([-100.2,-25.2,-46]) cube([25,50,9]); difference() { union() { translate([-101.4,-30,-80]) rotate([-51,0,0]) cube([2.8,7,70]); translate([-76.4,-30,-80]) rotate([-51,0,0]) cube([2.8,7,70]); } translate([-105,-30,-82]) cube([35,5,5]); translate([-105,15,-42.8]) cube([35,15,15]); } // Door posts translate([75-5,-25.5,-43]) cylinder(10,1,1, $fn=20); translate([100.5,-50+5,-43]) cylinder(10,1,1, $fn=20); translate([150.5,5,-43]) cylinder(10,1,1, $fn=20); translate([100.5,50-5,-43]) cylinder(10,1,1, $fn=20); } // Masts translate([0,0,-40]) cylinder(37,6.5,6.5, $fn=200); translate([0,0,-43]) cylinder(6,8,8, $fn=200); translate([-125,0,-40]) cylinder(37,6.5,6.5, $fn=200); translate([-125,0,-43]) cylinder(6,8,8, $fn=200); translate([125,0,-40]) cylinder(37,6.5,6.5, $fn=200); translate([125,0,-43]) cylinder(6,8,8, $fn=200); // Staircase Down translate([-101,19.46,-42.8]) cube([27,4,2]); translate([-102,-27,-42]) cube([4,4,22]); translate([-77,-27,-42]) cube([4,4,22]); translate([-102,-2,-42]) cube([4,4,22]); translate([-77,-2,-42]) cube([4,4,22]); translate([-102,23,-42]) cube([4,4,22]); translate([-77,23,-42]) cube([4,4,22]); translate([-102,-27,-40+19]) cube([4,54,2]); translate([-77,-27,-40+19]) cube([4,54,2]); translate([-102,-27,-40+19]) cube([29,4,2]); translate([-101,-26,-40+9]) cube([2,52,2]); translate([-76,-26,-40+9]) cube([2,52,2]); translate([-101,-26,-40+9]) cube([27,2,2]); // Staircase up translate([-177,-27,-45]) cube([4,4,42]); translate([-152,-27,-45]) cube([4,4,42]); translate([-177,-2,-45]) cube([4,4,42]); translate([-152,-2,-45]) cube([4,4,42]); translate([-177,23,-45]) cube([4,4,42]); translate([-152,23,-45]) cube([4,4,42]); difference() { union() { mirror([0,1,0]) translate([-176,-30,-40]) rotate([-51,0,0]) cube([2,5,70]); mirror([0,1,0]) translate([-151,-30,-40]) rotate([-51,0,0]) cube([2,5,70]); } translate([-180,25,-42]) cube([35,5,5]); translate([-180,-30,-3]) cube([35,15,15]); } for ( i = [0 : 8] ){ translate([-176,21-4.94*i,-39+4*i]) cube([27,4,2]); } // Captain's Staircase for ( i = [0 : 4] ){ translate([74,21-4.94*i,-39+4*i]) cube([27,4,2]); } translate([75,-1,-20]) cube([25,1,2]); translate([75,-25,-20]) cube([25,1,2]); translate([75,-25,-20]) cube([1,25,2]); translate([100,-25,-41]) cube([1,25,23]); translate([75,-25,-18]) cube([25,25,1]); difference() { union() { mirror([0,1,0]) translate([74,-30,-40]) rotate([-51,0,0]) cube([2,5,37]); mirror([0,1,0]) translate([99,-30,-40]) rotate([-51,0,0]) cube([2,5,37]); } translate([73,25,-42]) cube([35,5,5]); } translate([70,-1-25,0]) rotate([0,0,90]) difference() { union() { mirror([0,1,0]) translate([0,0,-40]) rotate([-51,0,0]) cube([2,5,70]); mirror([0,1,0]) translate([25,0,-40]) rotate([-51,0,0]) cube([2,5,70]); } translate([-1,-5-25,-42]) cube([35,30,26]); translate([-5,-60,-3]) cube([35,15,15]); } for ( i = [0 : 3] ){ translate([99.7+4.94*i,-26,-19+4*i]) cube([4,27,2]); } // Walls difference() { union() { translate([73,23,-45]) cube([4,4,42]); translate([73,-2,-45]) cube([4,4,42]); translate([73,-27,-45]) cube([4,4,42]); translate([98,23,-45]) cube([4,4,42]); translate([98,25,-45]) cube([1,4,42]); translate([98,-2,-45]) cube([4,4,42]); translate([98,-27,-45]) cube([4,4,42]); translate([98,-29,-45]) cube([1,4,42]); translate([123,-27,-45]) cube([4,4,42]); translate([98,48,-45]) cube([4,4,42]); translate([98,-52,-45]) cube([4,4,42]); translate([148,23,-45]) cube([4,4,42]); translate([148,21,-45]) cube([1,4,42]); translate([148,-2,-45]) cube([4,4,42]); translate([48,-27,-45]) cube([4,4,42]); translate([50,-24,-45]) cube([4,1,42]); translate([-2,-27,-45]) cube([4,4,42]); } translate([-3+100,0.5-50,-10]) cube([6,24,10]); translate([-3+150,0.5,-10]) cube([6,24,10]); translate([-3+100,0.5+25,-10]) cube([6,24,10]); translate([.5+50,-3-25,-10]) cube([24,6,10]); } difference() { union() { translate([100,0,-45]) cube([1,25,40]); translate([99.5,50,-45]) cube([1,18,40]); translate([99.2+50,25,-45]) cube([1,25,40]); translate([99.5,-68,-45]) cube([1,18,40]); translate([99.5-100,-75,-45]) cube([1,50,40]); translate([99.5-100,-25.5,-45]) cube([50,1,40]); translate([99.5-25,-25.5,-45]) cube([25,1,40]); difference() { translate([99.5+50,-0.5,-45]) cube([60,1,40]); translate([99.5+50+53,-1,-45.1]) cube([20,3,16]); } } //keel(); } } module upper_hold_frame() { difference() { intersection() { union() { boat_skin(); intersection() { scale([1.005,1.005,1]) boat_skin(); translate([-300,-150,-8]) cube([600,300,3]); } intersection() { keel(true); translate([-300,-150,-40]) cube([600,300,35]); } } translate([-300,-150,-40]) cube([600,300,40]); } translate([18.25,100,-10]) rotate([90,0,0]) cylinder(200,.5,.5,$fn=50); translate([6.25,100,-10]) rotate([90,0,0]) cylinder(200,.5,.5,$fn=50); translate([-6.25,100,-10]) rotate([90,0,0]) cylinder(200,.5,.5,$fn=50); translate([-18.25,100,-10]) rotate([90,0,0]) cylinder(200,.5,.5,$fn=50); } translate([0,78,0]) rigging_attachment(); translate([0,-78,0]) mirror([0,1,0]) rigging_attachment(); for ( i = [0 : 9] ) { translate([32.5,-75-4,-39+4*i]) cube([10,2,1]); translate([32.5,77,-39+4*i]) cube([10,2,1]); } } module upper_hold_door_top() { difference() { translate([0,0.1,0]) cube([6,23.8,10]); translate([3.5,5,-1]) cylinder(12,0.75,0.75,$fn=100); } } module upper_hold_door() { difference() { union() { translate([0.4,0,0]) cube([4-0.8,19,29]); difference() { translate([0.2,0,0]) cube([4-0.4,19,29]); translate([0,6,3]) cube([4,0.5,8]); translate([0,19/2-0.25,3]) cube([4,0.5,6]); translate([0,19-6.5,3]) cube([4,0.5,8]); translate([0,6,15]) cube([4,0.5,11]); translate([0,19/2-0.25,17]) cube([4,0.5,9]); translate([0,19-6.5,15]) cube([4,0.5,11]); translate([0,2,-0.1]) cube([4,0.5,29.2]); translate([0,19-2.5,-0.1]) cube([4,0.5,29.2]); } color("Brown") difference() { union() { translate([0,2,2]) cube([4,15,23]); translate([0,19/2,24]) scale([1,5,3]) rotate([0,90,0]) cylinder(4,1,1,$fn=100); } translate([-0.1,0,12]) cube([4.2,19,2]); translate([-0.1,19/2,13]) rotate([0,90,0]) cylinder(4.2,3,3,$fn=100); translate([-0.1,19/2,24]) scale([1,4,2]) rotate([0,90,0]) cylinder(4.2,1,1,$fn=100); difference() { translate([-0.01,3,3]) cube([4.2,13,21]); translate([-0.1,0,11]) cube([4.2,19,4]); translate([-0.1,19/2,13]) rotate([0,90,0]) cylinder(4.2,4,4,$fn=100); translate([-0.1,3,11]) rotate([0,90,0]) cylinder(4.2,1,1,$fn=100); translate([-0.1,19-3,11]) rotate([0,90,0]) cylinder(4.2,1,1,$fn=100); translate([-0.1,3,3]) rotate([0,90,0]) cylinder(4.2,1,1,$fn=100); translate([-0.1,19-3,3]) rotate([0,90,0]) cylinder(4.2,1,1,$fn=100); translate([-0.1,3,15]) rotate([0,90,0]) cylinder(4.2,1,1,$fn=100); translate([-0.1,19-3,15]) rotate([0,90,0]) cylinder(4.2,1,1,$fn=100); translate([-0.1,3,24]) rotate([0,90,0]) cylinder(4.2,1,1,$fn=100); translate([-0.1,19-3,24]) rotate([0,90,0]) cylinder(4.2,1,1,$fn=100); } } } translate([2,2.6,-1]) cylinder(32,0.75,0.75,$fn=100); } translate([2,18.5,13]) scale([2.1,1,3]) rotate([90,0,0]) cylinder($fn=100); } //translate([0,0,-40]) map4_stairs(); //translate([0,0,-40]) map4_walls(); //boat_skin(); //keel(); //translate([0,0,-79]) map5_interior(); //translate([0,0,-124]) bilge_floor(); //upper_hold_door_top(); upper_hold_door();