Fixed issues with BaseGeometry UI processing and extended interface to support multiple shapes.

This commit is contained in:
Markus Lampert
2017-08-04 21:00:26 -07:00
committed by Yorik van Havre
parent 98c9c544b4
commit c0c2fc5dfb
4 changed files with 85 additions and 90 deletions

View File

@@ -39,6 +39,10 @@ from PySide import QtCore, QtGui
# 2 ... multi panel layout
TaskPanelLayout = 2
PathLog.setLevel(PathLog.Level.DEBUG, PathLog.thisModule())
PathLog.trackModule(PathLog.thisModule())
def translate(context, text, disambig=None):
return QtCore.QCoreApplication.translate(context, text, disambig)
@@ -49,6 +53,9 @@ class ViewProvider(object):
PathLog.track()
vobj.Proxy = self
#for sel in FreeCADGui.Selection.getSelectionEx():
# if sel[0].HasSubObjects:
def attach(self, vobj):
PathLog.track()
self.Object = vobj.Object
@@ -180,9 +187,9 @@ class TaskPanelBaseGeometryPage(TaskPanelPage):
#FreeCADGui.updateGui()
def supportsEdges(self):
return self.support & PathAreaOp.FeatureBaseEdges
return self.supports & PathAreaOp.FeatureBaseEdges
def supportsFaces(self):
return self.support & PathAreaOp.FeatureBaseFaces
return self.supports & PathAreaOp.FeatureBaseFaces
def featureName(self):
if self.supportsEdges() and self.supportsFaces():
return 'features'
@@ -192,38 +199,36 @@ class TaskPanelBaseGeometryPage(TaskPanelPage):
return 'edges'
return 'nothing'
def addBase(self):
selection = FreeCADGui.Selection.getSelectionEx()
def addBaseGeometry(self, selection):
if len(selection) != 1:
PahtLog.error(translate("PathProject", "Please select %s from a single solid" % self.featureName()))
return
PathLog.error(translate("PathProject", "Please select %s from a single solid" % self.featureName()))
return False
sel = selection[0]
if not sel.HasSubObjects:
PahtLog.error(translate("PathProject", "Please select %s of a solid" % self.featureName()))
return
PathLog.error(translate("PathProject", "Please select %s of a solid" % self.featureName()))
return False
if not self.supportsEdges() and selection[0].SubObjects[0].ShapeType == "Edge":
PahtLog.error(translate("PathProject", "Please select only %s of a solid" % self.featureName()))
return
PathLog.error(translate("PathProject", "Please select only %s of a solid" % self.featureName()))
return False
if not self.supportsFaces() and selection[0].SubObjects[0].ShapeType == "Face":
PahtLog.error(translate("PathProject", "Please select only %s of a solid" % self.featureName()))
return
for i in sel.SubElementNames:
self.obj.Proxy.addBase(self.obj, sel.Object, i)
PathLog.error(translate("PathProject", "Please select only %s of a solid" % self.featureName()))
return False
self.obj.Proxy.execute(self.obj)
self.setFields()
for sub in sel.SubElementNames:
self.obj.Proxy.addBase(self.obj, sel.Object, sub)
return True
def addBase(self):
if self.addBaseGeometry(FreeCADGui.Selection.getSelectionEx()):
#self.obj.Proxy.execute(self.obj)
self.setFields(self.obj)
def deleteBase(self):
newlist = []
for item in self.form.baseList.selectedItems():
obj = item.data(self.DataObject)
sub = itme.data(self.DataObjectSub)
for base in self.obj.Base:
if base[0].Name != obj.Name and base[1] != sub:
newlist.append(base)
PathLog.track()
selected = self.form.baseList.selectedItems()
for item in selected:
self.form.baseList.takeItem(self.form.baseList.row(item))
self.obj.Base = newlist
self.updateBase()
#self.obj.Proxy.execute(self.obj)
#FreeCAD.ActiveDocument.recompute()
@@ -232,8 +237,10 @@ class TaskPanelBaseGeometryPage(TaskPanelPage):
for i in range(self.form.baseList.count()):
item = self.form.baseList.item(i)
obj = item.data(self.DataObject)
sub = item.data(self.DataObjectSub)
newlist.append((obj, sub))
sub = str(item.data(self.DataObjectSub))
base = (obj, sub)
newlist.append(base)
PathLog.debug("Setting new base: %s -> %s" % (self.obj.Base, newlist))
self.obj.Base = newlist
#self.obj.Proxy.execute(self.obj)
@@ -305,6 +312,7 @@ class TaskPanelDepthsPage(TaskPanelDepthsWoFinishPage):
class TaskPanel(object):
def __init__(self, obj, deleteOnReject, opPage, selectionFactory):
PathLog.track(obj.Label, deleteOnReject, opPage, selectionFactory)
FreeCAD.ActiveDocument.openTransaction(translate("Path_AreaOp", "AreaOp Operation"))
self.deleteOnReject = deleteOnReject
self.featurePages = []
@@ -363,8 +371,7 @@ class TaskPanel(object):
FreeCADGui.ActiveDocument.resetEdit()
FreeCAD.ActiveDocument.commitTransaction()
FreeCADGui.Selection.removeObserver(self.s)
if self.isDirty():
FreeCAD.ActiveDocument.recompute()
FreeCAD.ActiveDocument.recompute()
def reject(self):
FreeCADGui.Control.closeDialog()
@@ -380,8 +387,8 @@ class TaskPanel(object):
def clicked(self, button):
if button == QtGui.QDialogButtonBox.Apply:
self.panelGetFields()
FreeCAD.ActiveDocument.recompute()
self.setClean()
FreeCAD.ActiveDocument.recompute()
def panelGetFields(self):
PathLog.track()
@@ -403,6 +410,14 @@ class TaskPanel(object):
def setupUi(self):
PathLog.track()
if self.deleteOnReject and PathAreaOp.FeatureBaseGeometry & self.obj.Proxy.opFeatures(self.obj):
sel = FreeCADGui.Selection.getSelectionEx()
if len(sel) == 1 and sel[0].Object != self.obj:
for page in self.featurePages:
if hasattr(page, 'addBase'):
page.addBaseGeometry(sel)
self.panelSetFields()
for page in self.featurePages:
page.pageRegisterSignalHandlers()