maps4fs 1.4.1__py3-none-any.whl → 1.5.7__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.
@@ -0,0 +1,92 @@
1
+ """This module contains the Satellite class for the maps4fs package to download satellite images
2
+ for the map."""
3
+
4
+ import os
5
+
6
+ import cv2
7
+ from pygmdl import save_image # type: ignore
8
+
9
+ from maps4fs.generator.background import DEFAULT_DISTANCE
10
+ from maps4fs.generator.component import Component
11
+ from maps4fs.generator.texture import PREVIEW_MAXIMUM_SIZE
12
+
13
+
14
+ # pylint: disable=W0223
15
+ class Satellite(Component):
16
+ """Component for to download satellite images for the map.
17
+
18
+ Arguments:
19
+ game (Game): The game instance for which the map is generated.
20
+ coordinates (tuple[float, float]): The latitude and longitude of the center of the map.
21
+ map_size (int): The size of the map in pixels.
22
+ map_rotated_size (int): The size of the map in pixels after rotation.
23
+ rotation (int): The rotation angle of the map.
24
+ map_directory (str): The directory where the map files are stored.
25
+ logger (Any, optional): The logger to use. Must have at least three basic methods: debug,
26
+ info, warning. If not provided, default logging will be used.
27
+ """
28
+
29
+ def preprocess(self) -> None:
30
+ """This component does not require any preprocessing."""
31
+ return
32
+
33
+ def process(self) -> None:
34
+ """Downloads the satellite images for the map."""
35
+ self.image_paths = [] # pylint: disable=W0201
36
+ if not self.map.satellite_settings.download_images:
37
+ self.logger.info("Satellite images download is disabled.")
38
+ return
39
+
40
+ margin = self.map.satellite_settings.satellite_margin
41
+ overview_size = (self.map_size + margin) * 2
42
+ overwiew_path = os.path.join(self.satellite_directory, "satellite_overview.png")
43
+
44
+ background_size = self.map_size + (DEFAULT_DISTANCE + margin) * 2
45
+ background_path = os.path.join(self.satellite_directory, "satellite_background.png")
46
+
47
+ sizes = [overview_size, background_size]
48
+ self.image_paths = [overwiew_path, background_path] # pylint: disable=W0201
49
+
50
+ for size, path in zip(sizes, self.image_paths):
51
+ try:
52
+ lat, lon = self.coordinates
53
+ zoom = self.map.satellite_settings.zoom_level
54
+ save_image(
55
+ lat,
56
+ lon,
57
+ size,
58
+ output_path=path,
59
+ rotation=self.rotation,
60
+ zoom=zoom,
61
+ from_center=True,
62
+ logger=self.logger,
63
+ )
64
+ except Exception as e: # pylint: disable=W0718
65
+ self.logger.error(f"Failed to download satellite image: {e}")
66
+ continue
67
+
68
+ # pylint: disable=no-member
69
+ def previews(self) -> list[str]:
70
+ """Returns the paths to the preview images.
71
+
72
+ Returns:
73
+ list[str]: List of paths to the preview images.
74
+ """
75
+ previews = []
76
+ for image_path in self.image_paths:
77
+ if not os.path.isfile(image_path):
78
+ self.logger.warning(f"File {image_path} does not exist.")
79
+ continue
80
+ image = cv2.imread(image_path)
81
+ if image is None:
82
+ self.logger.warning(f"Failed to read image from {image_path}")
83
+ continue
84
+
85
+ if image.shape[0] > PREVIEW_MAXIMUM_SIZE or image.shape[1] > PREVIEW_MAXIMUM_SIZE:
86
+ image = cv2.resize(image, (PREVIEW_MAXIMUM_SIZE, PREVIEW_MAXIMUM_SIZE))
87
+
88
+ preview_path = os.path.join(self.previews_directory, os.path.basename(image_path))
89
+ cv2.imwrite(preview_path, image)
90
+ previews.append(preview_path)
91
+
92
+ return previews
@@ -0,0 +1,150 @@
1
+ """This module contains settings models for all components."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any
6
+
7
+ from pydantic import BaseModel
8
+
9
+
10
+ class SettingsModel(BaseModel):
11
+ """Base class for settings models. It provides methods to convert settings to and from JSON."""
12
+
13
+ @classmethod
14
+ def all_settings_to_json(cls) -> dict[str, dict[str, Any]]:
15
+ """Get all settings of the current class and its subclasses as a dictionary.
16
+
17
+ Returns:
18
+ dict[str, dict[str, Any]]: Dictionary with settings of the current class and its
19
+ subclasses.
20
+ """
21
+ all_settings = {}
22
+ for subclass in cls.__subclasses__():
23
+ all_settings[subclass.__name__] = subclass().model_dump()
24
+
25
+ return all_settings
26
+
27
+ @classmethod
28
+ def all_settings_from_json(cls, data: dict) -> dict[str, SettingsModel]:
29
+ """Create settings instances from JSON data.
30
+
31
+ Arguments:
32
+ data (dict): JSON data.
33
+
34
+ Returns:
35
+ dict[str, Type[SettingsModel]]: Dictionary with settings instances.
36
+ """
37
+ settings = {}
38
+ for subclass in cls.__subclasses__():
39
+ settings[subclass.__name__] = subclass(**data[subclass.__name__])
40
+
41
+ return settings
42
+
43
+ @classmethod
44
+ def all_settings(cls) -> list[SettingsModel]:
45
+ """Get all settings of the current class and its subclasses.
46
+
47
+ Returns:
48
+ list[SettingsModel]: List with settings of the current class and its subclasses.
49
+ """
50
+ settings = []
51
+ for subclass in cls.__subclasses__():
52
+ settings.append(subclass())
53
+
54
+ return settings
55
+
56
+
57
+ class DEMSettings(SettingsModel):
58
+ """Represents the advanced settings for DEM component.
59
+
60
+ Attributes:
61
+ multiplier (int): multiplier for the heightmap, every pixel will be multiplied by this
62
+ value.
63
+ blur_radius (int): radius of the blur filter.
64
+ plateau (int): plateau height, will be added to each pixel.
65
+ water_depth (int): water depth, will be subtracted from each pixel where the water
66
+ is present.
67
+ """
68
+
69
+ multiplier: int = 1
70
+ blur_radius: int = 35
71
+ plateau: int = 0
72
+ water_depth: int = 0
73
+
74
+
75
+ class BackgroundSettings(SettingsModel):
76
+ """Represents the advanced settings for background component.
77
+
78
+ Attributes:
79
+ generate_background (bool): generate obj files for the background terrain.
80
+ generate_water (bool): generate obj files for the water.
81
+ resize_factor (int): resize factor for the background terrain and water.
82
+ It will be used as 1 / resize_factor of the original size.
83
+ """
84
+
85
+ generate_background: bool = False
86
+ generate_water: bool = False
87
+ resize_factor: int = 8
88
+
89
+
90
+ class GRLESettings(SettingsModel):
91
+ """Represents the advanced settings for GRLE component.
92
+
93
+ Attributes:
94
+ farmland_margin (int): margin around the farmland.
95
+ random_plants (bool): generate random plants on the map or use the default one.
96
+ add_farmyards (bool): If True, regions of frarmyards will be added to the map
97
+ without corresponding fields.
98
+ """
99
+
100
+ farmland_margin: int = 0
101
+ random_plants: bool = True
102
+ add_farmyards: bool = False
103
+
104
+
105
+ class I3DSettings(SettingsModel):
106
+ """Represents the advanced settings for I3D component.
107
+
108
+ Attributes:
109
+ forest_density (int): density of the forest (distance between trees).
110
+ """
111
+
112
+ forest_density: int = 10
113
+
114
+
115
+ class TextureSettings(SettingsModel):
116
+ """Represents the advanced settings for texture component.
117
+
118
+ Attributes:
119
+ dissolve (bool): dissolve the texture into several images.
120
+ fields_padding (int): padding around the fields.
121
+ skip_drains (bool): skip drains generation.
122
+ """
123
+
124
+ dissolve: bool = False
125
+ fields_padding: int = 0
126
+ skip_drains: bool = False
127
+
128
+
129
+ class SplineSettings(SettingsModel):
130
+ """Represents the advanced settings for spline component.
131
+
132
+ Attributes:
133
+ spline_density (int): the number of extra points that will be added between each two
134
+ existing points.
135
+ """
136
+
137
+ spline_density: int = 2
138
+
139
+
140
+ class SatelliteSettings(SettingsModel):
141
+ """Represents the advanced settings for satellite component.
142
+
143
+ Attributes:
144
+ download_images (bool): download satellite images.
145
+ margin (int): margin around the map.
146
+ """
147
+
148
+ download_images: bool = False
149
+ satellite_margin: int = 100
150
+ zoom_level: int = 14
@@ -45,6 +45,9 @@ class Texture(Component):
45
45
  exclude_weight (bool): Flag to exclude weight from the texture.
46
46
  priority (int | None): Priority of the layer.
47
47
  info_layer (str | None): Name of the corresnponding info layer.
48
+ usage (str | None): Usage of the layer.
49
+ background (bool): Flag to determine if the layer is a background.
50
+ invisible (bool): Flag to determine if the layer is invisible.
48
51
 
49
52
  Attributes:
50
53
  name (str): Name of the layer.
@@ -65,6 +68,7 @@ class Texture(Component):
65
68
  info_layer: str | None = None,
66
69
  usage: str | None = None,
67
70
  background: bool = False,
71
+ invisible: bool = False,
68
72
  ):
69
73
  self.name = name
70
74
  self.count = count
@@ -76,6 +80,7 @@ class Texture(Component):
76
80
  self.info_layer = info_layer
77
81
  self.usage = usage
78
82
  self.background = background
83
+ self.invisible = invisible
79
84
 
80
85
  def to_json(self) -> dict[str, str | list[str] | bool]: # type: ignore
81
86
  """Returns dictionary with layer data.
