Python调用ETABS API迭代嵌套坐标列表绘梁报TypeError解决方法
报错原因
zip(XCoordsList,YCoordsList)迭代得到的m、n是嵌套结构里的内层列表(比如第一次迭代m就是[0,5.5,11],n就是[5,6.1,5.7]),不是整数索引。原代码直接用m[m]、n[n]的写法,相当于把列表本身作为下标去访问列表元素,完全不符合列表索引的取值规则,因此触发类型错误。
修正代码
你的坐标对应规则是:同位置的两个内层列表为同一组梁的控制点集,同组内相邻控制点连线生成梁,所有梁的Z坐标固定为3,修正后的可运行代码如下:
Z = 3 # 逐组遍历一一对应的X、Y坐标子集 for x_coords, y_coords in zip(XCoordsList, YCoordsList): # 遍历组内相邻点,逐段绘制梁 for point_idx in range(len(x_coords) - 1): # 提取梁段两端点坐标 x1, y1 = x_coords[point_idx], y_coords[point_idx] x2, y2 = x_coords[point_idx+1], y_coords[point_idx+1] # 调用ETABS API绘制梁 SapModel.FrameObj.AddByCoord(x1, y1, Z, x2, y2, Z, "name", "section")
补充说明
- 按你给出的示例数据,3组坐标每组3个点,总共会生成3*2=6段梁,和你举例的点对应关系完全匹配。
- 实际使用时建议给每段梁生成唯一的name值、匹配对应section属性,避免构件重名导致的API调用报错。
内容的提问来源于stack exchange,提问作者FZL
相关产品推荐
相关产品推荐

