$fn = 30; fondleCubeDims = [45,45,45]; companionCubeDims = [100,100,100]; use use //cube(fondleCubeDims,center=true); //#cube(companionCubeDims, center=true); module companionCube(){ scale([10,10,10]) scale([1/2.54,1/2.54,1/2.54]) translate([-25.4/2,-25.4/2,-25.4/2]) import("original_sources/Weighted_Companion_Cube.stl"); } module body(){ render(){ union(){ difference(){ companionCube(); mirrorCopy([1,0,0],[0,0,1],[0,1,0]){ translate([35,-35.5,35]) rotate([90,0,0]) metricCapheadAndBolt(6, 20, chamfer=false,recessCap=1); // bolt finger holes hull(){ translate([35,-22,35]) rotate([90,0,0])cylinder(h=1,d=15, center=true); translate([35,0,35]) rotate([90,0,0])cylinder(h=1,d=15, center=true); translate([0,-22,0]) rotate([90,0,0])cylinder(h=1,d=15, center=true); translate([0,0,0]) rotate([90,0,0])cylinder(h=1,d=15, center=true); } } } // Heart-removers rotate([0,0,0]) mirrorCopy([0,0,1]) translate([0,0,46.337-2])cylinder(h=5,d=30, center=true); rotate([90,0,0]) mirrorCopy([0,0,1]) translate([0,0,46.337-2])cylinder(h=5,d=30, center=true); rotate([0,90,0]) mirrorCopy([0,0,1]) translate([0,0,46.337-2])cylinder(h=5,d=30, center=true); } } } module centerSlice(){ cube([100,75,110], center=true); } module frontSlice(){ cube([100,75,110], center=true); translate([0,75,0])cube([100,75,110], center=true); } module rearSlice(){ cube([100,75,110], center=true); translate([0,-75,0])cube([100,75,110], center=true); } // center part module center(){ intersection(){ difference(){ body(); cube(fondleCubeDims + [0,500,0], center=true); } centerSlice(); } } module front(){ difference(){ body(); frontSlice(); } } module rear(){ difference(){ body(); rearSlice(); } } y=($t*2); u=y>1?1-(y-1):y; echo("t=", str($t), "y=",str(y), "u=", str(u)); render()rotate([0,0,360*$t]){ center(); translate([0,-50*u,0])front(); translate([0,+50*u,0])rear(); } /* if(!$preview){ center(); translate([0,-50,0])front(); translate([0,+50,0])rear(); }else{ #body(); }/**/