SedimentLayer: Add d50, sigma and critical_constraint data.

mesh
Pierre-Antoine Rouby 2023-08-02 13:40:46 +02:00
parent d636f5b637
commit 17d4b15761
4 changed files with 113 additions and 4 deletions

View File

@ -11,7 +11,9 @@ class Layer(SQLSubModel):
def __init__(self, def __init__(self,
id:int = -1, name:str = "", id:int = -1, name:str = "",
type = "", height = 0, type = "",
height = 0.0, d50 = 0.0, sigma = 0.0,
critical_constraint = 0.0,
sl = None, status = None): sl = None, status = None):
super(Layer, self).__init__() super(Layer, self).__init__()
@ -19,7 +21,11 @@ class Layer(SQLSubModel):
self._name = name self._name = name
self._type = type self._type = type
self._height = height self._height = height
self._d50 = d50
self._sigma = sigma
self._critical_constraint = critical_constraint
if id == -1: if id == -1:
self.id = Layer._id_cnt self.id = Layer._id_cnt
@ -52,6 +58,30 @@ class Layer(SQLSubModel):
def height(self, height): def height(self, height):
self._height = float(height) self._height = float(height)
@property
def d50(self):
return self._d50
@d50.setter
def d50(self, d50):
self._d50 = float(d50)
@property
def sigma(self):
return self._sigma
@sigma.setter
def sigma(self, sigma):
self._sigma = float(sigma)
@property
def critical_constraint(self):
return self._critical_constraint
@critical_constraint.setter
def critical_constraint(self, critical_constraint):
self._critical_constraint = float(critical_constraint)
@classmethod @classmethod
def _sql_create(cls, execute): def _sql_create(cls, execute):
execute(""" execute("""
@ -61,6 +91,9 @@ class Layer(SQLSubModel):
name TEXT NOT NULL, name TEXT NOT NULL,
type TEXT NOT NULL, type TEXT NOT NULL,
height REAL NOT NULL, height REAL NOT NULL,
d50 REAL NOT NULL,
sigma REAL NOT NULL,
critical_constraint REAL NOT NULL,
sl INTEGER, sl INTEGER,
FOREIGN KEY(sl) REFERENCES sedimentary_layer(id) FOREIGN KEY(sl) REFERENCES sedimentary_layer(id)
) )
@ -83,7 +116,7 @@ class Layer(SQLSubModel):
sl = data["sl"] sl = data["sl"]
table = execute( table = execute(
"SELECT id, ind, name, type, height " + "SELECT id, ind, name, type, height, d50, sigma, critical_constraint " +
"FROM sedimentary_layer_layer " + "FROM sedimentary_layer_layer " +
f"WHERE sl = {sl}" f"WHERE sl = {sl}"
) )
@ -97,6 +130,8 @@ class Layer(SQLSubModel):
layer = cls( layer = cls(
id = row[0], name = row[2], id = row[0], name = row[2],
type = row[3], height = row[4], type = row[3], height = row[4],
d50 = row[5], sigma = row[6],
critical_constraint = row[7],
sl = sl, status = data['status'] sl = sl, status = data['status']
) )
@ -110,10 +145,12 @@ class Layer(SQLSubModel):
sql = ( sql = (
"INSERT INTO " + "INSERT INTO " +
"sedimentary_layer_layer(id, ind, name, type, height, sl) "+ "sedimentary_layer_layer(id, ind, name, type, height, d50, sigma, critical_constraint, sl) "+
"VALUES (" + "VALUES (" +
f"{self.id}, {ind}, '{self._sql_format(self._name)}', " + f"{self.id}, {ind}, '{self._sql_format(self._name)}', " +
f"'{self._sql_format(self._type)}', '{self._height}', {sl.id}" + f"'{self._sql_format(self._type)}', {self._height}, " +
f"{self._d50}, {self._sigma}, {self._critical_constraint}, " +
f"{sl.id}" +
")" ")"
) )
execute(sql) execute(sql)

View File

@ -54,6 +54,12 @@ class TableModel(QAbstractTableModel):
return self._sl.get(row).type return self._sl.get(row).type
elif self._headers[column] == "height": elif self._headers[column] == "height":
return self._sl.get(row).height return self._sl.get(row).height
elif self._headers[column] == "d50":
return self._sl.get(row).d50
elif self._headers[column] == "sigma":
return self._sl.get(row).sigma
elif self._headers[column] == "critical_constraint":
return self._sl.get(row).critical_constraint
return QVariant() return QVariant()
@ -88,6 +94,24 @@ class TableModel(QAbstractTableModel):
self._sl, row, value self._sl, row, value
) )
) )
if self._headers[column] == "d50":
self._undo.push(
SetD50Command(
self._sl, row, value
)
)
if self._headers[column] == "sigma":
self._undo.push(
SetSigmaCommand(
self._sl, row, value
)
)
if self._headers[column] == "critical_constraint":
self._undo.push(
SetCriticalConstraintCommand(
self._sl, row, value
)
)
self.dataChanged.emit(index, index) self.dataChanged.emit(index, index)
return True return True

View File

@ -55,6 +55,51 @@ class SetHeightCommand(QUndoCommand):
def redo(self): def redo(self):
self._sediment_layers.get(self._index).height = self._new self._sediment_layers.get(self._index).height = self._new
class SetD50Command(QUndoCommand):
def __init__(self, sediment_layers, index, new_value):
QUndoCommand.__init__(self)
self._sediment_layers = sediment_layers
self._index = index
self._old = self._sediment_layers.get(self._index).d50
self._new = new_value
def undo(self):
self._sediment_layers.get(self._index).d50 = self._old
def redo(self):
self._sediment_layers.get(self._index).d50 = self._new
class SetSigmaCommand(QUndoCommand):
def __init__(self, sediment_layers, index, new_value):
QUndoCommand.__init__(self)
self._sediment_layers = sediment_layers
self._index = index
self._old = self._sediment_layers.get(self._index).sigma
self._new = new_value
def undo(self):
self._sediment_layers.get(self._index).sigma = self._old
def redo(self):
self._sediment_layers.get(self._index).sigma = self._new
class SetCriticalConstraintCommand(QUndoCommand):
def __init__(self, sediment_layers, index, new_value):
QUndoCommand.__init__(self)
self._sediment_layers = sediment_layers
self._index = index
self._old = self._sediment_layers.get(self._index).critical_constraint
self._new = new_value
def undo(self):
self._sediment_layers.get(self._index).critical_constraint = self._old
def redo(self):
self._sediment_layers.get(self._index).critical_constraint = self._new
class AddCommand(QUndoCommand): class AddCommand(QUndoCommand):
def __init__(self, sediment_layers, index): def __init__(self, sediment_layers, index):
QUndoCommand.__init__(self) QUndoCommand.__init__(self)

View File

@ -8,4 +8,7 @@ table_headers = {
"name": _translate("SedimentLayers", "Name"), "name": _translate("SedimentLayers", "Name"),
"type": _translate("SedimentLayers", "Type"), "type": _translate("SedimentLayers", "Type"),
"height": _translate("Sedimentlayers", "Height"), "height": _translate("Sedimentlayers", "Height"),
"d50": _translate("Sedimentlayers", "D50"),
"sigma": _translate("Sedimentlayers", "Sigma"),
"critical_constraint": _translate("Sedimentlayers", "Critical constraint"),
} }