mirror of
https://gitlab.com/pamhyr/pamhyr2.git
synced 2026-10-30 03:20:41 +01:00
pamhyr: Add just-in-time database geometry loading.
This commit is contained in:
1 parent
a603c3a63f
commit
ab9ebc6400
9 files changed
+140
-77
No files matched your search
+39
-19
@@ -94,8 +94,8 @@ class Reach(SQLSubModel):
|
||||
Returns:
|
||||
The profile at index i
|
||||
"""
|
||||
if i < len(self._profiles):
|
||||
return self._profiles[i]
|
||||
if i < len(self.profiles):
|
||||
return self.profiles[i]
|
||||
|
||||
return None
|
||||
|
||||
@@ -106,12 +106,32 @@ class Reach(SQLSubModel):
|
||||
|
||||
return self._parent.name
|
||||
|
||||
def _get_profiles_list(self):
|
||||
# Profiles list generator is type (int, Point) with the first
|
||||
# element the index of the Point in list
|
||||
logger.info(f"Load profiles from reach {self.name}")
|
||||
return list(
|
||||
map(
|
||||
lambda p: p[1],
|
||||
sorted(
|
||||
self._profiles,
|
||||
key = lambda p: p[0]
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
def __len__(self):
|
||||
if not isinstance(self._profiles, list):
|
||||
self._profiles = self._get_profiles_list()
|
||||
|
||||
return len(self._profiles)
|
||||
|
||||
@property
|
||||
def profiles(self):
|
||||
return self._profiles.copy()
|
||||
if not isinstance(self._profiles, list):
|
||||
self._profiles = self._get_profiles_list()
|
||||
|
||||
return self._profiles
|
||||
|
||||
def get_profiles_from_kp(self, kp):
|
||||
return list(
|
||||
@@ -126,14 +146,14 @@ class Reach(SQLSubModel):
|
||||
Returns:
|
||||
Number of profiles
|
||||
"""
|
||||
return len(self._profiles)
|
||||
return len(self.profiles)
|
||||
|
||||
def get_geometry(self) -> List[Profile]:
|
||||
"""
|
||||
Returns:
|
||||
The profiles list.
|
||||
"""
|
||||
return self._profiles
|
||||
return self.profiles
|
||||
|
||||
def _update_profile_numbers(self):
|
||||
"""Update profiles index
|
||||
@@ -155,7 +175,7 @@ class Reach(SQLSubModel):
|
||||
"""
|
||||
profile = ProfileXYZ(reach=self, status=self._status)
|
||||
|
||||
self._profiles.insert(index, profile)
|
||||
self.profiles.insert(index, profile)
|
||||
self._update_profile_numbers()
|
||||
|
||||
self._status.modified()
|
||||
@@ -171,7 +191,7 @@ class Reach(SQLSubModel):
|
||||
Returns:
|
||||
Nothing.
|
||||
"""
|
||||
self._profiles.insert(index, profile)
|
||||
self.profiles.insert(index, profile)
|
||||
self._update_profile_numbers()
|
||||
self._status.modified()
|
||||
|
||||
@@ -195,7 +215,7 @@ class Reach(SQLSubModel):
|
||||
)
|
||||
)
|
||||
|
||||
self._profiles = list(
|
||||
self.profiles = list(
|
||||
filter(
|
||||
lambda p: p not in profiles,
|
||||
self.profiles
|
||||
@@ -213,7 +233,7 @@ class Reach(SQLSubModel):
|
||||
Returns:
|
||||
Nothing.
|
||||
"""
|
||||
self._profiles = list(
|
||||
self.profiles = list(
|
||||
filter(
|
||||
lambda p: p not in profiles,
|
||||
self.profiles
|
||||
@@ -227,7 +247,7 @@ class Reach(SQLSubModel):
|
||||
if index < len(self.profiles):
|
||||
next = index - 1
|
||||
|
||||
p = self._profiles
|
||||
p = self.profiles
|
||||
p[index], p[next] = p[next], p[index]
|
||||
self._status.modified()
|
||||
|
||||
@@ -235,7 +255,7 @@ class Reach(SQLSubModel):
|
||||
if index >= 0:
|
||||
prev = index + 1
|
||||
|
||||
p = self._profiles
|
||||
p = self.profiles
|
||||
p[index], p[prev] = p[prev], p[index]
|
||||
self._status.modified()
|
||||
|
||||
@@ -347,7 +367,7 @@ class Reach(SQLSubModel):
|
||||
Tuple of complete and incomplete guidelines name.
|
||||
"""
|
||||
# Get all point contains into a guideline
|
||||
named_points = [profile.named_points() for profile in self._profiles]
|
||||
named_points = [profile.named_points() for profile in self.profiles]
|
||||
points_name = list(
|
||||
map(
|
||||
lambda lst: list(map(lambda p: p.name, lst)),
|
||||
@@ -422,8 +442,8 @@ class Reach(SQLSubModel):
|
||||
|
||||
@timer
|
||||
def sort(self, is_reversed: bool = False):
|
||||
self._profiles = sorted(
|
||||
self._profiles,
|
||||
self.profiles = sorted(
|
||||
self.profiles,
|
||||
key=lambda profile: profile.kp,
|
||||
reverse=is_reversed
|
||||
)
|
||||
@@ -431,10 +451,10 @@ class Reach(SQLSubModel):
|
||||
|
||||
@timer
|
||||
def sort_with_indexes(self, indexes: list):
|
||||
if len(self._profiles) != len(indexes):
|
||||
if len(self.profiles) != len(indexes):
|
||||
logger.critical("Indexes list do not correspond to profile list")
|
||||
|
||||
self._profiles = list(
|
||||
self.profiles = list(
|
||||
map(
|
||||
lambda x: x[1],
|
||||
sorted(
|
||||
@@ -474,7 +494,7 @@ class Reach(SQLSubModel):
|
||||
**d, reach=self, status=self._status
|
||||
)
|
||||
prof.import_points(profile)
|
||||
self._profiles.append(prof)
|
||||
self.profiles.append(prof)
|
||||
self._update_profile_numbers()
|
||||
|
||||
self._status.modified()
|
||||
@@ -538,8 +558,8 @@ class Reach(SQLSubModel):
|
||||
# TODO: Move this function to model reach
|
||||
def export_reach(self, filename):
|
||||
with open(f"{filename}", "w") as file_st:
|
||||
for index in range(len(self._profiles)):
|
||||
profile = self._profiles[index]
|
||||
for index in range(len(self.profiles)):
|
||||
profile = self.profiles[index]
|
||||
|
||||
for v in profile.header:
|
||||
file_st.write(f"{v:>6}")
|
||||
|
||||
Reference in new issue
Block a user