+++ /dev/null
-// -*- C -*-
-
-include <utils.scad>
-
-tube_dia = 48.3;
-
-th = 7;
-
-pin_gap = 1.5; // around
-
-smooth_r = 15;
-
-bolt_dia = 5 + 0.75;
-bolt_flat = 10 + 1;
-
-open_gap = 10;
-
-hinge_unit = 10;
-hinge_units = 4;
-hinge_z_gap = 1;
-
-// calculated
-
-pin_dia = th;
-hole_dia = th + pin_gap;
-
-hinge_gap = pin_gap;
-
-hinge_o_r = 0.5 * hole_dia + th;
-
-hinge_x = -0.5 * tube_dia - hinge_o_r;
-bolt_x = 0.5 * tube_dia + th + bolt_flat * 0.5;
-max_x = bolt_x + max(0.5 + bolt_dia + th, 0.5 * bolt_flat/2);
-
-flats_y = open_gap/2 + th;
-
-stride_z = hinge_unit*2 + hinge_z_gap*2;
-total_z = hinge_units * stride_z - hinge_z_gap;
-
-min_z = -total_z/2;
-max_z = +total_z/2;
-
-pin_flatten = pin_dia/2 * (1 - cos(45));
-
-$fa = 3;
-$fs = 0.1;
-
-module SmoothPlan(){
- offset(r=-smooth_r) offset(delta=smooth_r) children(0);
-}
-
-module TubePlan(){ circle(r = tube_dia/2); }
-module MainCirclePlan(){ circle(r = tube_dia/2 + th); }
-
-module PlanWeldMainCircle(){
- intersection(){
- difference(){
- SmoothPlan(){
- union(){
- MainCirclePlan();
- children(0);
- }
- }
- TubePlan();
- }
- rotate(-135) square(100);
- }
-}
-
-module MainPlan(flatten=false) {
- difference(){
- SmoothPlan()
- union(){
- translate([hinge_x, 0]) circle(r= hinge_o_r);
- MainCirclePlan();
- rectfromto([0, -flats_y],
- [max_x, +flats_y]);
- }
- TubePlan();
- rectfromto([0, -open_gap/2],
- [max_x+1, +open_gap/2]);
- translate([hinge_x, 0]) {
- intersection(){
- circle(r= hole_dia/2);
- if (flatten)
- translate([ pin_flatten, 0 ])
- square(center=true, [hole_dia, hole_dia + 1]);
- }
- }
- }
-}
-
-module Portion(d=0) {
- translate([hinge_x, 0]) circle(r= hinge_o_r + d);
- rectfromto([hinge_x*2, 0],
- [max_x+10, -(tube_dia/2+th+10)]);
-}
-
-module MainPlanA(flatten){
- intersection(){
- MainPlan(flatten);
- Portion(0);
- }
-}
-
-module MainPlanB(flatten){
- difference(){
- MainPlan(flatten);
- Portion(hinge_gap);
- }
-}
-
-module VHookPlan() {
- PlanWeldMainCircle(){
- rectfromto([ -5, 0 ],
- [ +5, -60 ]);
- }
-}
-
-module HalfClampX(flatten=false){
- difference(){
- translate([0,0, min_z]) {
- linextr(0, total_z) mirror([0,1]) MainPlanB();
- for (i=[0 : hinge_units-1]) {
- translate([0,0, stride_z*i])
- linextr(0, hinge_unit) MainPlanA(flatten);
- }
- }
- for (dz=[-1,+1]) {
- translate([ bolt_x, 0, dz * total_z/4 ]) {
- translate([0, -tube_dia/2, 0])
- rotate([-90,0,0])
- cylinder(r= bolt_dia/2, h= tube_dia);
- translate([0, -flats_y, 0])
- rotate([90,0,0])
- cylinder(r= bolt_flat/2, h= tube_dia/2);
- }
- }
- }
-}
-
-module PlanDemo(){ ////toplevel
- MainPlan();
- translate([0,0,-4]) color("red") Portion(1);
- translate([0,0,-2]) color("grey") Portion(0);
-
- translate([0, tube_dia*1.5]) {
- MainPlanB();
- MainPlanA();
- }
-
- translate([0, -tube_dia*1.5]) {
- VHookPlan();
- }
-// translate([max_x - hinge_x + 20, 0]) color("blue") MainPlanA();
-}
-
-module GeneralB(){ ////toplevel
- HalfClampX(true);
-}
-
-module DummyA(){ ////toplevel
- HalfClampX();
-}
-
-module VHookA(){ ////toplevel
- DummyA();
- linextr(min_z, max_z)
- VHookPlan();
-}
-
-module Demo(){ ////toplevel
- color("red") rotate([180,0,0]) GeneralB();
- color("blue") DummyA();
-}
-
-//PlanDemo();
-//HalfClamp();