try:
import pylab as p
except ImportError:
print "could not import pylab, matplotlib has not been installed, no plotting capabilities enabled"
import numpy as np
from issm.processmesh import processmesh
from issm.applyoptions import applyoptions
from mpl_toolkits.mplot3d.art3d import Line3DCollection
from mpl_toolkits.axes_grid1 import inset_locator
from mpl_toolkits.mplot3d import Axes3D
[docs]def plot_mesh(md,options,fig,axgrid,gridindex):
'''
PLOT_MESH - plot model mesh
Usage:
plot_mesh(md,options,nlines,ncols,i)
See also: PLOTMODEL
'''
x,y,z,elements,is2d,isplanet=processmesh(md,'mesh',options)
ax=axgrid[gridindex]
fig.delaxes(axgrid.cbar_axes[gridindex])
if is2d:
ax.triplot(x,y,elements)
else:
ax=inset_locator.inset_axes(axgrid[gridindex],width='100%',height='100%',loc=3,borderpad=0,axes_class=Axes3D)
AB=elements[:,0:2]
BC=elements[:,1:3]
CA=np.vstack((elements[:,2],elements[:,0])).T
DE=elements[:,3:5]
EF=elements[:,4:]
FD=np.vstack((elements[:,5],elements[:,3])).T
AD=np.vstack((elements[:,0],elements[:,3])).T
BE=np.vstack((elements[:,1],elements[:,4])).T
CF=np.vstack((elements[:,2],elements[:,5])).T
tmpa=np.vstack((AB,BC,CA,DE,EF,FD,AD,BE,CF))
#deleting segments that appear multiple times
tmpb = np.ascontiguousarray(tmpa).view(np.dtype((np.void, tmpa.dtype.itemsize * tmpa.shape[1])))
_, idx = np.unique(tmpb, return_index=True)
triel= tmpa[idx]
for triangle in triel:
tri=zip(x[triangle],y[triangle],z[triangle])
pl3=Line3DCollection([tri],edgecolor='r')
ax.add_collection3d(pl3)
ax.set_xlim([min(x),max(x)])
ax.set_ylim([min(y),max(y)])
ax.set_zlim([min(z),max(z)])
#apply options
options.addfielddefault('title','Mesh')
options.addfielddefault('colorbar','off')
options.addfielddefault('ticklabels','on')
applyoptions(md,[],options,fig,axgrid,gridindex)