X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=pin-hinge.scad;h=81d527e478ad50a5550861ae5cecc98bac011b78;hb=6a319b7ceeca0d02fbeac92c0737e976919d87a1;hp=658bfa31eb18fe7895a7d0dc29c8b7aa92660239;hpb=b87df3efc1d4f3f212ccc3188d3c9b62a933ffa4;p=reprap-play.git diff --git a/pin-hinge.scad b/pin-hinge.scad index 658bfa3..81d527e 100644 --- a/pin-hinge.scad +++ b/pin-hinge.scad @@ -1,23 +1,100 @@ // -*- C -*- -$hinge_pin_dia = 0.795 + 0.35; +include + +$hinge_pin_dia = 0.795 + 0.75; $hinge_main_dia = 4.0; $hinge_inter_gap = 0.50; +$hinge_prong_minwidth = 3.0; $hinge_noncrit_gap = 1.0; $fa = 3; $fs = 0.05; +module HingePinPlan(){ + circle(r= $hinge_pin_dia/2); +} + module HingeProngPlan(behind){ + hull(){ + circle(r= $hinge_main_dia/2); + polygon([[0,0], + [-$hinge_main_dia/2, -behind], + [+$hinge_main_dia/2, -behind]]); + } +} + +module HingeGapPlan() { + circle(r = $hinge_main_dia/2 + $hinge_inter_gap); +} + +module PlanDemo(){ + HingeProngPlan(5); + %HingeGapPlan(); + translate([0,0,1]) color("red") HingePinPlan(); +} + +module HingePinUnitCell(l) { + eff_l = l + $hinge_inter_gap; + pairs = floor(eff_l / (2*($hinge_prong_minwidth + $hinge_inter_gap))); + stride = eff_l / pairs; + $hinge__prong_width = stride/2 - $hinge_inter_gap; + for (i=[0:pairs-1]) { + translate(stride * i * [1,0,0]) + children(0); + } +} + +module HingePositive(l, behind){ + HingePinUnitCell(l){ + linextr_x_yz(0, $hinge__prong_width) + HingeProngPlan(behind); + } +} + +module HingeNegative(l){ + linextr_x_yz(-0.1, l+0.1) + HingePinPlan(); + HingePinUnitCell(l){ + linextr_x_yz($hinge__prong_width, + $hinge__prong_width*2 + 2*$hinge_inter_gap) + HingeGapPlan(); + } +} + +test_l = 30; +test_wb = 12; +test_h = 12; + +test_face_gap = 0.75; + +module Demo(){ difference(){ - hull(){ - circle(r= $hinge_main_dia/2); + HingePositive(test_l, test_h/2); + %HingeNegative(test_l); + } +} + +module TestBody(){ + linextr_x_yz(0, test_l){ + offset(delta = -test_face_gap/2) polygon([[0,0], - [-$hinge_main_dia/2, -behind], - [+$hinge_main_dia/2, -behind]]); + [-test_wb/2, -test_h], + [+test_wb/2, -test_h]]); + } +} + +module Test(){ + difference(){ + union(){ + TestBody(); + HingePositive(test_l, test_h/2); } - circle(r= $hinge_pin_dia/2); + HingeNegative(test_l); } } -HingeProngPlan(5); +//PlanDemo(); +//Demo(); +//TestBody(); +Test();