scale=170/1800; // only used to scale the drive shaft x,y,z // this is mm beam / mm beam, ie, 17cm from 1.8 meters. // everything else was hardcoded, so this parameter // isn't that useful to achieve an arbitrary scaling. shaftangle=5.340021; // as taken from drawing (and then from awk code) shaftlength=4626.94 * scale; // shaft length, then scaled down for printing shaftdia=6; // mm of outer brass tube. Measures 5.62mm // 5.66mm wasnt quite enough clearance shaft_x=7675*scale; shaft_y=0; shaft_z=-89*scale; rudderpost_x=717; // mm ruddershaftdia=3; // mm motoraccess_x=230; // mm , rememeber x is along the length of the boat midaccess_x=400; rudderaccess_x=686; //$fa=5; $fn=50; //intersection() // this or union() to choose a section, or show all. And change both the *0 to *1 below on each union() // line to enable that section. The x on each line (cube() and translate()) sets the offset, that is { // adative, starting at the bow translate([0,-100,100-105]) union(){ cube([150,20+200*0,20+100*0]); translate([150,0,0])union(){ cube([155,20+200*0,10+100*0]); translate([155,0,0])union(){ cube([155,20+200*0,20+100*0]); translate([155,0,0])union(){ cube([125,20+200*0,10+100*0]); translate([125,0,0])union(){ cube([110,20+200*0,20+100*0]); translate([110,0,0])union(){ cube([35,10+200*0,10+100*0]); translate([35,0,0])union(){ } } } } } } } difference() // entire boat , subtract prop shaft and rudder shaft { union() // boat skin (+lid lip) + internal prop support { difference() // make a boat shell, with lid lip { union() { import("boat_scaled.stl",convexity=10); import("block_scaled.stl",convexity=10); translate([0,0,51]) // motor+rudder access lip hull() { translate([rudderaccess_x,-10,0])cylinder(r=32+3,r2=32+2,h=19); translate([rudderaccess_x,10,0])cylinder(r=32+3,r2=32+2,h=19); translate([midaccess_x,-28,0])cylinder(r=32+3,r2=32+2,h=28.5); translate([midaccess_x,28,0])cylinder(r=32+3,r2=32+2,h=28.5); translate([motoraccess_x,-26,0])cylinder(r=32+3,r2=32+2,h=34); translate([motoraccess_x,26,0])cylinder(r=32+3,r2=32+2,h=34); } } union() { import("boat_scaled_inside.stl",convexity=10); //translate([0,-100,60]) // cut top off to see what is going on // cube([800,200,50]); translate([0,0,50]) // (star this to create boat_combineall_nohatch.stl) hull() // rudder access cutout { translate([rudderaccess_x,-10,0])cylinder(r=32,h=29); translate([rudderaccess_x,10,0])cylinder(r=32,h=29); translate([midaccess_x,-28,0])cylinder(r=32,h=35); translate([midaccess_x,28,0])cylinder(r=32,h=35); translate([motoraccess_x,-26,0])cylinder(r=32,h=43); translate([motoraccess_x,26,0])cylinder(r=32,h=43); } } } intersection() { import("boat_scaled_inside.stl",convexity=10); union() { translate([shaft_x-0*scale,shaft_y,shaft_z]) // internal prop shaft support block rotate([0,-shaftangle,180]) translate([190,-4,-30]) cube([2400*scale,8,30]); // motor support block. well, the feet, the block is best done sep. translate([220,-10+30,0])rotate([0,shaftangle,0])cube([70,20,25]); translate([220,-10-30,0])rotate([0,shaftangle,0]) cube([70,20,25]); // over sized motor support block, to find distance between height of support block and prop shaft //translate([220,-10-30,0])rotate([0,shaftangle,0])cube([50,100,50]); // which was measured in meshlab to be 10.51mm above top face of motor mounts // rudder post translate([rudderpost_x,0,10]) cylinder(35,8,8); } } } union() // things to subtract, prop shaft and rudder shaft { // prop shaft to subtract translate([shaft_x,shaft_y,shaft_z]) rotate([0,shaftangle-90,0]) cylinder(shaftlength+200,shaftdia/2,shaftdia/2); // add 200 to shaft length, making a hole in the optional oversized support block above, to see how far above the shaft is from the motor mount blocks // rudder shaft translate([rudderpost_x,0,10]) cylinder(35,ruddershaftdia/2,ruddershaftdia/2); } } } // overall intersection() or union(), to show entire object or just chop out a printable section