@@ -93,6 +98,7 @@ class Texture(Component):
93
98
  "info_layer": self.info_layer,
94
99
  "usage": self.usage,
95
100
  "background": self.background,
101
+ "invisible": self.invisible,
96
102
  }
97
103
 
98
104
  data = {k: v for k, v in data.items() if v is not None}
@@ -301,6 +307,7 @@ class Texture(Component):
301
307
  "bbox",
302
308
  "map_height",
303
309
  "map_width",
310
+ "rotation",
304
311
  "minimum_x",
305
312
  "minimum_y",
306
313
  "maximum_x",
@@ -416,7 +423,8 @@ class Texture(Component):
416
423
  info_layer_data[layer.info_layer].append(
417
424
  self.np_to_polygon_points(polygon) # type: ignore
418
425
  )
419
- cv2.fillPoly(layer_image, [polygon], color=255) # type: ignore
426
+ if not layer.invisible:
427
+ cv2.fillPoly(layer_image, [polygon], color=255) # type: ignore
420
428
 
421
429
  if layer.info_layer == "roads":
422
430
  for linestring in self.objects_generator(
@@ -705,7 +713,11 @@ class Texture(Component):
705
713
  Generator[np.ndarray, None, None]: Numpy array of polygon points.
706
714
  """
707
715
  for _, obj in objects_utm.iterrows():
708
- polygon = self._to_polygon(obj, width)
716
+ try:
717
+ polygon = self._to_polygon(obj, width)
718
+ except Exception as e: # pylint: disable=W0703
719
+ self.logger.warning("Error converting object to polygon: %s.", e)
720
+ continue
709
721
  if polygon is None:
710
722
  continue
711
723
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: maps4fs
3
- Version: 1.4.1
3
+ Version: 1.5.7
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
@@ -45,6 +45,7 @@ Requires-Dist: pydantic
45
45
  <a href="#Overview-image">Overview image</a><br>
46
46
  <a href="#DDS-conversion">DDS conversion</a> •
47
47
  <a href="#Advanced-settings">Advanced settings</a> •
48
+ <a href="#Expert-settings">Expert settings</a> •
48
49
  <a href="#Resources">Resources</a> •
49
50
  <a href="#Bugs-and-feature-requests">Bugs and feature requests</a><br>
50
51
  <a href="#Special-thanks">Special thanks</a>
@@ -74,6 +75,8 @@ Requires-Dist: pydantic
74
75
  🌲 Automatically generates forests 🆕<br>
75
76
  🌊 Automatically generates water planes 🆕<br>
76
77
  📈 Automatically generates splines 🆕<br>
78
+ 🛰️ Automatically downloads high resolution satellite images 🆕<br>
79
+ 🏔️ Allows to use multiple DTM providers for elevation models 🆕<br>
77
80
  🌍 Based on real-world data from OpenStreetMap<br>
78
81
  🗺️ Supports [custom OSM maps](/docs/custom_osm.md)<br>
79
82
  🏞️ Generates height map using SRTM dataset<br>
@@ -256,18 +259,12 @@ Tools are divided into categories, which are listed below.
256
259
 
257
260
  ## Supported objects
258
261
  The project is based on the [OpenStreetMap](https://www.openstreetmap.org/) data. So, refer to [this page](https://wiki.openstreetmap.org/wiki/Map_Features) to understand the list below.
259
- - "building": True
260
- - "highway": ["motorway", "trunk", "primary"]
261
- - "highway": ["secondary", "tertiary", "road", "service"]
262
- - "highway": ["unclassified", "residential", "track"]
263
- - "natural": ["grassland", "scrub"]
264
- - "landuse": "farmland"
265
- - "natural": ["water"]
266
- - "waterway": True
267
- - "natural": ["wood", "tree_row"]
268
- - "railway": True
269
-
270
- The list will be updated as the project develops.
262
+
263
+ You can find the active schemas here:
264
+ - [FS25](/data/fs25-texture-schema.json)
265
+ - [FS22](/data/fs22-texture-schema.json)
266
+
267
+ Learn more how to work with the schema in the [Texture schema](#texture-schema) section. You can also use your own schema in the [Expert settings](#expert-settings) section.
271
268
 
272
269
  ## Generation info
273
270
  The script will generate the `generation_info.json` file in the `output` folder. It is split into different sections, which represent the components of the map generator. You may need this information to use some other tools and services to obtain additional data for your map.<br>
@@ -418,6 +415,10 @@ Let's have a closer look at the fields:
418
415
  - `priority` - the priority of the texture for overlapping. Textures with higher priorities will be drawn over the textures with lower priorities.
419
416
  ℹ️ The texture with 0 priority considers the base layer, which means that all empty areas will be filled with this texture.
420
417
  - `exclude_weight` - this is only used for the forestRockRoots texture from FS25. It just means that this texture has no `weight` postfix, that's all.
418
+ - `usage` - the usage of the texture. Mainly used to group different textures by the purpose. For example, the `grass`, `forest`, `drain`.
419
+ - `background` - set it to True for the textures, which should have impact on the Background Terrain, by default it's used to subtract the water depth from the DEM and background terrain.
420
+ - `info_layer` - if the layer is saving some data in JSON format, this section will describe it's name in the JSON file. Used to find the needed JSON data, for example for fields it will be `fields` and as a value - list of polygon coordinates.
421
+ - `invisible` - set it to True for the textures, which should not be drawn in the files, but only to save the data in the JSON file (related to the previous field).
421
422
 
422
423
  ## Background terrain
423
424
  The tool now supports the generation of the background terrain. If you don't know what it is, here's a brief explanation. The background terrain is the world around the map. It's important to create it because if you don't, the map will look like it's floating in the void. The background terrain is a simple plane that can (and should) be textured to look fine.<br>
@@ -478,40 +479,59 @@ You can also apply some advanced settings to the map generation process. Note th
478
479
 
479
480
  - Blur radius: the radius of the Gaussian blur filter applied to the DEM map. By default, it's set to 21. This filter just makes the DEM map smoother, so the height transitions will be more natural. You can set it to 1 to disable the filter, but it will result in a Minecraft-like map.
480
481
 
481
- - Plateau height: this value will be added to each pixel of the DEM image, making it "higher". It's useful when you want to add some negative heights on the map, that appear to be in a "low" place. By default, it's set to 0.
482
+ - Plateau: this value will be added to each pixel of the DEM image, making it "higher". It's useful when you want to add some negative heights on the map, that appear to be in a "low" place. By default, it's set to 0.
482
483
 
483
484
  - Water depth: this value will be subtracted from each pixel of the DEM image, where water resources are located. Pay attention that it's not in meters, instead it in the pixel value of DEM, which is 16 bit image with possible values from 0 to 65535. When this value is set, the same value will be added to the plateau setting to avoid negative heights.
484
485
 
485
- ### Texture Advanced settings
486
+ ### Background terrain Advanced settings
486
487
 
487
- - Fields padding - this value (in meters) will be applied to each field, making it smaller. It's useful when the fields are too close to each other and you want to make them smaller. By default, it's set to 0.
488
+ - Generate background - if enabled, the obj files for the background terrain will be generated. You can turn it off if you already have those files or don't need them. By default, it's set to True.
488
489
 
489
- - Texture dissolving - if enabled, the values from one layer will be splitted between different layers of texture, making it look more natural. By default, it's set to True. Can be turned of for faster processing.
490
+ - Generate water - if enabled, the water planes obj files will be generated. You can turn it off if you already have those files or don't need them. By default, it's set to True.
490
491
 
491
- - Skip drains - if enabled, the tool will not generate the drains and ditches on the map. By default, it's set to False. Use this if you don't need the drains on the map.
492
+ - Resize factor - the factor by which the background terrain will be resized. It will be used as 1 / resize_factor while generating the models. Which means that the larger the value the more the terrain will be resized. The lowest value is 1, in this case background terrain will not be resized. Note, than low values will lead to long processing and enormous size of the obj files.
492
493
 
493
- ### Farmlands Advanced settings
494
+ ### GRLE Advanced settings
494
495
 
495
496
  - Farmlands margin - this value (in meters) will be applied to each farmland, making it bigger. You can use the value to adjust how much the farmland should be bigger than the actual field. By default, it's set to 3.
496
497
 
497
- ### Vegetation Advanced settings
498
+ - Random plants - when adding decorative foliage, enabling this option will add different species of plants to the map. If unchecked only basic grass (smallDenseMix) will be added. Defaults to True.
498
499
 
499
- - Forest density - the density of the forest in meters. The lower the value, the lower the distance between the trees, which makes the forest denser. Note, that low values will lead to enormous number of trees, which may cause the Giants Editor to crash or lead to performance issues. By default, it's set to 10.
500
+ - Add Farmyards - if enabled, the tool will create farmlands from the regions that are marked as farmyards in the OSM data. Those farmlands will not have fields and also will not be drawn on textures. By default, it's turned off.
500
501
 
501
- - Random plants - when adding decorative foliage, enabling this option will add different species of plants to the map. If unchecked only basic grass (smallDenseMix) will be added. Defaults to True.
502
+ ### I3D Advanced settings
502
503
 
503
- ### Background terrain Advanced settings
504
+ - Forest density - the density of the forest in meters. The lower the value, the lower the distance between the trees, which makes the forest denser. Note, that low values will lead to enormous number of trees, which may cause the Giants Editor to crash or lead to performance issues. By default, it's set to 10.
504
505
 
505
- - Generate background - if enabled, the obj files for the background terrain will be generated. You can turn it off if you already have those files or don't need them. By default, it's set to True.
506
+ ### Texture Advanced settings
506
507
 
507
- - Generate water - if enabled, the water planes obj files will be generated. You can turn it off if you already have those files or don't need them. By default, it's set to True.
508
+ - Dissolve - if enabled, the values from one layer will be splitted between different layers of texture, making it look more natural. Warning: it's a time-consuming process, recommended to enable it, when you generating the final version of the map, not some test versions.
508
509
 
509
- - Resize factor - the factor by which the background terrain will be resized. It will be used as 1 / resize_factor while generating the models. Which means that the larger the value the more the terrain will be resized. The lowest value is 1, in this case background terrain will not be resized. Note, than low values will lead to long processing and enormous size of the obj files.
510
+ - Fields padding - this value (in meters) will be applied to each field, making it smaller. It's useful when the fields are too close to each other and you want to make them smaller. By default, it's set to 0.
511
+
512
+ - Skip drains - if enabled, the tool will not generate the drains and ditches on the map. By default, it's set to False. Use this if you don't need the drains on the map.
510
513
 
511
- ## Splines Advanced settings
514
+ ### Splines Advanced settings
512
515
 
513
516
  - Splines density - number of points, which will be added (interpolate) between each pair of existing points. The higher the value, the denser the spline will be. It can smooth the splines, but high values can in opposite make the splines look unnatural.
514
517
 
518
+ ### Satellite Advanced settings
519
+
520
+ - Download images - if enabled, the tool will download the satellite images for the background terrain and the overview image. If you already have the images, you can turn it off.
521
+ - Satellite margin - the margin around the map in meters. It's useful when you want to have some space around the map on the satellite images. By default, it's set to 100.
522
+ - Zoom level - the zoom level of the satellite images. The higher the value, the more detailed the images will be. By default, it's set to 14 and this option is disabled on a public version of the app.
523
+
524
+ ## Expert Settings
525
+ The tool also supports the expert settings. Do not use them until you read the documentation and understand what they do. Here's the list of the expert settings:
526
+
527
+ - Enable debug logs - if enabled, the tool will print the debug logs to the console. It can be useful if you're using with a custom OSM map, have some issues with it and want to know what's wrong.
528
+
529
+ - Upload custom OSM file - you'll be able to upload your own OSM file. Before using it, carefully read the [Custom OSM](docs/custom_osm.md) documentation, otherwise, the tool will not work as expected.
530
+
531
+ - Show raw configuration - you'll be able to change all the settings in a single JSON file. It's useful if you want to save the configuration and use it later, without changing the settings in the UI. Be extremely careful with this setting, because you can break the tool with incorrect settings.
532
+
533
+ - Show schemas - you'll be able to edit or define your own texture or tree schemas. It's useful if you want to add some custom textures or trees to the map. Refer to the [Texture schema](#texture-schema) section to learn more about the schema structure. Any incorrect value here will lead to the completely broken map.
534
+
515
535
  ## Resources
516
536
  In this section, you'll find a list of the resources that you need to create a map for the Farming Simulator.<br>
517
537
  To create a basic map, you only need the Giants Editor. But if you want to create a background terrain - the world around the map, so it won't look like it's floating in the void - you also need Blender and the Blender Exporter Plugins. To create realistic textures for the background terrain, the QGIS is required to obtain high-resolution satellite images.<br>
@@ -541,3 +561,4 @@ But also, I want to thank the people who helped me with the project in some way,
541
561
  - [Tox3](https://github.com/Tox3) - for the manual tests of the app.
542
562
  - [Lucandia](https://github.com/Lucandia) - for the awesome StreamLit [widget to preview STL files](https://github.com/Lucandia/streamlit_stl).
543
563
  - [H4rdB4se](https://github.com/H4rdB4se) - for investigating the issue with custom OSM files and finding a proper way to work with the files in JOSM.
564
+ - [kbrandwijk](https://github.com/kbrandwijk) - for providing [awesome tool](https://github.com/Paint-a-Farm/satmap_downloader) to download the satellite images from the Google Maps and giving a permission to modify it and create a Python Package.
@@ -0,0 +1,24 @@
1
+ maps4fs/__init__.py,sha256=EJzbqRrSGltSMUI-dHgONODxKt9YvP_ElwFmXV8M_MA,380
2
+ maps4fs/logger.py,sha256=B-NEYpMjPAAqlV4VpfTi6nbBFnEABVtQOaYe6nMpidg,1489
3
+ maps4fs/generator/__init__.py,sha256=zZMLEkGzb4z0xql650gOtGSvcgX58DnJ2yN3vC2daRk,43
4
+ maps4fs/generator/background.py,sha256=moTsEJM-hZgHQQiBjFVTWBKgPMqxup-58EErh4bq_dE,21342
5
+ maps4fs/generator/component.py,sha256=RtXruvT4Fxfr7_xo9Bi-i3IIWcPd5QQOSpYJ_cNC49o,20408
6
+ maps4fs/generator/config.py,sha256=0QmK052B8bxyHVhg3jzCORLfOBMMmqVfhhbqXKf6OMk,4383
7
+ maps4fs/generator/dem.py,sha256=shyehXYXXog9ZTdi_8Y1WAnmhsL4-YAIZ3EpmGy8qeA,12300
8
+ maps4fs/generator/dtm.py,sha256=5_1e-kQcZ7c1Xg3tvuTyumzfTAcUPmDkIyZd5VagyOk,10550
9
+ maps4fs/generator/game.py,sha256=QHgVnyGYvEnfwGZ84-u-dpbCRr3UeVVqBbrwr5WG8dE,7992
10
+ maps4fs/generator/grle.py,sha256=u8ZwSs313PIOkH_0B_O2tVTaZ-eYNkc30eKGtBxWzTM,17846
11
+ maps4fs/generator/i3d.py,sha256=FLVlj0g90IXRuaRARD1HTnufsLpuaa5kHKdiME-LUZY,24329
12
+ maps4fs/generator/map.py,sha256=flU0b2TrVYLxj9o3v_YRvNz9YB3s4w6YFSv4Jka5ojM,9283
13
+ maps4fs/generator/qgis.py,sha256=Es8hLuqN_KH8lDfnJE6He2rWYbAKJ3RGPn-o87S6CPI,6116
14
+ maps4fs/generator/satellite.py,sha256=Qnb6XxmXKnHdHKVMb9mJ3vDGtGkDHCOv_81hrrXdx3k,3660
15
+ maps4fs/generator/settings.py,sha256=NWuK76ICr8gURQnzePat4JH9w-iACbQEKQebqu51gBE,4470
16
+ maps4fs/generator/texture.py,sha256=sErusfv1AqQfP-veMrZ921Tz8DnGEhfB4ucggMmKrD4,31231
17
+ maps4fs/toolbox/__init__.py,sha256=zZMLEkGzb4z0xql650gOtGSvcgX58DnJ2yN3vC2daRk,43
18
+ maps4fs/toolbox/background.py,sha256=9BXWNqs_n3HgqDiPztWylgYk_QM4YgBpe6_ZNQAWtSc,2154
19
+ maps4fs/toolbox/dem.py,sha256=z9IPFNmYbjiigb3t02ZenI3Mo8odd19c5MZbjDEovTo,3525
20
+ maps4fs-1.5.7.dist-info/LICENSE.md,sha256=pTKD_oUexcn-yccFCTrMeLkZy0ifLRa-VNcDLqLZaIw,10749
21
+ maps4fs-1.5.7.dist-info/METADATA,sha256=pIrqQEpHgaljNNzjl297anHnHS2jMruuNeBKyX9iGME,35585
22
+ maps4fs-1.5.7.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
23
+ maps4fs-1.5.7.dist-info/top_level.txt,sha256=Ue9DSRlejRQRCaJueB0uLcKrWwsEq9zezfv5dI5mV1M,8
24
+ maps4fs-1.5.7.dist-info/RECORD,,
@@ -1,21 +0,0 @@
1
- maps4fs/__init__.py,sha256=LMzzORK3Q3OjXmmRJ03CpS2SMP6zTwKNnUUei3P7s40,300
2
- maps4fs/logger.py,sha256=B-NEYpMjPAAqlV4VpfTi6nbBFnEABVtQOaYe6nMpidg,1489
3
- maps4fs/generator/__init__.py,sha256=zZMLEkGzb4z0xql650gOtGSvcgX58DnJ2yN3vC2daRk,43
4
- maps4fs/generator/background.py,sha256=ySABP9HLji8R0aXi1BwjUQtP2uDqZPkrlmugowa9Gkk,22836
5
- maps4fs/generator/component.py,sha256=58UQgdR-7KlWHTfwLesNNK76BTRsiVngRa6B64OKjhc,20065
6
- maps4fs/generator/config.py,sha256=0QmK052B8bxyHVhg3jzCORLfOBMMmqVfhhbqXKf6OMk,4383
7
- maps4fs/generator/dem.py,sha256=MZf3ZjawJ977TxqB1q9nNpvPZUNwfmm2EaJDtVU-eCU,15939
8
- maps4fs/generator/game.py,sha256=jjo7CTwHHSkRpeD_QgRXkhR_NxI09C4kMxz-nYOTM4A,7931
9
- maps4fs/generator/grle.py,sha256=onhZovvRtireDfw7wEOL0CZmOmoVzRPY-R4TlvbOUMI,17561
10
- maps4fs/generator/i3d.py,sha256=vbH7G0kDOGC6gbNDE-QYxMnKOMJ-vCGYdaKhWwci4ZU,23748
11
- maps4fs/generator/map.py,sha256=JwrlUdjyvSYB82HfseJ6w2-ZDFwplyfPCn84Z5awdCY,11721
12
- maps4fs/generator/qgis.py,sha256=Es8hLuqN_KH8lDfnJE6He2rWYbAKJ3RGPn-o87S6CPI,6116
13
- maps4fs/generator/texture.py,sha256=fZN0soGWk8-f3GuQWiwJ2yQTsmL9fLWVlgqeLI6ePi4,30648
14
- maps4fs/toolbox/__init__.py,sha256=zZMLEkGzb4z0xql650gOtGSvcgX58DnJ2yN3vC2daRk,43
15
- maps4fs/toolbox/background.py,sha256=9BXWNqs_n3HgqDiPztWylgYk_QM4YgBpe6_ZNQAWtSc,2154
16
- maps4fs/toolbox/dem.py,sha256=z9IPFNmYbjiigb3t02ZenI3Mo8odd19c5MZbjDEovTo,3525
17
- maps4fs-1.4.1.dist-info/LICENSE.md,sha256=pTKD_oUexcn-yccFCTrMeLkZy0ifLRa-VNcDLqLZaIw,10749
18
- maps4fs-1.4.1.dist-info/METADATA,sha256=GYS-0gCIT-DmBEL29mDjwQIcn-7t_XYYH05ObyMOQSc,32421
19
- maps4fs-1.4.1.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
20
- maps4fs-1.4.1.dist-info/top_level.txt,sha256=Ue9DSRlejRQRCaJueB0uLcKrWwsEq9zezfv5dI5mV1M,8
21
- maps4fs-1.4.1.dist-info/RECORD,,