topical media & game development

talk show tell print

mobile-query-three-js-plugins-tquery.geometry.toolbox.js / js



  
@fileOverview Plugins for tQuery.Geometry: tool box to play with geometry

  
  
  (function(){        // TODO why is there a closure here ?
  
  
////////////////////////////////////////////////////////////////////////////

// Size functions //
////////////////////////////////////////////////////////////////////////////

tQuery.Geometry.registerInstance('computeAll', function(){ this.each(function(tGeometry){ tGeometry.computeBoundingSphere(); tGeometry.computeBoundingBox(); //tGeometry.computeCentroids(); tGeometry.computeFaceNormals(); //tGeometry.computeVertexNormals(); //tGeometry.computeTangents(); }); // return this, to get chained API return this; });
zoom a geometry @name zoom @methodOf tQuery.Geometry

  
  tQuery.Geometry.registerInstance('scaleBy', function(vector3){
          // handle parameters
          if( typeof vector3 === "number" && arguments.length === 1 ){
                  vector3        = new THREE.Vector3(vector3, vector3, vector3);
          }else if( typeof vector3 === "number" && arguments.length === 3 ){
                  vector3        = new THREE.Vector3(arguments[0], arguments[1], arguments[2]);
          }
          console.assert(vector3 instanceof THREE.Vector3, "Geometry.vector3 parameter error");
  
          // change all geometry.vertices
          this.each(function(geometry){
                  for(var i = 0; i < geometry.vertices.length; i++) {
                          var vertex        = geometry.vertices[i];
                          vertex.multiply(vector3); 
                  }
                  // mark the vertices as dirty
                  geometry.verticesNeedUpdate = true;
                  geometry.computeBoundingBox();
          })
  
          // return this, to get chained API        
          return this;
  });
  
  tQuery.Geometry.registerInstance('size', function(){
          // only on zero-or-one element
          console.assert(this.length <= 1)
          // if no element, return undefined
          if( this.length === 0 )        return undefined
  
          // else measure the size of the element
          var geometry        = this.get(0);
          // compute middle
          var size= new THREE.Vector3()
          size.x        = geometry.boundingBox.max.x - geometry.boundingBox.min.x;
          size.y        = geometry.boundingBox.max.y - geometry.boundingBox.min.y;
          size.z        = geometry.boundingBox.max.z - geometry.boundingBox.min.z;
  
          // return the just computed middle
          return size;        
  });
  
  

  
  tQuery.Geometry.registerInstance('normalize', function(){
          // change all geometry.vertices
          this.each(function(geometry){
                  var node        = tQuery(geometry);
                  var size        = node.size();
                  if( size.x >= size.y && size.x >= size.z ){
                          node.zoom(1/size.x);
                  }else if( size.y >= size.x && size.y >= size.z ){
                          node.zoom(1/size.y);
                  }else{
                          node.zoom(1/size.z);
                  }
          });
          // return this, to get chained API        
          return this;
  });
  
  
////////////////////////////////////////////////////////////////////////////

// //
////////////////////////////////////////////////////////////////////////////

tQuery.Geometry.registerInstance('middlePoint', function(){ // only on zero-or-one element console.assert(this.length <= 1) // if no element, return undegined if( this.length === 0 ) return undefined // else measure the size of the element var geometry = this.get(0); // compute middle var middle = new THREE.Vector3() middle.x = ( geometry.boundingBox.max.x + geometry.boundingBox.min.x ) / 2; middle.y = ( geometry.boundingBox.max.y + geometry.boundingBox.min.y ) / 2; middle.z = ( geometry.boundingBox.max.z + geometry.boundingBox.min.z ) / 2; // return the just computed middle return middle; });
////////////////////////////////////////////////////////////////////////////

// move functions //
////////////////////////////////////////////////////////////////////////////

tQuery.Geometry.registerInstance('translate', function(delta){ // handle parameters if( typeof delta === "number" && arguments.length === 3 ){ delta = new THREE.Vector3(arguments[0], arguments[1], arguments[2]); } console.assert(delta instanceof THREE.Vector3, "Geometry.translate parameter error"); // change all geometry.vertices this.each(function(geometry){ // change all geometry.vertices for(var i = 0; i < geometry.vertices.length; i++) { var vertex = geometry.vertices[i]; vertex.add(delta); } // mark the vertices as dirty geometry.verticesNeedUpdate = true; geometry.computeBoundingBox(); }) // return this, to get chained API return this; }); tQuery.Geometry.registerInstance('rotate', function(angles, order){ // handle parameters if( typeof angles === "number" && arguments.length === 3 ){ angles = new THREE.Vector3(arguments[0], arguments[1], arguments[2]); } console.assert(angles instanceof THREE.Vector3, "Geometry.rotate parameter error"); // set default rotation order if needed order = order || 'XYZ'; // compute transformation matrix var matrix = new THREE.Matrix4(); matrix.setRotationFromEuler(angles, order); // change all geometry.vertices this.each(function(geometry){ // apply the matrix geometry.applyMatrix( matrix ); // mark the vertices as dirty geometry.verticesNeedUpdate = true; geometry.computeBoundingBox(); }); // return this, to get chained API return this; });

  
  tQuery.Geometry.registerInstance('center', function(noX, noY, noZ){
          // change all geometry.vertices
          this.each(function(tGeometry){
                  var geometry        = tQuery(tGeometry);
                  // compute delta
                  var delta         = geometry.middlePoint().negate();
                  if( noX )        delta.x        = 0;
                  if( noY )        delta.y        = 0;
                  if( noZ )        delta.z        = 0;
  
                  return geometry.translate(delta)
          });
          // return this, to get chained API        
          return this;
  });
  
  // some shortcuts
  tQuery.Geometry.registerInstance('translateX'        , function(delta){ return this.translate(delta, 0, 0);        });
  tQuery.Geometry.registerInstance('translateY'        , function(delta){ return this.translate(0, delta, 0);        });
  tQuery.Geometry.registerInstance('translateZ'        , function(delta){ return this.translate(0, 0, delta);        });
  tQuery.Geometry.registerInstance('rotateX'        , function(angle){ return this.rotate(angle, 0, 0);        });
  tQuery.Geometry.registerInstance('rotateY'        , function(angle){ return this.rotate(0, angle, 0);        });
  tQuery.Geometry.registerInstance('rotateZ'        , function(angle){ return this.rotate(0, 0, angle);        });
  tQuery.Geometry.registerInstance('scaleXBy'        , function(ratio){ return this.scaleBy(ratio, 1, 1);        });
  tQuery.Geometry.registerInstance('scaleYBy'        , function(ratio){ return this.scaleBy(1, ratio, 1);        });
  tQuery.Geometry.registerInstance('scaleZBy'        , function(ratio){ return this.scaleBy(1, 1, ratio);        });
  
  // backward compatibility
  tQuery.Geometry.registerInstance('zoom'                , function(value){return this.scaleBy(value);                });
  tQuery.Geometry.registerInstance('zoomX'        , function(ratio){ return this.zoom(ratio, 1, 1);        });
  tQuery.Geometry.registerInstance('zoomY'        , function(ratio){ return this.zoom(1, ratio, 1);        });
  tQuery.Geometry.registerInstance('zoomZ'        , function(ratio){ return this.zoom(1, 1, ratio);        });
  
  })();        // closure function end
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.