Skip to content

Commit 55da58f

Browse files
committed
V2.1 修复bug,增加统一缩放功能
1 parent c5d14ca commit 55da58f

File tree

8 files changed

+378
-25
lines changed

8 files changed

+378
-25
lines changed

core/win.py

Lines changed: 70 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,12 @@
3232
from ui.win_export import Ui_win_export
3333
from ui.win_about import Ui_win_about
3434
from ui.win_terminal import Ui_win_terminal
35+
from ui.win_scale import Ui_win_scale
3536

3637

3738
SOFTWARE = '非线性多自由度时程分析软件'
38-
VERSION = 'V2.0.2'
39-
DATE = '2024.08.26'
39+
VERSION = 'V2.1.0'
40+
DATE = '2024.10.27'
4041
TEMP_PATH = Path(os.getenv('TEMP')).as_posix()
4142
ROOT = Path(__file__).parent.parent
4243

@@ -84,6 +85,7 @@ def init_ui(self):
8485
self.ui.setupUi(self)
8586
self.setWindowTitle(f'{SOFTWARE} {VERSION}')
8687
self.ui.pushButton.clicked.connect(self.open_win_select_gm)
88+
self.ui.pushButton_23.clicked.connect(self.open_win_scale)
8789
self.ui.pushButton_2.clicked.connect(self.open_win_select_gm1)
8890
self.ui.pushButton_5.clicked.connect(self.delete_seleted)
8991
self.ui.pushButton_4.clicked.connect(self.delete_all)
@@ -157,14 +159,14 @@ def init_ui(self):
157159

158160
def init_gm_var(self):
159161
"""初始化地震动变量"""
160-
self.gm = [] # 加速度序列
161-
self.gm_name = []
162-
self.gm_N = 0
163-
self.gm_dt = []
164-
self.gm_NPTS = []
165-
self.gm_t = [] # 时间序列
166-
self.gm_duration = [] # 持时
167-
self.gm_unit = [] # 单位
162+
self.gm: list[np.ndarray] = [] # 加速度序列
163+
self.gm_name: list[str] = []
164+
self.gm_N: int = 0
165+
self.gm_dt: list[float] = []
166+
self.gm_NPTS: list[int] = []
167+
self.gm_t: list[np.ndarray] = [] # 时间序列
168+
self.gm_duration: list[float] = [] # 持时
169+
self.gm_unit: list[Literal['g', 'cm/s^2', 'm/s^2', 'mm/s^2']] = [] # 单位
168170
self.gm_PGA = []
169171

170172
def init_var(self):
@@ -275,6 +277,11 @@ def open_win_select_gm(self):
275277
win = Win_importGM(self)
276278
win.exec_()
277279

280+
def open_win_scale(self):
281+
win = Win_scale(self)
282+
win.exec_()
283+
self.plot_gm(None, self.current_gm_idx)
284+
278285
def gm_list_update(self):
279286
"""更新地震动列表"""
280287
self.ui.listWidget.clear()
@@ -358,16 +365,15 @@ def update_gm(self):
358365
self.ui.lineEdit_4.setText('0.00001')
359366
if float(self.ui.lineEdit.text()) == 0:
360367
self.ui.lineEdit.setText('0.00001')
368+
target_PGA = float(self.ui.lineEdit_4.text())
369+
target_dt = float(self.ui.lineEdit.text())
361370
idx = self.current_gm_idx
362-
self.gm_PGA[idx] = float(self.ui.lineEdit_4.text())
363-
self.gm_dt[idx] = float(self.ui.lineEdit.text())
371+
self.gm_PGA[idx] = target_PGA
372+
self.gm_t[idx] *= float(self.ui.lineEdit.text()) / self.gm_dt[idx]
373+
self.gm_dt[idx] = target_dt
364374
self.gm_unit[idx] = self.ui.comboBox.currentText()
365-
self.gm_duration[idx] = self.gm_NPTS[idx] * float(self.ui.lineEdit.text())
366-
th_old = self.gm[idx]
367-
th = th_old / max(abs(th_old)) * float(self.ui.lineEdit_4.text())
368-
t = np.linspace(0, self.gm_NPTS[idx] * float(self.ui.lineEdit.text()), self.gm_NPTS[idx] + 1)
369-
self.gm[idx] = th
370-
self.gm_t[idx] = t
375+
self.gm_duration[idx] = self.gm_NPTS[idx] * target_dt
376+
self.gm[idx] *= target_PGA / max(abs(self.gm[idx]))
371377
self.ui.label_5.setText(f'{self.gm_name[idx]}已更新')
372378
self.plot_gm(None, idx=idx)
373379

@@ -572,8 +578,8 @@ def model_is_complete(self):
572578
print('【MyWin, model_is_complete】质量数量与层数不等')
573579
return False
574580
print('【MyWin, model_is_complete】模型完备!')
575-
print('【MyWin, model_is_complete】', self.mat_lib)
576-
print('【MyWin, model_is_complete】', self.story_mat)
581+
print('【MyWin, model_is_complete】材料定义:', self.mat_lib)
582+
print('【MyWin, model_is_complete】楼层材料', self.story_mat)
577583
return True
578584

579585
def mat_is_complete(self):
@@ -2785,3 +2791,47 @@ def __init__(self, parent=None):
27852791
self.ui.setupUi(self)
27862792
sys.stdout = core.EmittingStream(self.ui.textEdit)
27872793
sys.stderr = core.EmittingStream(self.ui.textEdit)
2794+
2795+
2796+
class Win_scale(QDialog):
2797+
"""统一缩放地震动"""
2798+
def __init__(self, main: MyWin, parent=None):
2799+
super().__init__(parent)
2800+
self.main = main
2801+
self.ui = Ui_win_scale()
2802+
self.ui.setupUi(self)
2803+
self.init_ui()
2804+
2805+
def init_ui(self):
2806+
validator = QDoubleValidator(0, 10000, 7)
2807+
validator.setNotation(QDoubleValidator.StandardNotation)
2808+
self.ui.lineEdit.setValidator(validator)
2809+
self.ui.lineEdit_4.setValidator(validator)
2810+
self.ui.pushButton.clicked.connect(self.confirmation)
2811+
self.ui.radioButton_5.toggled.connect(lambda: self.ui.lineEdit.setEnabled(self.ui.radioButton_5.isChecked()))
2812+
self.ui.radioButton_6.toggled.connect(lambda: self.ui.lineEdit_4.setEnabled(self.ui.radioButton_6.isChecked()))
2813+
2814+
def confirmation(self):
2815+
"""点击确认"""
2816+
print(f'【Win_scale, confirmation】进行地震动缩放')
2817+
if self.main.gm_N == 0:
2818+
self.accept()
2819+
return
2820+
if self.ui.radioButton_4.isChecked():
2821+
# 归一化
2822+
for idx in range(self.main.gm_N):
2823+
self.main.gm[idx] /= np.max(abs(self.main.gm[idx]))
2824+
elif self.ui.radioButton_5.isChecked():
2825+
# 指定PGA
2826+
PGA = float(self.ui.lineEdit.text())
2827+
for idx in range(self.main.gm_N):
2828+
self.main.gm[idx] *= PGA / np.max(abs(self.main.gm[idx]))
2829+
else:
2830+
# 指定缩放系数
2831+
SF = float(self.ui.lineEdit_4.text())
2832+
for idx in range(self.main.gm_N):
2833+
self.main.gm[idx] *= SF
2834+
self.main.ui.label_5.setText('已统一缩放')
2835+
self.accept()
2836+
2837+

ui/main_win.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,12 +150,17 @@ def setupUi(self, MainWindow):
150150
self.pushButton_3.setMaximumSize(QtCore.QSize(16777215, 30))
151151
self.pushButton_3.setObjectName("pushButton_3")
152152
self.horizontalLayout_2.addWidget(self.pushButton_3)
153+
self.pushButton_23 = QtWidgets.QPushButton(self.groupBox)
154+
self.pushButton_23.setMinimumSize(QtCore.QSize(200, 30))
155+
self.pushButton_23.setMaximumSize(QtCore.QSize(16777215, 30))
156+
self.pushButton_23.setObjectName("pushButton_23")
157+
self.horizontalLayout_2.addWidget(self.pushButton_23)
153158
self.label_5 = QtWidgets.QLabel(self.groupBox)
154159
self.label_5.setMaximumSize(QtCore.QSize(16777215, 40))
155160
self.label_5.setText("")
156161
self.label_5.setObjectName("label_5")
157162
self.horizontalLayout_2.addWidget(self.label_5)
158-
self.horizontalLayout_2.setStretch(1, 1)
163+
self.horizontalLayout_2.setStretch(2, 1)
159164
self.verticalLayout.addLayout(self.horizontalLayout_2)
160165
self.verticalLayout.setStretch(0, 6)
161166
self.verticalLayout.setStretch(1, 1)
@@ -621,6 +626,7 @@ def retranslateUi(self, MainWindow):
621626
self.comboBox.setItemText(2, _translate("MainWindow", "cm/s^2"))
622627
self.comboBox.setItemText(3, _translate("MainWindow", "m/s^2"))
623628
self.pushButton_3.setText(_translate("MainWindow", "更新"))
629+
self.pushButton_23.setText(_translate("MainWindow", "统一缩放"))
624630
self.label_11.setText(_translate("MainWindow", "已导入地震动:(点击可绘制)"))
625631
self.pushButton_5.setText(_translate("MainWindow", "删除选中"))
626632
self.pushButton_4.setText(_translate("MainWindow", "删除全部"))

