上文ANSA二次开发创建螺栓和Box连接里已经介绍了这种新的螺栓连接方式,优点是连接方便,不用顾及B总成的节点编号。缺点就是建模麻烦,需要一个个手动偏移点,建立box和SET,还有rbe2。但是,我们有ANSA二次开发这个黑科技,可以一键就生成螺栓和BOX,下面就由我来为大家讲解下代码和使用方法。首先用mesh模块下的Info命令,读取B总成的rbe2的主点坐标,坐标如下图:我们直接复 制他的坐标,下面来到我们的A总成界面,运行我们的代码,打开是如下的界面:在这个框里粘贴之前复 制的坐标,点击创建Box按钮!这样我们的螺栓和box,以及box的rbe2就创建好了,这里要注意的是,在执行脚本前,我们需要把A总成的include设置成当前,如下图,这样我们脚本创建的螺栓,box等一系列东西就会自动归到A总成的include下面代码其实非常简单,我们需要两个beam的端点来创建螺栓p, li { white-space: pre-wrap; } node = base.PickEntities(constants.LSDYNA, 'NODE')
if not node:print("未选择点,操作取消")return
node = node[0]
fields = ('NID','X', 'Y', 'Z')coord_dict = base.GetEntityCardValues(constants.LSDYNA, node, fields)N1 = coord_dict['NID']x = coord_dict['X']y = coord_dict['Y']z = coord_dict['Z']print(f"选择点坐标: ({N1},{x:.3f}, {y:.3f}, {z:.3f})") pid=[]pids=base.CollectEntities(constants.LSDYNA,None,'__PROPERTIES__')for pi in pids:pi_id=base.GetEntityCardValues(constants.LSDYNA,pi,("PID",))["PID"]pid.append(pi_id)pid=max(pid)+1val2={'PID':pid,"ELFORM":'9 S-W','CST':'1 tubul.','TS1':1,'TS2':1}base.CreateEntity(constants.LSDYNA,'SECTION_BEAM_ELFORM_9',val2)val1={'PID':pid,"N1":N1,"N2":N2,'x1':1}base.CreateEntity(constants.LSDYNA,'ELEMENT_BEAM_ELFORM_9',val1)
之后我们用复 制粘贴得到的B总成的端点来创建box,并创建set,再创建Box的rbe2。p, li { white-space: pre-wrap; } cube_size = 1.0 half_size = cube_size / 2.0
min_point = (x1 - half_size, y1 - half_size, z1 - half_size)max_point = (x1 + half_size, y1 + half_size, z1 + half_size)
box_props = {'XMN': x1 - half_size, 'XMX': x1 + half_size, 'YMN': y1 - half_size,'YMX': y1 + half_size,'ZMN': z1 - half_size,'ZMX': z1 + half_size }box = base.CreateEntity(constants.LSDYNA, 'DEFINE_BOX_GENERAL', box_props)
print(f"成功创建边长为{cube_size}mm的立方体 (ID={box._id})")s_id=[]SETS=base.CollectEntities(constants.LSDYNA,None,'SET')
SID=SETS[-1]._id+1print(SID)SET=base.CreateEntity(constants.LSDYNA,'SET',{'SID':SID})base.AddToSet(SET,box)base.CreateEntity(constants.LSDYNA,'CONSTRAINED_NODAL_RIGID_BODY',{'NSID':SID})return 0