Wed 28 Aug 21:38:52 CEST 2024
This commit is contained in:
parent
745f81d924
commit
c8719353a3
516
src/SimNDT/gui/managerDialogsController.py
Normal file
516
src/SimNDT/gui/managerDialogsController.py
Normal file
|
@ -0,0 +1,516 @@
|
|||
__author__ = 'Miguel Molero'
|
||||
|
||||
|
||||
|
||||
import os
|
||||
import copy
|
||||
import subprocess
|
||||
|
||||
from PySide.QtCore import *
|
||||
from PySide.QtGui import *
|
||||
|
||||
from SimNDT.gui.newScenarioController import NewScenario
|
||||
from SimNDT.gui.addEllipseController import AddEllipse
|
||||
from SimNDT.gui.addRectangleController import AddRectangle
|
||||
from SimNDT.gui.loadScenarioFromImageController import LoadScenarioFromImage
|
||||
from SimNDT.gui.previewScenarioController import PreviewScenario
|
||||
|
||||
from SimNDT.gui.materialSetupController import MaterialSetup
|
||||
from SimNDT.gui.boundarySetupController import BoundarySetup
|
||||
from SimNDT.gui.singleLaunchSetupController import SingleLaunchSetup
|
||||
from SimNDT.gui.linearScanController import LinearScanSetup
|
||||
from SimNDT.gui.tomographySetupController import TomographySetup
|
||||
|
||||
from SimNDT.gui.simulationSetupController import SimulationSetup
|
||||
from SimNDT.gui.checkSimulationController import CheckSimulation
|
||||
from SimNDT.gui.runSimulationController import RunSimulation
|
||||
from SimNDT.gui.engineController import EngineController
|
||||
from SimNDT.gui.generateVideoController import GenerateVideo
|
||||
|
||||
from SimNDT.gui.twoPhaseModelDryCaseController import TwoPhaseModelDryCaseDialog
|
||||
from SimNDT.gui.threePhaseModelDryCaseController import ThreePhaseModelDryCaseDialog
|
||||
from SimNDT.gui.twoPhaseModelImmersionCaseController import TwoPhaseModelImmersionCaseDialog
|
||||
from SimNDT.gui.threePhaseModelImmersionCaseController import ThreePhaseModelImmersionCaseDialog
|
||||
|
||||
from SimNDT.core.scenario import Scenario
|
||||
from SimNDT.core.geometryObjects import Ellipse, Circle, Square, Rectangle
|
||||
from SimNDT.core.simPack import SimPack
|
||||
from SimNDT.core.receivers import Receivers
|
||||
|
||||
from SimNDT.gui.snapshots import SnapShots
|
||||
from SimNDT.gui.Warnings import WarningParms, DoneParms
|
||||
from SimNDT.gui import HelperMethods
|
||||
|
||||
|
||||
from SimNDT.core.concreteModel import TwoPhaseModel
|
||||
|
||||
|
||||
import numpy as np
|
||||
|
||||
def toIntList(stringList):
|
||||
splitList = stringList.split(',')
|
||||
if len(splitList)==1:
|
||||
if splitList[0]=='':
|
||||
splitList=[] # empty list
|
||||
return [int(x) for x in splitList]
|
||||
|
||||
|
||||
class ManagerDialogs(object):
|
||||
lastSimulationSetup = dict(
|
||||
isView = False,
|
||||
color = 0,
|
||||
dB = 60,
|
||||
step = 100,
|
||||
field = 3,
|
||||
isReceiverPlot = False,
|
||||
isEnableFields = False,
|
||||
isEnableSignals = False,
|
||||
isEnableImages = False,
|
||||
isEnableNumPy = False,
|
||||
isEnableVolume = False,
|
||||
sensorShape = [],
|
||||
sensorPlacement = [],
|
||||
sensorSize = 0,
|
||||
lastPath = ''
|
||||
)
|
||||
|
||||
def newGeometryModel(self):
|
||||
|
||||
dialog = NewScenario()
|
||||
|
||||
if self.SimNDT_Scenario is not None:
|
||||
dialog.widthLineEdit.setText(str(self.SimNDT_Scenario.Width))
|
||||
dialog.heightLineEdit.setText(str(self.SimNDT_Scenario.Height))
|
||||
dialog.pixelLineEdit.setText(str(self.SimNDT_Scenario.Pixel_mm))
|
||||
dialog.labelSpinBox.setValue(int(self.SimNDT_Scenario.Label))
|
||||
|
||||
if dialog.exec_():
|
||||
width = dialog.width
|
||||
height = dialog.height
|
||||
pixel = dialog.pixel
|
||||
label = dialog.label
|
||||
|
||||
self.SimNDT_Scenario = Scenario(width,height,pixel,label)
|
||||
self.SimNDT_ObjectList = None
|
||||
self.SimNDT_Check = False
|
||||
|
||||
self.dirty = True
|
||||
|
||||
|
||||
self.updateUI()
|
||||
|
||||
|
||||
def addEllipse(self):
|
||||
dlg = AddEllipse()
|
||||
if dlg.exec_():
|
||||
centerX, centerY, major, minor, theta, label = dlg.getParms()
|
||||
if self.SimNDT_Scenario:
|
||||
try:
|
||||
self.SimNDT_Scenario.addEllipse(centerX, centerY, major, minor, theta, label)
|
||||
if major!=minor:
|
||||
obj = Ellipse(centerX, centerY, major, minor, theta, label)
|
||||
else:
|
||||
obj = Circle(centerX,centerY, major, label)
|
||||
|
||||
except Exception as e:
|
||||
msg = WarningParms("Error in the object generation!!!. %s"%e)
|
||||
msg.exec_()
|
||||
return
|
||||
|
||||
if self.SimNDT_ObjectList is None:
|
||||
self.SimNDT_ObjectList = list()
|
||||
self.SimNDT_ObjectList.append(obj)
|
||||
|
||||
|
||||
self.dirty = True
|
||||
self.updateUI()
|
||||
|
||||
|
||||
def addRectangle(self):
|
||||
|
||||
dlg = AddRectangle()
|
||||
if dlg.exec_():
|
||||
centerX, centerY, width, height, theta, label = dlg.getParms()
|
||||
if self.SimNDT_Scenario:
|
||||
|
||||
try:
|
||||
self.SimNDT_Scenario.addRectangle(centerX, centerY, width, height, theta, label)
|
||||
if width!=height:
|
||||
obj = Rectangle(centerX, centerY, width, height, theta, label)
|
||||
else:
|
||||
obj = Square(centerX,centerY, width, theta, label)
|
||||
|
||||
except Exception as e:
|
||||
msg = WarningParms("Error in the object generation!!!")
|
||||
msg.exec_()
|
||||
return
|
||||
|
||||
if self.SimNDT_ObjectList is None:
|
||||
self.SimNDT_ObjectList = list()
|
||||
self.SimNDT_ObjectList.append(obj)
|
||||
|
||||
self.dirty = True
|
||||
self.updateUI()
|
||||
|
||||
|
||||
|
||||
def loadImage(self):
|
||||
|
||||
dlg = LoadScenarioFromImage(self.filename)
|
||||
if dlg.exec_():
|
||||
|
||||
|
||||
M,N = np.shape(dlg.image_labeled)
|
||||
Pixel = float(dlg.Pixel)
|
||||
|
||||
Width = N/Pixel
|
||||
Height = M/Pixel
|
||||
|
||||
if self.SimNDT_Scenario is None:
|
||||
self.SimNDT_Scenario = Scenario()
|
||||
self.SimNDT_Scenario.setImage(dlg.image_labeled, Width, Height, Pixel, Label=0)
|
||||
else:
|
||||
self.SimNDT_Scenario.setImage(dlg.image_labeled, Width, Height, Pixel, Label=0)
|
||||
|
||||
self.GraphicView.setupZoom(100)
|
||||
self.statusBarWidget.zoomSpinBox.setValue(100)
|
||||
|
||||
self.SimNDT_ObjectList = None
|
||||
self.SimNDT_Boundaries = None
|
||||
self.SimNDT_Check = False
|
||||
|
||||
self.dirty = True
|
||||
self.updateUI()
|
||||
|
||||
|
||||
def previewScenario(self):
|
||||
|
||||
dlg = PreviewScenario(self.SimNDT_Scenario, self)
|
||||
dlg.show()
|
||||
|
||||
|
||||
def rotateScenarioCounterClockwise(self):
|
||||
|
||||
self.SimNDT_Scenario.rotate(direction="clockwise")
|
||||
self.dirty = True
|
||||
self.SimNDT_Check = False
|
||||
self.updateUI()
|
||||
|
||||
|
||||
def rotateScenarioClockwise(self):
|
||||
self.SimNDT_Scenario.rotate(direction="counterclockwise")
|
||||
self.dirty = True
|
||||
self.SimNDT_Check = False
|
||||
self.updateUI()
|
||||
|
||||
|
||||
def materialSetup(self):
|
||||
|
||||
dlg = MaterialSetup(self.SimNDT_Materials, filename = self.filename)
|
||||
if dlg.exec_():
|
||||
self.SimNDT_Materials = copy.deepcopy(dlg.SimNDT_Materials)
|
||||
self.dirty = True
|
||||
|
||||
self.SimNDT_Check = False
|
||||
self.updateUI()
|
||||
|
||||
|
||||
def boundarySetup(self):
|
||||
|
||||
dlg = BoundarySetup(self.SimNDT_Boundaries)
|
||||
if dlg.exec_():
|
||||
self.SimNDT_Boundaries = copy.deepcopy(dlg.Boundaries)
|
||||
self.SimNDT_Scenario.createBoundaries(self.SimNDT_Boundaries)
|
||||
|
||||
self.dirty = True
|
||||
self.SimNDT_Check = False
|
||||
self.updateUI()
|
||||
|
||||
|
||||
def singleLaunchSetup(self):
|
||||
|
||||
dlg = SingleLaunchSetup(self.SimNDT_Scenario, self.SimNDT_Source, self.SimNDT_Inspection, self.SimNDT_Transducers, self.SimNDT_Signal)
|
||||
if dlg.exec_():
|
||||
|
||||
self.SimNDT_Source = copy.deepcopy(dlg.Source)
|
||||
self.SimNDT_Transducers = copy.deepcopy(dlg.Transducers)
|
||||
self.SimNDT_Inspection = copy.deepcopy(dlg.Inspection)
|
||||
self.SimNDT_Signal = copy.deepcopy(dlg.Signal)
|
||||
|
||||
self.SimNDT_Check = False
|
||||
self.dirty = True
|
||||
self.updateUI()
|
||||
|
||||
|
||||
def linearScanSetup(self):
|
||||
dlg = LinearScanSetup(self.SimNDT_Scenario, self.SimNDT_Source, self.SimNDT_Inspection, self.SimNDT_Transducers, self.SimNDT_Signal)
|
||||
if dlg.exec_():
|
||||
|
||||
self.SimNDT_Source = copy.deepcopy(dlg.Source)
|
||||
self.SimNDT_Transducers = copy.deepcopy(dlg.Transducers)
|
||||
self.SimNDT_Inspection = copy.deepcopy(dlg.Inspection)
|
||||
self.SimNDT_Signal = copy.deepcopy(dlg.Signal)
|
||||
|
||||
self.SimNDT_Check = False
|
||||
self.dirty = True
|
||||
self.updateUI()
|
||||
|
||||
|
||||
def tomographySetup(self):
|
||||
dlg = TomographySetup(self.SimNDT_Scenario, self.SimNDT_Source, self.SimNDT_Inspection, self.SimNDT_Transducers, self.SimNDT_Signal)
|
||||
if dlg.exec_():
|
||||
|
||||
|
||||
self.SimNDT_Source = copy.deepcopy(dlg.Source)
|
||||
self.SimNDT_Transducers = copy.deepcopy(dlg.Transducers)
|
||||
self.SimNDT_Inspection = copy.deepcopy(dlg.Inspection)
|
||||
self.SimNDT_Signal = copy.deepcopy(dlg.Signal)
|
||||
|
||||
self.SimNDT_Check = False
|
||||
self.dirty = True
|
||||
self.updateUI()
|
||||
|
||||
|
||||
|
||||
def signalSetup(self):
|
||||
pass
|
||||
|
||||
def simulationSetup(self):
|
||||
|
||||
dlg = SimulationSetup(self.SimNDT_Scenario, self.SimNDT_Materials,
|
||||
self.SimNDT_Transducers, self.SimNDT_Signal,
|
||||
self.SimNDT_Simulation)
|
||||
if dlg.exec_():
|
||||
|
||||
self.SimNDT_Simulation = copy.deepcopy(dlg.Simulation)
|
||||
self.dirty = True
|
||||
self.OpenSimFile = False
|
||||
self.SimNDT_Check = False
|
||||
self.updateUI()
|
||||
|
||||
|
||||
def checkSimulation(self):
|
||||
|
||||
dlg = CheckSimulation(self.SimNDT_Scenario, self.SimNDT_Materials, self.SimNDT_Boundaries,
|
||||
self.SimNDT_Transducers, self.SimNDT_Inspection, self.SimNDT_Signal, self.SimNDT_Simulation)
|
||||
|
||||
self.SimNDT_Check = False
|
||||
|
||||
if dlg.exec_():
|
||||
self.SimNDT_Check = True
|
||||
|
||||
self.SimNDT_Scenario = copy.deepcopy(dlg.Scenario)
|
||||
self.SimNDT_Boundaries = copy.deepcopy(dlg.Boundaries)
|
||||
self.SimNDT_Inspection = copy.deepcopy(dlg.Inspection)
|
||||
self.dirty = True
|
||||
self.OpenSimFile = False
|
||||
self.updateUI()
|
||||
|
||||
|
||||
def runSimulation(self):
|
||||
self.SimNDT_Simulation.lastSimulationSetup = self.lastSimulationSetup
|
||||
dlg = RunSimulation(self.filename, self.SimNDT_Simulation)
|
||||
if dlg.exec_():
|
||||
|
||||
DB = dlg.visualizacionRangeSpinBox.value()
|
||||
color = dlg.colormapComboBox.currentIndex()
|
||||
field = dlg.fieldSelectorComboBox.currentIndex()
|
||||
step = dlg.snapshotStepSpinBox.value()
|
||||
isView = dlg.viewCheckBox.isChecked()
|
||||
isReceiverPlot = dlg.receiverCheckBox.isChecked()
|
||||
isEnableFields = dlg.enableSavingFieldsCheckBox.isChecked()
|
||||
isEnableSignals = dlg.enableSavingSignalsCheckBox.isChecked()
|
||||
isEnableImages = dlg.enableSavingImagesCheckBox.isChecked()
|
||||
isEnableNumPy = dlg.enableSavingNumpyCheckBox.isChecked()
|
||||
isEnableVolume = dlg.enableSavingVolumeCheckBox.isChecked()
|
||||
sensorShape = toIntList(dlg.signalShapeLineEdit.text())
|
||||
sensorPlacement = toIntList(dlg.signalPlacementLineEdit.text())
|
||||
sensorSize = float(dlg.signalSizeLineEdit.text())
|
||||
lastPath = self.lastSimulationSetup["lastPath"]
|
||||
self.lastSimulationSetup = dict(
|
||||
isView = dlg.viewCheckBox.isChecked(),
|
||||
color = color,
|
||||
dB = DB,
|
||||
step = step,
|
||||
field = field,
|
||||
isReceiverPlot = isReceiverPlot,
|
||||
isEnableFields = isEnableFields,
|
||||
isEnableSignals = isEnableSignals,
|
||||
isEnableImages = isEnableImages,
|
||||
isEnableNumPy = isEnableNumPy,
|
||||
isEnableVolume = isEnableVolume,
|
||||
sensorShape = sensorShape,
|
||||
sensorPlacement = sensorPlacement,
|
||||
sensorSize = sensorSize,
|
||||
lastPath = lastPath
|
||||
)
|
||||
if isView:
|
||||
self.GraphicView.setColormap(color)
|
||||
|
||||
if dlg.basename is not None:
|
||||
self.SimNDT_SnapShots = SnapShots(True, Step=step, Filename = dlg.basename, dB = DB,
|
||||
Color = color,
|
||||
Field = field,
|
||||
enableFields=isEnableFields,
|
||||
enableSignals=isEnableSignals,
|
||||
enableImages=isEnableImages,
|
||||
enableNumPy=isEnableNumPy,
|
||||
enableVolume=isEnableVolume,
|
||||
enableView=isView,
|
||||
sensorShape = sensorShape,
|
||||
sensorPlacement = sensorPlacement,
|
||||
sensorSize = sensorSize )
|
||||
else:
|
||||
self.SimNDT_SnapShots = SnapShots(dB = DB,
|
||||
enableFields=isEnableFields,
|
||||
enableSignals=isEnableSignals,
|
||||
enableImages=isEnableImages,
|
||||
enableNumPy=isEnableNumPy,
|
||||
enableVolume=isEnableVolume,
|
||||
enableView=isView)
|
||||
|
||||
|
||||
self.runEngine(isView, isReceiverPlot)
|
||||
|
||||
|
||||
|
||||
def runEngine(self, isView=False, isReceiverPlot=False):
|
||||
|
||||
|
||||
self.dirty = True
|
||||
|
||||
self.menuFile.menuAction().setEnabled(False)
|
||||
self.menuConfiguration.menuAction().setEnabled(False)
|
||||
self.menuPlotting_Tools.menuAction().setEnabled(False)
|
||||
self.menuTools.menuAction().setEnabled(False)
|
||||
HelperMethods.setEnabled(self.fileMenuActions, False)
|
||||
HelperMethods.setEnabled(self.geometryMenuActions, False)
|
||||
HelperMethods.setEnabled(self.inspectionMenuActions, False)
|
||||
HelperMethods.setEnabled(self.simulationMenuActions, False)
|
||||
|
||||
|
||||
self.statusBarWidget.startSimulation(self.SimNDT_Simulation.TimeSteps)
|
||||
|
||||
if isView:
|
||||
self.statusBarWidget.viewOn()
|
||||
else:
|
||||
self.statusBarWidget.updateGeometryFrame()
|
||||
|
||||
|
||||
simPack = SimPack(self.SimNDT_Scenario, self.SimNDT_Materials, self.SimNDT_Boundaries,
|
||||
self.SimNDT_Inspection, self.SimNDT_Source, self.SimNDT_Transducers, self.SimNDT_Signal,
|
||||
self.SimNDT_Simulation)
|
||||
|
||||
engine = EngineController(simPack, isView, isReceiverPlot, self.statusBarWidget, self)
|
||||
|
||||
|
||||
state = engine.run()
|
||||
|
||||
|
||||
self.statusBarWidget.endSimulation()
|
||||
|
||||
self.PauseSimulation = False
|
||||
|
||||
if state == "Stop":
|
||||
self.StopSimulation = False
|
||||
self.status.showMessage("Stop by User!!!!!", 15000)
|
||||
message = WarningParms("Stop by User!!!")
|
||||
message.exec_()
|
||||
else:
|
||||
self.status.showMessage("Done", 15000)
|
||||
message = DoneParms()
|
||||
message.exec_()
|
||||
|
||||
|
||||
|
||||
self.menuFile.menuAction().setEnabled(True)
|
||||
self.menuConfiguration.menuAction().setEnabled(True)
|
||||
self.menuPlotting_Tools.menuAction().setEnabled(True)
|
||||
self.menuTools.menuAction().setEnabled(True)
|
||||
HelperMethods.setEnabled(self.fileMenuActions, True)
|
||||
HelperMethods.setEnabled(self.geometryMenuActions, True)
|
||||
HelperMethods.setEnabled(self.inspectionMenuActions, True)
|
||||
HelperMethods.setEnabled(self.simulationMenuActions, True)
|
||||
|
||||
|
||||
self.setPlotInspectionsMenu()
|
||||
self.SimNDT_Receivers = Receivers(self.SimNDT_Inspection.Name)
|
||||
self.SimNDT_Receivers.setReceivers(engine)
|
||||
|
||||
|
||||
def generateVideo(self):
|
||||
|
||||
dlg = GenerateVideo()
|
||||
dlg.exec_()
|
||||
|
||||
|
||||
def twoPhaseModelDryCase(self):
|
||||
|
||||
dlg = TwoPhaseModelDryCaseDialog(None, self.SimNDT_Scenario, self.SimNDT_ConcreteMicrostructure)
|
||||
if dlg.exec_():
|
||||
|
||||
self.SimNDT_Scenario.I = dlg.image
|
||||
self.SimNDT_Scenario.resetBoundary()
|
||||
self.SimNDT_ObjectList = None
|
||||
self.SimNDT_Check = False
|
||||
self.dirty = True
|
||||
|
||||
|
||||
self.SimNDT_ConcreteMicrostructure = dlg.concrete2PhaseObject
|
||||
|
||||
|
||||
|
||||
|
||||
self.updateUI()
|
||||
|
||||
|
||||
|
||||
|
||||
def threePhaseModelDryCase(self):
|
||||
|
||||
dlg = ThreePhaseModelDryCaseDialog(None, self.SimNDT_Scenario, self.SimNDT_ConcreteMicrostructure)
|
||||
if dlg.exec_():
|
||||
|
||||
self.SimNDT_Scenario.I = dlg.image
|
||||
self.SimNDT_Scenario.resetBoundary()
|
||||
self.SimNDT_ObjectList = None
|
||||
self.SimNDT_Check = False
|
||||
self.dirty = True
|
||||
|
||||
self.SimNDT_ConcreteMicrostructure = dlg.concrete3PhaseObject
|
||||
|
||||
self.updateUI()
|
||||
|
||||
|
||||
def twoPhaseModelImmersionCase(self):
|
||||
|
||||
dlg = TwoPhaseModelImmersionCaseDialog(None, self.SimNDT_Scenario, self.SimNDT_ConcreteMicrostructure)
|
||||
if dlg.exec_():
|
||||
|
||||
self.SimNDT_Scenario.I = dlg.image
|
||||
self.SimNDT_Scenario.resetBoundary()
|
||||
self.SimNDT_ObjectList = None
|
||||
self.SimNDT_Check = False
|
||||
self.dirty = True
|
||||
|
||||
self.SimNDT_ConcreteMicrostructure = dlg.concrete2PhaseObjectImmersion
|
||||
|
||||
|
||||
self.updateUI()
|
||||
|
||||
|
||||
def threePhaseModelImmersionCase(self):
|
||||
|
||||
dlg = ThreePhaseModelImmersionCaseDialog(None, self.SimNDT_Scenario, self.SimNDT_ConcreteMicrostructure)
|
||||
if dlg.exec_():
|
||||
|
||||
self.SimNDT_Scenario.I = dlg.image
|
||||
self.SimNDT_Scenario.resetBoundary()
|
||||
self.SimNDT_ObjectList = None
|
||||
self.SimNDT_Check = False
|
||||
self.dirty = True
|
||||
|
||||
self.SimNDT_ConcreteMicrostructure = dlg.concrete3PhaseObjectImmersion
|
||||
|
||||
self.updateUI()
|
||||
|
Loading…
Reference in New Issue
Block a user