Wed 28 Aug 21:38:52 CEST 2024
This commit is contained in:
		
							parent
							
								
									b1e6dcde8e
								
							
						
					
					
						commit
						8cb536b448
					
				
							
								
								
									
										131
									
								
								src/SimNDT/gui/materialLibraryController.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								src/SimNDT/gui/materialLibraryController.py
									
									
									
									
									
										Normal 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_() | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user