OperatorNode.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /**
  2. * @author sunag / http://www.sunag.com.br/
  3. */
  4. THREE.OperatorNode = function ( a, b, op ) {
  5. THREE.TempNode.call( this );
  6. this.a = a;
  7. this.b = b;
  8. this.op = op || THREE.OperatorNode.ADD;
  9. };
  10. THREE.OperatorNode.ADD = '+';
  11. THREE.OperatorNode.SUB = '-';
  12. THREE.OperatorNode.MUL = '*';
  13. THREE.OperatorNode.DIV = '/';
  14. THREE.OperatorNode.prototype = Object.create( THREE.TempNode.prototype );
  15. THREE.OperatorNode.prototype.constructor = THREE.OperatorNode;
  16. THREE.OperatorNode.prototype.nodeType = "Operator";
  17. THREE.OperatorNode.prototype.getType = function ( builder ) {
  18. var a = this.a.getType( builder );
  19. var b = this.b.getType( builder );
  20. if ( builder.isFormatMatrix( a ) ) {
  21. return 'v4';
  22. } else if ( builder.getFormatLength( b ) > builder.getFormatLength( a ) ) {
  23. // use the greater length vector
  24. return b;
  25. }
  26. return a;
  27. };
  28. THREE.OperatorNode.prototype.generate = function ( builder, output ) {
  29. var material = builder.material,
  30. data = material.getDataNode( this.uuid );
  31. var type = this.getType( builder );
  32. var a = this.a.build( builder, type );
  33. var b = this.b.build( builder, type );
  34. return builder.format( '( ' + a + ' ' + this.op + ' '+ b + ' )', type, output );
  35. };
  36. THREE.OperatorNode.prototype.copy = function ( source ) {
  37. THREE.GLNode.prototype.copy.call( this, source );
  38. this.a = source.a;
  39. this.b = source.b;
  40. this.op = source.op;
  41. };
  42. THREE.OperatorNode.prototype.toJSON = function ( meta ) {
  43. var data = this.getJSONNode( meta );
  44. if ( ! data ) {
  45. data = this.createJSONNode( meta );
  46. data.a = this.a.toJSON( meta ).uuid;
  47. data.b = this.b.toJSON( meta ).uuid;
  48. data.op = this.op;
  49. }
  50. return data;
  51. };