civil-tools-v 0.0.1__py3-none-any.whl → 0.0.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.
- CivilTools/Const/CAD.py +2 -0
- CivilTools/Const/Concrete.py +144 -0
- CivilTools/Const/Steel.py +21 -0
- CivilTools/Const/__init__.py +3 -0
- CivilTools/DXFGenerator/BasicDXF.py +238 -1
- CivilTools/DXFGenerator/DetailDXF.py +324 -0
- CivilTools/DXFGenerator/DrawingAttribs.py +45 -0
- CivilTools/DXFGenerator/LayerManager.py +37 -0
- CivilTools/DXFGenerator/__init__.py +3 -0
- CivilTools/FigureGenerator/BasicPNGPlotter.py +28 -25
- CivilTools/FigureGenerator/BasicPltPlotter.py +115 -1
- CivilTools/FigureGenerator/SeismicReport/ShearMassRatio.py +73 -0
- CivilTools/FigureGenerator/SeismicReport/ShearMoment.py +71 -0
- CivilTools/FigureGenerator/SeismicReport/__init__.py +2 -0
- CivilTools/FigureGenerator/StairCalculationSheetPNGPlotter.py +2 -8
- CivilTools/ReportGenerator/BasicGenerator.py +109 -83
- CivilTools/ReportGenerator/DocParagraph.py +3 -5
- CivilTools/ReportGenerator/DocPicture.py +7 -8
- CivilTools/ReportGenerator/DocTable.py +11 -11
- CivilTools/ReportGenerator/SeismicReport.py +302 -143
- CivilTools/ReportGenerator/SeismicReportTemplate.py +523 -202
- CivilTools/ReportGenerator/StairCalculationReport.py +249 -185
- CivilTools/ReportGenerator/UtilFunctions.py +108 -104
- CivilTools/ReportGenerator/__init__.py +2 -2
- CivilTools/YDBLoader/BuildingDefine/Beam/Beam.py +12 -15
- CivilTools/YDBLoader/BuildingDefine/Column/Column.py +5 -5
- CivilTools/YDBLoader/BuildingDefine/ComponentType.py +1 -1
- CivilTools/YDBLoader/BuildingDefine/Geometry/Grid.py +8 -12
- CivilTools/YDBLoader/BuildingDefine/Geometry/Joint.py +11 -10
- CivilTools/YDBLoader/BuildingDefine/Geometry/StandFloor.py +1 -1
- CivilTools/YDBLoader/BuildingDefine/GlobalResult/BasicResult.py +44 -24
- CivilTools/YDBLoader/BuildingDefine/GlobalResult/SeismicResult.py +168 -54
- CivilTools/YDBLoader/BuildingDefine/Section/Section.py +26 -31
- CivilTools/YDBLoader/BuildingDefine/Section/ShapeEnum.py +9 -9
- CivilTools/YDBLoader/BuildingDefine/Slab/Slab.py +1 -1
- CivilTools/YDBLoader/BuildingDefine/StairPart/LoadDefine.py +16 -10
- CivilTools/YDBLoader/BuildingDefine/StairPart/StairComponent.py +41 -37
- CivilTools/YDBLoader/BuildingDefine/StairPart/StairPart.py +133 -78
- CivilTools/YDBLoader/SQLiteConnector/Connector.py +16 -8
- CivilTools/YDBLoader/SQLiteConnector/RowDataFactory.py +19 -17
- CivilTools/YDBLoader/SQLiteConnector/YDBTableName.py +31 -20
- CivilTools/YDBLoader/YDBLoader.py +128 -110
- {civil_tools_v-0.0.1.dist-info → civil_tools_v-0.0.3.dist-info}/METADATA +88 -5
- civil_tools_v-0.0.3.dist-info/RECORD +60 -0
- {civil_tools_v-0.0.1.dist-info → civil_tools_v-0.0.3.dist-info}/WHEEL +1 -1
- civil_tools_v-0.0.1.dist-info/RECORD +0 -50
- {civil_tools_v-0.0.1.dist-info → civil_tools_v-0.0.3.dist-info}/LICENSE +0 -0
- {civil_tools_v-0.0.1.dist-info → civil_tools_v-0.0.3.dist-info}/top_level.txt +0 -0
@@ -2,50 +2,58 @@ import math
|
|
2
2
|
from .StairComponent import Component
|
3
3
|
from typing import List
|
4
4
|
|
5
|
+
|
5
6
|
class Position:
|
6
7
|
@property
|
7
8
|
def lower_elevation(self):
|
8
9
|
return min(self.left_elevation, self.right_elevation)
|
10
|
+
|
9
11
|
@property
|
10
12
|
def higher_elevation(self):
|
11
13
|
return max(self.left_elevation, self.right_elevation)
|
14
|
+
|
12
15
|
@property
|
13
16
|
def total_height(self):
|
14
17
|
return self.higher_elevation - self.lower_elevation
|
18
|
+
|
15
19
|
@property
|
16
20
|
def left_plat_length(self):
|
17
21
|
return self.left_x2 - self.left_x1
|
22
|
+
|
18
23
|
@property
|
19
24
|
def right_plat_length(self):
|
20
25
|
return self.right_x2 - self.right_x1
|
26
|
+
|
21
27
|
@property
|
22
28
|
def main_plat_length(self):
|
23
29
|
return self.right_x1 - self.left_x2
|
24
30
|
|
25
|
-
def __init__(
|
26
|
-
|
31
|
+
def __init__(
|
32
|
+
self, left_elevation, right_elevation, left_x1, left_x2, right_x1, right_x2
|
33
|
+
):
|
27
34
|
self.left_elevation = left_elevation
|
28
35
|
self.right_elevation = right_elevation
|
29
36
|
self.left_x1 = left_x1
|
30
37
|
self.left_x2 = left_x2
|
31
38
|
self.right_x1 = right_x1
|
32
39
|
self.right_x2 = right_x2
|
33
|
-
|
40
|
+
|
41
|
+
|
34
42
|
class StairBeam:
|
35
|
-
|
36
|
-
def __init__(self,width, height, offset):
|
37
|
-
self.width
|
43
|
+
|
44
|
+
def __init__(self, width, height, offset):
|
45
|
+
self.width = width
|
38
46
|
self.height = height
|
39
47
|
self.offset = offset
|
40
48
|
|
41
49
|
|
42
50
|
class StairPart:
|
43
|
-
|
51
|
+
|
44
52
|
@property
|
45
53
|
def stair_type(self):
|
46
|
-
left_extend = self.beam_list[1].offset + self.beam_list[1].width/2
|
47
|
-
right_extend = self.beam_list[2].offset + self.beam_list[2].width/2
|
48
|
-
if left_extend>=self.STAIR_EXTEND_LIMIT:
|
54
|
+
left_extend = self.beam_list[1].offset + self.beam_list[1].width / 2
|
55
|
+
right_extend = self.beam_list[2].offset + self.beam_list[2].width / 2
|
56
|
+
if left_extend >= self.STAIR_EXTEND_LIMIT:
|
49
57
|
if right_extend >= self.STAIR_EXTEND_LIMIT:
|
50
58
|
return "DT"
|
51
59
|
else:
|
@@ -55,152 +63,199 @@ class StairPart:
|
|
55
63
|
return "CT"
|
56
64
|
else:
|
57
65
|
return "AT"
|
58
|
-
|
66
|
+
|
59
67
|
@property
|
60
68
|
def stair_elevation_range(self):
|
61
69
|
return f"{self.position.lower_elevation/1000:.3f}~{self.position.higher_elevation/1000:.3f}"
|
62
|
-
|
70
|
+
|
63
71
|
@property
|
64
72
|
def total_height(self):
|
65
73
|
return abs(self.position.left_elevation - self.position.right_elevation)
|
66
|
-
|
74
|
+
|
67
75
|
@property
|
68
76
|
def equivlent_main_slab_thick(self):
|
69
77
|
slope = math.atan(self.position.total_height / self.position.main_plat_length)
|
70
78
|
thick_1 = self.main_thick / math.cos(slope)
|
71
79
|
thick_2 = self.position.total_height / self.step_num / 2
|
72
80
|
return thick_1 + thick_2
|
73
|
-
|
81
|
+
|
74
82
|
@property
|
75
83
|
def total_horizental_length(self):
|
76
84
|
length = self.position.right_x1 - self.position.left_x2
|
77
|
-
length += self.beam_list[1].offset + self.beam_list[1].width/2
|
78
|
-
length += self.beam_list[2].offset + self.beam_list[2].width/2
|
85
|
+
length += self.beam_list[1].offset + self.beam_list[1].width / 2
|
86
|
+
length += self.beam_list[2].offset + self.beam_list[2].width / 2
|
79
87
|
return length
|
88
|
+
|
80
89
|
@property
|
81
90
|
def left_extend_length(self):
|
82
|
-
if self.stair_type =="AT" or self.stair_type == "CT":
|
91
|
+
if self.stair_type == "AT" or self.stair_type == "CT":
|
83
92
|
return 0
|
84
93
|
else:
|
85
|
-
return self.beam_list[1].offset + self.beam_list[1].width/2
|
86
|
-
|
94
|
+
return self.beam_list[1].offset + self.beam_list[1].width / 2
|
95
|
+
|
87
96
|
@property
|
88
97
|
def right_extend_length(self):
|
89
|
-
if self.stair_type =="AT" or self.stair_type == "BT":
|
98
|
+
if self.stair_type == "AT" or self.stair_type == "BT":
|
90
99
|
return 0
|
91
100
|
else:
|
92
|
-
return self.beam_list[2].offset + self.beam_list[2].width/2
|
93
|
-
|
94
|
-
@property
|
101
|
+
return self.beam_list[2].offset + self.beam_list[2].width / 2
|
102
|
+
|
103
|
+
@property
|
95
104
|
def stair_length_list(self):
|
96
|
-
return [
|
97
|
-
|
105
|
+
return [
|
106
|
+
self.left_extend_length,
|
107
|
+
self.total_horizental_length
|
108
|
+
- self.left_extend_length
|
109
|
+
- self.right_extend_length,
|
110
|
+
self.right_extend_length,
|
111
|
+
]
|
112
|
+
|
98
113
|
@property
|
99
114
|
def up_real_rebar_str(self):
|
100
115
|
return f"E{self.up_d:d}@{self.up_dis:d}"
|
101
|
-
|
116
|
+
|
102
117
|
@property
|
103
118
|
def up_real_rebar_area(self):
|
104
119
|
return f"{(self.up_d*self.up_d * math.pi/4/self.up_dis):.3f}"
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
120
|
|
110
|
-
def get_calculate_moments(self)->List[float]:
|
121
|
+
def get_calculate_moments(self) -> List[float]:
|
111
122
|
if self.stair_type == "AT":
|
112
|
-
return [0,0,self.components[0].m_2,0,0]
|
123
|
+
return [0, 0, self.components[0].m_2, 0, 0]
|
113
124
|
elif self.stair_type == "BT":
|
114
|
-
return [0,self.components[0].m_2,self.components[1].m_2,0,0]
|
125
|
+
return [0, self.components[0].m_2, self.components[1].m_2, 0, 0]
|
115
126
|
elif self.stair_type == "CT":
|
116
|
-
return [0,0,self.components[0].m_2,self.components[1].m_2,0]
|
127
|
+
return [0, 0, self.components[0].m_2, self.components[1].m_2, 0]
|
117
128
|
elif self.stair_type == "DT":
|
118
|
-
return [
|
119
|
-
|
120
|
-
|
121
|
-
|
129
|
+
return [
|
130
|
+
0,
|
131
|
+
self.components[0].m_2,
|
132
|
+
self.components[1].m_2,
|
133
|
+
self.components[2].m_2,
|
134
|
+
0,
|
135
|
+
]
|
136
|
+
return [0, 10, 20, 10, 0]
|
137
|
+
|
138
|
+
def get_calculate_shears(self) -> List[float]:
|
122
139
|
if self.stair_type == "AT":
|
123
|
-
return [
|
140
|
+
return [
|
141
|
+
0,
|
142
|
+
0,
|
143
|
+
self.components[0].v1,
|
144
|
+
self.components[0].v2,
|
145
|
+
self.components[1].v1,
|
146
|
+
self.components[1].v2,
|
147
|
+
0,
|
148
|
+
0,
|
149
|
+
]
|
124
150
|
elif self.stair_type == "BT":
|
125
|
-
return [
|
151
|
+
return [
|
152
|
+
self.components[0].v1,
|
153
|
+
self.components[0].v2,
|
154
|
+
self.components[1].v1,
|
155
|
+
self.components[1].v2,
|
156
|
+
self.components[2].v1,
|
157
|
+
self.components[2].v2,
|
158
|
+
0,
|
159
|
+
0,
|
160
|
+
]
|
126
161
|
elif self.stair_type == "CT":
|
127
|
-
return [
|
162
|
+
return [
|
163
|
+
0,
|
164
|
+
0,
|
165
|
+
self.components[0].v1,
|
166
|
+
self.components[0].v2,
|
167
|
+
self.components[1].v1,
|
168
|
+
self.components[1].v2,
|
169
|
+
self.components[2].v1,
|
170
|
+
self.components[2].v2,
|
171
|
+
]
|
128
172
|
elif self.stair_type == "DT":
|
129
|
-
return [
|
130
|
-
|
131
|
-
|
173
|
+
return [
|
174
|
+
self.components[0].v1,
|
175
|
+
self.components[0].v2,
|
176
|
+
self.components[1].v1,
|
177
|
+
self.components[1].v2,
|
178
|
+
self.components[2].v1,
|
179
|
+
self.components[2].v2,
|
180
|
+
self.components[3].v1,
|
181
|
+
self.components[3].v2,
|
182
|
+
]
|
183
|
+
return [0, 0, 0, 10, 20, 10, 0, 0]
|
184
|
+
|
132
185
|
def get_left_slab_table_moments(self):
|
133
186
|
moments = self.get_calculate_moments()
|
134
|
-
return [0,moments[1]*0.25,moments[1]]
|
135
|
-
|
187
|
+
return [0, moments[1] * 0.25, moments[1]]
|
188
|
+
|
136
189
|
def get_main_table_moments(self):
|
137
190
|
moments = self.get_calculate_moments()
|
138
|
-
return [moments[1],moments[2],moments[3]]
|
191
|
+
return [moments[1], moments[2], moments[3]]
|
139
192
|
|
140
193
|
def get_right_slab_table_moments(self):
|
141
194
|
moments = self.get_calculate_moments()
|
142
|
-
return [moments[3],moments[3]*0.25,0]
|
143
|
-
|
144
|
-
|
195
|
+
return [moments[3], moments[3] * 0.25, 0]
|
196
|
+
|
145
197
|
def get_left_slab_table_shears(self):
|
146
198
|
shears = self.get_calculate_shears()
|
147
|
-
return [shears[0],(shears[0]+shears[1])/2,shears[1]]
|
148
|
-
|
199
|
+
return [shears[0], (shears[0] + shears[1]) / 2, shears[1]]
|
200
|
+
|
149
201
|
def get_main_table_shears(self):
|
150
202
|
shears = self.get_calculate_shears()
|
151
|
-
return [shears[2],(shears[2]+shears[5])/2,shears[5]]
|
203
|
+
return [shears[2], (shears[2] + shears[5]) / 2, shears[5]]
|
152
204
|
|
153
205
|
def get_right_slab_table_shears(self):
|
154
206
|
shears = self.get_calculate_shears()
|
155
|
-
return [shears[6],(shears[6]+shears[7])/2,shears[7]]
|
156
|
-
|
157
|
-
def get_shear_validate(self, which_side,ft,cover_thick):
|
207
|
+
return [shears[6], (shears[6] + shears[7]) / 2, shears[7]]
|
208
|
+
|
209
|
+
def get_shear_validate(self, which_side, ft, cover_thick):
|
158
210
|
if which_side == "left":
|
159
211
|
shears = self.get_left_slab_table_shears()
|
160
|
-
shear_limit = 0.7*1*ft*(self.left_thick - cover_thick)*1000/1000
|
212
|
+
shear_limit = 0.7 * 1 * ft * (self.left_thick - cover_thick) * 1000 / 1000
|
161
213
|
elif which_side == "right":
|
162
214
|
shears = self.get_right_slab_table_shears()
|
163
|
-
shear_limit = 0.7*1*ft*(self.right_thick - cover_thick)*1000/1000
|
215
|
+
shear_limit = 0.7 * 1 * ft * (self.right_thick - cover_thick) * 1000 / 1000
|
164
216
|
else:
|
165
217
|
shears = self.get_main_table_shears()
|
166
|
-
shear_limit = 0.7*1*ft*(self.main_thick - cover_thick)*1000/1000
|
218
|
+
shear_limit = 0.7 * 1 * ft * (self.main_thick - cover_thick) * 1000 / 1000
|
167
219
|
max_shear = max([abs(i) for i in shears])
|
168
|
-
if max_shear<=shear_limit:
|
220
|
+
if max_shear <= shear_limit:
|
169
221
|
shear_context = f"Vmax={max_shear:.2f}kN < 0.7βhftbh0={shear_limit:.2f}kN,抗剪截面满足要求!"
|
170
222
|
else:
|
171
223
|
shear_context = f"Vmax={max_shear:.2f}kN > 0.7βhftbh0={shear_limit:.2f}kN,抗剪截面不满足要求!"
|
172
|
-
|
224
|
+
|
173
225
|
return shear_context
|
174
|
-
|
175
|
-
|
176
|
-
|
226
|
+
|
177
227
|
def init_default_data(self):
|
178
228
|
self.stair_width = 1500
|
179
229
|
self.stair_well_width = 100
|
180
|
-
self.beam_list = [
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
230
|
+
self.beam_list = [
|
231
|
+
StairBeam(300, 500, 0),
|
232
|
+
StairBeam(300, 500, 0),
|
233
|
+
StairBeam(300, 500, 0),
|
234
|
+
StairBeam(300, 500, 0),
|
235
|
+
]
|
236
|
+
self.set_thickness(140, 140, 140)
|
237
|
+
self.set_real_rebar(10, 150, 10, 150)
|
238
|
+
|
239
|
+
def __init__(self, position: Position, step_num):
|
185
240
|
self.position = position
|
186
241
|
self.step_num = step_num
|
187
242
|
self.init_default_data()
|
188
|
-
|
243
|
+
|
189
244
|
self.STAIR_EXTEND_LIMIT = 200
|
190
245
|
|
191
|
-
def set_thickness(self, left_thick, main_thick,right_thick):
|
246
|
+
def set_thickness(self, left_thick, main_thick, right_thick):
|
192
247
|
self.left_thick = left_thick
|
193
248
|
self.main_thick = main_thick
|
194
249
|
self.right_thick = right_thick
|
195
|
-
|
196
|
-
def set_beam_offset(self, i,offset):
|
250
|
+
|
251
|
+
def set_beam_offset(self, i, offset):
|
197
252
|
self.beam_list[i].offset = offset
|
198
|
-
|
199
|
-
def set_real_rebar(self, up_d,up_dis,down_d,down_dis):
|
253
|
+
|
254
|
+
def set_real_rebar(self, up_d, up_dis, down_d, down_dis):
|
200
255
|
self.up_d = up_d
|
201
256
|
self.up_dis = up_dis
|
202
257
|
self.down_d = down_d
|
203
258
|
self.down_dis = down_dis
|
204
|
-
|
205
|
-
def set_calculate_result(self, components:List[Component]):
|
206
|
-
self.components = components
|
259
|
+
|
260
|
+
def set_calculate_result(self, components: List[Component]):
|
261
|
+
self.components = components
|
@@ -2,16 +2,19 @@ from typing import List
|
|
2
2
|
import sqlite3
|
3
3
|
import os
|
4
4
|
|
5
|
+
|
5
6
|
class Connector:
|
6
7
|
|
7
8
|
def __init__(self, file_path=None):
|
8
9
|
self.set_db_file(file_path)
|
9
10
|
self.connection = None
|
10
11
|
self.cursor = None
|
11
|
-
|
12
|
+
|
12
13
|
def set_db_file(self, file_path):
|
13
14
|
if file_path != None and not os.path.exists(file_path):
|
14
|
-
raise AttributeError(
|
15
|
+
raise AttributeError(
|
16
|
+
"The file_path is not existed, please check your file path. "
|
17
|
+
)
|
15
18
|
self.__file_path = file_path
|
16
19
|
|
17
20
|
def connect(self):
|
@@ -19,13 +22,15 @@ class Connector:
|
|
19
22
|
建立与 SQLite 数据库的连接
|
20
23
|
"""
|
21
24
|
if self.__file_path == None:
|
22
|
-
raise AttributeError(
|
25
|
+
raise AttributeError(
|
26
|
+
"The file_path is None, you should set db file path before connect. Try the method [set_db_file]. "
|
27
|
+
)
|
23
28
|
try:
|
24
29
|
self.connection = sqlite3.connect(self.__file_path)
|
25
30
|
self.cursor = self.connection.cursor()
|
26
31
|
except sqlite3.Error as e:
|
27
32
|
print(f"连接数据库时出错: {e}")
|
28
|
-
|
33
|
+
|
29
34
|
def extract_table(self, table_name):
|
30
35
|
"""
|
31
36
|
从指定的表中提取数据
|
@@ -42,7 +47,7 @@ class Connector:
|
|
42
47
|
print(f"从表 {table_name} 提取数据时出错: {e}")
|
43
48
|
return []
|
44
49
|
|
45
|
-
def extract_table_by_columns(self, table_name, column_list:List[str]):
|
50
|
+
def extract_table_by_columns(self, table_name, column_list: List[str]):
|
46
51
|
"""
|
47
52
|
从指定的表中提取数据
|
48
53
|
:param table_name: 要提取数据的表名
|
@@ -60,12 +65,15 @@ class Connector:
|
|
60
65
|
print(f"从表 {table_name} 提取数据时出错: {e}")
|
61
66
|
return []
|
62
67
|
|
63
|
-
def is_table_in_db(self, table_name:str):
|
64
|
-
|
68
|
+
def is_table_in_db(self, table_name: str):
|
69
|
+
|
65
70
|
if self.cursor is None:
|
66
71
|
self.connect()
|
67
72
|
try:
|
68
|
-
self.cursor.execute(
|
73
|
+
self.cursor.execute(
|
74
|
+
"SELECT name FROM sqlite_master WHERE type='table' AND name=?",
|
75
|
+
(table_name,),
|
76
|
+
)
|
69
77
|
result = self.cursor.fetchone()
|
70
78
|
return result
|
71
79
|
except sqlite3.Error as e:
|
@@ -1,45 +1,47 @@
|
|
1
1
|
from typing import List
|
2
2
|
|
3
|
+
|
3
4
|
class RowDataFactory:
|
4
|
-
|
5
|
+
"""
|
5
6
|
This Class is used to extract data form row_data
|
6
|
-
|
7
|
+
"""
|
8
|
+
|
7
9
|
@classmethod
|
8
|
-
def extract_int(cls,row_data:List,index:int):
|
9
|
-
RowDataFactory.__list_index_check(row_data,index)
|
10
|
+
def extract_int(cls, row_data: List, index: int):
|
11
|
+
RowDataFactory.__list_index_check(row_data, index)
|
10
12
|
return RowDataFactory.convert_to_int(row_data[index])
|
11
13
|
|
12
14
|
@classmethod
|
13
|
-
def extract_float(cls,row_data:List,index:int):
|
14
|
-
RowDataFactory.__list_index_check(row_data,index)
|
15
|
+
def extract_float(cls, row_data: List, index: int):
|
16
|
+
RowDataFactory.__list_index_check(row_data, index)
|
15
17
|
return RowDataFactory.convert_to_float(row_data[index])
|
16
|
-
|
18
|
+
|
17
19
|
@classmethod
|
18
|
-
def extract_list(cls, row_data:List,index:int):
|
19
|
-
RowDataFactory.__list_index_check(row_data,index)
|
20
|
+
def extract_list(cls, row_data: List, index: int):
|
21
|
+
RowDataFactory.__list_index_check(row_data, index)
|
20
22
|
try:
|
21
|
-
result = list(row_data[index].split(
|
23
|
+
result = list(row_data[index].split(","))
|
22
24
|
except SyntaxError:
|
23
25
|
raise TypeError(f"Value: {row_data[index]} cannot be converted to list.")
|
24
26
|
return result
|
25
27
|
|
26
28
|
@classmethod
|
27
|
-
def convert_to_float(cls,string:"str"):
|
29
|
+
def convert_to_float(cls, string: "str"):
|
28
30
|
try:
|
29
31
|
result = (float)(string)
|
30
32
|
except SyntaxError:
|
31
33
|
raise TypeError(f"Value: {string} cannot be converted to float.")
|
32
34
|
return result
|
33
|
-
|
35
|
+
|
34
36
|
@classmethod
|
35
|
-
def convert_to_int(cls,string:"str"):
|
37
|
+
def convert_to_int(cls, string: "str"):
|
36
38
|
try:
|
37
39
|
result = (int)(string)
|
38
40
|
except SyntaxError:
|
39
41
|
raise TypeError(f"Value: {string} cannot be converted to int.")
|
40
42
|
return result
|
41
|
-
|
43
|
+
|
42
44
|
@classmethod
|
43
|
-
def __list_index_check(cls,row_data:List,index:int):
|
44
|
-
if len(row_data)<=index:
|
45
|
-
raise IndexError("Index out of the range.")
|
45
|
+
def __list_index_check(cls, row_data: List, index: int):
|
46
|
+
if len(row_data) <= index:
|
47
|
+
raise IndexError("Index out of the range.")
|
@@ -1,4 +1,5 @@
|
|
1
1
|
from enum import Enum
|
2
|
+
|
2
3
|
ID = "ID"
|
3
4
|
STD_FLR_ID = "StdFlrID"
|
4
5
|
JOINT_ID = "JtID"
|
@@ -16,24 +17,24 @@ FLOOR_NUM = "FlrNo"
|
|
16
17
|
TOWER_NUM = "TowNo"
|
17
18
|
|
18
19
|
|
19
|
-
class YDBTableName
|
20
|
+
class YDBTableName:
|
20
21
|
JOINT_TABLE_NAME = "tblJoint"
|
21
|
-
JOINT_TABLE_USEFUL_COLUMNS = [ID,"X","Y",STD_FLR_ID]
|
22
|
-
|
22
|
+
JOINT_TABLE_USEFUL_COLUMNS = [ID, "X", "Y", STD_FLR_ID]
|
23
|
+
|
23
24
|
GRID_TABLE_NAME = "tblGrid"
|
24
|
-
GRID_TABLE_USEFUL_COLUMNS = [ID,JOINT_ID_1,JOINT_ID_2]
|
25
|
+
GRID_TABLE_USEFUL_COLUMNS = [ID, JOINT_ID_1, JOINT_ID_2]
|
25
26
|
"""
|
26
27
|
0-ID ,
|
27
28
|
1-Joint1_ID ,
|
28
29
|
2-Joint2_ID ,
|
29
30
|
"""
|
30
|
-
|
31
|
+
|
31
32
|
COLUMN_SECTION_TABLE_NAME = "tblColSect"
|
32
33
|
BEAM_SECTION_TABLE_NAME = "tblBeamSect"
|
33
|
-
SECTION_TABLE_USEFUL_COLUMNS = [ID,"Mat","Kind","ShapeVal"]
|
34
|
-
|
34
|
+
SECTION_TABLE_USEFUL_COLUMNS = [ID, "Mat", "Kind", "ShapeVal"]
|
35
|
+
|
35
36
|
COLUMN_TABLE_NAME = "tblColSeg"
|
36
|
-
COLUMN_TABLE_USEFUL_COLUMNS = [ID,JOINT_ID,SECTION_ID,ECC_X,ECC_Y,ROTATION]
|
37
|
+
COLUMN_TABLE_USEFUL_COLUMNS = [ID, JOINT_ID, SECTION_ID, ECC_X, ECC_Y, ROTATION]
|
37
38
|
"""
|
38
39
|
0-ID ,
|
39
40
|
1-Joint_ID ,
|
@@ -42,9 +43,9 @@ class YDBTableName():
|
|
42
43
|
4-EccY ,
|
43
44
|
5-Rotation
|
44
45
|
"""
|
45
|
-
|
46
|
+
|
46
47
|
BEAM_TABLE_NAME = "tblBeamSeg"
|
47
|
-
BEAM_TABLE_USEFUL_COLUMNS = [ID,GRID_ID,SECTION_ID,ECC,"HDiff1","HDiff2"]
|
48
|
+
BEAM_TABLE_USEFUL_COLUMNS = [ID, GRID_ID, SECTION_ID, ECC, "HDiff1", "HDiff2"]
|
48
49
|
"""
|
49
50
|
0-ID ,
|
50
51
|
1-Grid_ID ,
|
@@ -55,7 +56,14 @@ class YDBTableName():
|
|
55
56
|
"""
|
56
57
|
|
57
58
|
RESULT_PERIOD_TABLE = "calEigenInf"
|
58
|
-
RESULT_PERIOD_USEFUL_COLUMNS = [
|
59
|
+
RESULT_PERIOD_USEFUL_COLUMNS = [
|
60
|
+
"ModuleID",
|
61
|
+
"EigenNo",
|
62
|
+
"Period",
|
63
|
+
"Angle",
|
64
|
+
"CoeffInf",
|
65
|
+
"mInf",
|
66
|
+
]
|
59
67
|
"""
|
60
68
|
0-moduleID
|
61
69
|
1-EigenNo
|
@@ -67,20 +75,26 @@ class YDBTableName():
|
|
67
75
|
the sum of all xmass_par should larger than 0.9]
|
68
76
|
"""
|
69
77
|
|
70
|
-
RESULT_MASS_TABLE
|
71
|
-
RESULT_MASS_USEFUL_COLUMNS = [FLOOR_NUM,TOWER_NUM,"MassInf"]
|
78
|
+
RESULT_MASS_TABLE = "preFlrTowProp"
|
79
|
+
RESULT_MASS_USEFUL_COLUMNS = [FLOOR_NUM, TOWER_NUM, "MassInf"]
|
72
80
|
"""
|
73
81
|
0-floor_num ,
|
74
82
|
1-tower_num ,
|
75
83
|
2-mass_info, list of string, [unknown, dead_load, live_load, plus_load],
|
76
84
|
"""
|
77
|
-
|
85
|
+
|
78
86
|
RESULT_FLOOR_DATA_TABLE = "dsnStatFlrData"
|
79
87
|
"""包含了大多数楼层计算结果,包括风、地震的各类外力、承载力、刚度等"""
|
80
88
|
RESULT_FLOOR_DATA_USEFUL_COLUMNS_SEISMIC = [
|
81
|
-
FLOOR_NUM,
|
82
|
-
|
83
|
-
|
89
|
+
FLOOR_NUM,
|
90
|
+
TOWER_NUM,
|
91
|
+
"FlrFXInf",
|
92
|
+
"FlrFYInf", # 0 1 2 3
|
93
|
+
"FlrVXInf",
|
94
|
+
"FlrVYInf",
|
95
|
+
"FlrMXInf",
|
96
|
+
"FlrMYInf", # 4 5 6 7
|
97
|
+
]
|
84
98
|
"""
|
85
99
|
0-floor_num ,
|
86
100
|
1-tower_num ,
|
@@ -91,6 +105,3 @@ class YDBTableName():
|
|
91
105
|
6-X方向地震倾覆力矩,
|
92
106
|
7-Y方向地震倾覆力矩,
|
93
107
|
"""
|
94
|
-
|
95
|
-
|
96
|
-
|