ui/main_win.ui

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -405,7 +405,7 @@
405405
</layout>
406406
</item>
407407
<item>
408-
<layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,1">
408+
<layout class="QHBoxLayout" name="horizontalLayout_2" stretch="0,0,1">
409409
<item>
410410
<widget class="QPushButton" name="pushButton_3">
411411
<property name="minimumSize">
@@ -425,6 +425,25 @@
425425
</property>
426426
</widget>
427427
</item>
428+
<item>
429+
<widget class="QPushButton" name="pushButton_23">
430+
<property name="minimumSize">
431+
<size>
432+
<width>200</width>
433+
<height>30</height>
434+
</size>
435+
</property>
436+
<property name="maximumSize">
437+
<size>
438+
<width>16777215</width>
439+
<height>30</height>
440+
</size>
441+
</property>
442+
<property name="text">
443+
<string>统一缩放</string>
444+
</property>
445+
</widget>
446+
</item>
428447
<item>
429448
<widget class="QLabel" name="label_5">
430449
<property name="maximumSize">

ui/win_about.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def setupUi(self, win_about):
3636
self.frame.setLineWidth(1)
3737
self.frame.setObjectName("frame")
3838
self.label = QtWidgets.QLabel(self.frame)
39-
self.label.setGeometry(QtCore.QRect(40, 40, 171, 150))
39+
self.label.setGeometry(QtCore.QRect(50, 40, 150, 150))
4040
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed)
4141
sizePolicy.setHorizontalStretch(1)
4242
sizePolicy.setVerticalStretch(1)

ui/win_importGM.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ def retranslateUi(self, win_importGM):
144144
self.radioButton_6.setText(_translate("win_importGM", "指定缩放系数:"))
145145
self.lineEdit_4.setText(_translate("win_importGM", "1"))
146146
self.groupBox_3.setTitle(_translate("win_importGM", "通过.records文件导入"))
147-
self.checkBox_2.setText(_translate("win_importGM", "缩放"))
147+
self.checkBox_2.setText(_translate("win_importGM", "采用内置缩放"))
148148
self.pushButton_2.setText(_translate("win_importGM", "选择.records"))
149149
self.pushButton.setText(_translate("win_importGM", "选择文件"))
150150
import resource_rc

ui/win_importGM.ui

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@
208208
<item>
209209
<widget class="QCheckBox" name="checkBox_2">
210210
<property name="text">
211-
<string>缩放</string>
211+
<string>采用内置缩放</string>
212212
</property>
213213
</widget>
214214
</item>

