From 7f72f93d4e61dd24f3ef127beccdf9ae18493639 Mon Sep 17 00:00:00 2001 From: "Zheng, Lei" Date: Tue, 30 Apr 2019 12:08:47 +0800 Subject: [PATCH] assembly: change GoToRelation behavior on constraint and element --- assembly.py | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/assembly.py b/assembly.py index 377c074..3d14548 100644 --- a/assembly.py +++ b/assembly.py @@ -52,13 +52,15 @@ def flattenSubname(obj,subname): return subname return func(subname) -def flattenLastSubname(obj,subname): +def flattenLastSubname(obj,subname,last=None): ''' 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] - return subname[:-len(r.Subname)] + flattenSubname(r.Object,r.Subname) + if not last: + last = Assembly.find(obj,subname,recursive=True)[-1] + return subname[:-len(last.Subname)] \ + + flattenSubname(last.Object,last.Subname) def expandSubname(obj,subname): func = getattr(obj,'expandSubname',None) @@ -2629,18 +2631,30 @@ class AsmRelationGroup(AsmBase): def gotoRelation(moveInfo): if not moveInfo: return - info = moveInfo.ElementInfo + subname = moveInfo.SelSubname + info = moveInfo.ElementInfo + sobj = moveInfo.SelObj.getSubObject(moveInfo.SelSubname,1) + + if isTypeOf(sobj,AsmConstraint): + AsmRelationGroup.gotoRelationOfConstraint( + moveInfo.SelObj, moveInfo.SelSubname) + return + + last = moveInfo.Hierarchy[-1] + if len(moveInfo.Hierarchy)>1 and \ + isTypeOf(sobj,(AsmConstraint,AsmElement,AsmElementLink)): + info = getElementInfo(last.Assembly, last.Subname) + if not info.Subname: - subname = flattenLastSubname(moveInfo.SelObj, subname) + subname = flattenLastSubname(moveInfo.SelObj,subname,last) subs = subname.split('.') elif moveInfo.SelSubname.endswith(info.Subname): - subname = flattenLastSubname(moveInfo.SelObj, - subname[:-len(info.Subname)]) + subname = flattenLastSubname( + moveInfo.SelObj, subname[:-len(info.Subname)],last) subs = subname.split('.') else: - sobj = moveInfo.SelObj.getSubObject(moveInfo.SelSubname,1) - subname = flattenLastSubname(moveInfo.SelObj, subname) + subname = flattenLastSubname(moveInfo.SelObj, subname, last) subs = subname.split('.') if isTypeOf(sobj,AsmElementLink): subs = subs[:-3]