// -*- C -*- $hinge_pin_dia = 0.795 + 0.35; $hinge_main_dia = 4.0; $hinge_inter_gap = 0.50; $hinge_prong_minwidth = 3.5; $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 HingePositive(l){ linetr_x_yz(0, l) HingeProngPlan(); } module HingeNegative(l){ eff_l = l + $hionge_inter_gap; pairs = floor(eff_l / (2*($hinge_prong_minwidth + $hinge_inter_gap))); stride = eff_l / pairs; prong_width = stride/2 - $hinge_inter_gap; linextr_x_ayz(-0.1, l+0.1) HingePinPlan(); for (i=[0:pairs-1]) { translate(stride * i * [1,0,0]) linextr_x_yz(0, prong_width + $hinge_inter_gap) HingeGapPlan(); } } PlanDemo();