+ difference(){
+ union(){
+ rotate([0,90,0])
+ linextr_y_xz(-(bank_y_sz/2 + 0.1),
+ +(bank_y_sz/2 + 0.1))
+ PowerBankSidePlan();
+
+ EndRetainer(retainer_walls[0]);
+ mirror([0,1,0]) EndRetainer(retainer_walls[1]);
+
+ translate([0,0, bank_x_sz/2]){
+ for (y = brace_ctrs_y) {
+ translate([0,y,0]) {
+ linextr_x_yz(0, brace_total_len)
+ BraceTubePlan();
+ }
+ }
+ translate([brace_total_len, 0,0])
+ linextr_y_xz(brace_ctrs_y_nom[0] - brace_r,
+ brace_ctrs_y_nom[1] + brace_r)
+ BraceTubePlan();
+ }
+
+ for (strap_y = straps_y + straps_y_adj) {
+ translate([0, strap_y, 0]) {
+ linextr(-holder_x_sz/2,
+ +holder_x_sz/2){
+ hull(){
+ for (dy = [-1,+1] *
+ (strap_w/2 + strap_around_attach - strap_around_over)) {
+ translate([0, dy, 0])
+ circle(r=strap_around_over);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ for (strap_y = straps_y + straps_y_adj)
+ translate([0, strap_y, 0])
+ rotate([0,0,-90])
+ rotate([0,90,0])
+ linextr(-strap_w/2,
+ +strap_w/2)
+ PowerBankStrapCut();
+
+ translate([ bank_bot_y, -bank_y_sz/2, -bank_x_sz/2 ])
+ linextr_y_xz(-50,50)
+ rotate([0,0,90])
+ translate(bank_output_ctr)
+ square(center=true, bank_output_sz);
+
+ translate([0, -(bank_y_sz/2 + endwall_th), 0] + 0.01 * [-1,-1]) {
+ linextr(-200,200){
+ difference(){
+ square(center=true, top_cnr_r*2);
+ translate(top_cnr_r * [1,1])
+ circle(r= top_cnr_r);
+ }
+ }
+ }
+ }