Beispiel #1
0
    def setDefaultValues(self, obj):
        '''setDefaultValues(obj) ... base implementation.
        Do not overwrite, overwrite opSetDefaultValues() instead.'''
        PathUtils.addToJob(obj)

        obj.Active = True

        features = self.opFeatures(obj)

        if FeatureTool & features:
            obj.ToolController = PathUtils.findToolController(obj)

        if FeatureDepths & features:
            obj.StartDepth = 1.0
            obj.FinalDepth = 0.0

        if FeatureStepDown & features:
            obj.StepDown = 1.0

        if FeatureHeights & features:
            obj.ClearanceHeight = 10.0
            obj.SafeHeight = 8.0

        if FeatureStartPoint & features:
            obj.UseStartPoint = False

        self.opSetDefaultValues(obj)
Beispiel #2
0
    def setDefaultValues(self, obj):
        '''setDefaultValues(obj) ... base implementation.
        Do not overwrite, overwrite opSetDefaultValues() instead.'''
        PathUtils.addToJob(obj)

        obj.Active = True

        features = self.opFeatures(obj)

        if FeatureTool & features:
            obj.ToolController = PathUtils.findToolController(obj)

        if FeatureDepths & features:
            obj.StartDepth      =  1.0
            obj.FinalDepth      =  0.0

        if FeatureStepDown & features:
            obj.StepDown        =  1.0

        if FeatureHeights & features:
            obj.ClearanceHeight = 10.0
            obj.SafeHeight      =  8.0

        if FeatureStartPoint & features:
            obj.UseStartPoint = False

        self.opSetDefaultValues(obj)
 def onDelete(self, arg1=None, arg2=None):
     PathLog.debug("Deleting Dressup")
     '''this makes sure that the base operation is added back to the project and visible'''
     FreeCADGui.ActiveDocument.getObject(
         arg1.Object.Base.Name).Visibility = True
     PathUtils.addToJob(arg1.Object.Base)
     return True
    def copyTools(self):
        tools = []
        model = self.form.ToolsList.model()
        for i in range(model.rowCount()):
            item = model.item(i, 0)
            if item.checkState():
                item = model.index(i, 1)
                tools.append(item.data())
        if len(tools) == 0:
            return

        targets = self.TLM.getLists()
        currList = "<Main>"

        for target in targets:
            if target == currList:
                targets.remove(target)

        if len(targets) == 0:
            FreeCAD.Console.PrintWarning("no place to go")
            return
        elif len(targets) == 1:
            targetlist = targets[0]
        else:
            form = FreeCADGui.PySideUic.loadUi(":/panels/DlgToolCopy.ui")
            form.cboTarget.addItems(targets)
            r = form.exec_()
            if r is False:
                return None
            else:
                targetlist = form.cboTarget.currentText()

        for toolnum in tools:
            tool = self.TLM.getTool(currList, int(toolnum))
            PathLog.debug('tool: {}, toolnum: {}'.format(tool, toolnum))
            for i in FreeCAD.ActiveDocument.findObjects("Path::Feature"):
                if isinstance(i.Proxy, PathScripts.PathJob.ObjectPathJob
                              ) and i.Label == targetlist:

                    label = "T{}: {}".format(toolnum, tool.Name)
                    obj = FreeCAD.ActiveDocument.addObject(
                        "Path::FeaturePython", label)
                    PathScripts.PathToolController.ToolController(obj)
                    PathScripts.PathToolController._ViewProviderToolController(
                        obj.ViewObject)
                    PathUtils.addToJob(obj, targetlist)
                    FreeCAD.activeDocument().recompute()
                    obj.Tool = tool.copy()
                    obj.ToolNumber = int(toolnum)
                    #obj.recompute()
        FreeCAD.ActiveDocument.recompute()
