Wed 28 Aug 21:38:52 CEST 2024

This commit is contained in:
sbosse 2024-08-28 21:40:10 +02:00
parent 745f81d924
commit c8719353a3

View 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()