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()
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()
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()
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()
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
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()
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
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()
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
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
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
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