+module PowerBankItselfSidePlan(){
+ translate([0, bank_bot_y]){
+ minkowski(){
+ circle($fn=8, r=liner_th);
+ scale( bank_profile_scale_bodge *
+ bank_x_sz / ( (
+ bank_eps_bbox_x[1] -
+ bank_eps_bbox_x[0]
+ ) * pspt_to_mm ))
+ translate(pspt_to_mm *
+ [-0.5 * (bank_eps_bbox_x[0] +
+ bank_eps_bbox_x[1]),
+ -bank_eps_bbox_y[0]])
+ import("powerbank-anker-10000.dxf", convexity=5);
+ }
+ }
+}
+
+module PowerBankItself(){ ////toplevel
+ rotate([0,90,0])
+ linextr_y_xz(-bank_y_sz/2,
+ +bank_y_sz/2)
+ PowerBankItselfSidePlan();
+}
+
+module PowerBankSidePlan(){ ////toplevel
+ render() difference(){
+ rectfromto([ -holder_x_sz/2, 0 ],
+ [ +holder_x_sz/2, bank_recess_y + bank_bot_y ]);
+
+ PowerBankItselfSidePlan();
+ }
+}
+
+module PowerBankStrapCut(){ ////toplevel
+ difference(){
+ rectfromto([ -holder_x_sz, -0.05 ],
+ [ +holder_x_sz, strap_th + strap_r ]);
+ hull(){
+ for (sx=[-1,+1]) {
+ translate([sx * (holder_x_sz/2 - strap_r + 0.1),
+ strap_th + strap_r])
+ circle(strap_r);
+ }
+ }
+ }
+}
+
+module PowerBankHolderTest(){ ////toplevel
+ difference(){
+ linextr(-1,5) PowerBankSidePlan();
+ linextr(0, strap_w) PowerBankStrapCut();
+ }
+}
+
+module EndRetainer(depth){ ////toplevel
+ translate([0, -bank_y_sz/2, 0]) {
+ linextr_y_xz(-endwall_th, 0)
+ rectfromto([ 0, -holder_x_sz/2 ],
+ [ -depth, +holder_x_sz/2 ]);
+
+ for (m=[0,1]) {
+ mirror([0,0,m]) {
+ linextr(-holder_x_sz/2, -bank_x_sz/2){
+ hull(){
+ rectfromto([ 0, -endwall_th ],
+ [ depth, 0 ]);
+ rectfromto([ 0, 0 ],
+ [ 0.1, depth-0.1 ]);
+ }
+ }
+ }
+ }
+ }
+}
+
+module BraceTubePlan(){
+ intersection(){
+ circle(r= brace_r);
+ rectfromto(brace_r * [-2, 0],
+ brace_r * [+2, +2]);
+ }
+}
+
+module PowerBankHolder(){ ////toplevel