From 948b5ff81a2e185798df6332f71e19c7a6eb167e Mon Sep 17 00:00:00 2001 From: Eric Price <32105268+AIRCAP@users.noreply.github.com> Date: Mon, 28 Oct 2024 17:18:15 +0100 Subject: [PATCH] Updated Tolerance feature to optionally restrict maximum tolerance and repair shapes (#17421) * Updated Tolerance feature to optionally restrict maximum tolerance and repair shapes (With Refine=True) * implement suggestion by wwmayer --- src/Mod/Part/BOPTools/ToleranceFeatures.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/Mod/Part/BOPTools/ToleranceFeatures.py b/src/Mod/Part/BOPTools/ToleranceFeatures.py index e55e66efa7..7e46d1e2fd 100644 --- a/src/Mod/Part/BOPTools/ToleranceFeatures.py +++ b/src/Mod/Part/BOPTools/ToleranceFeatures.py @@ -47,14 +47,15 @@ def getParamRefine(): return FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Part/Boolean").GetBool("RefineModel") -def cmdCreateToleranceSetFeature(name, minTolerance=1e-7): - """cmdCreateToleranceSetFeature(name, minTolerance): generalized implementation of GUI commands.""" +def cmdCreateToleranceSetFeature(name, minTolerance=1e-7, maxTolerance=0): + """cmdCreateToleranceSetFeature(name, minTolerance, maxTolerance): generalized implementation of GUI commands.""" sel = FreeCADGui.Selection.getSelectionEx() FreeCAD.ActiveDocument.openTransaction("Create ToleranceSet") FreeCADGui.addModule("BOPTools.ToleranceFeatures") FreeCADGui.doCommand("j = BOPTools.ToleranceFeatures.makeToleranceSet(name='{name}')".format(name=name)) FreeCADGui.doCommand("j.minTolerance = {minTolerance}".format(minTolerance=minTolerance)) + FreeCADGui.doCommand("j.maxTolerance = {maxTolerance}".format(maxTolerance=maxTolerance)) FreeCADGui.doCommand("j.Objects = {sel}".format( sel= "[" + ", ".join(["App.ActiveDocument."+so.Object.Name for so in sel]) + "]" )) @@ -108,19 +109,26 @@ class FeatureToleranceSet: obj.addProperty("App::PropertyLinkList","Objects","ToleranceSet","Objects to have tolerance adjusted.") obj.addProperty("App::PropertyBool","Refine","ToleranceSet", "True = refine resulting shape. False = output as is.") - obj.addProperty("App::PropertyFloat","minTolerance","ToleranceSet", "1e-7") + obj.addProperty("App::PropertyLength","minTolerance","ToleranceSet", "0.1 nm") + obj.addProperty("App::PropertyLength","maxTolerance","ToleranceSet", "0") obj.Refine = getParamRefine() obj.Proxy = self self.Type = "FeatureToleranceSet" + def onDocumentRestored(self, obj): + if not hasattr(obj, 'maxTolerance'): + obj.addProperty("App::PropertyLength","maxTolerance","ToleranceSet", "0") + def execute(self,selfobj): shapes = [] for obj in selfobj.Objects: sh = obj.Shape.copy(True,False) - sh.limitTolerance(selfobj.minTolerance) + sh.limitTolerance(selfobj.minTolerance,selfobj.maxTolerance) if selfobj.Refine: + sh.fix(selfobj.minTolerance,selfobj.minTolerance,selfobj.maxTolerance) sh = sh.removeSplitter() + sh.fix(selfobj.minTolerance,selfobj.minTolerance,selfobj.maxTolerance) shapes.append(sh) if len(shapes)>1: