Abaqus管线建模获取wire索引及edges.findAt参数含义咨询
Abaqus
edges.findAt参数含义与管线集创建解决方案 edges.findAt参数说明
edges.findAt()括号内传入的是目标wire边(edge)上任意一个点的三维坐标,只要该坐标唯一落在某条edge的几何范围内,就能精准匹配到对应edge对象。
你在jnl文件里看到的非特征点坐标,是Abaqus录制操作时抓取的你手动点选wire时鼠标点击位置的模型空间坐标,不需要是端点、中点等特征点,仅要求点位落在目标edge上即可。
可行解决方法
- 方法1:利用建模原始数据直接定位edge
你是通过自定义VBA脚本生成的管线wire,所有管线的两个端点坐标都是已知的。对需要加入指定管径集的wire,直接取其两个端点的中点坐标传入findAt即可100%匹配到对应edge,无需查询Abaqus内部的edge ID。
示例:某段6英寸管线端点为(x1,y1,z1)和(x2,y2,z2),取中点((x1+x2)/2, (y1+y2)/2, (z1+z2)/2)作为findAt参数即可。 - 方法2:遍历edge按截面属性批量筛选
如果你已经为不同管径的wire分配了对应命名的截面属性,可以直接遍历所有edge,匹配截面名称后批量创建集,无需调用findAt。
参考代码:target_part = mdb.models['model-1'].parts['part-1'] edge_list = [] for edge in target_part.edges: sec_assignment = target_part.getSectionAssignment(region=(edge,)) # 替换为你6英寸管线对应的截面名判断规则 if '6inch' in sec_assignment.sectionName: edge_list.append(edge) target_part.Set(edges=edge_list, name='set-6inch') - 方法3:输出所有edge信息核对
如果你需要查询现有模型中所有edge的索引、对应坐标信息,可运行以下代码输出核对:target_part = mdb.models['model-1'].parts['part-1'] for idx, edge in enumerate(target_part.edges): p_start = edge.pointOn[0] p_end = edge.pointOn[1] mid_p = ((p_start[0]+p_end[0])/2, (p_start[1]+p_end[1])/2, (p_start[2]+p_end[2])/2) print(f"Edge索引:{idx} | 起点:{p_start} | 终点:{p_end} | 中点:{mid_p}")
内容的提问来源于stack exchange,提问作者NobrainJustStubborn
相关产品推荐
相关产品推荐

