Wed 28 Aug 21:38:52 CEST 2024
This commit is contained in:
parent
6ce5cfae8f
commit
cdb20ab3ac
108
src/SimNDT/gui/threePhaseModelImmersionCaseController.py
Normal file
108
src/SimNDT/gui/threePhaseModelImmersionCaseController.py
Normal file
|
@ -0,0 +1,108 @@
|
|||
import numpy as np
|
||||
|
||||
from PySide.QtGui import *
|
||||
|
||||
from SimNDT.gui.Warnings import WarningParms
|
||||
from SimNDT.gui.ui_threephasemodelimmersioncase import Ui_threePhaseModelImmersionCaseDialog
|
||||
|
||||
from SimNDT.core.concreteModel import ThreePhaseModel, Granulometry
|
||||
from SimNDT.core.geometryObjects import Concrete3PhaseImmersion
|
||||
|
||||
|
||||
class ThreePhaseModelImmersionCaseDialog(QDialog, Ui_threePhaseModelImmersionCaseDialog):
|
||||
def __init__(self, parent=None, scenario=None, SimNDT_ConcreteMicrostructure=None):
|
||||
super(ThreePhaseModelImmersionCaseDialog, self).__init__(parent)
|
||||
self.setupUi(self)
|
||||
self.scenario = scenario
|
||||
|
||||
self.progressBar.setVisible(False)
|
||||
|
||||
if SimNDT_ConcreteMicrostructure:
|
||||
|
||||
self.fractionDoubleSpinBox.setValue(SimNDT_ConcreteMicrostructure.Fraction)
|
||||
self.labelSpinBox.setValue(SimNDT_ConcreteMicrostructure.LabelAggregate)
|
||||
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)
|
||||
|
||||
self.fractionDoubleSpinBox_2.setValue(SimNDT_ConcreteMicrostructure.FractionAir)
|
||||
self.labelSpinBox_2.setValue(SimNDT_ConcreteMicrostructure.LabelAir)
|
||||
self.minDiameterDoubleSpinBox_2.setValue(SimNDT_ConcreteMicrostructure.MinDiameterAir)
|
||||
self.maxDiameterDoubleSpinBox_2.setValue(SimNDT_ConcreteMicrostructure.MaxDiameterAir)
|
||||
self.gradingDoubleSpinBox_2.setValue(SimNDT_ConcreteMicrostructure.GradingAir)
|
||||
|
||||
try:
|
||||
self.boxWidthLineEdit.setText(str(SimNDT_ConcreteMicrostructure.BoxWidth))
|
||||
self.boxHeightLineEdit.setText(str(SimNDT_ConcreteMicrostructure.BoxHeight))
|
||||
|
||||
self.circularSpecimenCheckBox.setChecked(SimNDT_ConcreteMicrostructure.isCircular)
|
||||
self.labelSpinBox_2.setValue(SimNDT_ConcreteMicrostructure.LabelAir)
|
||||
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()
|
||||
|
||||
fraction2 = self.fractionDoubleSpinBox_2.value()
|
||||
label2 = self.labelSpinBox_2.value()
|
||||
|
||||
minD2 = self.minDiameterDoubleSpinBox_2.value() * 1e-3
|
||||
maxD2 = self.maxDiameterDoubleSpinBox_2.value() * 1e-3
|
||||
|
||||
nG2 = self.gradingDoubleSpinBox_2.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)
|
||||
granulometry2 = Granulometry(MC, NC, Pixel_mm, minD2, maxD2, nG2, 0, 1, fraction2, label2)
|
||||
threePhaseModel = ThreePhaseModel(MC, NC, granulometry, granulometry2, matrixLabel)
|
||||
image = threePhaseModel.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.concrete3PhaseObjectImmersion = Concrete3PhaseImmersion(Fraction=fraction, LabelAggregate=label,
|
||||
MinDiameter=minD * 1e3, MaxDiameter=maxD * 1e3,
|
||||
Grading=nG, MinAspectRatio=minAR,
|
||||
MaxAspectRatio=maxAR,
|
||||
FractionsAir=fraction2, LabelAir=label2,
|
||||
MinDiameterAir=minD2 * 1e3,
|
||||
MaxDiameterAir=maxD2 * 1e3, GradingAir=nG2,
|
||||
BoxWidth=width, BoxHeight=height,
|
||||
isCircular=isCircular)
|
||||
|
||||
QDialog.accept(self)
|
Loading…
Reference in New Issue
Block a user