Wed 28 Aug 21:38:52 CEST 2024

This commit is contained in:
sbosse 2024-08-28 21:42:44 +02:00
parent b1e6dcde8e
commit 8cb536b448

View File

@ -0,0 +1,131 @@
__author__ = 'Miguel Molero'
import os, sys
from PySide.QtCore import *
from PySide.QtGui import *
from SimNDT.gui.ui_materiallibrary import Ui_materialLibraryDialog
from SimNDT.gui.constants import *
from SimNDT.core.materialLibrary import getMaterialLibrary, CC
class MaterialLibrary(QDialog, Ui_materialLibraryDialog):
def __init__(self, filename=None, parent=None):
super(MaterialLibrary, self).__init__(parent)
self.setupUi(self)
self.connectionSetup()
self.filename = filename
self.Library = getMaterialLibrary()
self.materialListWidget.addItems(list(self.Library.keys()))
def connectionSetup(self):
self.connect(self.materialListWidget, SIGNAL("itemSelectionChanged()"), self.selectedMaterial)
self.connect(self.materialListWidget, SIGNAL("itemDoubleClicked(QListWidgetItem *)"), self.accept)
self.createTemplatePushButton.pressed.connect(self.createTemplate)
self.createLibraryPushButton.pressed.connect(self.createLibrary)
self.okPushButton.pressed.connect(self.accept)
self.cancelPushButton.pressed.connect(self.reject)
def selectedMaterial(self):
self.key = self.materialListWidget.currentItem().text()
self.values = self.Library[self.key]
self.materialNameLineEdit.setText(self.key)
text = """ %s = %0.2f
<p> %s = %0.2f
<p> %s = %0.2f
<p> %s = %0.2f
<p> %s = %0.2f
""" % (RHO_LABEL, self.values[0],
LAMBDA_LABEL, self.values[1] * 1e-9,
MU_LABEL, self.values[2] * 1e-9,
VL_LABEL, self.values[3],
VT_LABEL, self.values[4])
self.infoLabel.setText(text)
def getValues(self):
return self.key, self.values
def createTemplate(self):
fname = self.filename if self.filename is not None else "."
formats = ["*.%s" % "txt"]
fname, filters = QFileDialog.getSaveFileName(None, "Create Template Material Library (.txt)", fname,
"sim Files (%s)" % " ".join(formats))
if fname:
with open(fname, 'w') as f:
f.write("#Do not edit this section\n")
f.write("#\n")
f.write("#Define Materials in each row using the following format:\n")
f.write("#\n")
f.write("#Name, Rho VL, VT\n")
f.write("#\n")
f.write("#where Rho=Density, VL= longitudinal Velocity, VT=Shear Velocity\n")
f.write("#\n")
f.write("#example:\n")
f.write("#\n")
f.write("#Water, 1000, 1480, 0.0\n")
f.write("#\n")
f.write("#\n")
f.write("#Change the below examples with your own materials\n")
f.write("#\n")
f.write("#\n")
f.write("#\n")
f.write("Material 1, 1000, 1480, 0\n")
f.write("artificial, 2000, 1400, 800\n")
def createLibrary(self):
dir = os.path.dirname(self.filename) if self.filename is not None else "."
formats = ["*.%s" % "txt"]
fname, filters = QFileDialog.getOpenFileName(None, "Open Custom Material Library (.txt)", dir,
"txt Files (%s)" % " ".join(formats))
if fname:
newMaterials = []
with open(fname, 'r') as f:
for line in f:
if line.startswith("#"):
pass
elif len(line) <= 3:
pass
elif len(line.strip().split(',')) == 4:
elem = line.strip().split(',')
if len(elem) == 4:
newMaterials.append(CC([elem[0], (float(elem[1]), float(elem[2]), float(elem[3]))]))
if len(newMaterials) != 0:
count = len(self.Library)
newCount = len(newMaterials)
for item in newMaterials:
self.Library[item[0]] = item[1]
self.materialListWidget.clear()
self.materialListWidget.addItems(list(self.Library.keys()))
for i in range(count, count + newCount):
self.materialListWidget.item(i).setForeground(Qt.red)
def accept(self):
self.selectedMaterial()
QDialog.accept(self)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = MaterialLibrary()
win.show()
app.exec_()