diff --git a/src/Mod/Path/PathScripts/PathCircularHoleBase.py b/src/Mod/Path/PathScripts/PathCircularHoleBase.py index 609fe0a8f6..eac16f5241 100644 --- a/src/Mod/Path/PathScripts/PathCircularHoleBase.py +++ b/src/Mod/Path/PathScripts/PathCircularHoleBase.py @@ -156,7 +156,6 @@ class ObjectOp(PathOp.ObjectOp): return False if len(obj.Base) == 0 and not haveLocations(self, obj): - # Arch PanelSheet features = [] if self.baseIsArchPanel(obj, self.baseobject): holeshapes = self.baseobject.Proxy.getHoles(self.baseobject, transform=True) diff --git a/src/Mod/Path/PathScripts/PathCircularHoleBaseGui.py b/src/Mod/Path/PathScripts/PathCircularHoleBaseGui.py index 5f7cf08f18..c733218056 100644 --- a/src/Mod/Path/PathScripts/PathCircularHoleBaseGui.py +++ b/src/Mod/Path/PathScripts/PathCircularHoleBaseGui.py @@ -54,6 +54,9 @@ class TaskPanelHoleGeometryPage(PathOpGui.TaskPanelBaseGeometryPage): '''getForm() ... load and return page''' return FreeCADGui.PySideUic.loadUi(":/panels/PageBaseHoleGeometryEdit.ui") + def initPage(self, obj): + self.updating = False + def setFields(self, obj): '''setFields(obj) ... fill form with values from obj''' PathLog.track() @@ -85,38 +88,43 @@ class TaskPanelHoleGeometryPage(PathOpGui.TaskPanelBaseGeometryPage): self.form.baseList.resizeColumnToContents(0) self.form.baseList.blockSignals(False) + self.itemActivated() def itemActivated(self): '''itemActivated() ... callback when item in table is selected''' PathLog.track() - FreeCADGui.Selection.clearSelection() - activatedRows = [] - for item in self.form.baseList.selectedItems(): - row = item.row() - if not row in activatedRows: - activatedRows.append(row) - obj = item.data(self.DataObject) - sub = str(item.data(self.DataObjectSub)) - PathLog.debug("itemActivated() -> %s.%s" % (obj.Label, sub)) - if sub: - FreeCADGui.Selection.addSelection(obj, sub) - else: - FreeCADGui.Selection.addSelection(obj) - #FreeCADGui.updateGui() + if self.form.baseList.selectedItems(): + self.form.deleteBase.setEnabled(True) + FreeCADGui.Selection.clearSelection() + activatedRows = [] + for item in self.form.baseList.selectedItems(): + row = item.row() + if not row in activatedRows: + activatedRows.append(row) + obj = item.data(self.DataObject) + sub = str(item.data(self.DataObjectSub)) + PathLog.debug("itemActivated() -> %s.%s" % (obj.Label, sub)) + if sub: + FreeCADGui.Selection.addSelection(obj, sub) + else: + FreeCADGui.Selection.addSelection(obj) + else: + self.form.deleteBase.setEnabled(False) def deleteBase(self): '''deleteBase() ... callback for push button''' PathLog.track() - deletedRows = [] - selected = self.form.baseList.selectedItems() - for item in selected: - row = self.form.baseList.row(item) - if not row in deletedRows: - deletedRows.append(row) - self.form.baseList.removeRow(row) + selected = [self.form.baseList.row(item) for item in self.form.baseList.selectedItems()] + self.form.baseList.blockSignals(True) + for row in sorted(list(set(selected)), key=lambda row: -row): + print("row = %d" % row) + self.form.baseList.removeRow(row) self.updateBase() + self.form.baseList.resizeColumnToContents(0) + self.form.baseList.blockSignals(False) #self.obj.Proxy.execute(self.obj) FreeCAD.ActiveDocument.recompute() + self.setFields(self.obj); def updateBase(self): '''updateBase() ... helper function to transfer current table to obj''' @@ -130,7 +138,9 @@ class TaskPanelHoleGeometryPage(PathOpGui.TaskPanelBaseGeometryPage): PathLog.debug("keeping (%s.%s)" % (obj.Label, sub)) newlist.append(base) PathLog.debug("obj.Base=%s newlist=%s" % (self.obj.Base, newlist)) + self.updating = True self.obj.Base = newlist + self.updating = False def checkedChanged(self): '''checkeChanged() ... callback when checked status of a base feature changed''' @@ -161,7 +171,7 @@ class TaskPanelHoleGeometryPage(PathOpGui.TaskPanelBaseGeometryPage): def updateData(self, obj, prop): '''updateData(obj, prop) ... callback whenever a property of the model changed''' - if prop in ['Base', 'Disabled']: + if not self.updating and prop in ['Base', 'Disabled']: self.setFields(obj) class TaskPanelOpPage(PathOpGui.TaskPanelPage): diff --git a/src/Mod/Path/PathScripts/PathDrilling.py b/src/Mod/Path/PathScripts/PathDrilling.py index 4d085fb93b..4015032df6 100644 --- a/src/Mod/Path/PathScripts/PathDrilling.py +++ b/src/Mod/Path/PathScripts/PathDrilling.py @@ -40,7 +40,7 @@ __author__ = "sliptonic (Brad Collette)" __url__ = "http://www.freecadweb.org" __doc__ = "Path Drilling operation." -if False: +if True: PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule()) PathLog.trackModule(PathLog.thisModule()) else: @@ -116,27 +116,10 @@ class ObjectDrilling(PathCircularHoleBase.ObjectOp): self.commandlist.append(Path.Command('G80')) - def setDepths(self, obj, zmax, zmin, bb): - '''setDepths(obj, zmax, zmin, bb) ... call base implementation and set RetractHeight accordingly.''' - super(self.__class__, self).setDepths(obj, zmax, zmin, bb) - if zmax is not None: - obj.RetractHeight = zmax + 1.0 - else: - obj.RetractHeight = 6.0 - def opSetDefaultValues(self, obj): '''opSetDefaultValues(obj) ... set default value for RetractHeight''' obj.RetractHeight = 10 - def opOnChanged(self, obj, prop): - '''opOnChanged(obj, prop) ... if Locations changed, check if depths should be calculated.''' - super(self.__class__, self).opOnChanged(obj, prop) - if prop == 'Locations' and not 'Restore' in obj.State and obj.Locations and not obj.Base: - if not hasattr(self, 'baseobject'): - job = PathUtils.findParentJob(obj) - if job and job.Base: - self.setupDepthsFrom(obj, [], job.Base) - def Create(name): '''Create(name) ... Creates and returns a Drilling operation.''' obj = FreeCAD.ActiveDocument.addObject("Path::FeaturePython", name)