diff --git a/src/SimNDT/gui/linearScanController.py b/src/SimNDT/gui/linearScanController.py new file mode 100644 index 0000000..4fe6ed1 --- /dev/null +++ b/src/SimNDT/gui/linearScanController.py @@ -0,0 +1,325 @@ +__author__ = 'Miguel Molero' + +import copy +import numpy as np + +from PySide.QtCore import * +from PySide.QtGui import * + +from SimNDT.gui.ui_linearscansetup import Ui_linearScanSetupDialog + +from SimNDT.gui.Warnings import WarningParms +from SimNDT.gui.advancedSetupInspectionsController import AdvancedSetupInspections +from SimNDT.gui.signalSetupController import SignalSetup +from SimNDT.gui.previewInspectionsController import PreviewLinearScan + +from SimNDT.core.constants import * +from SimNDT.core.transducer import Transducer +from SimNDT.core.inspectionMethods import Transmission, PulseEcho, Source, LinearScan + + +class LinearScanSetup(QDialog, Ui_linearScanSetupDialog): + def __init__(self, Scenario, Source, Inspection, Transducers, Signal, parent=None): + super(LinearScanSetup, self).__init__(parent) + self.setupUi(self) + + self.advancedParametersSetupPushButton.pressed.connect(self.advancedSetup) + self.previewPushButton.pressed.connect(self.preview) + self.connect(self.pointSourceCheckBox, SIGNAL("stateChanged(int)"), self.pointChanged) + self.signalSetupPushButton.pressed.connect(self.signalSetup) + + self.locationComboBox.setEnabled(False) + self.transmissionRadioButton.setChecked(True) + + self.backing = False + self.window = False + self.sourceType = 0 + self.waveSource = 0 + + self.Scenario = Scenario + self.Source = Source + self.Inspection = Inspection + self.Transducers = Transducers + self.Signal = Signal + + if self.Transducers is not None: + item = self.Transducers[0] + self.pointSourceCheckBox.setChecked(bool(item.PointSource)) + if not bool(item.PointSource): + self.transducerSizeLineEdit.setText(str(item.Size)) + + self.borderOffsetLineEdit.setText(str(item.BorderOffset)) + + else: + self.borderOffsetLineEdit.setText(0) + self.startOffsetLineEdit.clear() + self.stopOffsetLineEdit.clear() + self.stepOffsetLineEdit.clear() + + if self.Inspection is None or self.Source is None: + return + + if Inspection.Name == "LinearScan": + value = Inspection.ScanVectorString + ini, end, step = tuple(map(float, value[1:-1].split(','))) + self.startOffsetLineEdit.setText(str(ini)) + self.stopOffsetLineEdit.setText(str(end)) + self.stepOffsetLineEdit.setText(str(step)) + + if Inspection.Method == "Transmission": + self.transmissionRadioButton.setChecked(True) + else: + self.pulseEchoRadioButton.setChecked(True) + + def pointChanged(self, state): + + self.transducerSizeLineEdit.setEnabled(not state) + self.transducerSizeLineEdit.setVisible(not state) + self.transducerSizeLabel.setEnabled(not state) + self.transducerSizeLabel.setVisible(not state) + if state: + self.transducerSizeLineEdit.setText("") + + def advancedSetup(self): + + dlg = AdvancedSetupInspections(self.Source, self.Inspection, self.Transducers) + if dlg.exec_(): + self.backing = dlg.backing + self.window = dlg.window + self.sourceType = dlg.sourceType + self.waveSource = dlg.waveSource + + def signalSetup(self): + + dlg = SignalSetup(self.Signal, self) + if dlg.exec_(): + self.Signal = copy.deepcopy(dlg.Signal) + + def preview(self): + + try: + + location = self.locationComboBox.currentText() + Point = self.pointSourceCheckBox.isChecked() + + try: + if Point: + size = 0 + else: + size = float(self.transducerSizeLineEdit.text()) + except: + msgBox = WarningParms("Give correctly the transducer Size") + if msgBox.exec_(): + return + + centerOffset = 0 + borderOffset = float(self.borderOffsetLineEdit.text()) + + if size >= self.Scenario.Width: + msgBox = WarningParms("Transducer is larger than Scenario Width!!!!") + if msgBox.exec_(): + return + elif size <= 0 and not Point: + msgBox = WarningParms("Incorrect Transducer Size!!!!") + if msgBox.exec_(): + return + + if borderOffset < 0 or borderOffset >= self.Scenario.Height: + msgBox = WarningParms("Transducer is out of Scenario!!!!") + if msgBox.exec_(): + return + + try: + ini = float(self.startOffsetLineEdit.text()) + + except: + msgBox = WarningParms("Please give correctly the Start Value") + if msgBox.exec_(): + return + + try: + end = float(self.stopOffsetLineEdit.text()) + except: + msgBox = WarningParms("Please give correctly the Stop Value") + if msgBox.exec_(): + return + + try: + step = float(self.stepOffsetLineEdit.text()) + + except: + msgBox = WarningParms("Please give correctly the Step Value") + if msgBox.exec_(): + return + + vectorString = "(%g,%g,%g)" % (ini, end, step) + OffsetVector = tuple(map(float, vectorString[1:-1].split(','))) + + if OffsetVector[0] >= OffsetVector[1]: + msgBox = WarningParms("Please set correctly the Start and Stop Values") + if msgBox.exec_(): + return + + if OffsetVector[2] <= 0: + msgBox = WarningParms("Please give correctly the Step Value") + if msgBox.exec_(): + return + + if np.abs(OffsetVector[0]) + size / 2.0 >= self.Scenario.Width / 2.0 or np.abs( + OffsetVector[1]) + size / 2.0 >= self.Scenario.Width / 2.0: + msgBox = WarningParms("Transducer is out of Scenario for the given Start, Stop, Step Values!!!!") + if msgBox.exec_(): + return + + transducer = Transducer('SimNDT-emisor', size, centerOffset, borderOffset, location, Point) + method = Transmission(location) if self.transmissionRadioButton.isChecked() else PulseEcho(location) + + linearScan = LinearScan(OffsetVector[0], OffsetVector[1], OffsetVector[2], location, method.Name, + method.Theta) + inspection = copy.deepcopy(linearScan) + + + + except: + + msgBox = WarningParms() + msgBox.exec_() + return + + dlg = PreviewLinearScan(method, inspection, self.Scenario, transducer, self) + dlg.show() + + def accept(self): + + try: + + if self.Source is None: + self.Source = Source() + + if self.waveSource == WaveSource.Longitudinal: + self.Source.Longitudinal = True + self.Source.Shear = False + elif self.waveSource == WaveSource.Shear: + self.Source.Longitudinal = False + self.Source.Shear = True + elif self.waveSource == WaveSource.LongitudinalAndShear: + self.Source.Longitudinal = True + self.Source.Shear = True + else: + self.Source.Longitudinal = True + self.Source.Shear = False + + if self.sourceType == TypeSource.Pressure: + self.Source.Pressure = True + self.Source.Displacement = False + elif self.sourceType == TypeSource.Displacement: + self.Source.Pressure = False + self.Source.Displacement = True + elif self.sourceType == TypeSource.PressureAndDisplacement: + self.Source.Pressure = True + self.Source.Displacement = True + else: + self.Source.Pressure = True + self.Source.Displacement = False + + location = self.locationComboBox.currentText() + Point = self.pointSourceCheckBox.isChecked() + + try: + + if Point: + size = 0 + else: + size = float(self.transducerSizeLineEdit.text()) + + except: + msgBox = WarningParms("Give correctly the transducer Size") + if msgBox.exec_(): + return + + try: + ini = float(self.startOffsetLineEdit.text()) + + except: + msgBox = WarningParms("Please give correctly the Start Value") + if msgBox.exec_(): + return + + try: + end = float(self.stopOffsetLineEdit.text()) + except: + msgBox = WarningParms("Please give correctly the Stop Value") + if msgBox.exec_(): + return + + try: + step = float(self.stepOffsetLineEdit.text()) + + except: + msgBox = WarningParms("Please give correctly the Step Value") + if msgBox.exec_(): + return + + vectorString = "(%g,%g,%g)" % (ini, end, step) + OffsetVector = tuple(map(float, vectorString[1:-1].split(','))) + + if OffsetVector[0] >= OffsetVector[1]: + msgBox = WarningParms("Please set correctly the Start and Stop Values") + if msgBox.exec_(): + return + + if OffsetVector[2] <= 0: + msgBox = WarningParms("Please give correctly the Step Value") + if msgBox.exec_(): + return + + if np.abs(OffsetVector[0]) + size / 2.0 >= self.Scenario.Width / 2.0 or np.abs( + OffsetVector[1]) + size / 2.0 >= self.Scenario.Width / 2.0: + msgBox = WarningParms("Transducer is out of Scenario for the given Start, Stop, Step Values!!!!") + if msgBox.exec_(): + return + + borderOffset = float(self.borderOffsetLineEdit.text()) + + if size >= self.Scenario.Width: + msgBox = WarningParms("Transducer is larger than Scenario Width!!!!") + if msgBox.exec_(): + return + elif size <= 0 and not Point: + msgBox = WarningParms("Incorrect Transducer Size!!!!") + if msgBox.exec_(): + return + + if borderOffset < 0 or borderOffset >= self.Scenario.Height: + msgBox = WarningParms("Transducer is out of Scenario!!!!") + if msgBox.exec_(): + return + + transducer = Transducer('SimNDT-emisor', size, 0, borderOffset, location, Point, self.window, False, + self.backing) + if self.Transducers is None: + self.Transducers = list() + self.Transducers.append(transducer) + else: + self.Transducers[0] = transducer + + method = Transmission(location) if self.transmissionRadioButton.isChecked() else PulseEcho(location) + + linearScan = LinearScan(OffsetVector[0], OffsetVector[1], OffsetVector[2], location, method.Name, + method.Theta) + self.Inspection = copy.deepcopy(linearScan) + + if self.Signal is None: + msgBox = WarningParms("Please Setup Signal Parameters!!!!") + if msgBox.exec_(): + return + + + + except: + + msgBox = WarningParms() + msgBox.exec_() + return + + QDialog.accept(self)