assembly: fix gotToRelation on grouped parts

Fixes #234
This commit is contained in:
Zheng, Lei 2019-04-29 10:02:07 +08:00
parent a3acabbdc4
commit ddd3250fdd

View File

@ -42,12 +42,21 @@ def setLinkProperty(obj,name,val):
setattr(obj,obj.getLinkExtPropertyName(name),val) setattr(obj,obj.getLinkExtPropertyName(name),val)
def flattenSubname(obj,subname): def flattenSubname(obj,subname):
'''
Falttern any AsmPlainGroups inside subname path. Only the first encountered
assembly along the subname path is considered
'''
func = getattr(obj,'flattenSubname',None) func = getattr(obj,'flattenSubname',None)
if not func: if not func:
return subname return subname
return func(subname) return func(subname)
def flattenSubnameRecursive(obj,subname): def flattenLastSubname(obj,subname):
'''
Falttern any AsmPlainGroups inside subname path. Only the last encountered
assembly along the subname path is considered
'''
r = Assembly.find(obj,subname,recursive=True)[-1] r = Assembly.find(obj,subname,recursive=True)[-1]
return subname[:-len(r.Subname)] + flattenSubname(r.Object,r.Subname) return subname[:-len(r.Subname)] + flattenSubname(r.Object,r.Subname)
@ -710,8 +719,7 @@ class AsmElement(AsmBase):
for i,hierarchy in enumerate(hierarchies): for i,hierarchy in enumerate(hierarchies):
for path in hierarchy: for path in hierarchy:
if path.Assembly == assembly: if path.Assembly == assembly:
sub = flattenSubname(path.Object, sub = path.Subname[path.Subname.index('.')+1:]
path.Subname[path.Subname.index('.')+1:])
hierarchies[i] = AsmElement.Selection( hierarchies[i] = AsmElement.Selection(
Element=element, Element=element,
Group=path.Object, Group=path.Object,
@ -771,7 +779,7 @@ class AsmElement(AsmBase):
return ret return ret
group = selection.Group group = selection.Group
subname = selection.Subname subname = flattenSubname(selection.Group,selection.Subname)
if isTypeOf(group,AsmElementGroup): if isTypeOf(group,AsmElementGroup):
# if the selected object is an element of the owner assembly, simply # if the selected object is an element of the owner assembly, simply
@ -849,6 +857,7 @@ class AsmElement(AsmBase):
element = selection.Element element = selection.Element
subname = flattenSubname(group,subname)
dot = subname.find('.') dot = subname.find('.')
sobj = group.getSubObject(subname[:dot+1],1) sobj = group.getSubObject(subname[:dot+1],1)
if not sobj: if not sobj:
@ -2586,7 +2595,7 @@ class AsmRelationGroup(AsmBase):
sobj = obj.getSubObject(subname,1) sobj = obj.getSubObject(subname,1)
if not isTypeOf(sobj,AsmConstraint): if not isTypeOf(sobj,AsmConstraint):
return return
subname = flattenSubnameRecursive(obj,subname) subname = flattenLastSubname(obj,subname)
sub = Part.splitSubname(subname)[0].split('.') sub = Part.splitSubname(subname)[0].split('.')
sub = sub[:-1] sub = sub[:-1]
sub[-2] = '3' sub[-2] = '3'
@ -2621,21 +2630,25 @@ class AsmRelationGroup(AsmBase):
if not moveInfo: if not moveInfo:
return return
info = moveInfo.ElementInfo info = moveInfo.ElementInfo
subname = flattenSubnameRecursive(moveInfo.SelObj,moveInfo.SelSubname) subname = moveInfo.SelSubname
if not info.Subname: if not info.Subname:
subname = flattenLastSubname(moveInfo.SelObj, subname)
subs = subname.split('.')
elif moveInfo.SelSubname.endswith(info.Subname):
subname = flattenLastSubname(moveInfo.SelObj,
subname[:-len(info.Subname)])
subs = subname.split('.') subs = subname.split('.')
elif subname.endswith(info.Subname):
subs = subname[:-len(info.Subname)].split('.')
else: else:
sobj = moveInfo.SelObj.getSubObject(moveInfo.SelSubname,1) sobj = moveInfo.SelObj.getSubObject(moveInfo.SelSubname,1)
subname = flattenLastSubname(moveInfo.SelObj, subname)
subs = subname.split('.') subs = subname.split('.')
if isTypeOf(sobj,AsmElementLink): if isTypeOf(sobj,AsmElementLink):
subs = subs[:-3] subs = subs[:-3]
elif isTypeOf(sobj,AsmElement): elif isTypeOf(sobj,AsmElement):
subs = subs[:-2] subs = subs[:-2]
else: else:
raise RuntimeError('Invalid selection {}.{}'.format( raise RuntimeError('Invalid selection {}.{}, {}'.format(
objName(moveInfo.SelObj),moveInfo.SelSubname)) objName(moveInfo.SelObj),moveInfo.SelSubname,subname))
if isinstance(info.Part,tuple): if isinstance(info.Part,tuple):
subs += ['','',''] subs += ['','','']
else: else: