from ansa import guitkfrom ansa import basefrom typing import List, Tuple, Dict, Union
deck = base.CurrentDeck()PARTTYPETUPLE:Tuple[str] = ('ANSAPART', 'ANSAGROUP')VIEWCOLNAMETUPLE:Tuple[str] = ('Module Id', 'Name', 'Status')
def setItemText(item:object, name:str, id:str='')->None: ''' 对输入的item设置名称和ID ''' guitk.BCListViewItemSetText(item, VIEWCOLNAMETUPLE.index('Name'), name) if id: guitk.BCListViewItemSetText(item, VIEWCOLNAMETUPLE.index('Module Id'), id) return None def createItem(parentItem:object, part:base.Entity, isTop:bool=False)->object: ''' 功能: 为输入的part在parentItem下创建一个新的item 参数: parentItem object 准备新创建item的父节点,为item或listView类型 part: Entity 一个part或group对象 isTop bool 判断需要创建节点是否为根节点的判断器 返回值: 返回生成的item对象 ''' if not isTop: item:object = guitk.BCListViewItemAddChild(parentItem) else: item:object = guitk.BCListViewAddTopLevelItem(parentItem) if part.ansa_type(deck)==PARTTYPETUPLE[0]: partId: str = part.get_entity_values(deck, ['Module Id', ])['Module Id'] else: partId: str = '' setItemText(item, part._name.strip(), id=partId) guitk.BCListViewItemSetUserData(item, part) return item
def loadModelTree02()->None: partIter:List[base.Entity] = base.CollectEntitiesI(deck, None, PARTTYPETUPLE) hierToPartDict:Dict[str,List[base.Entity]] = dict() for part in partIter: tree:str = part.get_entity_values(deck, ['Hierarchy', ])['Hierarchy'] tree = tree.strip() try: hierToPartDict[tree].append(part) except KeyError: hierToPartDict[tree] = [part] crtTreeBranch(leftModelView, '', hierToPartDict, isTop=True)
def crtTreeBranch(parent:object, name:str, hierToPartDict:Dict[str,List[base.Entity]], isTop:bool=False)->None: children:List[base.Entity] = hierToPartDict.get(name, None) if not children: return None for child in children: item = leftPartToItemDict.get(child, None) if not item: item = createItem(parent, child, isTop=isTop) leftPartToItemDict[child] = item if child.ansa_type(deck)==PARTTYPETUPLE[0]:continue crtTreeBranch(item, f'{name}{child._name.strip()}/', hierToPartDict) return None
if __name__ == '__main__': leftPartToItemDict:Dict[str, List[object]] = dict() mainWindow:object = guitk.BCWindowCreate('结构树构造', guitk.constants.BCOnExitDestroy) mainBox:object = guitk.BCVBoxCreate(mainWindow) leftModelView:object = guitk.BCListViewCreate(mainBox, 3, VIEWCOLNAMETUPLE, True) guitk.BCListViewSetIsRootDecorated(leftModelView, True) guitk.BCListViewSetFilterEnabled(leftModelView, True) guitk.BCListViewSetSelectionMode(leftModelView, guitk.constants.BCMulti) loadModelTree02() guitk.BCShow(mainWindow)