civil-tools-v 0.0.3__tar.gz → 0.0.5__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.
- civil_tools_v-0.0.5/CivilTools/FigureGenerator/SeismicReport/Drift.py +93 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/FigureGenerator/SeismicReport/__init__.py +1 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/GlobalResult/SeismicResult.py +35 -1
- civil_tools_v-0.0.5/CivilTools/YDBLoader/BuildingDefine/GlobalResult/__init__.py +9 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/__init__.py +2 -2
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/SQLiteConnector/Connector.py +16 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/SQLiteConnector/YDBTableName.py +81 -1
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/YDBLoader.py +217 -3
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/PKG-INFO +1 -1
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/civil_tools_v.egg-info/PKG-INFO +1 -1
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/civil_tools_v.egg-info/SOURCES.txt +1 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/setup.py +1 -1
- civil_tools_v-0.0.3/CivilTools/YDBLoader/BuildingDefine/GlobalResult/__init__.py +0 -2
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/Const/CAD.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/Const/Concrete.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/Const/Steel.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/Const/__init__.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/DXFGenerator/BasicDXF.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/DXFGenerator/DetailDXF.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/DXFGenerator/DrawingAttribs.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/DXFGenerator/LayerManager.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/DXFGenerator/__init__.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/FigureGenerator/BasicPNGPlotter.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/FigureGenerator/BasicPltPlotter.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/FigureGenerator/SeismicReport/ShearMassRatio.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/FigureGenerator/SeismicReport/ShearMoment.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/FigureGenerator/StairCalculationSheetPNGPlotter.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/FigureGenerator/__init__.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/ReportGenerator/BasicGenerator.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/ReportGenerator/DocParagraph.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/ReportGenerator/DocPicture.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/ReportGenerator/DocTable.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/ReportGenerator/SeismicReport.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/ReportGenerator/SeismicReportTemplate.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/ReportGenerator/StairCalculationReport.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/ReportGenerator/UtilFunctions.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/ReportGenerator/__init__.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Beam/Beam.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Beam/__init__.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Column/Column.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Column/__init__.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/ComponentType.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Geometry/Grid.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Geometry/Joint.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Geometry/StandFloor.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Geometry/__init__.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/GlobalResult/BasicResult.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Section/Section.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Section/ShapeEnum.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Section/__init__.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Slab/Slab.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Slab/__init__.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/StairPart/LoadDefine.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/StairPart/StairComponent.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/StairPart/StairPart.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/StairPart/__init__.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/SQLiteConnector/RowDataFactory.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/SQLiteConnector/__init__.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/YDBType.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/__init__.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/__init__.py +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/LICENSE +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/README.md +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/civil_tools_v.egg-info/dependency_links.txt +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/civil_tools_v.egg-info/requires.txt +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/civil_tools_v.egg-info/top_level.txt +0 -0
- {civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/setup.cfg +0 -0
@@ -0,0 +1,93 @@
|
|
1
|
+
from ..BasicPltPlotter import SeismicPlotter, GetTicks
|
2
|
+
from typing import List
|
3
|
+
import numpy as np
|
4
|
+
import matplotlib.pyplot as plt
|
5
|
+
|
6
|
+
|
7
|
+
class DriftPlotter(SeismicPlotter):
|
8
|
+
def __init__(self, floor_num=8, fig_num=2):
|
9
|
+
super().__init__(fig_num, floor_num)
|
10
|
+
self.__limit = None
|
11
|
+
self.type = "层间位移角"
|
12
|
+
|
13
|
+
def set_data(
|
14
|
+
self,
|
15
|
+
wind_x: List[float],
|
16
|
+
wind_y: List[float],
|
17
|
+
seismic_x: List[float],
|
18
|
+
seismic_y: List[float],
|
19
|
+
):
|
20
|
+
# 验证数据长度
|
21
|
+
data_dict = {
|
22
|
+
"wind_x": wind_x,
|
23
|
+
"wind_y": wind_y,
|
24
|
+
"seismic_x": seismic_x,
|
25
|
+
"seismic_y": seismic_y,
|
26
|
+
}
|
27
|
+
for name, data_list in data_dict.items():
|
28
|
+
self._validate_list_length(data_list, name)
|
29
|
+
|
30
|
+
self._ax1_x = 1 / np.array(wind_x)
|
31
|
+
self._ax1_y = 1 / np.array(wind_y)
|
32
|
+
self._ax2_x = 1 / np.array(seismic_x)
|
33
|
+
self._ax2_y = 1 / np.array(seismic_y)
|
34
|
+
|
35
|
+
def set_limit(self, limit: float):
|
36
|
+
self.__limit = limit
|
37
|
+
|
38
|
+
def plot(self):
|
39
|
+
if self.__limit:
|
40
|
+
self.__plot_limit()
|
41
|
+
kwargs_x = self.kwargs_x.copy()
|
42
|
+
kwargs_x["label"] = "X风"
|
43
|
+
kwargs_y = self.kwargs_y.copy()
|
44
|
+
kwargs_y["label"] = "Y风"
|
45
|
+
self.axes[0].plot(self._ax1_x, self._y_values, **kwargs_x)
|
46
|
+
self.axes[0].plot(self._ax1_y, self._y_values, **kwargs_y)
|
47
|
+
kwargs_x["label"] = "X小震"
|
48
|
+
kwargs_y["label"] = "Y小震"
|
49
|
+
self.axes[1].plot(self._ax2_x, self._y_values, **kwargs_x)
|
50
|
+
self.axes[1].plot(self._ax2_y, self._y_values, **kwargs_y)
|
51
|
+
self.__adjust_lim()
|
52
|
+
self.__add_titles()
|
53
|
+
|
54
|
+
def __adjust_lim(self):
|
55
|
+
xmaxs = [self._ax1_x.max(), self._ax2_x.max()]
|
56
|
+
for i in range(2):
|
57
|
+
self.axes[i].set_xlim(left=0, right=xmaxs[i] * 1.2)
|
58
|
+
self.axes[i].set_yticks(self._y_major_ticks)
|
59
|
+
self.axes[i].set_yticks(self._y_minor_ticks, minor=True)
|
60
|
+
x_ticks = GetTicks(xmaxs[i])
|
61
|
+
x_ticks = self.__shrink_x_ticks(x_ticks)
|
62
|
+
self.axes[i].set_xticks(x_ticks)
|
63
|
+
X_ticklabels = [0] + ["1/%d" % (1 / s) for s in x_ticks[1:]]
|
64
|
+
self.axes[i].set_xticklabels(X_ticklabels)
|
65
|
+
|
66
|
+
def __shrink_x_ticks(self, x_ticks):
|
67
|
+
if len(x_ticks) <= 4:
|
68
|
+
return x_ticks
|
69
|
+
new_x_ticks = []
|
70
|
+
for i in range(len(x_ticks)):
|
71
|
+
if i % 2 == 0:
|
72
|
+
new_x_ticks.append(x_ticks[i])
|
73
|
+
return new_x_ticks
|
74
|
+
|
75
|
+
def __plot_limit(self):
|
76
|
+
limitation = self.__limit
|
77
|
+
for ax in self.axes:
|
78
|
+
ax.vlines(
|
79
|
+
x=1 / limitation,
|
80
|
+
ymin=0,
|
81
|
+
ymax=self.floor_num,
|
82
|
+
color="r",
|
83
|
+
linewidth=3,
|
84
|
+
ls="--",
|
85
|
+
label=f"限值1/{limitation}",
|
86
|
+
)
|
87
|
+
|
88
|
+
def __add_titles(self):
|
89
|
+
self.axes[0].set_ylabel(self.y_label)
|
90
|
+
self.axes[0].set_xlabel(f"风下{self.type}")
|
91
|
+
self.axes[1].set_xlabel(f"小震下{self.type}")
|
92
|
+
self.axes[0].legend(framealpha=0, fontsize=12, loc=1)
|
93
|
+
self.axes[1].legend(framealpha=0, fontsize=12, loc=1)
|
@@ -168,6 +168,38 @@ class ValuePeer:
|
|
168
168
|
return {"X": self.x, "Y": self.y}
|
169
169
|
|
170
170
|
|
171
|
+
class FloorDrift:
|
172
|
+
def __init__(
|
173
|
+
self,
|
174
|
+
floor_height: float,
|
175
|
+
drift_max_disp_x: float,
|
176
|
+
drift_max_disp_y: float,
|
177
|
+
drift_min_disp_x: float,
|
178
|
+
drift_min_disp_y: float,
|
179
|
+
max_disp_x: float,
|
180
|
+
ave_disp_x: float,
|
181
|
+
max_disp_y: float,
|
182
|
+
ave_disp_y: float,
|
183
|
+
):
|
184
|
+
self.floor_height = floor_height
|
185
|
+
self.drift_max_disp_x = drift_max_disp_x
|
186
|
+
self.drift_max_disp_y = drift_max_disp_y
|
187
|
+
self.drift_min_disp_x = drift_min_disp_x
|
188
|
+
self.drift_min_disp_y = drift_min_disp_y
|
189
|
+
self.max_disp_x = max_disp_x
|
190
|
+
self.ave_disp_x = ave_disp_x
|
191
|
+
self.max_disp_y = max_disp_y
|
192
|
+
self.ave_disp_y = ave_disp_y
|
193
|
+
|
194
|
+
@property
|
195
|
+
def drift_x(self):
|
196
|
+
return round(self.floor_height / self.drift_max_disp_x)
|
197
|
+
|
198
|
+
@property
|
199
|
+
def drift_y(self):
|
200
|
+
return round(self.floor_height / self.drift_max_disp_y)
|
201
|
+
|
202
|
+
|
171
203
|
class FloorSeismicResult:
|
172
204
|
def __init__(
|
173
205
|
self,
|
@@ -177,8 +209,9 @@ class FloorSeismicResult:
|
|
177
209
|
shear: ValuePeer = None,
|
178
210
|
moment: ValuePeer = None,
|
179
211
|
disp: ValuePeer = None,
|
180
|
-
stiffness: ValuePeer =
|
212
|
+
stiffness: List[ValuePeer] = [],
|
181
213
|
shear_capacity: ValuePeer = None,
|
214
|
+
drifts: List[FloorDrift] = [],
|
182
215
|
):
|
183
216
|
self.floor_num = floor_num
|
184
217
|
self.tower_num = tower_num
|
@@ -188,6 +221,7 @@ class FloorSeismicResult:
|
|
188
221
|
self.disp = disp
|
189
222
|
self.stiffness = stiffness
|
190
223
|
self.shear_capacity = shear_capacity
|
224
|
+
self.drifts = drifts
|
191
225
|
|
192
226
|
def __str__(self):
|
193
227
|
return f"Flr.{self.floor_num}:Fx={self.force.x};Fy={self.force.y}"
|
@@ -1,9 +1,9 @@
|
|
1
1
|
from .Beam import Beam
|
2
2
|
from .Section import Section
|
3
|
-
from .Geometry import Joint,Grid,StandFloor
|
3
|
+
from .Geometry import Joint, Grid, StandFloor
|
4
4
|
from .Column import Column
|
5
5
|
from .Slab import Slab
|
6
6
|
|
7
7
|
from .ComponentType import ComponentType
|
8
8
|
from .GlobalResult import SingleMassResult, MassResult, Period, SinglePeriod
|
9
|
-
from .GlobalResult import ValuePeer, FloorSeismicResult, SeismicResult
|
9
|
+
from .GlobalResult import ValuePeer, FloorSeismicResult, SeismicResult, FloorDrift
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/SQLiteConnector/Connector.py
RENAMED
@@ -65,6 +65,22 @@ class Connector:
|
|
65
65
|
print(f"从表 {table_name} 提取数据时出错: {e}")
|
66
66
|
return []
|
67
67
|
|
68
|
+
def extract_table_by_columns_and_filter(
|
69
|
+
self, table_name, column_list: List[str], limit_column: str, target_value
|
70
|
+
):
|
71
|
+
if self.cursor is None:
|
72
|
+
self.connect()
|
73
|
+
try:
|
74
|
+
column_list_sql = ",".join(column_list)
|
75
|
+
self.cursor.execute(
|
76
|
+
f"SELECT {column_list_sql} FROM {table_name} WHERE {limit_column}=={target_value}"
|
77
|
+
)
|
78
|
+
rows = self.cursor.fetchall()
|
79
|
+
return rows
|
80
|
+
except sqlite3.Error as e:
|
81
|
+
print(f"从表 {table_name} 提取数据时出错: {e}")
|
82
|
+
return []
|
83
|
+
|
68
84
|
def is_table_in_db(self, table_name: str):
|
69
85
|
|
70
86
|
if self.cursor is None:
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/SQLiteConnector/YDBTableName.py
RENAMED
@@ -15,6 +15,7 @@ ROTATION = "Rotation"
|
|
15
15
|
|
16
16
|
FLOOR_NUM = "FlrNo"
|
17
17
|
TOWER_NUM = "TowNo"
|
18
|
+
LOAD_CASE_ID = "LDCase"
|
18
19
|
|
19
20
|
|
20
21
|
class YDBTableName:
|
@@ -84,7 +85,7 @@ class YDBTableName:
|
|
84
85
|
"""
|
85
86
|
|
86
87
|
RESULT_FLOOR_DATA_TABLE = "dsnStatFlrData"
|
87
|
-
"""
|
88
|
+
"""包含了大多数楼层计算结果,包括风、地震的各类外力、承载力、刚度等等"""
|
88
89
|
RESULT_FLOOR_DATA_USEFUL_COLUMNS_SEISMIC = [
|
89
90
|
FLOOR_NUM,
|
90
91
|
TOWER_NUM,
|
@@ -94,6 +95,8 @@ class YDBTableName:
|
|
94
95
|
"FlrVYInf",
|
95
96
|
"FlrMXInf",
|
96
97
|
"FlrMYInf", # 4 5 6 7
|
98
|
+
"CZLXInf",
|
99
|
+
"CZLYInf",
|
97
100
|
]
|
98
101
|
"""
|
99
102
|
0-floor_num ,
|
@@ -104,4 +107,81 @@ class YDBTableName:
|
|
104
107
|
5-Y方向地震层间剪力,
|
105
108
|
6-X方向地震倾覆力矩,
|
106
109
|
7-Y方向地震倾覆力矩,
|
110
|
+
8-X方向抗剪承载力,
|
111
|
+
9-Y方向抗剪承载力,
|
112
|
+
"""
|
113
|
+
|
114
|
+
RESULT_FLOOR_DATA_USEFUL_COLUMNS_STIFFNESS = [
|
115
|
+
"StiffShearCutXInf",
|
116
|
+
"StiffShearCutYInf",
|
117
|
+
"StiffShearDisXInf",
|
118
|
+
"StiffShearDisYInf",
|
119
|
+
"StiffBendXInf",
|
120
|
+
"StiffBendYInf",
|
121
|
+
]
|
122
|
+
"""
|
123
|
+
包含了楼层的各类刚度,剪切刚度、剪力位移计算刚度、剪弯刚度
|
124
|
+
0-剪切刚度X ,
|
125
|
+
1-剪切刚度Y ,
|
126
|
+
2-剪力位移计算刚度X,
|
127
|
+
3-剪力位移计算刚度Y,
|
128
|
+
4-剪弯刚度X,
|
129
|
+
5-剪弯刚度Y,
|
130
|
+
"""
|
131
|
+
|
132
|
+
RESULT_FLOOR_DATA_USEFUL_COLUMNS_WIND = [
|
133
|
+
FLOOR_NUM,
|
134
|
+
TOWER_NUM,
|
135
|
+
"FlrWindFInf",
|
136
|
+
"FlrWindVInf", # 0 1 2 3
|
137
|
+
"FlrWindMInf",
|
138
|
+
]
|
139
|
+
"""
|
140
|
+
0-floor_num ,
|
141
|
+
1-tower_num ,
|
142
|
+
2-XY方向顺风外力,
|
143
|
+
3-XY方向顺风剪力,
|
144
|
+
4-XY方向顺风弯矩,
|
145
|
+
"""
|
146
|
+
|
147
|
+
DISP_FLOOR_DATA_TABLE = "dsnStatDis"
|
148
|
+
"""包含了楼层在不同工况下的楼层位移"""
|
149
|
+
|
150
|
+
DISP_FLOOR_DATA_USEFUL_COLUMNS_WIND = [
|
151
|
+
FLOOR_NUM,
|
152
|
+
TOWER_NUM,
|
153
|
+
LOAD_CASE_ID,
|
154
|
+
"MaxFlrAngleDis",
|
155
|
+
"MinFlrAngleDis",
|
156
|
+
"MaxD",
|
157
|
+
"MassAveD",
|
158
|
+
]
|
159
|
+
"""
|
160
|
+
0-floor_num ,
|
161
|
+
1-tower_num ,
|
162
|
+
2-loadCaseID,需要做筛选
|
163
|
+
3-最大层间位移,
|
164
|
+
4-最小层间位移,
|
165
|
+
5-最大位移,
|
166
|
+
6-平均位移,
|
167
|
+
"""
|
168
|
+
|
169
|
+
ADJUST_COEF_TABLE = "dsnStatFlrAdjCoe"
|
170
|
+
"""楼层调整系数表格"""
|
171
|
+
ADJUST_COEF_USEFUL_COLUMN = [FLOOR_NUM, TOWER_NUM, "JZBCoeXInf", "JZBCoeYInf"]
|
172
|
+
"""
|
173
|
+
0-floor_num ,
|
174
|
+
1-tower_num ,
|
175
|
+
2-X方向剪重比调整系数
|
176
|
+
3-Y方向剪重比调整系数
|
177
|
+
"""
|
178
|
+
|
179
|
+
REAL_FLOOR_TABLE = "pmFlrAssembly"
|
180
|
+
"""楼层调整系数表格"""
|
181
|
+
REAL_FLOOR_USEFUL_COLUMN = ["No", STD_FLR_ID, "Level", "Height"]
|
182
|
+
"""
|
183
|
+
0-楼层编号 ,
|
184
|
+
1-标准层ID ,
|
185
|
+
2-层底高度
|
186
|
+
3-楼层高度
|
107
187
|
"""
|
@@ -1,6 +1,6 @@
|
|
1
1
|
from .BuildingDefine import Beam, Column, Joint, ComponentType, Grid
|
2
2
|
from .BuildingDefine import SinglePeriod, Period, MassResult, SingleMassResult
|
3
|
-
from .BuildingDefine import ValuePeer, FloorSeismicResult, SeismicResult
|
3
|
+
from .BuildingDefine import ValuePeer, FloorSeismicResult, SeismicResult, FloorDrift
|
4
4
|
from .BuildingDefine.Section import Section, ShapeEnum
|
5
5
|
from .SQLiteConnector import Connector, YDBTableName, RowDataFactory
|
6
6
|
from .YDBType import YDBType
|
@@ -199,9 +199,33 @@ class YDBLoader:
|
|
199
199
|
self.__check_result_model("seismic")
|
200
200
|
table_name = YDBTableName.RESULT_FLOOR_DATA_TABLE
|
201
201
|
useful_columns = YDBTableName.RESULT_FLOOR_DATA_USEFUL_COLUMNS_SEISMIC
|
202
|
+
useful_columns_stiffness = (
|
203
|
+
YDBTableName.RESULT_FLOOR_DATA_USEFUL_COLUMNS_STIFFNESS
|
204
|
+
)
|
202
205
|
row_data = self.connector.extract_table_by_columns(table_name, useful_columns)
|
206
|
+
stiffness_row_data = self.connector.extract_table_by_columns(
|
207
|
+
table_name, useful_columns_stiffness
|
208
|
+
)
|
209
|
+
|
210
|
+
table_disp_name = YDBTableName.DISP_FLOOR_DATA_TABLE
|
211
|
+
useful_columns_disp = YDBTableName.DISP_FLOOR_DATA_USEFUL_COLUMNS_WIND
|
212
|
+
|
213
|
+
seismic_load_cases = self.__get_seismic_loadcase_numbers()
|
214
|
+
|
215
|
+
seismic_disp_x_row_data = self.connector.extract_table_by_columns_and_filter(
|
216
|
+
table_disp_name, useful_columns_disp, "LDCase", seismic_load_cases[0]
|
217
|
+
)
|
218
|
+
seismic_disp_y_row_data = self.connector.extract_table_by_columns_and_filter(
|
219
|
+
table_disp_name, useful_columns_disp, "LDCase", seismic_load_cases[1]
|
220
|
+
)
|
221
|
+
jzb_coeff = self.__get_JZBCoe()
|
222
|
+
floor_height = self.__get_floor_height()
|
203
223
|
floor_result_list = []
|
204
|
-
for
|
224
|
+
for i in range(len(row_data)):
|
225
|
+
temp_floor = row_data[i]
|
226
|
+
temp_floor_stiffness = stiffness_row_data[i]
|
227
|
+
temp_disp_x = seismic_disp_x_row_data[i]
|
228
|
+
temp_disp_y = seismic_disp_y_row_data[i]
|
205
229
|
floor_num = RowDataFactory.extract_int(temp_floor, 0)
|
206
230
|
tower_num = RowDataFactory.extract_int(temp_floor, 1)
|
207
231
|
force_x = RowDataFactory.convert_to_float(
|
@@ -222,16 +246,206 @@ class YDBLoader:
|
|
222
246
|
moment_y = RowDataFactory.convert_to_float(
|
223
247
|
RowDataFactory.extract_list(temp_floor, 7)[1]
|
224
248
|
)
|
249
|
+
shear_cap_x = RowDataFactory.convert_to_float(
|
250
|
+
RowDataFactory.extract_list(temp_floor, 8)[1]
|
251
|
+
)
|
252
|
+
shear_cap_y = RowDataFactory.convert_to_float(
|
253
|
+
RowDataFactory.extract_list(temp_floor, 9)[1]
|
254
|
+
)
|
255
|
+
stiff_x_shear_cut = RowDataFactory.convert_to_float(
|
256
|
+
RowDataFactory.extract_list(temp_floor_stiffness, 0)[1]
|
257
|
+
)
|
258
|
+
stiff_y_shear_cut = RowDataFactory.convert_to_float(
|
259
|
+
RowDataFactory.extract_list(temp_floor_stiffness, 1)[1]
|
260
|
+
)
|
261
|
+
stiff_x_shear_dis = RowDataFactory.convert_to_float(
|
262
|
+
RowDataFactory.extract_list(temp_floor_stiffness, 2)[1]
|
263
|
+
)
|
264
|
+
stiff_y_shear_dis = RowDataFactory.convert_to_float(
|
265
|
+
RowDataFactory.extract_list(temp_floor_stiffness, 3)[1]
|
266
|
+
)
|
267
|
+
stiff_x_shear_bend = RowDataFactory.convert_to_float(
|
268
|
+
RowDataFactory.extract_list(temp_floor_stiffness, 4)[1]
|
269
|
+
)
|
270
|
+
stiff_y_shear_bend = RowDataFactory.convert_to_float(
|
271
|
+
RowDataFactory.extract_list(temp_floor_stiffness, 5)[1]
|
272
|
+
)
|
273
|
+
|
274
|
+
max_drift_disp_x = RowDataFactory.convert_to_float(temp_disp_x[3])
|
275
|
+
max_drift_disp_y = RowDataFactory.convert_to_float(temp_disp_y[3])
|
276
|
+
|
277
|
+
min_drift_disp_x = RowDataFactory.convert_to_float(temp_disp_x[4])
|
278
|
+
min_drift_disp_y = RowDataFactory.convert_to_float(temp_disp_y[4])
|
279
|
+
|
280
|
+
max_disp_x = RowDataFactory.convert_to_float(temp_disp_x[5])
|
281
|
+
max_disp_y = RowDataFactory.convert_to_float(temp_disp_y[5])
|
282
|
+
|
283
|
+
ave_disp_x = RowDataFactory.convert_to_float(temp_disp_x[6])
|
284
|
+
ave_disp_y = RowDataFactory.convert_to_float(temp_disp_y[6])
|
285
|
+
|
225
286
|
force = ValuePeer(force_x, force_y)
|
226
287
|
shear = ValuePeer(shear_x, shear_y)
|
227
288
|
moment = ValuePeer(moment_x, moment_y)
|
289
|
+
disp = ValuePeer(
|
290
|
+
max_disp_x * jzb_coeff[floor_num][0],
|
291
|
+
max_disp_y * jzb_coeff[floor_num][1],
|
292
|
+
)
|
293
|
+
stiffness_list = [
|
294
|
+
ValuePeer(stiff_x_shear_cut, stiff_y_shear_cut),
|
295
|
+
ValuePeer(stiff_x_shear_dis, stiff_y_shear_dis),
|
296
|
+
ValuePeer(stiff_x_shear_bend, stiff_y_shear_bend),
|
297
|
+
]
|
298
|
+
shear_capacity = ValuePeer(shear_cap_x, shear_cap_y)
|
299
|
+
drifts = [
|
300
|
+
FloorDrift(
|
301
|
+
floor_height[floor_num],
|
302
|
+
max_drift_disp_x * jzb_coeff[floor_num][0],
|
303
|
+
max_drift_disp_y * jzb_coeff[floor_num][1],
|
304
|
+
min_drift_disp_x * jzb_coeff[floor_num][0],
|
305
|
+
min_drift_disp_y * jzb_coeff[floor_num][1],
|
306
|
+
max_disp_x * jzb_coeff[floor_num][0],
|
307
|
+
max_disp_y * jzb_coeff[floor_num][1],
|
308
|
+
ave_disp_x * jzb_coeff[floor_num][0],
|
309
|
+
ave_disp_y * jzb_coeff[floor_num][1],
|
310
|
+
)
|
311
|
+
]
|
228
312
|
temp_floor_result = FloorSeismicResult(
|
229
|
-
floor_num,
|
313
|
+
floor_num,
|
314
|
+
tower_num,
|
315
|
+
force,
|
316
|
+
shear,
|
317
|
+
moment,
|
318
|
+
disp,
|
319
|
+
stiffness_list,
|
320
|
+
shear_capacity,
|
321
|
+
drifts,
|
230
322
|
)
|
231
323
|
floor_result_list.append(temp_floor_result)
|
232
324
|
|
233
325
|
return SeismicResult(floor_result_list)
|
234
326
|
|
327
|
+
def get_wind_result(self) -> SeismicResult:
|
328
|
+
self.__check_result_model("wind")
|
329
|
+
table_name = YDBTableName.RESULT_FLOOR_DATA_TABLE
|
330
|
+
useful_columns = YDBTableName.RESULT_FLOOR_DATA_USEFUL_COLUMNS_WIND
|
331
|
+
row_data = self.connector.extract_table_by_columns(table_name, useful_columns)
|
332
|
+
|
333
|
+
table_disp_name = YDBTableName.DISP_FLOOR_DATA_TABLE
|
334
|
+
useful_columns_disp = YDBTableName.DISP_FLOOR_DATA_USEFUL_COLUMNS_WIND
|
335
|
+
|
336
|
+
wind_load_cases = self.__get_wind_loadcase_numbers()
|
337
|
+
|
338
|
+
wind_disp_x_row_data = self.connector.extract_table_by_columns_and_filter(
|
339
|
+
table_disp_name, useful_columns_disp, "LDCase", wind_load_cases[0]
|
340
|
+
)
|
341
|
+
wind_disp_y_row_data = self.connector.extract_table_by_columns_and_filter(
|
342
|
+
table_disp_name, useful_columns_disp, "LDCase", wind_load_cases[1]
|
343
|
+
)
|
344
|
+
|
345
|
+
floor_result_list = []
|
346
|
+
floor_height = self.__get_floor_height()
|
347
|
+
|
348
|
+
for i in range(len(row_data)):
|
349
|
+
temp_floor = row_data[i]
|
350
|
+
temp_disp_x = wind_disp_x_row_data[i]
|
351
|
+
temp_disp_y = wind_disp_y_row_data[i]
|
352
|
+
floor_num = RowDataFactory.extract_int(temp_floor, 0)
|
353
|
+
tower_num = RowDataFactory.extract_int(temp_floor, 1)
|
354
|
+
force_x = RowDataFactory.convert_to_float(
|
355
|
+
RowDataFactory.extract_list(temp_floor, 2)[1]
|
356
|
+
)
|
357
|
+
force_y = RowDataFactory.convert_to_float(
|
358
|
+
RowDataFactory.extract_list(temp_floor, 2)[3]
|
359
|
+
)
|
360
|
+
shear_x = RowDataFactory.convert_to_float(
|
361
|
+
RowDataFactory.extract_list(temp_floor, 3)[1]
|
362
|
+
)
|
363
|
+
shear_y = RowDataFactory.convert_to_float(
|
364
|
+
RowDataFactory.extract_list(temp_floor, 3)[3]
|
365
|
+
)
|
366
|
+
moment_x = RowDataFactory.convert_to_float(
|
367
|
+
RowDataFactory.extract_list(temp_floor, 4)[1]
|
368
|
+
)
|
369
|
+
moment_y = RowDataFactory.convert_to_float(
|
370
|
+
RowDataFactory.extract_list(temp_floor, 4)[3]
|
371
|
+
)
|
372
|
+
|
373
|
+
max_drift_disp_x = RowDataFactory.convert_to_float(temp_disp_x[3])
|
374
|
+
max_drift_disp_y = RowDataFactory.convert_to_float(temp_disp_y[3])
|
375
|
+
|
376
|
+
min_drift_disp_x = RowDataFactory.convert_to_float(temp_disp_x[4])
|
377
|
+
min_drift_disp_y = RowDataFactory.convert_to_float(temp_disp_y[4])
|
378
|
+
|
379
|
+
max_disp_x = RowDataFactory.convert_to_float(temp_disp_x[5])
|
380
|
+
max_disp_y = RowDataFactory.convert_to_float(temp_disp_y[5])
|
381
|
+
|
382
|
+
ave_disp_x = RowDataFactory.convert_to_float(temp_disp_x[6])
|
383
|
+
ave_disp_y = RowDataFactory.convert_to_float(temp_disp_y[6])
|
384
|
+
|
385
|
+
force = ValuePeer(abs(force_x), abs(force_y))
|
386
|
+
shear = ValuePeer(abs(shear_x), abs(shear_y))
|
387
|
+
moment = ValuePeer(abs(moment_x), abs(moment_y))
|
388
|
+
disp = ValuePeer(123, 245)
|
389
|
+
drifts = [
|
390
|
+
FloorDrift(
|
391
|
+
floor_height[floor_num],
|
392
|
+
max_drift_disp_x,
|
393
|
+
max_drift_disp_y,
|
394
|
+
min_drift_disp_x,
|
395
|
+
min_drift_disp_y,
|
396
|
+
max_disp_x,
|
397
|
+
max_disp_y,
|
398
|
+
ave_disp_x,
|
399
|
+
ave_disp_y,
|
400
|
+
)
|
401
|
+
]
|
402
|
+
temp_floor_result = FloorSeismicResult(
|
403
|
+
floor_num, tower_num, force, shear, moment, disp, drifts=drifts
|
404
|
+
)
|
405
|
+
|
406
|
+
floor_result_list.append(temp_floor_result)
|
407
|
+
return SeismicResult(floor_result_list)
|
408
|
+
|
409
|
+
def __get_wind_loadcase_numbers(self):
|
410
|
+
return [2, 4]
|
411
|
+
|
412
|
+
def __get_seismic_loadcase_numbers(self):
|
413
|
+
return [9, 10]
|
414
|
+
|
415
|
+
def __get_JZBCoe(self):
|
416
|
+
if hasattr(self, "jzb_coeff"):
|
417
|
+
return self.jzb_coeff
|
418
|
+
table_name = YDBTableName.ADJUST_COEF_TABLE
|
419
|
+
useful_column = YDBTableName.ADJUST_COEF_USEFUL_COLUMN
|
420
|
+
row_data = self.connector.extract_table_by_columns(table_name, useful_column)
|
421
|
+
jzb_coeff = {}
|
422
|
+
for temp_data in row_data:
|
423
|
+
floor_num = RowDataFactory.extract_int(temp_data, 0)
|
424
|
+
# tower_num = RowDataFactory.extract_int(temp_data, 1)
|
425
|
+
coeff_x = RowDataFactory.convert_to_float(
|
426
|
+
RowDataFactory.extract_list(temp_data, 2)[1]
|
427
|
+
)
|
428
|
+
coeff_y = RowDataFactory.convert_to_float(
|
429
|
+
RowDataFactory.extract_list(temp_data, 3)[1]
|
430
|
+
)
|
431
|
+
jzb_coeff[floor_num] = [coeff_x, coeff_y]
|
432
|
+
self.jzb_coeff = jzb_coeff
|
433
|
+
return self.jzb_coeff
|
434
|
+
|
435
|
+
def __get_floor_height(self):
|
436
|
+
if hasattr(self, "floor_height"):
|
437
|
+
return self.floor_height
|
438
|
+
table_name = YDBTableName.REAL_FLOOR_TABLE
|
439
|
+
useful_column = YDBTableName.REAL_FLOOR_USEFUL_COLUMN
|
440
|
+
row_data = self.connector.extract_table_by_columns(table_name, useful_column)
|
441
|
+
floor_height = {}
|
442
|
+
for temp_data in row_data:
|
443
|
+
floor_num = RowDataFactory.extract_int(temp_data, 0)
|
444
|
+
height = RowDataFactory.extract_float(temp_data, 3)
|
445
|
+
floor_height[floor_num] = height
|
446
|
+
self.floor_height = floor_height
|
447
|
+
return self.floor_height
|
448
|
+
|
235
449
|
|
236
450
|
if __name__ == "__main__":
|
237
451
|
file_path = "testfiles/dtlmodel1.ydb"
|
@@ -15,6 +15,7 @@ CivilTools/FigureGenerator/BasicPNGPlotter.py
|
|
15
15
|
CivilTools/FigureGenerator/BasicPltPlotter.py
|
16
16
|
CivilTools/FigureGenerator/StairCalculationSheetPNGPlotter.py
|
17
17
|
CivilTools/FigureGenerator/__init__.py
|
18
|
+
CivilTools/FigureGenerator/SeismicReport/Drift.py
|
18
19
|
CivilTools/FigureGenerator/SeismicReport/ShearMassRatio.py
|
19
20
|
CivilTools/FigureGenerator/SeismicReport/ShearMoment.py
|
20
21
|
CivilTools/FigureGenerator/SeismicReport/__init__.py
|
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
|
2
2
|
|
3
3
|
setup(
|
4
4
|
name="civil_tools_v", # 包的名称
|
5
|
-
version="0.0.
|
5
|
+
version="0.0.5", # 包的版本号
|
6
6
|
author="Xinyu Gao (Vincent)", # 作者姓名
|
7
7
|
author_email="just_gxy@163.com", # 作者邮箱
|
8
8
|
description="A powerful tool for civil engineer in their work.", # 包的简短描述
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/FigureGenerator/SeismicReport/ShearMoment.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/ReportGenerator/SeismicReportTemplate.py
RENAMED
File without changes
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/ReportGenerator/StairCalculationReport.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Beam/Beam.py
RENAMED
File without changes
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Beam/__init__.py
RENAMED
File without changes
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Column/Column.py
RENAMED
File without changes
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Column/__init__.py
RENAMED
File without changes
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/ComponentType.py
RENAMED
File without changes
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Geometry/Grid.py
RENAMED
File without changes
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Geometry/Joint.py
RENAMED
File without changes
|
File without changes
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Geometry/__init__.py
RENAMED
File without changes
|
File without changes
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Section/Section.py
RENAMED
File without changes
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Section/ShapeEnum.py
RENAMED
File without changes
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Section/__init__.py
RENAMED
File without changes
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Slab/Slab.py
RENAMED
File without changes
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/BuildingDefine/Slab/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/SQLiteConnector/RowDataFactory.py
RENAMED
File without changes
|
{civil_tools_v-0.0.3 → civil_tools_v-0.0.5}/CivilTools/YDBLoader/SQLiteConnector/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|