Beispiel #5
0
    def Activated(self):
        import FreeCADGui
        import Path
        from PathScripts import PathUtils

        FreeCAD.ActiveDocument.openTransaction(
            translate("PathHelix", "Create a helix cut"))
        FreeCADGui.addModule("PathScripts.PathHelix")

        obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython",
                                               "PathHelix")
        ObjectPathHelix(obj)
        ViewProviderPathHelix(obj.ViewObject)

        obj.Features = cylinders_in_selection()
        obj.DeltaR = 1.0

        if not obj.ToolController:
            obj.ToolController = PathUtils.findToolController(obj)

        toolLoad = obj.ToolController

        if toolLoad is not None:
            obj.ToolNumber = toolLoad.ToolNumber
            tool = toolLoad.Proxy.getTool(toolLoad)
            if tool:
                # start with 25% overlap
                obj.DeltaR = tool.Diameter * 0.75

        obj.Active = True
        obj.Comment = ""

        obj.Direction = "CW"
        obj.StartSide = "inside"

        obj.Clearance = 10.0
        obj.StepDown = 1.0
        obj.UseStartDepth = False
        obj.StartDepth = 1.0
        obj.UseFinalDepth = False
        obj.FinalDepth = 0.0
        obj.ThroughDepth = 0.0

        PathUtils.addToJob(obj)

        obj.ViewObject.startEditing()

        FreeCAD.ActiveDocument.recompute()
Beispiel #6
0
    def setDefaultValues(self, obj):
        '''setDefaultValues(obj) ... base implementation.
        Do not overwrite, overwrite opSetDefaultValues() instead.'''
        job = PathUtils.addToJob(obj)

        obj.Active = True

        features = self.opFeatures(obj)

        if FeatureTool & features:
            obj.ToolController = PathUtils.findToolController(obj)
            obj.OpToolDiameter  =  1.0

        if FeatureDepths & features:
            obj.setExpression('StartDepth', job.SetupSheet.StartDepthExpression)
            obj.setExpression('FinalDepth', job.SetupSheet.FinalDepthExpression)
            obj.OpStartDepth    =  1.0
            obj.OpFinalDepth    =  0.0

        if FeatureStepDown & features:
            obj.setExpression('StepDown', job.SetupSheet.StepDownExpression)

        if FeatureHeights & features:
            if job.SetupSheet.SafeHeightExpression:
                obj.setExpression('SafeHeight', job.SetupSheet.SafeHeightExpression)
            if job.SetupSheet.ClearanceHeightExpression:
                obj.setExpression('ClearanceHeight', job.SetupSheet.ClearanceHeightExpression)

        if FeatureStartPoint & features:
            obj.UseStartPoint = False

        self.opSetDefaultValues(obj)
        obj.recompute()
Beispiel #7
0
    def Activated(self):
        import FreeCADGui
        import Path
        from PathScripts import PathUtils

        FreeCAD.ActiveDocument.openTransaction(translate("PathHelix", "Create a helix cut"))
        FreeCADGui.addModule("PathScripts.PathHelix")

        obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", "PathHelix")
        ObjectPathHelix(obj)
        ViewProviderPathHelix(obj.ViewObject)

        obj.Features = cylinders_in_selection()
        obj.DeltaR = 1.0

        if not obj.ToolController:
            obj.ToolController = PathUtils.findToolController(obj)

        toolLoad = obj.ToolController

        if toolLoad is not None:
            obj.ToolNumber = toolLoad.ToolNumber
            tool = toolLoad.Proxy.getTool(toolLoad)
            if tool:
                # start with 25% overlap
                obj.DeltaR = tool.Diameter * 0.75

        obj.Active = True
        obj.Comment = ""

        obj.Direction = "CW"
        obj.StartSide = "inside"

        obj.Clearance = 10.0
        obj.StepDown = 1.0
        obj.UseStartDepth = False
        obj.StartDepth = 1.0
        obj.UseFinalDepth = False
        obj.FinalDepth = 0.0
        obj.ThroughDepth = 0.0

        PathUtils.addToJob(obj)

        obj.ViewObject.startEditing()

        FreeCAD.ActiveDocument.recompute()
