qtmodel 1.1.10__tar.gz → 1.1.13__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of qtmodel might be problematic. Click here for more details.

Files changed (43) hide show
  1. {qtmodel-1.1.10 → qtmodel-1.1.13}/PKG-INFO +69 -73
  2. {qtmodel-1.1.10 → qtmodel-1.1.13}/README.md +67 -71
  3. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/core/data_helper.py +1 -1
  4. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/core/result_db.py +102 -0
  5. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/mdb/__init__.py +1 -0
  6. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/mdb/mdb_analysis_setting.py +1 -1
  7. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/mdb/mdb_construction_stage.py +8 -8
  8. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/mdb/mdb_live_load.py +0 -1
  9. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/mdb/mdb_load.py +12 -10
  10. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/mdb/mdb_project.py +4 -0
  11. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/mdb/mdb_section.py +1 -1
  12. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/mdb/mdb_temperature_load.py +14 -42
  13. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/mdb/mdb_tendon.py +7 -7
  14. qtmodel-1.1.13/qtmodel/odb/odb_model_material.py +30 -0
  15. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/odb/odb_model_section.py +33 -2
  16. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/odb/odb_result_data.py +47 -1
  17. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel.egg-info/PKG-INFO +69 -73
  18. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel.egg-info/SOURCES.txt +3 -1
  19. {qtmodel-1.1.10 → qtmodel-1.1.13}/setup.py +1 -1
  20. qtmodel-1.1.13/test/test.py +7 -0
  21. qtmodel-1.1.13/test/test_model.py +1698 -0
  22. qtmodel-1.1.10/qtmodel/odb/odb_model_material.py +0 -109
  23. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/__init__.py +0 -0
  24. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/core/__init__.py +0 -0
  25. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/core/model_db.py +0 -0
  26. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/core/qt_server.py +0 -0
  27. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/mdb/mdb_assistant.py +0 -0
  28. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/mdb/mdb_boundary.py +0 -0
  29. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/mdb/mdb_dynamic_load.py +0 -0
  30. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/mdb/mdb_property.py +0 -0
  31. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/mdb/mdb_sink_load.py +0 -0
  32. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/mdb/mdb_static_load.py +0 -0
  33. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/mdb/mdb_structure.py +0 -0
  34. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/odb/__init__.py +0 -0
  35. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/odb/odb_model_boundary.py +0 -0
  36. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/odb/odb_model_load.py +0 -0
  37. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/odb/odb_model_stage.py +0 -0
  38. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/odb/odb_model_structure.py +0 -0
  39. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/odb/odb_result_plot.py +0 -0
  40. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel/odb/odb_view.py +0 -0
  41. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel.egg-info/dependency_links.txt +0 -0
  42. {qtmodel-1.1.10 → qtmodel-1.1.13}/qtmodel.egg-info/top_level.txt +0 -0
  43. {qtmodel-1.1.10 → qtmodel-1.1.13}/setup.cfg +0 -0
@@ -1,7 +1,7 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qtmodel
3
- Version: 1.1.10
4
- Summary: python modeling for qt 2025-09-30
3
+ Version: 1.1.13
4
+ Summary: python modeling for qt 2025-11-03
5
5
  Home-page: https://github.com/Inface0443/pyqt
6
6
  Author: dqy-zhj
7
7
  Author-email: 1105417715@qq.com
@@ -17,9 +17,9 @@ Dynamic: description-content-type
17
17
  Dynamic: home-page
18
18
  Dynamic: summary
19
19
 
20
- > 最新版本 V1.1.9 - 2025-09-30
20
+ > 最新版本 V1.1.13 - 2025-11-03
21
21
  > pip install --upgrade qtmodel -i https://pypi.org/simple
22
- - 新增更新结构组接口
22
+ - 增加钢束预应力结果读取
23
23
  # 建模操作
24
24
  ## 节点操作
25
25
  ### add_nodes
@@ -596,7 +596,7 @@ mdb.remove_thickness(name="板厚1")
596
596
  > _布置具体部位(箱型钢梁) 1-上左 2-上中 3-上右 4-左腹板 5-右腹板 6-下左 7-下中 8-下右
597
597
  > loop_segments:线圈坐标集合 list[dict] dict示例:{"main":[(x1,y1),(x2,y2)...],"sub1":[(x1,y1),(x2,y2)...],"sub2":[(x1,y1),(x2,y2)...]}
598
598
  > sec_lines:线宽集合[(x1,y1,x2,y3,thick),]
599
- > secondary_loop_segments:辅材线圈坐标集合 list[dict] (同loop_segments)
599
+ > secondary_loop_segments:辅材线圈坐标集合 list[dict] (同loop_segments),建议以左下角为组合截面原点建立截面
600
600
  > sec_property:截面特性(参考UI界面共计29个参数),可选参数,指定截面特性时不进行截面计算
601
601
  > bias_type:偏心类型 默认中心
602
602
  > center_type:中心类型 默认质心
@@ -1271,7 +1271,7 @@ control_points=[(0,-1,0),(10,-1,0)],point_insert=(1,1,1),track_group="轨迹线
1271
1271
  #Returns: 无
1272
1272
  ```
1273
1273
  ### update_element_component_type
1274
- todo 赋予单元构件类型
1274
+ 赋予单元构件类型
1275
1275
  > 参数:
1276
1276
  > ids: 钢束构件所在单元编号集合且支持XtoYbyN形式字符串
1277
1277
  > component_type:0-钢结构构件 1-钢筋混凝土构件 2-预应力混凝土构件
@@ -1282,7 +1282,7 @@ mdb.update_element_component_type(ids=[1,2,3,4],component_type=2)
1282
1282
  #Returns: 无
1283
1283
  ```
1284
1284
  ### update_tendon_group
1285
- todo 更新钢束组名
1285
+ 更新钢束组名
1286
1286
  > 参数:
1287
1287
  > name:原钢束组名
1288
1288
  > new_name:新钢束组名
@@ -1293,7 +1293,7 @@ mdb.update_tendon_group("钢束组1","钢束组2")
1293
1293
  #Returns: 无
1294
1294
  ```
1295
1295
  ### remove_tendon
1296
- todo 按照名称或编号删除钢束,默认时删除所有钢束
1296
+ 按照名称或编号删除钢束,默认时删除所有钢束
1297
1297
  > 参数:
1298
1298
  > name:钢束名称
1299
1299
  > index:钢束编号
@@ -1306,7 +1306,7 @@ mdb.remove_tendon()
1306
1306
  #Returns: 无
1307
1307
  ```
1308
1308
  ### remove_tendon_property
1309
- todo 按照名称或编号删除钢束组,默认时删除所有钢束组
1309
+ 按照名称或编号删除钢束组,默认时删除所有钢束组
1310
1310
  > 参数:
1311
1311
  > name:钢束组名称
1312
1312
  > index:钢束组编号
@@ -1319,7 +1319,7 @@ mdb.remove_tendon_property()
1319
1319
  #Returns: 无
1320
1320
  ```
1321
1321
  ### remove_pre_stress
1322
- todo 删除预应力
1322
+ 删除预应力
1323
1323
  > 参数:
1324
1324
  > tendon_name:钢束组,默认则删除所有预应力荷载
1325
1325
  ```Python
@@ -1330,7 +1330,7 @@ mdb.remove_pre_stress()
1330
1330
  #Returns: 无
1331
1331
  ```
1332
1332
  ### remove_tendon_group
1333
- todo 按照钢束组名称或钢束组编号删除钢束组,两参数均为默认时删除所有钢束组
1333
+ 按照钢束组名称或钢束组编号删除钢束组,两参数均为默认时删除所有钢束组
1334
1334
  > 参数:
1335
1335
  > name:钢束组名称,默认自动识别 (可选参数)
1336
1336
  ```Python
