After the post of Etienne Tourigny about "Using/visualizing 3D data (Z values)", I realized that it was relatively easy from the Python console with matplotlib or visvis (new pure Python library for visualization of 1D to 4D data,
http://code.google.com/p/visvis/).
1) 3D shapefile a) with matplotlib.meshgridWith a 3d point shapefile, the
shapely module makes it very easy to extract the z coordinate:
from mpl_toolkits.mplot3d.axes3d import *
import pylab as plt
from matplotlib import cm
from matplotlib.mlab import griddata
import numpy as np
from shapely.wkb import loads
x=[]
y=[]
z=[]
for elem in layer.selectedFeatures():
geom= elem.geometry()
wkb = geom.asWkb()
x.append(loads(wkb).x)
y.append(loads(wkb).y)
z.append(loads(wkb).z)
now, with the x,y,z coordinates, we can build a grid/surface with the matplotlib.meshgrid function
xi = np.linspace(min(x), max(x))
yi = np.linspace(min(y), max(y))
X, Y = np.meshgrid(xi, yi)
Z = griddata(x, y, z, xi, yi)
and draw it in a 3D matplotlib window
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(X, Y, Z, rstride=5, cstride=5, cmap=cm.jet,linewidth=1, antialiased=True)
plt.show()

It is also possible to plot the points or the contours in 3D
with visvisimport visvis
visvis.plot(x,y,z, lc='k', ls='', mc='g', mw=2, lw=2, ms='.')
visvis.surf(xi, yi, Z)
b) with splines algorithms from scipyIt is also possible to use other interpolation algorithms like the spline interpolation class
BivariateSpline of scipy
with matplotlibimport scipy as sp
from scipy.interpolate import SmoothBivariateSpline
spl = SmoothBivariateSpline(x,y,z)
# construction of the grid/surface
x = np.array(x)
y = np.array(y)
xn, yn = sp.mgrid[x.min():x.max():50j,y.min():y.max():50j]
zspline = spl( xn[:,0], yn[0,:])
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(xn, yn, zspline)
plt.show()
with visvisimport visvis
visvis.surf(xn,yn,zspline)
2) shapefile with z attributeThis is the same thing, but we must use the values of the attribute
Conclusions and a plugin ?Build a plugin seems a priori to me very complex and time consuming
- plot 3 d points is easy.
- but in other cases, all the scenarios (3D shapefile points, lines or polygons, shapefile with z attribute, interpolation algorithm, ...) should be considered before
- you need modules like shapely or matplotlib
I do not have much time to write a plugin and personally I'm very happy with the Python console, sorry.

Then, If somebody else wants to go,I can help