Beispiel #8
0
    def setDefaultValues(self, obj):
        '''setDefaultValues(obj) ... base implementation.
        Do not overwrite, overwrite opSetDefaultValues() instead.'''
        job = PathUtils.addToJob(obj)

        obj.Active = True

        features = self.opFeatures(obj)

        if FeatureTool & features:
            if 1 < len(job.Operations.Group):
                obj.ToolController = PathUtil.toolControllerForOp(
                    job.Operations.Group[-2])
            else:
                obj.ToolController = PathUtils.findToolController(obj)
            if not obj.ToolController:
                return None
            obj.OpToolDiameter = obj.ToolController.Tool.Diameter

        if FeatureCoolant & features:
            obj.CoolantMode = job.SetupSheet.CoolantMode

        if FeatureDepths & features:
            if self.applyExpression(obj, 'StartDepth',
                                    job.SetupSheet.StartDepthExpression):
                obj.OpStartDepth = 1.0
            else:
                obj.StartDepth = 1.0
            if self.applyExpression(obj, 'FinalDepth',
                                    job.SetupSheet.FinalDepthExpression):
                obj.OpFinalDepth = 0.0
            else:
                obj.FinalDepth = 0.0
        else:
            obj.StartDepth = 1.0

        if FeatureStepDown & features:
            if not self.applyExpression(obj, 'StepDown',
                                        job.SetupSheet.StepDownExpression):
                obj.StepDown = '1 mm'

        if FeatureHeights & features:
            if job.SetupSheet.SafeHeightExpression:
                if not self.applyExpression(
                        obj, 'SafeHeight',
                        job.SetupSheet.SafeHeightExpression):
                    obj.SafeHeight = '3 mm'
            if job.SetupSheet.ClearanceHeightExpression:
                if not self.applyExpression(
                        obj, 'ClearanceHeight',
                        job.SetupSheet.ClearanceHeightExpression):
                    obj.ClearanceHeight = '5 mm'

        if FeatureStartPoint & features:
            obj.UseStartPoint = False

        self.opSetDefaultValues(obj, job)
        return job
Beispiel #9
0
    def setDefaultValues(self, obj):
        '''setDefaultValues(obj) ... base implementation.
        Do not overwrite, overwrite opSetDefaultValues() instead.'''
        job = PathUtils.addToJob(obj)

        obj.Active = True

        features = self.opFeatures(obj)

        if FeatureTool & features:
            obj.ToolController = PathUtils.findToolController(obj)
            obj.OpToolDiameter = 1.0

        if FeatureDepths & features:
            if self.applyExpression(obj, 'StartDepth',
                                    job.SetupSheet.StartDepthExpression):
                obj.OpStartDepth = 1.0
            else:
                obj.StartDepth = 1.0
            if self.applyExpression(obj, 'FinalDepth',
                                    job.SetupSheet.FinalDepthExpression):
                obj.OpFinalDepth = 0.0
            else:
                obj.FinalDepth = 0.0

        if FeatureStepDown & features:
            if not self.applyExpression(obj, 'StepDown',
                                        job.SetupSheet.StepDownExpression):
                obj.StepDown = '1 mm'

        if FeatureHeights & features:
            if job.SetupSheet.SafeHeightExpression:
                if not self.applyExpression(
                        obj, 'SafeHeight',
                        job.SetupSheet.SafeHeightExpression):
                    obj.SafeHeight = '3 mm'
            if job.SetupSheet.ClearanceHeightExpression:
                if not self.applyExpression(
                        obj, 'ClearanceHeight',
                        job.SetupSheet.ClearanceHeightExpression):
                    obj.ClearanceHeight = '5 mm'

        if FeatureStartPoint & features:
            obj.UseStartPoint = False

        self.opSetDefaultValues(obj)
        obj.recompute()
