mirror of https://gitlab.com/pamhyr/pamhyr2
River: Add reach split methods.
parent
f516db0e48
commit
926cade437
|
|
@ -289,6 +289,22 @@ class PointXYZ(Point):
|
|||
new_p.modified()
|
||||
return new_p
|
||||
|
||||
def cloned_for(self, new_profile):
|
||||
new_p = PointXYZ(
|
||||
id=-1,
|
||||
name=self.name,
|
||||
x=self.x, y=self.y, z=self.z,
|
||||
profile=new_profile,
|
||||
status=self._status
|
||||
)
|
||||
if self.is_deleted():
|
||||
new_p.set_as_deleted()
|
||||
|
||||
new_p._sl = self.sl
|
||||
|
||||
new_p.modified()
|
||||
return new_p
|
||||
|
||||
def __repr__(self):
|
||||
return f"({self._x}, {self._y}, {self._z}, {self._name})"
|
||||
|
||||
|
|
|
|||
|
|
@ -402,6 +402,26 @@ class ProfileXYZ(Profile, SQLSubModel):
|
|||
new_p.modified()
|
||||
return new_p
|
||||
|
||||
def cloned_for(self, new_reach):
|
||||
new_p = ProfileXYZ(
|
||||
id=-1,
|
||||
name=self.name,
|
||||
rk=self.rk,
|
||||
reach=new_reach,
|
||||
status=self._status
|
||||
)
|
||||
if self.is_deleted():
|
||||
new_p.set_as_deleted()
|
||||
|
||||
new_p._sl = self.sl
|
||||
|
||||
for point in self._points:
|
||||
p = point.cloned_for(new_p)
|
||||
new_p._points.append(p)
|
||||
|
||||
new_p.modified()
|
||||
return new_p
|
||||
|
||||
def point_from_data(self, header, data):
|
||||
def float_format(s: str):
|
||||
return float(
|
||||
|
|
|
|||
|
|
@ -892,3 +892,20 @@ class Reach(SQLSubModel):
|
|||
|
||||
profile.rk = previous.rk + dist
|
||||
previous = profile
|
||||
|
||||
def _split(self, profile, reach1, reach2):
|
||||
if profile is None:
|
||||
return
|
||||
|
||||
nr1 = Reach(status=self._status, parent=reach1)
|
||||
nr2 = Reach(status=self._status, parent=reach2)
|
||||
|
||||
ind = self.profiles.index(profile)
|
||||
|
||||
nr1_profiles = self.profiles[:ind+1]
|
||||
nr2_profiles = self.profiles[ind:]
|
||||
|
||||
nr1._profiles = list(map(lambda p: p.cloned_for(nr1), nr1_profiles))
|
||||
nr2._profiles = list(map(lambda p: p.cloned_for(nr2), nr2_profiles))
|
||||
|
||||
return nr1, nr2
|
||||
|
|
|
|||
|
|
@ -417,6 +417,34 @@ class RiverReach(Edge):
|
|||
def frictions(self):
|
||||
return self._frictions
|
||||
|
||||
def _split(self, profile, new_node):
|
||||
name = self.name
|
||||
node1 = self.node1
|
||||
node2 = self.node2
|
||||
|
||||
new_reach1 = RiverReach(
|
||||
id=-1, name=name + "(part 1)",
|
||||
node1=node1, node2=new_node,
|
||||
status=self._status,
|
||||
)
|
||||
|
||||
new_reach2 = RiverReach(
|
||||
id=-1, name=name + "(part 2)",
|
||||
node1=new_node, node2=node2,
|
||||
status=self._status,
|
||||
)
|
||||
|
||||
nr1, nr2 = self._reach._split(profile, new_reach1, new_reach2)
|
||||
|
||||
new_reach1._reach = nr1
|
||||
new_reach1._frictions = self._frictions
|
||||
|
||||
new_reach2._reach = nr2
|
||||
new_reach2._frictions = self._frictions
|
||||
|
||||
self.disable()
|
||||
|
||||
return new_reach1, new_reach2
|
||||
|
||||
class River(Graph):
|
||||
_sub_classes = [
|
||||
|
|
@ -874,3 +902,20 @@ Last export at: @date."""
|
|||
@results.setter
|
||||
def results(self, results):
|
||||
self._results = results
|
||||
|
||||
def _split_reach(self, reach, profile):
|
||||
node1 = reach.node1
|
||||
node2 = reach.node2
|
||||
|
||||
x1, y1 = node1.x, node1.y
|
||||
x2, y2 = node2.x, node2.y
|
||||
|
||||
center_x = (x1 + x2) / 2
|
||||
center_y = (y1 + y2) / 2
|
||||
|
||||
new_node = self.add_node(center_x, center_y)
|
||||
|
||||
r1, r2 = reach._split(profile, new_node)
|
||||
|
||||
self._add_edge(r1)
|
||||
self._add_edge(r2)
|
||||
|
|
|
|||
Loading…
Reference in New Issue