导入点至WirePolyLine:Abaqus脚本传坐标触发TypeError问题咨询
问题原因与解决方案
核心错误原因
WirePolyLine的*points*参数要求传入由多个点坐标组成的序列,每个元素是单个点的[x,y,z]坐标(列表或元组均可),当前代码存在两个问题:
- 循环内每次生成的
CoG_OldXYZ是单个点的坐标列表,直接传给points时,方法会把这个列表里的x、y、z三个浮点数当成三个独立的点去解析,自然会报points[0]为float、不符合参数要求的错误。对比你写死的正常代码可以看到,points传入的是19个坐标列表组成的序列,不是单个坐标列表。 - 创建线体的逻辑写在了循环内部,相当于每次循环都尝试创建一次只含单个点的线,本身逻辑也不符合多段线的创建要求,多段线需要先收集所有顶点再一次性创建。
修正代码
# Define the modelname modelname = "SpineModel" # Define list with partnames PartNames = ["C7", "L1", "L2", "L3", "L4", "L5", "S1", "T1", "T2", "T3", "T4", "T5", "T6", "T7", "T8", "T9", "T10", "T11", "T12"] # 初始化空列表存储所有顶点坐标 all_points = [] for i in range(19): # 读取单个椎骨的CoG坐标 CoG_OldX = mdb.models[modelname].parts[PartNames[i]].features['CoG'].xValue CoG_OldY = mdb.models[modelname].parts[PartNames[i]].features['CoG'].yValue CoG_OldZ = mdb.models[modelname].parts[PartNames[i]].features['CoG'].zValue CoG_OldXYZ = [CoG_OldX, CoG_OldY, CoG_OldZ] # 将当前点添加到总顶点列表 all_points.append(CoG_OldXYZ) # 打印坐标用于校验 print(CoG_OldXYZ) # 所有顶点收集完成后,调用一次WirePolyLine创建多段线 # 这里示例将线存入第一个Part,你可以根据实际需求调整目标Part Spline_OLD = mdb.models[modelname].parts[PartNames[0]].WirePolyLine(mergeType=IMPRINT, meshable=False, points=all_points)
补充说明
如果你需要给每个Part单独创建对应线体,只需对应调整顶点收集逻辑即可,但无论哪种场景,points参数都必须传入多个点组成的序列,不能直接传入单个点的坐标列表。
内容的提问来源于stack exchange,提问作者JetskiS
相关产品推荐
相关产品推荐