Beispiel #10
0
    def setDefaultValues(self, obj):
        '''setDefaultValues(obj) ... base implementation.
        Do not overwrite, overwrite opSetDefaultValues() instead.'''
        job = PathUtils.addToJob(obj)

        obj.Active = True

        features = self.opFeatures(obj)

        if FeatureTool & features:
            if 1 < len(job.Operations.Group):
                obj.ToolController = PathUtil.toolControllerForOp(job.Operations.Group[-2])
            else:
                obj.ToolController = PathUtils.findToolController(obj)
            if not obj.ToolController:
                return None
            obj.OpToolDiameter = obj.ToolController.Tool.Diameter

        if FeatureDepths & features:
            if self.applyExpression(obj, 'StartDepth', job.SetupSheet.StartDepthExpression):
                obj.OpStartDepth = 1.0
            else:
                obj.StartDepth = 1.0
            if self.applyExpression(obj, 'FinalDepth', job.SetupSheet.FinalDepthExpression):
                obj.OpFinalDepth = 0.0
            else:
                obj.FinalDepth = 0.0
        else:
            obj.StartDepth = 1.0

        if FeatureStepDown & features:
            if not self.applyExpression(obj, 'StepDown', job.SetupSheet.StepDownExpression):
                obj.StepDown = '1 mm'

        if FeatureHeights & features:
            if job.SetupSheet.SafeHeightExpression:
                if not self.applyExpression(obj, 'SafeHeight', job.SetupSheet.SafeHeightExpression):
                    obj.SafeHeight = '3 mm'
            if job.SetupSheet.ClearanceHeightExpression:
                if not self.applyExpression(obj, 'ClearanceHeight', job.SetupSheet.ClearanceHeightExpression):
                    obj.ClearanceHeight = '5 mm'

        if FeatureStartPoint & features:
            obj.UseStartPoint = False

        self.opSetDefaultValues(obj, job)
        return job
Beispiel #11
0
    def Activated(self):
        FreeCAD.ActiveDocument.openTransaction(translate("Path_Fixture", "Create a Fixture Offset"))
        FreeCADGui.addModule("PathScripts.PathFixture")
        snippet = '''
import Path
import PathScripts
from PathScripts import PathUtils
prjexists = False
obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython","Fixture")
PathScripts.PathFixture.Fixture(obj)
obj.Active = True
PathScripts.PathFixture._ViewProviderFixture(obj.ViewObject)

PathUtils.addToJob(obj)

'''
        FreeCADGui.doCommand(snippet)
        FreeCAD.ActiveDocument.commitTransaction()
        FreeCAD.ActiveDocument.recompute()
Beispiel #12
0
    def Activated(self):
        FreeCAD.ActiveDocument.openTransaction("Create a Fixture Offset")
        FreeCADGui.addModule("PathScripts.PathFixture")
        snippet = """
import Path
import PathScripts
from PathScripts import PathUtils
prjexists = False
obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython","Fixture")
PathScripts.PathFixture.Fixture(obj)
obj.Active = True
PathScripts.PathFixture._ViewProviderFixture(obj.ViewObject)

PathUtils.addToJob(obj)

"""
        FreeCADGui.doCommand(snippet)
        FreeCAD.ActiveDocument.commitTransaction()
        FreeCAD.ActiveDocument.recompute()
 def onDelete(self, arg1=None, arg2=None):
     FreeCADGui.ActiveDocument.getObject(
         arg1.Object.Base.Name).Visibility = True
     PathUtils.addToJob(arg1.Object.Base)
     arg1.Object.Base = None
     return True
Beispiel #14
0
 def onDelete(self, arg1=None, arg2=None):
     '''this makes sure that the base operation is added back to the project and visible'''
     FreeCADGui.ActiveDocument.getObject(arg1.Object.Base.Name).Visibility = True
     PathUtils.addToJob(arg1.Object.Base)
     return True
