diff --git a/boxes/generators/burntest.py b/boxes/generators/burntest.py new file mode 100644 index 0000000..79cb058 --- /dev/null +++ b/boxes/generators/burntest.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python3 +# Copyright (C) 2013-2019 Florian Festi +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +from boxes import * + +class BurnTest(Boxes): + """Test different burn values""" + description = """Set burn in the Default Settings to the lowest value +to be tested. To get an idea cut a rectangle with known nominal size and +measure the shrinkage due to the width of the laser cut. The burn value is +half the difference of the overall size as shrinkage is occuring on both +sides. You can use the reference rectangle as it is rendered without burn +correction.""" + + ui_group = "Part" + + def __init__(self): + Boxes.__init__(self) + + self.addSettingsArgs(edges.FingerJointSettings) + self.buildArgParser(x=100) + self.argparser.add_argument( + "--step", action="store", type=float, default=0.01, + help="increases in burn value between the sides") + self.argparser.add_argument( + "--pairs", action="store", type=int, default=2, + help="number of pairs (each testing four burn values)") + + + def render(self): + x, s = self.x, self.step + t = self.thickness + + for cnt in range(self.pairs): + + self.moveTo(t, t) + for i in range(4): + self.text("%.3fmm" % self.burn, x/2, 2*t, align="center") + self.edges["f"](x) + self.corner(90) + self.burn += s + + self.burn -= 4*s + + self.moveTo(x+2*t+self.spacing, -t) + for i in range(4): + self.text("%.3fmm" % self.burn, x/2, 2*t, align="center") + self.edges["F"](x) + self.polyline(t, 90, t) + self.burn += s + self.moveTo(x+2*t+self.spacing, t)