This commit is contained in:
Theophile Terraz committed 2024-05-13 16:02:36 +02:00
commit 9d0168a9ee
28 files changed
+456 -139

No files matched your search

+9 -1
View File
@@ -47,7 +47,7 @@ class PointXYZ(Point, SQLSubModel):
z INTEGER NOT NULL,
profile INTEGER NOT NULL,
sl INTEGER,
FOREIGN KEY(profile) REFERENCES profileXYZ(id),
FOREIGN KEY(profile) REFERENCES geometry_profileXYZ(id),
FOREIGN KEY(sl) REFERENCES sedimentary_layer(id)
)
""")
@@ -220,3 +220,11 @@ class PointXYZ(Point, SQLSubModel):
Euclidean 3D distance between the two points
"""
return dist((p1.x, p1.y, p1.z), (p2.x, p2.y, p2.z))
@staticmethod
def areatriangle3d(p1, p2, p3):
a = PointXYZ.distance(p1, p2)
b = PointXYZ.distance(p2, p3)
c = PointXYZ.distance(p3, p1)
s = (a + b + c) / 2
return (s*(s-a) * (s-b)*(s-c)) ** 0.5
+5
View File
@@ -296,6 +296,11 @@ class Profile(object):
)
self._status.modified()
@timer
def reverse(self):
self._points.reverse()
self._status.modified()
# Sediment Layers
def get_sl(self):
+29
View File
@@ -578,3 +578,32 @@ class ProfileXYZ(Profile, SQLSubModel):
break
return last_point
def purge(self, np_purge):
"""
Remove points to keep at most np_purge points.
"""
if (self.nb_points <= np_purge): return
nb_named = 2 # we consider the first and last point as named
area = [0.0]
for i in range(1, self.nb_points-1):
if self.point(i).point_is_named():
area.append(9999999.999)
nb_named += 1
else:
area.append(PointXYZ.areatriangle3d(self.point(i-1),self.point(i),self.point(i+1)))
area.append(0.0)
while (self.nb_points > max(np_purge, nb_named)):
to_rm = np.argmin(area[1:self.nb_points-1])+1
self.delete_i([to_rm])
area.pop(to_rm)
for i in [to_rm-1, to_rm]:
if (i == 0): continue
if (i == self.nb_points - 1): continue
if self.point(i).point_is_named():
area[i] = 9999999.999
else:
area[i] = PointXYZ.areatriangle3d(self.point(i-1),self.point(i),self.point(i+1))