Beispiel #15
0
    def setDefaultValues(self, obj):
        """setDefaultValues(obj) ... base implementation.
        Do not overwrite, overwrite opSetDefaultValues() instead."""
        if self.job:
            job = self.job
        else:
            job = PathUtils.addToJob(obj)

        obj.Active = True

        features = self.opFeatures(obj)

        if FeatureTool & features:
            if 1 < len(job.Operations.Group):
                obj.ToolController = PathUtil.toolControllerForOp(
                    job.Operations.Group[-2])
            else:
                obj.ToolController = PathUtils.findToolController(obj, self)
            if not obj.ToolController:
                raise PathNoTCException()
            obj.OpToolDiameter = obj.ToolController.Tool.Diameter

        if FeatureCoolant & features:
            PathLog.track()
            PathLog.debug(obj.getEnumerationsOfProperty("CoolantMode"))
            obj.CoolantMode = job.SetupSheet.CoolantMode

        if FeatureDepths & features:
            if self.applyExpression(obj, "StartDepth",
                                    job.SetupSheet.StartDepthExpression):
                obj.OpStartDepth = 1.0
            else:
                obj.StartDepth = 1.0
            if self.applyExpression(obj, "FinalDepth",
                                    job.SetupSheet.FinalDepthExpression):
                obj.OpFinalDepth = 0.0
            else:
                obj.FinalDepth = 0.0
        else:
            obj.StartDepth = 1.0

        if FeatureStepDown & features:
            if not self.applyExpression(obj, "StepDown",
                                        job.SetupSheet.StepDownExpression):
                obj.StepDown = "1 mm"

        if FeatureHeights & features:
            if job.SetupSheet.SafeHeightExpression:
                if not self.applyExpression(
                        obj, "SafeHeight",
                        job.SetupSheet.SafeHeightExpression):
                    obj.SafeHeight = "3 mm"
            if job.SetupSheet.ClearanceHeightExpression:
                if not self.applyExpression(
                        obj, "ClearanceHeight",
                        job.SetupSheet.ClearanceHeightExpression):
                    obj.ClearanceHeight = "5 mm"

        if FeatureDiameters & features:
            obj.MinDiameter = "0 mm"
            obj.MaxDiameter = "0 mm"
            if job.Stock:
                obj.MaxDiameter = job.Stock.Shape.BoundBox.XLength

        if FeatureStartPoint & features:
            obj.UseStartPoint = False

        self.opSetDefaultValues(obj, job)
        return job
