mirror of https://gitlab.com/pamhyr/pamhyr2
Split reach: D90 and DIF now spread by the split
parent
0076faf03a
commit
f95c646ef3
|
|
@ -275,3 +275,44 @@ class D90AdisTS(SQLSubModel):
|
|||
x.set_as_not_deleted()
|
||||
|
||||
self.modified()
|
||||
|
||||
def split_reach(self, reach, profile, reach1, reach2):
|
||||
split_rk = profile.rk
|
||||
reach_rks = reach.reach.get_rk()
|
||||
if len(reach_rks) == 0:
|
||||
return
|
||||
|
||||
parts = [
|
||||
(reach1.id, min(reach_rks), split_rk),
|
||||
(reach2.id, split_rk, max(reach_rks)),
|
||||
]
|
||||
specifications = [
|
||||
specification
|
||||
for specification in self._data
|
||||
if (not specification.is_deleted() and
|
||||
specification.reach == reach.id)
|
||||
]
|
||||
|
||||
for specification in specifications:
|
||||
begin = specification.start_rk
|
||||
end = specification.end_rk
|
||||
if begin is None or end is None:
|
||||
continue
|
||||
|
||||
lower, upper = sorted((begin, end))
|
||||
reverse = begin > end
|
||||
|
||||
for new_reach, part_lower, part_upper in parts:
|
||||
clipped_lower = max(lower, part_lower)
|
||||
clipped_upper = min(upper, part_upper)
|
||||
if clipped_lower > clipped_upper:
|
||||
continue
|
||||
|
||||
start_rk = clipped_upper if reverse else clipped_lower
|
||||
end_rk = clipped_lower if reverse else clipped_upper
|
||||
self._data.append(specification.cloned_for(
|
||||
new_reach, start_rk, end_rk
|
||||
))
|
||||
|
||||
if len(specifications) != 0:
|
||||
self.modified()
|
||||
|
|
|
|||
|
|
@ -61,6 +61,10 @@ class D90AdisTSList(PamhyrModelList):
|
|||
self._status.modified()
|
||||
return n
|
||||
|
||||
def split_reach(self, reach, profile, reach1, reach2):
|
||||
for d90 in self.lst:
|
||||
d90.split_reach(reach, profile, reach1, reach2)
|
||||
|
||||
@property
|
||||
def D90_AdisTS_List(self):
|
||||
return self.lst
|
||||
|
|
|
|||
|
|
@ -261,3 +261,13 @@ class D90AdisTSSpec(SQLSubModel):
|
|||
def enabled(self, enabled):
|
||||
self._enabled = enabled
|
||||
self.modified()
|
||||
|
||||
def cloned_for(self, reach, start_rk, end_rk):
|
||||
new = D90AdisTSSpec(name=self._name_section, status=self._status)
|
||||
new._reach = reach
|
||||
new._start_rk = start_rk
|
||||
new._end_rk = end_rk
|
||||
new._d90 = self._d90
|
||||
new._enabled = self._enabled
|
||||
new.modified()
|
||||
return new
|
||||
|
|
|
|||
|
|
@ -329,3 +329,44 @@ class DIFAdisTS(SQLSubModel):
|
|||
x.set_as_not_deleted()
|
||||
|
||||
self.modified()
|
||||
|
||||
def split_reach(self, reach, profile, reach1, reach2):
|
||||
split_rk = profile.rk
|
||||
reach_rks = reach.reach.get_rk()
|
||||
if len(reach_rks) == 0:
|
||||
return
|
||||
|
||||
parts = [
|
||||
(reach1.id, min(reach_rks), split_rk),
|
||||
(reach2.id, split_rk, max(reach_rks)),
|
||||
]
|
||||
specifications = [
|
||||
specification
|
||||
for specification in self._data
|
||||
if (not specification.is_deleted() and
|
||||
specification.reach == reach.id)
|
||||
]
|
||||
|
||||
for specification in specifications:
|
||||
begin = specification.start_rk
|
||||
end = specification.end_rk
|
||||
if begin is None or end is None:
|
||||
continue
|
||||
|
||||
lower, upper = sorted((begin, end))
|
||||
reverse = begin > end
|
||||
|
||||
for new_reach, part_lower, part_upper in parts:
|
||||
clipped_lower = max(lower, part_lower)
|
||||
clipped_upper = min(upper, part_upper)
|
||||
if clipped_lower > clipped_upper:
|
||||
continue
|
||||
|
||||
start_rk = clipped_upper if reverse else clipped_lower
|
||||
end_rk = clipped_lower if reverse else clipped_upper
|
||||
self._data.append(specification.cloned_for(
|
||||
new_reach, start_rk, end_rk
|
||||
))
|
||||
|
||||
if len(specifications) != 0:
|
||||
self.modified()
|
||||
|
|
|
|||
|
|
@ -61,6 +61,10 @@ class DIFAdisTSList(PamhyrModelList):
|
|||
self._status.modified()
|
||||
return n
|
||||
|
||||
def split_reach(self, reach, profile, reach1, reach2):
|
||||
for dif in self.lst:
|
||||
dif.split_reach(reach, profile, reach1, reach2)
|
||||
|
||||
@property
|
||||
def DIF_AdisTS_List(self):
|
||||
return self.lst
|
||||
|
|
|
|||
|
|
@ -293,3 +293,15 @@ class DIFAdisTSSpec(SQLSubModel):
|
|||
def enabled(self, enabled):
|
||||
self._enabled = enabled
|
||||
self._status.modified()
|
||||
|
||||
def cloned_for(self, reach, start_rk, end_rk):
|
||||
new = DIFAdisTSSpec(method=self._method, status=self._status)
|
||||
new._reach = reach
|
||||
new._start_rk = start_rk
|
||||
new._end_rk = end_rk
|
||||
new._dif = self._dif
|
||||
new._b = self._b
|
||||
new._c = self._c
|
||||
new._enabled = self._enabled
|
||||
new.modified()
|
||||
return new
|
||||
|
|
|
|||
|
|
@ -1000,5 +1000,11 @@ Last export at: @date."""
|
|||
self._WeatherParameters.split_reach(
|
||||
reach, profile, r1, r2
|
||||
)
|
||||
self._D90AdisTS.split_reach(
|
||||
reach, profile, r1, r2
|
||||
)
|
||||
self._DIFAdisTS.split_reach(
|
||||
reach, profile, r1, r2
|
||||
)
|
||||
|
||||
return r1, r2
|
||||
|
|
|
|||
|
|
@ -123,9 +123,16 @@ class D90TableModel(PamhyrTableModel):
|
|||
self._undo.indexChanged.connect(lambda _: self.update())
|
||||
|
||||
def _setup_lst(self):
|
||||
enabled_reaches = {
|
||||
reach.id for reach in self._river.enable_edges()
|
||||
}
|
||||
self._lst = list(
|
||||
filter(
|
||||
lambda d90: d90._deleted is False,
|
||||
lambda d90: (
|
||||
d90._deleted is False
|
||||
and (d90.reach in (None, -1)
|
||||
or d90.reach in enabled_reaches)
|
||||
),
|
||||
self._data._data
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -125,9 +125,16 @@ class DIFTableModel(PamhyrTableModel):
|
|||
self._undo.indexChanged.connect(lambda _: self.update())
|
||||
|
||||
def _setup_lst(self):
|
||||
enabled_reaches = {
|
||||
reach.id for reach in self._river.enable_edges()
|
||||
}
|
||||
self._lst = list(
|
||||
filter(
|
||||
lambda dif: dif._deleted is False,
|
||||
lambda dif: (
|
||||
dif._deleted is False
|
||||
and (dif.reach in (None, -1)
|
||||
or dif.reach in enabled_reaches)
|
||||
),
|
||||
self._data._data
|
||||
)
|
||||
)
|
||||
|
|
|
|||
Loading…
Reference in New Issue