execuc / LCInterlocking

FreeCAD module to create laser cut interlocking parts.
GNU Lesser General Public License v2.1
139 stars 30 forks source link

Allow negative tolerance and laser beam diameter. #48

Open execuc opened 3 years ago

execuc commented 3 years ago

From freecad forum user (https://forum.freecadweb.org/viewtopic.php?f=9&t=35635&start=10#p412835):

I see negative tolerances and laser diameter are forbidden there. However, I am making interlocking connections of steel, and order laser cutting at outsourcing company. Their software automatically considers laser ray diameter and we get (almost) exactly the same size as in DXFs. Moveover, some artifacts of cutting and oxide layer make part edges even a bit thicker than model, so I have to use a hammer to assemble them. This, definitely, is not the best manufacturing practice :? .

Thus if you could allow negative values there, this can expand scope of the Interlocking workbench usability. I suggest users will rarely set negative values by mistake, but if they will, there can be some checkbox to forbid it.

keymon commented 3 years ago

I am working on a plywood CNC project, and I have a similar use case.

What I am doing is setting the laser size to 0.0, and add some Thickness tolerance of 0.0 and "slow width tolerance" positive. Then I reduce the size of the tabs.

Then I forked the project to allow customize the dog bone radius and shift https://github.com/execuc/LCInterlocking/pull/49

If not, to change that tolerance you only need to change this file:

diff --git a/panel/partmat.py b/panel/partmat.py
index 858ba6e..c18bf32 100644
--- a/panel/partmat.py
+++ b/panel/partmat.py
@@ -43,9 +43,9 @@ class Part(ParamWidget):
                                  WidgetValue(type=float, name="thickness", show_name="Thickness", widget=None,
                                              interval_value=[0.5, 3000.], decimals=2, step=0.5),
                                  WidgetValue(type=float, name="thickness_tolerance", show_name="Thickness tolerance",
-                                             widget=None, interval_value=[0., 30.], decimals=4, step=0.05),
+                                             widget=None, interval_value=[-30., 30.], decimals=4, step=0.05),
                                  WidgetValue(type=float, name="hole_width_tolerance", show_name="Slot width tolerance",
-                                             widget=None, interval_value=[0., 30.], decimals=4, step=0.05),
+                                             widget=None, interval_value=[-30., 30.], decimals=4, step=0.05),
                                  WidgetValue(type=float, name="laser_beam_diameter", show_name="Laser beam diameter",
                                              widget=None, interval_value=[0., 30.], decimals=4, step=0.05)])