Beispiel #16
0
    def __init__(self, obj, name, parentJob=None):
        PathLog.track()

        obj.addProperty(
            "App::PropertyBool",
            "Active",
            "Path",
            QT_TRANSLATE_NOOP(
                "App::Property",
                "Make False, to prevent operation from generating code"),
        )
        obj.addProperty(
            "App::PropertyString",
            "Comment",
            "Path",
            QT_TRANSLATE_NOOP("App::Property",
                              "An optional comment for this Operation"),
        )
        obj.addProperty(
            "App::PropertyString",
            "UserLabel",
            "Path",
            QT_TRANSLATE_NOOP("App::Property", "User Assigned Label"),
        )
        obj.addProperty(
            "App::PropertyString",
            "CycleTime",
            "Path",
            QT_TRANSLATE_NOOP("App::Property",
                              "Operations Cycle Time Estimation"),
        )
        obj.setEditorMode("CycleTime", 1)  # read-only

        features = self.opFeatures(obj)

        if FeatureBaseGeometry & features:
            self.addBaseProperty(obj)

        if FeatureLocations & features:
            obj.addProperty(
                "App::PropertyVectorList",
                "Locations",
                "Path",
                QT_TRANSLATE_NOOP("App::Property",
                                  "Base locations for this operation"),
            )

        if FeatureTool & features:
            obj.addProperty(
                "App::PropertyLink",
                "ToolController",
                "Path",
                QT_TRANSLATE_NOOP(
                    "App::Property",
                    "The tool controller that will be used to calculate the path",
                ),
            )
            self.addOpValues(obj, ["tooldia"])

        if FeatureCoolant & features:
            obj.addProperty(
                "App::PropertyEnumeration",
                "CoolantMode",
                "Path",
                QT_TRANSLATE_NOOP("App::Property",
                                  "Coolant mode for this operation"),
            )

        if FeatureDepths & features:
            obj.addProperty(
                "App::PropertyDistance",
                "StartDepth",
                "Depth",
                QT_TRANSLATE_NOOP(
                    "App::Property",
                    "Starting Depth of Tool- first cut depth in Z"),
            )
            obj.addProperty(
                "App::PropertyDistance",
                "FinalDepth",
                "Depth",
                QT_TRANSLATE_NOOP("App::Property",
                                  "Final Depth of Tool- lowest value in Z"),
            )
            if FeatureNoFinalDepth & features:
                obj.setEditorMode("FinalDepth", 2)  # hide
            self.addOpValues(obj, ["start", "final"])
        else:
            # StartDepth has become necessary for expressions on other properties
            obj.addProperty(
                "App::PropertyDistance",
                "StartDepth",
                "Depth",
                QT_TRANSLATE_NOOP(
                    "App::Property",
                    "Starting Depth internal use only for derived values",
                ),
            )
            obj.setEditorMode("StartDepth", 1)  # read-only

        self.addOpValues(obj, ["stockz"])

        if FeatureStepDown & features:
            obj.addProperty(
                "App::PropertyDistance",
                "StepDown",
                "Depth",
                QT_TRANSLATE_NOOP("App::Property",
                                  "Incremental Step Down of Tool"),
            )

        if FeatureFinishDepth & features:
            obj.addProperty(
                "App::PropertyDistance",
                "FinishDepth",
                "Depth",
                QT_TRANSLATE_NOOP("App::Property",
                                  "Maximum material removed on final pass."),
            )

        if FeatureHeights & features:
            obj.addProperty(
                "App::PropertyDistance",
                "ClearanceHeight",
                "Depth",
                QT_TRANSLATE_NOOP(
                    "App::Property",
                    "The height needed to clear clamps and obstructions",
                ),
            )
            obj.addProperty(
                "App::PropertyDistance",
                "SafeHeight",
                "Depth",
                QT_TRANSLATE_NOOP("App::Property",
                                  "Rapid Safety Height between locations."),
            )

        if FeatureStartPoint & features:
            obj.addProperty(
                "App::PropertyVectorDistance",
                "StartPoint",
                "Start Point",
                QT_TRANSLATE_NOOP("App::Property",
                                  "The start point of this path"),
            )
            obj.addProperty(
                "App::PropertyBool",
                "UseStartPoint",
                "Start Point",
                QT_TRANSLATE_NOOP("App::Property",
                                  "Make True, if specifying a Start Point"),
            )

        if FeatureDiameters & features:
            obj.addProperty(
                "App::PropertyDistance",
                "MinDiameter",
                "Diameter",
                QT_TRANSLATE_NOOP("App::Property",
                                  "Lower limit of the turning diameter"),
            )
            obj.addProperty(
                "App::PropertyDistance",
                "MaxDiameter",
                "Diameter",
                QT_TRANSLATE_NOOP("App::Property",
                                  "Upper limit of the turning diameter."),
            )

        for n in self.opPropertyEnumerations():
            PathLog.debug("n: {}".format(n))
            PathLog.debug("n[0]: {}  n[1]: {}".format(n[0], n[1]))
            if hasattr(obj, n[0]):
                setattr(obj, n[0], n[1])

        # members being set later
        self.commandlist = None
        self.horizFeed = None
        self.horizRapid = None
        self.job = None
        self.model = None
        self.radius = None
        self.stock = None
        self.tool = None
        self.vertFeed = None
        self.vertRapid = None
        self.addNewProps = None

        self.initOperation(obj)

        if not hasattr(
                obj, "DoNotSetDefaultValues") or not obj.DoNotSetDefaultValues:
            if parentJob:
                self.job = PathUtils.addToJob(obj, jobname=parentJob.Name)
            job = self.setDefaultValues(obj)
            if job:
                job.SetupSheet.Proxy.setOperationProperties(obj, name)
                obj.recompute()
                obj.Proxy = self
 def onDelete(self, arg1=None, arg2=None):
     FreeCADGui.ActiveDocument.getObject(arg1.Object.Base.Name).Visibility = True
     PathUtils.addToJob(arg1.Object.Base)
     arg1.Object.Base = None
     return True