ui/win_scale.py

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
# -*- coding: utf-8 -*-
2+
3+
# Form implementation generated from reading ui file 'f:\Projects\NLMDOF\ui\win_scale.ui'
4+
#
5+
# Created by: PyQt5 UI code generator 5.15.9
6+
#
7+
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
8+
# run again. Do not edit this file unless you know what you are doing.
9+
10+
11+
from PyQt5 import QtCore, QtGui, QtWidgets
12+
13+
14+
class Ui_win_scale(object):
15+
def setupUi(self, win_scale):
16+
win_scale.setObjectName("win_scale")
17+
win_scale.resize(300, 214)
18+
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
19+
sizePolicy.setHorizontalStretch(0)
20+
sizePolicy.setVerticalStretch(0)
21+
sizePolicy.setHeightForWidth(win_scale.sizePolicy().hasHeightForWidth())
22+
win_scale.setSizePolicy(sizePolicy)
23+
win_scale.setMinimumSize(QtCore.QSize(300, 200))
24+
win_scale.setMaximumSize(QtCore.QSize(300, 214))
25+
font = QtGui.QFont()
26+
font.setFamily("宋体")
27+
font.setPointSize(12)
28+
win_scale.setFont(font)
29+
icon = QtGui.QIcon()
30+
icon.addPixmap(QtGui.QPixmap(":/插图/N.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
31+
win_scale.setWindowIcon(icon)
32+
self.verticalLayout_3 = QtWidgets.QVBoxLayout(win_scale)
33+
self.verticalLayout_3.setObjectName("verticalLayout_3")
34+
self.groupBox_2 = QtWidgets.QGroupBox(win_scale)
35+
self.groupBox_2.setObjectName("groupBox_2")
36+
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox_2)
37+
self.verticalLayout_2.setObjectName("verticalLayout_2")
38+
self.radioButton_4 = QtWidgets.QRadioButton(self.groupBox_2)
39+
self.radioButton_4.setChecked(True)
40+
self.radioButton_4.setObjectName("radioButton_4")
41+
self.verticalLayout_2.addWidget(self.radioButton_4)
42+
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
43+
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
44+
self.radioButton_5 = QtWidgets.QRadioButton(self.groupBox_2)
45+
self.radioButton_5.setObjectName("radioButton_5")
46+
self.horizontalLayout_2.addWidget(self.radioButton_5)
47+
self.lineEdit = QtWidgets.QLineEdit(self.groupBox_2)
48+
self.lineEdit.setEnabled(False)
49+
self.lineEdit.setMinimumSize(QtCore.QSize(0, 30))
50+
self.lineEdit.setObjectName("lineEdit")
51+
self.horizontalLayout_2.addWidget(self.lineEdit)
52+
self.verticalLayout_2.addLayout(self.horizontalLayout_2)
53+
self.horizontalLayout_4 = QtWidgets.QHBoxLayout()
54+
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
55+
self.radioButton_6 = QtWidgets.QRadioButton(self.groupBox_2)
56+
self.radioButton_6.setObjectName("radioButton_6")
57+
self.horizontalLayout_4.addWidget(self.radioButton_6)
58+
self.lineEdit_4 = QtWidgets.QLineEdit(self.groupBox_2)
59+
self.lineEdit_4.setEnabled(False)
60+
self.lineEdit_4.setMinimumSize(QtCore.QSize(0, 30))
61+
self.lineEdit_4.setObjectName("lineEdit_4")
62+
self.horizontalLayout_4.addWidget(self.lineEdit_4)
63+
self.verticalLayout_2.addLayout(self.horizontalLayout_4)
64+
self.horizontalLayout = QtWidgets.QHBoxLayout()
65+
self.horizontalLayout.setObjectName("horizontalLayout")
66+
self.pushButton = QtWidgets.QPushButton(self.groupBox_2)
67+
self.pushButton.setMinimumSize(QtCore.QSize(0, 30))
68+
self.pushButton.setCheckable(False)
69+
self.pushButton.setObjectName("pushButton")
70+
self.horizontalLayout.addWidget(self.pushButton)
71+
self.pushButton_2 = QtWidgets.QPushButton(self.groupBox_2)
72+
self.pushButton_2.setMinimumSize(QtCore.QSize(0, 30))
73+
self.pushButton_2.setObjectName("pushButton_2")
74+
self.horizontalLayout.addWidget(self.pushButton_2)
75+
self.verticalLayout_2.addLayout(self.horizontalLayout)
76+
self.verticalLayout_3.addWidget(self.groupBox_2)
77+
self.verticalLayout_3.setStretch(0, 5)
78+
79+
self.retranslateUi(win_scale)
80+
self.pushButton_2.clicked.connect(win_scale.accept) # type: ignore
81+
QtCore.QMetaObject.connectSlotsByName(win_scale)
82+
83+
def retranslateUi(self, win_scale):
84+
_translate = QtCore.QCoreApplication.translate
85+
win_scale.setWindowTitle(_translate("win_scale", "缩放"))
86+
self.groupBox_2.setTitle(_translate("win_scale", "缩放所有地震动"))
87+
self.radioButton_4.setText(_translate("win_scale", "归一化"))
88+
self.radioButton_5.setText(_translate("win_scale", "指定PGA(g):"))
89+
self.lineEdit.setText(_translate("win_scale", "0.4"))
90+
self.radioButton_6.setText(_translate("win_scale", "指定缩放系数:"))
91+
self.lineEdit_4.setText(_translate("win_scale", "1"))
92+
self.pushButton.setText(_translate("win_scale", "确认"))
93+
self.pushButton_2.setText(_translate("win_scale", "返回"))
94+
import resource_rc
95+
96+
97+
if __name__ == "__main__":
98+
import sys
99+
app = QtWidgets.QApplication(sys.argv)
100+
win_scale = QtWidgets.QDialog()
101+
ui = Ui_win_scale()
102+
ui.setupUi(win_scale)
103+
win_scale.show()
104+
sys.exit(app.exec_())

0 commit comments

Comments
 (0)