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.
@@ -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
- try:
134
- if not mesh.is_watertight:
135
- mesh = MeshComponent.fix_mesh(mesh)
136
- except Exception:
137
- pass
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
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: maps4fs
3
- Version: 1.8.245
3
+ Version: 1.8.247
4
4
  Summary: Generate map templates for Farming Simulator from real places.
5
5
  Author-email: iwatkot <iwatkot@gmail.com>
6
6
  License: MIT License
@@ -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=QwyTaltQOTo3lD1uxewY99zw5Wd91CBWRQ35cC67WuE,21047
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=pc7UVakZCnJPV-0Ukdsm6aUD3NFZbOUazuEbb44k170,8747
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.245.dist-info/LICENSE.md,sha256=pTKD_oUexcn-yccFCTrMeLkZy0ifLRa-VNcDLqLZaIw,10749
57
- maps4fs-1.8.245.dist-info/METADATA,sha256=R1oGGAr_10yySkzzFPJiOXvZZa7EWACDgVt7QKBAXpk,47093
58
- maps4fs-1.8.245.dist-info/WHEEL,sha256=nn6H5-ilmfVryoAQl3ZQ2l8SH5imPWFpm1A5FgEuFV4,91
59
- maps4fs-1.8.245.dist-info/top_level.txt,sha256=Ue9DSRlejRQRCaJueB0uLcKrWwsEq9zezfv5dI5mV1M,8
60
- maps4fs-1.8.245.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.1)
2
+ Generator: setuptools (75.8.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5