maps4fs 1.8.245__py3-none-any.whl → 1.8.247__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- maps4fs/generator/component/background.py +32 -0
- maps4fs/generator/component/base/component_mesh.py +26 -6
- {maps4fs-1.8.245.dist-info → maps4fs-1.8.247.dist-info}/METADATA +1 -1
- {maps4fs-1.8.245.dist-info → maps4fs-1.8.247.dist-info}/RECORD +7 -7
- {maps4fs-1.8.245.dist-info → maps4fs-1.8.247.dist-info}/WHEEL +1 -1
- {maps4fs-1.8.245.dist-info → maps4fs-1.8.247.dist-info}/LICENSE.md +0 -0
- {maps4fs-1.8.245.dist-info → maps4fs-1.8.247.dist-info}/top_level.txt +0 -0
@@ -6,10 +6,12 @@ from __future__ import annotations
|
|
6
6
|
import os
|
7
7
|
import shutil
|
8
8
|
from copy import deepcopy
|
9
|
+
from typing import Any
|
9
10
|
|
10
11
|
import cv2
|
11
12
|
import numpy as np
|
12
13
|
from tqdm import tqdm
|
14
|
+
from trimesh import Trimesh
|
13
15
|
|
14
16
|
from maps4fs.generator.component.base.component_image import ImageComponent
|
15
17
|
from maps4fs.generator.component.base.component_mesh import MeshComponent
|
@@ -44,6 +46,7 @@ class Background(MeshComponent, ImageComponent):
|
|
44
46
|
|
45
47
|
self.background_size = self.map_size + Parameters.BACKGROUND_DISTANCE * 2
|
46
48
|
self.rotated_size = int(self.background_size * output_size_multiplier)
|
49
|
+
self.mesh_info: list[dict[str, Any]] = []
|
47
50
|
|
48
51
|
self.background_directory = os.path.join(self.map_directory, "background")
|
49
52
|
self.water_directory = os.path.join(self.map_directory, "water")
|
@@ -194,6 +197,7 @@ class Background(MeshComponent, ImageComponent):
|
|
194
197
|
|
195
198
|
dem_info_sequence = self.dem.info_sequence()
|
196
199
|
data["DEM"] = dem_info_sequence
|
200
|
+
data["Mesh"] = self.mesh_info
|
197
201
|
return data # type: ignore
|
198
202
|
|
199
203
|
def qgis_sequence(self) -> None:
|
@@ -300,6 +304,11 @@ class Background(MeshComponent, ImageComponent):
|
|
300
304
|
remove_size=self.map_size,
|
301
305
|
)
|
302
306
|
|
307
|
+
try:
|
308
|
+
self.update_mesh_info(save_path, mesh)
|
309
|
+
except Exception as e:
|
310
|
+
self.logger.error("Could not update mesh info: %s", e)
|
311
|
+
|
303
312
|
mesh.export(save_path)
|
304
313
|
self.logger.debug("Obj file saved: %s", save_path)
|
305
314
|
|
@@ -307,6 +316,29 @@ class Background(MeshComponent, ImageComponent):
|
|
307
316
|
mesh.apply_scale([0.5, 0.5, 0.5])
|
308
317
|
self.mesh_to_stl(mesh, save_path=self.stl_preview_path)
|
309
318
|
|
319
|
+
def update_mesh_info(self, save_path: str, mesh: Trimesh) -> None:
|
320
|
+
"""Updates the mesh info with the data from the mesh.
|
321
|
+
|
322
|
+
Arguments:
|
323
|
+
save_path (str): The path where the mesh is saved.
|
324
|
+
mesh (Trimesh): The mesh to get the data from.
|
325
|
+
"""
|
326
|
+
filename = os.path.splitext(os.path.basename(save_path))[0]
|
327
|
+
x_size, y_size, z_size = mesh.extents
|
328
|
+
x_center, y_center, z_center = mesh.centroid
|
329
|
+
|
330
|
+
entry = {
|
331
|
+
"name": filename,
|
332
|
+
"x_size": round(x_size, 4),
|
333
|
+
"y_size": round(y_size, 4),
|
334
|
+
"z_size": round(z_size, 4),
|
335
|
+
"x_center": round(x_center, 4),
|
336
|
+
"y_center": round(y_center, 4),
|
337
|
+
"z_center": round(z_center, 4),
|
338
|
+
}
|
339
|
+
|
340
|
+
self.mesh_info.append(entry)
|
341
|
+
|
310
342
|
def previews(self) -> list[str]:
|
311
343
|
"""Returns the path to the image previews paths and the path to the STL preview file.
|
312
344
|
|
@@ -130,11 +130,12 @@ class MeshComponent(Component):
|
|
130
130
|
percent=percent, aggression=decimation_agression
|
131
131
|
)
|
132
132
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
133
|
+
# * Looks like it takes some time but has no effect on the result.
|
134
|
+
# try:
|
135
|
+
# if not mesh.is_watertight:
|
136
|
+
# mesh = MeshComponent.fix_mesh(mesh)
|
137
|
+
# except Exception:
|
138
|
+
# pass
|
138
139
|
|
139
140
|
mesh = MeshComponent.mesh_to_output_size(
|
140
141
|
mesh,
|
@@ -249,7 +250,26 @@ class MeshComponent(Component):
|
|
249
250
|
|
250
251
|
_, _, z_size = mesh_copy.extents
|
251
252
|
|
253
|
+
try:
|
254
|
+
mesh_copy = MeshComponent.mesh_to_origin(mesh_copy)
|
255
|
+
except Exception:
|
256
|
+
pass
|
252
257
|
cube_mesh = trimesh.creation.box([remove_size, remove_size, z_size * 4])
|
253
|
-
cube_mesh.apply_translation(mesh_copy.centroid - cube_mesh.centroid)
|
254
258
|
|
255
259
|
return trimesh.boolean.difference([mesh_copy, cube_mesh], check_volume=False)
|
260
|
+
|
261
|
+
@staticmethod
|
262
|
+
def mesh_to_origin(mesh: trimesh.Trimesh) -> trimesh.Trimesh:
|
263
|
+
"""Moves the mesh to the origin using mesh size.
|
264
|
+
|
265
|
+
Arguments:
|
266
|
+
mesh (trimesh.Trimesh): The mesh to move to the origin.
|
267
|
+
|
268
|
+
Returns:
|
269
|
+
trimesh.Trimesh: The mesh moved to the origin.
|
270
|
+
"""
|
271
|
+
mesh_copy = mesh.copy()
|
272
|
+
x_size, _, _ = mesh_copy.extents
|
273
|
+
distance = int(round(x_size) / 2)
|
274
|
+
mesh_copy.apply_translation([-distance, distance, 0])
|
275
|
+
return mesh_copy
|
@@ -8,7 +8,7 @@ maps4fs/generator/qgis.py,sha256=Es8hLuqN_KH8lDfnJE6He2rWYbAKJ3RGPn-o87S6CPI,611
|
|
8
8
|
maps4fs/generator/settings.py,sha256=285LjC5mUuzpHNPubBqd928MU7Yd_ZlLEnkBY3RbiHs,6937
|
9
9
|
maps4fs/generator/statistics.py,sha256=aynS3zbAtiwnU_YLKHPTiiaKW98_suvQUhy1SGBA6mc,2448
|
10
10
|
maps4fs/generator/component/__init__.py,sha256=s01yVVVi8R2xxNvflu2D6wTd9I_g73AMM2x7vAC7GX4,490
|
11
|
-
maps4fs/generator/component/background.py,sha256=
|
11
|
+
maps4fs/generator/component/background.py,sha256=gqKQnyHZ58i54KkU6m-zhZui5081Z7GaXAimGB-xJgM,22153
|
12
12
|
maps4fs/generator/component/config.py,sha256=RitKgFDZPzjA1fi8GcEi1na75qqaueUvpcITHjBvCXc,3674
|
13
13
|
maps4fs/generator/component/grle.py,sha256=KlNbbYY4oyFfB_0qTInrweBTyLUW0koSSpqclkRw-Lk,19381
|
14
14
|
maps4fs/generator/component/i3d.py,sha256=QsqtyOLyc_Y10UthV03EjZO60mHBubPvbEvLIsxzank,23017
|
@@ -18,7 +18,7 @@ maps4fs/generator/component/texture.py,sha256=ELU5QwysZaMPH9QQkE5jzIHAOzZ_Y8khcT
|
|
18
18
|
maps4fs/generator/component/base/__init__.py,sha256=zZMLEkGzb4z0xql650gOtGSvcgX58DnJ2yN3vC2daRk,43
|
19
19
|
maps4fs/generator/component/base/component.py,sha256=CIR4Fjn9YfLU4y7nB_jOaz7PjGFvBcDnHlvXxeahpdM,21499
|
20
20
|
maps4fs/generator/component/base/component_image.py,sha256=2QnJ9xm0D54v4whg7bc1s-kwRVjZHhOo1OR5jHr1Qp0,4786
|
21
|
-
maps4fs/generator/component/base/component_mesh.py,sha256=
|
21
|
+
maps4fs/generator/component/base/component_mesh.py,sha256=BsxS5NlUK2hLhksgCwSoMK-00GNAwK2fYGpgb3R4n1w,9396
|
22
22
|
maps4fs/generator/component/base/component_xml.py,sha256=6OO1dKoceO1ACk7-k1oGtnkfNud8ZN3u3ZNjdNMpTqw,3967
|
23
23
|
maps4fs/generator/dtm/__init__.py,sha256=VIWcZiMZ0UtnJl7rQL-PVHDivXbZVwrBWumjhTTnnKY,1454
|
24
24
|
maps4fs/generator/dtm/arctic.py,sha256=LSivLLjtd6TJUaPYvgSYQ4KalMTaY58zFvwivSh45uM,2587
|
@@ -53,8 +53,8 @@ maps4fs/toolbox/__init__.py,sha256=zZMLEkGzb4z0xql650gOtGSvcgX58DnJ2yN3vC2daRk,4
|
|
53
53
|
maps4fs/toolbox/background.py,sha256=RclEqxEWLbMxuEkkegQP8jybzugwQ1_R3rdfDe0s21U,2104
|
54
54
|
maps4fs/toolbox/custom_osm.py,sha256=X6ZlPqiOhNjkmdD_qVroIfdOl9Rb90cDwVSLDVYgx80,1892
|
55
55
|
maps4fs/toolbox/dem.py,sha256=z9IPFNmYbjiigb3t02ZenI3Mo8odd19c5MZbjDEovTo,3525
|
56
|
-
maps4fs-1.8.
|
57
|
-
maps4fs-1.8.
|
58
|
-
maps4fs-1.8.
|
59
|
-
maps4fs-1.8.
|
60
|
-
maps4fs-1.8.
|
56
|
+
maps4fs-1.8.247.dist-info/LICENSE.md,sha256=pTKD_oUexcn-yccFCTrMeLkZy0ifLRa-VNcDLqLZaIw,10749
|
57
|
+
maps4fs-1.8.247.dist-info/METADATA,sha256=zH2xHd_cCbDtGc2Am8LIduDJCOJ3l3wElz7k4ixLu78,47093
|
58
|
+
maps4fs-1.8.247.dist-info/WHEEL,sha256=jB7zZ3N9hIM9adW7qlTAyycLYW9npaWKLRzaoVcLKcM,91
|
59
|
+
maps4fs-1.8.247.dist-info/top_level.txt,sha256=Ue9DSRlejRQRCaJueB0uLcKrWwsEq9zezfv5dI5mV1M,8
|
60
|
+
maps4fs-1.8.247.dist-info/RECORD,,
|
File without changes
|
File without changes
|