assembly: support dropObjectEx API changes

This commit is contained in:
Zheng, Lei 2018-03-26 11:31:05 +08:00
parent 80bceefcc6
commit 508fcd7713

View File

@ -183,7 +183,7 @@ class ViewProviderAsmPartGroup(ViewProviderAsmGroup):
def onDelete(self,_obj,_subs): def onDelete(self,_obj,_subs):
return False return False
def canDropObjectEx(self,obj,_owner,_subname): def canDropObjectEx(self,obj,_owner,_subname,_elements):
return isTypeOf(obj,Assembly, True) or not isTypeOf(obj,AsmBase) return isTypeOf(obj,Assembly, True) or not isTypeOf(obj,AsmBase)
def canDragObject(self,_obj): def canDragObject(self,_obj):
@ -521,15 +521,18 @@ class ViewProviderAsmElement(ViewProviderAsmOnTop):
def getDefaultColor(self): def getDefaultColor(self):
return (60.0/255.0,1.0,1.0) return (60.0/255.0,1.0,1.0)
def canDropObjectEx(self,_obj,owner,subname): def canDropObjectEx(self,_obj,owner,_subname,elements):
if not subname: if not elements:
return False return False
proxy = self.ViewObject.Object.Proxy proxy = self.ViewObject.Object.Proxy
return proxy.getAssembly().getPartGroup()==owner return proxy.getAssembly().getPartGroup()==owner
def dropObjectEx(self,vobj,_obj,owner,subname): def dropObjectEx(self,vobj,_obj,owner,subname,elements):
if not elements:
return
for element in elements:
AsmElement.make(AsmElement.Selection(Element=vobj.Object, AsmElement.make(AsmElement.Selection(Element=vobj.Object,
Group=owner, Subname=subname),undo=True) Group=owner, Subname=subname+element),undo=True)
class AsmElementSketch(AsmElement): class AsmElementSketch(AsmElement):
@ -907,16 +910,22 @@ class ViewProviderAsmElementLink(ViewProviderAsmOnTop):
from . import mover from . import mover
return mover.movePart() return mover.movePart()
def canDropObjectEx(self,_obj,owner,subname): def canDropObjectEx(self,_obj,owner,subname,elements):
if logger.catchTrace('Cannot drop to AsmLink {}'.format( if not elements:
objName(self.ViewObject.Object)), elements = ['']
self.ViewObject.Object.Proxy.setLink, obj = self.ViewObject.Object
owner, subname, True): msg = 'Cannot drop to AsmLink {}'.format(objName(obj))
return True for element in elements:
if not logger.catchTrace(msg, obj.Proxy.setLink,
owner,subname+element,True):
return False return False
return True
def dropObjectEx(self,vobj,_obj,owner,subname): def dropObjectEx(self,vobj,_obj,owner,subname,elements):
vobj.Object.Proxy.setLink(owner,subname) if not elements:
elements = ['']
for element in elements:
vobj.Object.Proxy.setLink(owner,subname+element)
class AsmConstraint(AsmGroup): class AsmConstraint(AsmGroup):
@ -1161,7 +1170,7 @@ class ViewProviderAsmConstraint(ViewProviderAsmGroup):
def getIcon(self): def getIcon(self):
return Constraint.getIcon(self.ViewObject.Object) return Constraint.getIcon(self.ViewObject.Object)
def _getSelection(self,owner,subname): def _getSelection(self,owner,subname,elements):
if not owner: if not owner:
raise RuntimeError('no owner') raise RuntimeError('no owner')
parent = getattr(owner.Proxy,'parent',None) parent = getattr(owner.Proxy,'parent',None)
@ -1177,19 +1186,24 @@ class ViewProviderAsmConstraint(ViewProviderAsmGroup):
subname = owner.Name + '.' + subname subname = owner.Name + '.' + subname
obj = self.ViewObject.Object obj = self.ViewObject.Object
mysub = parent.getConstraintGroup().Name + '.' + obj.Name + '.' mysub = parent.getConstraintGroup().Name + '.' + obj.Name + '.'
sel = [Selection(Object=parent.Object,SubElementNames=[subname,mysub])] sel = []
if not elements:
elements = ['']
elements = [subname+element for element in elements]
elements.append(mysub)
sel = [Selection(Object=parent.Object,SubElementNames=elements)]
typeid = Constraint.getTypeID(obj) typeid = Constraint.getTypeID(obj)
return AsmConstraint.getSelection(typeid,sel) return AsmConstraint.getSelection(typeid,sel)
def canDropObjectEx(self,_obj,owner,subname): def canDropObjectEx(self,_obj,owner,subname,elements):
cstr = self.ViewObject.Object cstr = self.ViewObject.Object
if logger.catchTrace('Cannot drop to AsmConstraint {}'.format(cstr), if logger.catchTrace('Cannot drop to AsmConstraint '
self._getSelection,owner,subname): '{}'.format(cstr),self._getSelection,owner,subname,elements):
return True return True
return False return False
def dropObjectEx(self,_vobj,_obj,owner,subname): def dropObjectEx(self,_vobj,_obj,owner,subname,elements):
sel = self._getSelection(owner,subname) sel = self._getSelection(owner,subname,elements)
cstr = self.ViewObject.Object cstr = self.ViewObject.Object
typeid = Constraint.getTypeID(cstr) typeid = Constraint.getTypeID(cstr)
sel = AsmConstraint.Selection(SelObject=None, sel = AsmConstraint.Selection(SelObject=None,
@ -1282,26 +1296,28 @@ class ViewProviderAsmElementGroup(ViewProviderAsmGroup):
def onDelete(self,_obj,_subs): def onDelete(self,_obj,_subs):
return False return False
def canDropObjectEx(self,_obj,owner,subname): def canDropObjectEx(self,_obj,owner,_subname,elements):
if not owner or not subname: if not owner or not elements:
return False return False
proxy = self.ViewObject.Object.Proxy proxy = self.ViewObject.Object.Proxy
return proxy.getAssembly().getPartGroup()==owner return proxy.getAssembly().getPartGroup()==owner
def dropObjectEx(self,vobj,_obj,owner,subname): def dropObjectEx(self,vobj,_obj,owner,subname,elements):
element = AsmElement.make(AsmElement.Selection(
Element=None, Group=owner, Subname=subname))
if not element:
return
sels = FreeCADGui.Selection.getSelectionEx('*',False) sels = FreeCADGui.Selection.getSelectionEx('*',False)
if len(sels)!=1 or len(sels[0].SubElementNames)!=1: if len(sels)==1 and \
return len(sels[0].SubElementNames)==1 and \
sels[0].Object.getSubObject(
sels[0].SubElementNames[0],1)==vobj.Object:
sel = sels[0] sel = sels[0]
if sel.Object.getSubObject(sel.SubElementNames[0],1)==vobj.Object: else:
sel = None
FreeCADGui.Selection.clearSelection() FreeCADGui.Selection.clearSelection()
for element in elements:
obj = AsmElement.make(AsmElement.Selection(
Element=None, Group=owner, Subname=subname+element))
if obj and sel:
FreeCADGui.Selection.addSelection(sel.Object, FreeCADGui.Selection.addSelection(sel.Object,
sel.SubElementNames[0]+element.Name+'.') sel.SubElementNames[0]+obj.Name+'.')
FreeCADGui.runCommand('Std_TreeSelection')
BuildShapeNone = 'None' BuildShapeNone = 'None'
@ -1706,11 +1722,11 @@ class ViewProviderAssembly(ViewProviderAsmGroup):
return return
me = self.ViewObject.Object me = self.ViewObject.Object
partGroup = me.Proxy.getPartGroup().ViewObject partGroup = me.Proxy.getPartGroup().ViewObject
if sub == me.Name: if sub[0] == me.Name:
return partGroup,partGroup,subname[len[sub]+1:] return partGroup,partGroup,subname[len(sub[0])+1:]
return partGroup,owner,subname return partGroup,owner,subname
def canDropObjectEx(self,obj,owner,subname): def canDropObjectEx(self,obj,owner,subname,_elements):
info = self._convertSubname(owner,subname) info = self._convertSubname(owner,subname)
if not info: if not info:
return False return False
@ -1720,7 +1736,7 @@ class ViewProviderAssembly(ViewProviderAsmGroup):
def canDragAndDropObject(self,_obj): def canDragAndDropObject(self,_obj):
return True return True
def dropObjectEx(self,_vobj,obj,owner,subname): def dropObjectEx(self,_vobj,obj,owner,subname,_elements):
info = self._convertSubname(owner,subname) info = self._convertSubname(owner,subname)
if not info: if not info:
return False return False