assembly: added a few context menu actions

* ElementGroup: sort elements by label
* Constraint: toggle disable
* Assembly: toggle freeze

Closes #80
This commit is contained in:
Zheng, Lei 2018-09-11 16:43:52 +08:00
parent ed4b92ad23
commit c83fbce99c

View File

@ -1777,6 +1777,25 @@ class AsmConstraint(AsmGroup):
class ViewProviderAsmConstraint(ViewProviderAsmGroup):
def setupContextMenu(self,vobj,menu):
obj = vobj.Object
action = QtGui.QAction(QtGui.QIcon(),
"Enable" if obj.Disabled else "Disable", menu)
QtCore.QObject.connect(
action,QtCore.SIGNAL("triggered()"),self.toggleDisable)
menu.addAction(action)
def toggleDisable(self):
obj = self.ViewObject.Object
FreeCAD.setActiveTransaction('Toggle constraint')
try:
obj.Disabled = not obj.Disabled
except Exception:
FreeCAD.closeActiveTransaction(True)
raise
FreeCAD.closeActiveTransaction()
def attach(self,vobj):
super(ViewProviderAsmConstraint,self).attach(vobj)
vobj.OnTopWhenSelected = 2
@ -1927,6 +1946,35 @@ class AsmElementGroup(AsmGroup):
class ViewProviderAsmElementGroup(ViewProviderAsmGroup):
_iconName = 'Assembly_Assembly_Element_Tree.svg'
def setupContextMenu(self,_vobj,menu):
action = QtGui.QAction(QtGui.QIcon(),"Sort A~Z",menu)
QtCore.QObject.connect(action,QtCore.SIGNAL("triggered()"),self.sort)
menu.addAction(action)
action = QtGui.QAction(QtGui.QIcon(),"Sort Z~A",menu)
QtCore.QObject.connect(
action,QtCore.SIGNAL("triggered()"),self.sortReverse)
menu.addAction(action)
def sortReverse(self):
self.sort(True)
def sort(self,reverse=False):
obj = self.ViewObject.Object
group = [ (o,o.Label) for o in obj.Group ]
group = sorted(group,reverse=reverse,key=lambda x:x[1])
touched = 'Touched' in obj.State
FreeCAD.setActiveTransaction('Sort elements')
try:
obj.setPropertyStatus('Group','-Immutable')
obj.Group = [o[0] for o in group]
obj.setPropertyStatus('Group','Immutable')
except Exception:
FreeCAD.closeActiveTransaction(True)
raise
FreeCAD.closeActiveTransaction()
if not touched:
obj.purgeTouched()
def canDropObjectEx(self,_obj,owner,subname,elements):
if not owner:
return False
@ -3009,6 +3057,24 @@ class ViewProviderAssembly(ViewProviderAsmGroup):
self._movingPart = None
super(ViewProviderAssembly,self).__init__(vobj)
def setupContextMenu(self,vobj,menu):
obj = vobj.Object
action = QtGui.QAction(QtGui.QIcon(),
"Unfreeze" if obj.Freeze else "Freeze", menu)
QtCore.QObject.connect(
action,QtCore.SIGNAL("triggered()"),self.toggleFreeze)
menu.addAction(action)
def toggleFreeze(self):
obj = self.ViewObject.Object
FreeCAD.setActiveTransaction('Freeze assembly')
try:
obj.Freeze = not obj.Freeze
except Exception:
FreeCAD.closeActiveTransaction(True)
raise
FreeCAD.closeActiveTransaction()
def attach(self,vobj):
super(ViewProviderAssembly,self).attach(vobj)
if not hasattr(vobj,'ShowParts'):