首页/文章/ 详情

ANSA二次开发:模型结构树重构(3)

15小时前浏览3
在基于ANSA的二次开发中,许多功能开发都需要利用到模型的结构树,如模型任务分发功能定制,连接(焊点、粘胶、焊缝等)的自动化生成都需要用到结构树。下面介绍三种结构树构造方法并对每种方案的性能进行说明。

方法三

主要思路:以每一个part在原始结构树中所处的实际深度作为判定条件,通过不断的搜索每一个part的临近子节点并构建以实现从根节点到所有叶子节点的遍历构造。该方法思路简单直接,但需要不停的遍历搜素,可能对结构树的构建效率有所影响。通过一个完整的车身(BIW)CAD数据,进行构造,64核电脑用时0.15秒,与前两种方案差别并不太大。












































































from ansa import guitkfrom ansa import basefrom typing import ListTupleDictUnion
deck = base.CurrentDeck()PARTTYPETUPLE:Tuple[str] = ('ANSAPART''ANSAGROUP')VIEWCOLNAMETUPLE:Tuple[str] = ('Module Id''Name''Status'# ListView列名称
def setItemText(item:object, name:strid: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 loadModelTree03()->None:  groupIter:List[base.Entity] = base.CollectEntitiesI(deck, None, PARTTYPETUPLE)  createItemsAsDepth(leftModelView, groupIter, 0)  return None
def createItemsAsDepth(parentItem:object, groups:List[base.Entity], depth:int)->None:  isTop:bool = True if depth==0 else False  for group in groups:    if base.GetPartDepth(group)['depth']!=depth:continue    name:str = group._name.strip()    try      item = leftPartToItemDict[name]    except KeyError:      item = createItem(parentItem, group, isTop=isTop)      leftPartToItemDict[name] = item    if group.ansa_type(deck)==PARTTYPETUPLE[0]:continue    newGroups = base.CollectEntitiesI(deck, group, PARTTYPETUPLE)    createItemsAsDepth(item, newGroups, depth+1)  return None
if __name__ == '__main__':  # 用于存储结构树数据,实现part和新创建的item一一对应  leftPartToItemDict:Dict[strList[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)  loadModelTree03()  guitk.BCShow(mainWindow)
未经作者同意,不得转载该文!!!

来源:檐苔
二次开发ANSA
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-08-26
最近编辑:15小时前
青瓦松
硕士 签名征集中
获赞 12粉丝 0文章 45课程 0
点赞
收藏
作者推荐

VPI伤害值方程求解及相关程序

将车辆碰撞过程中的假人假设为质量块,车辆约束系统假设为弹簧系统,则在水平方向上可将模型简化为:在车辆运动过程中,车辆x(t)以的初速度做减速运动。质量块M在的情况下作以的初速度的匀速直线运动,此后质量块受到弹簧力,作变速运动。据此可写出VPI的运动方程如下:一、方程求解1、通解二阶常系数齐次方程的特征方程: (3)特征方程的解:所以:所以二阶常系数齐次方程的通解为: (4)2、特解在t时刻由Taylor公式,位移函数x可以在时间内展开为:忽略高阶误差项,则可设方程式(2)的特解为: 得:将上面3式代入式(2)得: 3、通解变形式改写对于方程的通解式(4)有:当和为已知量时,则可写为4、通解系数所以,式(2)在的通解可写为:当时,应有,代入式(7)得, 将代入(7)得到最终通解。 5、增量形式将式(7)改写为增量步形式: 二、程序说明: 该程序以python写成,输入为时间-加速度曲线数据。标准单位制为kg-m-s,可通过units方法进行单位转换。可通过acc_chest_list属性获取质量块加速度曲线,属性max获取具体VPI值。具体使用方法参考代码main函数中提供的用例。链接:https://pan.baidu.com/s/1y6_z3hmdL9S_Bh3XdnU19A提取码:y2fm如有冒犯,请联删,谢谢。文完。来源:檐苔

有附件
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