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