Compare commits

..

No commits in common. "5e92c691a8c35e86e9a148b78b48c38cd614d506" and "6830d3a81b61618b1d80c910bdd98d110c0ea363" have entirely different histories.

2 changed files with 19 additions and 28 deletions

View File

@ -1,19 +1,3 @@
# blender-mapping-tools # blender-mapping-tools
Blender extension for creating maps Blender extension for creating maps
## Building
TODO: make a proper build system.
For Blender 4.4:
```sh
pip download rasterio --dest ./wheels --only-binary==:all: --python-version=3.11
# Or replcace ".." below with any directory.
# blender_mapping_tools-0.1.0.zip will be placed in that directory.
blender --command extension build --output-dir ..
```
Then install `blender_mapping_tools-0.1.0.zip` as an extension in blender. It
will add a "Mesh from GeoTIFF" option to the "Add" menu.

View File

@ -13,13 +13,13 @@ class GridVertexGenerator():
self.grid_size_x = grid_size_x self.grid_size_x = grid_size_x
self.grid_size_y = grid_size_y self.grid_size_y = grid_size_y
self.dem_array = dem_array self.dem_array = dem_array
def __len__(self): def __len__(self):
return self.grid_size_x * self.grid_size_y return self.grid_size_x * self.grid_size_y
def __iter__(self): def __iter__(self):
return self._generator() return self._generator()
def _generator(self): def _generator(self):
for j in range(self.grid_size_y): for j in range(self.grid_size_y):
for i in range(self.grid_size_x): for i in range(self.grid_size_x):
@ -36,13 +36,14 @@ class GridTriangleGenerator():
self.cell_size_y = cell_size_x self.cell_size_y = cell_size_x
self.grid_size_x = grid_size_x self.grid_size_x = grid_size_x
self.grid_size_y = grid_size_y self.grid_size_y = grid_size_y
def __len__(self): def __len__(self):
#return (self.grid_size_x - 1) * (self.grid_size_y - 1) * 2
return (self.grid_size_x - 1) * (self.grid_size_y - 1) return (self.grid_size_x - 1) * (self.grid_size_y - 1)
def __iter__(self): def __iter__(self):
return self._generator() return self._generator()
def _generator(self): def _generator(self):
for i in range(self.grid_size_x - 1): for i in range(self.grid_size_x - 1):
for j in range(self.grid_size_y - 1): for j in range(self.grid_size_y - 1):
@ -51,7 +52,9 @@ class GridTriangleGenerator():
v10 = j * self.grid_size_x + i + 1 v10 = j * self.grid_size_x + i + 1
v11 = (j + 1) * self.grid_size_x + i + 1 v11 = (j + 1) * self.grid_size_x + i + 1
yield (v00, v10, v11, v01) yield (v00, v10, v11, v01)
#yield (v00, v10, v01)
#yield (v01, v10, v11)
class CreateMeshFromGeotiffOperator(bpy.types.Operator, ImportHelper): class CreateMeshFromGeotiffOperator(bpy.types.Operator, ImportHelper):
"""Create a new object from a GeoTIFF""" """Create a new object from a GeoTIFF"""
@ -86,11 +89,15 @@ class CreateMeshFromGeotiffOperator(bpy.types.Operator, ImportHelper):
print("Done.") print("Done.")
mesh.validate(verbose=True) mesh.validate(verbose=True)
return {'FINISHED'} return {'FINISHED'}
def construct_mesh(self, grid_size_x, grid_size_y, cell_size_x, cell_size_y, dem_array): def construct_mesh(self, grid_size_x, grid_size_y, cell_size_x, cell_size_y, dem_array):
return (GridVertexGenerator(grid_size_x, grid_size_y, cell_size_x, cell_size_y, dem_array), #grid_size_x = 10
[], #grid_size_y = 15
GridTriangleGenerator(grid_size_x, grid_size_y, cell_size_x, cell_size_y)) #cell_size_x = 0.75
#cell_size_y = 0.5
return (GridVertexGenerator(grid_size_x, grid_size_y, cell_size_x, cell_size_y, dem_array),
[],
GridTriangleGenerator(grid_size_x, grid_size_y, cell_size_x, cell_size_y))
def menu_func(self, context): def menu_func(self, context):
self.layout.operator(CreateMeshFromGeotiffOperator.bl_idname, self.layout.operator(CreateMeshFromGeotiffOperator.bl_idname,