You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导入点至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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:36:03