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

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
[ ]: