Meshing a coal seam using a PolyData
We only work on the first polygon for now…
[1]:
import geopandas as gpd
import pyvista as pv
import pyacvd
from shapely.geometry import Polygon
import numpy as np
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
/tmp/ipykernel_521/326362187.py in <module>
1 import geopandas as gpd
----> 2 import pyvista as pv
3 import pyacvd
4 from shapely.geometry import Polygon
5 import numpy as np
ModuleNotFoundError: No module named 'pyvista'
open and read the file
[2]:
gdf = gpd.read_file('../../../../data/example.gpkg', layer = 'Parties exploitées - Caillette')
#open and read the file
print the head of the file
[3]:
gdf.head()
# print the head of the file
[3]:
Année | geometry | |
---|---|---|
0 | 1941 | POLYGON Z ((154613.672 123991.170 -663.000, 15... |
1 | 1942 | POLYGON Z ((154816.546 123955.316 -671.100, 15... |
2 | 1939 | POLYGON Z ((154912.246 123824.192 -686.800, 15... |
3 | 1942 | POLYGON Z ((154868.618 123744.141 -698.900, 15... |
4 | 1938 | POLYGON Z ((154949.664 123925.004 -679.300, 15... |
[4]:
row = gdf.loc[4,:]
[5]:
row.geometry
[5]:
creating a list with the exterior coords
[6]:
#creating a list with the exterior coords
if isinstance(row.geometry, Polygon):
number_of_vertices = len(list(row.geometry.exterior.coords))
if row.geometry.has_z: # TODO: Can we handle Polygons with holes?
vertices = list(row.geometry.exterior.coords)
else:
vertices = zip(row.geometry.exterior.xy[0], row.geometry.exterior.xy[1],
itertools.repeat(row[elevation]))
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_521/3008683982.py in <module>
1 #creating a list with the exterior coords
----> 2 if isinstance(row.geometry, Polygon):
3 number_of_vertices = len(list(row.geometry.exterior.coords))
4 if row.geometry.has_z: # TODO: Can we handle Polygons with holes?
5 vertices = list(row.geometry.exterior.coords)
NameError: name 'Polygon' is not defined
[7]:
#converting in a numpy array
vertices = np.array(vertices)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_521/625200463.py in <module>
1 #converting in a numpy array
----> 2 vertices = np.array(vertices)
NameError: name 'np' is not defined
creating a list with index corresponding to each faces, with the number of faces in the first position
[8]:
#creating a list with index corresponding to each faces, with the number of faces in the first position
face = [number_of_vertices-1]
face.extend([i for i in range(number_of_vertices-1)])
face = np.array(face)
face
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_521/3015160694.py in <module>
1 #creating a list with index corresponding to each faces, with the number of faces in the first position
----> 2 face = [number_of_vertices-1]
3 face.extend([i for i in range(number_of_vertices-1)])
4 face = np.array(face)
5 face
NameError: name 'number_of_vertices' is not defined
creating the first polygon and meshing it with delaunay triangle
[9]:
#creating the first polygon and meshing it with delaunay triangle
polygon = pv.PolyData(vertices, face)
polygon.point_data['Elevation'] = vertices.T[2]
polygon_d = polygon.delaunay_2d()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_521/1447113831.py in <module>
1 #creating the first polygon and meshing it with delaunay triangle
----> 2 polygon = pv.PolyData(vertices, face)
3 polygon.point_data['Elevation'] = vertices.T[2]
4 polygon_d = polygon.delaunay_2d()
NameError: name 'pv' is not defined
[10]:
polygon_d = polygon_d.subdivide(3, subfilter='linear')
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_521/4229014097.py in <module>
----> 1 polygon_d = polygon_d.subdivide(3, subfilter='linear')
NameError: name 'polygon_d' is not defined
[11]:
polygon_d.plot(jupyter_backend='panel', color='w', style='surface', interpolate_before_map=True,
scalar_bar_args={'title': 'Elevation'},show_edges=True
)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_521/46058957.py in <module>
----> 1 polygon_d.plot(jupyter_backend='panel', color='w', style='surface', interpolate_before_map=True,
2 scalar_bar_args={'title': 'Elevation'},show_edges=True
3 )
NameError: name 'polygon_d' is not defined
[12]:
#
clipped = polygon_d.clip_surface(polygon.extrude([0.,0.,500.]).transform(np.array([[1.,0.,0.,0.],[0.,1.,0.,0.],[0.,0.,1.,-250.],[0.,0.,0.,1.]])), invert=False).decimate_pro(0.75)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_521/2608469867.py in <module>
1 #
----> 2 clipped = polygon_d.clip_surface(polygon.extrude([0.,0.,500.]).transform(np.array([[1.,0.,0.,0.],[0.,1.,0.,0.],[0.,0.,1.,-250.],[0.,0.,0.,1.]])), invert=False).decimate_pro(0.75)
NameError: name 'polygon_d' is not defined
[13]:
transform_matrix = np.array([[1, 0, 0, 0],
[0, 1, 0, 0],
[0, 0, 1, -250],
[0, 0, 0, 1]])
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_521/3135239534.py in <module>
----> 1 transform_matrix = np.array([[1, 0, 0, 0],
2 [0, 1, 0, 0],
3 [0, 0, 1, -250],
4 [0, 0, 0, 1]])
NameError: name 'np' is not defined
[14]:
cluster = pyacvd.Clustering(polygon_d)
# mesh is not dense enough for uniform remeshing
cluster.cluster(20000, maxiter=2000)
cluster.plot()
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_521/2860700268.py in <module>
----> 1 cluster = pyacvd.Clustering(polygon_d)
2 # mesh is not dense enough for uniform remeshing
3 cluster.cluster(20000, maxiter=2000)
4 cluster.plot()
NameError: name 'pyacvd' is not defined
trial to extrude a polygon
[15]:
pl = pv.Plotter()
#creating a mesh
pl.add_mesh(clipped.smooth(n_iter=30000, boundary_smoothing=False).decimate_pro(0.5), style='surface')
#extrude the form (plane)
pl.add_mesh(polygon.extrude([0,0,500]).transform(transform_matrix), opacity=0.5)
pl.add_mesh(polygon, style='wireframe', color='k')
pl.show(jupyter_backend='panel')
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_521/769308001.py in <module>
----> 1 pl = pv.Plotter()
2 #creating a mesh
3 pl.add_mesh(clipped.smooth(n_iter=30000, boundary_smoothing=False).decimate_pro(0.5), style='surface')
4 #extrude the form (plane)
5 pl.add_mesh(polygon.extrude([0,0,500]).transform(transform_matrix), opacity=0.5)
NameError: name 'pv' is not defined
[16]:
# remesh
remesh = cluster.create_mesh()
remesh = remesh.clip_surface(polygon.extrude([0.,0.,500.]).transform(transform_matrix), invert=False).clean().decimate_pro(0.75).smooth(n_iter=100000, boundary_smoothing=False)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_521/3722283628.py in <module>
1 # remesh
----> 2 remesh = cluster.create_mesh()
3 remesh = remesh.clip_surface(polygon.extrude([0.,0.,500.]).transform(transform_matrix), invert=False).clean().decimate_pro(0.75).smooth(n_iter=100000, boundary_smoothing=False)
NameError: name 'cluster' is not defined
[17]:
# plot uniformly remeshed 3D surface
remesh.transform(transform_matrix).plot(jupyter_backend='panel', show_edges=True)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_521/4031091281.py in <module>
1 # plot uniformly remeshed 3D surface
----> 2 remesh.transform(transform_matrix).plot(jupyter_backend='panel', show_edges=True)
NameError: name 'remesh' is not defined
[18]:
# extruding the 3D surface
pl = pv.Plotter(window_size=(1024,480))
pl.add_mesh(remesh.extrude([0,0,10], capping=True), color='r', opacity=0.5, edge_color='darkgrey', show_edges=True)
pl.add_mesh(clipped, color='b')
pl.add_axes()
pl.show(jupyter_backend='panel')
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_521/4280719680.py in <module>
1 # extruding the 3D surface
----> 2 pl = pv.Plotter(window_size=(1024,480))
3 pl.add_mesh(remesh.extrude([0,0,10], capping=True), color='r', opacity=0.5, edge_color='darkgrey', show_edges=True)
4 pl.add_mesh(clipped, color='b')
5 pl.add_axes()
NameError: name 'pv' is not defined
[19]:
remesh.point_data['Elevation'] = remesh.points[:,2]
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_521/1969635066.py in <module>
----> 1 remesh.point_data['Elevation'] = remesh.points[:,2]
NameError: name 'remesh' is not defined
create a regular mesh
[20]:
import pygmsh
import gmsh
import pyvista as pv
import meshio
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
/tmp/ipykernel_521/782659251.py in <module>
----> 1 import pygmsh
2 import gmsh
3 import pyvista as pv
4 import meshio
ModuleNotFoundError: No module named 'pygmsh'
[21]:
with pygmsh.geo.Geometry() as geom:
lcar =1
p1= geom.add_point( [0.0,0.0,0.0] ,lcar)
p2= geom.add_point( [10.0,0.0,0.0] ,lcar)
p3= geom.add_point( [10.0,10.0,0.0] ,lcar)
p4= geom.add_point( [0.0,10.0,0.0] ,lcar)
l1= geom.add_line( p1, p2)
l2= geom.add_line( p2, p3)
l3= geom.add_line( p3, p4)
l4= geom.add_line( p4, p1)
L1= geom.add_curve_loop( [l1,l2,l3,l4])
s1= geom.add_surface(L1)
geom.set_transfinite_curve(l1, mesh_type='Progression', num_nodes=11,coeff=1.)
geom.set_transfinite_curve(l2, mesh_type='Progression', num_nodes=11,coeff=1.)
geom.set_transfinite_curve(l3, mesh_type='Progression', num_nodes=11,coeff=1.)
geom.set_transfinite_curve(l4, mesh_type='Progression', num_nodes=11,coeff=1.)
geom.set_transfinite_surface(s1, arrangement='left', corner_pts=(p1,p2,p3,p4))
geom.set_recombined_surfaces([s1])
#mesh=geom.generate_mesh(dim=2)
V1=geom.extrude(s1, [0.0, 0.0, 10.0],num_layers=5,recombine=True)
#points, cells, point_data, cell_data, field_data = geom.generate_mesh()
#geom.set_transfinite_volume(V1,
mesh=geom.generate_mesh()
mesh.write('./tmp_files/test_1.vtk')
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_521/456234059.py in <module>
----> 1 with pygmsh.geo.Geometry() as geom:
2 lcar =1
3 p1= geom.add_point( [0.0,0.0,0.0] ,lcar)
4 p2= geom.add_point( [10.0,0.0,0.0] ,lcar)
5 p3= geom.add_point( [10.0,10.0,0.0] ,lcar)
NameError: name 'pygmsh' is not defined
[22]:
grid = pv.read('./tmp_files/test_1.vtk')
grid.plot(jupyter_backend='panel',show_scalar_bar=False, show_axes=False,show_edges=True)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_521/1782103627.py in <module>
----> 1 grid = pv.read('./tmp_files/test_1.vtk')
2 grid.plot(jupyter_backend='panel',show_scalar_bar=False, show_axes=False,show_edges=True)
NameError: name 'pv' is not defined
[23]:
grid
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_521/3738140959.py in <module>
----> 1 grid
NameError: name 'grid' is not defined
Interactive representation
[24]:
dargs = dict(scalars='Elevation', cmap='rainbow', show_edges=True, window_size=(1024,480))
remesh.smooth(n_iter=200, boundary_smoothing=False).plot(jupyter_backend='panel', color='w', style='surface', interpolate_before_map=True,
scalar_bar_args={'title': 'Elevation'},
**dargs)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_521/1418034597.py in <module>
1 dargs = dict(scalars='Elevation', cmap='rainbow', show_edges=True, window_size=(1024,480))
2
----> 3 remesh.smooth(n_iter=200, boundary_smoothing=False).plot(jupyter_backend='panel', color='w', style='surface', interpolate_before_map=True,
4 scalar_bar_args={'title': 'Elevation'},
5 **dargs)
NameError: name 'remesh' is not defined
Static representation for thumbnail
[25]:
dargs = dict(scalars='Elevation', cmap='rainbow', show_edges=True, window_size=(1024,480))
remesh.plot(jupyter_backend='static', color='w', style='surface', interpolate_before_map=True,
scalar_bar_args={'title': 'Elevation'}, **dargs)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
/tmp/ipykernel_521/1350935876.py in <module>
1 dargs = dict(scalars='Elevation', cmap='rainbow', show_edges=True, window_size=(1024,480))
2
----> 3 remesh.plot(jupyter_backend='static', color='w', style='surface', interpolate_before_map=True,
4 scalar_bar_args={'title': 'Elevation'}, **dargs)
NameError: name 'remesh' is not defined
[ ]: