From 7b6e8194b91168abdeb94702eb350d14f147858b Mon Sep 17 00:00:00 2001 From: hwc487 Date: Thu, 8 Mar 2012 17:29:18 -0800 Subject: Canvas IO --- js/lib/rdge/runtime/RuntimeGeomObj.js | 633 ---------------------------------- 1 file changed, 633 deletions(-) delete mode 100644 js/lib/rdge/runtime/RuntimeGeomObj.js (limited to 'js/lib/rdge/runtime/RuntimeGeomObj.js') diff --git a/js/lib/rdge/runtime/RuntimeGeomObj.js b/js/lib/rdge/runtime/RuntimeGeomObj.js deleted file mode 100644 index 3dc81be2..00000000 --- a/js/lib/rdge/runtime/RuntimeGeomObj.js +++ /dev/null @@ -1,633 +0,0 @@ - -/* -This file contains proprietary software owned by Motorola Mobility, Inc.
-No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
-(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. -
*/ - -var RuntimeMaterial = require("js/lib/rdge/runtime/RuntimeMaterial"); -var RuntimeFlatMaterial = RuntimeMaterial.RuntimeFlatMaterial, - RuntimeRadialGradientMaterial = RuntimeMaterial.RuntimeRadialGradientMaterial, - RuntimeLinearGradientMaterial = RuntimeMaterial.RuntimeLinearGradientMaterial, - RuntimeBumpMetalMaterial = RuntimeMaterial.RuntimeBumpMetalMaterial, - RuntimeUberMaterial = RuntimeMaterial.RuntimeUberMaterial, - RuntimePulseMaterial = RuntimeMaterial.RuntimePulseMaterial, - RuntimePlasmaMaterial = RuntimeMaterial.RuntimePlasmaMaterial; - - - -/////////////////////////////////////////////////////////////////////// -// Class RuntimeGeomObj -// Super class for all geometry classes -/////////////////////////////////////////////////////////////////////// -var RuntimeGeomObj = function RuntimeGeomObj() -{ - /////////////////////////////////////////////////////////////////////// - // Constants - /////////////////////////////////////////////////////////////////////// - this.GEOM_TYPE_RECTANGLE = 1; - this.GEOM_TYPE_CIRCLE = 2; - this.GEOM_TYPE_LINE = 3; - this.GEOM_TYPE_PATH = 4; - this.GEOM_TYPE_CUBIC_BEZIER = 5; - this.GEOM_TYPE_UNDEFINED = -1; - - /////////////////////////////////////////////////////////////////////// - // Instance variables - /////////////////////////////////////////////////////////////////////// - this._children; - - // stroke and fill colors - this._strokeColor = [0,0,0,0]; - this._fillColor = [0,0,0,0]; - - // array of materials - this._materials = []; - - /////////////////////////////////////////////////////////////////////// - // Property accessors - /////////////////////////////////////////////////////////////////////// - - this.geomType = function() { return this.GEOM_TYPE_UNDEFINED; } - - this.setWorld = function(w) { this._world = w; } - this.getWorld = function() { return this._world; } - - /////////////////////////////////////////////////////////////////////// - // Methods - /////////////////////////////////////////////////////////////////////// - this.makeStrokeMaterial = function() - { - } - - this.makeFillMaterial = function() - { - } - - - this.render = function() - { - } - - this.addChild = function( child ) - { - if (!this._children) this._children = []; - this._children.push( child ); - } - - this.import = function() - { - } - - this.importMaterials = function(importStr) - { - var nMaterials = Number( getPropertyFromString( "nMaterials: ", importStr ) ); - for (var i=0; i= 0.001) - { - var scale = len/sum; - rtnVec = []; - for (var i=0; i= 0) - rtnStr = rtnStr.substr(0, index); - - return rtnStr; -} - -/////////////////////////////////////////////////////////////////////// -// Class RuntimeRectangle -/////////////////////////////////////////////////////////////////////// -var RuntimeRectangle = function RuntimeRectangle() -{ - // inherit the members of RuntimeGeomObj - this.inheritedFrom = RuntimeGeomObj; - this.inheritedFrom(); - - this.import = function( importStr ) - { - this._xOffset = Number( getPropertyFromString( "xoff: ", importStr ) ); - this._yOffset = Number( getPropertyFromString( "yoff: ", importStr ) ); - this._width = Number( getPropertyFromString( "width: ", importStr ) ); - this._height = Number( getPropertyFromString( "height: ", importStr ) ); - this._strokeWidth = Number( getPropertyFromString( "strokeWidth: ", importStr ) ); - this._innerRadius = Number( getPropertyFromString( "innerRadius: ", importStr ) ); - this._strokeStyle = Number( getPropertyFromString( "strokeStyle: ", importStr ) ); - var strokeMaterialName = getPropertyFromString( "strokeMat: ", importStr ); - var fillMaterialName = getPropertyFromString( "fillMat: ", importStr ); - this._strokeStyle = getPropertyFromString( "strokeStyle: ", importStr ); - this._fillColor = eval( "[" + getPropertyFromString( "fillColor: ", importStr ) + "]" ); - this._strokeColor = eval( "[" + getPropertyFromString( "strokeColor: ", importStr ) + "]" ); - this._tlRadius = Number( getPropertyFromString( "tlRadius: ", importStr ) ); - this._trRadius = Number( getPropertyFromString( "trRadius: ", importStr ) ); - this._blRadius = Number( getPropertyFromString( "blRadius: ", importStr ) ); - this._brRadius = Number( getPropertyFromString( "brRadius: ", importStr ) ); - - this.importMaterials( importStr ); - } - - this.renderPath = function( inset, ctx ) - { - // various declarations - var pt, rad, ctr, startPt, bPts; - var width = Math.round(this._width), - height = Math.round(this._height); - - pt = [inset, inset]; // top left corner - - var tlRad = this._tlRadius; //top-left radius - var trRad = this._trRadius; - var blRad = this._blRadius; - var brRad = this._brRadius; - - if ((tlRad <= 0) && (blRad <= 0) && (brRad <= 0) && (trRad <= 0)) - { - ctx.rect(pt[0], pt[1], width - 2*inset, height - 2*inset); - } - else - { - // get the top left point - rad = tlRad - inset; - if (rad < 0) rad = 0; - pt[1] += rad; - if (Math.abs(rad) < 0.001) pt[1] = inset; - ctx.moveTo( pt[0], pt[1] ); - - // get the bottom left point - pt = [inset, height - inset]; - rad = blRad - inset; - if (rad < 0) rad = 0; - pt[1] -= rad; - ctx.lineTo( pt[0], pt[1] ); - - // get the bottom left curve - if (rad > 0.001) - ctx.quadraticCurveTo( inset, height-inset, inset+rad, height-inset ); - - // do the bottom of the rectangle - pt = [width - inset, height - inset]; - rad = brRad - inset; - if (rad < 0) rad = 0; - pt[0] -= rad; - ctx.lineTo( pt[0], pt[1] ); - - // get the bottom right arc - if (rad > 0.001) - ctx.quadraticCurveTo( width-inset, height-inset, width-inset, height-inset-rad ); - - // get the right of the rectangle - pt = [width - inset, inset]; - rad = trRad - inset; - if (rad < 0) rad = 0; - pt[1] += rad; - ctx.lineTo( pt[0], pt[1] ); - - // do the top right corner - if (rad > 0.001) - ctx.quadraticCurveTo( width-inset, inset, width-inset-rad, inset ); - - // do the top of the rectangle - pt = [inset, inset] - rad = tlRad - inset; - if (rad < 0) rad = 0; - pt[0] += rad; - ctx.lineTo( pt[0], pt[1] ); - - // do the top left corner - if (rad > 0.001) - ctx.quadraticCurveTo( inset, inset, inset, inset+rad ); - else - ctx.lineTo( inset, 2*inset ); - } - } - - this.render = function() - { - // get the world - var world = this.getWorld(); - if (!world) throw( "null world in rectangle render" ); - - // get the context - var ctx = world.get2DContext(); - if (!ctx) return; - - // get some dimensions - var lw = this._strokeWidth; - var w = world.getViewportWidth(), - h = world.getViewportHeight(); - - // render the fill - ctx.beginPath(); - if (this._fillColor) - { - var c = "rgba(" + 255*this._fillColor[0] + "," + 255*this._fillColor[1] + "," + 255*this._fillColor[2] + "," + this._fillColor[3] + ")"; - ctx.fillStyle = c; - - ctx.lineWidth = lw; - var inset = Math.ceil( lw ) + 0.5; - this.renderPath( inset, ctx ); - ctx.fill(); - ctx.closePath(); - } - - // render the stroke - ctx.beginPath(); - if (this._strokeColor) - { - var c = "rgba(" + 255*this._strokeColor[0] + "," + 255*this._strokeColor[1] + "," + 255*this._strokeColor[2] + "," + this._strokeColor[3] + ")"; - ctx.strokeStyle = c; - - ctx.lineWidth = lw; - var inset = Math.ceil( 0.5*lw ) + 0.5; - this.renderPath( inset, ctx ); - ctx.stroke(); - ctx.closePath(); - } - } -} - -/////////////////////////////////////////////////////////////////////// -// Class RuntimeOval -/////////////////////////////////////////////////////////////////////// -var RuntimeOval = function RuntimeOval() -{ - // inherit the members of RuntimeGeomObj - this.inheritedFrom = RuntimeGeomObj; - this.inheritedFrom(); - - this.import = function( importStr ) - { - this._xOffset = Number( getPropertyFromString( "xoff: ", importStr ) ); - this._yOffset = Number( getPropertyFromString( "yoff: ", importStr ) ); - this._width = Number( getPropertyFromString( "width: ", importStr ) ); - this._height = Number( getPropertyFromString( "height: ", importStr ) ); - this._strokeWidth = Number( getPropertyFromString( "strokeWidth: ", importStr ) ); - this._innerRadius = Number( getPropertyFromString( "innerRadius: ", importStr ) ); - this._strokeStyle = getPropertyFromString( "strokeStyle: ", importStr ); - var strokeMaterialName = getPropertyFromString( "strokeMat: ", importStr ); - var fillMaterialName = getPropertyFromString( "fillMat: ", importStr ); - this._fillColor = eval( "[" + getPropertyFromString( "fillColor: ", importStr ) + "]" ); - this._strokeColor = eval( "[" + getPropertyFromString( "strokeColor: ", importStr ) + "]" ); - - this.importMaterials( importStr ); - } - - this.render = function() - { - // get the world - var world = this.getWorld(); - if (!world) throw( "null world in buildBuffers" ); - - // get the context - var ctx = world.get2DContext(); - if (!ctx) return; - - // declare some variables - var p0, p1; - var x0, y1, x1, y1; - - // create the matrix - var lineWidth = this._strokeWidth; - var innerRad = this._innerRadius; - var xScale = 0.5*this._width - lineWidth, - yScale = 0.5*this._height - lineWidth; - - // translate - var xCtr = 0.5*world.getViewportWidth() + this._xOffset, - yCtr = 0.5*world.getViewportHeight() + this._yOffset; - var mat = Matrix.create( [ - [ xScale, 0.0, 0.0, xCtr], - [ 0.0, yScale, 0.0, yCtr], - [ 0.0, 0.0, 1.0, 0.0], - [ 0.0, 0.0, 0.0, 1.0] - ] ); - - // get a bezier representation of the circle - var bezPts = this.circularArcToBezier( [0,0,0], [1,0,0], 2.0*Math.PI ); - if (bezPts) - { - var n = bezPts.length; - - // set up the fill style - ctx.beginPath(); - ctx.lineWidth = 0; - if (this._fillColor) - { - var c = "rgba(" + 255*this._fillColor[0] + "," + 255*this._fillColor[1] + "," + 255*this._fillColor[2] + "," + this._fillColor[3] + ")"; - ctx.fillStyle = c; - - // draw the fill - ctx.beginPath(); - var p = this.transformPoint( bezPts[0], mat ); - ctx.moveTo( p[0], p[1] ); - var index = 1; - while (index < n) - { - p0 = this.transformPoint( bezPts[index], mat ); - p1 = this.transformPoint( bezPts[index+1], mat ); - - x0 = p0[0]; y0 = p0[1]; - x1 = p1[0]; y1 = p1[1]; - ctx.quadraticCurveTo( x0, y0, x1, y1 ); - index += 2; - } - - if ( innerRad > 0.001) - { - xScale = 0.5*innerRad*this._width; - yScale = 0.5*innerRad*this._height; - mat[0] = xScale; - mat[5] = yScale; - - // get the bezier points - var bezPts = this.circularArcToBezier( Vector.create([0,0,0]), Vector.create([1,0,0]), -2.0*Math.PI ); - if (bezPts) - { - var n = bezPts.length; - p = this.transformPoint( bezPts[0], mat ); - ctx.moveTo( p[0], p[1] ); - index = 1; - while (index < n) - { - p0 = this.transformPoint( bezPts[index], mat ); - p1 = this.transformPoint( bezPts[index+1], mat ); - - var x0 = p0[0], y0 = p0[1], - x1 = p1[0], y1 = p1[1]; - ctx.quadraticCurveTo( x0, y0, x1, y1 ); - index += 2; - } - } - } - - // fill the path - ctx.fill(); - } - - // calculate the stroke matrix - xScale = 0.5*this._width - 0.5*lineWidth; - yScale = 0.5*this._height - 0.5*lineWidth; - mat[0] = xScale; - mat[5] = yScale; - - // set up the stroke style - ctx.beginPath(); - ctx.lineWidth = lineWidth; - if (this._strokeColor) - { - var c = "rgba(" + 255*this._strokeColor[0] + "," + 255*this._strokeColor[1] + "," + 255*this._strokeColor[2] + "," + this._strokeColor[3] + ")"; - ctx.strokeStyle = c; - - // draw the stroke - p = this.transformPoint( bezPts[0], mat ); - ctx.moveTo( p[0], p[1] ); - index = 1; - while (index < n) - { - var p0 = this.transformPoint( bezPts[index], mat ); - var p1 = this.transformPoint( bezPts[index+1], mat ); - - var x0 = p0[0], y0 = p0[1], - x1 = p1[0], y1 = p1[1]; - ctx.quadraticCurveTo( x0, y0, x1, y1 ); - index += 2; - } - - if (innerRad > 0.01) - { - // calculate the stroke matrix - xScale = 0.5*innerRad*this._width - 0.5*lineWidth; - yScale = 0.5*innerRad*this._height - 0.5*lineWidth; - mat[0] = xScale; - mat[5] = yScale; - - // draw the stroke - p = this.transformPoint( bezPts[0], mat ); - ctx.moveTo( p[0], p[1] ); - index = 1; - while (index < n) - { - var p0 = this.transformPoint( bezPts[index], mat ); - var p1 = this.transformPoint( bezPts[index+1], mat ); - - var x0 = p0[0], y0 = p0[1], - x1 = p1[0], y1 = p1[1]; - ctx.quadraticCurveTo( x0, y0, x1, y1 ); - index += 2; - } - } - - // render the stroke - ctx.stroke(); - } - } - } - - /////////////////////////////////////////////////////////////////////// - // this function returns the quadratic Bezier approximation to the specified - // circular arc. The input can be 2D or 3D, determined by the minimum dimension - // of the center and start point. - // includedAngle is in radians, can be positiveor negative - this.circularArcToBezier= function( ctr_, startPt_, includedAngle ) - { - var dimen = 3; - var ctr = ctr_.slice(); - var startPt = startPt_.slice(); - - // make sure the start point is good - var pt = this.vecSubtract(dimen, startPt, ctr); - var rad = this.vecMag(dimen, pt); - - if ((dimen != 3) || (rad <= 0) || (includedAngle === 0)) - { - if (dimen != 3) console.log( "circularArcToBezier works for 3 dimensional points only. Was " + dimen ); - return [ startPt.slice(0), startPt.slice(0), startPt.slice(0) ]; - } - - // determine the number of segments. 45 degree span maximum. - var nSegs = Math.ceil( Math.abs(includedAngle)/(0.25*Math.PI) ); - if (nSegs <= 0) return [ startPt.slice(0), startPt.slice(0), startPt.slice(0) ]; - var dAngle = includedAngle/nSegs; - - // determine the length of the center control point from the circle center - var cs = Math.cos( 0.5*Math.abs(dAngle) ), sn = Math.sin( 0.5*Math.abs(dAngle) ); - var c = rad*sn; - var h = c*sn/cs; - var d = rad*cs + h; - - var rtnPts = [ this.vecAdd(dimen, pt, ctr) ]; - var rotMat = Matrix.RotationZ( dAngle ); - for ( var i=0; i