text: /**
   * @namespace
   */
  var THREEx    = THREEx || {}
  
  /**
   * dilate a geometry inplace
   * @param  {THREE.Geometry} geometry geometry to dilate
   * @param  {Number} length   percent to dilate, use negative value to erode
   */
  THREEx.dilateGeometry    = function(geometry, length){
      // gather vertexNormals from geometry.faces
      var vertexNormals    = new Array(geometry.vertices.length);
      geometry.faces.forEach(function(face){
          if( face instanceof THREE.Face4 ){
              vertexNormals[face.a]    = face.vertexNormals[0];
              vertexNormals[face.b]    = face.vertexNormals[1];
              vertexNormals[face.c]    = face.vertexNormals[2];
              vertexNormals[face.d]    = face.vertexNormals[3];        
          }else if( face instanceof THREE.Face3 ){
              vertexNormals[face.a]    = face.vertexNormals[0];
              vertexNormals[face.b]    = face.vertexNormals[1];
              vertexNormals[face.c]    = face.vertexNormals[2];
          }else    console.assert(false);
      });
      // modify the vertices according to vertextNormal
      geometry.vertices.forEach(function(vertex, idx){
          var vertexNormal = vertexNormals[idx];
          vertex.x    += vertexNormal.x * length;
          vertex.y    += vertexNormal.y * length;
          vertex.z    += vertexNormal.z * length;
      });        
  };
  
  