@@ -2625,7 +2625,7 @@ mdb.update_weight_stage(name="施工阶段1",structure_group_name="默认结构
2625
2625
  #Returns: 无
2626
2626
  ```
2627
2627
  ### update_construction_stage
2628
- todo 更新施工阶段信息
2628
+ 更新施工阶段信息
2629
2629
  > 参数:
2630
2630
  > name:施工阶段信息
2631
2631
  > new_name:新施工阶段名
@@ -2921,57 +2921,6 @@ mdb.update_bulking_setting(do_analysis=True,mode_count=3,variable_cases=["工况
2921
2921
  ```
2922
2922
  # 视图与结果提取
2923
2923
  ## 获取材料
2924
- ### get_concrete_material
2925
- 获取混凝土材料信息
2926
- > 参数:
2927
- > ids: 材料号支持XtoYbyN形式字符串,默认时输出全部材料
2928
- ```Python
2929
- # 示例代码
2930
- from qtmodel import *
2931
- odb.get_concrete_material() # 获取所有材料信息
2932
- #Returns: list[dict]
2933
- ```
2934
- ### get_steel_plate_material
2935
- 获取钢材材料信息
2936
- > 参数:
2937
- > ids: 材料号支持XtoYbyN形式字符串,默认时输出全部材料
2938
- ```Python
2939
- # 示例代码
2940
- from qtmodel import *
2941
- odb.get_steel_plate_material() # 获取所有钢材材料信息
2942
- #Returns: list[dict]
2943
- ```
2944
- ### get_pre_stress_bar_material
2945
- 获取钢材材料信息
2946
- > 参数:
2947
- > ids: 材料号,默认时输出全部材料
2948
- ```Python
2949
- # 示例代码
2950
- from qtmodel import *
2951
- odb.get_pre_stress_bar_material() # 获取所有预应力材料信息
2952
- #Returns: list[dict]
2953
- ```
2954
- ### get_steel_bar_material
2955
- 获取钢筋材料信息
2956
- > 参数:
2957
- > ids: 材料号,默认None时输出全部材料
2958
- ```Python
2959
- # 示例代码
2960
- from qtmodel import *
2961
- odb.get_steel_bar_material() # 获取所有钢筋材料信息
2962
- #Returns: list[dict]
2963
- ```
2964
- ### get_user_define_material
2965
- 获取自定义材料信息
2966
- > 参数:
2967
- > ids: 材料号支持XtoYbyN形式字符串,默认None时输出全部材料
2968
- ```Python
2969
- # 示例代码
2970
- from qtmodel import *
2971
- odb.get_user_define_material() # 获取所有自定义材料信息
2972
- odb.get_user_define_material("1to10") # 获取所有自定义材料信息
2973
- #Returns: list[dict]
2974
- ```
2975
2924
  ### get_material_data
2976
2925
  获取材料信息
2977
2926
  > 参数:
@@ -2987,16 +2936,7 @@ odb.get_material_data() # 获取所有材料信息
2987
2936
  ```Python
2988
2937
  # 示例代码
2989
2938
  from qtmodel import *
2990
- odb.get_thickness_data(1)
2991
- #Returns:
2992
- ```
2993
- ### get_all_thickness_data
2994
- 获取所有板厚信息
2995
- > 参数:
2996
- ```Python
2997
- # 示例代码
2998
- from qtmodel import *
2999
- odb.get_all_thickness_data()
2939
+ odb.get_thickness_data()
3000
2940
  #Returns: 包含信息为list[dict]
3001
2941
  ```
3002
2942
  ## 获取节点信息
@@ -3161,6 +3101,7 @@ odb.get_all_section_data()
3161
3101
  获取截面详细信息,截面特性详见UI自定义特性截面
3162
3102
  > 参数:
3163
3103
  > sec_id: 目标截面编号
3104
+ > position: 目标截面为变截面时0-首端 1-末端
3164
3105
  ```Python
3165
3106
  # 示例代码
3166
3107
  from qtmodel import *
@@ -3186,6 +3127,31 @@ from qtmodel import *
3186
3127
  odb.get_section_ids()
3187
3128
  #Returns: list[int]
3188
3129
  ```
3130
+ ### get_section_property_by_loops
3131
+ 通过多组线圈获取截面特性
3132
+ > 参数:
3133
+ ```Python
3134
+ # 示例代码
3135
+ from qtmodel import *
3136
+ dict_item1 = {"main": [[9.25, 0.0], [18.4, 0.0], [18.5, 0.0], [18.5, 2.5], [9.25, 2.5], [0.0, 2.5], [0.0, 0.0], [0.1, 0.0]],
3137
+ "sub1": [[6.35, 0.5], [2.55, 0.5], [2.55, 1.0], [2.55, 2.0], [6.35, 2.0]],
3138
+ "sub2": [[9.25, 0.5], [11.55, 0.5], [11.55, 2.0], [9.25, 2.0], [6.95, 2.0], [6.95, 0.5]],
3139
+ "sub3": [[12.15, 0.5], [15.95, 0.5], [15.95, 1.0], [15.95, 2.0], [12.15, 2.0]]}
3140
+ odb.get_section_property_by_loops([dict_item1])
3141
+ #Returns: dict
3142
+ ```
3143
+ ### get_section_property_by_lines
3144
+ 通过线宽数据获取截面特性
3145
+ > 参数:
3146
+ ```Python
3147
+ # 示例代码
3148
+ from qtmodel import *
3149
+ sec_lines = [[0.0, 2.284, 5.51093, 2.284, 0.016], [0.152479, 2.284, 0.200597, 2.04341, 0.008],
3150
+ [0.200597, 2.04341, 0.201664, 2.0389, 0.008], [0.201664, 2.0389, 0.203149, 2.03451, 0.008],
3151
+ [0.203149, 2.03451, 0.205006, 2.03026, 0.008]]
3152
+ odb.get_section_property_by_lines(sec_lines)
3153
+ #Returns: dict
3154
+ ```
3189
3155
  ## 获取模型边界信息
3190
3156
  ### get_boundary_group_names
3191
3157
  获取自边界组名称
@@ -3613,6 +3579,36 @@ from qtmodel import *
3613
3579
  odb.get_buckling_modal_results(mode=1)
3614
3580
  #Returns: 返回json字符串,list[dict]包含该模态下屈曲模态向量列表
3615
3581
  ```
3582
+ ### get_tendon_loss_results
3583
+ 获取预应力钢束损失
3584
+ > 参数:
3585
+ > name: 钢束名称
3586
+ > stage_id: 阶段编号,默认 1
3587
+ ```Python
3588
+ # 示例代码
3589
+ from qtmodel import *
3590
+ odb.get_tendon_loss_results(name="T1", stage_id=2)
3591
+ #Returns:
3592
+ ```
3593
+ ### get_tendon_position_result
3594
+ 获取预应力钢束坐标
3595
+ > 参数:
3596
+ > name: 钢束名称
3597
+ ```Python
3598
+ # 示例代码
3599
+ from qtmodel import *
3600
+ odb.get_tendon_position_result(name="T1")
3601
+ #Returns:
3602
+ ```
3603
+ ### get_tendon_length_result
3604
+ 获取预应力伸长量
3605
+ > 参数:
3606
+ ```Python
3607
+ # 示例代码
3608
+ from qtmodel import *
3609
+ odb.get_tendon_length_result()
3610
+ #Returns:
3611
+ ```
3616
3612
  ## 绘制模型结果
3617
3613
  ### plot_reaction_result
3618
3614
  保存结果图片到指定文件甲
@@ -1,6 +1,6 @@
1
- > 最新版本 V1.1.9 - 2025-09-30
1
+ > 最新版本 V1.1.13 - 2025-11-03
2
2
  > pip install --upgrade qtmodel -i https://pypi.org/simple
3
- - 新增更新结构组接口
3
+ - 增加钢束预应力结果读取
4
4
  # 建模操作
5
5
  ## 节点操作
6
6
  ### add_nodes
@@ -577,7 +577,7 @@ mdb.remove_thickness(name="板厚1")
577
577
  > _布置具体部位(箱型钢梁) 1-上左 2-上中 3-上右 4-左腹板 5-右腹板 6-下左 7-下中 8-下右
578
578
  > loop_segments:线圈坐标集合 list[dict] dict示例:{"main":[(x1,y1),(x2,y2)...],"sub1":[(x1,y1),(x2,y2)...],"sub2":[(x1,y1),(x2,y2)...]}
579
579
  > sec_lines:线宽集合[(x1,y1,x2,y3,thick),]
580
- > secondary_loop_segments:辅材线圈坐标集合 list[dict] (同loop_segments)
580
+ > secondary_loop_segments:辅材线圈坐标集合 list[dict] (同loop_segments),建议以左下角为组合截面原点建立截面
581
581
  > sec_property:截面特性(参考UI界面共计29个参数),可选参数,指定截面特性时不进行截面计算
582
582
  > bias_type:偏心类型 默认中心
583
583
  > center_type:中心类型 默认质心
@@ -1252,7 +1252,7 @@ control_points=[(0,-1,0),(10,-1,0)],point_insert=(1,1,1),track_group="轨迹线
1252
1252
  #Returns: 无
1253
1253
  ```
1254
1254
  ### update_element_component_type
1255
- todo 赋予单元构件类型
1255
+ 赋予单元构件类型
1256
1256
  > 参数:
1257
1257
  > ids: 钢束构件所在单元编号集合且支持XtoYbyN形式字符串
1258
1258
  > component_type:0-钢结构构件 1-钢筋混凝土构件 2-预应力混凝土构件
@@ -1263,7 +1263,7 @@ mdb.update_element_component_type(ids=[1,2,3,4],component_type=2)
1263
1263
  #Returns: 无
1264
1264
  ```
1265
1265
  ### update_tendon_group
1266
- todo 更新钢束组名
1266
+ 更新钢束组名
1267
1267
  > 参数:
1268
1268
  > name:原钢束组名
1269
1269
  > new_name:新钢束组名
@@ -1274,7 +1274,7 @@ mdb.update_tendon_group("钢束组1","钢束组2")
1274
1274
  #Returns: 无
1275
1275
  ```
1276
1276
  ### remove_tendon
1277
- todo 按照名称或编号删除钢束,默认时删除所有钢束
1277
+ 按照名称或编号删除钢束,默认时删除所有钢束
1278
1278
  > 参数:
1279
1279
  > name:钢束名称
1280
1280
  > index:钢束编号
@@ -1287,7 +1287,7 @@ mdb.remove_tendon()
1287
1287
  #Returns: 无
1288
1288
  ```
1289
1289
  ### remove_tendon_property
1290
- todo 按照名称或编号删除钢束组,默认时删除所有钢束组
1290
+ 按照名称或编号删除钢束组,默认时删除所有钢束组
1291
1291
  > 参数:
1292
1292
  > name:钢束组名称
1293
1293
  > index:钢束组编号
@@ -1300,7 +1300,7 @@ mdb.remove_tendon_property()
1300
1300
  #Returns: 无
1301
1301
  ```
1302
1302
  ### remove_pre_stress
1303
- todo 删除预应力
1303
+ 删除预应力
1304
1304
  > 参数:
1305
1305
  > tendon_name:钢束组,默认则删除所有预应力荷载
1306
1306
  ```Python
@@ -1311,7 +1311,7 @@ mdb.remove_pre_stress()
1311
1311
  #Returns: 无
1312
1312
  ```
1313
1313
  ### remove_tendon_group
1314
- todo 按照钢束组名称或钢束组编号删除钢束组,两参数均为默认时删除所有钢束组
1314
+ 按照钢束组名称或钢束组编号删除钢束组,两参数均为默认时删除所有钢束组
1315
1315
  > 参数:
1316
1316
  > name:钢束组名称,默认自动识别 (可选参数)
1317
1317
  ```Python
@@ -2606,7 +2606,7 @@ mdb.update_weight_stage(name="施工阶段1",structure_group_name="默认结构
2606
2606
  #Returns: 无
2607
2607
  ```
2608
2608
  ### update_construction_stage
2609
- todo 更新施工阶段信息
2609
+ 更新施工阶段信息
2610
2610
  > 参数:
2611
2611
  > name:施工阶段信息
2612
2612
  > new_name:新施工阶段名
@@ -2902,57 +2902,6 @@ mdb.update_bulking_setting(do_analysis=True,mode_count=3,variable_cases=["工况
2902
2902
  ```
2903
2903
  # 视图与结果提取
2904
2904
  ## 获取材料
2905
- ### get_concrete_material
2906
- 获取混凝土材料信息
2907
- > 参数:
2908
- > ids: 材料号支持XtoYbyN形式字符串,默认时输出全部材料
2909
- ```Python
2910
- # 示例代码
2911
- from qtmodel import *
2912
- odb.get_concrete_material() # 获取所有材料信息
2913
- #Returns: list[dict]
2914
- ```
2915
- ### get_steel_plate_material
2916
- 获取钢材材料信息
2917
- > 参数:
2918
- > ids: 材料号支持XtoYbyN形式字符串,默认时输出全部材料
2919
- ```Python
2920
- # 示例代码
2921
- from qtmodel import *
2922
- odb.get_steel_plate_material() # 获取所有钢材材料信息
2923
- #Returns: list[dict]
2924
- ```
2925
- ### get_pre_stress_bar_material
2926
- 获取钢材材料信息
2927
- > 参数:
2928
- > ids: 材料号,默认时输出全部材料
2929
- ```Python
2930
- # 示例代码
2931
- from qtmodel import *
2932
- odb.get_pre_stress_bar_material() # 获取所有预应力材料信息
2933
- #Returns: list[dict]
2934
- ```
2935
- ### get_steel_bar_material
2936
- 获取钢筋材料信息
2937
- > 参数:
2938
- > ids: 材料号,默认None时输出全部材料
2939
- ```Python
2940
- # 示例代码
2941
- from qtmodel import *
2942
- odb.get_steel_bar_material() # 获取所有钢筋材料信息
2943
- #Returns: list[dict]
2944
- ```
2945
- ### get_user_define_material
2946
- 获取自定义材料信息
2947
- > 参数:
2948
- > ids: 材料号支持XtoYbyN形式字符串,默认None时输出全部材料
2949
- ```Python
2950
- # 示例代码
2951
- from qtmodel import *
2952
- odb.get_user_define_material() # 获取所有自定义材料信息
2953
- odb.get_user_define_material("1to10") # 获取所有自定义材料信息
2954
- #Returns: list[dict]
2955
- ```
2956
2905
  ### get_material_data
2957
2906
  获取材料信息
2958
2907
  > 参数:
@@ -2968,16 +2917,7 @@ odb.get_material_data() # 获取所有材料信息
2968
2917
  ```Python
2969
2918
  # 示例代码
2970
2919
  from qtmodel import *
2971
- odb.get_thickness_data(1)
2972
- #Returns:
2973
- ```
2974
- ### get_all_thickness_data
2975
- 获取所有板厚信息
2976
- > 参数:
2977
- ```Python
2978
- # 示例代码
2979
- from qtmodel import *
2980
- odb.get_all_thickness_data()
2920
+ odb.get_thickness_data()
2981
2921
  #Returns: 包含信息为list[dict]
2982
2922
  ```
2983
2923
  ## 获取节点信息
@@ -3142,6 +3082,7 @@ odb.get_all_section_data()
3142
3082
  获取截面详细信息,截面特性详见UI自定义特性截面
3143
3083
  > 参数:
3144
3084
  > sec_id: 目标截面编号
3085
+ > position: 目标截面为变截面时0-首端 1-末端
3145
3086
  ```Python
3146
3087
  # 示例代码
3147
3088
  from qtmodel import *
@@ -3167,6 +3108,31 @@ from qtmodel import *
3167
3108
  odb.get_section_ids()
3168
3109
  #Returns: list[int]
3169
3110
  ```
3111
+ ### get_section_property_by_loops
3112
+ 通过多组线圈获取截面特性
3113
+ > 参数:
3114
+ ```Python
3115
+ # 示例代码
3116
+ from qtmodel import *
3117
+ dict_item1 = {"main": [[9.25, 0.0], [18.4, 0.0], [18.5, 0.0], [18.5, 2.5], [9.25, 2.5], [0.0, 2.5], [0.0, 0.0], [0.1, 0.0]],
3118
+ "sub1": [[6.35, 0.5], [2.55, 0.5], [2.55, 1.0], [2.55, 2.0], [6.35, 2.0]],
3119
+ "sub2": [[9.25, 0.5], [11.55, 0.5], [11.55, 2.0], [9.25, 2.0], [6.95, 2.0], [6.95, 0.5]],
3120
+ "sub3": [[12.15, 0.5], [15.95, 0.5], [15.95, 1.0], [15.95, 2.0], [12.15, 2.0]]}
3121
+ odb.get_section_property_by_loops([dict_item1])
3122
+ #Returns: dict
3123
+ ```
3124
+ ### get_section_property_by_lines
3125
+ 通过线宽数据获取截面特性
3126
+ > 参数:
3127
+ ```Python
3128
+ # 示例代码
3129
+ from qtmodel import *
3130
+ sec_lines = [[0.0, 2.284, 5.51093, 2.284, 0.016], [0.152479, 2.284, 0.200597, 2.04341, 0.008],
3131
+ [0.200597, 2.04341, 0.201664, 2.0389, 0.008], [0.201664, 2.0389, 0.203149, 2.03451, 0.008],
3132
+ [0.203149, 2.03451, 0.205006, 2.03026, 0.008]]
3133
+ odb.get_section_property_by_lines(sec_lines)
3134
+ #Returns: dict
3135
+ ```
3170
3136
  ## 获取模型边界信息
3171
3137
  ### get_boundary_group_names
3172
3138
  获取自边界组名称
@@ -3594,6 +3560,36 @@ from qtmodel import *
3594
3560
  odb.get_buckling_modal_results(mode=1)
3595
3561
  #Returns: 返回json字符串,list[dict]包含该模态下屈曲模态向量列表
3596
3562
  ```
3563
+ ### get_tendon_loss_results
3564
+ 获取预应力钢束损失
3565
+ > 参数:
3566
+ > name: 钢束名称
3567
+ > stage_id: 阶段编号,默认 1
3568
+ ```Python
3569
+ # 示例代码
3570
+ from qtmodel import *
3571
+ odb.get_tendon_loss_results(name="T1", stage_id=2)
3572
+ #Returns:
3573
+ ```
3574
+ ### get_tendon_position_result
3575
+ 获取预应力钢束坐标
3576
+ > 参数:
3577
+ > name: 钢束名称
3578
+ ```Python
3579
+ # 示例代码
3580
+ from qtmodel import *
3581
+ odb.get_tendon_position_result(name="T1")
3582
+ #Returns:
3583
+ ```
3584
+ ### get_tendon_length_result
3585
+ 获取预应力伸长量
3586
+ > 参数:
3587
+ ```Python
3588
+ # 示例代码
3589
+ from qtmodel import *
3590
+ odb.get_tendon_length_result()
3591
+ #Returns:
3592
+ ```
3597
3593
  ## 绘制模型结果
3598
3594
  ### plot_reaction_result
3599
3595
  保存结果图片到指定文件甲
@@ -133,7 +133,7 @@ class QtDataHelper:
133
133
  s = QtDataHelper.str_steel_beam(sec_info, rib_info, rib_place)
134
134
  elif sec_type == "特性截面":
135
135
  s = ",".join(f"{x:g}" for x in sec_info) + "\r\n"
136
- elif sec_type == "自定义组合梁":
136
+ elif sec_type.startswith("自定义组合"):
137
137
  s = QtDataHelper.str_custom_compound_beam(mat_combine, loop_segments, secondary_loop_segments)
138
138
  elif sec_type.endswith("组合梁") or sec_type in ("钢管砼", "钢箱砼", "哑铃型钢管混凝土", "哑铃型钢管混凝土竖向"):
139
139
  s = QtDataHelper.str_compound_section(sec_info, mat_combine)
@@ -1,4 +1,6 @@
1
+ import json
1
2
  import math
3
+ from typing import Union
2
4
 
3
5
 
4
6
  class NodeDisplacement:
@@ -653,3 +655,103 @@ class ElasticBucklingResult:
653
655
 
654
656
  def __repr__(self):
655
657
  return self.__str__()
658
+
659
+
660
+ class TendonLossResult:
661
+ """
662
+ 预应力钢筋损失(简化)
663
+ 对应 C# PreStressBarLoss:
664
+ - BarId → bar_id
665
+ - BeamId → beam_id
666
+ - BeamEndMark → position
667
+ - EffectiveStress → effective_s
668
+ - InstantaneousLoss → instance_s
669
+ - ExceptInstantaneous → except_s
670
+ - Effective/Instantaneous Ratio → ratio
671
+ """
672
+
673
+ def __init__(
674
+ self,
675
+ tendon_name: str,
676
+ beam_id: int,
677
+ position: Union[str, int],
678
+ eff_s: float,
679
+ inst_s: float,
680
+ except_s: float
681
+ ):
682
+ self.tendon_name = tendon_name
683
+ self.beam_id = beam_id
684
+ self.position = position # 例如: 'I'/'J' 或 1/2
685
+ self.effective_s = float(eff_s) # 考虑所有损失后的应力
686
+ self.instance_s = float(inst_s) # 排除瞬时损失后的应力(你的 C# 字段名语义如此)
687
+ self.except_s = float(except_s) # 弹性变形/收缩徐变/松弛 的合计损失(排除瞬时)
688
+
689
+ # 对应 C# 的 EffectiveToInstantaneousLossRatio
690
+ self.ratio = (self.effective_s / self.instance_s) if abs(self.instance_s) > 0.0 else 0.0
691
+
692
+ def to_dict(self):
693
+ return {
694
+ "tendon_name": self.tendon_name,
695
+ "beam_id": self.beam_id,
696
+ "position": self.position,
697
+ "effective_s": self.effective_s,
698
+ "instance_s": self.instance_s,
699
+ "except_s": self.except_s,
700
+ "ratio": self.ratio,
701
+ }
702
+
703
+ def __str__(self):
704
+ # 保持可读输出,同时兼容中文
705
+ return json.dumps(self.to_dict(), ensure_ascii=False)
706
+
707
+ def __repr__(self):
708
+ # 与 __str__ 一致,便于调试打印
709
+ return self.__str__()
710
+
711
+
712
+ class TendonLengthResult:
713
+ """
714
+ 预应力伸长量结果
715
+ """
716
+ def __init__(
717
+ self,
718
+ tendon_name: str,
719
+ start_stage: int,
720
+ stress_length: float,
721
+ un_stress_length: float,
722
+ effect_stress_i: float,
723
+ effect_stress_j: float,
724
+ elongation_i: float,
725
+ elongation_j: float,
726
+ elongation: float
727
+ ):
728
+ self.tendon_name = tendon_name
729
+ self.start_stage = start_stage
730
+ self.stress_length = stress_length
731
+ self.un_stress_length = un_stress_length
732
+ self.effect_stress_i = effect_stress_i
733
+ self.effect_stress_j = effect_stress_j
734
+ self.elongation_i = elongation_i
735
+ self.elongation_j = elongation_j
736
+ self.elongation = elongation
737
+
738
+ def to_dict(self):
739
+ return {
740
+ "tendon_name": self.tendon_name,
741
+ "start_stage": self.start_stage,
742
+ "stress_length": self.stress_length,
743
+ "un_stress_length": self.un_stress_length,
744
+ "effect_stress_i": self.effect_stress_i,
745
+ "effect_stress_j": self.effect_stress_j,
746
+ "elongation_i": self.elongation_i,
747
+ "elongation_j": self.elongation_j,
748
+ "elongation": self.elongation,
749
+ }
750
+
751
+ def __str__(self):
752
+ # 保持可读输出,同时兼容中文
753
+ return json.dumps(self.to_dict(), ensure_ascii=False)
754
+
755
+ def __repr__(self):
756
+ # 与 __str__ 一致,便于调试打印
757
+ return self.__str__()
@@ -14,6 +14,7 @@ from .mdb_temperature_load import MdbTemperatureLoad
14
14
  from .mdb_tendon import MdbTendon
15
15
  from .mdb_load import MdbLoad
16
16
 
17
+ # version 1.1.11
17
18
 
18
19
  class Mdb(MdbProject, MdbStructure,MdbProperty, MdbSection,
19
20
  MdbBoundary, MdbDynamicLoad,MdbConstructionStage,
@@ -29,7 +29,7 @@ class MdbAnalysisSetting:
29
29
  Returns: 无
30
30
  """
31
31
  try:
32
- s = "*PRJ-SET\r\n" + f"{gravity},{temperature}\r\n"
32
+ s = "*PJT-SET\r\n" + f"{gravity},{temperature}\r\n"
33
33
  # 映射 参数 -> KEY 名
34
34
  mapping = {
35
35
  "PROJECT": project,
@@ -48,19 +48,19 @@ class MdbConstructionStage:
48
48
  """
49
49
  s = "*STAGE\r\n"
50
50
  s += f"ID={index},{name},{duration},{tendon_cancel_loss:g},{constraint_cancel_type}\r\n"
51
- if active_structures is not None:
51
+ if active_structures is not None and len(active_structures) > 0:
52
52
  s += f"AELEM={','.join(','.join(str(x) if not isinstance(x, (int, float)) else f'{x:g}' for x in row) for row in active_structures)}\r\n"
53
- if delete_structures is not None:
53
+ if delete_structures is not None and len(delete_structures) > 0:
54
54
  s += f"DELEM={','.join(map(str, delete_structures))}\r\n"
55
- if active_boundaries is not None:
55
+ if active_boundaries is not None and len(active_boundaries) > 0:
56
56
  s += f"ABNDR={','.join(','.join(map(str, row)) for row in active_boundaries)}\r\n"
57
- if delete_boundaries is not None:
57
+ if delete_boundaries is not None and len(delete_boundaries) > 0:
58
58
  s += f"DBNDR={','.join(map(str, delete_boundaries))}\r\n"
59
- if active_loads is not None:
59
+ if active_loads is not None and len(active_loads) > 0:
60
60
  s += f"ALOAD={','.join(','.join(map(str, row)) for row in active_loads)}\r\n"
61
- if delete_loads is not None:
61
+ if delete_loads is not None and len(delete_loads) > 0:
62
62
  s += f"DLOAD={','.join(','.join(map(str, row)) for row in delete_loads)}\r\n"
63
- if temp_loads is not None:
63
+ if temp_loads is not None and len(temp_loads) > 0:
64
64
  s += f"TEPLOAD={','.join(map(str, temp_loads))}\r\n"
65
65
  QtServer.send_command(s, "QDAT")
66
66
 
@@ -101,7 +101,7 @@ class MdbConstructionStage:
101
101
  tendon_cancel_loss: float = 0,
102
102
  constraint_cancel_type: int = 2):
103
103
  """
104
- todo 更新施工阶段信息
104
+ 更新施工阶段信息
105
105
  Args:
106
106
  name:施工阶段信息
107
107
  new_name:新施工阶段名
@@ -201,7 +201,6 @@ class MdbLiveLoad:
201
201
  else:
202
202
  s += f"YES,{special_code}\r\n"
203
203
  s += "\r\n".join((f"{veh_name},{coeff:g}," + ",".join(lanes)) for veh_name, coeff, lanes in sub_case)
204
- # print(s)
205
204
  QtServer.send_command(s, "QDAT")
206
205
  except Exception as ex:
207
206
  raise Exception(ex)