qtmodel 2.9.2__tar.gz → 2.9.3__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.
Files changed (89) hide show
  1. {qtmodel-2.9.2/src/qtmodel.egg-info → qtmodel-2.9.3}/PKG-INFO +1176 -329
  2. qtmodel-2.9.2/docs/api-reference.md → qtmodel-2.9.3/README.md +2011 -1679
  3. qtmodel-2.9.2/README.md → qtmodel-2.9.3/docs/api-reference.md +2784 -1388
  4. {qtmodel-2.9.2 → qtmodel-2.9.3}/pyproject.toml +1 -1
  5. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/cdb/cdb_concrete_check.py +61 -44
  6. qtmodel-2.9.3/src/qtmodel/core/api_contract.py +27 -0
  7. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/api_help.py +45 -35
  8. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/qt_server.py +45 -6
  9. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/__init__.py +9 -5
  10. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_boundary.py +106 -63
  11. qtmodel-2.9.3/src/qtmodel/mdb/mdb_effective_width.py +247 -0
  12. qtmodel-2.9.3/src/qtmodel/mdb/mdb_element_factor.py +286 -0
  13. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_model_load.py +33 -0
  14. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_model_material.py +19 -0
  15. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_model_structure.py +35 -4
  16. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_structure.py +137 -21
  17. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_tendon.py +4 -3
  18. qtmodel-2.9.3/src/qtmodel/odb/odb_result_plot.py +691 -0
  19. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/odb/odb_view.py +18 -9
  20. {qtmodel-2.9.2 → qtmodel-2.9.3/src/qtmodel.egg-info}/PKG-INFO +1176 -329
  21. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel.egg-info/SOURCES.txt +3 -0
  22. qtmodel-2.9.2/src/qtmodel/odb/odb_result_plot.py +0 -644
  23. {qtmodel-2.9.2 → qtmodel-2.9.3}/MANIFEST.in +0 -0
  24. {qtmodel-2.9.2 → qtmodel-2.9.3}/docs/mdb-odb-query-migration.md +0 -0
  25. {qtmodel-2.9.2 → qtmodel-2.9.3}/docs/mdb-transversal-analysis.md +0 -0
  26. {qtmodel-2.9.2 → qtmodel-2.9.3}/docs/section-shape.md +0 -0
  27. {qtmodel-2.9.2 → qtmodel-2.9.3}/setup.cfg +0 -0
  28. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/__init__.py +0 -0
  29. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/bridge.py +0 -0
  30. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/cdb/__init__.py +0 -0
  31. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/cdb/cdb_reinforcement_operations.py +0 -0
  32. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/cdb/cdb_steel_box_check.py +0 -0
  33. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/cdb/cdb_steel_truss_check.py +0 -0
  34. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/__init__.py +0 -0
  35. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/boundary_db.py +0 -0
  36. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/concrete_check_db.py +0 -0
  37. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/construction_stage_db.py +0 -0
  38. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/data_helper.py +0 -0
  39. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/dynamic_load_db.py +0 -0
  40. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/live_load_db.py +0 -0
  41. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/material_db.py +0 -0
  42. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/model_data.py +0 -0
  43. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/model_db.py +0 -0
  44. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/mutation_validation.py +0 -0
  45. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/result_db.py +0 -0
  46. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/section_component_db.py +0 -0
  47. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/section_db.py +0 -0
  48. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/section_geometry.py +0 -0
  49. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/section_property_solver.py +0 -0
  50. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/section_shape.py +0 -0
  51. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/static_load_db.py +0 -0
  52. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/structure_db.py +0 -0
  53. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/temperature_load_db.py +0 -0
  54. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/core/tendon_db.py +0 -0
  55. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_analysis_setting.py +0 -0
  56. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_construction_stage.py +0 -0
  57. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_dynamic_load.py +0 -0
  58. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_international_live_load.py +0 -0
  59. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_live_load.py +0 -0
  60. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_live_load_update.py +0 -0
  61. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_load.py +0 -0
  62. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_model_boundary.py +0 -0
  63. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_model_delete.py +0 -0
  64. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_model_overview.py +0 -0
  65. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_model_section.py +0 -0
  66. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_model_section_mcp.py +0 -0
  67. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_model_stage.py +0 -0
  68. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_planned_lane.py +0 -0
  69. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_project.py +0 -0
  70. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_property.py +0 -0
  71. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_section.py +0 -0
  72. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_sink_load.py +0 -0
  73. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_static_load.py +0 -0
  74. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_strengthen.py +0 -0
  75. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_temperature_load.py +0 -0
  76. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/mdb/mdb_transversal_analysis.py +0 -0
  77. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/odb/__init__.py +0 -0
  78. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/odb/odb_model_boundary.py +0 -0
  79. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/odb/odb_model_load.py +0 -0
  80. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/odb/odb_model_material.py +0 -0
  81. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/odb/odb_model_overview.py +0 -0
  82. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/odb/odb_model_section.py +0 -0
  83. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/odb/odb_model_section_mcp.py +0 -0
  84. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/odb/odb_model_stage.py +0 -0
  85. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/odb/odb_model_structure.py +0 -0
  86. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel/odb/odb_result_data.py +0 -0
  87. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel.egg-info/dependency_links.txt +0 -0
  88. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel.egg-info/requires.txt +0 -0
  89. {qtmodel-2.9.2 → qtmodel-2.9.3}/src/qtmodel.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: qtmodel
3
- Version: 2.9.2
3
+ Version: 2.9.3
4
4
  Summary: Python API and local engineering utilities for Qiaotong bridge software
5
5
  Author: Qiaotong
6
6
  Keywords: bridge,finite-element,qiaotong,engineering
@@ -19,7 +19,7 @@ Requires-Dist: psutil>=5.9
19
19
  `qtmodel` 是桥通软件的 Python API 包,提供有限元模型创建与修改、模型查询、
20
20
  求解结果读取、结构检算,以及不依赖桥通进程的截面几何和截面特性计算。
21
21
 
22
- > 当前版本:`2.9.2` · Python:`3.10+` · 文档生成日期:`2026-09-22`
22
+ > 当前版本:`2.9.3` · Python:`3.10+` · 文档生成日期:`2026-10-13`
23
23
  > 本文件由 `tools/create_readme.py` 从源码签名和 docstring 自动生成,请勿手工维护函数清单。
24
24
 
25
25
  ## 安装
@@ -40,16 +40,17 @@ print(QtServer.get_connection_status())
40
40
  - `odb`:读取分析结果并控制结果绘图和视图;
41
41
  - 2.x 仍保留部分 `odb` 模型查询兼容入口,新代码应统一改用 `mdb`;
42
42
  - `cdb`:调用结构检算接口;
43
+ - 历史 SDK 中仍存在的 17 个未开放命令会在连接前返回 `API_NOT_OPEN`;方法存在不代表当前桌面服务端已开放。
43
44
  - 迁移说明:[`ODB` 模型查询迁移到 `MDB`](https://gitee.com/jack0443/qtmodel-release/blob/master/packages/qtmodel/docs/mdb-odb-query-migration.md)。
44
45
 
45
46
  ## API 数量
46
47
 
47
48
  | 命名空间 | 公开方法数 |
48
49
  | --- | ---: |
49
- | `mdb` | 423 |
50
+ | `mdb` | 446 |
50
51
  | `odb` | 40 |
51
- | `cdb` | 126 |
52
- | **合计** | **589** |
52
+ | `cdb` | 127 |
53
+ | **合计** | **613** |
53
54
 
54
55
  Core 类与 `bridge` 门面的 API 未在本页展开,完整参考见:
55
56
  [`docs/api-reference.md`](https://gitee.com/jack0443/qtmodel-release/blob/master/packages/qtmodel/docs/api-reference.md)。
@@ -783,14 +784,14 @@ mdb.add_general_elastic_support_property(name = "特性1", data_matrix=[i for i
783
784
  mdb.add_general_elastic_support(node_id=None, property_name: str='', group_name: str='默认边界组', index: int=-1)
784
785
  ```
785
786
 
786
- 添加一般弹性支承特性
787
+ 添加一般弹性支承;相同边界组和节点时覆盖已有支承。
787
788
 
788
789
  #### 参数
789
790
 
790
- > node_id: 节点号,支持整数或整数型列表且支持XtoYbyN形式字符串
791
+ > node_id: 节点号,支持整数、整数列表和XtoYbyN形式字符串;重复节点只处理一次
791
792
  > property_name: 一般弹性支承特性名
792
793
  > group_name: 一般弹性支承边界组名
793
- > index: 起始对象编号,-1 表示自动分配
794
+ > index: 起始对象编号,-1 表示覆盖时保留原编号、新增时自动分配
794
795
 
795
796
  #### 示例
796
797
 
@@ -808,20 +809,21 @@ mdb.add_general_elastic_support(node_id=1, property_name = "特性1",group_name=
808
809
  源码:`qtmodel/mdb/mdb_boundary.py` · `MdbBoundary.add_general_support`
809
810
 
810
811
  ```python
811
- mdb.add_general_support(node_id: Union[int, str, list[int]]=1, boundary_info: Union[list[bool], list[int]]=None, group_name: str='默认边界组', index: int=-1, coordinate=None, extra_enabled=None, extra_parameters=None)
812
+ mdb.add_general_support(node_id: Union[int, str, list[int]]=1, boundary_info: Optional[Union[list[bool], list[int]]]=None, group_name: str='默认边界组', index: int=-1, coordinate: Optional[int]=None, extra_enabled: Optional[bool]=None, extra_parameters: Optional[list[float]]=None)
812
813
  ```
813
814
 
814
- 添加一般支承
815
+ 添加一般支承;相同边界组和节点时覆盖已有支承。
815
816
 
816
817
  #### 参数
817
818
 
818
- > node_id: 节点编号,支持整数或整数型列表且支持XtoYbyN形式字符串
819
+ > node_id: 节点编号,支持整数、整数列表和XtoYbyN形式字符串;重复节点只处理一次
819
820
  > boundary_info: 边界信息 [X,Y,Z,Rx,Ry,Rz] True-固定 False-自由,也可传数值列表(0-自由 1-固定)
820
821
  > group_name: 边界组名,默认为默认边界组
821
- > index: 对象编号,-1 表示自动分配
822
- > coordinate: 0整体坐标系、1节点坐标系;省略使用默认值
823
- > extra_enabled: 是否启用支座附加参数
824
- > extra_parameters: 静摩擦、动摩擦、Dx/Dy/Dz/Rx/Ry/Rz,共8项
822
+ > index: 对象编号,-1 表示覆盖时保留原编号、新增时自动分配
823
+ > coordinate: 0整体坐标系、1节点坐标系;覆盖时省略则保留原设置。
824
+ > extra_enabled: 是否启用支座附加参数;省略时,提供 extra_parameters 会自动启用,
825
+ > 否则覆盖保留原设置;False 会清空附加参数。
826
+ > extra_parameters: 按静摩擦、动摩擦、Dx、Dy、Dz、Rx、Ry、Rz 排列的8个有限数值。
825
827
 
826
828
  #### 示例
827
829
 
@@ -841,22 +843,39 @@ mdb.add_general_support(node_id="1to100", boundary_info=[1,1,1,0,0,0])
841
843
  源码:`qtmodel/mdb/mdb_boundary.py` · `MdbBoundary.add_elastic_support`
842
844
 
843
845
  ```python
844
- mdb.add_elastic_support(node_id, support_type: int=1, boundary_info=None, group_name: str='默认边界组', index: int=-1, coordinate=None, extra_enabled=None, extra_parameters=None, axis_direction=None)
846
+ mdb.add_elastic_support(node_id: Union[int, str, list[int]], support_type: int=1, boundary_info: Optional[list[float]]=None, group_name: str='默认边界组', index: int=-1, coordinate: Optional[int]=None, extra_enabled: Optional[bool]=None, extra_parameters: Optional[list[float]]=None, axis_direction: Optional[int]=None)
845
847
  ```
846
848
 
847
- 添加弹性支承;相同组和节点由 API 覆盖,自动编号时保留已有编号。
849
+ 添加弹性支承;相同边界组和节点时覆盖已有支承。
850
+
851
+ #### 参数
848
852
 
849
- 线性刚度为6项;单向刚度为[方向(1/2/3),刚度]。
850
- 省略坐标系和附加参数时,覆盖保留原值、新增使用默认值。
851
- axis_direction: 0/1=正/负X,2/3=正/负Y,4/5=正/负Z,仅用于单向支承。
853
+ > node_id: 节点编号,支持整数、整数列表和XtoYbyN形式字符串;重复节点只处理一次。
854
+ > support_type: 1线性支承、2只受拉、3只受压。
855
+ > boundary_info: 线性支承传[Kx,Ky,Kz,Krx,Kry,Krz];单向支承传[轴向,刚度],
856
+ > 轴向为1=X、2=Y、3=Z,刚度须大于0。
857
+ > group_name: 边界组名,默认使用“默认边界组”。
858
+ > index: 起始对象编号;-1表示覆盖时保留原编号、新增时自动分配。
859
+ > coordinate: 0整体坐标系、1节点坐标系;覆盖时省略则保留原设置。
860
+ > extra_enabled: 是否启用支座附加参数;省略时,提供 extra_parameters 会自动启用,
861
+ > 否则覆盖保留原设置;False 会清空附加参数。
862
+ > extra_parameters: 按静摩擦、动摩擦、Dx、Dy、Dz、Rx、Ry、Rz 排列的8个有限数值。
863
+ > axis_direction: 单向支承的正负方向,0/1=正/负X、2/3=正/负Y、4/5=正/负Z;
864
+ > 须与 boundary_info 的轴向一致,线性支承不使用。
852
865
 
853
866
  #### 示例
854
867
 
855
868
  ```python
856
869
  from qtmodel import mdb
857
- result = mdb.add_elastic_support(node_id=...)
870
+ mdb.add_elastic_support(node_id=1, support_type=1,
871
+ boundary_info=[1e6,1e6,1e6,0,0,0],
872
+ extra_parameters=[0.2,0.1,0,0,0,0,0,0])
858
873
  ```
859
874
 
875
+ #### 返回
876
+
877
+ > 服务端返回的执行结果。
878
+
860
879
  ### `mdb.add_elastic_link`
861
880
 
862
881
  源码:`qtmodel/mdb/mdb_boundary.py` · `MdbBoundary.add_elastic_link`
@@ -1045,7 +1064,7 @@ mdb.add_node_axis(input_type=3,node_id=1,coord_info=[[0,0,1],[0,1,0]])
1045
1064
  源码:`qtmodel/mdb/mdb_boundary.py` · `MdbBoundary.update_general_support`
1046
1065
 
1047
1066
  ```python
1048
- mdb.update_general_support(index: int, node_id: int, boundary_info: list[bool], group_name: str='默认边界组', new_id: int=-1, new_group_name: str='', coordinate: int=None, extra_enabled: bool=None, extra_parameters: list[float]=None)
1067
+ mdb.update_general_support(index: int, node_id: int, boundary_info: list[bool], group_name: str='默认边界组', new_id: int=-1, new_group_name: str='', coordinate: Optional[int]=None, extra_enabled: Optional[bool]=None, extra_parameters: Optional[list[float]]=None)
1049
1068
  ```
1050
1069
 
1051
1070
  编辑一般支承;新组须已存在,省略坐标系和附加参数时保留原值。
@@ -1059,9 +1078,9 @@ mdb.update_general_support(index: int, node_id: int, boundary_info: list[bool],
1059
1078
  > new_id: 修改后的编号,-1 表示保留原编号
1060
1079
  > new_group_name: 修改后的边界组名称,空字符串表示保留原组
1061
1080
  > coordinate: 0=整体坐标系,1=节点坐标系。
1062
- > extra_enabled: 是否启用附加参数,None 保留原设置,False 清空附加参数
1081
+ > extra_enabled: 是否启用附加参数;省略时,提供 extra_parameters 会自动启用,
1082
+ > 否则保留原设置;False 会清空附加参数。
1063
1083
  > extra_parameters: 静摩擦、动摩擦、Dx、Dy、Dz、Rx、Ry、Rz,共8项。
1064
- > extra_enabled=False 清空附加参数;new_id=-1 保留编号。
1065
1084
 
1066
1085
  #### 示例
1067
1086
 
@@ -1079,21 +1098,39 @@ mdb.update_general_support(index=1, node_id=1, boundary_info=[True] * 6)
1079
1098
  源码:`qtmodel/mdb/mdb_boundary.py` · `MdbBoundary.update_elastic_support`
1080
1099
 
1081
1100
  ```python
1082
- mdb.update_elastic_support(index: int, node_id: int, support_type: int, boundary_info, group_name: str='默认边界组', new_id: int=-1, new_group_name: str='', coordinate=None, extra_enabled=None, extra_parameters=None, axis_direction=None)
1101
+ mdb.update_elastic_support(index: int, node_id: int, support_type: int, boundary_info: list[float], group_name: str='默认边界组', new_id: int=-1, new_group_name: str='', coordinate: Optional[int]=None, extra_enabled: Optional[bool]=None, extra_parameters: Optional[list[float]]=None, axis_direction: Optional[int]=None)
1083
1102
  ```
1084
1103
 
1085
- 编辑弹性支承并可迁移节点/分组;省略可选属性时保留原值。
1104
+ 编辑弹性支承并可迁移节点或边界组。
1086
1105
 
1087
- coordinate: 0整体/1节点;extra_parameters: 静摩擦、动摩擦、Dx/Dy/Dz/Rx/Ry/Rz。
1088
- extra_enabled=False 清空附加参数;axis_direction为0至5的正负X/Y/Z方向。
1106
+ #### 参数
1107
+
1108
+ > index: 已有弹性支承编号。
1109
+ > node_id: 修改后的节点编号。
1110
+ > support_type: 1线性支承、2只受拉、3只受压。
1111
+ > boundary_info: 线性支承传[Kx,Ky,Kz,Krx,Kry,Krz];单向支承传[轴向,刚度]。
1112
+ > group_name: 原边界组名。
1113
+ > new_id: 修改后的编号,-1表示保留原编号。
1114
+ > new_group_name: 新边界组名,空字符串表示保留原组。
1115
+ > coordinate: 0整体坐标系、1节点坐标系;省略则保留原设置。
1116
+ > extra_enabled: 是否启用附加参数;省略时,提供 extra_parameters 会自动启用,
1117
+ > 否则保留原设置;False 会清空附加参数。
1118
+ > extra_parameters: 按静摩擦、动摩擦、Dx、Dy、Dz、Rx、Ry、Rz 排列的8个有限数值。
1119
+ > axis_direction: 单向支承的正负方向,0/1=正/负X、2/3=正/负Y、4/5=正/负Z。
1089
1120
 
1090
1121
  #### 示例
1091
1122
 
1092
1123
  ```python
1093
1124
  from qtmodel import mdb
1094
- result = mdb.update_elastic_support(index=..., node_id=..., support_type=..., boundary_info=...)
1125
+ mdb.update_elastic_support(index=7, node_id=8, support_type=1,
1126
+ boundary_info=[1e6,1e6,1e6,0,0,0],
1127
+ extra_parameters=[0.2,0.1,0,0,0,0,0,0])
1095
1128
  ```
1096
1129
 
1130
+ #### 返回
1131
+
1132
+ > 服务端返回的执行结果。
1133
+
1097
1134
  ### `mdb.update_elastic_link`
1098
1135
 
1099
1136
  源码:`qtmodel/mdb/mdb_boundary.py` · `MdbBoundary.update_elastic_link`
@@ -2964,6 +3001,514 @@ mdb.remove_spectrum_function(name="工况名")
2964
3001
 
2965
3002
  > 无
2966
3003
 
3004
+ ## `mdb_effective_width`
3005
+
3006
+ ### `mdb.get_flange_width_lines`
3007
+
3008
+ 源码:`qtmodel/mdb/mdb_effective_width.py` · `MdbEffectiveWidth.get_flange_width_lines`
3009
+
3010
+ ```python
3011
+ mdb.get_flange_width_lines(section_id: int, position: int=0)
3012
+ ```
3013
+
3014
+ 查询自定义翼缘定义使用的截面线段编号及几何数据,不修改模型。
3015
+
3016
+ #### 参数
3017
+
3018
+ > section_id: 已存在的截面编号,支持自定义线圈、线宽及组合梁截面。
3019
+ > position: 0 I端、1 J端;变截面分别查询两端,等截面两者相同。
3020
+ > 返回 line_id 与翼缘定义 UI 的线段编号一致,从 1 开始。
3021
+
3022
+ #### 示例
3023
+
3024
+ ```python
3025
+ from qtmodel import mdb
3026
+ lines = mdb.get_flange_width_lines(section_id=10, position=0)
3027
+ ```
3028
+
3029
+ #### 返回
3030
+
3031
+ > list[dict]: 每行包含 line_id、start=[x,y]、end=[x,y]、thickness,尺寸单位 m。
3032
+ > 截面坐标为 UI 截面平面的 x、y 坐标,不是模型的全局节点坐标。
3033
+
3034
+ ### `mdb.set_flange_width`
3035
+
3036
+ 源码:`qtmodel/mdb/mdb_effective_width.py` · `MdbEffectiveWidth.set_flange_width`
3037
+
3038
+ ```python
3039
+ mdb.set_flange_width(section_id: int, top_line_ids: list[int], web_lines: list[dict], bottom_line_ids: Optional[list[int]]=None, top_ribs: Optional[list[dict]]=None, bottom_ribs: Optional[list[dict]]=None, b0: float=0.0, top_name: str='顶缘', bottom_name: str='底缘', end_j: Optional[dict]=None)
3040
+ ```
3041
+
3042
+ 添加或覆盖自定义截面的翼缘宽度定义,默认覆盖同一截面的已有定义。
3043
+
3044
+ #### 参数
3045
+
3046
+ > section_id: 自定义截面编号。参数化截面自动识别翼缘,不接受手工定义。
3047
+ > top_line_ids: 顶缘线段编号,不能为空;用 get_flange_width_lines 查询编号。
3048
+ > web_lines: 腹板定义列表,每项为字典:name 名称、direction 方向、
3049
+ > left_ids 左侧线段编号、right_ids 右侧线段编号。
3050
+ > direction 为 0 竖直、1 沿腹板斜率;默认 0。left_ids 必须非空,
3051
+ > 混凝土/组合梁还须提供非空 right_ids;钢梁省略 right_ids 时沿用 left_ids。
3052
+ > 同一列表中 name 不得重复,省略时自动生成名称。
3053
+ > bottom_line_ids: 底缘线段编号,默认 None 表示没有底缘。
3054
+ > top_ribs: 钢梁上翼缘加劲肋,字典格式与 web_lines 相同;默认 None 表示无。
3055
+ > 加劲肋必须指定 left_ids,省略 right_ids 时沿用 left_ids;混凝土/组合梁不接受此参数。
3056
+ > bottom_ribs: 钢梁下翼缘加劲肋,格式同 top_ribs;默认 None 表示无。
3057
+ > b0: 翼缘定义中的剪力连接件距离,单位 m,默认 0;非负有限数。
3058
+ > 钢梁固定为 0;有效宽度计算使用 calculate_effective_width 的 b0 参数。
3059
+ > top_name: 顶缘线名称,默认 "顶缘"。
3060
+ > bottom_name: 底缘线名称,默认 "底缘"。
3061
+ > end_j: 变截面 J端定义,包含 top_line_ids、web_lines 及上述可选字段,
3062
+ > 尺寸单位 m;默认 None 在 J端采用 I端的线号和设置,并重新计算宽度。
3063
+ > 等截面禁止单独指定 end_j;两端线号均须在对应截面中存在。
3064
+
3065
+ #### 示例
3066
+
3067
+ ```python
3068
+ from qtmodel import mdb
3069
+ mdb.set_flange_width(section_id=10, top_line_ids=[1], bottom_line_ids=[3],
3070
+ web_lines=[{"name": "腹板1", "left_ids": [2], "right_ids": [4]}])
3071
+ mdb.update_model()
3072
+ ```
3073
+
3074
+ #### 返回
3075
+
3076
+ > dict: section_id 为完成设置的截面编号。定义无效时不覆盖原数据。
3077
+
3078
+ ### `mdb.get_flange_width`
3079
+
3080
+ 源码:`qtmodel/mdb/mdb_effective_width.py` · `MdbEffectiveWidth.get_flange_width`
3081
+
3082
+ ```python
3083
+ mdb.get_flange_width(section_ids: Optional[Union[int, str, list[int]]]=None)
3084
+ ```
3085
+
3086
+ 查询已保存的自定义截面翼缘定义,不修改模型。
3087
+
3088
+ #### 参数
3089
+
3090
+ > section_ids: 截面编号,支持单个编号、列表及 "1to10" 字符串。
3091
+ > 默认 None 返回全部定义,空列表返回空结果,未定义的截面不返回记录。
3092
+
3093
+ #### 示例
3094
+
3095
+ ```python
3096
+ from qtmodel import mdb
3097
+ definitions = mdb.get_flange_width(section_ids=None)
3098
+ for definition in definitions:
3099
+ mdb.set_flange_width(**definition)
3100
+ ```
3101
+
3102
+ #### 返回
3103
+
3104
+ > list[dict]: 每项与 set_flange_width 的参数对应,可直接回写;b0 单位 m。
3105
+
3106
+ ### `mdb.remove_flange_width`
3107
+
3108
+ 源码:`qtmodel/mdb/mdb_effective_width.py` · `MdbEffectiveWidth.remove_flange_width`
3109
+
3110
+ ```python
3111
+ mdb.remove_flange_width(section_ids: Union[int, str, list[int]])
3112
+ ```
3113
+
3114
+ 删除指定截面的翼缘定义,保留截面和已计算的有效宽度系数。
3115
+
3116
+ #### 参数
3117
+
3118
+ > section_ids: 明确指定的截面编号,支持单个编号、列表及 "1to10" 字符串。
3119
+ > 空列表不删除任何内容;不允许 None,未定义的截面会跳过。
3120
+
3121
+ #### 示例
3122
+
3123
+ ```python
3124
+ from qtmodel import mdb
3125
+ mdb.remove_flange_width(section_ids=[10, 11])
3126
+ mdb.update_model()
3127
+ ```
3128
+
3129
+ #### 返回
3130
+
3131
+ > str: 服务端执行确认信息。
3132
+
3133
+ ### `mdb.get_effective_width_spans`
3134
+
3135
+ 源码:`qtmodel/mdb/mdb_effective_width.py` · `MdbEffectiveWidth.get_effective_width_spans`
3136
+
3137
+ ```python
3138
+ mdb.get_effective_width_spans()
3139
+ ```
3140
+
3141
+ 查询有效宽度计算可选的已定义跨度信息。
3142
+
3143
+ #### 参数
3144
+
3145
+ > 无参数。
3146
+
3147
+ #### 示例
3148
+
3149
+ ```python
3150
+ from qtmodel import mdb
3151
+ spans = mdb.get_effective_width_spans()
3152
+ ```
3153
+
3154
+ #### 返回
3155
+
3156
+ > list[dict]: 每项包含 span_id、name、element_ids、support_node_ids。
3157
+ > span_id 用于 calculate_effective_width;未定义跨度时返回空列表。
3158
+
3159
+ ### `mdb.calculate_effective_width`
3160
+
3161
+ 源码:`qtmodel/mdb/mdb_effective_width.py` · `MdbEffectiveWidth.calculate_effective_width`
3162
+
3163
+ ```python
3164
+ mdb.calculate_effective_width(span_id: int, code: int=0, b0: float=0.0, rib_type: int=0, top_k: Optional[list[float]]=None, bottom_k: Optional[list[float]]=None, group_name: str='')
3165
+ ```
3166
+
3167
+ 按已定义跨度计算有效宽度,并生成或覆盖边界组中的有效宽度系数。
3168
+
3169
+ #### 参数
3170
+
3171
+ > span_id: get_effective_width_spans 返回的跨度编号,必须已存在。
3172
+ > 跨度须含连续杆系单元及支承节点,自定义截面须先设置翼缘定义。
3173
+ > code: 0 公路混凝土(JTG 3362-2018),1 铁路混凝土(TB 10092-2017),
3174
+ > 2 公路钢混组合梁(JTG/T D64-01-2015),3 铁路结合梁(TB 10024-2025),
3175
+ > 4 公路钢梁(JTG D64-2015)。默认 0,调用与 UI 相同的计算器。
3176
+ > b0: 仅 code=2、3 使用,单位 m;公路为剪力连接件距离,铁路为承托总宽度。
3177
+ > 默认 0,为非负有限数;其他 code 须为 0。
3178
+ > rib_type: 仅 code=4 使用,0 刚性加劲肋、1 柔性加劲肋,默认 0。
3179
+ > top_k: 钢梁顶缘各母板段的弹性屈曲系数,按 UI 从左到右顺序排列,
3180
+ > 各项须为正有限数,数量须与两端截面的顶缘分段数一致;code=4 必填。
3181
+ > bottom_k: 钢梁底缘各母板段的弹性屈曲系数,要求同 top_k;code=4 必填,
3182
+ > 没有底缘时传 [];其他 code 的 top_k、bottom_k 必须为 None。
3183
+ > group_name: 默认空字符串,混凝土/组合梁生成 "跨度名_EW边界组";
3184
+ > 非空时直接用作边界组名。钢梁生成三组:"前缀_EW上下局部稳定"、
3185
+ > "前缀_EW剪力滞和上部局稳"、"前缀_EW剪力滞和下部局稳",
3186
+ > 前缀为 group_name 或跨度名。同名组只覆盖有效宽度系数,保留其他边界。
3187
+ > 日志只输出本次计算语句;计算或写入失败时撤销本次新增命令。
3188
+
3189
+ #### 示例
3190
+
3191
+ ```python
3192
+ from qtmodel import mdb
3193
+ result = mdb.calculate_effective_width(span_id=1, code=0)
3194
+ steel = mdb.calculate_effective_width(span_id=2, code=4, top_k=[4, 4], bottom_k=[4])
3195
+ mdb.update_model()
3196
+ ```
3197
+
3198
+ #### 返回
3199
+
3200
+ > dict: 包含 span_id、code、element_count、boundary_group_names、widths、factors。
3201
+ > widths 每行含 element_id、position(0 I端/1 J端)、variant(0 混凝土/组合梁;
3202
+ > 1 上下局稳、2 剪力滞和上部局稳、3 剪力滞和下部局稳),
3203
+ > actual_widths、effective_widths、top_actual、bottom_actual、top_effective、
3204
+ > bottom_effective,宽度单位 m。factors 每行含 group_name、element_id、
3205
+ > factor_i/j(Y惯性矩)、factor_i_z/j_z(Z惯性矩)、factor_i_ax/j_ax(面积)比值,
3206
+ > dz_i/j、dy_i/j 为形心偏移,单位 m。后续仍需 update_model 提交。
3207
+
3208
+ ## `mdb_element_factor`
3209
+
3210
+ ### `mdb.add_mass_factor`
3211
+
3212
+ 源码:`qtmodel/mdb/mdb_element_factor.py` · `MdbElementFactor.add_mass_factor`
3213
+
3214
+ ```python
3215
+ mdb.add_mass_factor(name: str, factor: float=1.0, element_ids: Optional[Union[int, str, list[int]]]=None, group_names: Optional[Union[str, list[str]]]=None, index: int=-1)
3216
+ ```
3217
+
3218
+ 添加或覆盖单元质量系数,选择方式与 UI 的指定单元、指定结构组一致。
3219
+
3220
+ #### 参数
3221
+
3222
+ > name: 定义名称,不能为空;质量系数定义内须唯一。
3223
+ > factor: 无量纲质量缩放系数,默认 1 表示不调整;允许 0,必须为非负有限数。
3224
+ > element_ids: 单元编号,支持单个编号、列表和 "1to10by2" 字符串,默认 None。
3225
+ > 必须引用已存在单元;与 group_names 二选一,至少一种非空。
3226
+ > group_names: 结构组名称或名称列表,默认 None;必须引用已存在结构组。
3227
+ > 保留组引用,组内单元增删后自动改变生效范围;重复选择会去重。
3228
+ > index: 默认 -1 按名称覆盖已有定义,或自动分配新编号;正整数按编号覆盖。
3229
+ > 按编号覆盖可改名;新名称被其他编号占用时抛出异常,不修改原数据。
3230
+
3231
+ #### 示例
3232
+
3233
+ ```python
3234
+ from qtmodel import mdb
3235
+ mdb.add_mass_factor(name="主梁质量", factor=1.1, group_names=["主梁"])
3236
+ mdb.add_mass_factor(name="局部质量", factor=0.9, element_ids="1to10", index=2)
3237
+ mdb.update_model()
3238
+ ```
3239
+
3240
+ #### 返回
3241
+
3242
+ > dict: 包含 index、name、factor、selection_type(0 单元/1 结构组)、
3243
+ > element_ids(显式选择)、group_names、effective_element_ids(当前实际单元编号)、
3244
+ > element_count(去重后的实际单元数量)。不同质量定义覆盖同一单元时,编号最大者生效。
3245
+
3246
+ ### `mdb.update_mass_factor`
3247
+
3248
+ 源码:`qtmodel/mdb/mdb_element_factor.py` · `MdbElementFactor.update_mass_factor`
3249
+
3250
+ ```python
3251
+ mdb.update_mass_factor(index: int, name: Optional[str]=None, factor: Optional[float]=None, element_ids: Optional[Union[int, str, list[int]]]=None, group_names: Optional[Union[str, list[str]]]=None)
3252
+ ```
3253
+
3254
+ 修改已存在的质量系数,保留未提供的名称、系数和选择范围。
3255
+
3256
+ #### 参数
3257
+
3258
+ > index: 已存在的质量系数编号,必须为正整数;不存在时抛出异常。
3259
+ > name: 新名称,默认 None 保留原名称;不能为空或与其他编号重名。
3260
+ > factor: 新质量系数,默认 None 保留原值;必须为非负有限数,允许 0。
3261
+ > element_ids: 新单元范围,默认 None。与 group_names 都为 None 时保留原范围。
3262
+ > 传值时整体替换范围,不追加;支持编号、列表、范围字符串。
3263
+ > group_names: 新结构组范围,默认 None;支持名称或名称列表。
3264
+ > 指定任一范围时只使用本次提供的范围;两种非空范围不能同时指定,也不能都为空。
3265
+
3266
+ #### 示例
3267
+
3268
+ ```python
3269
+ from qtmodel import mdb
3270
+ mdb.update_mass_factor(index=1, factor=1.2)
3271
+ mdb.update_mass_factor(index=1, group_names=["主梁", "横梁"])
3272
+ mdb.update_model()
3273
+ ```
3274
+
3275
+ #### 返回
3276
+
3277
+ > dict: 修改后的完整定义,字段与 add_mass_factor 返回值相同。
3278
+
3279
+ ### `mdb.get_mass_factor`
3280
+
3281
+ 源码:`qtmodel/mdb/mdb_element_factor.py` · `MdbElementFactor.get_mass_factor`
3282
+
3283
+ ```python
3284
+ mdb.get_mass_factor(indices: Optional[Union[int, str, list[int]]]=None)
3285
+ ```
3286
+
3287
+ 查询质量系数定义及当前生效单元范围,不修改模型。
3288
+
3289
+ #### 参数
3290
+
3291
+ > indices: 质量系数定义编号,支持单个编号、列表和范围字符串。
3292
+ > 默认 None 返回全部定义,[] 返回空列表;不存在的编号跳过。
3293
+
3294
+ #### 示例
3295
+
3296
+ ```python
3297
+ from qtmodel import mdb
3298
+ rows = mdb.get_mass_factor(indices=None)
3299
+ ```
3300
+
3301
+ #### 返回
3302
+
3303
+ > list[dict]: 按编号排序,每行含 index、name、factor、selection_type、element_ids、
3304
+ > group_names、effective_element_ids、element_count。系数无量纲,组引用会实时展开。
3305
+
3306
+ ### `mdb.remove_mass_factor`
3307
+
3308
+ 源码:`qtmodel/mdb/mdb_element_factor.py` · `MdbElementFactor.remove_mass_factor`
3309
+
3310
+ ```python
3311
+ mdb.remove_mass_factor(indices: Union[int, str, list[int]])
3312
+ ```
3313
+
3314
+ 删除指定质量系数定义,不删除单元或结构组。
3315
+
3316
+ #### 参数
3317
+
3318
+ > indices: 明确指定质量系数定义编号,支持单个编号、列表和范围字符串。
3319
+ > [] 不执行删除,不允许 None;任一编号不存在时整次请求失败。
3320
+
3321
+ #### 示例
3322
+
3323
+ ```python
3324
+ from qtmodel import mdb
3325
+ mdb.remove_mass_factor(indices=[1, 2])
3326
+ mdb.update_model()
3327
+ ```
3328
+
3329
+ #### 返回
3330
+
3331
+ > str: 服务端执行确认信息。
3332
+
3333
+ ### `mdb.add_stiffness_factor`
3334
+
3335
+ 源码:`qtmodel/mdb/mdb_element_factor.py` · `MdbElementFactor.add_stiffness_factor`
3336
+
3337
+ ```python
3338
+ mdb.add_stiffness_factor(name: str, factor: float=1.0, element_ids: Optional[Union[int, str, list[int]]]=None, group_names: Optional[Union[str, list[str]]]=None, index: int=-1)
3339
+ ```
3340
+
3341
+ 添加或覆盖单元整体刚度系数,选择方式与 UI 一致。
3342
+
3343
+ #### 参数
3344
+
3345
+ > name: 定义名称,不能为空;刚度系数定义内须唯一,可与质量系数同名。
3346
+ > factor: 无量纲整体刚度缩放系数,默认 1;允许 0,必须为非负有限数。
3347
+ > 对应 UI 的单一刚度系数,不是分别设置各刚度分量的数组。
3348
+ > element_ids: 单元编号,支持编号、列表和范围字符串,默认 None。
3349
+ > 与 group_names 二选一,至少一种非空;单元须已存在。
3350
+ > group_names: 结构组名称或名称列表,默认 None;保留动态组引用,组须已存在。
3351
+ > index: 默认 -1 按名称覆盖已有定义或自动编号;正整数按编号覆盖并可改名。
3352
+ > 新名称被其他编号占用时抛出异常,保持原数据。
3353
+
3354
+ #### 示例
3355
+
3356
+ ```python
3357
+ from qtmodel import mdb
3358
+ mdb.add_stiffness_factor(name="主梁刚度", factor=0.8, group_names="主梁")
3359
+ mdb.update_model()
3360
+ ```
3361
+
3362
+ #### 返回
3363
+
3364
+ > dict: 包含 index、name、factor、selection_type(0 单元/1 结构组)、element_ids、
3365
+ > group_names、effective_element_ids、element_count。重叠定义按最大编号生效。
3366
+
3367
+ ### `mdb.update_stiffness_factor`
3368
+
3369
+ 源码:`qtmodel/mdb/mdb_element_factor.py` · `MdbElementFactor.update_stiffness_factor`
3370
+
3371
+ ```python
3372
+ mdb.update_stiffness_factor(index: int, name: Optional[str]=None, factor: Optional[float]=None, element_ids: Optional[Union[int, str, list[int]]]=None, group_names: Optional[Union[str, list[str]]]=None)
3373
+ ```
3374
+
3375
+ 修改已存在的刚度系数,保留未提供的字段。
3376
+
3377
+ #### 参数
3378
+
3379
+ > index: 已存在的刚度系数编号,必须为正整数。
3380
+ > name: 新名称,默认 None 保留原名称;不能为空或与其他编号重名。
3381
+ > factor: 新整体刚度系数,默认 None 保留原值;非负有限数,允许 0。
3382
+ > element_ids: 新单元范围,默认 None,支持编号、列表和范围字符串。
3383
+ > 与 group_names 都为 None 时保留原范围;传值时整体替换。
3384
+ > group_names: 新结构组范围,默认 None,支持名称或名称列表。
3385
+ > 改变选择方式时只使用本次范围,不能同时提供两种非空范围或清空所有范围。
3386
+
3387
+ #### 示例
3388
+
3389
+ ```python
3390
+ from qtmodel import mdb
3391
+ mdb.update_stiffness_factor(index=1, factor=0.7)
3392
+ mdb.update_model()
3393
+ ```
3394
+
3395
+ #### 返回
3396
+
3397
+ > dict: 修改后的完整定义,字段与 add_stiffness_factor 返回值相同。
3398
+
3399
+ ### `mdb.get_stiffness_factor`
3400
+
3401
+ 源码:`qtmodel/mdb/mdb_element_factor.py` · `MdbElementFactor.get_stiffness_factor`
3402
+
3403
+ ```python
3404
+ mdb.get_stiffness_factor(indices: Optional[Union[int, str, list[int]]]=None)
3405
+ ```
3406
+
3407
+ 查询刚度系数定义及当前生效单元范围,不修改模型。
3408
+
3409
+ #### 参数
3410
+
3411
+ > indices: 刚度系数定义编号,支持编号、列表和范围字符串。
3412
+ > 默认 None 返回全部定义,[] 返回空列表;不存在的编号跳过。
3413
+
3414
+ #### 示例
3415
+
3416
+ ```python
3417
+ from qtmodel import mdb
3418
+ rows = mdb.get_stiffness_factor(indices=None)
3419
+ ```
3420
+
3421
+ #### 返回
3422
+
3423
+ > list[dict]: 按编号排序,每行含 index、name、factor、selection_type、element_ids、
3424
+ > group_names、effective_element_ids、element_count;系数无量纲。
3425
+
3426
+ ### `mdb.remove_stiffness_factor`
3427
+
3428
+ 源码:`qtmodel/mdb/mdb_element_factor.py` · `MdbElementFactor.remove_stiffness_factor`
3429
+
3430
+ ```python
3431
+ mdb.remove_stiffness_factor(indices: Union[int, str, list[int]])
3432
+ ```
3433
+
3434
+ 删除指定刚度系数定义,不删除单元或结构组。
3435
+
3436
+ #### 参数
3437
+
3438
+ > indices: 明确指定刚度系数定义编号,支持编号、列表和范围字符串。
3439
+ > [] 不执行删除,不允许 None;任一编号不存在时整次请求失败。
3440
+
3441
+ #### 示例
3442
+
3443
+ ```python
3444
+ from qtmodel import mdb
3445
+ mdb.remove_stiffness_factor(indices=1)
3446
+ mdb.update_model()
3447
+ ```
3448
+
3449
+ #### 返回
3450
+
3451
+ > str: 服务端执行确认信息。
3452
+
3453
+ ### `mdb.set_element_factor`
3454
+
3455
+ 源码:`qtmodel/mdb/mdb_element_factor.py` · `MdbElementFactor.set_element_factor`
3456
+
3457
+ ```python
3458
+ mdb.set_element_factor(kind: str, index: int=-1, name: str='', factor: float=1.0, element_ids: Optional[Union[int, str, list[int]]]=None, group_names: Optional[Union[str, list[str]]]=None)
3459
+ ```
3460
+
3461
+ 执行旧通用单元系数命令,兼容以前生成的 set_element_factor 日志。
3462
+
3463
+ #### 参数
3464
+
3465
+ > kind: "mass" 质量系数或 "stiffness" 刚度系数。
3466
+ > index: 默认 -1 按名称覆盖或自动编号,正整数按编号覆盖。
3467
+ > name: 定义名称,默认空字符串但调用时必须提供非空名称。
3468
+ > factor: 无量纲非负有限系数,默认 1,允许 0。
3469
+ > element_ids: 指定单元编号、列表或范围字符串,默认 None。
3470
+ > group_names: 指定结构组名称或名称列表,默认 None;与 element_ids 二选一且非空。
3471
+
3472
+ #### 示例
3473
+
3474
+ ```python
3475
+ from qtmodel import mdb
3476
+ mdb.set_element_factor(kind="mass", index=1, name="质量", factor=1.1, element_ids=[1])
3477
+ mdb.update_model()
3478
+ ```
3479
+
3480
+ #### 返回
3481
+
3482
+ > str: 服务端确认信息;新脚本也可使用 add_mass_factor、add_stiffness_factor。
3483
+
3484
+ ### `mdb.remove_element_factor`
3485
+
3486
+ 源码:`qtmodel/mdb/mdb_element_factor.py` · `MdbElementFactor.remove_element_factor`
3487
+
3488
+ ```python
3489
+ mdb.remove_element_factor(kind: str, indices: Union[int, str, list[int]])
3490
+ ```
3491
+
3492
+ 执行旧通用单元系数删除命令,兼容以前生成的日志。
3493
+
3494
+ #### 参数
3495
+
3496
+ > kind: "mass" 质量系数或 "stiffness" 刚度系数。
3497
+ > indices: 明确指定定义编号,支持编号、列表和范围字符串。
3498
+ > [] 不删除,不允许 None;不存在的编号使整次请求失败。
3499
+
3500
+ #### 示例
3501
+
3502
+ ```python
3503
+ from qtmodel import mdb
3504
+ mdb.remove_element_factor(kind="stiffness", indices=[1])
3505
+ mdb.update_model()
3506
+ ```
3507
+
3508
+ #### 返回
3509
+
3510
+ > str: 服务端执行确认信息。
3511
+
2967
3512
  ## `mdb_international_live_load`
2968
3513
 
2969
3514
  ### `mdb.add_international_vehicle`
@@ -5090,6 +5635,38 @@ mdb.get_tendon_data()
5090
5635
  > - ``track_group``:轨迹线定位所用结构组。
5091
5636
  > - ``projection``:直线定位时是否投影到结构线上。
5092
5637
 
5638
+ ### `mdb.get_load_statistics`
5639
+
5640
+ 源码:`qtmodel/mdb/mdb_model_load.py` · `MdbModelLoad.get_load_statistics`
5641
+
5642
+ ```python
5643
+ mdb.get_load_statistics(case_names: Optional[Union[str, List[str]]]=None)
5644
+ ```
5645
+
5646
+ 获取查询栏中的荷载统计表数据,不打开表格窗口。
5647
+
5648
+ #### 参数
5649
+
5650
+ > case_names: 荷载工况名称筛选条件,默认 ``None`` 查询全部荷载工况。
5651
+ > 支持单个名称或名称列表;空列表也表示全部,重复名称只统计一次。
5652
+ > 名称必须与模型完全一致,不能为空;不存在的工况由服务端报错。
5653
+
5654
+ #### 示例
5655
+
5656
+ ```python
5657
+ from qtmodel import mdb
5658
+ mdb.get_load_statistics()
5659
+ mdb.get_load_statistics(case_names=["自重", "二期恒载"])
5660
+ ```
5661
+
5662
+ #### 返回
5663
+
5664
+ > list[dict]: 按工况编号升序排列,每行包含 ``case_id`` 工况号、
5665
+ > ``case_name`` 工况名及整体坐标系合力 ``fx``、``fy``、``fz``,固定单位为 ``N``。
5666
+ > 与查询栏口径一致,仅统计节点力、梁单元集中/分布荷载、板单元集中/面/线荷载;
5667
+ > 自重、预应力、温度、位移及力矩不纳入这三个力分量,只有这些荷载时合力为 ``0``。
5668
+ > 无荷载工况时返回空列表。换算为 ``kN`` 时将力分量除以 ``1000``。
5669
+
5093
5670
  ### `mdb.get_load_case_names`
5094
5671
 
5095
5672
  源码:`qtmodel/mdb/mdb_model_load.py` · `MdbModelLoad.get_load_case_names`
@@ -5562,6 +6139,38 @@ mdb.get_deviation_load_data()
5562
6139
 
5563
6140
  ## `mdb_model_material`
5564
6141
 
6142
+ ### `mdb.get_material_statistics`
6143
+
6144
+ 源码:`qtmodel/mdb/mdb_model_material.py` · `MdbModelMaterial.get_material_statistics`
6145
+
6146
+ ```python
6147
+ mdb.get_material_statistics()
6148
+ ```
6149
+
6150
+ 获取查询栏中的材料重量统计表数据,不打开表格窗口。
6151
+
6152
+ #### 参数
6153
+
6154
+ > 无
6155
+
6156
+ #### 示例
6157
+
6158
+ ```python
6159
+ from qtmodel import mdb
6160
+ mdb.get_material_statistics()
6161
+ ```
6162
+
6163
+ #### 返回
6164
+
6165
+ > list[dict]: 全部已定义材料按材料号升序排列,每行包含:
6166
+ > ``material_id`` 材料号;``material_type`` 材料类型中文名称;
6167
+ > ``material_name`` 材料名称;``frame_weight`` 梁及桁架等线单元重量;
6168
+ > ``plate_weight`` 板单元重量;``total_weight`` 两项重量之和。
6169
+ > 重量固定为 ``N``,包含材料构造系数,换算为 ``kN`` 时除以 ``1000``。
6170
+ > 变截面组采用对应单元平均面积,普通变截面采用两端计重面积平均值,
6171
+ > 组合截面采用计重面积,加劲板采用计重厚度;缺少计重属性的单元重量为 ``0``。
6172
+ > 未使用的材料也返回一行,重量为 ``0``;无材料时返回空列表。
6173
+
5565
6174
  ### `mdb.get_material_data`
5566
6175
 
5567
6176
  源码:`qtmodel/mdb/mdb_model_material.py` · `MdbModelMaterial.get_material_data`
@@ -6902,26 +7511,67 @@ mdb.get_group_elements()
6902
7511
  源码:`qtmodel/mdb/mdb_model_structure.py` · `MdbModelStructure.get_element_weight`
6903
7512
 
6904
7513
  ```python
6905
- mdb.get_element_weight(ids=None)
7514
+ mdb.get_element_weight(ids: Optional[Union[int, str, List[Union[int, str]]]]=None)
6906
7515
  ```
6907
7516
 
6908
7517
  获取指定或全部单元的自重。
6909
7518
 
6910
7519
  #### 参数
6911
7520
 
6912
- > ids: 单元号;``None`` 或空列表表示全部。
7521
+ > ids: 单元号筛选条件,默认 ``None`` 查询全部单元。
7522
+ > 支持单个整数、编号列表以及 ``"1to10by2"`` 编号字符串;空列表也表示全部。
7523
+ > 重复编号只返回一次,不存在的编号跳过。
6913
7524
 
6914
7525
  #### 示例
6915
7526
 
6916
7527
  ```python
6917
7528
  from qtmodel import mdb
6918
7529
  mdb.get_element_weight()
7530
+ mdb.get_element_weight(ids=[1, 2])
6919
7531
  ```
6920
7532
 
6921
7533
  #### 返回
6922
7534
 
6923
- > dict[int, float]: ``{单元号: 重量}``。JSON 对象键经解析后可能表现为
6924
- > 字符串,使用前可按需要转换为 ``int``;重量采用当前力单位。
7535
+ > dict[str, float]: ``{"单元号": 重量}``,HTTP JSON 对象的键为字符串。
7536
+ > 重量固定为 ``N``,包含材料构造系数,不随界面显示单位改变。
7537
+ > 使用 ``weights["1"]`` 读取 1 号单元;换算为 ``kN`` 时除以 ``1000``。
7538
+
7539
+ ### `mdb.get_element_weight_table`
7540
+
7541
+ 源码:`qtmodel/mdb/mdb_model_structure.py` · `MdbModelStructure.get_element_weight_table`
7542
+
7543
+ ```python
7544
+ mdb.get_element_weight_table(ids: Optional[Union[int, str, List[Union[int, str]]]]=None)
7545
+ ```
7546
+
7547
+ 获取查询栏中的单元重量表数据,不打开表格窗口。
7548
+
7549
+ #### 参数
7550
+
7551
+ > ids: 单元号筛选条件,默认 ``None`` 查询全部单元。
7552
+ > 支持单个整数、编号列表以及 ``"1to10by2"`` 编号字符串;空列表也表示全部。
7553
+ > 重复编号只返回一次,不存在的编号跳过。
7554
+
7555
+ #### 示例
7556
+
7557
+ ```python
7558
+ from qtmodel import mdb
7559
+ mdb.get_element_weight_table()
7560
+ mdb.get_element_weight_table(ids="1to10by2")
7561
+ ```
7562
+
7563
+ #### 返回
7564
+
7565
+ > list[dict]: 按单元号升序排列,每行包含:
7566
+ > ``element_id`` 单元号;``material_id`` 材料号;``material_name`` 材料名称;
7567
+ > ``geometry_type`` 几何属性类型(``section`` 截面、``thickness`` 板厚);
7568
+ > ``geometry_id`` 截面号或板厚号;``geometry_name`` 截面或板厚名称;
7569
+ > ``geometry_size`` 特征尺寸(线单元长度或板单元面积);
7570
+ > ``geometry_size_unit`` 特征尺寸单位(``m`` 或 ``m^2``);
7571
+ > ``element_weight`` 单元重量,固定为 ``N``,包含材料构造系数。
7572
+ > 缺少材料或截面/板厚时重量为 ``0``;不支持重量计算的单元类型也返回 ``0``。
7573
+ > 无单元时返回空列表,不附加混合类型的“合计”行;
7574
+ > 总重量可用 ``sum(row["element_weight"] for row in rows)`` 计算。
6925
7575
 
6926
7576
  ### `mdb.get_span_data`
6927
7577
 
@@ -10429,6 +11079,33 @@ mdb.merge_nodes()
10429
11079
 
10430
11080
  > 无
10431
11081
 
11082
+ ### `mdb.merge_node_groups`
11083
+
11084
+ 源码:`qtmodel/mdb/mdb_structure.py` · `MdbStructure.merge_node_groups`
11085
+
11086
+ ```python
11087
+ mdb.merge_node_groups(node_groups: list[list[int]])
11088
+ ```
11089
+
11090
+ 按指定分组合并节点,与 UI 分组合并使用同一复合操作。
11091
+
11092
+ #### 参数
11093
+
11094
+ > node_groups: 节点编号分组,每组至少两个正整数,各组不能重叠或重复。
11095
+ > 保留节点由模型端依据板单元及连接关系选取;不可合并的分组会跳过。
11096
+ > 日志只记录本次合并语句,不展开内部节点、单元、边界等联动命令。
11097
+
11098
+ #### 示例
11099
+
11100
+ ```python
11101
+ from qtmodel import mdb
11102
+ mdb.merge_node_groups(node_groups=[[1, 2], [3, 4]])
11103
+ ```
11104
+
11105
+ #### 返回
11106
+
11107
+ > dict[str, int]: merged_count 为实际删除的节点数,0 表示没有节点被合并。
11108
+
10432
11109
  ### `mdb.move_nodes`
10433
11110
 
10434
11111
  源码:`qtmodel/mdb/mdb_structure.py` · `MdbStructure.move_nodes`
@@ -10457,6 +11134,35 @@ mdb.move_nodes(ids=1,offset_x=1.5,offset_y=1.5,offset_z=1.5)
10457
11134
 
10458
11135
  > 无
10459
11136
 
11137
+ ### `mdb.move_nodes_by_offsets`
11138
+
11139
+ 源码:`qtmodel/mdb/mdb_structure.py` · `MdbStructure.move_nodes_by_offsets`
11140
+
11141
+ ```python
11142
+ mdb.move_nodes_by_offsets(node_ids: Union[int, str, list[Union[int, str]]], offsets: list[list[float]], intersected: bool=False)
11143
+ ```
11144
+
11145
+ 按一一对应的偏移量批量移动节点,日志只记录本次复合操作。
11146
+
11147
+ #### 参数
11148
+
11149
+ > node_ids: 明确指定的节点编号,支持列表及 "1to10" 字符串;不能为空或重复。
11150
+ > offsets: 与节点顺序对应的 [dx, dy, dz] 列表,采用全局坐标及模型输入单位,
11151
+ > 每项必须包含三个有限数值。模型端统一校验移动后的单元几何形状。
11152
+ > intersected: 是否用移动后的节点分割关联杆系单元,默认 False。
11153
+ > 日志重放保留此选项;省略时仅移动节点,不自动改变单元拓扑。
11154
+
11155
+ #### 示例
11156
+
11157
+ ```python
11158
+ from qtmodel import mdb
11159
+ mdb.move_nodes_by_offsets(node_ids=[1, 2], offsets=[[1, 0, 0], [1, 0, 0]])
11160
+ ```
11161
+
11162
+ #### 返回
11163
+
11164
+ > str: 服务端执行确认信息。
11165
+
10460
11166
  ### `mdb.translate_nodes`
10461
11167
 
10462
11168
  源码:`qtmodel/mdb/mdb_structure.py` · `MdbStructure.translate_nodes`
@@ -10913,6 +11619,67 @@ mdb.update_element_node(2,[1,2,3,4])
10913
11619
 
10914
11620
  > 无
10915
11621
 
11622
+ ### `mdb.merge_frame_elements`
11623
+
11624
+ 源码:`qtmodel/mdb/mdb_structure.py` · `MdbStructure.merge_frame_elements`
11625
+
11626
+ ```python
11627
+ mdb.merge_frame_elements(ids: Optional[Union[int, str, list[Union[int, str]]]]=None, delete_free_nodes: bool=True, accept_warnings: bool=False)
11628
+ ```
11629
+
11630
+ 合并共线且首尾相连的杆系单元,并等效转移原单元及中间节点上的荷载。
11631
+
11632
+ #### 参数
11633
+
11634
+ > ids: 梁、杆或索单元编号,支持单个编号、列表及 "1to10" 字符串。
11635
+ > 默认 None 或空列表时选择全部杆系单元;互不相连的单元分组处理。
11636
+ > 同组类型、材料、截面、β角及相关属性必须满足 UI 的合并条件。
11637
+ > delete_free_nodes: 是否删除合并后不再关联结构的自由节点,默认 True。
11638
+ > accept_warnings: 是否接受全量索力张拉、制造偏差等特殊荷载的合并提示,
11639
+ > 默认 False;需要确认的操作会报错,API 不弹窗。设为 True 表示接受。
11640
+ > 操作成功后日志只输出本合并语句,保留最小单元号。
11641
+
11642
+ #### 示例
11643
+
11644
+ ```python
11645
+ from qtmodel import mdb
11646
+ mdb.merge_frame_elements(ids=[1, 2, 3], delete_free_nodes=True)
11647
+ for element_ids in ([1, 2], [5, 6]):
11648
+ mdb.merge_frame_elements(ids=element_ids)
11649
+ mdb.update_model()
11650
+ ```
11651
+
11652
+ #### 返回
11653
+
11654
+ > dict[str, int]: merged_count 为实际删除的单元数,0 表示没有可合并的分组。
11655
+
11656
+ ### `mdb.merge_plate_elements`
11657
+
11658
+ 源码:`qtmodel/mdb/mdb_structure.py` · `MdbStructure.merge_plate_elements`
11659
+
11660
+ ```python
11661
+ mdb.merge_plate_elements(ids: Union[int, str, list[Union[int, str]]])
11662
+ ```
11663
+
11664
+ 合并选中的共面板单元,与 UI 合并板单元使用同一复合操作。
11665
+
11666
+ #### 参数
11667
+
11668
+ > ids: 至少两个不同的板单元编号,支持列表及 "1to10" 字符串。
11669
+ > 材料、板厚必须一致;保留最小单元号,删除其他板单元及其关联荷载。
11670
+ > 不删除自由节点,不适用于任意非矩形区域。日志只输出本合并语句。
11671
+
11672
+ #### 示例
11673
+
11674
+ ```python
11675
+ from qtmodel import mdb
11676
+ mdb.merge_plate_elements(ids=[1, 2])
11677
+ ```
11678
+
11679
+ #### 返回
11680
+
11681
+ > dict[str, int]: merged_count 为实际删除的板单元数。
11682
+
10916
11683
  ### `mdb.remove_elements`
10917
11684
 
10918
11685
  源码:`qtmodel/mdb/mdb_structure.py` · `MdbStructure.remove_elements`
@@ -12125,18 +12892,19 @@ mdb.remove_tendon_property()
12125
12892
  mdb.remove_pre_stress(tendon_name: str='')
12126
12893
  ```
12127
12894
 
12128
- 删除预应力
12895
+ 按钢束名称删除预应力荷载,保留钢束及钢束组定义。
12129
12896
 
12130
12897
  #### 参数
12131
12898
 
12132
- > tendon_name: 钢束组,默认则删除所有预应力荷载
12899
+ > tendon_name: 钢束名称,对应钢束定义的 name,例如 "钢束1"。
12900
+ > 默认空字符串 "" 表示删除所有预应力荷载;省略参数时同样删除全部。
12133
12901
 
12134
12902
  #### 示例
12135
12903
 
12136
12904
  ```python
12137
12905
  from qtmodel import mdb
12138
12906
  mdb.remove_pre_stress(tendon_name="钢束1")
12139
- mdb.remove_pre_stress()
12907
+ mdb.remove_pre_stress() # 删除所有预应力荷载
12140
12908
  ```
12141
12909
 
12142
12910
  #### 返回
@@ -13085,478 +13853,511 @@ odb.get_tendon_length_result()
13085
13853
  源码:`qtmodel/odb/odb_result_plot.py` · `OdbResultPlot.plot_reaction_result`
13086
13854
 
13087
13855
  ```python
13088
- odb.plot_reaction_result(file_path: str='', stage_id: int=1, case_name: str='', show_increment: bool=False, envelop_type: int=1, component: int=1, show_number: bool=True, text_rotation=0, max_min_kind: int=-1, show_legend: bool=True, digital_count=3, text_exponential: bool=True, arrow_scale: float=1, is_time_history: bool=False, time_kind: int=1, time_tick: float=1.0)
13856
+ odb.plot_reaction_result(file_path: Optional[str]='', stage_id: int=1, case_name: str='', show_increment: bool=False, envelop_type: int=1, component: int=1, show_number: bool=True, text_rotation: float=0, max_min_kind: int=-1, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, arrow_scale: float=1, is_time_history: bool=False, time_kind: int=1, time_tick: float=1.0)
13089
13857
  ```
13090
13858
 
13091
- 保存结果图片到指定文件甲
13859
+ 绘制结果图并返回 PNG Base64,可选保存到被控端文件
13092
13860
 
13093
13861
  #### 参数
13094
13862
 
13095
- > file_path: 保存路径名
13096
- > stage_id: 0-施工阶段包络 n-施工阶段号 -1-运营阶段(负数均代表运营阶段)
13097
- > case_name: 详细荷载工况名,参考桥通结果输出,例如: CQ:成桥(合计)
13098
- > show_increment: 是否显示增量结果
13099
- > envelop_type: 施工阶段包络类型 1-最大 2-最小
13100
- > component: 分量编号 1-Fx 2-Fy 3-Fz 4-Fxyz 5-Mx 6-My 7-Mz 8-Mxyz
13101
- > show_number: 数值选项卡开启
13102
- > show_legend: 图例选项卡开启
13103
- > text_rotation: 数值选项卡内文字旋转角度
13104
- > max_min_kind: 数值选项卡内最大最小值显示 0-不显示最大最小值 1-显示最大值和最小值 2-最大绝对值 3-最大值 4-最小值
13105
- > digital_count: 小数点位数
13106
- > text_exponential: 指数显示开启
13107
- > arrow_scale:箭头大小
13108
- > is_time_history:是否为时程分析结果
13109
- > time_kind:时程分析类型 1-时刻 2-最大 3-最小
13110
- > time_tick:时程分析时刻
13863
+ > file_path (Optional[str]): 可选的被控端 PNG 完整保存路径,默认空字符串。
13864
+ > 省略、传 ``""`` 或 ``None`` 时不写文件,直接返回 PNG Base64;
13865
+ > 非空路径时同时在被控端保存文件,父目录须存在。
13866
+ > stage_id (int): 0-施工阶段包络 n-施工阶段号 -1-运营阶段(负数均代表运营阶段)
13867
+ > case_name (str): 详细荷载工况名,参考桥通结果输出,例如: CQ:成桥(合计)
13868
+ > show_increment (bool): 是否显示增量结果
13869
+ > envelop_type (int): 施工阶段包络类型 1-最大 2-最小
13870
+ > component (int): 分量编号 1-Fx 2-Fy 3-Fz 4-Fxyz 5-Mx 6-My 7-Mz 8-Mxyz
13871
+ > show_number (bool): 数值选项卡开启
13872
+ > show_legend (bool): 图例选项卡开启
13873
+ > text_rotation (float): 数值选项卡内文字旋转角度
13874
+ > max_min_kind (int): 数值选项卡内最大最小值显示 0-不显示最大最小值 1-显示最大值和最小值 2-最大绝对值 3-最大值 4-最小值
13875
+ > digital_count (int): 小数点位数
13876
+ > text_exponential (bool): 指数显示开启
13877
+ > arrow_scale (float): 箭头大小
13878
+ > is_time_history (bool): 是否为时程分析结果
13879
+ > time_kind (int): 时程分析类型 1-时刻 2-最大 3-最小
13880
+ > time_tick (float): 时程分析时刻
13111
13881
 
13112
13882
  #### 示例
13113
13883
 
13114
13884
  ```python
13115
13885
  from qtmodel import odb
13116
- odb.plot_reaction_result(file_path=r"D:\图片\反力图.png",component=1,case_name="CQ:成桥(合计)",stage_id=-1)
13886
+ image_base64 = odb.plot_reaction_result(component=1,case_name="CQ:成桥(合计)",stage_id=-1)
13117
13887
  ```
13118
13888
 
13119
13889
  #### 返回
13120
13890
 
13121
- > Base64字符串
13891
+ > str: PNG 二进制内容的纯 Base64 字符串,不含 data URI 前缀;
13892
+ > 可在控制端通过 base64.b64decode 解码显示或保存。
13122
13893
 
13123
13894
  ### `odb.plot_displacement_result`
13124
13895
 
13125
13896
  源码:`qtmodel/odb/odb_result_plot.py` · `OdbResultPlot.plot_displacement_result`
13126
13897
 
13127
13898
  ```python
13128
- odb.plot_displacement_result(file_path: str='', stage_id: int=1, case_name: str='', show_increment: bool=False, envelop_type: int=1, component: int=1, show_deformed: bool=True, deformed_scale: float=1.0, deformed_actual: bool=False, show_number: bool=True, text_rotation=0, max_min_kind: int=1, show_legend: bool=True, digital_count=3, text_exponential: bool=True, show_undeformed: bool=True, is_time_history: bool=False, deform_kind: int=1, time_kind: int=1, time_tick: float=1.0)
13899
+ odb.plot_displacement_result(file_path: Optional[str]='', stage_id: int=1, case_name: str='', show_increment: bool=False, envelop_type: int=1, component: int=1, show_deformed: bool=True, deformed_scale: float=1.0, deformed_actual: bool=False, show_number: bool=True, text_rotation: float=0, max_min_kind: int=1, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, show_undeformed: bool=True, is_time_history: bool=False, deform_kind: int=1, time_kind: int=1, time_tick: float=1.0)
13129
13900
  ```
13130
13901
 
13131
- 保存结果图片到指定文件甲
13902
+ 绘制结果图并返回 PNG Base64,可选保存到被控端文件
13132
13903
 
13133
13904
  #### 参数
13134
13905
 
13135
- > file_path: 保存路径名
13136
- > stage_id: 0-施工阶段包络 n-施工阶段号 -1-运营阶段(负数均代表运营阶段)
13137
- > case_name: 详细荷载工况名,参考桥通结果输出,例如: CQ:成桥(合计)
13138
- > show_increment: 是否显示增量结果
13139
- > envelop_type: 施工阶段包络类型 1-最大 2-最小
13140
- > component: 位移分量编号 1-Dx 2-Dy 3-Dz 4-Rx 5-Ry 6-Rz
13906
+ > file_path (Optional[str]): 可选的被控端 PNG 完整保存路径,默认空字符串。
13907
+ > 省略、传 ``""`` 或 ``None`` 时不写文件,直接返回 PNG Base64;
13908
+ > 非空路径时同时在被控端保存文件,父目录须存在。
13909
+ > stage_id (int): 0-施工阶段包络 n-施工阶段号 -1-运营阶段(负数均代表运营阶段)
13910
+ > case_name (str): 详细荷载工况名,参考桥通结果输出,例如: CQ:成桥(合计)
13911
+ > show_increment (bool): 是否显示增量结果
13912
+ > envelop_type (int): 施工阶段包络类型 1-最大 2-最小
13913
+ > component (int): 位移分量编号 1-Dx 2-Dy 3-Dz 4-Rx 5-Ry 6-Rz
13141
13914
  > 7-Dxy 8-Dyz 9-Dxz 10-Dxyz
13142
- > show_deformed: 变形选项卡开启
13143
- > deformed_scale:变形比例
13144
- > deformed_actual:是否显示实际变形
13145
- > show_number: 数值选项卡开启
13146
- > text_rotation: 数值选项卡内文字旋转角度
13147
- > max_min_kind: 数值选项卡内最大最小值显示 0-不显示最大最小值 1-显示最大值和最小值 2-最大绝对值 3-最大值 4-最小值
13148
- > show_legend: 图例选项卡开启
13149
- > digital_count: 小数点位数
13150
- > text_exponential: 指数显示开启
13151
- > show_undeformed: 显示变形前
13152
- > is_time_history:是否为时程分析结果
13153
- > time_kind:时程分析类型 1-时刻 2-最大 3-最小
13154
- > deform_kind:时程分析变形类型 1-位移 2-速度 3-加速度
13155
- > time_tick:时程分析时刻
13915
+ > show_deformed (bool): 变形选项卡开启
13916
+ > deformed_scale (float): 变形比例
13917
+ > deformed_actual (bool): 是否显示实际变形
13918
+ > show_number (bool): 数值选项卡开启
13919
+ > text_rotation (float): 数值选项卡内文字旋转角度
13920
+ > max_min_kind (int): 数值选项卡内最大最小值显示 0-不显示最大最小值 1-显示最大值和最小值 2-最大绝对值 3-最大值 4-最小值
13921
+ > show_legend (bool): 图例选项卡开启
13922
+ > digital_count (int): 小数点位数
13923
+ > text_exponential (bool): 指数显示开启
13924
+ > show_undeformed (bool): 显示变形前
13925
+ > is_time_history (bool): 是否为时程分析结果
13926
+ > time_kind (int): 时程分析类型 1-时刻 2-最大 3-最小
13927
+ > deform_kind (int): 时程分析变形类型 1-位移 2-速度 3-加速度
13928
+ > time_tick (float): 时程分析时刻
13156
13929
 
13157
13930
  #### 示例
13158
13931
 
13159
13932
  ```python
13160
13933
  from qtmodel import odb
13161
- odb.plot_displacement_result(file_path=r"D:\图片\变形图.png",component=1,case_name="CQ:成桥(合计)",stage_id=-1)
13934
+ image_base64 = odb.plot_displacement_result(component=1,case_name="CQ:成桥(合计)",stage_id=-1)
13162
13935
  ```
13163
13936
 
13164
13937
  #### 返回
13165
13938
 
13166
- > Base64字符串
13939
+ > str: PNG 二进制内容的纯 Base64 字符串,不含 data URI 前缀;
13940
+ > 可在控制端通过 base64.b64decode 解码显示或保存。
13167
13941
 
13168
13942
  ### `odb.plot_beam_element_force`
13169
13943
 
13170
13944
  源码:`qtmodel/odb/odb_result_plot.py` · `OdbResultPlot.plot_beam_element_force`
13171
13945
 
13172
13946
  ```python
13173
- odb.plot_beam_element_force(file_path: str='', stage_id: int=1, case_name: str='合计', show_increment: bool=False, envelop_type: int=1, component: int=1, show_line_chart: bool=True, line_scale: float=1.0, flip_plot: bool=True, show_deformed: bool=True, deformed_actual: bool=False, deformed_scale: float=1.0, show_number: bool=False, text_rotation: int=0, max_min_kind: int=1, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, show_undeformed: bool=False, position: int=1, is_time_history: bool=False, time_kind: int=1, time_tick: float=1.0)
13947
+ odb.plot_beam_element_force(file_path: Optional[str]='', stage_id: int=1, case_name: str='合计', show_increment: bool=False, envelop_type: int=1, component: int=1, show_line_chart: bool=True, line_scale: float=1.0, flip_plot: bool=True, show_deformed: bool=True, deformed_actual: bool=False, deformed_scale: float=1.0, show_number: bool=False, text_rotation: int=0, max_min_kind: int=1, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, show_undeformed: bool=False, position: int=1, is_time_history: bool=False, time_kind: int=1, time_tick: float=1.0)
13174
13948
  ```
13175
13949
 
13176
- 绘制梁单元结果图并保存到指定文件
13950
+ 绘制梁单元内力图并返回 PNG Base64
13177
13951
 
13178
13952
  #### 参数
13179
13953
 
13180
- > file_path: 保存路径名
13181
- > stage_id: 0-施工阶段包络 n-施工阶段号 -1-运营阶段(负数均代表运营阶段)
13182
- > case_name: 详细荷载工况名,参考桥通结果输出,例如: CQ:成桥(合计)
13183
- > show_increment: 是否显示增量结果
13184
- > envelop_type: 施工阶段包络类型 1-最大 2-最小
13185
- > component: 梁内力分量,仅支持 1-Fx 2-Fy 3-Fz 4-Mx 5-My 6-Mz;
13954
+ > file_path (Optional[str]): 可选的被控端 PNG 完整保存路径,默认空字符串。
13955
+ > 省略、传 ``""`` 或 ``None`` 时不写文件,直接返回 PNG Base64;
13956
+ > 非空路径时同时在被控端保存文件,父目录须存在。
13957
+ > stage_id (int): 0-施工阶段包络 n-施工阶段号 -1-运营阶段(负数均代表运营阶段)
13958
+ > case_name (str): 详细荷载工况名,参考桥通结果输出,例如: CQ:成桥(合计)
13959
+ > show_increment (bool): 是否显示增量结果
13960
+ > envelop_type (int): 施工阶段包络类型 1-最大 2-最小
13961
+ > component (int): 梁内力分量,仅支持 1-Fx 2-Fy 3-Fz 4-Mx 5-My 6-Mz;
13186
13962
  > 旧文档中的 Dx/Dy 等位移分量不适用于本方法
13187
- > show_line_chart: 折线图选项卡开启
13188
- > line_scale:折线图比例
13189
- > flip_plot:反向绘制
13190
- > show_deformed: 变形选项卡开启
13191
- > deformed_scale:变形比例
13192
- > deformed_actual:是否显示实际变形
13193
- > show_number: 数值选项卡开启
13194
- > text_rotation: 数值选项卡内文字旋转角度
13195
- > digital_count: 小数点位数
13196
- > text_exponential: 指数显示开启
13197
- > max_min_kind: 数值选项卡内最大最小值显示 0-不显示最大最小值 1-显示最大值和最小值 2-最大绝对值 3-最大值 4-最小值
13198
- > show_legend: 图例选项卡开启
13199
- > show_undeformed: 显示变形前
13200
- > position: 位置编号 1-始端 2-末端 3-绝对最大 4-全部
13201
- > is_time_history:是否为时程分析结果
13202
- > time_kind:时程分析类型 1-时刻 2-最大 3-最小
13203
- > time_tick:时程分析时刻
13963
+ > show_line_chart (bool): 折线图选项卡开启
13964
+ > line_scale (float): 折线图比例
13965
+ > flip_plot (bool): 反向绘制
13966
+ > show_deformed (bool): 变形选项卡开启
13967
+ > deformed_scale (float): 变形比例
13968
+ > deformed_actual (bool): 是否显示实际变形
13969
+ > show_number (bool): 数值选项卡开启
13970
+ > text_rotation (int): 数值选项卡内文字旋转角度
13971
+ > digital_count (int): 小数点位数
13972
+ > text_exponential (bool): 指数显示开启
13973
+ > max_min_kind (int): 数值选项卡内最大最小值显示 0-不显示最大最小值 1-显示最大值和最小值 2-最大绝对值 3-最大值 4-最小值
13974
+ > show_legend (bool): 图例选项卡开启
13975
+ > show_undeformed (bool): 显示变形前
13976
+ > position (int): 位置编号 1-始端 2-末端 3-绝对最大 4-全部
13977
+ > is_time_history (bool): 是否为时程分析结果
13978
+ > time_kind (int): 时程分析类型 1-时刻 2-最大 3-最小
13979
+ > time_tick (float): 时程分析时刻
13204
13980
 
13205
13981
  #### 示例
13206
13982
 
13207
13983
  ```python
13208
13984
  from qtmodel import odb
13209
- odb.plot_beam_element_force(file_path=r"D:\图片\梁内力.png",component=1,case_name="CQ:成桥(合计)",stage_id=-1)
13985
+ image_base64 = odb.plot_beam_element_force(component=1,case_name="CQ:成桥(合计)",stage_id=-1)
13210
13986
  ```
13211
13987
 
13212
13988
  #### 返回
13213
13989
 
13214
- > Base64字符串
13990
+ > str: PNG 二进制内容的纯 Base64 字符串,不含 data URI 前缀;
13991
+ > 可在控制端通过 base64.b64decode 解码显示或保存。
13215
13992
 
13216
13993
  ### `odb.plot_truss_element_force`
13217
13994
 
13218
13995
  源码:`qtmodel/odb/odb_result_plot.py` · `OdbResultPlot.plot_truss_element_force`
13219
13996
 
13220
13997
  ```python
13221
- odb.plot_truss_element_force(file_path: str='', stage_id: int=1, case_name: str='合计', show_increment: bool=False, envelop_type: int=1, component: int=1, show_line_chart: bool=True, line_scale: float=1.0, flip_plot: bool=True, show_deformed: bool=True, deformed_actual: bool=False, deformed_scale: float=1.0, show_number: bool=False, text_rotation: int=0, max_min_kind: int=1, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, show_undeformed: bool=False, position: int=1, is_time_history: bool=False, time_kind: int=1, time_tick: float=1.0)
13998
+ odb.plot_truss_element_force(file_path: Optional[str]='', stage_id: int=1, case_name: str='合计', show_increment: bool=False, envelop_type: int=1, component: int=1, show_line_chart: bool=True, line_scale: float=1.0, flip_plot: bool=True, show_deformed: bool=True, deformed_actual: bool=False, deformed_scale: float=1.0, show_number: bool=False, text_rotation: int=0, max_min_kind: int=1, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, show_undeformed: bool=False, position: int=1, is_time_history: bool=False, time_kind: int=1, time_tick: float=1.0)
13222
13999
  ```
13223
14000
 
13224
- 绘制杆单元结果图并保存到指定文件
14001
+ 绘制杆单元结果图并返回 PNG Base64
13225
14002
 
13226
14003
  #### 参数
13227
14004
 
13228
- > file_path: 保存路径名
13229
- > stage_id: 0-施工阶段包络 n-施工阶段号 -1-运营阶段(负数均代表运营阶段)
13230
- > case_name: 详细荷载工况名,参考桥通结果输出,例如: CQ:成桥(合计)
13231
- > show_increment: 是否显示增量结果
13232
- > envelop_type: 施工阶段包络类型 1-最大 2-最小
13233
- > component: 分量编号 0-N 1-Fx 2-Fy 3-Fz
13234
- > show_line_chart: 折线图选项卡开启
13235
- > line_scale:折线图比例
13236
- > flip_plot:反向绘制
13237
- > show_deformed: 变形选项卡开启
13238
- > deformed_scale:变形比例
13239
- > deformed_actual:是否显示实际变形
13240
- > show_number: 数值选项卡开启
13241
- > text_rotation: 数值选项卡内文字旋转角度
13242
- > digital_count: 小数点位数
13243
- > text_exponential: 指数显示开启
13244
- > max_min_kind: 数值选项卡内最大最小值显示 0-不显示最大最小值 1-显示最大值和最小值 2-最大绝对值 3-最大值 4-最小值
13245
- > show_legend: 图例选项卡开启
13246
- > show_undeformed: 显示变形前
13247
- > position: 位置编号 1-始端 2-末端 3-绝对最大 4-全部
13248
- > is_time_history:是否为时程分析结果
13249
- > time_kind:时程分析类型 1-时刻 2-最大 3-最小
13250
- > time_tick:时程分析时刻
14005
+ > file_path (Optional[str]): 可选的被控端 PNG 完整保存路径,默认空字符串。
14006
+ > 省略、传 ``""`` 或 ``None`` 时不写文件,直接返回 PNG Base64;
14007
+ > 非空路径时同时在被控端保存文件,父目录须存在。
14008
+ > stage_id (int): 0-施工阶段包络 n-施工阶段号 -1-运营阶段(负数均代表运营阶段)
14009
+ > case_name (str): 详细荷载工况名,参考桥通结果输出,例如: CQ:成桥(合计)
14010
+ > show_increment (bool): 是否显示增量结果
14011
+ > envelop_type (int): 施工阶段包络类型 1-最大 2-最小
14012
+ > component (int): 分量编号 0-N 1-Fx 2-Fy 3-Fz
14013
+ > show_line_chart (bool): 折线图选项卡开启
14014
+ > line_scale (float): 折线图比例
14015
+ > flip_plot (bool): 反向绘制
14016
+ > show_deformed (bool): 变形选项卡开启
14017
+ > deformed_scale (float): 变形比例
14018
+ > deformed_actual (bool): 是否显示实际变形
14019
+ > show_number (bool): 数值选项卡开启
14020
+ > text_rotation (int): 数值选项卡内文字旋转角度
14021
+ > digital_count (int): 小数点位数
14022
+ > text_exponential (bool): 指数显示开启
14023
+ > max_min_kind (int): 数值选项卡内最大最小值显示 0-不显示最大最小值 1-显示最大值和最小值 2-最大绝对值 3-最大值 4-最小值
14024
+ > show_legend (bool): 图例选项卡开启
14025
+ > show_undeformed (bool): 显示变形前
14026
+ > position (int): 位置编号 1-始端 2-末端 3-绝对最大 4-全部
14027
+ > is_time_history (bool): 是否为时程分析结果
14028
+ > time_kind (int): 时程分析类型 1-时刻 2-最大 3-最小
14029
+ > time_tick (float): 时程分析时刻
13251
14030
 
13252
14031
  #### 示例
13253
14032
 
13254
14033
  ```python
13255
14034
  from qtmodel import odb
13256
- odb.plot_truss_element_force(file_path=r"D:\图片\杆内力.png",case_name="CQ:成桥(合计)",stage_id=-1)
14035
+ image_base64 = odb.plot_truss_element_force(case_name="CQ:成桥(合计)",stage_id=-1)
13257
14036
  ```
13258
14037
 
13259
14038
  #### 返回
13260
14039
 
13261
- > Base64字符串
14040
+ > str: PNG 二进制内容的纯 Base64 字符串,不含 data URI 前缀;
14041
+ > 可在控制端通过 base64.b64decode 解码显示或保存。
13262
14042
 
13263
14043
  ### `odb.plot_plate_element_force`
13264
14044
 
13265
14045
  源码:`qtmodel/odb/odb_result_plot.py` · `OdbResultPlot.plot_plate_element_force`
13266
14046
 
13267
14047
  ```python
13268
- odb.plot_plate_element_force(file_path: str='', stage_id: int=1, case_name: str='合计', show_increment: bool=False, envelop_type: int=1, force_kind: int=1, component: int=1, show_number: bool=False, text_rotate: int=0, max_min_kind: int=1, show_deformed: bool=True, deformed_scale: float=1.0, deformed_actual: bool=False, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, show_undeformed: bool=False, is_time_history: bool=False, time_kind: int=1, time_tick: float=1.0)
14048
+ odb.plot_plate_element_force(file_path: Optional[str]='', stage_id: int=1, case_name: str='合计', show_increment: bool=False, envelop_type: int=1, force_kind: int=1, component: int=1, show_number: bool=False, text_rotate: int=0, max_min_kind: int=1, show_deformed: bool=True, deformed_scale: float=1.0, deformed_actual: bool=False, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, show_undeformed: bool=False, is_time_history: bool=False, time_kind: int=1, time_tick: float=1.0)
13269
14049
  ```
13270
14050
 
13271
- 绘制板单元结果图并保存到指定文件
14051
+ 绘制板单元结果图并返回 PNG Base64
13272
14052
 
13273
14053
  #### 参数
13274
14054
 
13275
- > file_path: 保存路径名
13276
- > component: 分量编号 1-Fxx 2-Fyy 3-Fxy 4-Mxx 5-Myy 6-Mxy
13277
- > force_kind: 内力选项 1-单元 2-节点平均
13278
- > case_name: 详细荷载工况名
13279
- > stage_id: 阶段编号
13280
- > envelop_type: 包络类型
13281
- > show_number: 是否显示数值
13282
- > show_deformed: 是否显示变形形状
13283
- > show_undeformed: 是否显示未变形形状
13284
- > deformed_actual: 是否显示实际变形
13285
- > deformed_scale: 变形比例
13286
- > show_legend: 是否显示图例
13287
- > text_rotate: 数值选项卡内文字旋转角度
13288
- > digital_count: 小数点位数
13289
- > text_exponential: 是否以指数形式显示
13290
- > max_min_kind: 最大最小值显示类型
13291
- > show_increment: 是否显示增量结果
13292
- > is_time_history:是否为时程分析结果
13293
- > time_kind:时程分析类型 1-时刻 2-最大 3-最小
13294
- > time_tick:时程分析时刻
14055
+ > file_path (Optional[str]): 可选的被控端 PNG 完整保存路径,默认空字符串。
14056
+ > 省略、传 ``""`` 或 ``None`` 时不写文件,直接返回 PNG Base64;
14057
+ > 非空路径时同时在被控端保存文件,父目录须存在。
14058
+ > component (int): 分量编号 1-Fxx 2-Fyy 3-Fxy 4-Mxx 5-Myy 6-Mxy
14059
+ > force_kind (int): 内力选项 1-单元 2-节点平均
14060
+ > case_name (str): 详细荷载工况名
14061
+ > stage_id (int): 阶段编号
14062
+ > envelop_type (int): 包络类型
14063
+ > show_number (bool): 是否显示数值
14064
+ > show_deformed (bool): 是否显示变形形状
14065
+ > show_undeformed (bool): 是否显示未变形形状
14066
+ > deformed_actual (bool): 是否显示实际变形
14067
+ > deformed_scale (float): 变形比例
14068
+ > show_legend (bool): 是否显示图例
14069
+ > text_rotate (float): 数值选项卡内文字旋转角度
14070
+ > digital_count (int): 小数点位数
14071
+ > text_exponential (bool): 是否以指数形式显示
14072
+ > max_min_kind (int): 最大最小值显示类型
14073
+ > show_increment (bool): 是否显示增量结果
14074
+ > is_time_history (bool): 是否为时程分析结果
14075
+ > time_kind (int): 时程分析类型 1-时刻 2-最大 3-最小
14076
+ > time_tick (float): 时程分析时刻
13295
14077
 
13296
14078
  #### 示例
13297
14079
 
13298
14080
  ```python
13299
14081
  from qtmodel import odb
13300
- odb.plot_plate_element_force(file_path=r"D:\图片\板内力.png",component=1,case_name="CQ:成桥(合计)",stage_id=-1)
14082
+ image_base64 = odb.plot_plate_element_force(component=1,case_name="CQ:成桥(合计)",stage_id=-1)
13301
14083
  ```
13302
14084
 
13303
14085
  #### 返回
13304
14086
 
13305
- > Base64字符串
14087
+ > str: PNG 二进制内容的纯 Base64 字符串,不含 data URI 前缀;
14088
+ > 可在控制端通过 base64.b64decode 解码显示或保存。
13306
14089
 
13307
14090
  ### `odb.plot_composite_beam_force`
13308
14091
 
13309
14092
  源码:`qtmodel/odb/odb_result_plot.py` · `OdbResultPlot.plot_composite_beam_force`
13310
14093
 
13311
14094
  ```python
13312
- odb.plot_composite_beam_force(file_path: str='', stage_id: int=1, case_name: str='合计', show_increment: bool=False, envelop_type: int=1, mat_type: int=1, component: int=1, show_line_chart: bool=True, line_scale: float=1.0, flip_plot: bool=True, show_deformed: bool=True, deformed_actual: bool=False, deformed_scale: float=1.0, show_number: bool=False, text_rotation: int=0, max_min_kind: int=1, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, show_undeformed: bool=False, position: int=1)
14095
+ odb.plot_composite_beam_force(file_path: Optional[str]='', stage_id: int=1, case_name: str='合计', show_increment: bool=False, envelop_type: int=1, mat_type: int=1, component: int=1, show_line_chart: bool=True, line_scale: float=1.0, flip_plot: bool=True, show_deformed: bool=True, deformed_actual: bool=False, deformed_scale: float=1.0, show_number: bool=False, text_rotation: int=0, max_min_kind: int=1, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, show_undeformed: bool=False, position: int=1)
13313
14096
  ```
13314
14097
 
13315
- 绘制组合梁单元结果图并保存到指定文件
14098
+ 绘制组合梁单元结果图并返回 PNG Base64
13316
14099
 
13317
14100
  #### 参数
13318
14101
 
13319
- > file_path: 保存路径名
13320
- > stage_id: 0-施工阶段包络 n-施工阶段号 -1-运营阶段(负数均代表运营阶段)
13321
- > case_name: 详细荷载工况名,参考桥通结果输出,例如: CQ:成桥(合计)
13322
- > show_increment: 是否显示增量结果
13323
- > envelop_type: 施工阶段包络类型 1-最大 2-最小
13324
- > mat_type: 材料类型 1-主材 2-辅材 3-主材+辅材
13325
- > component: 分量编号 1-Fx 2-Fy 3-Fz 4-Mx 5-My 6-Mz
13326
- > show_line_chart: 折线图选项卡开启
13327
- > line_scale:折线图比例
13328
- > flip_plot:反向绘制
13329
- > show_deformed: 变形选项卡开启
13330
- > deformed_scale:变形比例
13331
- > deformed_actual:是否显示实际变形
13332
- > show_number: 数值选项卡开启
13333
- > text_rotation: 数值选项卡内文字旋转角度
13334
- > digital_count: 小数点位数
13335
- > text_exponential: 指数显示开启
13336
- > max_min_kind: 数值选项卡内最大最小值显示 0-不显示最大最小值 1-显示最大值和最小值 2-最大绝对值 3-最大值 4-最小值
13337
- > show_legend: 图例选项卡开启
13338
- > show_undeformed: 显示变形前
13339
- > position: 位置编号 1-始端 2-末端 3-绝对最大 4-全部
14102
+ > file_path (Optional[str]): 可选的被控端 PNG 完整保存路径,默认空字符串。
14103
+ > 省略、传 ``""`` 或 ``None`` 时不写文件,直接返回 PNG Base64;
14104
+ > 非空路径时同时在被控端保存文件,父目录须存在。
14105
+ > stage_id (int): 0-施工阶段包络 n-施工阶段号 -1-运营阶段(负数均代表运营阶段)
14106
+ > case_name (str): 详细荷载工况名,参考桥通结果输出,例如: CQ:成桥(合计)
14107
+ > show_increment (bool): 是否显示增量结果
14108
+ > envelop_type (int): 施工阶段包络类型 1-最大 2-最小
14109
+ > mat_type (int): 材料类型 1-主材 2-辅材 3-主材+辅材
14110
+ > component (int): 分量编号 1-Fx 2-Fy 3-Fz 4-Mx 5-My 6-Mz
14111
+ > show_line_chart (bool): 折线图选项卡开启
14112
+ > line_scale (float): 折线图比例
14113
+ > flip_plot (bool): 反向绘制
14114
+ > show_deformed (bool): 变形选项卡开启
14115
+ > deformed_scale (float): 变形比例
14116
+ > deformed_actual (bool): 是否显示实际变形
14117
+ > show_number (bool): 数值选项卡开启
14118
+ > text_rotation (int): 数值选项卡内文字旋转角度
14119
+ > digital_count (int): 小数点位数
14120
+ > text_exponential (bool): 指数显示开启
14121
+ > max_min_kind (int): 数值选项卡内最大最小值显示 0-不显示最大最小值 1-显示最大值和最小值 2-最大绝对值 3-最大值 4-最小值
14122
+ > show_legend (bool): 图例选项卡开启
14123
+ > show_undeformed (bool): 显示变形前
14124
+ > position (int): 位置编号 1-始端 2-末端 3-绝对最大 4-全部
13340
14125
 
13341
14126
  #### 示例
13342
14127
 
13343
14128
  ```python
13344
14129
  from qtmodel import odb
13345
- odb.plot_composite_beam_force(file_path=r"D:\图片\组合梁内力.png",mat_type=0,component=1,case_name="CQ:成桥(合计)",stage_id=-1)
14130
+ image_base64 = odb.plot_composite_beam_force(mat_type=0,component=1,case_name="CQ:成桥(合计)",stage_id=-1)
13346
14131
  ```
13347
14132
 
13348
14133
  #### 返回
13349
14134
 
13350
- > Base64字符串
14135
+ > str: PNG 二进制内容的纯 Base64 字符串,不含 data URI 前缀;
14136
+ > 可在控制端通过 base64.b64decode 解码显示或保存。
13351
14137
 
13352
14138
  ### `odb.plot_beam_element_stress`
13353
14139
 
13354
14140
  源码:`qtmodel/odb/odb_result_plot.py` · `OdbResultPlot.plot_beam_element_stress`
13355
14141
 
13356
14142
  ```python
13357
- odb.plot_beam_element_stress(file_path: str='', stage_id: int=1, case_name: str='合计', show_increment: bool=False, envelop_type: int=1, component: int=1, show_line_chart: bool=True, line_scale: float=1.0, flip_plot: bool=True, show_deformed: bool=True, deformed_actual: bool=False, deformed_scale: float=1.0, show_number: bool=False, text_rotation: int=0, max_min_kind: int=1, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, show_undeformed: bool=False, position: int=1)
14143
+ odb.plot_beam_element_stress(file_path: Optional[str]='', stage_id: int=1, case_name: str='合计', show_increment: bool=False, envelop_type: int=1, component: int=1, show_line_chart: bool=True, line_scale: float=1.0, flip_plot: bool=True, show_deformed: bool=True, deformed_actual: bool=False, deformed_scale: float=1.0, show_number: bool=False, text_rotation: int=0, max_min_kind: int=1, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, show_undeformed: bool=False, position: int=1)
13358
14144
  ```
13359
14145
 
13360
- 绘制梁单元应力结果图并保存到指定文件
14146
+ 绘制梁单元应力结果图并返回 PNG Base64
13361
14147
 
13362
14148
  #### 参数
13363
14149
 
13364
- > file_path: 保存路径名
13365
- > stage_id: 0-施工阶段包络 n-施工阶段号 -1-运营阶段(负数均代表运营阶段)
13366
- > case_name: 详细荷载工况名,参考桥通结果输出,例如: CQ:成桥(合计)
13367
- > show_increment: 是否显示增量结果
13368
- > envelop_type: 施工阶段包络类型 1-最大 2-最小
13369
- > component: 分量编号 1-轴力 2-Mzx 3-My 4-组合包络 5-左上 6-右上 7-右下 8-左下
13370
- > show_line_chart: 折线图选项卡开启
13371
- > line_scale:折线图比例
13372
- > flip_plot:反向绘制
13373
- > show_deformed: 变形选项卡开启
13374
- > deformed_scale:变形比例
13375
- > deformed_actual:是否显示实际变形
13376
- > show_number: 数值选项卡开启
13377
- > text_rotation: 数值选项卡内文字旋转角度
13378
- > digital_count: 小数点位数
13379
- > text_exponential: 指数显示开启
13380
- > max_min_kind: 数值选项卡内最大最小值显示 0-不显示最大最小值 1-显示最大值和最小值 2-最大绝对值 3-最大值 4-最小值
13381
- > show_legend: 图例选项卡开启
13382
- > show_undeformed: 显示变形前
13383
- > position: 位置编号 1-始端 2-末端 3-绝对最大 4-全部
14150
+ > file_path (Optional[str]): 可选的被控端 PNG 完整保存路径,默认空字符串。
14151
+ > 省略、传 ``""`` 或 ``None`` 时不写文件,直接返回 PNG Base64;
14152
+ > 非空路径时同时在被控端保存文件,父目录须存在。
14153
+ > stage_id (int): 0-施工阶段包络 n-施工阶段号 -1-运营阶段(负数均代表运营阶段)
14154
+ > case_name (str): 详细荷载工况名,参考桥通结果输出,例如: CQ:成桥(合计)
14155
+ > show_increment (bool): 是否显示增量结果
14156
+ > envelop_type (int): 施工阶段包络类型 1-最大 2-最小
14157
+ > component (int): 分量编号 1-轴力 2-Mzx 3-My 4-组合包络 5-左上 6-右上 7-右下 8-左下
14158
+ > show_line_chart (bool): 折线图选项卡开启
14159
+ > line_scale (float): 折线图比例
14160
+ > flip_plot (bool): 反向绘制
14161
+ > show_deformed (bool): 变形选项卡开启
14162
+ > deformed_scale (float): 变形比例
14163
+ > deformed_actual (bool): 是否显示实际变形
14164
+ > show_number (bool): 数值选项卡开启
14165
+ > text_rotation (int): 数值选项卡内文字旋转角度
14166
+ > digital_count (int): 小数点位数
14167
+ > text_exponential (bool): 指数显示开启
14168
+ > max_min_kind (int): 数值选项卡内最大最小值显示 0-不显示最大最小值 1-显示最大值和最小值 2-最大绝对值 3-最大值 4-最小值
14169
+ > show_legend (bool): 图例选项卡开启
14170
+ > show_undeformed (bool): 显示变形前
14171
+ > position (int): 位置编号 1-始端 2-末端 3-绝对最大 4-全部
13384
14172
 
13385
14173
  #### 示例
13386
14174
 
13387
14175
  ```python
13388
14176
  from qtmodel import odb
13389
- odb.plot_beam_element_stress(file_path=r"D:\图片\梁应力.png",show_line_chart=False,component=1,case_name="CQ:成桥(合计)",stage_id=-1)
14177
+ image_base64 = odb.plot_beam_element_stress(show_line_chart=False,component=1,case_name="CQ:成桥(合计)",stage_id=-1)
13390
14178
  ```
13391
14179
 
13392
14180
  #### 返回
13393
14181
 
13394
- > Base64字符串
14182
+ > str: PNG 二进制内容的纯 Base64 字符串,不含 data URI 前缀;
14183
+ > 可在控制端通过 base64.b64decode 解码显示或保存。
13395
14184
 
13396
14185
  ### `odb.plot_truss_element_stress`
13397
14186
 
13398
14187
  源码:`qtmodel/odb/odb_result_plot.py` · `OdbResultPlot.plot_truss_element_stress`
13399
14188
 
13400
14189
  ```python
13401
- odb.plot_truss_element_stress(file_path: str='', stage_id: int=1, case_name: str='合计', show_increment: bool=False, envelop_type: int=1, show_line_chart: bool=True, line_scale: float=1.0, flip_plot: bool=True, show_deformed: bool=True, deformed_actual: bool=False, deformed_scale: float=1.0, show_number: bool=False, text_rotation: int=0, max_min_kind: int=1, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, show_undeformed: bool=False, position: int=1)
14190
+ odb.plot_truss_element_stress(file_path: Optional[str]='', stage_id: int=1, case_name: str='合计', show_increment: bool=False, envelop_type: int=1, show_line_chart: bool=True, line_scale: float=1.0, flip_plot: bool=True, show_deformed: bool=True, deformed_actual: bool=False, deformed_scale: float=1.0, show_number: bool=False, text_rotation: int=0, max_min_kind: int=1, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, show_undeformed: bool=False, position: int=1)
13402
14191
  ```
13403
14192
 
13404
- 绘制杆单元结果图并保存到指定文件
14193
+ 绘制杆单元结果图并返回 PNG Base64
13405
14194
 
13406
14195
  #### 参数
13407
14196
 
13408
- > file_path: 保存路径名
13409
- > stage_id: 0-施工阶段包络 n-施工阶段号 -1-运营阶段(负数均代表运营阶段)
13410
- > case_name: 详细荷载工况名,参考桥通结果输出,例如: CQ:成桥(合计)
13411
- > show_increment: 是否显示增量结果
13412
- > envelop_type: 施工阶段包络类型 1-最大 2-最小
13413
- > show_line_chart: 折线图选项卡开启
13414
- > line_scale:折线图比例
13415
- > flip_plot:反向绘制
13416
- > show_deformed: 变形选项卡开启
13417
- > deformed_scale:变形比例
13418
- > deformed_actual:是否显示实际变形
13419
- > show_number: 数值选项卡开启
13420
- > text_rotation: 数值选项卡内文字旋转角度
13421
- > digital_count: 小数点位数
13422
- > text_exponential: 指数显示开启
13423
- > max_min_kind: 数值选项卡内最大最小值显示 0-不显示最大最小值 1-显示最大值和最小值 2-最大绝对值 3-最大值 4-最小值
13424
- > show_legend: 图例选项卡开启
13425
- > show_undeformed: 显示变形前
13426
- > position: 位置编号 1-始端 2-末端 3-绝对最大 4-全部
14197
+ > file_path (Optional[str]): 可选的被控端 PNG 完整保存路径,默认空字符串。
14198
+ > 省略、传 ``""`` 或 ``None`` 时不写文件,直接返回 PNG Base64;
14199
+ > 非空路径时同时在被控端保存文件,父目录须存在。
14200
+ > stage_id (int): 0-施工阶段包络 n-施工阶段号 -1-运营阶段(负数均代表运营阶段)
14201
+ > case_name (str): 详细荷载工况名,参考桥通结果输出,例如: CQ:成桥(合计)
14202
+ > show_increment (bool): 是否显示增量结果
14203
+ > envelop_type (int): 施工阶段包络类型 1-最大 2-最小
14204
+ > show_line_chart (bool): 折线图选项卡开启
14205
+ > line_scale (float): 折线图比例
14206
+ > flip_plot (bool): 反向绘制
14207
+ > show_deformed (bool): 变形选项卡开启
14208
+ > deformed_scale (float): 变形比例
14209
+ > deformed_actual (bool): 是否显示实际变形
14210
+ > show_number (bool): 数值选项卡开启
14211
+ > text_rotation (int): 数值选项卡内文字旋转角度
14212
+ > digital_count (int): 小数点位数
14213
+ > text_exponential (bool): 指数显示开启
14214
+ > max_min_kind (int): 数值选项卡内最大最小值显示 0-不显示最大最小值 1-显示最大值和最小值 2-最大绝对值 3-最大值 4-最小值
14215
+ > show_legend (bool): 图例选项卡开启
14216
+ > show_undeformed (bool): 显示变形前
14217
+ > position (int): 位置编号 1-始端 2-末端 3-绝对最大 4-全部
13427
14218
 
13428
14219
  #### 示例
13429
14220
 
13430
14221
  ```python
13431
14222
  from qtmodel import odb
13432
- odb.plot_truss_element_stress(file_path=r"D:\图片\杆应力.png",case_name="CQ:成桥(合计)",stage_id=-1)
14223
+ image_base64 = odb.plot_truss_element_stress(case_name="CQ:成桥(合计)",stage_id=-1)
13433
14224
  ```
13434
14225
 
13435
14226
  #### 返回
13436
14227
 
13437
- > Base64字符串
14228
+ > str: PNG 二进制内容的纯 Base64 字符串,不含 data URI 前缀;
14229
+ > 可在控制端通过 base64.b64decode 解码显示或保存。
13438
14230
 
13439
14231
  ### `odb.plot_composite_beam_stress`
13440
14232
 
13441
14233
  源码:`qtmodel/odb/odb_result_plot.py` · `OdbResultPlot.plot_composite_beam_stress`
13442
14234
 
13443
14235
  ```python
13444
- odb.plot_composite_beam_stress(file_path: str='', stage_id: int=1, case_name: str='合计', show_increment: bool=False, envelop_type: int=1, mat_type: int=0, component: int=1, show_line_chart: bool=True, line_scale: float=1.0, flip_plot: bool=True, show_deformed: bool=True, deformed_actual: bool=False, deformed_scale: float=1.0, show_number: bool=False, text_rotation: int=0, max_min_kind: int=1, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, show_undeformed: bool=False, position: int=1)
14236
+ odb.plot_composite_beam_stress(file_path: Optional[str]='', stage_id: int=1, case_name: str='合计', show_increment: bool=False, envelop_type: int=1, mat_type: int=0, component: int=1, show_line_chart: bool=True, line_scale: float=1.0, flip_plot: bool=True, show_deformed: bool=True, deformed_actual: bool=False, deformed_scale: float=1.0, show_number: bool=False, text_rotation: int=0, max_min_kind: int=1, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, show_undeformed: bool=False, position: int=1)
13445
14237
  ```
13446
14238
 
13447
- 绘制组合梁单元结果图并保存到指定文件
14239
+ 绘制组合梁单元结果图并返回 PNG Base64
13448
14240
 
13449
14241
  #### 参数
13450
14242
 
13451
- > file_path: 保存路径名
13452
- > stage_id: 0-施工阶段包络 n-施工阶段号 -1-运营阶段(负数均代表运营阶段)
13453
- > case_name: 详细荷载工况名,参考桥通结果输出,例如: CQ:成桥(合计)
13454
- > show_increment: 是否显示增量结果
13455
- > envelop_type: 施工阶段包络类型 1-最大 2-最小
13456
- > mat_type: 材料类型 1-主材 2-辅材
13457
- > component: 分量编号 1-轴力分量 2-Mz分量 3-My分量 4-包络 5-左上 6-右上 7-左下 8-右下
13458
- > show_line_chart: 折线图选项卡开启
13459
- > line_scale:折线图比例
13460
- > flip_plot:反向绘制
13461
- > show_deformed: 变形选项卡开启
13462
- > deformed_scale:变形比例
13463
- > deformed_actual:是否显示实际变形
13464
- > show_number: 数值选项卡开启
13465
- > text_rotation: 数值选项卡内文字旋转角度
13466
- > digital_count: 小数点位数
13467
- > text_exponential: 指数显示开启
13468
- > max_min_kind: 数值选项卡内最大最小值显示 0-不显示最大最小值 1-显示最大值和最小值 2-最大绝对值 3-最大值 4-最小值
13469
- > show_legend: 图例选项卡开启
13470
- > show_undeformed: 显示变形前
13471
- > position: 位置编号 1-始端 2-末端 3-绝对最大 4-全部
14243
+ > file_path (Optional[str]): 可选的被控端 PNG 完整保存路径,默认空字符串。
14244
+ > 省略、传 ``""`` 或 ``None`` 时不写文件,直接返回 PNG Base64;
14245
+ > 非空路径时同时在被控端保存文件,父目录须存在。
14246
+ > stage_id (int): 0-施工阶段包络 n-施工阶段号 -1-运营阶段(负数均代表运营阶段)
14247
+ > case_name (str): 详细荷载工况名,参考桥通结果输出,例如: CQ:成桥(合计)
14248
+ > show_increment (bool): 是否显示增量结果
14249
+ > envelop_type (int): 施工阶段包络类型 1-最大 2-最小
14250
+ > mat_type (int): 材料类型 1-主材 2-辅材
14251
+ > component (int): 分量编号 1-轴力分量 2-Mz分量 3-My分量 4-包络 5-左上 6-右上 7-左下 8-右下
14252
+ > show_line_chart (bool): 折线图选项卡开启
14253
+ > line_scale (float): 折线图比例
14254
+ > flip_plot (bool): 反向绘制
14255
+ > show_deformed (bool): 变形选项卡开启
14256
+ > deformed_scale (float): 变形比例
14257
+ > deformed_actual (bool): 是否显示实际变形
14258
+ > show_number (bool): 数值选项卡开启
14259
+ > text_rotation (int): 数值选项卡内文字旋转角度
14260
+ > digital_count (int): 小数点位数
14261
+ > text_exponential (bool): 指数显示开启
14262
+ > max_min_kind (int): 数值选项卡内最大最小值显示 0-不显示最大最小值 1-显示最大值和最小值 2-最大绝对值 3-最大值 4-最小值
14263
+ > show_legend (bool): 图例选项卡开启
14264
+ > show_undeformed (bool): 显示变形前
14265
+ > position (int): 位置编号 1-始端 2-末端 3-绝对最大 4-全部
13472
14266
 
13473
14267
  #### 示例
13474
14268
 
13475
14269
  ```python
13476
14270
  from qtmodel import odb
13477
- odb.plot_composite_beam_stress(file_path=r"D:\图片\组合梁应力.png",component=1,case_name="CQ:成桥(合计)",stage_id=-1)
14271
+ image_base64 = odb.plot_composite_beam_stress(component=1,case_name="CQ:成桥(合计)",stage_id=-1)
13478
14272
  ```
13479
14273
 
13480
14274
  #### 返回
13481
14275
 
13482
- > Base64字符串
14276
+ > str: PNG 二进制内容的纯 Base64 字符串,不含 data URI 前缀;
14277
+ > 可在控制端通过 base64.b64decode 解码显示或保存。
13483
14278
 
13484
14279
  ### `odb.plot_plate_element_stress`
13485
14280
 
13486
14281
  源码:`qtmodel/odb/odb_result_plot.py` · `OdbResultPlot.plot_plate_element_stress`
13487
14282
 
13488
14283
  ```python
13489
- odb.plot_plate_element_stress(file_path: str='', stage_id: int=1, case_name: str='合计', show_increment: bool=False, envelop_type: int=1, stress_kind: int=0, component: int=1, show_number: bool=False, text_rotate: int=0, max_min_kind: int=1, show_deformed: bool=True, deformed_scale: float=1.0, deformed_actual: bool=False, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, show_undeformed: bool=False, position: int=1)
14284
+ odb.plot_plate_element_stress(file_path: Optional[str]='', stage_id: int=1, case_name: str='合计', show_increment: bool=False, envelop_type: int=1, stress_kind: int=0, component: int=1, show_number: bool=False, text_rotate: int=0, max_min_kind: int=1, show_deformed: bool=True, deformed_scale: float=1.0, deformed_actual: bool=False, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, show_undeformed: bool=False, position: int=1)
13490
14285
  ```
13491
14286
 
13492
- 绘制板单元结果图并保存到指定文件
14287
+ 绘制板单元结果图并返回 PNG Base64
13493
14288
 
13494
14289
  #### 参数
13495
14290
 
13496
- > file_path: 保存路径名
13497
- > component: 分量编号 1-Fxx 2-Fyy 3-Fxy 4-Mxx 5-Myy 6-Mxy
13498
- > stress_kind: 力类型 1-单元 2-节点平均
13499
- > case_name: 详细荷载工况名
13500
- > stage_id: 阶段编号
13501
- > envelop_type: 包络类型
13502
- > show_number: 是否显示数值
13503
- > show_deformed: 是否显示变形形状
13504
- > show_undeformed: 是否显示未变形形状
13505
- > deformed_actual: 是否显示实际变形
13506
- > deformed_scale: 变形比例
13507
- > show_legend: 是否显示图例
13508
- > text_rotate: 数值选项卡内文字旋转角度
13509
- > digital_count: 小数点位数
13510
- > text_exponential: 是否以指数形式显示
13511
- > max_min_kind: 最大最小值显示类型
13512
- > show_increment: 是否显示增量结果
13513
- > position: 位置 1-板顶 2-板底 3-绝对值最大
14291
+ > file_path (Optional[str]): 可选的被控端 PNG 完整保存路径,默认空字符串。
14292
+ > 省略、传 ``""`` 或 ``None`` 时不写文件,直接返回 PNG Base64;
14293
+ > 非空路径时同时在被控端保存文件,父目录须存在。
14294
+ > component (int): 分量编号 1-Fxx 2-Fyy 3-Fxy 4-Mxx 5-Myy 6-Mxy
14295
+ > stress_kind (int): 力类型 1-单元 2-节点平均
14296
+ > case_name (str): 详细荷载工况名
14297
+ > stage_id (int): 阶段编号
14298
+ > envelop_type (int): 包络类型
14299
+ > show_number (bool): 是否显示数值
14300
+ > show_deformed (bool): 是否显示变形形状
14301
+ > show_undeformed (bool): 是否显示未变形形状
14302
+ > deformed_actual (bool): 是否显示实际变形
14303
+ > deformed_scale (float): 变形比例
14304
+ > show_legend (bool): 是否显示图例
14305
+ > text_rotate (float): 数值选项卡内文字旋转角度
14306
+ > digital_count (int): 小数点位数
14307
+ > text_exponential (bool): 是否以指数形式显示
14308
+ > max_min_kind (int): 最大最小值显示类型
14309
+ > show_increment (bool): 是否显示增量结果
14310
+ > position (int): 位置 1-板顶 2-板底 3-绝对值最大
13514
14311
 
13515
14312
  #### 示例
13516
14313
 
13517
14314
  ```python
13518
14315
  from qtmodel import odb
13519
- odb.plot_plate_element_stress(file_path=r"D:\图片\板应力.png",component=1,case_name="CQ:成桥(合计)",stage_id=-1)
14316
+ image_base64 = odb.plot_plate_element_stress(component=1,case_name="CQ:成桥(合计)",stage_id=-1)
13520
14317
  ```
13521
14318
 
13522
14319
  #### 返回
13523
14320
 
13524
- > Base64字符串
14321
+ > str: PNG 二进制内容的纯 Base64 字符串,不含 data URI 前缀;
14322
+ > 可在控制端通过 base64.b64decode 解码显示或保存。
13525
14323
 
13526
14324
  ### `odb.plot_modal_result`
13527
14325
 
13528
14326
  源码:`qtmodel/odb/odb_result_plot.py` · `OdbResultPlot.plot_modal_result`
13529
14327
 
13530
14328
  ```python
13531
- odb.plot_modal_result(file_path: str='', mode: int=1, mode_kind: int=1, show_number: bool=True, text_rotate: float=0, max_min_kind: int=1, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, show_undeformed: bool=False)
14329
+ odb.plot_modal_result(file_path: Optional[str]='', mode: int=1, mode_kind: int=1, show_number: bool=True, text_rotate: float=0, max_min_kind: int=1, show_legend: bool=True, digital_count: int=3, text_exponential: bool=True, show_undeformed: bool=False)
13532
14330
  ```
13533
14331
 
13534
- 绘制模态结果,可选择自振模态和屈曲模态结果
14332
+ 绘制自振或屈曲模态图并返回 PNG Base64
13535
14333
 
13536
14334
  #### 参数
13537
14335
 
13538
- > file_path: 保存路径名
13539
- > mode: 模态号
13540
- > mode_kind: 1-自振模态 2-屈曲模态
13541
- > show_number: 是否显示数值
13542
- > show_undeformed: 是否显示未变形形状
13543
- > show_legend: 是否显示图例
13544
- > text_rotate: 数值选项卡内文字旋转角度
13545
- > digital_count: 小数点位数
13546
- > text_exponential: 是否以指数形式显示
13547
- > max_min_kind: 最大最小值显示类型
14336
+ > file_path (Optional[str]): 可选的被控端 PNG 完整保存路径,默认空字符串。
14337
+ > 省略、传 ``""`` 或 ``None`` 时不写文件,直接返回 PNG Base64;
14338
+ > 非空路径时同时在被控端保存文件,父目录须存在。
14339
+ > mode (int): 模态号
14340
+ > mode_kind (int): 1-自振模态 2-屈曲模态
14341
+ > show_number (bool): 是否显示数值
14342
+ > show_undeformed (bool): 是否显示未变形形状
14343
+ > show_legend (bool): 是否显示图例
14344
+ > text_rotate (float): 数值选项卡内文字旋转角度
14345
+ > digital_count (int): 小数点位数
14346
+ > text_exponential (bool): 是否以指数形式显示
14347
+ > max_min_kind (int): 最大最小值显示类型
13548
14348
 
13549
14349
  #### 示例
13550
14350
 
13551
14351
  ```python
13552
14352
  from qtmodel import odb
13553
- odb.plot_modal_result(file_path=r"D:\图片\自振模态.png",mode=1)
13554
- odb.plot_modal_result(file_path=r"D:\图片\屈曲模态.png",mode=1,mode_kind=2)
14353
+ image_base64 = odb.plot_modal_result(mode=1)
14354
+ image_base64 = odb.plot_modal_result(mode=1,mode_kind=2)
13555
14355
  ```
13556
14356
 
13557
14357
  #### 返回
13558
14358
 
13559
- > Base64字符串
14359
+ > str: PNG 二进制内容的纯 Base64 字符串,不含 data URI 前缀;
14360
+ > 可在控制端通过 base64.b64decode 解码显示或保存。
13560
14361
 
13561
14362
  ## `odb_view`
13562
14363
 
@@ -13756,26 +14557,29 @@ odb.reset_display()
13756
14557
  源码:`qtmodel/odb/odb_view.py` · `OdbView.save_png`
13757
14558
 
13758
14559
  ```python
13759
- odb.save_png(file_path: str)
14560
+ odb.save_png(file_path: Optional[str]='')
13760
14561
  ```
13761
14562
 
13762
- 将当前模型窗口保存为 PNG;路径为空时直接返回图像 Base64。
14563
+ 获取当前窗口 PNG 的 Base64,可选地在被控端保存文件。
13763
14564
 
13764
14565
  #### 参数
13765
14566
 
13766
- > file_path (str): PNG 完整路径;父目录应已存在。传 ``""`` 时不写盘,
13767
- > 返回当前窗口 PNG 的 Base64 字符串。
14567
+ > file_path (Optional[str]): 被控端的 PNG 完整保存路径,父目录应已存在。
14568
+ > 默认 ``""``;省略、传 ``""`` 或 ``None`` 时不写文件,直接返回
14569
+ > PNG Base64,适用于控制端与桥通不在同一台电脑的情况。
13768
14570
 
13769
14571
  #### 示例
13770
14572
 
13771
14573
  ```python
13772
14574
  from qtmodel import odb
14575
+ image_base64 = odb.save_png()
13773
14576
  odb.save_png(file_path="D:\QT\aa.png")
13774
14577
  ```
13775
14578
 
13776
14579
  #### 返回
13777
14580
 
13778
- > str: 非空路径时为服务端保存确认信息;空路径时为 PNG Base64 字符串。
14581
+ > str: 空路径时为 PNG 二进制内容的纯 Base64 字符串,不含
14582
+ > ``data:image/png;base64,`` 前缀;非空路径时保留原有保存确认信息。
13779
14583
 
13780
14584
  ### `odb.set_render`
13781
14585
 
@@ -13863,7 +14667,7 @@ odb.change_construct_stage(stage=1)
13863
14667
  odb.get_current_png()
13864
14668
  ```
13865
14669
 
13866
- 获取当前窗口 PNG 图像的 Base64 编码。
14670
+ 获取当前模型或结果窗口的 PNG Base64,无需指定保存路径。
13867
14671
 
13868
14672
  #### 参数
13869
14673
 
@@ -13873,12 +14677,16 @@ odb.get_current_png()
13873
14677
 
13874
14678
  ```python
13875
14679
  from qtmodel import odb
13876
- odb.get_current_png()
14680
+ import base64
14681
+ from pathlib import Path
14682
+ image_base64 = odb.get_current_png()
14683
+ Path("模型.png").write_bytes(base64.b64decode(image_base64, validate=True))
13877
14684
  ```
13878
14685
 
13879
14686
  #### 返回
13880
14687
 
13881
- > str: PNG 二进制内容的 Base64 字符串,通常不含文件路径。
14688
+ > str: PNG 二进制内容的纯 Base64 字符串,不含
14689
+ > ``data:image/png;base64,`` 前缀;可在控制端解码显示或保存。
13882
14690
 
13883
14691
  # CDB:结构检算
13884
14692
 
@@ -14100,51 +14908,39 @@ cdb.import_concrete_check_case(case_name="混凝土检算")
14100
14908
  源码:`qtmodel/cdb/cdb_concrete_check.py` · `CdbConcreteCheck.solve_concrete_check`
14101
14909
 
14102
14910
  ```python
14103
- cdb.solve_concrete_check(show_view: bool=False, modal: bool=True, auto_close: bool=True, read_timeout: int=600, wait: bool=False, poll_interval: float=2.0, max_wait: Optional[float]=None, status_read_timeout: int=30, sync: bool=False)
14911
+ cdb.solve_concrete_check(read_timeout: int=600, wait: bool=False, poll_interval: float=2.0, max_wait: Optional[float]=None, status_read_timeout: int=30)
14104
14912
  ```
14105
14913
 
14106
- 执行混凝土检算分析。
14914
+ 启动后台混凝土检算,默认显示非模态进度窗口。
14915
+ 用户可点击“终止分析”停止计算并关闭窗口;计算完成、失败或准备失败时窗口自动关闭。
14107
14916
 
14108
14917
  #### 参数
14109
14918
 
14110
- > show_view: 是否显示混凝土检算分析进度窗口。
14111
- > True - 显示分析进度窗口,并通过窗口执行/展示检算过程。
14112
- > False - 不显示分析进度窗口,直接执行混凝土检算分析。
14113
- >
14114
- > modal: 是否以模态窗口方式显示,仅当 show_view=True 时有效。
14115
- > True - 使用 ShowDialog 显示窗口,窗口关闭后才返回。
14116
- > False - 使用 Show 显示窗口,窗口显示后立即返回。
14117
- > auto_close: 计算完成后是否自动关闭分析窗口,仅当 show_view=True 时有效(默认自动关闭,手动关闭不及时可能影响程序运行)
14118
14919
  > read_timeout: 等待 Qt 后端响应的超时时间,单位为秒。
14119
14920
  > wait: 是否在 Python 侧轮询等待后台检算完成。False 时只启动任务并立即返回启动状态。
14120
14921
  > poll_interval: wait=True 时的轮询间隔,单位为秒。
14121
14922
  > max_wait: wait=True 时的最大等待时间,单位为秒;None 表示不限制。
14122
14923
  > status_read_timeout: 查询检算状态接口的超时时间,单位为秒。
14123
- > sync: 是否要求后端同步执行旧逻辑。长模型不推荐使用,可能再次触发 HTTP 502/超时。
14124
14924
 
14125
14925
  #### 示例
14126
14926
 
14127
14927
  ```python
14128
14928
  from qtmodel import cdb
14129
- # 启动后台混凝土检算,不显示分析窗口
14929
+ # 启动后台混凝土检算,自动显示可终止的非模态进度窗口
14130
14930
  cdb.solve_concrete_check()
14131
14931
  # 启动后轮询等待完成
14132
14932
  cdb.solve_concrete_check(wait=True, max_wait=1800)
14133
- # 显示分析窗口并执行混凝土检算
14134
- cdb.solve_concrete_check(show_view=True)
14135
- # 显示模态分析窗口,计算完成自动关闭,等待 1800 秒
14136
- cdb.solve_concrete_check(
14137
- show_view=True,
14138
- modal=True,
14139
- auto_close=True,
14140
- read_timeout=1800
14141
- )
14142
14933
  ```
14143
14934
 
14144
14935
  #### 返回
14145
14936
 
14146
14937
  > wait=False 时返回启动状态;wait=True 时返回最终状态。
14147
14938
 
14939
+ #### 异常
14940
+
14941
+ > RuntimeError: wait=True 时检算失败或用户终止分析。
14942
+ > TimeoutError: wait=True 时等待超过 max_wait;超时不会自动取消后端计算。
14943
+
14148
14944
  ### `cdb.get_concrete_check_solve_status`
14149
14945
 
14150
14946
  源码:`qtmodel/cdb/cdb_concrete_check.py` · `CdbConcreteCheck.get_concrete_check_solve_status`
@@ -14911,13 +15707,29 @@ cdb.update_element_table_info(element_info: Optional[list[float]]=None)
14911
15707
 
14912
15708
  #### 参数
14913
15709
 
14914
- > element_info: 单个单元基本信息行
15710
+ > element_info: 长度固定为12的单个单元基本信息行,不能为空;各项顺序如下
15711
+ > (方括号内为从0开始的Python列表下标):
15712
+ > [0] 单元号,必须为单元基本信息表中已有的单元编号。
15713
+ > [1] 混凝土材料号,引用检算材料表中已有的混凝土材料。
15714
+ > [2] I端截面号,引用检算截面表中已有的截面。
15715
+ > [3] J端截面号,引用检算截面表中已有的截面。
15716
+ > [4] I端Y向(竖向)箍筋号,引用已有的箍筋编号。
15717
+ > [5] I端X向(横向)箍筋号,引用已有的箍筋编号。
15718
+ > [6] J端Y向(竖向)箍筋号,引用已有的箍筋编号。
15719
+ > [7] J端X向(横向)箍筋号,引用已有的箍筋编号。
15720
+ > [8] I端计算长度Ly,单位m。
15721
+ > [9] I端计算长度Lz,单位m。
15722
+ > [10] J端计算长度Ly,单位m。
15723
+ > [11] J端计算长度Lz,单位m。
15724
+ > 前8项必须为整数值,单元号和混凝土材料号必须大于0;后4项为计算长度数值。
15725
+ > 本方法将12项整行写入已有单元,不新增单元;计算长度传0会写入0,不表示保留原值。
14915
15726
 
14916
15727
  #### 示例
14917
15728
 
14918
15729
  ```python
14919
15730
  from qtmodel import cdb
14920
- cdb.update_element_table_info(element_info=[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0])
15731
+ # 单元1、混凝土材料1;I/J端截面均为3,四个箍筋号均为1,四个计算长度均为0m。
15732
+ cdb.update_element_table_info(element_info=[1, 1, 3, 3, 1, 1, 1, 1, 0, 0, 0, 0])
14921
15733
  ```
14922
15734
 
14923
15735
  #### 返回
@@ -15952,7 +16764,9 @@ cdb.add_parameter_reinforcement(sec_id: int, position: int=0, has_outer: bool=Tr
15952
16764
  #### 参数
15953
16765
 
15954
16766
  > sec_id: 截面编号
15955
- > position: 变截面专用参数 0-I端 1-J端
16767
+ > position: 截面端部位置,只允许0或1,默认0;0表示变截面I端,1表示变截面J端。
16768
+ > 等截面不区分端部,通常传0;tapper_sec_group=True时操作由
16769
+ > tapper_interpolation_id指定的插值截面,position不用于选择插值位置,通常传0。
15956
16770
  > has_outer: 是否包含外侧配筋
15957
16771
  > has_inner: 是否包含内侧配筋
15958
16772
  > outer_type: 外侧配筋类型 0-按照间距 1-按照数量
@@ -15987,7 +16801,9 @@ cdb.add_part_parameter_reinforcement(sec_id: int, position: int=0, base_line_id:
15987
16801
  #### 参数
15988
16802
 
15989
16803
  > sec_id: 截面编号
15990
- > position: 布置位置类型
16804
+ > position: 截面端部位置,只允许0或1,默认0;0表示变截面I端,1表示变截面J端。
16805
+ > 等截面不区分端部,通常传0;tapper_sec_group=True时操作由
16806
+ > tapper_interpolation_id指定的插值截面,position不用于选择插值位置,通常传0。
15991
16807
  > base_line_id: 由截面分段生成的基准线号,从 1 开始。
15992
16808
  > distribution_type: 分布方式,0-按间距分布,1-按数量分布。
15993
16809
  > direction_type: 布置方向,0-向内布置,1-向外布置。
@@ -16026,7 +16842,8 @@ cdb.remove_part_parameter_reinforcement(sec_id: int, position: int=0, base_line_
16026
16842
  #### 参数
16027
16843
 
16028
16844
  > sec_id: 截面号。
16029
- > position: 截面位置,变截面时 0-I 端,1-J 端。
16845
+ > position: 截面端部位置,只允许0或1,默认0;0表示变截面I端,1表示变截面J端。
16846
+ > 等截面不区分端部,通常传0。
16030
16847
  > base_line_id: 基准线号。小于 0 时删除该截面全部局部参数化钢筋。
16031
16848
 
16032
16849
  #### 示例
@@ -16053,7 +16870,9 @@ cdb.add_reinforcement_by_point(sec_id: int, position: int=0, bar_data: Optional[
16053
16870
  #### 参数
16054
16871
 
16055
16872
  > sec_id: 截面编号
16056
- > position: 布置位置类型
16873
+ > position: 截面端部位置,只允许0或1,默认0;0表示变截面I端,1表示变截面J端。
16874
+ > 等截面不区分端部,通常传0;tapper_sec_group=True时操作由
16875
+ > tapper_interpolation_id指定的插值截面,position不用于选择插值位置,通常传0。
16057
16876
  > bar_data: 钢筋数据列表,格式为 [(x, y, 直径, 材料号)]
16058
16877
  > tapper_sec_group: 是否操作变截面组中的插值截面;为 True 时 sec_id 表示变截面组编号。
16059
16878
  > tapper_interpolation_id: 变截面组中的插值截面编号,从 1 开始;tapper_sec_group=True 时必填。
@@ -16063,7 +16882,9 @@ cdb.add_reinforcement_by_point(sec_id: int, position: int=0, bar_data: Optional[
16063
16882
 
16064
16883
  ```python
16065
16884
  from qtmodel import cdb
16066
- cdb.add_reinforcement_by_point(sec_id=1, bar_data=[(0, 0, 20, 1)])
16885
+ cdb.add_reinforcement_by_point(sec_id=1, position=0, bar_data=[(0, 0, 20, 1)])
16886
+ # sec_id=2为变截面编号时,向其J端截面添加钢筋。
16887
+ cdb.add_reinforcement_by_point(sec_id=2, position=1, bar_data=[(0, 0, 20, 1)])
16067
16888
  ```
16068
16889
 
16069
16890
  #### 返回
@@ -16083,7 +16904,8 @@ cdb.update_reinforcement_by_point(sec_id: int, position: int=0, bar_data: Option
16083
16904
  #### 参数
16084
16905
 
16085
16906
  > sec_id: 截面号。
16086
- > position: 截面位置,变截面时 0-I 端,1-J 端。
16907
+ > position: 截面端部位置,只允许0或1,默认0;0表示变截面I端,1表示变截面J端。
16908
+ > 等截面不区分端部,通常传0。
16087
16909
  > bar_data: 钢筋点列表,格式为 [(x, y, 直径, 材料号)]。
16088
16910
 
16089
16911
  #### 示例
@@ -16097,6 +16919,31 @@ cdb.update_reinforcement_by_point(sec_id=1, bar_data=[(0, 0, 20, 1)])
16097
16919
 
16098
16920
  > QtServer.send_dict 的返回值
16099
16921
 
16922
+ ### `cdb.remove_section_reinforcement`
16923
+
16924
+ 源码:`qtmodel/cdb/cdb_concrete_check.py` · `CdbConcreteCheck.remove_section_reinforcement`
16925
+
16926
+ ```python
16927
+ cdb.remove_section_reinforcement(sec_id: int, position: int=0)
16928
+ ```
16929
+
16930
+ 删除截面的全部纵向配筋。
16931
+
16932
+ #### 参数
16933
+
16934
+ > sec_id: 截面编号。
16935
+ > position: 变截面端部,0 为 I 端、1 为 J 端;等截面通常传 0。
16936
+ >
16937
+ > 对应后端已注册的 REMOVE-SECTION-REINFORCEMENT 接口。
16938
+ > 该接口不支持变截面组中的插值截面。
16939
+
16940
+ #### 示例
16941
+
16942
+ ```python
16943
+ from qtmodel import cdb
16944
+ result = cdb.remove_section_reinforcement(sec_id=...)
16945
+ ```
16946
+
16100
16947
  ### `cdb.add_check_stirrup`
16101
16948
 
16102
16949
  源码:`qtmodel/cdb/cdb_concrete_check.py` · `CdbConcreteCheck.add_check_stirrup`