+ circle(r = 3*w + d);
+ circle(r = w + d);
+ translate([-10*w, -10*w]) square([20*w, 10*w]);
+ }
+ }
+}
+
+module DivideCut(){
+ w = tube_th/2;
+ d = divide_gap;
+ br = tube_dia/2 + tube_th;
+
+ difference(){
+ offset(r=divide_gap) DivideHook();
+ DivideHook();
+ translate([-2*w,0]) mirror([0,1]) square([4*w, 4*w]);
+ }
+}
+
+module DivideCutB(){
+ w = tube_th/2;
+ d = divide_gap;
+ br = tube_dia/2 + tube_th;
+
+ intersection(){
+ translate([br - tube_th/2,0]) {
+ difference(){
+ circle(r=br + d);
+ circle(r=br);
+ }
+ }
+ translate([-2*w, 0]) mirror([0,1]) square(4*w);
+ }
+}
+
+module DivideSurround(){
+ w = tube_th/2;
+ d = divide_gap;
+
+ offset(r= w*2) {
+ hull() {
+ DivideCut();
+ translate([-(4*w + 2*d), 8*w]) circle(r=w);
+ }
+ }
+}
+
+module DivideInPlace(){
+ rotate([0,0, -divide_angle])
+ translate([ -tube_dia/2 -tube_th/2, 0])
+ children();
+}
+
+module MainPlan(){ ////toplevel
+ difference(){
+ union(){
+ difference(){
+ union(){
+ hull(){
+ for (t=[0, tube_rear_extra_th])
+ translate([0, -t])
+ circle(r = tube_or);
+ }
+ rotate([0,0, backflange_angle])
+ translate([-back_ohw,0]) mirror([0,1])
+ square([back_ohw*2, backflange_ymin]);
+
+ translate([0, lock_0y]){
+ oval(lock_or);
+ }
+
+ hull(){
+ JoinCircs(0.01);
+ polygon([[0,0], lock_0, [-lock_0[0], lock_0[1]]]);
+ }
+ }
+
+ rotate([0,0, backflange_angle])
+ translate([-back_gap/2,1]) mirror([0,1])
+ square([back_gap, backflange_ymin+2]);
+
+ JoinCircs(join_cr);