Wed 28 Aug 21:38:52 CEST 2024

This commit is contained in:
sbosse 2024-08-28 21:42:43 +02:00
parent 233870b8ba
commit b1e6dcde8e

View File

@ -0,0 +1,89 @@
import numpy as np
from PySide.QtGui import *
from SimNDT.gui.Warnings import WarningParms
from SimNDT.gui.ui_twophasemodelimmersioncase import Ui_twoPhaseModelImmersionCaseDialog
from SimNDT.core.concreteModel import TwoPhaseModel, Granulometry
from SimNDT.core.geometryObjects import Concrete2PhaseImmersion
class TwoPhaseModelImmersionCaseDialog(QDialog, Ui_twoPhaseModelImmersionCaseDialog):
def __init__(self, parent=None, scenario=None, SimNDT_ConcreteMicrostructure=None):
super(TwoPhaseModelImmersionCaseDialog, self).__init__(parent)
self.setupUi(self)
self.scenario = scenario
self.progressBar.setVisible(False)
if SimNDT_ConcreteMicrostructure:
self.fractionDoubleSpinBox.setValue(SimNDT_ConcreteMicrostructure.Fraction)
self.matrixLabelSpinBox.setValue(SimNDT_ConcreteMicrostructure.LabelMatrix)
self.minDiameterDoubleSpinBox.setValue(SimNDT_ConcreteMicrostructure.MinDiameter)
self.maxDiameterDoubleSpinBox.setValue(SimNDT_ConcreteMicrostructure.MaxDiameter)
self.gradingDoubleSpinBox.setValue(SimNDT_ConcreteMicrostructure.Grading)
self.minAspectRatioDoubleSpinBox.setValue(SimNDT_ConcreteMicrostructure.MinAspectRatio)
self.maxAspectRatioDoubleSpinBox.setValue(SimNDT_ConcreteMicrostructure.MaxAspectRatio)
try:
self.boxWidthLineEdit.setText(str(SimNDT_ConcreteMicrostructure.BoxWidth))
self.boxHeightLineEdit.setText(str(SimNDT_ConcreteMicrostructure.BoxHeight))
self.circularSpecimenCheckBox.setChecked(SimNDT_ConcreteMicrostructure.isCircular)
self.labelSpinBox.setValue(SimNDT_ConcreteMicrostructure.LabelAggregate)
except:
pass
def accept(self):
try:
width = float(self.boxWidthLineEdit.text())
height = float(self.boxHeightLineEdit.text())
matrixLabel = self.matrixLabelSpinBox.value()
isCircular = self.circularSpecimenCheckBox.isChecked()
fraction = self.fractionDoubleSpinBox.value()
label = self.labelSpinBox.value()
minD = self.minDiameterDoubleSpinBox.value() * 1e-3
maxD = self.maxDiameterDoubleSpinBox.value() * 1e-3
nG = self.gradingDoubleSpinBox.value()
minAR = self.minAspectRatioDoubleSpinBox.value()
maxAR = self.maxAspectRatioDoubleSpinBox.value()
except:
msgBox = WarningParms()
msgBox.exec_()
MI, NI = np.shape(self.scenario.I)
Pixel_mm = self.scenario.Pixel_mm
NC, MC = int(width * Pixel_mm), int(height * Pixel_mm)
granulometry = Granulometry(MC, NC, Pixel_mm, minD, maxD, nG, minAR, maxAR, fraction, label)
twoPhaseModel = TwoPhaseModel(MC, NC, granulometry, matrixLabel)
image = twoPhaseModel.compute(self.progressBar)
I = np.ones((MI, NI), dtype=np.float32) * self.scenario.Label
I[MI / 2 - MC / 2:MI / 2 + MC / 2, NI / 2 - NC / 2:NI / 2 + NC / 2] = np.copy(image)
if isCircular:
X, Y = np.meshgrid(range(0, NI), range(0, MI))
Circular = ((X - NI / 2.) ** 2) / ((NC / 2.) ** 2) + ((Y - MI / 2.) ** 2) / ((MC / 2.) ** 2)
Img = (Circular > 1)
indx, indy = np.nonzero(Img == 1)
I[indx, indy] = self.scenario.Label
self.image = np.copy(I)
self.concrete2PhaseObjectImmersion = Concrete2PhaseImmersion(Fraction=fraction, LabelMatrix=matrixLabel,
MinDiameter=minD * 1e3, MaxDiameter=maxD * 1e3,
Grading=nG, MinAspectRatio=minAR,
MaxAspectRatio=maxAR,
BoxWidth=width, BoxHeight=height,
isCircular=isCircular, LabelAggregate=label)
QDialog.accept(self)