+module HubEnd(){ ////toplevel
+ thick = hubmainthick+hubbasethick;
+ difference(){
+ union(){
+ for (ang=[0 : 60 : 359]) {
+ rotate([0,0,ang]) {
+ translate([hubmainrad - hubwalls/2, -hubbasestalkwidth/2, 0])
+ cube([hubbaserad - (hubmainrad - hubwalls/2),
+ hubbasestalkwidth, hubbasethick]);
+ ExtenderPillar(length = hubmainrad-hubwalls/2,
+ height = hubbasethick + hubmainthick,
+ pillarw = hubpillarw);
+ }
+ }
+ cylinder(r=axlerad+hubwalls, h=thick);
+ cylinder(r=hubmainrad-0.1, h=hubbaseweb);
+ difference(){
+ cylinder(r=hubmainrad, h=thick, $fn=100);
+ translate([0,0,-1])
+ cylinder(r=hubmainrad-hubwalls, h=thick+2);
+ }
+ difference(){
+ cylinder(r=hubbaserad, h=hubbasethick, $fn=50);
+ translate([0,0,-1])
+ cylinder(r=hubbaserad-hubwalls, h=hubbasethick+2);
+ }
+ }
+ translate([0,0,-1])
+ cylinder(r=axlerad+axleslop, h=thick+2, $fn=50);
+ }
+}
+
+
+module TestKit(){ ////toplevel
+ translate([60,0,0]) mirror([1,0,0]) Pin();
+ translate([60,15,0]) mirror([1,0,0]) Pin();
+ translate([0,40,0]) intersection(){
+ Trestle();
+ translate([-50,-10,-1]) cube([100,100,100]);
+ }
+ intersection(){
+ translate([-60,10,0]) Bar();
+ cube(50,center=true);
+ }
+ %translate([50,40, AxlePin_zoffset()]) FtAxlePin();
+ %translate([0,-20,0]) AxleWasher();
+}
+
+module DemoSpool(){
+ rotate([0,90,0]) translate([0,0,-spoolwidth/2])
+ difference(){
+ cylinder(r=spoolouterrad, h=spoolwidth);
+ translate([0,0,-1]) cylinder(r=spoolinnerrad, h=spoolwidth+2);
+ }
+}
+
+module Demo(){ ////toplevel
+ color("blue") Bar();
+ for (mir=[0,1]) {
+ mirror([mir,0,0]) {
+ color("red") translate([spoolbarlen/2,0,0])
+ rotate([90,0,90]) Trestle();
+ color("orange")
+ translate([spoolwidth/2 + hubbasethick + spoolinnerslop*2/3, 0, barz])
+ rotate([0,90,0]) AxleWasher();
+ color("orange") translate([axlepin_x, 0, barz])
+ rotate([90,0,90]) FtAxlePin();
+ color("cyan")
+ translate([spoolwidth/2 + hubbasethick + spoolinnerslop*1/3, 0, barz])
+ rotate([0,-90,0]) HubEnd();
+ }
+ }
+ %translate([0,0,barz]) DemoSpool();
+}
+