qtmodel 0.8.1__tar.gz → 0.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.

Potentially problematic release.


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

@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qtmodel
3
- Version: 0.8.1
3
+ Version: 0.9.3
4
4
  Summary: python modeling for qt 2025-06-30
5
5
  Home-page: https://github.com/Inface0443/pyqt
6
6
  Author: dqy-zhj
@@ -12,7 +12,7 @@ Classifier: Programming Language :: Python :: 3
12
12
  Classifier: Operating System :: OS Independent
13
13
  Description-Content-Type: text/markdown
14
14
 
15
- > 最新版本 V0.8.1 - 2025-06-30
15
+ > 最新版本 V0.9.3 - 2025-06-30
16
16
  > pip install --upgrade qtmodel -i https://pypi.org/simple
17
17
  - 新增更新结构组接口
18
18
  # 建模操作
@@ -1742,6 +1742,31 @@ mdb.remove_live_load_case(index=1)
1742
1742
  ```
1743
1743
  Returns: 无
1744
1744
  ## 动力荷载操作
1745
+ ### add_vehicle_dynamic_load
1746
+ 添加列车动力荷载
1747
+ > 参数:
1748
+ > node_ids: 节点纵列节点编号集合,支持XtoYbyN形式字符串
1749
+ > function_name: 函数名
1750
+ > case_name: 工况名
1751
+ > kind: 类型 1-ZK型车辆 2-动车组
1752
+ > speed_kmh: 列车速度(km/h)
1753
+ > braking: 是否考虑制动
1754
+ > braking_a: 制动加速度(m/s²)
1755
+ > braking_d: 制动时车头位置(m)
1756
+ > time: 上桥时间(s)
1757
+ > direction: 荷载方向 1-X 2-Y 3-Z 4-负X 5-负Y 6-负Z
1758
+ > gap: 加载间距(m)
1759
+ > factor: 放大系数
1760
+ > vehicle_info_kn: 车辆参数,参数为空时则选取界面默认值,注意单位输入单位为KN
1761
+ > ZK型车辆: [dW1,dW2,P1,P2,P3,P4,dD1,dD2,D1,D2,D3,LoadLength]
1762
+ > 动力组: [L1,L2,L3,P,N]
1763
+ ```Python
1764
+ # 示例代码
1765
+ from qtmodel import *
1766
+ mdb.add_vehicle_dynamic_load("1to100",function_name="时程函数名",case_name="时程工况名",kind=1,speed_kmh=120,time=10)
1767
+ mdb.add_vehicle_dynamic_load([1,2,3,4,5,6,7],function_name="时程函数名",case_name="时程工况名",kind=1,speed_kmh=120,time=10)
1768
+ ```
1769
+ Returns:无
1745
1770
  ### add_load_to_mass
1746
1771
  添加荷载转为质量
1747
1772
  > 参数:
@@ -4012,11 +4037,11 @@ Returns: 包含信息为list[dict] or dict
4012
4037
  ### get_element_type
4013
4038
  获取单元类型
4014
4039
  > 参数:
4015
- > ele_id: 单元号
4040
+ > element_id: 单元号
4016
4041
  ```Python
4017
4042
  # 示例代码
4018
4043
  from qtmodel import *
4019
- odb.get_element_type(ele_id=1) # 获取1号单元类型
4044
+ odb.get_element_type(element_id=1) # 获取1号单元类型
4020
4045
  ```
4021
4046
  Returns: str
4022
4047
  ### get_beam_element
@@ -4148,7 +4173,7 @@ Returns: 包含信息为list[dict]
4148
4173
  from qtmodel import *
4149
4174
  odb.get_elastic_link_data()
4150
4175
  ```
4151
- Returns: 包含信息为list[dict]或 dict
4176
+ Returns: 包含信息为list[dict]
4152
4177
  ### get_elastic_support_data
4153
4178
  获取弹性支承信息
4154
4179
  > 参数:
@@ -4158,7 +4183,7 @@ Returns: 包含信息为list[dict]或 dict
4158
4183
  from qtmodel import *
4159
4184
  odb.get_elastic_support_data()
4160
4185
  ```
4161
- Returns: 包含信息为list[dict]或 dict
4186
+ Returns: 包含信息为list[dict]
4162
4187
  ### get_master_slave_link_data
4163
4188
  获取主从连接信息
4164
4189
  > 参数:
@@ -4168,7 +4193,7 @@ Returns: 包含信息为list[dict]或 dict
4168
4193
  from qtmodel import *
4169
4194
  odb.get_master_slave_link_data()
4170
4195
  ```
4171
- Returns: 包含信息为list[dict]或 dict
4196
+ Returns: 包含信息为list[dict]
4172
4197
  ### get_node_local_axis_data
4173
4198
  获取节点坐标信息
4174
4199
  > 参数:
@@ -4197,7 +4222,17 @@ Returns: 包含信息为list[dict]或 dict
4197
4222
  from qtmodel import *
4198
4223
  odb.get_constraint_equation_data()
4199
4224
  ```
4200
- Returns: 包含信息为list[dict]或 dict
4225
+ Returns: 包含信息为list[dict]
4226
+ ### get_effective_width
4227
+ 获取有效宽度数据
4228
+ > 参数:
4229
+ > group_name:边界组
4230
+ ```Python
4231
+ # 示例代码
4232
+ from qtmodel import *
4233
+ odb.get_effective_width(group_name="边界组1")
4234
+ ```
4235
+ Returns: list[dict]
4201
4236
  ## 获取施工阶段信息
4202
4237
  ### get_stage_name
4203
4238
  获取所有施工阶段名称
@@ -1,4 +1,4 @@
1
- > 最新版本 V0.8.1 - 2025-06-30
1
+ > 最新版本 V0.9.3 - 2025-06-30
2
2
  > pip install --upgrade qtmodel -i https://pypi.org/simple
3
3
  - 新增更新结构组接口
4
4
  # 建模操作
@@ -1728,6 +1728,31 @@ mdb.remove_live_load_case(index=1)
1728
1728
  ```
1729
1729
  Returns: 无
1730
1730
  ## 动力荷载操作
1731
+ ### add_vehicle_dynamic_load
1732
+ 添加列车动力荷载
1733
+ > 参数:
1734
+ > node_ids: 节点纵列节点编号集合,支持XtoYbyN形式字符串
1735
+ > function_name: 函数名
1736
+ > case_name: 工况名
1737
+ > kind: 类型 1-ZK型车辆 2-动车组
1738
+ > speed_kmh: 列车速度(km/h)
1739
+ > braking: 是否考虑制动
1740
+ > braking_a: 制动加速度(m/s²)
1741
+ > braking_d: 制动时车头位置(m)
1742
+ > time: 上桥时间(s)
1743
+ > direction: 荷载方向 1-X 2-Y 3-Z 4-负X 5-负Y 6-负Z
1744
+ > gap: 加载间距(m)
1745
+ > factor: 放大系数
1746
+ > vehicle_info_kn: 车辆参数,参数为空时则选取界面默认值,注意单位输入单位为KN
1747
+ > ZK型车辆: [dW1,dW2,P1,P2,P3,P4,dD1,dD2,D1,D2,D3,LoadLength]
1748
+ > 动力组: [L1,L2,L3,P,N]
1749
+ ```Python
1750
+ # 示例代码
1751
+ from qtmodel import *
1752
+ mdb.add_vehicle_dynamic_load("1to100",function_name="时程函数名",case_name="时程工况名",kind=1,speed_kmh=120,time=10)
1753
+ mdb.add_vehicle_dynamic_load([1,2,3,4,5,6,7],function_name="时程函数名",case_name="时程工况名",kind=1,speed_kmh=120,time=10)
1754
+ ```
1755
+ Returns:无
1731
1756
  ### add_load_to_mass
1732
1757
  添加荷载转为质量
1733
1758
  > 参数:
@@ -3998,11 +4023,11 @@ Returns: 包含信息为list[dict] or dict
3998
4023
  ### get_element_type
3999
4024
  获取单元类型
4000
4025
  > 参数:
4001
- > ele_id: 单元号
4026
+ > element_id: 单元号
4002
4027
  ```Python
4003
4028
  # 示例代码
4004
4029
  from qtmodel import *
4005
- odb.get_element_type(ele_id=1) # 获取1号单元类型
4030
+ odb.get_element_type(element_id=1) # 获取1号单元类型
4006
4031
  ```
4007
4032
  Returns: str
4008
4033
  ### get_beam_element
@@ -4134,7 +4159,7 @@ Returns: 包含信息为list[dict]
4134
4159
  from qtmodel import *
4135
4160
  odb.get_elastic_link_data()
4136
4161
  ```
4137
- Returns: 包含信息为list[dict]或 dict
4162
+ Returns: 包含信息为list[dict]
4138
4163
  ### get_elastic_support_data
4139
4164
  获取弹性支承信息
4140
4165
  > 参数:
@@ -4144,7 +4169,7 @@ Returns: 包含信息为list[dict]或 dict
4144
4169
  from qtmodel import *
4145
4170
  odb.get_elastic_support_data()
4146
4171
  ```
4147
- Returns: 包含信息为list[dict]或 dict
4172
+ Returns: 包含信息为list[dict]
4148
4173
  ### get_master_slave_link_data
4149
4174
  获取主从连接信息
4150
4175
  > 参数:
@@ -4154,7 +4179,7 @@ Returns: 包含信息为list[dict]或 dict
4154
4179
  from qtmodel import *
4155
4180
  odb.get_master_slave_link_data()
4156
4181
  ```
4157
- Returns: 包含信息为list[dict]或 dict
4182
+ Returns: 包含信息为list[dict]
4158
4183
  ### get_node_local_axis_data
4159
4184
  获取节点坐标信息
4160
4185
  > 参数:
@@ -4183,7 +4208,17 @@ Returns: 包含信息为list[dict]或 dict
4183
4208
  from qtmodel import *
4184
4209
  odb.get_constraint_equation_data()
4185
4210
  ```
4186
- Returns: 包含信息为list[dict]或 dict
4211
+ Returns: 包含信息为list[dict]
4212
+ ### get_effective_width
4213
+ 获取有效宽度数据
4214
+ > 参数:
4215
+ > group_name:边界组
4216
+ ```Python
4217
+ # 示例代码
4218
+ from qtmodel import *
4219
+ odb.get_effective_width(group_name="边界组1")
4220
+ ```
4221
+ Returns: list[dict]
4187
4222
  ## 获取施工阶段信息
4188
4223
  ### get_stage_name
4189
4224
  获取所有施工阶段名称
@@ -1,43 +1,6 @@
1
1
  import math
2
2
 
3
3
 
4
- class DataHelper:
5
- @staticmethod
6
- def parsing(str_list: list[str]) -> list[int]:
7
- """
8
- 将字符串转为列表
9
- Args:
10
- str_list:字符串列表,1to10by2形式
11
- Return:
12
- list[int]
13
- """
14
- res_list = []
15
- for s in str_list:
16
- if 'by' in s:
17
- # 确保有 'to'
18
- if 'to' not in s:
19
- raise ValueError("If 'by' is present, 'to' must also be present.")
20
- # 解析 'to' 和 'by'
21
- to_index = s.index('to')
22
- by_index = s.index('by')
23
-
24
- start = int(s[:to_index])
25
- end = int(s[to_index + 2:by_index])
26
- step = int(s[by_index + 2:])
27
- res_list.extend(list(range(start, end + 1, step)))
28
- # 检查是否有 'to'
29
- elif 'to' in s:
30
- to_index = s.index('to')
31
- start = int(s[:to_index])
32
- end = int(s[to_index + 2:])
33
-
34
- res_list.extend(list(range(start, end + 1)))
35
- # 如果只有数字
36
- else:
37
- res_list.extend([int(s)])
38
- return res_list
39
-
40
-
41
4
  class Node:
42
5
  def __init__(self, node_id: int, x: float, y: float, z: float):
43
6
  """
@@ -1574,3 +1537,38 @@ class ElasticBucklingResult:
1574
1537
 
1575
1538
  def __repr__(self):
1576
1539
  return self.__str__()
1540
+
1541
+
1542
+ class EffectiveWidth:
1543
+ """
1544
+ 用于获取当前有效宽度数据
1545
+ """
1546
+
1547
+ def __init__(self, index: int, element_id: int, iy_i: float, iy_j: float,
1548
+ factor_i: float, factor_j: float, dz_i: float, dz_j: float, group_name: str):
1549
+ self.index = index
1550
+ self.element_id = element_id
1551
+ self.iy_i = iy_i # 考虑剪力滞效应后截面Iy
1552
+ self.iy_j = iy_j
1553
+ self.factor_i = factor_i # I端截面Iy折减系数
1554
+ self.factor_j = factor_j # J端截面Iy折减系数
1555
+ self.dz_i = dz_i # I端截面形心变换量
1556
+ self.dz_j = dz_j # J端截面形心变换量
1557
+ self.group_name = group_name # 边界组名
1558
+
1559
+ def __str__(self):
1560
+ obj_dict = {
1561
+ 'index': self.index,
1562
+ 'element_id': self.element_id,
1563
+ 'iy_i': self.iy_i,
1564
+ 'iy_j': self.iy_j,
1565
+ 'factor_i': self.factor_i,
1566
+ 'factor_j': self.factor_j,
1567
+ 'dz_i': self.dz_i,
1568
+ 'dz_j': self.dz_j,
1569
+ 'group_name': self.group_name,
1570
+ }
1571
+ return obj_dict
1572
+
1573
+ def __repr__(self):
1574
+ return self.__str__()
@@ -1487,8 +1487,8 @@ class Mdb:
1487
1487
  charm_right: list[str] = None,
1488
1488
  box_num: int = 3,
1489
1489
  box_height: float = 2,
1490
- box_other_info:dict[str, list[float]]=None,
1491
- box_other_right:dict[str, list[float]]=None,
1490
+ box_other_info: dict[str, list[float]] = None,
1491
+ box_other_right: dict[str, list[float]] = None,
1492
1492
  mat_combine: list[float] = None,
1493
1493
  rib_info: dict[str, list[float]] = None,
1494
1494
  rib_place: list[tuple[int, int, float, str, int, str]] = None,
@@ -1548,7 +1548,7 @@ class Mdb:
1548
1548
  symmetry=symmetry, boxNum=box_num, boxHeight=box_height, charmRight=charm_right, secRight=sec_right,
1549
1549
  biasType=bias_type, centerType=center_type, shearConsider=shear_consider,
1550
1550
  biasX=bias_x, biasY=bias_y, secProperty=sec_property,
1551
- boxOtherInfo=box_other_info,boxOtherRight=box_other_right)
1551
+ boxOtherInfo=box_other_info, boxOtherRight=box_other_right)
1552
1552
  elif sec_type == "工字钢梁" or sec_type == "箱型钢梁":
1553
1553
  qt_model.AddSection(id=index, name=name, secType=sec_type, secInfo=sec_info,
1554
1554
  ribInfo=rib_info, ribPlace=rib_place, biasType=bias_type, centerType=center_type,
@@ -2740,6 +2740,52 @@ class Mdb:
2740
2740
  # endregion
2741
2741
 
2742
2742
  # region 动力荷载操作
2743
+ @staticmethod
2744
+ def add_vehicle_dynamic_load(node_ids=None, function_name: str = "", case_name: str = "", kind: int = 1,
2745
+ speed_kmh: float = 120, braking: bool = False, braking_a: float = 0.8,
2746
+ braking_d: float = 0, time: float = 0, direction: int = 6, gap: float = 14,
2747
+ factor: float = 1, vehicle_info_kn: list[float] = None) -> None:
2748
+ """
2749
+ 添加列车动力荷载
2750
+ Args:
2751
+ node_ids: 节点纵列节点编号集合,支持XtoYbyN形式字符串
2752
+ function_name: 函数名
2753
+ case_name: 工况名
2754
+ kind: 类型 1-ZK型车辆 2-动车组
2755
+ speed_kmh: 列车速度(km/h)
2756
+ braking: 是否考虑制动
2757
+ braking_a: 制动加速度(m/s²)
2758
+ braking_d: 制动时车头位置(m)
2759
+ time: 上桥时间(s)
2760
+ direction: 荷载方向 1-X 2-Y 3-Z 4-负X 5-负Y 6-负Z
2761
+ gap: 加载间距(m)
2762
+ factor: 放大系数
2763
+ vehicle_info_kn: 车辆参数,参数为空时则选取界面默认值,注意单位输入单位为KN
2764
+ ZK型车辆: [dW1,dW2,P1,P2,P3,P4,dD1,dD2,D1,D2,D3,LoadLength]
2765
+ 动力组: [L1,L2,L3,P,N]
2766
+ Example:
2767
+ mdb.add_vehicle_dynamic_load("1to100",function_name="时程函数名",case_name="时程工况名",kind=1,speed_kmh=120,time=10)
2768
+ mdb.add_vehicle_dynamic_load([1,2,3,4,5,6,7],function_name="时程函数名",case_name="时程工况名",kind=1,speed_kmh=120,time=10)
2769
+ Returns:无
2770
+ """
2771
+ try:
2772
+ qt_model.AddVehicleDynamicLoad(
2773
+ nodeIds=node_ids,
2774
+ functionName=function_name,
2775
+ caseName=case_name,
2776
+ kind=kind,
2777
+ speedKmh=speed_kmh,
2778
+ braking=braking,
2779
+ brakingA=braking_a,
2780
+ brakingD=braking_d,
2781
+ time=time,
2782
+ direction=direction,
2783
+ gap=gap,
2784
+ factor=factor,
2785
+ vehicleInfoKn=vehicle_info_kn)
2786
+ except Exception as ex:
2787
+ raise Exception(ex)
2788
+
2743
2789
  @staticmethod
2744
2790
  def add_load_to_mass(name: str, factor: float = 1):
2745
2791
  """
@@ -5036,7 +5082,8 @@ class Mdb:
5036
5082
 
5037
5083
  # region 荷载组合操作
5038
5084
  @staticmethod
5039
- def add_load_combine(index:int = -1, name: str = "", combine_type: int = 1, describe: str = "", combine_info: list[tuple[str, str, float]] = None):
5085
+ def add_load_combine(index: int = -1, name: str = "", combine_type: int = 1, describe: str = "",
5086
+ combine_info: list[tuple[str, str, float]] = None):
5040
5087
  """
5041
5088
  添加荷载组合
5042
5089
  Args:
@@ -5059,7 +5106,7 @@ class Mdb:
5059
5106
  raise Exception(ex)
5060
5107
 
5061
5108
  @staticmethod
5062
- def remove_load_combine(index :int = -1,name: str = ""):
5109
+ def remove_load_combine(index: int = -1, name: str = ""):
5063
5110
  """
5064
5111
  删除荷载组合
5065
5112
  Args:
@@ -5070,7 +5117,7 @@ class Mdb:
5070
5117
  Returns: 无
5071
5118
  """
5072
5119
  try:
5073
- qt_model.RemoveLoadCombine(index=index,name=name)
5120
+ qt_model.RemoveLoadCombine(index=index, name=name)
5074
5121
  except Exception as ex:
5075
5122
  raise Exception(ex)
5076
5123
 
@@ -1,7 +1,6 @@
1
1
  import json
2
2
  from __main__ import qt_model
3
3
  from .qt_db import *
4
- from typing import Union, List
5
4
 
6
5
 
7
6
  class Odb:
@@ -82,7 +81,7 @@ class Odb:
82
81
  raise Exception(ex)
83
82
 
84
83
  @staticmethod
85
- def activate_structure(node_ids = None, element_ids = None):
84
+ def activate_structure(node_ids=None, element_ids=None):
86
85
  """
87
86
  激活指定阶段和单元,默认激活所有
88
87
  Args:
@@ -399,7 +398,7 @@ class Odb:
399
398
  raise Exception(ex)
400
399
 
401
400
  @staticmethod
402
- def get_concurrent_force(ids= None, case_name: str = ""):
401
+ def get_concurrent_force(ids=None, case_name: str = ""):
403
402
  """
404
403
  获取单元并发内力
405
404
  Args:
@@ -457,11 +456,11 @@ class Odb:
457
456
  Returns: 返回弹性连接内力列表list[dict] 或 dict(单一结果)
458
457
  """
459
458
  try:
460
- bf_list= qt_model.GetElasticLinkForce(ids=ids,resultKind=result_kind,stageId=stage_id,
461
- envelopType=envelop_type,incrementType=increment_type,caseName=case_name)
459
+ bf_list = qt_model.GetElasticLinkForce(ids=ids, resultKind=result_kind, stageId=stage_id,
460
+ envelopType=envelop_type, incrementType=increment_type, caseName=case_name)
462
461
  list_res = []
463
462
  for item in bf_list:
464
- force = [item.Force.Dx, item.Force.Dy, item.Force.Dz,item.Force.Rx, item.Force.Ry, item.Force.Rz]
463
+ force = [item.Force.Dx, item.Force.Dy, item.Force.Dz, item.Force.Rx, item.Force.Ry, item.Force.Rz]
465
464
  list_res.append(str(ElasticLinkForce(item.NodeId, force)))
466
465
  return list_res if len(list_res) > 1 else list_res[0]
467
466
  except Exception as ex:
@@ -483,8 +482,8 @@ class Odb:
483
482
  Returns: 返回约束方程内力列表list[dict] 或 dict(单一结果)
484
483
  """
485
484
  try:
486
- bf_list= qt_model.GetConstrainEquationForce(ids=ids,resultKind=result_kind, stageId=stage_id,
487
- envelopType=envelop_type,incrementType=increment_type,caseName=case_name)
485
+ bf_list = qt_model.GetConstrainEquationForce(ids=ids, resultKind=result_kind, stageId=stage_id,
486
+ envelopType=envelop_type, incrementType=increment_type, caseName=case_name)
488
487
  list_res = []
489
488
  for item in bf_list:
490
489
  force = [item.Force.Dx, item.Force.Dy, item.Force.Dz, item.Force.Rx, item.Force.Ry, item.Force.Rz]
@@ -506,11 +505,11 @@ class Odb:
506
505
  Returns: 返回无应力索长列表list[dict] 或 dict(单一结果)
507
506
  """
508
507
  try:
509
- bf_list= qt_model.GetCableElementLength(ids=ids,stageId=stage_id,incrementType=increment_type)
508
+ bf_list = qt_model.GetCableElementLength(ids=ids, stageId=stage_id, incrementType=increment_type)
510
509
  list_res = []
511
510
  for item in bf_list:
512
- list_res.append(str(CableLengthResult(item.ElementId, item.UnstressedLength,item.CosAXi,item.CosAYi,item.CosAZi,
513
- item.CosAXj,item.CosAYj,item.CosAZj,item.Dx,item.Dy,item.Dz)))
511
+ list_res.append(str(CableLengthResult(item.ElementId, item.UnstressedLength, item.CosAXi, item.CosAYi, item.CosAZi,
512
+ item.CosAXj, item.CosAYj, item.CosAZj, item.Dx, item.Dy, item.Dz)))
514
513
  return list_res if len(list_res) > 1 else list_res[0]
515
514
  except Exception as ex:
516
515
  raise Exception(ex)
@@ -1405,7 +1404,7 @@ class Odb:
1405
1404
  raise Exception(ex)
1406
1405
 
1407
1406
  @staticmethod
1408
- def get_element_data(ids = None):
1407
+ def get_element_data(ids=None):
1409
1408
  """
1410
1409
  获取单元信息
1411
1410
  Args:
@@ -1443,17 +1442,17 @@ class Odb:
1443
1442
  raise Exception(ex)
1444
1443
 
1445
1444
  @staticmethod
1446
- def get_element_type(ele_id: int) -> str:
1445
+ def get_element_type(element_id: int) -> str:
1447
1446
  """
1448
1447
  获取单元类型
1449
1448
  Args:
1450
- ele_id: 单元号
1449
+ element_id: 单元号
1451
1450
  Example:
1452
- odb.get_element_type(ele_id=1) # 获取1号单元类型
1451
+ odb.get_element_type(element_id=1) # 获取1号单元类型
1453
1452
  Returns: str
1454
1453
  """
1455
1454
  try:
1456
- return qt_model.GetElementType(ele_id)
1455
+ return qt_model.GetElementType(element_id)
1457
1456
  except Exception as ex:
1458
1457
  raise Exception(ex)
1459
1458
 
@@ -1730,7 +1729,7 @@ class Odb:
1730
1729
  group_name:默认输出所有边界组信息
1731
1730
  Example:
1732
1731
  odb.get_elastic_link_data()
1733
- Returns: 包含信息为list[dict]或 dict
1732
+ Returns: 包含信息为list[dict]
1734
1733
  """
1735
1734
  try:
1736
1735
  res_list = []
@@ -1745,7 +1744,7 @@ class Odb:
1745
1744
  start_id=data.StartNode.Id, end_id=data.EndNode.Id, beta_angle=data.Beta,
1746
1745
  boundary_info=(data.Kx, data.Ky, data.Kz, data.Krx, data.Kry, data.Krz),
1747
1746
  group_name=group, dis_ratio=data.DistanceRatio, kx=data.Kx)))
1748
- return res_list if len(res_list) > 1 else res_list[0]
1747
+ return res_list
1749
1748
  except Exception as ex:
1750
1749
  raise Exception(ex)
1751
1750
 
@@ -1757,7 +1756,7 @@ class Odb:
1757
1756
  group_name:默认输出所有边界组信息
1758
1757
  Example:
1759
1758
  odb.get_elastic_support_data()
1760
- Returns: 包含信息为list[dict]或 dict
1759
+ Returns: 包含信息为list[dict]
1761
1760
  """
1762
1761
  try:
1763
1762
  res_list = []
@@ -1771,7 +1770,7 @@ class Odb:
1771
1770
  res_list.append(str(ElasticSupport(support_id=data.Id, node_id=data.Node.Id, support_type=int(data.Type) + 1,
1772
1771
  boundary_info=(data.Kx, data.Ky, data.Kz, data.Krx, data.Kry, data.Krz),
1773
1772
  group_name=group, node_system=int(data.NodalCoordinateSystem))))
1774
- return res_list if len(res_list) > 1 else res_list[0]
1773
+ return res_list
1775
1774
  except Exception as ex:
1776
1775
  raise Exception(ex)
1777
1776
 
@@ -1783,7 +1782,7 @@ class Odb:
1783
1782
  group_name:默认输出所有边界组信息
1784
1783
  Example:
1785
1784
  odb.get_master_slave_link_data()
1786
- Returns: 包含信息为list[dict]或 dict
1785
+ Returns: 包含信息为list[dict]
1787
1786
  """
1788
1787
  try:
1789
1788
  res_list = []
