osis-python 0.2.2__py3-none-any.whl → 0.2.3__py3-none-any.whl
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 osis-python might be problematic. Click here for more details.
- {osis_python-0.2.2.dist-info → osis_python-0.2.3.dist-info}/METADATA +1 -1
- {osis_python-0.2.2.dist-info → osis_python-0.2.3.dist-info}/RECORD +34 -23
- pyosis/__init__.py +1 -1
- pyosis/boundary/__init__.py +2 -2
- pyosis/boundary/manager.py +342 -0
- pyosis/core/all_func.py +1 -1
- pyosis/element/__init__.py +2 -1
- pyosis/element/manager.py +403 -0
- pyosis/io/__init__.py +2 -1
- pyosis/io/stage_info.py +187 -0
- pyosis/live/__init__.py +9 -1
- pyosis/live/manager.py +668 -0
- pyosis/load/__init__.py +2 -1
- pyosis/load/loadcase.py +2 -2
- pyosis/load/manager.py +392 -0
- pyosis/material/__init__.py +2 -1
- pyosis/material/manager.py +354 -0
- pyosis/node/__init__.py +2 -1
- pyosis/node/manager.py +245 -0
- pyosis/post/__init__.py +1 -3
- pyosis/post/combine.py +90 -0
- pyosis/result/__init__.py +3 -0
- pyosis/{post → result}/env.py +1 -1
- pyosis/section/__init__.py +2 -1
- pyosis/section/common.py +10 -10
- pyosis/section/manager.py +1252 -0
- pyosis/stage/__init__.py +2 -1
- pyosis/stage/manager.py +349 -0
- {osis_python-0.2.2.dist-info → osis_python-0.2.3.dist-info}/WHEEL +0 -0
- {osis_python-0.2.2.dist-info → osis_python-0.2.3.dist-info}/licenses/LICENSE +0 -0
- {osis_python-0.2.2.dist-info → osis_python-0.2.3.dist-info}/top_level.txt +0 -0
- /pyosis/{post → result}/check.py +0 -0
- /pyosis/{post → result}/loadcase.py +0 -0
- /pyosis/{post → result}/result.py +0 -0
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
osis_python-0.2.
|
|
2
|
-
pyosis/__init__.py,sha256=
|
|
3
|
-
pyosis/boundary/__init__.py,sha256=
|
|
1
|
+
osis_python-0.2.3.dist-info/licenses/LICENSE,sha256=T4mkSYliXdU9mYe-NfHkqg6GPhzoYaIQO_a630UzpS4,1088
|
|
2
|
+
pyosis/__init__.py,sha256=KZHiGGJbXqBX6Uo6cIgzNMBXKXYw7EWrCnF5FTleRWw,465
|
|
3
|
+
pyosis/boundary/__init__.py,sha256=W5LfF-jugWa-YI8pnfELZaz0pXLa-D8TiGnBn12HGGQ,102
|
|
4
4
|
pyosis/boundary/interface.py,sha256=tsmP1LVlMhVpHpozlMXHYooN82kSzGoHXMRQLcJ1f8o,7568
|
|
5
|
+
pyosis/boundary/manager.py,sha256=nKIUlW58QSNnbii62Ygfddu1kuHPBzOgY90u3hjgZPI,11174
|
|
5
6
|
pyosis/common/__init__.py,sha256=Gl-g0qs3Ks_r19bLEZ1bpBmZ0HvooXYcGvQlvbPf-6U,47
|
|
6
7
|
pyosis/common/interface.py,sha256=vjYwNjbIaqa29BhpqzQxSTjjtfndNo4VtDntINrzEoA,4303
|
|
7
8
|
pyosis/common/project.py,sha256=2KaaOXAh4FFGSWUpmvvGIMWlfXh9wk2jxd0mrcXIckg,1520
|
|
@@ -9,16 +10,17 @@ pyosis/control/__init__.py,sha256=dyvge-GgUpT3BeDwm_Lss1xqNlxAQdt63WJ7QcuZ_O4,24
|
|
|
9
10
|
pyosis/control/interface.py,sha256=GrqBDNwrH5dUMA9E5b19w2Ucjw5oK9JgRe-4RJkL2Q0,3574
|
|
10
11
|
pyosis/core/PyInterface.pyi,sha256=HrWq9eMtaVoQg7qDh55Z3XagTNNbceA0KBK7x38G11w,6142
|
|
11
12
|
pyosis/core/__init__.py,sha256=ohE6BQddjdaSlM16lvphPmoNmQRaxZyjbhXqwwvN8eU,377
|
|
12
|
-
pyosis/core/all_func.py,sha256=
|
|
13
|
+
pyosis/core/all_func.py,sha256=iz80RPeYZDaHhtz1Vsi98lJKknJX5ib6hXLLoy72J0Q,392
|
|
13
14
|
pyosis/core/client.py,sha256=Q7j2SjkhDTVDzgf-rL4f58r5GSWToy-iND6UbFYKixw,1807
|
|
14
15
|
pyosis/core/command.py,sha256=uwFQwRD70EG22QeDkxymZfspGyIfsB_9UU1n8cLJOGQ,9893
|
|
15
|
-
pyosis/element/__init__.py,sha256=
|
|
16
|
+
pyosis/element/__init__.py,sha256=jdPeXY3tVXXnId_iMFjAk1jX6booBKKdfW3V-da8CZQ,61
|
|
16
17
|
pyosis/element/interface.py,sha256=l4dkBPcbvh-2ReJt0UAvS3wFljshDuFD7SazTeFqivk,10605
|
|
18
|
+
pyosis/element/manager.py,sha256=SXQFI1bjEk8hwri2ZUhZt7klbO4I0xHzlBDg6kXsXKQ,12792
|
|
17
19
|
pyosis/general/__init__.py,sha256=dyvge-GgUpT3BeDwm_Lss1xqNlxAQdt63WJ7QcuZ_O4,24
|
|
18
20
|
pyosis/general/interface.py,sha256=GJctYJ6xzSImOsRMmSGHOPFYnN81__5NFWaKgwzCsV4,522
|
|
19
21
|
pyosis/geometry/__init__.py,sha256=dyvge-GgUpT3BeDwm_Lss1xqNlxAQdt63WJ7QcuZ_O4,24
|
|
20
22
|
pyosis/geometry/interface.py,sha256=Dim9rqkpU0DOkNFR1vNiVrPoqzbn-kXwiTY5UrR5ZWE,4481
|
|
21
|
-
pyosis/io/__init__.py,sha256=
|
|
23
|
+
pyosis/io/__init__.py,sha256=hMEvhaR8sCpe-ooe7BM4vfjkBye6s0nYSMmE71ZX-_A,289
|
|
22
24
|
pyosis/io/boundary_info.py,sha256=kKsWBbI-77-jMoNSBzx2ZzkvOYwvoanpi2IHs2kPmr8,6722
|
|
23
25
|
pyosis/io/coordinate.py,sha256=1XksDH5X93Yyp4J1xsDmCSTU_wXo1mSvXZCP89PyOBI,2412
|
|
24
26
|
pyosis/io/element_info.py,sha256=sT9HN9Ham5tN-dSxVV_gpP29SOtCD2gBHiJzm6_Wnmg,12440
|
|
@@ -28,23 +30,25 @@ pyosis/io/node_info.py,sha256=c3BINnbCn_p5Lu1MOXTL1DUYXeh_L9fHAs9Y1fYXIWg,5082
|
|
|
28
30
|
pyosis/io/prestressed_info.py,sha256=pUGrcvE_4tL8c1dJna54aIanynRzO2ZNPh4FYFB1kg0,5081
|
|
29
31
|
pyosis/io/response.py,sha256=ArdqltNm6Usa-C2VzpY8BGoATAyBTDozIG8_tjaXWAA,3176
|
|
30
32
|
pyosis/io/section_info.py,sha256=A1TmBEtnIfnQQnZEAHSZFRvhQVB8GK0NSuLex671F-o,4625
|
|
31
|
-
pyosis/
|
|
33
|
+
pyosis/io/stage_info.py,sha256=uZGnwp1ktUjdUuk4WO0RHrlYig-kZ0ku0OHj96g_qbM,5608
|
|
34
|
+
pyosis/live/__init__.py,sha256=in3lF6GUhdGb0pfMGe7yMH1MPrDIap4_NEaY-WKrgBw,180
|
|
32
35
|
pyosis/live/analysis.py,sha256=ih42Z4Zrf17QcfHXKDsL0BNX11PeXZpodi-AYoxKGpg,5464
|
|
33
36
|
pyosis/live/grade.py,sha256=hjxUf9RBxVFuSs9J6Y0_A2g5TqJGqozdEg0_QuFZKiA,3223
|
|
34
37
|
pyosis/live/lane.py,sha256=rxQayG7WMjr_sKYG1VC4jY1EaXvqnPKo5i_iLmdWpLU,5455
|
|
35
|
-
pyosis/
|
|
36
|
-
pyosis/load/
|
|
38
|
+
pyosis/live/manager.py,sha256=9aPNBz1dSw3tyRnJJ56oqnV-PDbYj6drfTU45Qu4ksA,21928
|
|
39
|
+
pyosis/load/__init__.py,sha256=S0snvGGU1gEaXUr2WjIGZzhH6kdw3JmMRDgPg9LK_9w,101
|
|
40
|
+
pyosis/load/loadcase.py,sha256=sCh21loarLG8b91k-pH4kaRqS8hHRiUfACFQz79jS4o,1605
|
|
41
|
+
pyosis/load/manager.py,sha256=HMjtxIRg3HIsKzwKfT6OhullqA8zYqIHPucZbhXrZEU,12776
|
|
37
42
|
pyosis/load/static.py,sha256=kOp2kAK5W5YBUlhYGYfJ9AqPsYK74QPX-olfFAiOVGc,14024
|
|
38
43
|
pyosis/load/tendon.py,sha256=5fAj8gYwRpx_hUPB9wfxwU1SF2D7uEWzCkMrnS0bPfU,11503
|
|
39
|
-
pyosis/material/__init__.py,sha256=
|
|
44
|
+
pyosis/material/__init__.py,sha256=60tzhc7hlxLuosldviEXYojkFNYo9JLKfjaii4IJD8E,62
|
|
40
45
|
pyosis/material/interface.py,sha256=83yFn-RoqLBEiYCYmbnXoMO0Gwd0u6MkWvicgFDmWh4,5699
|
|
41
|
-
pyosis/
|
|
46
|
+
pyosis/material/manager.py,sha256=oRmnIvMiLSomPglW12RtqcSCaBbSuDbHPW_msywVGTg,11748
|
|
47
|
+
pyosis/node/__init__.py,sha256=PjOZyMsVJvGx4fgHrMXgb2H3nKma51JYzbUqDgNqJa4,58
|
|
42
48
|
pyosis/node/interface.py,sha256=bl4B0VlFRzx3KZibOW4OXJj2FEG3SeqIFpSR_SyLzyM,1216
|
|
43
|
-
pyosis/
|
|
44
|
-
pyosis/post/
|
|
45
|
-
pyosis/post/
|
|
46
|
-
pyosis/post/loadcase.py,sha256=l-5hMslFhcL0FPyQ_We_FEPzAhQtbvs_HgYy4U19zEs,2272
|
|
47
|
-
pyosis/post/result.py,sha256=wuXRARTf5v3j4ykAgYeZUupjihYqyxkv5-Qpf0Plxww,1189
|
|
49
|
+
pyosis/node/manager.py,sha256=SMAVnGjZiTWr27e6ymIXFag9fyZvfmpjQCY7IgDPMvI,8218
|
|
50
|
+
pyosis/post/__init__.py,sha256=e4EwA9h0a-ixruk4tG6fqtBztII52Bfa0FEbaXYZ5lM,22
|
|
51
|
+
pyosis/post/combine.py,sha256=ydQkQkHxg5JISjJO_TbqaZNGgw0vTE-XKKnYGqvd98M,2363
|
|
48
52
|
pyosis/property/__init__.py,sha256=SV8FEEDZIx4f2m0o7c-zyvgtT78yAdeOBjuGViSCOrA,100
|
|
49
53
|
pyosis/property/comp_thickness.py,sha256=q1qYou8XOmAtqAk7a79f4Lc8ztF3Ea6kI5Vg0LTH624,602
|
|
50
54
|
pyosis/property/coordinate.py,sha256=AEID5uzyh9AYbUHbDk41f3aZ8EGrFfCNEPuvY-eCyD4,2335
|
|
@@ -53,19 +57,26 @@ pyosis/property/damping.py,sha256=bZiFVWBub2iTgVzDqIj29YxUOoUX3dUVfDYCRTMpLiM,78
|
|
|
53
57
|
pyosis/property/pu_curve.py,sha256=qjw-84H3QAAnSuOuF9KxSVysPW1M56zSj_vZhf7DePU,1528
|
|
54
58
|
pyosis/quick_building/__init__.py,sha256=dyvge-GgUpT3BeDwm_Lss1xqNlxAQdt63WJ7QcuZ_O4,24
|
|
55
59
|
pyosis/quick_building/interface.py,sha256=xdQrORabxmnlhi537pspFokQBaXSmnZMIxA_kxSo_cE,13951
|
|
56
|
-
pyosis/
|
|
57
|
-
pyosis/
|
|
60
|
+
pyosis/result/__init__.py,sha256=upmhnnRsQnSiNXDAP0Rt5D34ilwcAo-XwZCYuC0qtuc,63
|
|
61
|
+
pyosis/result/check.py,sha256=Zjf318K4Bi6da30e3hu7yDN0VZ0aWzPy0GoNhvQ3Twg,4824
|
|
62
|
+
pyosis/result/env.py,sha256=2DjTOSaRxD0Nl4DR_ESD_Hu5yiDSlRZNw0vNHgoVKIs,1346
|
|
63
|
+
pyosis/result/loadcase.py,sha256=l-5hMslFhcL0FPyQ_We_FEPzAhQtbvs_HgYy4U19zEs,2272
|
|
64
|
+
pyosis/result/result.py,sha256=wuXRARTf5v3j4ykAgYeZUupjihYqyxkv5-Qpf0Plxww,1189
|
|
65
|
+
pyosis/section/__init__.py,sha256=j0C_UWCSr6CaH7IYOTPuxdyuGuHsjsn0bUunDZWfDVc,163
|
|
66
|
+
pyosis/section/common.py,sha256=9cnI5JdHfC6W-OvxAr4nJ2kAZaF3aDDl1luMFHQP8Bg,26572
|
|
67
|
+
pyosis/section/manager.py,sha256=6BHqprlUt3ILmYF71h7Lv9SVI01ieA9Lmh08VKsN1Bc,38436
|
|
58
68
|
pyosis/section/numeric.py,sha256=yx32nS9BE8WPVMUWLKv3FVW0BfrhtaQ6qUTSVqKhX6o,1501
|
|
59
69
|
pyosis/section/param.py,sha256=2lxP1IVhQTvBFgIVhv8yFj0w7WFfplsx2D3sMIPJPe8,3534
|
|
60
70
|
pyosis/section/rebar.py,sha256=_pYRw0KDlKOYt13oyfiu2jT87AbFQ5qe62NVVLyGCkw,7293
|
|
61
71
|
pyosis/section/rib.py,sha256=lSHUr70XFNk3wd_OADHRpAadzsKQc40RntiEmZdmSvU,7524
|
|
62
72
|
pyosis/section/steel.py,sha256=Kd0SNEsSZuG65jb7ZDTD3TMa466aT9Pd2EVIn4Ia_RQ,14939
|
|
63
|
-
pyosis/stage/__init__.py,sha256=
|
|
73
|
+
pyosis/stage/__init__.py,sha256=eFc-d3v6SyL3St55hJeD5SoFFYZfYDAGs2lPgHMdcwc,80
|
|
64
74
|
pyosis/stage/define.py,sha256=6CJEYU3e5sEfL9ZuTKQnAeiZKl99io86rEYNIyMZrhQ,3955
|
|
75
|
+
pyosis/stage/manager.py,sha256=MtgBUMakMGHGZ5XMIrTGpyQAO7gx-2iF9e8TpmLryZI,11430
|
|
65
76
|
pyosis/stage/overall.py,sha256=eUenFLvdO5PRlMjk0ZqeoHE1aSWqNyZqI-dh9nTDIw0,2157
|
|
66
77
|
pyosis/thickness/__init__.py,sha256=dyvge-GgUpT3BeDwm_Lss1xqNlxAQdt63WJ7QcuZ_O4,24
|
|
67
78
|
pyosis/thickness/interface.py,sha256=l9EYI45_RwHSEnNmn1ctoiu_q8Q2zkrH7QOiN0D26Dk,1314
|
|
68
|
-
osis_python-0.2.
|
|
69
|
-
osis_python-0.2.
|
|
70
|
-
osis_python-0.2.
|
|
71
|
-
osis_python-0.2.
|
|
79
|
+
osis_python-0.2.3.dist-info/METADATA,sha256=0V2syG-IhY0GgpsokQXjAzP535_SIJK9ASlvlmcUZ5Q,3447
|
|
80
|
+
osis_python-0.2.3.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
81
|
+
osis_python-0.2.3.dist-info/top_level.txt,sha256=6VDNySkQKwipRXcN8ayKVci4vAXi4oPyWLqFhNVcIfM,7
|
|
82
|
+
osis_python-0.2.3.dist-info/RECORD,,
|
pyosis/__init__.py
CHANGED
|
@@ -7,7 +7,7 @@ A library for extending OSIS functionality.
|
|
|
7
7
|
A library that allows users to use CAE with great flexibility.
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
-
__version__ = "0.2.
|
|
10
|
+
__version__ = "0.2.3"
|
|
11
11
|
__author__ = "CCCC Highway Consultant Co. Ltd." # 中交公路规划设计院 - 工程技术研究中心 - lzh - wjh - myf
|
|
12
12
|
|
|
13
13
|
# from .core import engine
|
pyosis/boundary/__init__.py
CHANGED
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
"""边界管理器 - 统一管理边界的增删改查
|
|
2
|
+
|
|
3
|
+
设计理念:
|
|
4
|
+
- 隐藏 HTTP 接口细节,提供原生 Python 风格 API
|
|
5
|
+
- 返回数据类对象而非 HTTP 元组
|
|
6
|
+
- 内部维护边界列表,通过 get 等方法查询,不暴露 HTTP 接口细节
|
|
7
|
+
|
|
8
|
+
支持的边界类型:GENERAL(一般边界)、MSTSLV(主从约束)、RELEASE(释放梁端约束)、
|
|
9
|
+
ELSTCSPT(弹性支承)
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
from __future__ import annotations
|
|
13
|
+
|
|
14
|
+
from dataclasses import dataclass
|
|
15
|
+
|
|
16
|
+
from ..core.client import osis_client
|
|
17
|
+
from .interface import (
|
|
18
|
+
osis_boundary_general,
|
|
19
|
+
osis_boundary_elstcspt,
|
|
20
|
+
osis_boundary_master_slave,
|
|
21
|
+
osis_boundary_release,
|
|
22
|
+
osis_boundary_dle,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# ──────────────────────────────────────────────
|
|
27
|
+
# 数据类
|
|
28
|
+
# ──────────────────────────────────────────────
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@dataclass(frozen=True)
|
|
32
|
+
class Boundary:
|
|
33
|
+
"""边界对象
|
|
34
|
+
|
|
35
|
+
由 BoundaryManager 内部创建,用户不应直接实例化。
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
no: int
|
|
39
|
+
name: str = ""
|
|
40
|
+
boundary_type: str = "" # "General", "MstSlv", "Release", "ElstcSpt", "GeneralElstcSpt"
|
|
41
|
+
entity_vec: list[int] | None = None
|
|
42
|
+
is_occupied: bool = False
|
|
43
|
+
|
|
44
|
+
@classmethod
|
|
45
|
+
def _from_dict(cls, d: dict) -> Boundary:
|
|
46
|
+
"""从接口 dict 构造 Boundary 对象(内部使用)"""
|
|
47
|
+
type_names = {
|
|
48
|
+
1: "General",
|
|
49
|
+
2: "MstSlv",
|
|
50
|
+
3: "Rigid",
|
|
51
|
+
4: "Release",
|
|
52
|
+
5: "ElstcSpt",
|
|
53
|
+
6: "GeneralElstcSpt",
|
|
54
|
+
}
|
|
55
|
+
return cls(
|
|
56
|
+
no=d.get("no", 0),
|
|
57
|
+
name=d.get("name", ""),
|
|
58
|
+
boundary_type=type_names.get(d.get("type", 0), "Unknown"),
|
|
59
|
+
entity_vec=d.get("entityVec", []),
|
|
60
|
+
is_occupied=d.get("isOccupied", False),
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
# ──────────────────────────────────────────────
|
|
65
|
+
# 管理类
|
|
66
|
+
# ──────────────────────────────────────────────
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class BoundaryManager:
|
|
70
|
+
"""边界管理器
|
|
71
|
+
|
|
72
|
+
统一管理边界的创建、删除和查询。
|
|
73
|
+
|
|
74
|
+
用法:
|
|
75
|
+
>>> from pyosis.boundary import boundary_manager
|
|
76
|
+
>>> boundary_manager.create_general(1, bX=1, bY=1, bZ=1, bRX=0, bRY=0, bRZ=0) # 创建一般边界
|
|
77
|
+
>>> boundary_manager.create_elstcspt(2, DX=1e10, DY=1e10, DZ=1e10) # 创建弹性支承
|
|
78
|
+
>>> boundary_manager.create_master_slave(3, nNode=1, bX=1, bY=1, bZ=1) # 创建主从约束
|
|
79
|
+
>>> bd = boundary_manager.get(1) # 按编号查询
|
|
80
|
+
>>> all_bds = boundary_manager.all() # 获取全部边界
|
|
81
|
+
>>> boundary_manager.delete(1) # 删除边界
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
def __init__(self) -> None:
|
|
85
|
+
self._boundaries: list[Boundary] = []
|
|
86
|
+
self._bd_map: dict[int, Boundary] = {} # 按编号索引:O(1) 查询
|
|
87
|
+
self._loaded: bool = False
|
|
88
|
+
|
|
89
|
+
# ── 数据加载 ──────────────────────────────
|
|
90
|
+
|
|
91
|
+
def _load(self) -> None:
|
|
92
|
+
"""从服务端加载所有边界信息(延迟加载,带缓存)"""
|
|
93
|
+
if self._loaded:
|
|
94
|
+
return
|
|
95
|
+
resp = osis_client("GetAllBoundaryInfo", {})
|
|
96
|
+
if isinstance(resp, tuple):
|
|
97
|
+
raise RuntimeError(f"加载边界信息失败: {resp[1]}")
|
|
98
|
+
self._boundaries = [
|
|
99
|
+
Boundary._from_dict(d) for d in resp.get("data", []) if isinstance(d, dict) and "no" in d
|
|
100
|
+
]
|
|
101
|
+
|
|
102
|
+
# 构建索引:编号 -> 边界对象 (O(1) 查询)
|
|
103
|
+
self._bd_map = {bd.no: bd for bd in self._boundaries}
|
|
104
|
+
|
|
105
|
+
self._loaded = True
|
|
106
|
+
|
|
107
|
+
def refresh(self) -> None:
|
|
108
|
+
"""强制刷新缓存(模型变更后自动调用,也可手动调用)"""
|
|
109
|
+
self._boundaries = []
|
|
110
|
+
self._bd_map = {}
|
|
111
|
+
self._loaded = False
|
|
112
|
+
self._load()
|
|
113
|
+
|
|
114
|
+
# ── 增删改 ────────────────────────────────
|
|
115
|
+
|
|
116
|
+
def create_general(
|
|
117
|
+
self,
|
|
118
|
+
no: int,
|
|
119
|
+
nCoor: int = None,
|
|
120
|
+
bX: bool = 1,
|
|
121
|
+
bY: bool = 1,
|
|
122
|
+
bZ: bool = 1,
|
|
123
|
+
bRX: bool = 1,
|
|
124
|
+
bRY: bool = 1,
|
|
125
|
+
bRZ: bool = 1,
|
|
126
|
+
bRW: bool = 1,
|
|
127
|
+
) -> None:
|
|
128
|
+
"""创建一般边界
|
|
129
|
+
|
|
130
|
+
Args:
|
|
131
|
+
no: 边界编号
|
|
132
|
+
nCoor: 局部坐标系编号,"" 代表缺省
|
|
133
|
+
bX: UX方向,0=释放,1=约束
|
|
134
|
+
bY: UY方向,0=释放,1=约束
|
|
135
|
+
bZ: UZ方向,0=释放,1=约束
|
|
136
|
+
bRX: RX方向,0=释放,1=约束
|
|
137
|
+
bRY: RY方向,0=释放,1=约束
|
|
138
|
+
bRZ: RZ方向,0=释放,1=约束
|
|
139
|
+
bRW: RW方向,0=释放,1=约束
|
|
140
|
+
|
|
141
|
+
Raises:
|
|
142
|
+
RuntimeError: 创建失败时抛出异常
|
|
143
|
+
"""
|
|
144
|
+
if nCoor is None:
|
|
145
|
+
nCoor = ""
|
|
146
|
+
ok, err = osis_boundary_general(no, "GENERAL", nCoor, bX, bY, bZ, bRX, bRY, bRZ, bRW)
|
|
147
|
+
if not ok:
|
|
148
|
+
raise RuntimeError(f"创建一般边界 {no} 失败: {err}")
|
|
149
|
+
self._loaded = False
|
|
150
|
+
|
|
151
|
+
def create_elstcspt(
|
|
152
|
+
self,
|
|
153
|
+
no: int,
|
|
154
|
+
nCoor: int = None,
|
|
155
|
+
bX: bool = 1,
|
|
156
|
+
DX: float = 1e13,
|
|
157
|
+
bY: bool = 1,
|
|
158
|
+
DY: float = 1e13,
|
|
159
|
+
bZ: bool = 1,
|
|
160
|
+
DZ: float = 1e13,
|
|
161
|
+
bRX: bool = 1,
|
|
162
|
+
RX: float = 1e16,
|
|
163
|
+
bRY: bool = 1,
|
|
164
|
+
RY: float = 1e16,
|
|
165
|
+
bRZ: bool = 1,
|
|
166
|
+
RZ: float = 1e16,
|
|
167
|
+
) -> None:
|
|
168
|
+
"""创建弹簧单元弹性支承
|
|
169
|
+
|
|
170
|
+
Args:
|
|
171
|
+
no: 边界编号
|
|
172
|
+
nCoor: 局部坐标系编号,固定使用""缺省
|
|
173
|
+
bX: UX方向,0=弹性,1=固定
|
|
174
|
+
DX: 坐标系X轴方向的弹性支承刚度
|
|
175
|
+
bY: UY方向,0=弹性,1=固定
|
|
176
|
+
DY: 坐标系Y轴方向的弹性支承刚度
|
|
177
|
+
bZ: UZ方向,0=弹性,1=固定
|
|
178
|
+
DZ: 坐标系Z轴方向的弹性支承刚度
|
|
179
|
+
bRX: RX方向,0=弹性,1=固定
|
|
180
|
+
RX: 绕坐标系X轴方向的转动弹性刚度
|
|
181
|
+
bRY: RY方向,0=弹性,1=固定
|
|
182
|
+
RY: 绕坐标系Y轴方向的转动弹性刚度
|
|
183
|
+
bRZ: RZ方向,0=弹性,1=固定
|
|
184
|
+
RZ: 绕坐标系Z轴方向的转动弹性刚度
|
|
185
|
+
|
|
186
|
+
Raises:
|
|
187
|
+
RuntimeError: 创建失败时抛出异常
|
|
188
|
+
"""
|
|
189
|
+
if nCoor is None:
|
|
190
|
+
nCoor = ""
|
|
191
|
+
ok, err = osis_boundary_elstcspt(
|
|
192
|
+
no, "ELSTCSPT", nCoor, bX, DX, bY, DY, bZ, DZ, bRX, RX, bRY, RY, bRZ, RZ
|
|
193
|
+
)
|
|
194
|
+
if not ok:
|
|
195
|
+
raise RuntimeError(f"创建弹性支承 {no} 失败: {err}")
|
|
196
|
+
self._loaded = False
|
|
197
|
+
|
|
198
|
+
def create_master_slave(
|
|
199
|
+
self,
|
|
200
|
+
no: int,
|
|
201
|
+
nNode: int,
|
|
202
|
+
bX: bool = 1,
|
|
203
|
+
bY: bool = 1,
|
|
204
|
+
bZ: bool = 1,
|
|
205
|
+
bRX: bool = 1,
|
|
206
|
+
bRY: bool = 1,
|
|
207
|
+
bRZ: bool = 1,
|
|
208
|
+
) -> None:
|
|
209
|
+
"""创建主从约束
|
|
210
|
+
|
|
211
|
+
Args:
|
|
212
|
+
no: 边界编号
|
|
213
|
+
nNode: 主节点编号
|
|
214
|
+
bX: UX方向,0=释放,1=约束
|
|
215
|
+
bY: UY方向,0=释放,1=约束
|
|
216
|
+
bZ: UZ方向,0=释放,1=约束
|
|
217
|
+
bRX: RX方向,0=释放,1=约束
|
|
218
|
+
bRY: RY方向,0=释放,1=约束
|
|
219
|
+
bRZ: RZ方向,0=释放,1=约束
|
|
220
|
+
|
|
221
|
+
Raises:
|
|
222
|
+
RuntimeError: 创建失败时抛出异常
|
|
223
|
+
"""
|
|
224
|
+
ok, err = osis_boundary_master_slave(no, "MSTSLV", nNode, bX, bY, bZ, bRX, bRY, bRZ)
|
|
225
|
+
if not ok:
|
|
226
|
+
raise RuntimeError(f"创建主从约束 {no} 失败: {err}")
|
|
227
|
+
self._loaded = False
|
|
228
|
+
|
|
229
|
+
def create_release(
|
|
230
|
+
self,
|
|
231
|
+
no: int,
|
|
232
|
+
Fxi_state: bool,
|
|
233
|
+
Fyi_state: bool,
|
|
234
|
+
Fzi_state: bool,
|
|
235
|
+
Mxi_state: bool,
|
|
236
|
+
Myi_state: bool,
|
|
237
|
+
Mzi_state: bool,
|
|
238
|
+
Mbi_state: bool,
|
|
239
|
+
Fxi: float,
|
|
240
|
+
Fyi: float,
|
|
241
|
+
Fzi: float,
|
|
242
|
+
Mxi: float,
|
|
243
|
+
Myi: float,
|
|
244
|
+
Mzi: float,
|
|
245
|
+
Mbi: float,
|
|
246
|
+
Fxj_state: bool,
|
|
247
|
+
Fyj_state: bool,
|
|
248
|
+
Fzj_state: bool,
|
|
249
|
+
Mxj_state: bool,
|
|
250
|
+
Myj_state: bool,
|
|
251
|
+
Mzj_state: bool,
|
|
252
|
+
Mbj_state: bool,
|
|
253
|
+
Fxj: float,
|
|
254
|
+
Fyj: float,
|
|
255
|
+
Fzj: float,
|
|
256
|
+
Mxj: float,
|
|
257
|
+
Myj: float,
|
|
258
|
+
Mzj: float,
|
|
259
|
+
Mbj: float,
|
|
260
|
+
) -> None:
|
|
261
|
+
"""创建释放梁端约束
|
|
262
|
+
|
|
263
|
+
Args:
|
|
264
|
+
no: 边界编号
|
|
265
|
+
Fxi_state等: 端部约束状态,0=释放,1=约束
|
|
266
|
+
Fxi等: 约束值,0-1之间,表示释放后残余的约束能力的百分比
|
|
267
|
+
|
|
268
|
+
Raises:
|
|
269
|
+
RuntimeError: 创建失败时抛出异常
|
|
270
|
+
"""
|
|
271
|
+
ok, err = osis_boundary_release(
|
|
272
|
+
no, "RELEASE",
|
|
273
|
+
Fxi_state, Fyi_state, Fzi_state, Mxi_state, Myi_state, Mzi_state, Mbi_state,
|
|
274
|
+
Fxi, Fyi, Fzi, Mxi, Myi, Mzi, Mbi,
|
|
275
|
+
Fxj_state, Fyj_state, Fzj_state, Mxj_state, Myj_state, Mzj_state, Mbj_state,
|
|
276
|
+
Fxj, Fyj, Fzj, Mxj, Myj, Mzj, Mbj,
|
|
277
|
+
)
|
|
278
|
+
if not ok:
|
|
279
|
+
raise RuntimeError(f"创建释放梁端约束 {no} 失败: {err}")
|
|
280
|
+
self._loaded = False
|
|
281
|
+
|
|
282
|
+
def delete(self, no: int) -> None:
|
|
283
|
+
"""删除边界
|
|
284
|
+
|
|
285
|
+
Args:
|
|
286
|
+
no: 边界编号
|
|
287
|
+
|
|
288
|
+
Raises:
|
|
289
|
+
RuntimeError: 删除失败时抛出异常
|
|
290
|
+
"""
|
|
291
|
+
ok, err = osis_boundary_dle(no)
|
|
292
|
+
if not ok:
|
|
293
|
+
raise RuntimeError(f"删除边界 {no} 失败: {err}")
|
|
294
|
+
self._loaded = False
|
|
295
|
+
|
|
296
|
+
# ── 查询 ──────────────────────────────────
|
|
297
|
+
|
|
298
|
+
def get(self, no: int | list[int]) -> Boundary | list[Boundary | None]:
|
|
299
|
+
"""根据编号获取单个或多个边界 (O(k))
|
|
300
|
+
|
|
301
|
+
Args:
|
|
302
|
+
no: 边界编号
|
|
303
|
+
|
|
304
|
+
Returns:
|
|
305
|
+
Boundary 对象或数组;边界不存在返回 None
|
|
306
|
+
"""
|
|
307
|
+
self._load()
|
|
308
|
+
if isinstance(no, int):
|
|
309
|
+
return self._bd_map.get(no)
|
|
310
|
+
elif isinstance(no, list):
|
|
311
|
+
return [self._bd_map.get(n) for n in no]
|
|
312
|
+
else:
|
|
313
|
+
raise TypeError(f"不支持的编号类型: {type(no)}")
|
|
314
|
+
|
|
315
|
+
def all(self) -> list[Boundary]:
|
|
316
|
+
"""获取所有边界
|
|
317
|
+
|
|
318
|
+
Returns:
|
|
319
|
+
全部边界列表
|
|
320
|
+
"""
|
|
321
|
+
self._load()
|
|
322
|
+
return list(self._boundaries)
|
|
323
|
+
|
|
324
|
+
def count(self) -> int:
|
|
325
|
+
"""获取边界总数
|
|
326
|
+
|
|
327
|
+
Returns:
|
|
328
|
+
边界数量
|
|
329
|
+
"""
|
|
330
|
+
self._load()
|
|
331
|
+
return len(self._boundaries)
|
|
332
|
+
|
|
333
|
+
def __repr__(self) -> str:
|
|
334
|
+
self._load()
|
|
335
|
+
return f"BoundaryManager(count={len(self._boundaries)})"
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
# ──────────────────────────────────────────────
|
|
339
|
+
# 全局单例
|
|
340
|
+
# ──────────────────────────────────────────────
|
|
341
|
+
|
|
342
|
+
boundary_manager = BoundaryManager()
|
pyosis/core/all_func.py
CHANGED
pyosis/element/__init__.py
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
from .interface import *
|
|
1
|
+
from .interface import *
|
|
2
|
+
from .manager import element_manager
|