diff --git a/boxes/edges.py b/boxes/edges.py index 4933a36..34914a4 100644 --- a/boxes/edges.py +++ b/boxes/edges.py @@ -833,7 +833,7 @@ Values: * absolute * style : "rectangular" : style of the fingers - * surroundingspaces : 2.0 : minimal space at the start and end in multiple of normal spaces + * surroundingspaces : 2.0 : space at the start and end in multiple of normal spaces * angle: 90 : Angle of the walls meeting * relative (in multiples of thickness) @@ -878,6 +878,9 @@ class FingerJointBase: space, finger = self.settings.space, self.settings.finger fingers = int((length - (self.settings.surroundingspaces - 1) * space) // (space + finger)) + # shrink surrounding space up to half a thickness each side + if fingers == 0 and length > finger + 1.0 * self.settings.thickness: + fingers = 1 if not finger: fingers = 0 if bedBolts: @@ -955,12 +958,22 @@ class FingerJointEdge(BaseEdge, FingerJointBase): positive = self.positive t = self.settings.thickness - s, f, thickness = self.settings.space, self.settings.finger, self.settings.thickness + s, f = self.settings.space, self.settings.finger + thickness = self.settings.thickness + style = self.settings.style + play = self.settings.play fingers, leftover = self.calcFingers(length, bedBolts) + # not enough space for normal fingers - use small rectangular one + if (fingers == 0 and f and + leftover > 0.75*thickness and leftover > 4*play): + fingers = 1 + f = leftover = leftover / 2.0 + bedBolts = None + style = "rectangular" + if not positive: - play = self.settings.play f += play s -= play leftover -= play @@ -982,7 +995,7 @@ class FingerJointEdge(BaseEdge, FingerJointBase): self.bedBoltHole(s, bedBoltSettings) else: self.edge(s) - self.draw_finger(f, h, self.settings.style, + self.draw_finger(f, h, style, positive, i < fingers//2) self.edge(leftover / 2.0, tabs=1) @@ -1036,6 +1049,13 @@ class FingerHoles(FingerJointBase): b = self.boxes.burn fingers, leftover = self.calcFingers(length, bedBolts) + # not enough space for normal fingers - use small rectangular one + if (fingers == 0 and f and + leftover > 0.75*self.settings.thickness and leftover > 4*p): + fingers = 1 + f = leftover = leftover / 2.0 + bedBolts = None + if self.boxes.debug: self.ctx.rectangle(b, -self.settings.width / 2 + b, length - 2 * b, self.settings.width - 2 * b) diff --git a/documentation/src/usermanual.rst b/documentation/src/usermanual.rst index d115c9c..4f442ec 100644 --- a/documentation/src/usermanual.rst +++ b/documentation/src/usermanual.rst @@ -199,7 +199,7 @@ Finger Joint Settings width of the spaces between fingers in multiples of the thickness surroundingspaces - minimal amount of space before the first and after the last finger. This is in multiples of regular space between fingers. Reduce this if there are no fingers fitting on short edges. + amount of space before the first and after the last finger. This is in multiples of regular space between fingers. The actual space is larger when needed but can be smaller for very short edges. style how finger joints should look like. There may be more styles to choose from in the future. Note that snap fingers will only be drawn for fingers of width 1.9 and above.