@@ -1798,7 +1797,7 @@ class Odb:
1798
1797
  boundary_info=(data.IsFixedX, data.IsFixedY, data.IsFixedZ,
1799
1798
  data.IsFixedRx, data.IsFixedRy, data.IsFixedRZ),
1800
1799
  group_name=group)))
1801
- return res_list if len(res_list) > 1 else res_list[0]
1800
+ return res_list
1802
1801
  except Exception as ex:
1803
1802
  raise Exception(ex)
1804
1803
 
@@ -1846,7 +1845,7 @@ class Odb:
1846
1845
  info_j = (
1847
1846
  not data.IsJFreedX, not data.IsJFreedY, not data.IsJFreedZ, not data.IsJFreedRx, not data.IsJFreedRy, not data.IsJFreedRZ)
1848
1847
  res_list.append(str(BeamConstraint(constraint_id=data.Id, beam_id=data.Beam.Id, info_i=info_i, info_j=info_j, group_name=group)))
1849
- return res_list if len(res_list) > 1 else res_list[0]
1848
+ return res_list
1850
1849
  except Exception as ex:
1851
1850
  raise Exception(ex)
1852
1851
 
@@ -1858,7 +1857,7 @@ class Odb:
1858
1857
  group_name:默认输出所有边界组信息
1859
1858
  Example:
1860
1859
  odb.get_constraint_equation_data()
1861
- Returns: 包含信息为list[dict]或 dict
1860
+ Returns: 包含信息为list[dict]
1862
1861
  """
1863
1862
  try:
1864
1863
  res_list = []
@@ -1875,7 +1874,33 @@ class Odb:
1875
1874
  res_list.append(
1876
1875
  str(ConstraintEquation(data.Id, name=data.Name, sec_node=data.SecondaryNode.Id, sec_dof=int(data.SecondaryDof) + 1,
1877
1876
  master_info=master_info, group_name=group)))
1878
- return res_list if len(res_list) > 1 else res_list[0]
1877
+ return res_list
1878
+ except Exception as ex:
1879
+ raise Exception(ex)
1880
+
1881
+ @staticmethod
1882
+ def get_effective_width(group_name: str = None):
1883
+ """
1884
+ 获取有效宽度数据
1885
+ Args:
1886
+ group_name:边界组
1887
+ Example:
1888
+ odb.get_effective_width(group_name="边界组1")
1889
+ Returns: list[dict]
1890
+ """
1891
+ try:
1892
+ res_list = []
1893
+ if group_name is None:
1894
+ group_names = Odb.get_boundary_group_names()
1895
+ else:
1896
+ group_names = [group_name]
1897
+ for group in group_names:
1898
+ item_list = qt_model.GetEffectiveWidthFactorData(groupName=group_name)
1899
+ for item in item_list:
1900
+ res_list.append(str(EffectiveWidth(index=item.Id, element_id=item.Element.Id, iy_i=item.Iy_I, iy_j=item.Iy_J,
1901
+ factor_i=item.IyFactor_I, factor_j=item.IyFactor_J,
1902
+ dz_i=item.CentroidZ_I, dz_j=item.CentroidZ_J, group_name=group)))
1903
+ return res_list
1879
1904
  except Exception as ex:
1880
1905
  raise Exception(ex)
1881
1906
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qtmodel
3
- Version: 0.8.1
3
+ Version: 0.9.3
4
4
  Summary: python modeling for qt 2025-06-30
5
5
  Home-page: https://github.com/Inface0443/pyqt
6
6
  Author: dqy-zhj
@@ -12,7 +12,7 @@ Classifier: Programming Language :: Python :: 3
12
12
  Classifier: Operating System :: OS Independent
13
13
  Description-Content-Type: text/markdown
14
14
 
15
- > 最新版本 V0.8.1 - 2025-06-30
15
+ > 最新版本 V0.9.3 - 2025-06-30
16
16
  > pip install --upgrade qtmodel -i https://pypi.org/simple
17
17
  - 新增更新结构组接口
18
18
  # 建模操作
@@ -1742,6 +1742,31 @@ mdb.remove_live_load_case(index=1)
1742
1742
  ```
1743
1743
  Returns: 无
1744
1744
  ## 动力荷载操作
1745
+ ### add_vehicle_dynamic_load
1746
+ 添加列车动力荷载
1747
+ > 参数:
1748
+ > node_ids: 节点纵列节点编号集合,支持XtoYbyN形式字符串
1749
+ > function_name: 函数名
1750
+ > case_name: 工况名
1751
+ > kind: 类型 1-ZK型车辆 2-动车组
1752
+ > speed_kmh: 列车速度(km/h)
1753
+ > braking: 是否考虑制动
1754
+ > braking_a: 制动加速度(m/s²)
1755
+ > braking_d: 制动时车头位置(m)
1756
+ > time: 上桥时间(s)
1757
+ > direction: 荷载方向 1-X 2-Y 3-Z 4-负X 5-负Y 6-负Z
1758
+ > gap: 加载间距(m)
1759
+ > factor: 放大系数
1760
+ > vehicle_info_kn: 车辆参数,参数为空时则选取界面默认值,注意单位输入单位为KN
1761
+ > ZK型车辆: [dW1,dW2,P1,P2,P3,P4,dD1,dD2,D1,D2,D3,LoadLength]
1762
+ > 动力组: [L1,L2,L3,P,N]
1763
+ ```Python
1764
+ # 示例代码
1765
+ from qtmodel import *
1766
+ mdb.add_vehicle_dynamic_load("1to100",function_name="时程函数名",case_name="时程工况名",kind=1,speed_kmh=120,time=10)
1767
+ mdb.add_vehicle_dynamic_load([1,2,3,4,5,6,7],function_name="时程函数名",case_name="时程工况名",kind=1,speed_kmh=120,time=10)
1768
+ ```
1769
+ Returns:无
1745
1770
  ### add_load_to_mass
1746
1771
  添加荷载转为质量
1747
1772
  > 参数:
@@ -4012,11 +4037,11 @@ Returns: 包含信息为list[dict] or dict
4012
4037
  ### get_element_type
4013
4038
  获取单元类型
4014
4039
  > 参数:
4015
- > ele_id: 单元号
4040
+ > element_id: 单元号
4016
4041
  ```Python
4017
4042
  # 示例代码
4018
4043
  from qtmodel import *
4019
- odb.get_element_type(ele_id=1) # 获取1号单元类型
4044
+ odb.get_element_type(element_id=1) # 获取1号单元类型
4020
4045
  ```
4021
4046
  Returns: str
4022
4047
  ### get_beam_element
@@ -4148,7 +4173,7 @@ Returns: 包含信息为list[dict]
4148
4173
  from qtmodel import *
4149
4174
  odb.get_elastic_link_data()
4150
4175
  ```
4151
- Returns: 包含信息为list[dict]或 dict
4176
+ Returns: 包含信息为list[dict]
4152
4177
  ### get_elastic_support_data
4153
4178
  获取弹性支承信息
4154
4179
  > 参数:
@@ -4158,7 +4183,7 @@ Returns: 包含信息为list[dict]或 dict
4158
4183
  from qtmodel import *
4159
4184
  odb.get_elastic_support_data()
4160
4185
  ```
4161
- Returns: 包含信息为list[dict]或 dict
4186
+ Returns: 包含信息为list[dict]
4162
4187
  ### get_master_slave_link_data
4163
4188
  获取主从连接信息
4164
4189
  > 参数:
@@ -4168,7 +4193,7 @@ Returns: 包含信息为list[dict]或 dict
4168
4193
  from qtmodel import *
4169
4194
  odb.get_master_slave_link_data()
4170
4195
  ```
4171
- Returns: 包含信息为list[dict]或 dict
4196
+ Returns: 包含信息为list[dict]
4172
4197
  ### get_node_local_axis_data
4173
4198
  获取节点坐标信息
4174
4199
  > 参数:
@@ -4197,7 +4222,17 @@ Returns: 包含信息为list[dict]或 dict
4197
4222
  from qtmodel import *
4198
4223
  odb.get_constraint_equation_data()
4199
4224
  ```
4200
- Returns: 包含信息为list[dict]或 dict
4225
+ Returns: 包含信息为list[dict]
4226
+ ### get_effective_width
4227
+ 获取有效宽度数据
4228
+ > 参数:
4229
+ > group_name:边界组
4230
+ ```Python
4231
+ # 示例代码
4232
+ from qtmodel import *
4233
+ odb.get_effective_width(group_name="边界组1")
4234
+ ```
4235
+ Returns: list[dict]
4201
4236
  ## 获取施工阶段信息
4202
4237
  ### get_stage_name
4203
4238
  获取所有施工阶段名称
@@ -11,7 +11,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
11
11
 
12
12
  setup(
13
13
  name="qtmodel",
14
- version=f"V0.8.1",
14
+ version=f"V0.9.3",
15
15
  author="dqy-zhj",
16
16
  author_email="1105417715@qq.com",
17
17
  description=f"python modeling for qt {datetime.now().date()} ",
File without changes
File without changes