FingerJointEdges: Better deal with short edges
Shrink surroundingspaces when need to still fit at least one finger. If even one regular finger won't fit use a small rectangular style finger. This is a bit hacky as the same logic is copied in both FingerJointEdge and FingerHoles
This commit is contained in:
parent
0745ec4695
commit
d782eb281c
|
@ -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)
|
||||
|
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue