merge master

This commit is contained in:
Theophile Terraz committed 2025-10-10 15:09:44 +02:00
commit 19045329dc
13 files changed
+491 -87

No files matched your search

+22
View File
@@ -394,3 +394,25 @@ class PointXYZ(Point):
) ** 0.5
return res
def dist_from_seg(self, p1, p2):
a2 = pow(PointXYZ.distance(self, p1), 2)
b2 = pow(PointXYZ.distance(self, p2), 2)
c2 = pow(PointXYZ.distance(p1, p2), 2)
if c2 < 0.00000001:
# si les deux points sont confondus
d = 0.0
else:
d = np.sqrt(abs(a2 - pow((c2 - b2 + a2) / (2*np.sqrt(c2)), 2)))
return d
def copy(self):
p = PointXYZ(self.x,
self.y,
self.z,
self.name,
self._profile,
self._status)
p.sl = self.sl
return p
+9 -1
View File
@@ -75,6 +75,14 @@ class Profile(object):
def point(self, index):
return self.points[index]
def named_point(self, name):
return next((p for p in self.points if p.name == name), None)
def named_point_index(self, name):
return next(
(p for p in enumerate(self.points) if p[1].name == name), None
)[0]
@property
def reach(self):
return self._reach
@@ -193,7 +201,7 @@ class Profile(object):
"""Insert point at index.
Args:
index: The index of new profile.
index: The index of new point.
point: The point.
Returns:
+47
View File
@@ -1087,3 +1087,50 @@ class ProfileXYZ(Profile, SQLSubModel):
p.z = p.z + z
self.modified()
def modified(self):
self.tab_up_to_date = False
self.station_up_to_date = False
def add_npoints(self, npoints):
# add npoints in a profile
for k in range(npoints):
disti = 0.0
i = 1
for j in range(len(self.points)-1):
distj = self.point(j).dist(self.point(j+1))
if distj > disti:
disti = distj
i = j
self.insert_point(i, self.point(i).copy())
self.point(i+1).name = ''
self.point(i+1).x = 0.5 * self.point(i).x + 0.5 * self.point(i+2).x
self.point(i+1).y = 0.5 * self.point(i).y + 0.5 * self.point(i+2).y
self.point(i+1).z = 0.5 * self.point(i).z + 0.5 * self.point(i+2).z
def copy(self):
p = ProfileXYZ(self.id,
self.name,
self.rk,
self.reach,
self.num,
0,
0, 0,
self._status)
for i, k in enumerate(self.points):
p.insert_point(i, k.copy())
return p
def purge_aligned_points(self):
align = True
while (align):
align = False
for i in range(1, self.number_points - 1):
d = self.point(i).dist_from_seg(self.point(i-1),
self.point(i+1))
if d < 0.00001 and self.point(i).name == "":
align = True
self.delete_i([i])
break
+10
View File
@@ -280,6 +280,12 @@ class Reach(SQLSubModel):
)
)
self._profile_mask = list(
map(
lambda p: p.name[0:8] != 'interpol', self._profiles
)
)
def __len__(self):
return len(self._profiles)
@@ -295,6 +301,10 @@ class Reach(SQLSubModel):
def profiles(self):
return self._profiles.copy()
@property
def profile_mask(self):
return self._profile_mask
def profile(self, id):
return self._profiles[id]